diff --git a/ats/topcam/ATS_AIM_checkin.js b/ats/topcam/ATS_AIM_checkin.js index 0ca343ce8c25760857fd4889146acc74ffc4294a..651133c6e15abaff7d095ad1503a71247e7e2ebb 100644 --- a/ats/topcam/ATS_AIM_checkin.js +++ b/ats/topcam/ATS_AIM_checkin.js @@ -72,6 +72,7 @@ if (mode === "aimdfm") { var Status = 'ok'; var resultData = []; try { + console.log("=============================check in===================="); GEN.COM("open_job,job="+Job+",open_win=no,disk_map=,job_map=") GEN.AUX("set_group,group=99") GEN.COM("close_job,job="+Job+"") @@ -80,9 +81,26 @@ try { GEN.COM("disp_on") GEN.COM("origin_on") GEN.COM("checkin_closed_job,job="+Job); + if (mode === "aimdfm") { + if (GEN.hasError()) { + Status = 'error'; + resultData.push({ type: "error", title: "GEN错误!", detail: [{ desc: _.join(GEN.STATUS, "\n") }] }); + return { + status: Status, + result_data: resultData + }; + } else { + resultData.push({ type: "info", title: "æ“作完æˆ, è¯·æ³¨æ„æ£€æŸ¥!" }); + return { + status: Status, + result_data: resultData + }; + } + }else { + return "Done" + } } catch (e) { - Status = 'error'; resultData.push({type: "error", title: "脚本执行出错!", detail: [{desc: _.toString(e)}]}); return (mode === "aimdfm") ? {status: Status, result_data: resultData} : "Error"; diff --git a/ats/topcam/ATS_AIM_customer_data_analysis.js b/ats/topcam/ATS_AIM_customer_data_analysis.js index 5fa9d27d10ac59668e2d5955dd21205b6f206b4e..6d965a6ba48b0ac221aa4b41c991ac346928ebb5 100644 --- a/ats/topcam/ATS_AIM_customer_data_analysis.js +++ b/ats/topcam/ATS_AIM_customer_data_analysis.js @@ -166,9 +166,11 @@ if(mailUserList && mailUserList.length) { }) } var cam_workflow_info = IKM.get_jobinfo({jobid:JobId, jobinfo:"cam_workflow_info"}); +console.log("==========cam_workflow_info===========:" + cam_workflow_info); try { if(cam_workflow_info && cam_workflow_info != ""){ - throw cam_workflow_info + console.log("==========cam_workflow_info===========:" + cam_workflow_info); + throw cam_workflow_info } cam_workflow_info = "sendmail" console.log("=============================================>anaysis_start"); @@ -185,7 +187,7 @@ try { // æ£€æŸ¥æ–™å·æ˜¯å¦èƒ½å¤Ÿcheck out if(GEN.checkInout({job:job,mode:"test"}) != 0 && mode == "aimdfm"){ throw "the job check" } GEN.checkInout({job:job,mode:"out"}); - script_info({ msg: "analysis start" ,result_severity:"info"}) + script_info({ msg: "开始分æžå®¢æˆ·æ–™å·" ,result_severity:"info"}) script_info({ progress: 65 }) var pcs_step = par.pcs_step == "" ? "cad" : par.pcs_step; var array_step = par.array_step == "" ? "stp" : par.array_step; @@ -197,7 +199,7 @@ try { pcs_step = step_list[0] } - script_info({ msg: "analysis update_matrix_info" }) + script_info({ msg: "分æžä¸Šä¼ matrixä¿¡æ¯",result_severity:"info" }) script_info({ progress: 65 }) var matrix = UPLOAD_LAYER_MATRIX({job:job}) // 分æžmatrix 获得分æžåŽçš„matrixä¿¡æ¯ GEN.openStep({job:job, name:pcs_step}) @@ -253,7 +255,7 @@ try { }) GEN.clearLayers() - script_info({ msg: "analysis drill_stack" }) + script_info({ msg: "分æžé’»å”å æž„" }) script_info({ progress: 70 }) // * new é’»å”å æž„ var cam_drill_structure = [] @@ -378,7 +380,7 @@ try { var analysis_obj = analysis({job:job,jobId:JobId,pcs_step:pcs_step,array_step:array_step,matrix:matrix}) // 创建profile var tmp_matrix = GEN.getMatrix({job:job}) - script_info({ msg: "analysis panel_info" }) + script_info({ msg: "分æžprofile" }) script_info({ progress: 70 }) // * profile å’Œ 拼版 var pandle_step = step_list.map(function(v){ @@ -452,7 +454,7 @@ try { } ALL.gold_fingers = gold_fingers GEN.closeStep() - script_info({ msg: "analysis some_job_info" }) + script_info({ msg: "åˆ†æžæ–™å·ä¿¡æ¯" }) var config = { jobInfo: { layer_count: ["signal","power_ground"], // Board属性的signal或者power_ground层 @@ -532,7 +534,7 @@ try { console.log("=================================> 5 save drill info") - script_info({ msg: "analysis drill_info" }) + script_info({ msg: "分æžé’»å”ä¿¡æ¯" }) script_info({ progress: 75 }) // * 获å–pcs_step å’Œ array_step的钻å”ä¿¡æ¯ var drill_tool_info = {}; @@ -657,7 +659,7 @@ try { }) console.log("=============================> 6 set smd bga") - script_info({ msg: "analysis smd&bga" }) + script_info({ msg: "分æžsmdå’Œbga" }) script_info({ progress: 80 }); step_list.forEach(function(step){ GEN.openStep({job:job,name:step}) @@ -808,7 +810,7 @@ try { // jobpath = "/home/local_db/server_db/jobs/"+job // } mkPath(jobpath,["user","opcam","steps"]) - script_info({ msg: "analysis signal" }) + script_info({ msg: "分æžçº¿è·¯" }) script_info({ progress: 85 }) stepList.forEach(function(step){ GEN.openStep({ job: job, name: step }) @@ -961,7 +963,7 @@ try { if(par.erf){ tmpitem.erf = par.erf } - script_info({ msg: "analysis run_signal_chk" }) + script_info({ msg: "è¿è¡Œçº¿è·¯åˆ†æžchecklist" }) createChklistAndRun({ // 创建checklistå¹¶è¿è¡Œ layers: signalLayers, items: [tmpitem] @@ -973,9 +975,9 @@ try { var val = res[key] for(var key2 in val){ if(key2 == "min_ar_npth"){ - if(Number(val[key2]) == 0 || Number(val[key2]) == 999){ - delete val.min_ar_npth - } + if(Number(val[key2]) == 0 || Number(val[key2]) == 999){ + delete val.min_ar_npth + } } } save_layerinfo({ @@ -987,7 +989,6 @@ try { GEN.closeStep() }) mvOutProfile({job:job, step:pcs_step}) - IKM.msg("end wait for save") // ä¿å˜ @@ -1019,7 +1020,6 @@ try { }) }); - script_info({ msg: "analysis export" }) script_info({ progress: 95 }) // 导出 if(par.export_path != "" && par.export_mode != "" && par.export_submode != "" ){ @@ -1256,8 +1256,7 @@ function getMatrixInfo(props){ // 获å–matrixå„ç§ä¿¡æ¯ res.mBoardLayer.push(key) switch (value.layer_type) { case "signal": - - s.mSignal[key] = value + res.mSignal[key] = value res.mSignals.push(value) break; case "drill": diff --git a/ats/topcam/ATS_AIM_data_input.js b/ats/topcam/ATS_AIM_data_input.js index 91e8de8921b9cd65a39f9ec349d7cfd6b7122c17..9166d7c43b55f28c740259edea306c99a8afe532 100644 --- a/ats/topcam/ATS_AIM_data_input.js +++ b/ats/topcam/ATS_AIM_data_input.js @@ -94,7 +94,7 @@ if(cam_workflow_info){ IKM.save_job_info({jobid:JobId, jobinfohash:{cam_workflow_info:""}}) } try { - script_info({ msg: "import start", result_severity:"info" }) + script_info({ msg: "开始导入", result_severity:"info" }) var par = PAR; // var db_path = db.query("",function(q){ // return q.selectValue({ @@ -104,7 +104,9 @@ try { // }) // }); // if(_.isEmpty(db_path)){throw "quote-data-upload error"} - if(!par.path || par.path == "") {throw "path error"} + if(!par.path || par.path == "") { + script_info({ msg: "资料路径ä¸å˜åœ¨", result_severity:"error" }); + throw "path error"} if(!par.hasOwnProperty("config_path") || par.config_path==""){ console.log("===================cfg"); par.config_path = "cam/input_data" @@ -120,7 +122,9 @@ try { where:{id : JobId} }) }); - if(_.isEmpty(db_customer)){throw "customer error"} + if(_.isEmpty(db_customer)){ + script_info({ msg: "该料å·å®¢æˆ·ä¸å˜åœ¨", result_severity:"error" }); + throw "customer error"} if(db_customer && !(/^done$/ig.test(db_customer)) && db_customer != "" ){ par.customer = db_customer } @@ -132,9 +136,13 @@ try { where:{path : par.config_path} }) }); - if (!cfg || cfg == ""){throw "cfg can not find"} + if (!cfg || cfg == ""){ + script_info({ msg: "客户é…ç½®ä¸å˜åœ¨", result_severity:"error" }); + throw "cfg can not find"} var config = eval(cfg); - if(!config.hasOwnProperty("customer")){throw "config error"} + if(!config.hasOwnProperty("customer")){ + script_info({ msg: "客户é…ç½®ä¸å˜åœ¨", result_severity:"error" }); + throw "config error"} var job = Job; if(_.isEmpty(job)) throw "æ²¡æœ‰ä¼ å…¥æ–™å·å!"; job = job.toLowerCase() @@ -146,7 +154,9 @@ try { var step = custCfg.step.toLowerCase() // 获å–è·¯å¾„ä¸‹æ–‡ä»¶ä¿¡æ¯ var path = par.path - if(!fs.exists(path)){throw "path error"} + if(!fs.exists(path)){ + script_info({ msg: "资料路径ä¸å˜åœ¨", result_severity:"error" }); + throw "path error"} var pathInfo = fs.listDir(path + "/" + db_customer.toLowerCase(), 1) // 判æ–å˜ä¸å˜åœ¨æ–™å·æ–‡ä»¶ // var vc_position = db.query("",function(q){ @@ -161,7 +171,9 @@ try { // job_file_baseName = job_file_baseName + "_" + vc_position // } var jobFile = pathInfo.filter(function(v){return v.baseName.toLowerCase() == job_file_baseName}) - if(jobFile.length == 0){throw "job file is not exist"} + if(jobFile.length == 0){ + script_info({ msg: "资料路径ä¸å˜åœ¨", result_severity:"error" }); + throw "job file is not exist"} var jobFiles = [] // 记录è¦åˆ†æžçš„æ–‡ä»¶ if (!jobFile[0].isDir) { jobFiles.push(jobFile[0]) @@ -197,7 +209,7 @@ try { // åˆ†æžæ–™å·æ–‡ä»¶ 得到料å·å¯¼å…¥ä¿¡æ¯ 导入类型 var jobInfo = analyJobFiles({jobFiles:jobFiles.filter(function(v){return v.isFile}),custCfg:custCfg,config:config,job:job }) if(jobInfo.data.length == 0){ - script_info({ msg: "file error", result_severity:"error" }) + script_info({ msg: "æœªæ‰¾åˆ°æ–™å·æ–‡ä»¶", result_severity:"error" }); throw "file error"} var importOk = false; // æ˜¯å¦æˆåŠŸå¯¼å…¥ @@ -288,15 +300,23 @@ try { gerberCfg.step = step return gerberCfg }) - GEN.COM("input_manual_reset") + + gerberInfo.forEach(function(v){ + GEN.COM("input_result_reset,step=,category=warnings,close_tab=yes") + GEN.COM("input_create,path="+v.path) + GEN.COM("input_selected_reset") + GEN.COM("input_selected_add,path="+v.path) + GEN.COM("input_identify_selected,path=,job="+job+",script_path=,gbr_ext=no,drl_ext=no,gbr_units=auto,drl_units=auto,unify=yes,break_sr=yes,gbr_wtp_filter=*,drl_wtp_filter=*,gbr_wtp_units=auto,drl_wtp_units=auto,wtp_dir=,have_wheels=yes,wheel=,gbr_consider_headlines=yes,drl_consider_headlines=yes,board_size_x=0,board_size_y=0") + + GEN.COM("input_manual_reset") import_info.push({name:v.layer, type:"gerber274x", date:now(),user:$.user_name}) GEN.COM("input_manual_set",v) + GEN.COM("input_manual") }) - GEN.COM("input_manual") importOk = true } - if(!importOk){ script_info({ msg: "import error",result_severity:"error" }); throw "import error"} + if(!importOk){ script_info({ msg: "导入错误",result_severity:"error" }); throw "import error"} script_info({ progress: 20 }) reNameStep(job) if(/2171/.test(par.customer)){ @@ -351,7 +371,7 @@ try { import_html += "</table>" // name type date user resultData.push({type: "info",title:"导入资料列表",detail: [{ desc: import_html }] }) - script_info({ msg: "import ok" }) + script_info({ msg: "导入资料æˆåŠŸ" }) if (mode === "aimdfm") { $.QDfm.updateRow({ table: "pdm_aimdfm_task", @@ -458,6 +478,7 @@ function analyJobFiles(props){ } } } + function importJob(props,delSameJob){ var name = props.name if (GEN.isJobExists({ job: name })) { diff --git a/ats/topcam/ATS_AIM_data_format.js b/ats/topcam/ATS_AIM_layer_rename_and_sort.js similarity index 98% rename from ats/topcam/ATS_AIM_data_format.js rename to ats/topcam/ATS_AIM_layer_rename_and_sort.js index 028f839aebbf40fbb7d12ed5cea7611cc39c4603..056ac6f9101f7ded1648dcfc6c5ff8b62da2480a 100644 --- a/ats/topcam/ATS_AIM_data_format.js +++ b/ats/topcam/ATS_AIM_layer_rename_and_sort.js @@ -102,11 +102,11 @@ try { if(cam_workflow_info && cam_workflow_info != ""){ throw cam_workflow_info } - script_info({ msg: "format start" ,result_severity:"info"}) + script_info({ msg: "æ–™å·æ ‡å‡†åŒ–æµç¨‹å¼€å§‹" ,result_severity:"info"}) script_info({ progress: 35 }) var par = PAR; if(!par.hasOwnProperty("config_path") || par.config_path==""){ - console.log("==============cfg"); + console.log("=========== ===cfg"); par.config_path = "cam/input_data" }; var db_customer = db.query("",function(q){ @@ -137,9 +137,13 @@ try { var custCfg = config.customer[par.customer] // 获å–客户é…ç½® if(!custCfg){throw "config error"} // æ–™å·éªŒè¯ - if(!GEN.isJobExists({job:job})){ throw "job "+ job+ " is not exist" } + if(!GEN.isJobExists({job:job})){ + script_info({ msg: "æ–™å·"+job+"ä¸å˜åœ¨" ,result_severity:"error"}) + throw "job "+ job+ " is not exist" } if(!GEN.isJobOpen({job:job})){GEN.openJob({job:job})} - if(GEN.checkInout({job:job,mode:"test"}) != 0 && mode == "aimdfm"){ throw "the job check" } + if(GEN.checkInout({job:job,mode:"test"}) != 0 && mode == "aimdfm"){ + script_info({ msg: "æ–™å·"+job+" check" ,result_severity:"error"}) + throw "the job check" } console.log("Checkout====== ========================>") GEN.checkInout({job:job,mode:"out"}); console.log("Checkout success==============================>") @@ -260,7 +264,7 @@ try { var after_sort_matrix = ret.sortNames // 改å - script_info({ msg: "format rename" ,result_severity:"info"}) + script_info({ msg: "开始改å" ,result_severity:"info"}) script_info({ progress: 50 }) err = reName({job:job, matrix:after_sort_matrix, cfg:format_cfg}) if(err){throw err} @@ -383,7 +387,7 @@ try { GEN.closeJob({job:job}); GEN.COM("open_job,job="+job); - script_info({ msg: "format create profile" ,result_severity:"info"}) + script_info({ msg: "准备创建profile" ,result_severity:"info"}) script_info({ progress: 55 }) var all_layer = Object.keys(tmp_matrix) // 没有outline层 @@ -429,6 +433,8 @@ try { } } + script_info({ msg: "æ–™å·æ ‡å‡†åŒ–结æŸ" ,result_severity:"warn"}) + db.query("",function(q){ return q.updateRow({ table:'pdm_job', @@ -482,7 +488,6 @@ catch (e) { // subject:db_customer + ' / '+Job+ " format error", // content:_.toString(e) // }) - Status = 'error'; resultData.push({type: "error", title: "脚本执行出错!", detail: [{desc: _.toString(e)}]}); return (mode === "aimdfm") ? {status: Status, result_data: resultData} : "Error"; diff --git a/ats/topcam/config_ats.js b/ats/topcam/config_ats.js index 1ed695cbb6476d7512db9414288e9be569abb88d..944c76a47c07026ed052bdf2a8c23decf26e98dc 100644 --- a/ats/topcam/config_ats.js +++ b/ats/topcam/config_ats.js @@ -68,9 +68,9 @@ }, "Gerber274x_4": { "nf1": 2, - "nf2": 3, + "nf2": 4, "units": "mm", - "zeroes": "none", + "zeroes": "leading", "decimal": "no", "nf_comp": 0, "break_sr": "yes", @@ -80,7 +80,7 @@ "drill_only": "no", "multiplier": 1, "resolution": 3, - "tool_units": "mm", + "tool_units": "inch", "coordinates": "absolute", "merge_by_rule": "no", "signed_coords": "no", diff --git a/public_script/SEC_DRC_analysis.js b/public_script/SEC_DRC_analysis.js index 4d26ff94f77002552ce2dca9a5e6c7dcdee0632c..28ca25e37fdb60489c6d33f91e224205f31ced25 100644 --- a/public_script/SEC_DRC_analysis.js +++ b/public_script/SEC_DRC_analysis.js @@ -109,7 +109,7 @@ try { // var ($signal,@signal,@pg_layer,$pg_layer,@drill,@sm_layer,@ss_layer,$ss_layer); var matrix = GEN.getMatrix({job:job}); for (var layer in matrix) { - var layerInfo = matrix[layer] + var layerInfo = matrix[layer]; if(layerInfo.context == "board") { if(layerInfo.layer_type == 'signal' && /(cil)|(col)/.test(layer)){ var lyr_paras = {}; diff --git a/public_script/scotttest.js b/public_script/scotttest.js index 870d6fff4256a9515256be9082c8a9815de5d276..309e6da02a7097fa46d95a3e0c89a9c600be8e51 100644 --- a/public_script/scotttest.js +++ b/public_script/scotttest.js @@ -11,74 +11,10 @@ PARAMETER: }, { name : 'outline', - title : 'outline', + title : '外形层', type : 'LineEdit', - property : {tool_tip : 'ç›®æ ‡outline,默认是ol'}, - }, - { - name : 'units', - title : 'å•ä½', - type : 'RadioBox', - property : { - size_policy:'Expanding,Fixed', - item_list:[ - {name:'inch',text:'INCH'}, - {name:'mm',text:'MM'}, - ], - tool_tip:'工作å•ä½ï¼Œæœªè®¾å®šï¼Œé»˜è®¤ä¸ºINCH' - }, - pack : {row:1,column:1}, - }, - { - name : 'tmp_enlarge_ss', - title : 'æ–‡å—临时涨大辅助', - type : 'LineEdit', - property : {tool_tip : ''}, - }, - { - name : 'cover_layer_suffix', - title : 'æ–‡å—套层åŽç¼€', - type : 'LineEdit', - property : {tool_tip : ''}, - }, - { - name : 'silk_suffix', - title : '分离的文å—层åŽç¼€', - type : 'LineEdit', - property : {tool_tip : ''}, - }, - { - name : 'text_height', - title : 'æ–‡å—æœ€å¤§é«˜åº¦', - type : 'LineEdit', - property : {tool_tip : ''}, - }, - { - name : 'ss_elarge_height', - title : 'æ–‡å—æ”¾å¤§é«˜åº¦', - type : 'LineEdit', - property : {tool_tip : ''}, - }, - { - name : 'bk_suffix', - title : '备份层åŽç¼€', - type : 'LineEdit', - property : {tool_tip : ''}, - }, - { - name : 'select_lyr', - title : '选择层别', - type : 'RadioBox', - property : { - size_policy:'Expanding,Fixed', - item_list:[ - {name:'yes',text:'Yes'}, - {name:'no',text:'No'}, - ], - tool_tip:'未设定,默认为Yes' - }, - pack : {row:1,column:1}, - }, + property : {tool_tip : 'æ”¯æŒæ£åˆ™åŒ¹é…'}, + }, { name : 'auto_save', title : '自动ä¿å˜', @@ -100,7 +36,7 @@ PARAMETER: HELP: <html><body bgcolor="#DDECFE"> <font size="3" color="#003DB2"><p>功能简介</p></font> - <p> æ ‡é¢˜ </p> + <p> 铺铜 </p> <br> <font size="3" color="#003DB2"><p>傿•°é…ç½®</p></font> <p> stepä¿¡æ¯ </p> @@ -112,14 +48,11 @@ PARAMETER: */ ////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////// -console.log("=============================:template"); +console.log("==============================>template"); // å¼•å…¥æ¨¡å— åŒ… var $ = require('topcam.scriptfunc').argv(); var fs = require('fs'); -const { padStart } = require('lodash'); var _ = require('lodash'); -require("topsin.genmath") -var genMath = new GenMath(); var mode = $.ikm ? "topcam" : "aimdfm"; var IKM = $.ikm; if (IKM==undefined ) { IKM = require('topcam.ikm6')($) } @@ -127,1314 +60,209 @@ var GEN = $.gen; var GUI = $.gui || {}; var Job = $.job || $.job_name; var JobId = $.job_id; -var db = $.db || IKM.db +var db = $.db || IKM.db; +require("topsin.genmath"); +var genMath = new GenMath(); var PAR = {} -if ($.par) { PAR = $.par } else if ($.hasOwnProperty('script_parameter')){ PAR = JSON.parse($.script_parameter); } +if ($.par) { + PAR = $.par +} else if ($.hasOwnProperty('script_parameter')){ + PAR = JSON.parse($.script_parameter); +} if (mode === "aimdfm") { var database = require("topsin.database"); database.addConnection($.conf.database_conf, "DFM"); var QDfm = database.query("DFM"); $.QDfm = QDfm; if ($.conf.product_type == "aimdfm") { - QDfm.updateRow({ table: "pdm_aimdfm_task", data: { current_process_title: $.process_title }, where: { id: $.task_id } }); + QDfm.updateRow({ + table: "pdm_aimdfm_task", + data: { + current_process_title: $.process_title + }, + where: { id: $.task_id } + }); } } var Status = 'ok'; var resultData = []; -var par = PAR; -var default_par = { - units:"mm", - 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_tmp", - tol: 1, - select_lyr: "no", - step: "unit", - ss_elarge_height:2000, - tmp_enlarge_ss:700, - auto_save: "No", - outline: "ol" -} -for(var key in default_par){ if (!par.hasOwnProperty(key) || par[key] == ""){ par[key] = default_par[key] }} -var job = Job; -var outline = par.outline -var gui = new NewGUI(GUI); -if(!par.outline_size){ - par.outline_size = par.units == 'inch' ? 7.87 : 200; -} + try { - if(_.isEmpty(job)){throw "傿•°jobä¸å˜åœ¨"} else { job = job.toLowerCase() } + var par = PAR; + var default_par = { + step: "unit.+", + step2:"unit", + auto_save: "No", + outline:"ol", + units:"mm" + } + var jtg_inner_layer_avoid_copper = IKM.get_jobinfo({jobid:JobId, jobinfo:"jtg_inner_layer_avoid_copper"}) * 2000 - 200 + for(var key in default_par){ // 设置默认属性 + if (!par.hasOwnProperty(key) || par[key] == ""){ + par[key] = default_par[key] + } + } + if(_.isEmpty(Job)){throw "傿•°Jobä¸å˜åœ¨"} + var job = Job.toLowerCase() if(!GEN.isJobExists({job:job})){throw "æ–™å·"+job+"ä¸å˜åœ¨"} if(!GEN.isJobOpen({job:job})){ GEN.openJob({job:job}) } - if(mode == "aimdfm"){ if(GEN.checkInout({job:job,mode:"test"}) != 0){ throw "the job check" } else { GEN.checkInout({job:job,mode:"out"}) } } - - var workstep = getWorkStep() - if(!Array.isArray(workstep)){throw "工作step错误"} - - var err = slOptimize({workstep:workstep}) // æ–‡å—优化 - if (err) {throw err} - - // ä¿å˜ - if(/yes/ig.test(par.auto_save)){GEN.checkInout({job:job,mode:"out"}); GEN.saveJob({ job: job });GEN.checkInout({job:job,mode:"in"});GEN.closeJob({job:job});} else {GEN.checkInout({job:job,mode:"in"})} - if (mode === "aimdfm") { - $.QDfm.updateRow({table: "pdm_aimdfm_task",data: {progress: 33.33},where: { id: $.task_id }}); - if (GEN.hasError()) { Status = 'error';resultData.push({ type: "error", title: "GEN错误!", detail: [{ desc: _.join(GEN.STATUS, "\n") }] }); - return {status: Status,result_data: resultData}; - } else { resultData.push({ type: "info", title: "æ“作完æˆ, è¯·æ³¨æ„æ£€æŸ¥!" }); return {status: Status,result_data: resultData}; } - }else { return "Done" } -} catch (e) { - IKM.msg(_.join(GEN.STATUS, "\n"));IKM.msg(e);Status = 'error'; - resultData.push({type: "error", title: "脚本执行出错!", detail: [{desc: _.toString(e)}]}); - return (mode === "aimdfm") ? {status: Status, result_data: resultData} : "Error"; -} - -// 创建套层 -function createCoverLayer (props){ - // 1. step过滤 - var workstep = props.workstep; - // 2.过滤工作层 - var work_layer = 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_layer = gui.selectMultiple({title: "请先择工作层",list: layers,defaultvalue: work_layer,columns: 4,gen: GEN}) + if(mode == "aimdfm"){ + if(GEN.checkInout({job:job,mode:"test"}) != 0){ throw "the job check" } + GEN.checkInout({job:job,mode:"out"}); } - if(work_layer.length == 0 ) {return "没有先择layer"} - // 其他傿•° - var info = gui.showForm({ - title : '请手动匹é…以下信æ¯', - showcheck : 1,gen:GEN, - defaultsize:[200,100], - ui: { - type: 'ScrollArea', - property: { widget_resizable: true, frame_shape: 'NoFrame', align: 'Top' }, - child: { - type: 'VBoxLayout', - property: { margin: 2, spacing: 5, align: 'Top' }, - pack: { stretch: 0 }, - child:[{ - type: "FormGridLayout", - property: { columns: 1, label_alignment: 'Top | Right', margin: 10, spacing: 20 }, - pack: { stretch: 0 }, - child:[{ - name : 'ss_to_sm', - pack: { label: 'æ–‡å—è·ç¦»é˜»ç„Š(å•è¾¹)' }, - type : 'LineEdit', - units:par.units == 'inch' ? 'mil' : 'um', - setter: function(obj){ obj.setText() }, - property: { enabled: true, value:par.ss_to_sm } - }, - { - name : 'ss_to_smd', - pack: { label: 'æ–‡å—è·ç¦»SMD(å•è¾¹)' }, - type : 'LineEdit', - setter: function(obj){ obj.setText() }, - units:par.units == 'inch' ? 'mil' : 'um', - property: { value:par.ss_to_smd,enabled: true } - }, - { - name : 'ss_to_bga', - pack: { label: 'æ–‡å—è·ç¦»BGA(å•è¾¹)' }, - setter: function(obj){ obj.setText() }, - type : 'LineEdit', - value:par.ss_to_bga, - units:par.units == 'inch' ? 'mil' : 'um', - property: {value:par.ss_to_smd, enabled: true } - }, - { - type: "stretch" - }] - }] - } - } - }); - if(!info){throw "æœªå¡«å†™å‚æ•°"} - info = JSON.parse(JSON.stringify(info)) - var matrix = GEN.getMatrix({job:job}) - workstep.forEach(function(step){ - GEN.openStep({job:job,name:step}); - GEN.clearLayers(); - GEN.affectedLayer({ mode:'all',affected:'no' }); - GEN.units({ type:par.units} ); - GEN.zoomHome(); - work_layer.forEach(function(layer){ - var cover_lyr = layer + par.cover_layer_suffix ; - var sm,outer ; - if ( GEN.isLayerExists({job:job,layer:cover_lyr}) ) { GEN.deleteLayer({job:job,layer:[cover_lyr]}) } - if (matrix[layer].side == 'top') { - sm = getLayer({layer_type:"solder_mask", context:"board", side:"top"})[0]; - outer = getLayer({layer_type:"signal", context:"board", side:"top"})[0]; - GEN.createLayer({job:job,layer:cover_lyr,context:'board',type:'document',before:layer,delete_exists:'yes'}); - }else{ - sm = getLayer({layer_type:"solder_mask", context:"board", side:"bottom"})[0]; - outer = getLayer({layer_type:"signal", context:"board", side:"bottom"})[0]; - GEN.createLayer({job:job,layer:cover_lyr,context:'board',type:'document',before:layer,delete_exists:'yes'}); - } - if ( GEN.isLayerExists({job:job,layer:sm}) ) { - GEN.affectedLayer({affected:'yes',layer:[sm],clear_before:'yes'}); - GEN.selectByFilter({polarity:'positive',profile:'all'}); - GEN.selCopyOther({dest:'layer_name',target_layer:cover_lyr,invert:'no',size:2*info.ss_to_sm}); - } - if ( GEN.isLayerExists({job:job,layer:outer}) ) { - GEN.affectedLayer({affected:'yes',layer:[outer],clear_before:'yes'}); - GEN.selectByFilter({attribute:['.smd'],profile:'all'}); - if ( GEN.getSelectCount() > 0 ){GEN.selCopyOther({dest:'layer_name',target_layer:cover_lyr,invert:'no',size:2*info.ss_to_smd});} - GEN.selectByFilter({attribute:['.bga'],profile:'all',}); - if ( GEN.getSelectCount() > 0 ){GEN.selCopyOther({dest:'layer_name',target_layer:cover_lyr,invert:'no',size:2*info.ss_to_bga});} - } - if ( GEN.isLayerExists({job:job,layer:outline}) ) { - var outline_tmp = outline + '_tmp_tl'; - GEN.copyLayer({source_job:job,source_step:step,source_layer:outline,dest_layer:outline_tmp,mode:'replace',invert:'no'}) ; - GEN.affectedLayer({affected:'yes',layer:[outline_tmp],clear_before:'yes'}); - GEN.selectByFilter({feat_types:'line\;arc',polarity:'positive',profile:'all'}); - if ( GEN.getSelectCount() > 0 ){ GEN.selChangeSym({symbol:'r'+par.outline_size}) } - GEN.copyLayer({source_job:job,source_step:step,source_layer:outline_tmp,dest_layer:cover_lyr,mode:'append',invert:'no'}) - GEN.deleteLayer({job:job,layer:[outline_tmp],step:step}); - } - }) + + var steplist = GEN.getStepList({job:job}) + steplist = steplist.filter(function(v){ + var tmpreg = new RegExp(par.step,"ig") + return tmpreg.test(v) }) - GEN.affectedLayer({affected:'no',mode:'all'}) - GEN.clearLayers() -} -// å—符 å’Œ æ–‡å—æ¡†åˆ†å¼€ -function ssFrameSeparate (props) { - // 1. step过滤 - var workstep = props.workstep; - // 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 + if (steplist.length == 0 && par.step2) { + steplist = GEN.getStepList({job:job}).filter(function (v) { + var tmpreg = new RegExp(par.step2, "ig"); + return tmpreg.test(v); }) - work_layers = gui.selectMultiple({defaultsize:[200,100],title: "请先择工作层",list: layers,defaultvalue: work_layers,columns: 4,gen: GEN}) } - if(work_layers.length == 0 ) {return "没有先择layer"} - - var info = gui.showForm({ - title : '请手动匹é…以下信æ¯', - showcheck : 1,gen:GEN, - defaultsize:[500,250], - ui: { - type: 'ScrollArea', - property: { widget_resizable: true, frame_shape: 'NoFrame', align: 'Top' }, - child: { - type: 'VBoxLayout', - property: { margin: 2, spacing: 5, align: 'Top' }, - pack: { stretch: 0 }, - child:[{ - type: "FormGridLayout", - property: { columns: 1, label_alignment: 'Top | Right', margin: 10, spacing: 20 }, - pack: { stretch: 0 }, - child:[{ - name : 'text_height', - pack: {label : 'æ–‡å—æœ€å¤§é«˜åº¦'}, - type : 'LineEdit', - setter: function(obj){ obj.setText() }, - property: { value:par.text_height * 1000,enabled: true }, - units:par.units == 'inch' ? 'mil' : 'um' - },{ - name : 'type', - pack: { label: '类型' }, - type : 'RadioBox', - property: { enabled: true,item_list:[{name : 'separate', text:'å—æ¡†åˆ†ç¦»'},{name:"change",text:"å—æ¡†åˆ‡æ¢"}]} - }, - { - type: "stretch" - }] - }] - } - } - }); - if(!info){throw "æœªå¡«å†™å‚æ•°"} - info = JSON.parse(JSON.stringify(info)); - if(info.type == ""){info.type = "separate"} - var matrix = GEN.getMatrix({job:job}) - workstep.forEach(function(step){ - GEN.openStep({job:job,name:step}); - GEN.clearLayers(); - GEN.affectedLayer({ mode:'all',affected:'no'} ); - GEN.units({ type:par.units }); - GEN.zoomHome(); - var layer_count = GEN.getLayerCount({job:job}) // IKM.get_jobinfo({jobid: JobId, jobinfo: "layer_count"}) - GEN.COM('disp_off'); - if (info["type"] == 'separate') { - work_layers.forEach(function(layer){ - // 备份文å—层 - var bk = layer + par.bk_suffix; - GEN.copyLayer({source_job:job,source_step:step,source_layer:layer,dest_layer:bk,mode:'replace', invert:'no'}) - // 分离出的文å—层 - var ss_text = layer + par.silk_suffix; - if (matrix[layer]["side"] == 'top') { - GEN.createLayer({job:job,layer:ss_text,context:'board',type:'document',before:layer,delete_exists:'yes'}); - }else{ - GEN.createLayer({job:job,layer:ss_text,context:'board',type:'document',after:layer,delete_exists:'yes'}); - } - - // å¼€å§‹åˆ†ç¦»æ–‡å— - GEN.affectedLayer({affected:'yes',layer:layer,clear_before:'yes'}); - GEN.COM("filter_reset,filter_name=popup"); - GEN.selectByFilter({feat_types:'line\;arc',polarity:'positive',profile:'all'}); - if ( GEN.getSelectCount() > 0 ){ - var ss_line_arc = layer + '_line_arc_tl_script'; - selCopyOther({layer:ss_line_arc,delExist: true}) - GEN.affectedLayer({affected:'yes',layer:ss_line_arc,clear_before:'yes'}); - GEN.selChangeSym({symbol:'r0.2'}); - GEN.COM("filter_reset,filter_name=popup"); - GEN.selectByFilter({feat_types:'line',polarity:'positive',profile:'all'}); - //将直线固定角度分离去除 - var ss_line = layer + '_line_tl_script'; - if ( GEN.getSelectCount() > 0 ){ - selCopyOther({layer:ss_line,delExist: true}) - GEN.affectedLayer({affected:'yes',layer:ss_line,clear_before:'yes'}); - var angle = []; - var tol = 0.2; - if(GEN.GEN_TYPE == 'genesis'){ - angle = [-180,-135,-90,-45,0,45,90,135]; - }else{ - angle = [0,45,90,135,180,225,270,315]; - } - angle.forEach(function(angl){ - if(GEN.GEN_TYPE == 'genesis'){ - var min_angle = (angl-tol < -180) ? -180 : (angl-tol); - var max_angle = (angl+tol > 180) ? 180 : (angl+tol); - GEN.COM('filter_set',{filter_name:'popup',update_popup:'yes',slot:'line',slot_by:'angle',min_angle:min_angle,max_angle:max_angle}); - }else{ - GEN.COM('set_filter_angle',{direction:'ccw',max_angle:angl+tol,min_angle:angl-tol,slot:'lines'}); - GEN.COM("adv_filter_set,ccw_rotations=,filter_name=popup,mirror=any,bound_box=no,active=yes,srf_values=no,srf_area=no,limit_box=no"); - } - GEN.COM("filter_area_strt"); - GEN.COM("filter_area_end,filter_name=popup,operation=select"); - }) - if ( GEN.getSelectCount() > 0 ){GEN.selDelete()} - } - if(GEN.isLayerExists({job:job,layer:ss_line})){ - // 利用制作的套层 - var cover_lyr = layer + par.cover_layer_suffix; - GEN.affectedLayer({affected:'yes',layer:[cover_lyr],clear_before:'yes'}); - GEN.COM("filter_reset,filter_name=popup"); - GEN.COM("filter_set,filter_name=popup,update_popup=no,include_syms=r*"); - GEN.COM("filter_set,filter_name=popup,update_popup=no,exclude_syms=rect*"); - GEN.COM("filter_area_strt"); - GEN.COM("filter_area_end,filter_name=popup,layer=,operation=select,inside_area=no,intersect_area=no,area_type=none"); - GEN.COM("filter_reset,filter_name=popup"); - GEN.COM("sel_reverse"); - var cover_lyr_2 = cover_lyr + '_tmp_tl'; - - 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(); - if(GEN.GEN_TYPE == 'incam'){ - GEN.COM("reset_filter_criteria,filter_name=,criteria=all"); - }else{ - GEN.COM("filter_atr_reset,filter_name=ref_select"); - } - GEN.COM("sel_ref_feat,pads_as=shape,mode=touch,exclude_syms=,include_syms=,use=filter,f_types=line\;pad\;surface\;arc\;text,polarity=positive\;negative,layers="+ss_line); - var layer_tmp1 = layer + '_tmp1_tl'; - if ( GEN.getSelectCount() > 0 ){ - GEN.createLayer({job:job,layer:layer_tmp1,delete_exists:'yes'}); - GEN.selMoveOther({target_layer:layer_tmp1,invert:'no'}); - } - if(GEN.GEN_TYPE == 'incam'){ - GEN.COM("reset_filter_criteria,filter_name=,criteria=all"); - }else{ - GEN.COM("filter_atr_reset,filter_name=ref_select"); - } - GEN.COM("sel_ref_feat,pads_as=shape,mode=touch,exclude_syms=,include_syms=,use=filter,f_types=line\;pad\;surface\;arc\;text,polarity=positive\;negative,layers="+cover_lyr_2); - var layer_tmp2 = layer + '_tmp2_tl'; - if ( GEN.getSelectCount() > 0 ){ - GEN.createLayer({job:job,layer:layer_tmp2,delete_exists:'yes'}); - GEN.selCopyOther({target_layer:layer_tmp2,invert:'no'}); - } - GEN.COM("sel_clean_surface,max_fold_len=0,clean_size="+info.text_height+",clean_mode=x_and_y,accuracy=0"); - if (GEN.isLayerExists({job:job,layer:"layer_tmp2"})) { - GEN.affectedLayer({affected:'yes',layer:[layer_tmp2],clear_before:'yes'}); - if(GEN.GEN_TYPE == 'incam'){ - GEN.COM("reset_filter_criteria,filter_name=,criteria=all"); - }else{ - GEN.COM("filter_atr_reset,filter_name=ref_select"); - } - GEN.COM("sel_ref_feat,pads_as=shape,mode=disjoint,exclude_syms=,include_syms=,use=filter,f_types=line\;pad\;surface\;arc\;text,polarity=positive\;negative,layers="+ss_line_arc); - if ( GEN.getSelectCount() > 0 ){ - GEN.selMoveOther({target_layer:layer_tmp1,invert:'no'}); - } - } - if (GEN.isLayerExists({job:job,layer:layer_tmp1})) { - GEN.affectedLayer({affected:'yes',layer:[layer_tmp1],clear_before:'yes'}); - if(GEN.GEN_TYPE == 'incam'){ - GEN.COM("reset_filter_criteria,filter_name=,criteria=all"); - }else{ - GEN.COM("filter_atr_reset,filter_name=ref_select"); - } - GEN.COM("sel_ref_feat,pads_as=shape,mode=touch,exclude_syms=,include_syms=,use=filter,f_types=line\;pad\;surface\;arc\;text,polarity=negative,layers="+layer); - if ( GEN.getSelectCount() > 0 ){GEN.selDelete() }; - - GEN.affectedLayer({affected:'yes',layer:[layer],clear_before:'yes'}); - if(GEN.GEN_TYPE == 'incam'){ - GEN.COM("reset_filter_criteria,filter_name=,criteria=all"); - }else{ - GEN.COM("filter_atr_reset,filter_name=ref_select"); - } - GEN.COM("sel_ref_feat,pads_as=shape,mode=touch,exclude_syms=,include_syms=,use=filter,f_types=line\;pad\;surface\;arc\;text,polarity=positive\;negative,layers="+layer_tmp1); - if ( GEN.getSelectCount() > 0 ){ - GEN.selMoveOther({target_layer:ss_text,invert:'no'}); - } - } - // 将文å—属性挑选 - GEN.COM("filter_reset,filter_name=popup"); - GEN.selectByFilter({feat_types:'text'} ); - if ( GEN.getSelectCount() > 0 ){ - GEN.selMoveOther({target_layer:ss_text,invert:'no'}); - } - delLayer([ss_line_arc,ss_line,cover_lyr_2,layer_tmp1,layer_tmp2]); - } - } - }) - } - 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(props){ - // 1. step过滤 - var workstep = props.workstep; - // 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({defaultsize:[200,100],title: "请先择工作层",list: layers,defaultvalue: work_layers,columns: 4,gen: GEN}) + var rout = "ol-tz"; + if(!GEN.isLayerExists({job:job, layer:rout})){ + rout = par.outline } - if(work_layers.length == 0 ) {return "没有先择layer"} - - 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]); - // 放大 - 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(work_layer + "å±‚ï¼šè¯·é€‰æ‹©éœ€æ”¾å¤§çš„æ–‡å—æ¡†ï¼Œä¸éœ€åˆ¶ä½œäº†è¯·ã€å·¦é”®æ¡†é€‰ç©ºç™½å¤„】") - while(flag){ - GEN.workLayer({name:work_layer,display_number:1,clear_before:'yes'}); - GEN.displayLayer({name:ref_layer,number:2}); - 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){ - 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.length; 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'); - if(GEN.isLayerExists({ job:job,step:step,layer:ref_pad})){GEN.deleteLayer({job:job, layer:ref_pad})} - var ans = GEN.PAUSE('Please Check...'); - if(!/ok/ig.test(ans)){ throw "cancel" } - GEN.COM('disp_off'); - - - var tmp_symbol = 'tl_script_tmp'; - GEN.workLayer({name:tmp1,display_number:1,clear_before:'yes'}); - 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; - } + var tmp = rout + '_tmp' + if(!GEN.isLayerExists({job:job, layer:tmp})){ + GEN.deleteLayer({job:job, layer:[tmp]}) + } + var matrix = GEN.getMatrix({job:job}) + var work_layers = Object.keys(matrix).filter(function(v) { + var layer_info = matrix[v]; + return layer_info.context == "board" && layer_info.layer_type=="signal" && layer_info.side == "inner" + }) + steplist.forEach(function(step) { + GEN.openStep({job:job, name:step}) + GEN.units({type:par.units}) + GEN.clearLayers() + GEN.workLayer({name:rout,display_number:2,clear_before:'yes'}) + GEN.selectByFilter({profile:"in"}) + if(GEN.getSelectCount() > 0) { + GEN.selMoveOther({target_layer:tmp,invert:'no',dx:0,dy:0,size:0}) + GEN.workLayer({name:tmp,display_number:2,clear_before:'yes'}); + (function(){ + GEN.selRefFeat({layers:rout,use:"filter",mode:"touch"}); + if(GEN.getSelectCount() > 0) { + GEN.selMoveOther({target_layer:rout,invert:'no',dx:0,dy:0,size:0}) + arguments.callee() } - }) - } - }) - if(GEN.isLayerExists({job:job, layer:"tmp_ref_pad"})){GEN.deleteLayer({job:job, layer:["tmp_ref_pad"]})} - -} - -// æ–‡å—æ”¾å¤§ -function slOptimize(props) { - - var info = gui.showForm({ - title : '请手动匹é…以下信æ¯', - showcheck : 1,gen:GEN, - defaultsize:[200,100], - ui: { - type: 'ScrollArea', - property: { widget_resizable: true, frame_shape: 'NoFrame', align: 'Top' }, - child: { - type: 'VBoxLayout', - property: { margin: 2, spacing: 5, align: 'Top' }, - pack: { stretch: 0 }, - child:[{ - type: "FormGridLayout", - property: { columns: 1, label_alignment: 'Top | Right', margin: 10, spacing: 20 }, - pack: { stretch: 0 }, - child:[{ - name : 'font_symbol', - pack: { label: 'æ–‡å—symbol' }, - type : 'LineEdit', - setter: function(obj){ obj.setText() }, - units: 'um', - property: { enabled: true, value:200 } - }, - { - name : 'tmp_enlarge_ss', - pack: { label: 'æ–‡å—作为辅助临时扩大' }, - type : 'LineEdit', - units: 'um', - setter: function(obj){ obj.setText() }, - property: { value:par.tmp_enlarge_ss,enabled: true } - }, - { - name : 'font_height', - pack: { label: 'å—高(um)' }, - type : 'LineEdit', - units: 'um', - setter: function(obj){ obj.setText() }, - property: { value:par.ss_elarge_height,enabled: true } - }, - { - type: "stretch" - }] - }] + })(); + // 过滤外形线 + if(!GEN.isLayerExists({job:job, layer:tmp + "2"})){ + GEN.deleteLayer({job:job, layer:[tmp + "2"]}) } - } - }); - if(!info){throw "æœªå¡«å†™å‚æ•°"} - info = JSON.parse(JSON.stringify(info)) - var font_height = info.font_height; - var font_symbol = info.font_symbol; - var tmp_enlarge_ss = info.tmp_enlarge_ss; - // 1. step过滤 - var workstep = props.workstep; - // 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({defaultsize:[200,100],title: "请先择工作层",list: layers,defaultvalue: work_layers,columns: 4,gen: GEN}) - } - if(work_layers.length == 0 ) {return "没有先择layer"} - - var matrix = GEN.getMatrix({job:job}) - - workstep.forEach(function(step) { - GEN.openStep({job:job, name:step}) - GEN.units({type:par.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(); - work_layers.forEach(function(layer){ - var font_layer = layer + par.silk_suffix; - GEN.workLayer({name:font_layer,display_number:2,clear_before:'yes'}) - GEN.selChangeSym({symbol:"r" + font_symbol}) - var tmp1 = font_layer + "_1"; - var tmp2 = font_layer + "_2"; - var tmp3 = font_layer + "_3"; - var bk = font_layer + "_bk"; - var bk2 = font_layer + "_ok"; - var bk_tmp = font_layer + "_ok_tmp"; - var bk_ok2 = font_layer + "_ok2"; - - [tmp1,tmp2,tmp3,bk,bk2,bk_tmp,bk_ok2].forEach(function(v){ - if(GEN.isLayerExists({job:job, layer:v})){GEN.deleteLayer({job:job,layer:[v]})} - }) - // GEN.copyLayer({source_job:job,source_step:step,source_layer:font_layer,dest_layer:tmp1, mode:"replace"}) - GEN.copyLayer({source_job:job,source_step:step,source_layer:font_layer,dest_layer:tmp3, mode:"replace"}) - GEN.copyLayer({source_job:job,source_step:step,source_layer:font_layer,dest_layer:bk2, mode:"replace"}) - - // GEN.copyLayer({source_job:job,source_step:step,source_layer:font_layer,dest_layer:bk, mode:"replace"}) - GEN.affectedLayer({affected:'no',mode:'all'}) - GEN.selClearFeature() - // GEN.workLayer({name:tmp1,display_number:2,clear_before:'yes'}) - // GEN.selChangeSym({symbol:"r0.1"}) - - // 利用tmp3 å¿«é€Ÿå®šä½ - GEN.workLayer({name:tmp3,display_number:2,clear_before:'yes'}) - GEN.units({type:"mm"}) - GEN.selChangeSym({symbol:"r" + tmp_enlarge_ss}) - // 转铜皮 èŽ·å–æ¯ä¸€ä¸ªé“œçš®çš„limitsä¿¡æ¯ - GEN.selContourize() - var fast_features = GEN.getFeatures({job:job,step:step,layer:tmp3,options:"feat_index",surface:1,units:"mm"}) - fast_features = featsToLimits(fast_features) - fast_features.forEach(function(item){ - if(item.limit.xsize > item.limit.ysize) { - var k = font_height / (item.limit.ysize * 1000) - item.x_scale = k - item.y_scale = k - } else { - var k = font_height / (item.limit.xsize * 1000) - item.y_scale = k - item.x_scale = k + GEN.COM("profile_to_rout,layer="+tmp + "2"+",width=1") + GEN.selRefFeat({layers:tmp + "2",use:"filter",mode:"touch"}); + (function(){ + GEN.selRefFeat({layers:rout,use:"filter",mode:"touch"}); + if(GEN.getSelectCount() > 0) { + GEN.selMoveOther({target_layer:rout,invert:'no',dx:0,dy:0,size:0}) + arguments.callee() + } + })(); + GEN.deleteLayer({job:job, layer:[tmp + "2"]}) + GEN.selAllFeat() + if(GEN.getSelectCount() > 0) { + // ç»§ç»è¿‡æ»¤ + if(GEN.isLayerExists({job:job, layer:tmp+"_f"})){ + GEN.deleteLayer({job:job, layer:[tmp + "_f"]}) } - }) - fast_features.forEach(function(item){ - GEN.workLayer({name:bk2,display_number:2,clear_before:'yes'}) - GEN.COM("filter_area_strt") - GEN.COM("filter_area_xy,x="+item.limit.xmin+",y=" + item.limit.ymin) - GEN.COM("filter_area_xy,x="+item.limit.xmax+",y=" + item.limit.ymax) - GEN.COM("filter_area_end,layer=,filter_name=popup,operation=select,area_type=rectangle,inside_area=yes,intersect_area=yes") - if(GEN.getSelectCount() > 0 ) { - GEN.selMoveOther({target_layer:bk_tmp,invert:'no',dx:0,dy:0,size:0}) - GEN.workLayer({name:bk_tmp,display_number:2,clear_before:'yes'}) - var tmp_limitbk = GEN.getLayerLimits({job:job,step:step,layer:bk_tmp,units:'mm'}) - tmp_limitbk.xc = Number(tmp_limitbk.xmin) + tmp_limitbk.xsize/2 - tmp_limitbk.yc = Number(tmp_limitbk.ymin) + tmp_limitbk.ysize/2 - tmp_limitbk.xsize = Number(tmp_limitbk.xsize) - tmp_limitbk.ysize = Number(tmp_limitbk.ysize) - var k; - var sym = 0; - var syms = GEN.getLayerSymsHist({job:job,step:step,layer:bk_tmp,options:'break_sr',units:'mm'}) - for (var key in syms) { - var symInfo = syms[key]; - if(symInfo.size){ - var size = symInfo.size; - if(sym == 0){ - sym = size - } else { - sym = size > sym? sym : size - } - } - } - if(tmp_limitbk.xsize > tmp_limitbk.ysize) { - k = (font_height-sym) / (tmp_limitbk.ysize * 1000 - sym) - } else { - k = (font_height-sym) / (tmp_limitbk.xsize * 1000 - sym) - } - GEN.selTransform({mode:'anchor',oper:'scale',x_anchor: tmp_limitbk.xc,y_anchor: tmp_limitbk.yc,x_scale:k,y_scale:k}) - GEN.selMoveOther({target_layer:bk_ok2,invert:'no',dx:0,dy:0,size:0}) + GEN.selCopyOther({dest:'layer_name',target_layer:tmp + "_f",invert:'no',dx:0,dy:0,size:0}) + GEN.workLayer({name:tmp + "_f",display_number:2,clear_before:'yes'}) + GEN.COM("sel_cut_data,det_tol=25.4,con_tol=25.4,rad_tol=0,filter_overlaps=no,delete_doubles=no,use_order=yes,ignore_width=yes,ignore_holes=none,start_positive=yes,polarity_of_touching=same") + GEN.selRefFeat({layers:"drl",use:"filter",mode:"touch"}) + if(GEN.getSelectCount() > 0) {GEN.selDelete()} + GEN.workLayer({name:tmp,display_number:2,clear_before:'yes'}); + GEN.selRefFeat({layers:tmp + "_f",use:"filter",mode:"touch"}) + GEN.selReverse() + if(GEN.getSelectCount() > 0) { + GEN.selMoveOther({target_layer:rout,invert:'no',dx:0,dy:0,size:0}) } - }) - // 框选 - var flag = true; - IKM.msg(font_layer + "层:请选择需放大的文å—,ä¸éœ€åˆ¶ä½œäº†è¯·ã€å·¦é”®æ¡†é€‰ç©ºç™½å¤„】") - var x_or_y = "x"; - while(flag){ - var bk2_tmp = bk2 + "_tmp" - GEN.workLayer({name:bk_ok2,display_number:1,clear_before:'yes'}); - GEN.displayLayer({name:bk2, number:2}); - GEN.displayLayer({name:font_layer, number:2}); - - var tmp_con = GEN.MOUSE({type:'r',text:"Please Select"}); - - GEN.workLayer({name:font_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){ - var info2 = gui.showForm({ - title : '请手动匹é…以下信æ¯', - showcheck : 1,gen:GEN, - defaultsize:[200,100], - ui: { - type: 'ScrollArea', - property: { widget_resizable: true, frame_shape: 'NoFrame', align: 'Top' }, - child: { - type: 'VBoxLayout', - property: { margin: 2, spacing: 5, align: 'Top' }, - pack: { stretch: 0 }, - child:[{ - type: "FormGridLayout", - property: { columns: 1, label_alignment: 'Top | Right', margin: 10, spacing: 20 }, - pack: { stretch: 0 }, - child:[{ - name : 'font_symbol', - pack: { label: 'æ–‡å—symbol' }, - type : 'LineEdit', - setter: function(obj){ obj.setText() }, - units: 'um', - property: { enabled: true, value:"200" } - }, - { - name : 'x_or_y', - pack: { label: 'æ–‡å—æ–¹å‘' }, - type : 'LineEdit', - setter: function(obj){ obj.setText() }, - property: { value:x_or_y,enabled: true } - }, - { - name: 'font_height', - pack: { label: 'å—高(um)' }, - type: 'LineEdit', - units: 'um', - setter: function (obj) { obj.setText() }, - property: {value: par.ss_elarge_height,enabled: true } - }, - { - type: "stretch" - }] - }] - } + GEN.deleteLayer({job:job, layer:[tmp + "_f"]}) + // 对å•è¾¹>=20000umçš„é—åˆå›¾å½¢é“ºé“œ + // 将长度 >= 20000çš„çº¿é€‰å‡ºæ¥ å°†è·Ÿæ¤çº¿xyåæ ‡ç›¸åŒçš„çº¿é€‰å‡ºæ¥æ‹·è´åˆ°è¾…助层 cuttingdata æ‹·è´å›žåŽ» + if(GEN.isLayerExists({job:job, layer:tmp+"_2"})){ + GEN.deleteLayer({job:job, layer:[tmp + "_2"]}) + } + var feats = GEN.getFeatures({job:job,step:step,layer:tmp,units:"mm",options:"feat_index"}) + feats.forEach(function(item){ + if(item.type == "line") { + var len = Math.sqrt((item.xe-item.xs)*(item.xe-item.xs) + (item.ye-item.ys)*(item.ye-item.ys)) + if(len >= 20) { + GEN.selLayerFeat({layer:tmp,index:item.index,operation:"select"}) + if(GEN.getSelectCount() > 0) {GEN.selMoveOther({target_layer:tmp+"_2",invert:'no',dx:0,dy:0,size:0})} } - }); - if(!info2){throw "æœªå¡«å†™å‚æ•°"} - info2 = JSON.parse(JSON.stringify(info2)) - x_or_y = info2.x_or_y; - var font_height2 = info2.font_height; - var tmp_layer = font_layer + "_tmp"; - selCopyOther({delExist:true,layer: tmp_layer}) - GEN.workLayer({name:tmp_layer,display_number:1,clear_before:'yes'}); - GEN.selAllFeat() - selCopyOther({delExist:true,layer: bk2_tmp}) - GEN.workLayer({name:bk2,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) {GEN.selDelete()} - GEN.workLayer({name:tmp_layer,display_number:1,clear_before:'yes'}); - var limits = GEN.getLayerLimits({job:job,step:step,layer:tmp_layer, units:"mm"}) - for (var key in limits) { - limits[key] = limits[key] - 0; - } - limits.xc = Number(limits.xmin) + limits.xsize/2 - limits.yc = Number(limits.ymin) + limits.ysize/2 - - var sym = 0; - var syms = GEN.getLayerSymsHist({job:job,step:step,layer:tmp_layer,units:'mm'}) - for (var key in syms) { - var symInfo = syms[key]; - if(symInfo.size){ - var size = symInfo.size; - if(sym == 0){ - sym = size - } else { - sym = size > sym? sym : size - } + } else if (item.type == "arc") { + var len = genMath.arcLength(item) + if(len >= 20) { + GEN.selLayerFeat({layer:tmp,index:item.index,operation:"select"}) + if(GEN.getSelectCount() > 0) {GEN.selMoveOther({target_layer:tmp+"_2",invert:'no',dx:0,dy:0,size:0})} } } - // 获å–é‡Œé¢æœ‰å‡ ä¸ªå—æ¯ æ¯ä¸€ä¸ªå—æ¯çš„limitsä¿¡æ¯ - GEN.selChangeSym({symbol:"r1"}) - GEN.selContourize() - var feas = GEN.getFeatures({job:job,step:step,layer:tmp_layer,options:"feat_index",units:"mm"}) - if(feas.length == 1) { - GEN.workLayer({name:bk2_tmp,display_number:2,clear_before:'yes'}); - var k = (font_height2-sym) / ((x_or_y=="y"? limits.xsize : limits.ysize)* 1000 - sym) - GEN.selTransform({mode:'anchor',oper:'scale',x_anchor:limits.xc,y_anchor:limits.yc,x_scale:k,y_scale:k}) - GEN.selMoveOther({target_layer:bk2,invert:'no',dx:0,dy:0,size:0}) - } else if (feas.length > 1) { - var limits_info = []; - feas.forEach(function(item) { - var index = item.index; - GEN.selLayerFeat({layer:tmp_layer, index:index,operation:"select"}); - if(GEN.getSelectCount() > 0) { - var tmp_l = GEN.getLayerLimits({job:job,step:step,layer:tmp_layer, units:"mm", options:"select"}) - for (var key in tmp_l) { - tmp_l[key] = tmp_l[key] - 0; - } - tmp_l.xc = Number(tmp_l.xmin) + tmp_l.xsize/2 - tmp_l.yc = Number(tmp_l.ymin) + tmp_l.ysize/2 - limits_info.push({index:index, limits:tmp_l }) - GEN.selClearFeature() - } - }) - var rodata = [] - limits_info.forEach(function (item, i) { - if(limits_info[i+1]){ - rodata.push(getRodate({ - xs : item.limits.xc, - ys : item.limits.yc, - xe : limits_info[i+1].limits.xc, - ye : limits_info[i+1].limits.yc - })) - } - }) - var angle = rodata.reduce(function(a,b) {return a + b}) / rodata.length; - if (Math.abs(angle) < 10) { angle = 0 } - GEN.workLayer({name:bk2_tmp,display_number:2,clear_before:'yes'}); - GEN.selTransform({mode:'anchor',oper:"rotate",x_anchor:limits.xc,y_anchor:limits.yc,angle:angle}) - // 按照ä¸å¿ƒæ”¾å¤§ - var limits2 = GEN.getLayerLimits({job:job,step:step,layer:tmp_layer, units:"mm"}) - for (var key in limits) { - limits2[key] = limits2[key] - 0; - } - limits2.xc = limits2.xmin + limits2.xsize/2 - limits2.yc = limits2.ymin + limits2.ysize/2 - if(limits2.xsize > limits2.ysize) { - var k = (font_height2 - sym) / ((x_or_y=="y"? limits2.xsize : limits2.ysize)* 1000 - sym) - limits2.x_scale = k - limits2.y_scale = k - } else { - var k = (font_height2 - sym) / ((x_or_y=="y"? limits2.xsize : limits2.ysize)* 1000 - sym) - limits2.y_scale = k - limits2.x_scale = k + }) + if(GEN.isLayerExists({job:job, layer:tmp+"_2"})){ + (function(){ + GEN.workLayer({name:tmp,display_number:2,clear_before:'yes'}); + GEN.selRefFeat({layers:tmp+"_2",use:"filter",mode:"touch"}) + if(GEN.getSelectCount() > 0) { + GEN.selMoveOther({target_layer:tmp+"_2",invert:'no',dx:0,dy:0,size:0}) + arguments.callee() } - GEN.selTransform({mode:'anchor',oper:'scale',x_anchor:limits2.xc,y_anchor:limits2.yc,x_scale:limits2.x_scale,y_scale:limits2.y_scale}) - GEN.selTransform({mode:'anchor',oper:"rotate",x_anchor:limits.xc,y_anchor:limits.yc,angle:360 - angle}) - GEN.selMoveOther({target_layer:bk2,invert:'no',dx:0,dy:0,size:0}) - } - GEN.deleteLayer({job:job, layer:[tmp_layer]}) - } else { - flag = false - } - if(GEN.isLayerExists({job:job, layer:bk2_tmp})) { - GEN.deleteLayer({job:job, layer:[bk2_tmp]}) + })() + GEN.workLayer({name:tmp+"_2",display_number:2,clear_before:'yes'}); + GEN.selCopyOther({dest:'layer_name',target_layer:rout,invert:'no'}) + GEN.COM("sel_cut_data,det_tol=25.4,con_tol=25.4,rad_tol=0,filter_overlaps=no,delete_doubles=no,use_order=yes,ignore_width=yes,ignore_holes=none,start_positive=yes,polarity_of_touching=same") + // æ‹·è´åˆ°è´Ÿå±‚ + work_layers.forEach(function(l){ + GEN.selCopyOther({dest:'layer_name',target_layer:l,invert:'no',dx:0,dy:0,size:-500}) + }) + GEN.deleteLayer({job:job, layer:[tmp + "_2"]}) } } - GEN.PAUSE("check") - // å°†ok的移动到文å—层 - GEN.clearLayers() - GEN.workLayer({name:font_layer,display_number:2,clear_before:'yes'}); - GEN.selDelete(); - GEN.clearLayers() - GEN.affectedLayer({affected:"yes", layer:[bk2, bk_ok2]}) - GEN.selMoveOther({target_layer:layer,invert:'no',dx:0,dy:0,size:0}); - [tmp1,tmp2,tmp3,bk,bk2,font_layer,bk_ok2, layer+cover_layer_suffix].forEach(function(v){ - if(GEN.isLayerExists({job:job, layer:v})){GEN.deleteLayer({job:job,layer:[v]})} + GEN.workLayer({name:tmp,display_number:2,clear_before:'yes'}) + GEN.selMoveOther({target_layer:rout,invert:'no',dx:0,dy:0,size:0}) + GEN.displayLayer({name:rout, number:1}) + GEN.deleteLayer({job:job, layer:[tmp]}) + // åˆ é™¤+++ + var matrix = GEN.getMatrix({job:job}) + Object.keys(matrix).forEach(function(v) { + if(/\+\+\+$/.test(v)){ + GEN.deleteLayer({job:job, layer:[v]}) + } }) - }) - }) -} - -function selCopyOther(props){ // {layer , invent, dx, dy , size} - if(GEN.getSelectCount()>0){ if(!props || !props.layer){return} - if(props.delExist){if(GEN.isLayerExists({job:job, layer:props.layer})){GEN.deleteLayer({job:job, layer:[props.layer]})}} - GEN.selCopyOther({dest:'layer_name',target_layer:props.layer,invert:props.invert || 'no',dx:props.dx || 0,dy:props.dy || 0,size:props.size || 0}) - } -} - -function getLayer(props){ - if(!props){return} - if(!props.context){props.context = "board"} - var matrix = GEN.getMatrix({job:job}) - return Object.keys(matrix).reduce(function(a,b){ - var info = matrix[b]; - var ret = true; - for (var key in props) { if(!Array.isArray(props[key])){props[key] = [props[key]]} - if(info[key] && props[key].indexOf(info[key]) < 0){ ret = false } } - if(ret){ a.push(props.res == "info"? info : b) } return a - },[]) -} - -function NewGUI (gui) { - this.msgBox = function(props){ // title type content button - props = props || {} - return gui.msgBox(props.title || "title",props.type || "info",props.content || "content",props.button || ["ok", "cancel"]); - } - this.selectFromTreeview = gui.selectFromTreeview - this.confirm = function(props) { - props = props || {} - return gui.confirm(props.content || "content",props.button || ["yes", "no"], props.type || "question"); - } - this.selectFile = function(props){ // "choose something", "*", true, "file", "/home/abby/fast_io" - props = props || {} - return gui.selectFile(props.title || "choose something",props.filter || "*",props.multiple || false, "file",""); - } - this.selectSingle = function(props) { - props = props || {} - return gui.selectSingle({ - "title": props.title || "select", - "list": props.list || [], - "default": props["default"] || "", - "columns": props.columns || 2, - "gen":props.gen || GEN - }); - } - this.selectMultiple = function(props) { - props = props || {} - return gui.selectMultiple({ - "title": props.title || "select", - "list": props.list || [], - "defaultvalue": props["defaultvalue"] || [""], - "defaultsize": props["defaultsize"] || [200, 100], - "columns": props.columns || 2, - "gen":props.gen || GEN - }); - } - this.selectFromTable = gui.selectFromTable - this.snapScreen = gui.snapScreen - this.imageViewer = gui.imageViewer - this.inputBox = gui.inputBox - this.showForm = gui.showForm - this.selectLayer = function(props){ - props = props || {} - return gui.selectLayer({ - title: props.title || "请选择层", - filter: props.filter || ".*", // regular expression - selectmode: props.selectmode || "multiple", // single, multiple - context: props.context || "all", // all, board, misc - layertype: props.layertype || "signal", // default type of layertypelist - defaultsize: props.defaultsize || [600, 400], // window size - layermatrix: props.layermatrix || props.matrix, - layertypelist: props.layertypelist || [ - {name: "all", display_name: "all", filter: function(x) { return x }}, - {name: "signal", display_name: "signal", filter: function(x) { return x["layer_type"] === "signal"; }}, - {name: "power_ground", display_name: "power_ground", filter: function(x) { return x["layer_type"] === "power_ground"; }}, - {name: "mixed", display_name: "mixed", filter: function(x) { return x["layer_type"] === "mixed"; }}, - {name: "solder_mask", display_name: "solder_mask", filter: function(x) { return x["layer_type"] === "solder_mask"; }}, - {name: "silk_screen", display_name: "silk_screen", filter: function(x) { return x["layer_type"] === "silk_screen"; }}, - {name: "solder_paste", display_name: "solder_paste", filter: function(x) { return x["layer_type"] === "solder_paste"; }}, - {name: "drill", display_name: "drill", filter: function(x) { return x["layer_type"] === "drill"; }}, - {name: "rout", display_name: "rout", filter: function(x) { return x["layer_type"] === "rout"; }}, - {name: "document", display_name: "document", filter: function(x) { return x["layer_type"] === "document"; }} - ], - gen: props.GEN || GEN - }) - } - this.lockUnlockLayer = function(props){ - props = props || {} - var tmp = {} - if (props.matrix) { - for (var key in props.matrix) { - var item = props.matrix[key] - tmp[key] = { - row : item.row, - name : item.name - } - } - } - return gui.lockUnlockLayer({ - title: props.title || "lockUnlockLayer", - layermatrix:props.layermatrix || tmp - }) - } - this.passwordBox = function(props){ - props = props || {} - return gui.passwordBox({title:props.title || "password", password:props.password || "1212"}) - } - this.selectJobLayer = function (props) { - props = props || {} - return gui.selectJobLayer({ - layertypelist: props.layertypelist || [ - {name: "all", display_name: "all", filter: function(x) { return x }}, - {name: "signal", display_name: "signal", filter: function(x) { return x["layer_type"] === "signal"; }}, - {name: "power_ground", display_name: "power_ground", filter: function(x) { return x["layer_type"] === "power_ground"; }}, - {name: "mixed", display_name: "mixed", filter: function(x) { return x["layer_type"] === "mixed"; }}, - {name: "solder_mask", display_name: "solder_mask", filter: function(x) { return x["layer_type"] === "solder_mask"; }}, - {name: "silk_screen", display_name: "silk_screen", filter: function(x) { return x["layer_type"] === "silk_screen"; }}, - {name: "solder_paste", display_name: "solder_paste", filter: function(x) { return x["layer_type"] === "solder_paste"; }}, - {name: "drill", display_name: "drill", filter: function(x) { return x["layer_type"] === "drill"; }}, - {name: "rout", display_name: "rout", filter: function(x) { return x["layer_type"] === "rout"; }}, - {name: "document", display_name: "document", filter: function(x) { return x["layer_type"] === "document"; }} - ], - //defaultlayertype: "ha", - joblist: props.joblist || [], - defaultJob: props.defaultJob || [], // select by default - steplist: props.steplist || [], - // defaultstep: "step3", - showstep: props.showstep || true, - selectmode: props.selectmode || "multiple", // single/multiple - layermatrix: props.layermatrix || { }, - defaultlayer: props.defaultlayer || [] - }) - } -} - -function getWorkStep(props){ - var steplists = GEN.getStepList({job:job}); - if(steplists.length == 0){return "è¯¥æ–™å·æ²¡æœ‰step"} - var steps_tmp = steplists.filter(function(name){ - var reg = new RegExp(par.step, "ig") - return reg.test(name) - }) - if(steplists.length == 0){return "æ ¹æ®è„šæœ¬å‚æ•°è¿‡æ»¤å‡ºæ¥çš„stepä¸å˜åœ¨ï¼Œè¯·æ£€æŸ¥èµ„æ–™æˆ–è€…è„šæœ¬å‚æ•°é…ç½®ï¼"} - var workstep = gui.selectMultiple({ - title: "请先择工作step", - size:[200,100], - defaultsize:[200,100], - list: steplists.map(function(v){ var tmp = {}; tmp[v] = v ;return tmp}), - defaultvalue: steps_tmp, - columns: 1, - gen: GEN + } }) - if(workstep.length == 0 ) {return "没有先择step"} - return workstep -} - -function delLayer(layer){ - if(!Array.isArray(layer)){ - layer = [layer] - } - layer = layer.filter(function(v){return GEN.isLayerExists({job:job, layer:v})}) - if(layer.length){ - GEN.deleteLayer({job:job, layer:layer}) + + // ä¿å˜ + if(/yes/ig.test(par.auto_save)){ + GEN.checkInout({job:job,mode:"out"}) // 结æŸä¿å˜æ–™å· 关闿–™å· + GEN.saveJob({ job: job }); + GEN.checkInout({job:job,mode:"in"}) + GEN.closeJob({job:job}) + } else { + GEN.checkInout({job:job,mode:"in"}) } -} -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 -} - -function sameDirection(xory, type, res, indexes) { - for (var key in xory) { - var current = -1; - var data = xory[key]; - data.sort(function(a,b){return a[type] - b[type]}) - data.forEach(function(item, i){ - if (i > current){ - var ret = [item]; - current = searchFont(item, data, i, ret,type) - if(ret.length > 1) { - ret.forEach(function(item) { - indexes = indexes.filter(function(item2){ - return item2.index != item.index - }) - }) - - res.push(ret.reduce(function(a,b){ - if(Number(b.limit.xmin) < Number(a.xmin)){ - a.xmin = b.limit.xmin - } - if(Number(b.limit.ymin) < Number(a.ymin)){ - a.ymin = b.limit.ymin - } - if(Number(b.limit.xmax) > Number(a.xmax)){ - a.xmax = b.limit.xmax - } - if(Number(b.limit.ymax) > Number(a.ymax)){ - a.ymax = b.limit.ymax - } - return a - },{ - xmin: item.limit.xmin, - ymin: item.limit.ymin, - xmax: item.limit.xmax, - ymax: item.limit.ymax - })) - } - } - }) - } - return indexes -} -function searchFont(l ,arr, i, ret, type){ - if(arr[i+1]){ - var len = Math.abs(l[type] - arr[i+1][type]) - if(len <= 1.5){ - ret.push(arr[i+1]) - return searchFont(arr[i+1], arr, i+1, ret, type) - } else {return i} + if (mode === "aimdfm") { + $.QDfm.updateRow({table: "pdm_aimdfm_task",data: {progress: 33.33},where: { id: $.task_id }}); + if (GEN.hasError()) { + Status = 'error';resultData.push({ type: "error", title: "GEN错误!", detail: [{ desc: _.join(GEN.STATUS, "\n") }] }); + return {status: Status,result_data: resultData}; + } else { + resultData.push({ type: "info", title: "æ“作完æˆ, è¯·æ³¨æ„æ£€æŸ¥!" }); + return {status: Status,result_data: resultData}; + } + }else { + return "Done" } - return i+1 -} -function turnFix(data) { - return parseFloat(data).toFixed(1) -} -function surfaceAnalysis(props){ - props.limit.xmin = props.limit.xmin - 0; - props.limit.ymin = props.limit.ymin - 0; - props.limit.xmax = props.limit.xmax - 0; - props.limit.ymax = props.limit.ymax - 0; - props.limit.xsize = props.limit.xsize - 0; - props.limit.ysize = props.limit.ysize - 0; - props.xc = props.limit.xsize / 2 + props.limit.xmin - props.yc = props.limit.ysize / 2 + props.limit.ymin -} - -// function featsToLimits(feats) { -// feats.forEach(function(item) { -// if(item.feats) { -// var polygon = genMath.profile2Polygon(item.feats.join("\n"),0) -// var res = polygon.reduce(function(a,b){ -// a.xmin = b.x > a.xmin ? a.xmin : b.x; -// a.ymin = b.y > a.ymin ? a.ymin : b.y; -// a.xmax = b.x < a.xmax ? a.xmax : b.x; -// a.ymax = b.y < a.ymax ? a.ymax : b.y; -// return a -// }, { -// xmin: polygon[0].x, -// ymin: polygon[0].y, -// xmax: polygon[0].x, -// ymax: polygon[0].y -// }) -// res.xsize = Math.abs(res.xmax - res.xmin) -// res.ysize = Math.abs(res.ymax - res.ymin) -// res.xc = res.xmin + res.xsize/2 -// res.yc = res.ymin + res.ysize/2 -// item.limits = res -// item.limit = res -// } -// }) -// return feats -// } - - -function featsToLimits(feats) { - feats.forEach(function(item) { - if(item.feats) { - var polygon = profile2Polygon(item.feats) - var res = polygon.reduce(function(a,b){ - a.xmin = b.x > a.xmin ? a.xmin : b.x; - a.ymin = b.y > a.ymin ? a.ymin : b.y; - a.xmax = b.x < a.xmax ? a.xmax : b.x; - a.ymax = b.y < a.ymax ? a.ymax : b.y; - return a - }, { - xmin: polygon[0].x, - ymin: polygon[0].y, - xmax: polygon[0].x, - ymax: polygon[0].y - }) - res.xsize = Math.abs(res.xmax - res.xmin) - res.ysize = Math.abs(res.ymax - res.ymin) - res.xc = res.xmin + res.xsize/2 - res.yc = res.ymin + res.ysize/2 - item.limits = res - item.limit = res - } - }) - return feats +} catch (e) { + IKM.msg(_.join(GEN.STATUS, "\n")) + IKM.msg(e) + Status = 'error'; + resultData.push({type: "error", title: "脚本执行出错!", detail: [{desc: _.toString(e)}]}); + return (mode === "aimdfm") ? {status: Status, result_data: resultData} : "Error"; } - -function profile2Polygon(feat) { - var info = []; - feat.forEach(function(v){ - if (/^#O. ([\S]+) ([\S]+)/.test(v)) { - info.push({ - x: RegExp.$1 - 0, - y: RegExp.$2 - 0 - }) - } - }) - return info -} \ No newline at end of file