=head NAME: DESCRIPTION: 放大文字框 PARAMETER: [ { name : 'step_filter', title : '工作Step', type : 'LineEdit', property:{tool_tip:''} }, { name : 'ss_suffix', title : '分离文字字符层层后缀', type : 'LineEdit', property:{tool_tip:'如未设置,则默认为:-ref'}, }, { 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 2017-3-22 Cody Yu 1.新版本 HELP: <html><body bgcolor="#DDECFE"> <font size="3" color="#003DB2"><p>功能简介</p></font> <p> 文字框放大 </p> <br> <font size="3" color="#003DB2"><p>参数配置</p></font> <font color="#008000"><p> ● 无</p></font> <font size="3" color="#003DB2"><p>注意事项</p></font> <p> ● 无 </p> <br> </body></html> =cut use strict; use Encode; use utf8; use Data::Dump 'dump'; my ($Job,$Step) = ($JOB,undef); $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){ $PAR->{step_filter} = '.*' unless $PAR->{step_filter}; 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 eq 'c1' ? 'm1' : 'm2'; my $ref_layer = $layer.'-cover+'; next unless ( $GEN->isLayerExists(job=>$Job,layer=>$sm_layer) ); if( $layer =~ /^c2/ ){ $GEN->createLayer(job=>$Job,layer=>$ref_layer,context=>'misc',type=>'document',after=>$layer) unless( $GEN->isLayerExists(job=>$Job,layer=>$ref_layer) ); } else{ $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){ if ($GEN->isLayerExists(job=>$Job,layer=>$layer.$PAR->{ss_suffix})) { $GEN->copyLayer(source_job=>$Job,source_step=>$Step,source_layer=>$layer.$PAR->{ss_suffix},dest_layer=>$layer.'_tl+++',mode=>'replace',invert=>'no'); }else{ $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 = $work_layers[0].$PAR->{sm_ref}; if ($GEN->isLayerExists(job=>$Job,layer=>$work_layers[0].$PAR->{ss_suffix})) { $default_layer = $work_layers[0].$PAR->{ss_suffix}; } ## my ($tmp1,$tmp2) = ('tl_script_tmp1','tl_script_tmp2'); ## $GEN->deleteLayer(job=>$Job,layer=>[$tmp1,$tmp2],step=>$Step); #$GEN->createLayer(job=>$Job,layer=>$tmp1,context=>'misc',type=>'document'); #$GEN->createLayer(job=>$Job,layer=>$tmp2,context=>'misc',type=>'document'); ## $GEN->workLayer(name=>$default_layer,display_number=>1,clear_before=>'yes'); $GEN->displayLayer(name=>$ref_layer,number=>2) if( $GEN->isLayerExists(job=>$Job,layer=>$ref_layer)); my %info; $info{type} = 'silk_text'; $info{scale_type} = 'scale'; $info{x} = $info{y} = 1.05; $info{text_x} = $info{text_y} = 1.05; $info{text_space} = 10; while(1){ update_loading("请确认文字放大参数,不再继续制作请点取消!",0,position=>'n'); %info = $GUI->show_form( -title => '请确认信息:', -showcheck => 1,-gen=>$GEN, -defaultsize=>[380,300], -columns =>'2', -excludehideitem=>1, -items=>[ { name=>'type', label=>'类型', type=>'radio', col_span=>2, property=>{ tl_columns=>2, tl_list=>['silk_text'=>'放大字符','silk_frame'=>'放大文字框',], }, must_field=>1, value=>$info{type}, validate_func=>sub{ my %par=@_; return{} if $par{mode} eq 'save'; if (defined $par{value} and $par{value} eq 'silk_text'){ $par{formpanel}->set_item_visible(title2=>1); $par{formpanel}->set_item_visible(text_type=>1); $par{formpanel}->set_item_visible(title1=>0); $par{formpanel}->set_item_visible(scale_type=>0); $par{formpanel}->set_value(scale_type=>$info{scale_type}||'scale'); } else{ $par{formpanel}->set_item_visible(title2=>0); $par{formpanel}->set_item_visible(text_type=>0); $par{formpanel}->set_value(text_type=>$info{text_type}||'single'); $par{formpanel}->set_item_visible(title1=>1); $par{formpanel}->set_item_visible(scale_type=>1); } return {}; }, }, { name=>'title1', type=>'frame', property=>{label=>'放大字符框参数:'}, expand=>1, }, { name=>'scale_type', label=>'模式', type=>'radio', col_span=>2, property=>{ tl_columns=>2, tl_list=>['scale'=>'按比例放大','value'=>'按间距放大'], }, must_field=>1, value=>$info{scale_type}, validate_func=>sub{ my %par=@_; return{} if $par{mode} eq 'save'; if (defined $par{value} and $par{value} eq 'value'){ $par{formpanel}->set_item_visible(x=>0); $par{formpanel}->set_item_visible(y=>0); $par{formpanel}->set_item_visible(value_x=>1); $par{formpanel}->set_item_visible(value_y=>1); } else{ $par{formpanel}->set_item_visible(x=>1); $par{formpanel}->set_item_visible(y=>1); $par{formpanel}->set_item_visible(value_x=>0); $par{formpanel}->set_item_visible(value_y=>0); } return {}; }, }, { name => 'x', label => 'X', type => 'number', value=>$info{x}||1.05, visible_func => sub{ my %par = @_; my $value = $par{formpanel}->get_value('scale_type'); if ($value eq 'scale'){ return 'show'; } else{ return 'hide'; } }, }, { name => 'y', label => 'Y', type => 'number', value=>$info{y}||1.05, visible_func => sub{ my %par = @_; my $value = $par{formpanel}->get_value('scale_type'); if ($value eq 'scale'){ return 'show'; } else{ return 'hide'; } }, }, { name => 'value_x', label => 'X', type => 'number', units=>'mil', must_field=>1, value=>$info{value_x}, visible_func => sub{ my %par = @_; my $value = $par{formpanel}->get_value('scale_type'); if ($value eq 'value'){ return 'show'; } else{ return 'hide'; } }, }, { name => 'value_y', label => 'Y', type => 'number', units=>'mil', must_field=>1, value=>$info{value_y}, visible_func => sub{ my %par = @_; my $value = $par{formpanel}->get_value('scale_type'); if ($value eq 'value'){ return 'show'; } else{ return 'hide'; } }, }, { name=>'title2', type=>'frame', property=>{label=>'放大字符参数:'}, expand=>1, }, { name=>'text_type', label=>'模式', type=>'radio', col_span=>2, property=>{ tl_columns=>2, tl_list=>['layer'=>'自动放大','single'=>'单个放大'], }, must_field=>1, value=>$info{text_type}||'single', }, { name => 'text_x', label => 'X', type => 'number', value=>$info{text_x}||1.05, }, { name => 'text_y', label => 'Y', type => 'number', value=>$info{text_y}||1.05, }, { name => 'text_space', label => '字符间距', type => 'number', units=>'mil', value=>$info{text_space}||10, }, ] ); return $Return unless %info; if( $info{type} eq 'silk_frame' ){ $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'; } else{ if( $info{text_type} eq 'layer' ){ my $ans = enlarge_slik_layer(default_layer=>$default_layer,ref_layer=>$ref_layer,info=>\%info,tmp1=>$tmp1,tmp2=>$tmp2); return $ans if $ans; } else{ $default_layer = enlarge_text_single(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->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}; #$GUI->debug(dump('---111',$default_layer)); my $ref_layer = $par{ref_layer}; my %info = %{$par{info}}; my ($tmp1,$tmp2) = ($par{tmp1},$par{tmp2}); 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'); $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.$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"); } $work_layer = $GEN->getWorkLayer(); 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); } $GEN->deleteLayer(job=>$Job,layer=>[$text_tmp]); ## $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); 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); 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 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 ); ##获取涨缩信息 $GEN->affectedLayer(affected=>'yes',layer=>[$testlayer],clear_before=>'yes'); $GEN->selContourize(accuracy=>0.25,clean_hole_size=>3,clean_hole_mode=>'x_and_y'); $GEN->workLayer(name=>$curlayer,display_number=>1,clear_before=>'yes'); $GEN->affectedLayer(affected=>'yes',layer=>[$testlayer]); # $GEN->PAUSE('AAAAA'); my $index = 1; while( 1 ) { $GEN->COM("reset_filter_criteria,filter_name=popup,criteria=all"); $GEN->COM('filter_reset',filter_name=>'popup'); $GEN->COM("adv_filter_reset"); $GEN->COM("reset_filter_criteria,filter_name=,criteria=all"); $GEN->COM('adv_filter_set',filter_name=>'popup',update_popup=>'yes',indexes=>$index); $GEN->COM('filter_area_strt'); $GEN->COM('filter_area_end',layer=>$testlayer,filter_name=>'popup',operation=>'select',area_type=>'none',inside_area=>'no',intersect_area=>'no'); if ( $GEN->getSelectCount() > 0 ){ my $layer_limits = getLayerLimits(job=>$Job,step=>$Step,layer=>$testlayer,units=>$units,options => 'select'); $layer_limits->{xc} = $layer_limits->{xmin}+$layer_limits->{xsize}/2; $layer_limits->{yc} = $layer_limits->{ymin}+$layer_limits->{ysize}/2; $GEN->COM("adv_filter_reset"); $GEN->COM("reset_filter_criteria,filter_name=ref_select,criteria=all"); $GEN->COM("sel_ref_feat,layers=,use=select,mode=touch,pads_as=shape,f_types=line\;pad\;surface\;arc\;text,polarity=positive\;negative,include_syms=,exclude_syms="); 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}); } } else { last; } $index++; } #$GEN->COM('truncate_layer', layer =>$testlayer); $default_layer = $curlayer; $GEN->COM('disp_on'); $GEN->workLayer(name=>$curlayer,display_number=>1,clear_before=>'yes'); $GEN->displayLayer(name=>$ref_layer,number=>2) if( $GEN->isLayerExists(job=>$Job,layer=>$ref_layer)); 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)if( $GEN->isLayerExists(job=>$Job,layer=>$ref_layer)); 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) if( $GEN->isLayerExists(job=>$Job,layer=>$ref_layer)); $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; } ####GEN lib no options 属性 sub getLayerLimits { my %par = @_; $par{units} = 'inch' if (! defined $par{units}); my %return; $GEN->INFO( 'units'=>$par{units}, 'entity_type'=>'layer', 'entity_path'=>"$par{job}/$par{step}/$par{layer}", 'data_type'=>'limits', 'options' => $par{options} ); $return{xmin} = $GEN->{doinfo}{gLIMITSxmin}; $return{ymin} = $GEN->{doinfo}{gLIMITSymin}; $return{xmax} = $GEN->{doinfo}{gLIMITSxmax}; $return{ymax} = $GEN->{doinfo}{gLIMITSymax}; $return{xsize} = $return{xmax} - $return{xmin}; $return{ysize} = $return{ymax} - $return{ymin}; if (wantarray){ return %return; }else{ return {%return}; } } __END__