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