=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__