From 616dcdb347ecce1fb5a2fc143d69b55d0944b6fc Mon Sep 17 00:00:00 2001 From: "scott.sun" <scott.sun@topibd.com> Date: Wed, 9 Sep 2020 13:08:06 +0800 Subject: [PATCH] scott --- public_script/silkScreenOptimize.js | 405 ++++++++++++++---- .../sl_box_opt.pl" | 9 +- 2 files changed, 332 insertions(+), 82 deletions(-) rename "public_script/\345\255\227\347\254\246\344\274\230\345\214\226/\345\255\227\346\241\206\345\210\206\347\246\273.pl" => "public_script/\345\255\227\347\254\246\344\274\230\345\214\226/sl_box_opt.pl" (98%) diff --git a/public_script/silkScreenOptimize.js b/public_script/silkScreenOptimize.js index dc91d4c..c375ce4 100644 --- a/public_script/silkScreenOptimize.js +++ b/public_script/silkScreenOptimize.js @@ -147,13 +147,14 @@ var resultData = []; var par = PAR; var default_par = { units:"mm", - cover_layer_suffix: "_cover", ss_to_sm: 10, // æ–‡å—è·ç¦»é˜»ç„Š ss_to_smd: 10, // æ–‡å—è·ç¦»SMD ss_to_bga: 10, // æ–‡å—è·ç¦»bga text_height: 1, // æ–‡å—æœ€å¤§é«˜åº¦ bk_suffix: "_bk", // 备份层åŽç¼€ silk_suffix: "_font", // 分离的文å—层åŽç¼€ + cover_layer_suffix: "_cover", + tol: 1, select_lyr: "no", step: "unit", auto_save: "No", @@ -173,15 +174,17 @@ try { if(mode == "aimdfm"){ if(GEN.checkInout({job:job,mode:"test"}) != 0){ throw "the job check" } else { GEN.checkInout({job:job,mode:"out"}) } } - var err = createCoverLayer() // 创建套层 - if (err) {throw err} - - var err = ssFrameSeparate() // 分离文å—å’Œæ–‡å—æ¡† - if (err) {throw err} - + // var err = createCoverLayer() // 创建套层 + // if (err) {throw err} + // var err = ssFrameSeparate() // 分离文å—å’Œæ–‡å—æ¡† + // if (err) {throw err} + var err = slBoxOptimize() // æ–‡å—æ¡†ä¼˜åŒ– + if (err) {throw err} + // var err = slOptimize() // æ–‡å—优化 + // if (err) {throw err} @@ -314,7 +317,6 @@ function createCoverLayer (props){ GEN.affectedLayer({affected:'no',mode:'all'}) GEN.clearLayers() } - // å—符 å’Œ æ–‡å—æ¡†åˆ†å¼€ function ssFrameSeparate () { // 1. step过滤 @@ -446,7 +448,6 @@ function ssFrameSeparate () { if ( GEN.getSelectCount() > 0 ){ GEN.createLayer({job:job,layer:cover_lyr_2,delete_exists:'yes'}); GEN.selCopyOther({target_layer:cover_lyr_2,invert:'no'}); - } GEN.affectedLayer({affected:'yes',layer:[ss_line_arc],clear_before:'yes'}); GEN.selContourize(); @@ -518,86 +519,300 @@ function ssFrameSeparate () { }) } GEN.COM("disp_on") + var ref_layers = work_layers.filter(function(layer){ return GEN.isLayerExists({job:job, layer:layer + par.silk_suffix}) }).map(function(layer){ + return { + work_layer: layer, + ref_layer: layer + par.silk_suffix + } + }) + if(ref_layers.length > 0) { + ref_layers.forEach(function(layerInfo){ + GEN.affectedLayer({affected:'no',mode:'all'}) + GEN.clearLayers() + var work_layer = layerInfo.work_layer; + var ref_layer = layerInfo.ref_layer; + IKM.msg(work_layer+"层嗿¡†åˆ†ç¦»"); + GEN.workLayer({name:work_layer,display_number:1,clear_before:'yes'}); + if(correct(work_layer)){ var tmp = work_layer; work_layer = ref_layer,ref_layer = tmp; } + GEN.displayLayer({name:ref_layer,number:2}); + var flag = true; + IKM.msg("è¯·é€‰æ‹©éœ€ç§»åŠ¨çš„æ–‡å—æˆ–è€…çš„æ–‡å—æ¡†ï¼Œä¸éœ€åˆ¶ä½œäº†è¯·ã€å·¦é”®æ¡†é€‰ç©ºç™½å¤„】") + while(flag){ + var tmp_con = GEN.MOUSE({type:'r',text:"Please Select"}); + GEN.COM("filter_area_strt") + GEN.COM("filter_area_xy,x="+tmp_con.x1+",y="+tmp_con.y1) + GEN.COM("filter_area_xy,x="+tmp_con.x2+",y="+tmp_con.y2) + GEN.COM("filter_area_end,layer=,filter_name=popup,operation=select,area_type=rectangle,inside_area=yes,intersect_area=no") + if(GEN.getSelectCount() > 0){ + if(correct(work_layer)){ var tmp = work_layer; work_layer = ref_layer,ref_layer = tmp; } + GEN.selSubstitute({tol:1,mode:'select'}); + GEN.selMoveOther({target_layer:ref_layer,invert:'no'}); + } else { + flag = false; + } + } + }) + } + }) +} +// æ–‡å—æ¡†æŒ‰é˜»ç„Šæ‰©å¤§ +function slBoxOptimize(){ + // 1. step过滤 + var workstep = getWorkStep() + if(!Array.isArray(workstep)){throw "工作step错误"} + // 2.过滤工作层 + var work_layers = getLayer({layer_type:"silk_screen", context: "board"}) + if(/yes/ig.test(par.select_lyr)){ + var matrix = GEN.getMatrix({job:job}); + var layers = Object.keys(matrix).map(function(key){ + var tmp ={}; + tmp[key] = key; + return tmp + }) + work_layers = gui.selectMultiple({title: "请先择工作层",list: layers,defaultvalue: work_layers,columns: 4,gen: GEN}) + } + if(work_layers.length == 0 ) {return "没有先择layer"} - var ref_layers = work_layers.filter(function(layer){ return GEN.isLayerExists({job:job, layer:layer + par.silk_suffix}) }) - // if(ref_layers.length > 0) { - // GEN.workLayer({name:work_layer,display_number:1,clear_before:'yes'}); - // while (1) { - // LOOP: - // GEN.COM('disp_on'); - - // while(1){ - // work_layer = GEN.getWorkLayer(); - // last if (grep($_ eq work_layer ,@work_layers) or grep($_.$PAR->{silk_suffix} eq work_layer ,@work_layers)); - // update_loading("请选择一个文å—å±‚æˆ–è€…æ–‡å—æ¡†å±‚设为工作层",0,position:'n'); - // my $ans = GEN.PAUSE('Please Set Work Layer'); - // return 'Cancel' unless $ans eq 'OK'; - // } - - // // 给出默认移动层 - // if (grep($_ eq work_layer ,@work_layers)) { - // ref_layer = work_layer.$PAR->{silk_suffix}; - // }else if(grep($_.$PAR->{silk_suffix} eq work_layer ,@work_layers)){ - // ref_layer = work_layer; - // ref_layer =~ s/\Q$PAR->{silk_suffix}\E$//; - // } - - // if (! GEN.isLayerExists({job:job,layer:ref_layer}) ){ - // IKM.msg("没有找到对应层"+ref_layer+" ï¼Œè¯·é‡æ–°é€‰æ‹©å·¥ä½œå±‚ï¼") - // goto LOOP; - // } - // GEN.workLayer({name:work_layer,display_number:1,clear_before:'yes'}); - // GEN.displayLayer({name:ref_layer,number:2}); - - // update_loading("è¯·é€‰æ‹©éœ€ç§»åŠ¨çš„æ–‡å—æˆ–è€…çš„æ–‡å—æ¡†ï¼Œä¸éœ€åˆ¶ä½œäº†è¯·ã€å·¦é”®æ¡†é€‰ç©ºç™½å¤„】",0,position:'n'); - // var tmp_con = GEN.MOUSE({type:'r',text:"Please Select"}); - // work_layer = GEN.getWorkLayer(); - // GEN.COM('disp_off'); - - // // å…许人员手动æ¢å·¥ä½œå±‚ï¼Œé‡æ–°åˆ¤æ–移动层 - // if (grep($_ eq work_layer ,@work_layers)) { - // ref_layer = work_layer.$PAR->{silk_suffix}; - // }else if(grep($_.$PAR->{silk_suffix} eq work_layer ,@work_layers)){ - // ref_layer = work_layer; - // ref_layer =~ s/\Q$PAR->{silk_suffix}\E$//; - // } - // if (! GEN.isLayerExists({job:job,layer:ref_layer}) ){ - // IKM.msg("没有找到对应层"+ref_layer+" ï¼Œè¯·é‡æ–°é€‰æ‹©å·¥ä½œå±‚ï¼") - // goto LOOP; - // } - // // GEN.workLayer(name:work_layer,display_number:1,clear_before:'yes'); - // GEN.displayLayer({name:ref_layer,number:2}); - - // if ( GEN.getSelectCount() > 0 ){ - // GEN.selSubstitute({tol:1,mode:'select'}); - // GEN.selMoveOther({target_layer:ref_layer,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.selSubstitute({tol:1,mode:'select'}); - // GEN.selMoveOther({target_layer:ref_layer,invert:'no'}); - // } - // else{ - // GEN.COM('disp_on'); - // last; - // } - // } - // } - // } else { - // IKM.msg("æ²¡æœ‰æ‰¾åˆ°æ–‡å—æ¡†å’Œå¯¹åº”的文å—层,程åºå°†é€€å‡ºã€‚") - // } + var matrix = GEN.getMatrix({job:job}) + workstep.forEach(function(step){ + var units = par.units; + GEN.openStep({job:job,name:step}); + GEN.units({ type:units }); + 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.zoomHome(); + var ref_layers = work_layers.filter(function(layer){ return GEN.isLayerExists({job:job, layer:layer + par.cover_layer_suffix}) }).map(function(layer){ + return { + work_layer: layer, + ref_layer: layer + par.cover_layer_suffix + } + }) + if(ref_layers.length > 0) { + ref_layers.forEach(function(layerInfo){ // {"work_layer":"gto","ref_layer":"gto_cover"} + GEN.affectedLayer({affected:'no',mode:'all'}) + GEN.clearLayers() + var work_layer = layerInfo.work_layer; + var ref_layer = layerInfo.ref_layer; + var tmp1 = 'tl_script_tmp1', tmp2 = "tl_script_tmp2"; + delLayer([tmp1, tmp2]); + GEN.workLayer({name:work_layer,display_number:1,clear_before:'yes'}); + GEN.displayLayer({name:ref_layer,number:2}); + // 放大 + var ref_pad = "tmp_ref_pad"; delLayer([ref_pad]); + GEN.createLayer({job:job,layer:ref_pad,context:'misc',type:'document'}); + + var flag = true; + IKM.msg("è¯·é€‰æ‹©éœ€æ”¾å¤§çš„æ–‡å—æ¡†ï¼Œä¸éœ€åˆ¶ä½œäº†è¯·ã€å·¦é”®æ¡†é€‰ç©ºç™½å¤„】") + while(flag){ + var tmp_con = GEN.MOUSE({type:'r',text:"Please Select"}); + GEN.workLayer({name:work_layer,display_number:1,clear_before:'yes'}); + GEN.COM("filter_area_strt") + GEN.COM("filter_area_xy,x="+tmp_con.x1+",y="+tmp_con.y1) + GEN.COM("filter_area_xy,x="+tmp_con.x2+",y="+tmp_con.y2) + GEN.COM("filter_area_end,layer=,filter_name=popup,operation=select,area_type=rectangle,inside_area=yes,intersect_area=no") + if(GEN.getSelectCount() > 0){ + selCopyOther({layer: tmp1}) + // 判æ–特殊倾斜情况 + var layer_feature = GEN.getFeatures({job:job,step:step,layer:tmp1}) + // [{"type":"line","xs":"2.6998077","ys":"3.321854","xe":"2.6998077","ye":"3.4104367","symbol":"r7","polarity":"positive","attributes":[]},{"type":"line","xs":"2.6998077","ys":"3.321854","xe":"2.8912643","ye":"3.321854","symbol":"r7","polarity":"positive","attributes":[]},{"type":"line","xs":"2.6998077","ys":"3.4104367","xe":"2.8912643","ye":"3.4104367","symbol":"r7","polarity":"positive","attributes":[]},{"type":"line","xs":"2.8912643","ys":"3.321854","xe":"2.8912643","ye":"3.4104367","symbol":"r7","polarity":"positive","attributes":[]}] + // 1.算出最长边的角度 + var angle = getAngle(layer_feature) + if (angle %90 == 0) {angle = 0} + if (angle < 0){angle = 90 + angle} + // 求ä¸å¿ƒç‚¹ + GEN.workLayer({name:ref_layer,display_number:1,clear_before:'yes'}); + var layer_limits_tmp1 = GEN.getLayerLimits({job:job,step:step,layer:tmp1,units:units}); + GEN.selectByFilter({area_rect:{x1:layer_limits_tmp1.xmin-0.01,y1:layer_limits_tmp1.ymin-0.01,x2:layer_limits_tmp1.xmax+0.01,y2:layer_limits_tmp1.ymax+0.01}}); + selCopyOther({layer: "tmp_center"}) + var layer_limits_tmp = GEN.getLayerLimits({job:job,step:step,layer:"tmp_center",units:units}); + layer_limits_tmp.xc = layer_limits_tmp.xmin - 0 + layer_limits_tmp.xsize/2; + layer_limits_tmp.yc = layer_limits_tmp.ymin - 0 + layer_limits_tmp.ysize/2; + delLayer("tmp_center") + GEN.clearLayers() + GEN.affectedLayer({affected:'no',mode:'all'}) + GEN.affectedLayer({affected:'yes',layer:[work_layer,tmp1]}) + GEN.COM("filter_area_strt") + GEN.COM("filter_area_xy,x="+tmp_con.x1+",y="+tmp_con.y1) + GEN.COM("filter_area_xy,x="+tmp_con.x2+",y="+tmp_con.y2) + GEN.COM("filter_area_end,layer=,filter_name=popup,operation=select,area_type=rectangle,inside_area=yes,intersect_area=no") + // 更具角度将其旋转 + GEN.selTransform({mode:'anchor',oper:"rotate",x_anchor:layer_limits_tmp.xc,y_anchor:layer_limits_tmp.yc,angle:angle}) + GEN.affectedLayer({affected:'no',mode:'all'}) + GEN.workLayer({name:ref_layer,display_number:1,clear_before:'yes'}); + GEN.selectByFilter({area_rect:{x1:layer_limits_tmp1.xmin-0.01,y1:layer_limits_tmp1.ymin-0.01,x2:layer_limits_tmp1.xmax+0.01,y2:layer_limits_tmp1.ymax+0.01}}); + GEN.selTransform({mode:'anchor',oper:"rotate",x_anchor:layer_limits_tmp.xc,y_anchor:layer_limits_tmp.yc,angle:angle}) + + GEN.copyLayer({source_job:job,source_step:step,source_layer:tmp1,dest_layer:tmp2,mode:'replace',invert:'no'}); + var text_tmp = 'tl_tmp_text'; + GEN.copyLayer({source_job:job,source_step:step,source_layer:tmp1,dest_layer:text_tmp,mode:'replace',invert:'no'}); + var layer_limits = GEN.getLayerLimits({job:job,step:step,layer:text_tmp,units:units}); + layer_limits.xc = layer_limits.xmin - 0 + layer_limits.xsize/2; + layer_limits.yc = layer_limits.ymin - 0 + layer_limits.ysize/2; + var scalex=1,scaley=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}}); + if ( GEN.getSelectCount() > 0 ){ + GEN.selCopyOther({target_layer:ref_pad,invert:'no'}); + var layer_limits_pad = GEN.getLayerLimits({job:job,step:step,layer:ref_pad,units:units}); + var feature = GEN.getFeatures({job:job,step:step,layer:tmp1,units:units}); + var line_width = feature[0].symbol.slice(1) / 1000; + var tmp_ps = 0.004; + if (units == "mm"){tmp_ps = tmp_ps*25.4} +// {"layer_limits_pad":{"xmin":"68.6901125","ymin":"84.4900925","xmax":"73.310115","ymax":"86.5100925", +// "xsize":4.620002499999998,"ysize":2.019999999999996},"line_width":0.1778, +// "layer_limits":{"xmin":"68.486215","ymin":"84.2861925","xmax":"73.527","ymax":"86.714", +// "xsize":5.040785,"ysize":2.4278075,"xc":71.0066075,"yc":85.50009625}} + scalex = (Number(layer_limits_pad.xsize)+line_width*2+tmp_ps)/(layer_limits.xsize); + if(scalex < 1) {scalex = 1 } + scaley = (Number(layer_limits_pad.ysize)+line_width*2+tmp_ps)/(layer_limits.ysize); + if(scaley < 1) {scaley = 1 } + } + delLayer(text_tmp) + GEN.affectedLayer({affected:'yes',layer:[tmp1],clear_before:'yes'}); + GEN.selTransform({mode:'anchor',oper:'scale',x_anchor:layer_limits_tmp.xc,y_anchor:layer_limits_tmp.yc,x_scale:scalex,y_scale:scaley}) + // {"mode":"anchor","oper":"scale","x_anchor":71.0066075,"y_anchor":85.50009625,"x_scale":1,"y_scale":1} + // 检查是å¦å«å•æ ¹çº¿ + var tmp = 'tl-'+tmp1+'tmp1++'; + var _tmp2 = 'tl-'+tmp1+'tmp2++'; + var tmp3 = 'tl-'+tmp1+'-alone'; + var cale_x = scalex; // ? + var cale_y = scaley; // ? + 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.INFO_RESULT.gFEAT_HISTsurf > 0) { + for(var i=1;i <= GEN.INFO_RESULT.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'}); + if (GEN.getSelectCount() > 0) {GEN.selDelete() } ; + var feat = GEN.getFeatures({job:job,step:step,layer:_tmp2}); + var hash = {}; + for(var i=0;i < feat;i++){ + for(var k = i+1;k < feat; k++){ + if ((feat[i].xs == feat[k].xs && feat[i].ys == feat[k].ys) || + (feat[i].xs == feat[k].xe && feat[i].ys == feat[k].ye) ){ + if(!hash[i+'star']){hash[i+'star'] = {}} + hash[i+'star'][x] = feat[i].xs; + hash[i+'star'][y] = feat[i].ys; + } + if ((feat[i].xe == feat[k].xs && feat[i].ye == feat[k].ys) || + (feat[i].xe == feat[k].xe && feat[i].ye == feat[k].ye)) { + if(!hash[i+'end']){hash[i+'end'] = {}} + hash[i+'end'][x] = feat[i].xe; + hash[i+'end'][y] = feat[i].ye; + } + } + } + if (Object.keys(hash).length == 0) { + GEN.affectedLayer({affected:'yes',mode:'single',layer:tmp1,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'}); + var change_scal_x = (1 / cale_x).toFixed(3) - 0; + var change_scal_y = (1 / cale_y).toFixed(3) - 0; + 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}); + // {"mode":"axis","oper":"scale","x_anchor":0,"y_anchor":0,"x_scale":1,"y_scale":1} + GEN.COM('sel_move_other',{target_layer:tmp1,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}); + } + } + + + // 转回去 + GEN.clearLayers() + GEN.affectedLayer({affected:'yes',layer:[work_layer,tmp1,tmp2], clear_before:"yes"}) + GEN.COM("filter_area_strt") + GEN.COM("filter_area_xy,x="+tmp_con.x1+",y="+tmp_con.y1) + GEN.COM("filter_area_xy,x="+tmp_con.x2+",y="+tmp_con.y2) + GEN.COM("filter_area_end,layer=,filter_name=popup,operation=select,area_type=rectangle,inside_area=yes,intersect_area=no") + GEN.selTransform({mode:'anchor',oper:"rotate",x_anchor:layer_limits_tmp.xc,y_anchor:layer_limits_tmp.yc,angle:360-angle}) + GEN.affectedLayer({affected:'no',mode:'all'}) + GEN.workLayer({name:ref_layer,display_number:1,clear_before:'yes'}); + if(GEN.isLayerExists({ job:job,step:step,layer:ref_pad})){GEN.affectedLayer({affected:'yes',layer:ref_pad})} + GEN.selectByFilter({area_rect:{x1:layer_limits_tmp1.xmin-0.01,y1:layer_limits_tmp1.ymin-0.01,x2:layer_limits_tmp1.xmax+0.01,y2:layer_limits_tmp1.ymax+0.01}}); + GEN.selTransform({mode:'anchor',oper:"rotate",x_anchor:layer_limits_tmp.xc,y_anchor:layer_limits_tmp.yc,angle:360-angle}) + + GEN.workLayer({name:tmp1,display_number:1,clear_before:'yes'}); + GEN.displayLayer({name:work_layer,number:2}); + if(!GEN.isLayerEmpty({ job:job,step:step,layer:ref_pad})){GEN.displayLayer({name:ref_layer,number:3})} + GEN.COM('disp_on'); + var ans = GEN.PAUSE('Please Check...'); + if(!/ok/ig.test(ans)){ throw "cancel" } + GEN.COM('disp_off'); + + var tmp_symbol = 'tl_script_tmp'; + 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}); + if ( GEN.getSelectCount() > 0 ){GEN.selBreak()}; + GEN.COM('disp_on'); + GEN.COM('truncate_layer', {layer :tmp1}); + GEN.COM('truncate_layer', {layer :tmp2}); + GEN.COM('disp_on'); + GEN.COM('sel_clear_feat'); + GEN.units({type:units}); + } else { + flag = false; + } + } + }) + } }) + + } +// æ–‡å—æ”¾å¤§ +function slOptimize() { + // 1. step过滤 + var workstep = getWorkStep() + if(!Array.isArray(workstep)){throw "工作step错误"} + // 2.过滤工作层 + var work_layers = getLayer({layer_type:"silk_screen", context: "board"}) + if(/yes/ig.test(par.select_lyr)){ + var matrix = GEN.getMatrix({job:job}); + var layers = Object.keys(matrix).map(function(key){ + var tmp ={}; + tmp[key] = key; + return tmp + }) + work_layers = gui.selectMultiple({title: "请先择工作层",list: layers,defaultvalue: work_layers,columns: 4,gen: GEN}) + } + if(work_layers.length == 0 ) {return "没有先择layer"} + var matrix = GEN.getMatrix({job:job}) + IKM.msg(work_layers) + + +} -// æ–‡å—æ¡†æŒ‰é˜»ç„Šæ‰©å¤§ -// æ–‡å—æ”¾å¤§ function selCopyOther(props){ // {layer , invent, dx, dy , size} @@ -758,6 +973,34 @@ function delLayer(layer){ } layer = layer.filter(function(v){return GEN.isLayerExists({job:job, layer:v})}) if(layer.length){ - GEN.deleteLayer({job:job, layer:[layer]}) + GEN.deleteLayer({job:job, layer:layer}) } +} + +function correct(work_layer){ + var tmp = GEN.getWorkLayer(); + return tmp !== work_layer; +} + +function getAngle(features){ // èŽ·å–æœ€é•¿è¾¹çš„角度 + features.sort(function(a,b){ + a.length = getLineLength(a); + b.length = getLineLength(b); + return a.length - b.length + }) + return getRodate(features[features.length - 1]) +} +function getLineLength (line){ + if (line.type != "line"){return 0} + return Math.sqrt((line.xe - line.xs)*(line.xe - line.xs) + (line.ye - line.ys)*(line.ye - line.ys)) +} +function getRodate(props){ + var xs = props.xs; + var ys = props.ys; + var xe = props.xe; + var ye = props.ye; + var y = ye - ys; + var x = xe - xs; + var r = Math.atan(y / x) + return r*180/Math.PI } \ No newline at end of file diff --git "a/public_script/\345\255\227\347\254\246\344\274\230\345\214\226/\345\255\227\346\241\206\345\210\206\347\246\273.pl" "b/public_script/\345\255\227\347\254\246\344\274\230\345\214\226/sl_box_opt.pl" similarity index 98% rename from "public_script/\345\255\227\347\254\246\344\274\230\345\214\226/\345\255\227\346\241\206\345\210\206\347\246\273.pl" rename to "public_script/\345\255\227\347\254\246\344\274\230\345\214\226/sl_box_opt.pl" index 533a456..1d4ec45 100644 --- "a/public_script/\345\255\227\347\254\246\344\274\230\345\214\226/\345\255\227\346\241\206\345\210\206\347\246\273.pl" +++ "b/public_script/\345\255\227\347\254\246\344\274\230\345\214\226/sl_box_opt.pl" @@ -368,12 +368,19 @@ sub enlarge_slik_frame{ $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($scalex,'====',$scaley)); + $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]); -- 2.21.0