=head NAME:ZWZ_output_rou DESCRIPTION: 锣带输出 PARAMETER: [ { name : 'Outpath', type : 'LineEdit', title : 'path', pack : {row:0,column:1}, property:{tool_tip:''}, }, ] VERSION_HISTORY: V1.01 2020-12-03 Super 1.新版本 HELP:

功能简介

钻孔表输出


参数配置

● 无

注意事项

● 无


=cut use strict; use utf8; use Encode; use Data::Dump 'dump'; use Number::Format 'round'; use File::Path 'make_path'; use File::Copy; use Win32::OLE::Const ; my $EX_OB = Win32::OLE->new('Excel.Application', 'Quit'); my $const = Win32::OLE::Const->Load($EX_OB); use_module('TL_GenMath'); use_module('TL_OLE_Excel'); my $json = new JSON; my $obj = TL::GenMath->new(); my $Job = $JOB; my $Step = $PAR->{step_filter} = $PAR->{step_filter} ? $PAR->{step_filter} : '.*'; my $Return = 'done'; my $tmp_layer = 'tl_tmp_layer'; my @rou_layer; try{ if (! $GEN->isJobExists(job=>$Job) ){ $GUI->msgbox(-icon=>'error',-text=>"料号 $Job 在Genesis中不存在, 请检查!"); return 'Error'; } $GEN->openJob(job=>$Job) unless ($GEN->isJobOpen(job=>$Job)); update_loading("过滤工作step...",0,position=>'n'); my $return = get_work_step(); return 'Cancel' if $return eq 'Cancel'; $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=>'mm' ); $GEN->zoomHome(); update_loading("确认输出参数...",0,position=>'n'); 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($matrix{$layer}{layer_type} eq 'rout'){ push @rou_layer,$layer; } } } my $info = confirm_gui(layers=>[@rou_layer]); return unless ($info); update_loading("rou输出中...",0,position=>'n'); output_rou(job=>$Job,step=>$Step,info=>$info); update_loading("资料回读中...",0,position=>'n'); input_layers(job=>$Job,step=>$Step,info=>$info); ###output and return status, if genesis error, it will output genesis error command unless ($GEN->{STATUS}){ show_loading("资料输出完成....!",0,position=>'center'); sleep(1); return $Return; } else{ $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 = encode("utf8",shift); $GUI->msgbox(-icon=>'error',-text=>$error); return 'Error'; } finally{ }; =head rou输出 =cut sub output_rou { my %par = @_; my $info = $par{info}; my $PL = $GEN->getProfileLimits(job=>$Job,step=>$Step,units=>'mm'); my $nc_set = 'zwz'; my $machine = 'sintai_excellon'; foreach my $layer (values %{$info->{layer_info}}) { next if ($layer->{output_flag} !~ /^yes$/i); $GEN->DO_INFO("-t layer -e $Job/$Step/$layer->{layer_name} -d NCRSETS_LIST"); if( @{$GEN->{doinfo}{gNCRSETS_LIST}} ){ if (grep (/^($nc_set)$/,@{$GEN->{doinfo}{gNCRSETS_LIST}})) { $GEN->COM('ncrset_delete',name=>$nc_set); } } $GEN->COM('ncrset_cur',job=>$Job,step=>$Step,layer=>$layer->{layer_name},ncset=>$nc_set); $GEN->COM('ncr_set_machine',machine=>$machine,thickness=>0); $GEN->COM('ncr_register',angle=>0,mirror=>$layer->{is_mirror},xoff=>0,yoff=>0,version=>1,xorigin=>0,yorigin=>0,xscale=>$layer->{scale_x},yscale=>$layer->{scale_y},xscale_o=>0,yscale_o=>0); $GEN->COM('ncr_cre_rout'); $GEN->COM('ncr_ncf_export',dir=>$info->{output_path},name=>$info->{prefix}.'.'.$layer->{layer_name}); $GEN->COM('ncrset_delete',name=>$nc_set); } unless ($GEN->{STATUS}){ return ; } } =head 用户配置参数 =cut sub confirm_gui { my %par = @_; my ($rows,$n); my $cam = $IKM->get_jobinfo(-jobname=>$Job,-jobid=>$JOB_ID,-jobcategory=>'work',-jobinfo=>'cam_serial_number',-withspec=>1); my $folder = 'rou'; my $path = $PAR->{Outpath}."$cam/$folder"; make_path($path); foreach my $layer (@{$par{layers}}) { $n ++; $rows->{$n}{sequence} = $n; $rows->{$n}{layer_name} = $layer; $rows->{$n}{scale_x} = 1; $rows->{$n}{scale_y} = 1; $rows->{$n}{output_flag} = 'Yes'; $rows->{$n}{is_mirror} = 'no'; } my $v_data = $GUI->show_form( -title=>"Rou输出参数确认单", -defaultsize=>[520,500], -items=> [ { type => 'title', property=>{ title=>'输出料号和名称', }, n_columns=>2, }, { name => 'prefix', label => '输出档名:', type => 'string', value=>$cam, width=>100, must_field=>1, }, { type => 'title', property=>{ title=>'参数确认', }, n_columns=>8, }, { name => 'layer_info', label =>'参数确认', label_position => 'no', class => 'TL::Gtk2::TableFormPanel', expand => 1, property => { tl_columns =>[ { column_name=>'layer_name', label=>'层别名称', width=>100, type=>'label', }, { column_name=>'scale_x', label=>'涨缩值X', width=>80, type=>'number', must_field=>1, }, { column_name=>'scale_y', label=>'涨缩值Y', width=>80, type=>'number', must_field=>1, }, { column_name=>'output_flag', label=>'是否输出', width=>80, type=>'radio', property=>{ tl_columns => 2, tl_list => ['Yes' => '是', 'No'=>'否'], }, }, { column_name=>'is_mirror', label=>'是否镜像', width=>80, type=>'radio', property=>{ tl_columns => 2, tl_list => ['yes' => '是', 'no'=>'否'], }, } ], tl_rows=>$rows, }, set_value_func => sub{ my %par = @_; my $data = $par{value}; foreach my $row_name (%$data){ foreach my $col_name (%{$data->{$row_name}}){ $par{widget}->set_value($row_name,$col_name,$data->{$row_name}{$col_name}); } } }, get_value_func => sub{my %par = @_;return $par{widget}->get_all_value();}, }, { type => 'title', property=>{ title=>'输出设置', }, n_columns=>1, }, { name => 'username', label => '输出者:', type => 'string', value=>$GEN->getUserName(), width=>100, must_field=>1, }, { name => 'output_path', label => '输出路径:', type => 'string', value=>$path, width=>100, must_field=>1, property => { editable=>0, }, buttons => [ { name=>'btn1',label=>'选择路径',stock=>'gtk-add', command=>sub{ my %p = @_; my $folder = $GUI->select_file(-title=>'选择路径',-type=>'select-folder',-defaultdir=>$PAR->{Outpath}); return unless($folder); $p{formpanel}->set_value('output_path', $folder); } }, ], }, ] ); return $v_data; } =head 文件导入设置 =cut sub input_layers { my %par = @_; my $info = $par{info}; my @layers = values %{$info->{layer_info}}; foreach my $lyr (@layers) { next unless ($lyr->{output_flag} =~ /yes/i); my $name = $info->{output_path}.'/'.$info->{prefix}.'.'.$lyr->{layer_name}; my $layer= lc($info->{prefix}.'.'.$lyr->{layer_name}); $GEN->COM("input_manual_reset"); $GEN->COM("input_manual_set,path=$name,job=$par{job},step=$par{step},format=Excellon2,data_type=ascii,units=mm,coordinates=absolute,zeroes=none,nf1=3,nf2=3,decimal=no,separator=nl,tool_units=mm,layer=$layer,wheel=,wheel_template=,nf_comp=0,multiplier=1,text_line_width=0.0024,signed_coords=no,break_sr=yes,drill_only=no,merge_by_rule=no,threshold=200,resolution=3"); $GEN->COM("input_manual,script_path="); $GEN->COM("matrix_layer_context,job=$Job,matrix=matrix,layer=$layer,context=misc"); } } =head 获取工作step =cut sub get_work_step { update_loading("选择工作step...",0,position=>'n'); my @steps = $GEN->getStepList(job=>$Job); if ( @steps == 0 ) { $GUI->msgbox(-icon=>'error',-text=>'在料号中没有Step存在,你将退出!'); return 'Cancel'; } elsif (@steps != 0){ my @tmp_steps = grep(/$Step/,@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], -default=>[$tmp_steps[0]], -gen=>$GEN, -selectmode=>'single'); return 'Cancel' unless ($Step); } } } __END__