=head
NAME:
DESCRIPTION: 放大文字框
PARAMETER:
[
{
name : 'step_filter',
title : '工作Step',
type : 'LineEdit',
property:{tool_tip:''}
},
{
name : 'sm_ref',
title : '防焊参考层后缀',
type : 'LineEdit',
property:{tool_tip:'如未设置,则默认为:-ref'},
},
{
name : 'is_select_lyr',
type : 'RadioBox',
title : '是否选择层别',
property : {tool_tip:'未设定,则默认no',
size_policy:'Expanding,Fixed',item_list:[{name:'yes',text:'Yes'},{name:'no',text:'No'}]},
pack : {row:9,column:1},
},
{
name : 'del_backup',
type : 'RadioBox',
title : '删除TL备份层',
property : {tool_tip:'未设定,则默认yes',size_policy:'Expanding,Fixed',item_list:[{name:'yes',text:'Yes'},{name:'no',text:'No'}]},
pack : {row:9,column:1},
},
{
name : 'save_job',
title : '保存料号',
type : 'RadioBox',
property : {
size_policy:'Expanding,Fixed',
item_list:[
{name:'Yes',text:'Yes'},
{name:'No',text:'No'},
],
tool_tip:'脚本结束后自动保存料号,未设定,默认为No'
},
pack : {row:1,column:1},
}
]
VERSION_HISTORY:
V1.00 2019-6-28 Shyer
1.新版本
HELP:
功能简介
文字框放大
参数配置
● 无
注意事项
● 无
=cut
use strict;
use Encode;
use utf8;
use Data::Dump 'dump';
my ($Job,$Step) = ($JOB,undef);
$PAR->{step_filter} = '.*' unless $PAR->{step_filter};
$PAR->{is_select_lyr} = $PAR->{is_select_lyr} || 'no';
$PAR->{del_backup} = 'yes' unless $PAR->{del_backup};
$PAR->{sm_ref} = '-ref' unless $PAR->{sm_ref};
$PAR->{save_job} = 'No' unless $PAR->{save_job};
my $Return = 'done';
my $units = 'inch';
$PAR->{crate_tmp} = 'yes' unless $PAR->{crate_tmp};
$PAR->{tol} = 1;
try {
##
show_loading("判断是否选择料号..",0,position=>'n');
unless( $Job){
$GUI->msgbox(-icon=>'error',-text=>"请先选择料号后再执行脚本!");
return 'Cancel';
}
update_loading("检查${Job}是否存在..",0,position=>'n');
##检查料号是否存在
unless ( $GEN->isJobExists(job=>$Job) ){
$GUI->msgbox(-icon=>'error',-text=>"料号 $Job 不存在,请确认。");
return 'Cancel';
}
update_loading("正在打开料号$Job...",0,position=>'n');
$GEN->openJob(job=>$Job) unless ($GEN->isJobOpen(job=>$Job));
###选择工作step
update_loading("过滤工作step...",0,position=>'n');
my @steps = $GEN->getStepList(job=>$Job);
if ( @steps == 0 ) {
$GUI->msgbox(-icon=>'error',-text=>'在料号中没有Step存在,你将退出!');
return 0;
}
elsif (@steps != 1){
my @tmp_steps = grep(/$PAR->{step_filter}/,@steps);
if ( @tmp_steps == 0 ) {
$GUI->msgbox(-icon=>'warning',-text=>'根据脚本参数过滤出来的step不存在,请检查资料或者脚本参数配置!');
return 'Cancel';
}
elsif ( @tmp_steps == 1 ) {
$Step = $tmp_steps[0];
}
else {
$Step = $GUI->select_step(-title=>'请选择工作Step',
-steplist=>[@tmp_steps],
-selectmode=>'single');
return 'Cancel' unless ($Step);
}
}
else {
$Step = $steps[0];
}
$GEN->openStep(job=>$Job,name=>$Step);
$GEN->clearLayers();
$GEN->affectedLayer( mode=>'all',affected=>'no' );
$GEN->COM( "sel_options,clear_mode=clear_after,display_mode=all_layers,area_inout=inside,area_select=select,select_mode=standard,area_touching_mode=exclude");
$GEN->units( type=>$units );
$GEN->zoomHome();
##过滤 board layers
update_loading("过滤工作层...",0,position=>'n');
my @work_layers = get_work_layer();
return 'Cancel' if $work_layers[0] eq 'Cancel';
##创建辅助层
$PAR->{crate_tmp} = 'no';
if( $PAR->{crate_tmp} =~ /yes/i ){
update_loading("正在创建文字层对应的防焊参考层,请稍候...",0,position=>'n');
foreach my $layer(@work_layers){
my $sm_layer = $layer =~ /gto/ ? 'gts' : 'gbs';
my $ref_layer = $layer.$PAR->{sm_ref};
next unless ( $GEN->isLayerExists(job=>$Job,layer=>$sm_layer) );
$GEN->createLayer(job=>$Job,layer=>$ref_layer,context=>'misc',type=>'document',before=>$layer) unless( $GEN->isLayerExists(job=>$Job,layer=>$ref_layer) );
$GEN->copyLayer(source_job=>$Job,source_step=>$Step,source_layer=>$sm_layer,dest_layer=>$ref_layer,mode=>'replace',invert=>'no');
$GEN->affectedLayer(affected=>'yes',layer=>[$ref_layer],clear_before=>'yes');
$GEN->selContourize();
$GEN->COM('sel_resize',size=>10,corner_ctl=>'no');
}
}
foreach my $layer(@work_layers){
$GEN->copyLayer(source_job=>$Job,source_step=>$Step,source_layer=>$layer,dest_layer=>$layer.'_tl+++',mode=>'replace',invert=>'no');
}
# 开始放大文字框
my $default_layer = $work_layers[0];
my $ref_layer = $default_layer.$PAR->{sm_ref};
##
my ($tmp1,$tmp2) = ('tl_script_tmp1','tl_script_tmp2');
##
$GEN->deleteLayer(job=>$Job,layer=>[$tmp1,$tmp2],step=>$Step);
$GEN->workLayer(name=>$default_layer,display_number=>1,clear_before=>'yes');
$GEN->displayLayer(name=>$ref_layer,number=>2);
my %info;
$info{type} = 'silk_frame';
$info{scale_type} = 'scale';
$info{x} = $info{y} = 1.05;
$info{text_x} = $info{text_y} = 1.05;
$info{text_space} = 10;
$default_layer = enlarge_slik_frame(default_layer=>$default_layer,ref_layer=>$ref_layer,info=>\%info,tmp1=>$tmp1,tmp2=>$tmp2);
return $default_layer if $default_layer eq 'Cancel';
$GEN->deleteLayer(job=>$Job,layer=>[$tmp1,$tmp2],step=>$Step);
if ($PAR->{del_backup} eq 'yes'){
foreach my $layer(@work_layers){
$GEN->deleteLayer(job=>$Job,layer=>[$layer.'_tl+++']) ;
}
}
$GEN->COM( "sel_single_feat,operation=select,x=-10,y=-10,cyclic=no ");
$GEN->affectedLayer(mode=>'all',affected=>'no');
update_loading("【 放大文字框 】完成..",1,position=>'n');
hide_loading();
##保存料号
if( $PAR->{save_job} =~ /yes/i ){
show_loading("$Job 正在保存料号,请稍候...",0,position=>'n');
$GEN->checkInout(job=>$Job,mode=>'out');
$GEN->saveJob(job=>$Job);
hide_loading();
}
unless ($GEN->{STATUS}){
return $Return;
}
else{
$GEN->COM('disp_on');
$GUI->msgbox(-icon=>'error',-text=>join("\n",@{$GEN->{STATUS}}));
#addFlowNotes(-notes=>" Genesis Error:\n ".join("\n ",@{$GEN->{STATUS}}));
return 'Error';
}
}
catch Error::Simple with {
my $error = shift;
$GEN->COM('disp_on');
$GUI->msgbox(-icon=>'error',-text=>$error);
return 'Error';
}
finally{
$GEN->COM('disp_on');
};
sub get_work_layer{
my %par = @_;
update_loading("过滤层别...",0,position=>'n');
my @silk;
# 获取工作层
my %matrix = $GEN->getMatrix(job=>$Job,type=>'hash');
foreach my $layer (sort {$matrix{$a}{row} <=> $matrix{$b}{row}} keys %matrix) {
if(defined($matrix{$layer}{context}) and $matrix{$layer}{context} eq 'board' ){
if(defined($matrix{$layer}{tl_type}) and $matrix{$layer}{tl_type} eq 'silk_screen' ){
push @silk,$layer;
}
}
}
unless( @silk ){
$GUI->msgbox(-icon=>'warning',-text=>'资料中无文字层,请确认');
return 'Cancel';
}
if ($PAR->{is_select_lyr} eq 'yes' and scalar @silk > 1) {
my (%tmp_matrix);
foreach my $layer (@silk) {
$tmp_matrix{$layer} = $matrix{$layer};
}
@silk = $GUI->select_layer(
-title=>'请选择工作层别',
-layermatrix=>\%tmp_matrix,
-selectmode => 'multiple');#single
return 'Cancel' unless(@silk);
}
return @silk;
}
sub enlarge_slik_frame{
my %par = @_;
my $default_layer = $par{default_layer};
my $ref_layer = $par{ref_layer};
my %info = %{$par{info}};
my ($tmp1,$tmp2) = ($par{tmp1},$par{tmp2});
my $ref_pad = 'tmp_ref_pad';
unless ( $GEN->isLayerExists(job=>$Job,layer=>$ref_pad) ) {
$GEN->createLayer(job=>$Job,layer=>$ref_pad,context=>'misc',type=>'document');
}
while(1){
#$GEN->affectedLayer(affected=>'yes',layer=>[$tmp1,$tmp2],clear_before=>'yes');
#$GEN->selDelete();
my $work_layer;
if( $default_layer ){
$work_layer = $default_layer;
$GEN->workLayer(name=>$work_layer,display_number=>1,clear_before=>'yes');
}
else{
while(1){
$work_layer = $GEN->getWorkLayer();
last if $work_layer;
update_loading("请选择一个文字层设为工作层",0,position=>'n');
my $ans = $GEN->PAUSE('Please Set Work Layer');
return 'Cancel' unless $ans eq 'OK';
}
}
$ref_layer = $work_layer.$PAR->{sm_ref};
$GEN->displayLayer(name=>$ref_layer,number=>2)if ( $GEN->isLayerExists(job=>$Job,layer=>$ref_layer) );
update_loading("请选择需放大的文字框,不需制作了请【左键框选空白处】",0,position=>'n');
my %tmp_con;
#if($info{scale_type} eq 'scale'){
# %tmp_con = $GEN->MOUSE(type=>'r',text=>"Please Select! Scale x:$info{x} y:$info{y}");
#}
#else{
# %tmp_con = $GEN->MOUSE(type=>'r',text=>"Please Select! Space x:$info{value_x} mil y:$info{value_y} mil");
#}
%tmp_con = $GEN->MOUSE(type=>'r',text=>"Please Select");
$GEN->COM('disp_off');
$work_layer = $GEN->getWorkLayer();
$ref_layer = $work_layer.$PAR->{sm_ref};
unless( defined $work_layer ){
$GUI->msgbox(-icon=>'warning',-text=>'没有设定工作层,程序无法继续下去!');
return 'Cancel';
}
if ( $GEN->getSelectCount() > 0 ){
$GEN->selCopyOther(target_layer=>$tmp1,invert=>'no');
$GEN->copyLayer(source_job=>$Job,source_step=>$Step,source_layer=>$tmp1,dest_layer=>$tmp2,mode=>'replace',invert=>'no');
}
else{
$GEN->workLayer(name=>$work_layer,display_number=>1,clear_before=>'yes');
$GEN->selectByFilter(area_rect=>\%tmp_con);
if ( $GEN->getSelectCount() > 0 ){
$GEN->selCopyOther(target_layer=>$tmp1,invert=>'no');
$GEN->copyLayer(source_job=>$Job,source_step=>$Step,source_layer=>$tmp1,dest_layer=>$tmp2,mode=>'replace',invert=>'no');
}
else{
$GEN->workLayer(name=>$work_layer,display_number=>1,clear_before=>'yes');
$GEN->displayLayer(name=>$ref_layer,number=>2)if ( $GEN->isLayerExists(job=>$Job,layer=>$ref_layer) );
$default_layer = $GEN->getWorkLayer();
last;
}
}
#$GEN->COM('disp_off');
$GEN->units( type=>$units );
##获取涨缩信息
my $text_tmp = 'tl_tmp_text';
$GEN->copyLayer(source_job=>$Job,source_step=>$Step,source_layer=>$tmp1,dest_layer=>$text_tmp,mode=>'replace',invert=>'no');
#$GEN->affectedLayer(affected=>'yes',layer=>[$text_tmp],clear_before=>'yes');
#$GEN->selectByFilter(feat_types=>'line\;arc',polarity=>'positive',profile=>'all');
#$GEN->COM('sel_change_sym', symbol => 'r0')if ( $GEN->getSelectCount() > 0 );
my $layer_limits = $GEN->getLayerLimits(job=>$Job,step=>$Step,layer=>$text_tmp,units=>$units);
$layer_limits->{xc} = $layer_limits->{xmin}+$layer_limits->{xsize}/2;
$layer_limits->{yc} = $layer_limits->{ymin}+$layer_limits->{ysize}/2;
my ($scalex,$scaley);
#if( $info{scale_type} eq 'scale' ){
# $scalex = $info{x};
# $scaley = $info{y};
#}
#else{
# #my $new_limits;
# #$new_limits->{xsize} = $layer_limits->{xsize}+($info{value_x}/1000)*2;
# #$new_limits->{ysize} = $layer_limits->{ysize}+($info{value_y}/1000)*2;
# #$scalex = $new_limits->{xsize}/$layer_limits->{xsize};
# #$scaley = $new_limits->{ysize}/$layer_limits->{ysize};
# $scalex = 1 + ($info{value_x}*2)/($layer_limits->{xsize}*1000);
# $scaley = 1 + ($info{value_y}*2)/($layer_limits->{ysize}*1000);
#}
##自动计算放大比例
unless ( $GEN->isLayerEmpty( job=>$Job,step=>$Step,layer=>$ref_pad) ){
$GEN->affectedLayer(affected=>'yes',layer=>[$ref_pad],clear_before=>'yes');
$GEN->selDelete();
}
#filter_area_strt (1)
#filter_area_xy,x=0.6067275591,y=3.6900447835 (1)
#filter_area_xy,x=0.6735154528,y=3.6237707677 (1)
#filter_area_end,layer=,filter_name=popup,operation=select,area_type=rectangle,inside_area=yes,intersect_area=yes (1)
$GEN->affectedLayer(affected=>'yes',layer=>[$ref_layer],clear_before=>'yes');
$GEN->selectByFilter(area_rect=>{x1=>$layer_limits->{xmin}-0.01,y1=>$layer_limits->{ymin}-0.01,x2=>$layer_limits->{xmax}+0.01,y2=>$layer_limits->{ymax}+0.01});
#$GEN->selectByFilter(area_rect=>{x1=>0,y1=>0,x2=>10,y2=>10});
if ( $GEN->getSelectCount() > 0 ){
$GEN->selCopyOther(target_layer=>$ref_pad,invert=>'no');
my $layer_limits_pad = $GEN->getLayerLimits(job=>$Job,step=>$Step,layer=>$ref_pad,units=>$units);
my @feature = $GEN->getFeatures(job=>$Job,step=>$Step,layer=>$tmp1,units=>$units);
my $line_width = $feature[0]->{symbol};
$line_width =~ s/^r//;
$line_width = $line_width/1000;
$scalex = ($layer_limits_pad->{xsize}+$line_width*2+0.004)/($layer_limits->{xsize});
$scalex = 1 if $scalex < 1;
$scaley = ($layer_limits_pad->{ysize}+$line_width*2+0.004)/($layer_limits->{ysize});
$scaley = 1 if $scaley < 1;
$GUI->debug(dump($layer_limits_pad));
$GUI->debug(dump($line_width));
$GUI->debug(dump($layer_limits));
# layer_limits_pad : {xmax:"2.886225",xmin:"2.7043351",xsize:"0.1818899",ymax:"3.4059092",ymin:"3.3263816",ysize:"0.0795276"}
# line_width : 0.007
# layer_limits : {xc:"2.795536",xmax:"2.8947643",xmin:"2.6963077",xsize:"0.1984566",yc:"3.36614535",ymax:"3.4139367",ymin:"3.318354",ysize:"0.0955826999999996"}
# (scalex:"1.00722223397962", "====", scaley:"1.02034782444941")
}
#else{
# next;
#}
##
$GEN->deleteLayer(job=>$Job,layer=>[$text_tmp]);
##
$GEN->affectedLayer(affected=>'yes',layer=>[$tmp1],clear_before=>'yes');
$GEN->selTransform(mode=>'anchor',oper=>'scale',x_anchor=>$layer_limits->{xc},y_anchor=>$layer_limits->{yc},x_scale=>$scalex,y_scale=>$scaley) if(!$GEN->isLayerEmpty( job=>$Job,step=>$Step,layer=>$ref_pad));
check_alone_feature_and_chage(layer=>$tmp1,sacle_x=>$scalex,sacle_y=>$scalex);
$GEN->workLayer(name=>$tmp1,display_number=>1,clear_before=>'yes');
$GEN->displayLayer(name=>$work_layer,number=>2);
$GEN->displayLayer(name=>$ref_layer,number=>3)if(!$GEN->isLayerEmpty( job=>$Job,step=>$Step,layer=>$ref_pad));
$GEN->COM('disp_on');
update_loading("请确认扩大后文字框是否符合要求(文字框未碰到防焊时,文字框无变化)",0,position=>'n');
my $ans = $GEN->PAUSE('Please Check...');
return 'Cancel' unless $ans eq 'OK';
$GEN->COM('disp_off');
my $tmp_symbol = 'tl_script_tmp';
#$GEN->COM( "delete_entity,job=$Job,type=symbol,name=$tmp_symbol" ) if( $GEN->isSymbolExists(job=>$Job,symbol=>$tmp_symbol) );
$GEN->COM('sel_all_feat');
$GEN->COM( "sel_create_sym,symbol=$tmp_symbol,x_datum=0,y_datum=0,delete=no,fill_dx=0.1,fill_dy=0.1,attach_atr=no,retain_atr=no" );
$GEN->workLayer(name=>$work_layer,display_number=>1,clear_before=>'yes');
$GEN->selRefFeat(layers=>$tmp2,use=>'filter',mode=>'cover');
$GEN->COM( "sel_substitute,mode=substitute,symbol=$tmp_symbol,tol=$PAR->{tol},x_datum=0,y_datum=0,dcode=0" );
$GEN->selectByFilter(include_syms=>$tmp_symbol);
$GEN->selBreak()if ( $GEN->getSelectCount() > 0 );
$GEN->COM('disp_on');
$default_layer = $GEN->getWorkLayer();
$GEN->COM('truncate_layer', layer =>$tmp1);
$GEN->COM('truncate_layer', layer =>$tmp2);
$GEN->COM('disp_on');
$GEN->COM('sel_clear_feat');
if( $GEN->{STATUS} ){
#$GEN->COM('disp_on');
$GUI->msgbox(-icon=>'error',-text=>join("\n",@{$GEN->{STATUS}}));
return 'Error';
}
$GEN->units(type=>$units);
}
$GEN->deleteLayer(job=>$Job,layer=>[$ref_pad]);
return $default_layer;
}
sub enlarge_slik_layer{
my %par = @_;
my $default_layer = $par{default_layer};
my %info = %{$par{info}};
my ($curlayer,$testlayer) = ($par{tmp1},$par{tmp2});
while(1){
update_loading("请将需要放大的文字move到一个辅助层上并设为工作层...",0,position=>'n');
my $ans = $GEN->PAUSE('Please Set Layer');
return 'Cancel' unless $ans eq 'OK';
$curlayer = $GEN->getWorkLayer();
last unless $curlayer;
unless ( $GEN->isLayerEmpty( job=>$Job,step=>$Step,layer=>$curlayer) ){
$GEN->affectedLayer(affected=>'yes',layer=>[$curlayer],clear_before=>'yes');
$GEN->selCopyOther(target_layer=>$testlayer,invert=>'no',size=>$info{text_space});
}
else{
last;
}
update_loading("正在放大$curlayer 层上字符,请稍候...",0,position=>'n');
my $ref_layer = 'tl_silk_layer';
$GEN->copyLayer(source_job=>$Job,source_step=>$Step,source_layer=>$curlayer,dest_layer=>$ref_layer,mode=>'replace',invert=>'no');
$GEN->COM('disp_off');
$GEN->units( type=>$units );
my $testlayer1 = 'tl_tmp_text';
$GEN->deleteLayer(job=>$Job,layer=>[$testlayer1]);
##获取涨缩信息
my @feature = $GEN->getFeatures(job=>$Job,step=>$Step,layer=>$testlayer,units=>$units);
foreach my $feat(@feature){
$GEN->affectedLayer(affected=>'yes',layer=>[$testlayer],clear_before=>'yes');
$GEN->COM('sel_net_feat', operation => 'select',x=>$feat->{xs},y=>$feat->{ys},tol=> '2.2');
if ( $GEN->getSelectCount() > 0 ){
$GEN->selMoveOther(target_layer=>$testlayer1,invert=>'no');
my $layer_limits = $GEN->getLayerLimits(job=>$Job,step=>$Step,layer=>$testlayer1,units=>$units);
$layer_limits->{xc} = $layer_limits->{xmin}+$layer_limits->{xsize}/2;
$layer_limits->{yc} = $layer_limits->{ymin}+$layer_limits->{ysize}/2;
$GEN->affectedLayer(affected=>'yes',layer=>[$curlayer],clear_before=>'yes');
$GEN->selRefFeat(layers=>$testlayer1,use=>'filter',mode=>'touch');
if ( $GEN->getSelectCount() > 0 ){
$GEN->selTransform(mode=>'anchor',oper=>'scale',x_anchor=>$layer_limits->{xc},y_anchor=>$layer_limits->{yc},x_scale=>$info{text_x},y_scale=>$info{text_y});
}
$GEN->COM('truncate_layer', layer =>$testlayer1);
}
}
$GEN->COM('truncate_layer', layer =>$testlayer);
$GEN->deleteLayer(job=>$Job,layer=>[$testlayer1]);
$default_layer = $curlayer;
$GEN->COM('disp_on');
$GEN->workLayer(name=>$curlayer,display_number=>1,clear_before=>'yes');
$GEN->displayLayer(name=>$ref_layer,number=>2);
update_loading("请确认$curlayer 文字放大结果并制作到正式文字层...",0,position=>'n');
$ans = $GEN->PAUSE('Please Check');
return 'Cancel' unless $ans eq 'OK';
#$GEN->COM('truncate_layer', layer =>$curlayer);
$GEN->deleteLayer(job=>$Job,layer=>[$ref_layer]);
$GEN->clearLayers();
$GEN->affectedLayer( mode=>'all',affected=>'no' );
if( $GEN->{STATUS} ){
$GUI->msgbox(-icon=>'error',-text=>join("\n",@{$GEN->{STATUS}}));
return 'Error';
}
$GEN->units(type=>$units);
}
return undef;
}
sub enlarge_text_single{
my %par = @_;
my $default_layer = $par{default_layer};
my $ref_layer = $par{ref_layer};
my %info = %{$par{info}};
my ($tmp1,$tmp2) = ($par{tmp1},$par{tmp2});
while(1){
my $work_layer;
if( $default_layer ){
$work_layer = $default_layer;
$GEN->workLayer(name=>$work_layer,display_number=>1,clear_before=>'yes');
$default_layer = undef;
}
else{
while(1){
$work_layer = $GEN->getWorkLayer();
last if $work_layer;
update_loading("请选择一个文字层设为工作层",0,position=>'n');
my $ans = $GEN->PAUSE('Please Set Work Layer');
return 'Cancel' unless $ans eq 'OK';
}
}
$ref_layer = $work_layer.'_tl+++';
$GEN->displayLayer(name=>$ref_layer,number=>2);
update_loading("请选择需按当前比例放大的字符,不需制作了请【左键框选空白处】",0,position=>'n');
my %tmp_con = $GEN->MOUSE(type=>'r',text=>"Please Select! Scale x:$info{text_x} y:$info{text_y}");
$work_layer = $GEN->getWorkLayer();
unless( defined $work_layer ){
$GUI->msgbox(-icon=>'warning',-text=>'没有设定工作层,程序无法继续下去!');
return 'Cancel';
}
if ( $GEN->getSelectCount() > 0 ){
$GEN->selMoveOther(target_layer=>$tmp1,invert=>'no');
#$GEN->copyLayer(source_job=>$Job,source_step=>$Step,source_layer=>$tmp1,dest_layer=>$tmp2,mode=>'replace',invert=>'no');
}
else{
$GEN->workLayer(name=>$work_layer,display_number=>1,clear_before=>'yes');
$GEN->selectByFilter(area_rect=>\%tmp_con);
if ( $GEN->getSelectCount() > 0 ){
$GEN->selMoveOther(target_layer=>$tmp1,invert=>'no');
#$GEN->copyLayer(source_job=>$Job,source_step=>$Step,source_layer=>$tmp1,dest_layer=>$tmp2,mode=>'replace',invert=>'no');
}
else{
$GEN->workLayer(name=>$work_layer,display_number=>1,clear_before=>'yes');
$GEN->displayLayer(name=>$ref_layer,number=>2);
$default_layer = $GEN->getWorkLayer();
last;
}
}
$GEN->COM('disp_off');
$GEN->units( type=>$units );
##获取涨缩信息
$GEN->affectedLayer(affected=>'yes',layer=>[$tmp1],clear_before=>'yes');
my $layer_limits = $GEN->getLayerLimits(job=>$Job,step=>$Step,layer=>$tmp1,units=>$units);
$layer_limits->{xc} = $layer_limits->{xmin}+$layer_limits->{xsize}/2;
$layer_limits->{yc} = $layer_limits->{ymin}+$layer_limits->{ysize}/2;
my ($scalex,$scaley) = ($info{text_x},$info{text_y});
##
$GEN->workLayer(name=>$tmp1,display_number=>1,clear_before=>'yes');
$GEN->selTransform(mode=>'anchor',oper=>'scale',x_anchor=>$layer_limits->{xc},y_anchor=>$layer_limits->{yc},x_scale=>$scalex,y_scale=>$scaley);
$GEN->selMoveOther(target_layer=>$work_layer,invert=>'no');
$default_layer = $work_layer;
$GEN->COM('truncate_layer', layer =>$tmp1);
$GEN->COM('disp_on');
if( $GEN->{STATUS} ){
$GEN->COM('disp_on');
$GUI->msgbox(-icon=>'error',-text=>join("\n",@{$GEN->{STATUS}}));
return 'Error';
}
$GEN->units(type=>$units);
}
return $default_layer;
}
sub check_alone_feature_and_chage{
#检查是否含单根线
my %tmp = @_;
my $layer = $tmp{layer};
my $tmp = 'tl-'.$layer.'tmp1++';
my $tmp2 = 'tl-'.$layer.'tmp2++';
my $tmp3 = 'tl-'.$layer.'-alone';
my $cale_x = $tmp{sacle_x}||1;
my $cale_y = $tmp{sacle_y}||1;
$GEN->createLayer(job=>$Job,layer=>$tmp,context=>'misc',type=>'document',delete_exists=>'yes');
$GEN->createLayer(job=>$Job,layer=>$tmp3,context=>'misc',type=>'document',delete_exists=>'yes');
$GEN->selCopyOther(target_layer=>$tmp,invert=>'no');
$GEN->affectedLayer(affected=>'yes',mode=>'single',layer=>$tmp,clear_before=>'yes');
$GEN->selContourize();
$GEN->DO_INFO("-t layer -e $Job/$Step/$tmp -d FEAT_HIST");
if ($GEN->{doinfo}{gFEAT_HISTsurf} > 0) {
for(my $i=1;$i <= $GEN->{doinfo}{gFEAT_HISTsurf};$i++){
$GEN->createLayer(job=>$Job,layer=>$tmp2,context=>'misc',type=>'document',delete_exists=>'yes');
$GEN->affectedLayer(affected=>'yes',mode=>'single',layer=>$tmp,clear_before=>'yes');
$GEN->COM('sel_layer_feat',operation=>'select',layer=>$tmp,index=>$i);
$GEN->selCopyOther(target_layer=>$tmp2,invert=>'no');
$GEN->affectedLayer(affected=>'yes',mode=>'single',layer=>$tmp2,clear_before=>'yes');
$GEN->COM('sel_surf2outline',width=>1);
$GEN->COM('filter_reset',filter_name=>'popup');
$GEN->selectByFilter(feat_types=>'arc',polarity=>'positive',profile=>'all');
$GEN->selDelete() if $GEN->getSelectCount() > 0 ;#--->删掉圆弧
my @feat = $GEN->getFeatures(job=>$Job,step=>$Step,layer=>$tmp2);
my %hash;
for(my $i=0;$i < @feat;$i++){
for(my $k = $i+1;$k < @feat; $k++){
if (($feat[$i]->{xs} eq $feat[$k]->{xs} && $feat[$i]->{ys} eq $feat[$k]->{ys}) ||
($feat[$i]->{xs} eq $feat[$k]->{xe} && $feat[$i]->{ys} eq $feat[$k]->{ye}) ){
$hash{$i.'star'}{x} = $feat[$i]->{xs};
$hash{$i.'star'}{y} = $feat[$i]->{ys};
}
if (($feat[$i]->{xe} eq $feat[$k]->{xs} && $feat[$i]->{ye} eq $feat[$k]->{ys}) ||
($feat[$i]->{xe} eq $feat[$k]->{xe} && $feat[$i]->{ye} eq $feat[$k]->{ye})) {
$hash{$i.'end'}{x} = $feat[$i]->{xe};
$hash{$i.'end'}{y} = $feat[$i]->{ye};
}
}
}
if (scalar(keys %hash) == 0) {
$GEN->affectedLayer(affected=>'yes',mode=>'single',layer=>$layer,clear_before=>'yes');
$GEN->selRefFeat(layers=>$tmp2,use=>'filter',mode=>'touch');
if ( $GEN->getSelectCount() > 0 ){
$GEN->COM('sel_move_other',target_layer=>$tmp3,invert=>'no',dx=>0,dy=>0,size=>0,x_anchor=>0,y_anchor=>0,rotation=>0,mirror=>'none');
my $change_scal_x = sprintf("%.3f",1 / $cale_x);
my $change_scal_y = sprintf("%.3f",1 / $cale_y);
$GEN->affectedLayer(affected=>'yes',mode=>'single',layer=>$tmp3,clear_before=>'yes');
$GEN->selTransform(mode=>'axis',oper=>'scale',x_anchor=>0,y_anchor=>0,x_scale=>$change_scal_x,y_scale=>$change_scal_y);
$GEN->COM('sel_move_other',target_layer=>$layer,invert=>'no',dx=>0,dy=>0,size=>0,x_anchor=>0,y_anchor=>0,rotation=>0,mirror=>'none');
$GEN->deleteLayer(job=>$Job,layer=>$tmp3,step=>$Step);
}
}
}
$GEN->deleteLayer(job=>$Job,layer=>$tmp2,step=>$Step);
$GEN->deleteLayer(job=>$Job,layer=>$tmp,step=>$Step);
}else{
$GEN->deleteLayer(job=>$Job,layer=>$tmp,step=>$Step);
if ($GEN->isLayerEmpty(job=>$Job,step=>$Step,layer=>$tmp3)) {
$GEN->deleteLayer(job=>$Job,layer=>$tmp3,step=>$Step);
}
}
}
__END__