Commit 59890c98 authored by Scott Sun's avatar Scott Sun

scott

parent cae41a62
var plugin = require('topsin.gengui');
var gui = plugin.newGui();
var tmplayers = gui.selectLayer({
title: '请选择需拼片原稿层',
layermatrix: {
layer1: {
row: 1,
name: "layer1",
layer_type: "inner"
},
layer2: {
row: 2,
name: "layer2",
layer_type: "outer"
}
},
layertype: "_default",
layertypelist: [{
name: "_default",
display_name: "_default",
filter: function (x) {
return true
}
}, ],
selectmode: 'multiple',
filter: ".*", // regular expression
selectmode: "single", // single, multiple
context: "all", // all, board, misc
defaultsize: [600, 400], // window size
gen:null
});
console.log(tmplayers);
\ No newline at end of file
...@@ -229,7 +229,6 @@ r = gui.selectLayer({ ...@@ -229,7 +229,6 @@ r = gui.selectLayer({
filter: ".*", // regular expression filter: ".*", // regular expression
selectmode: "single", // single, multiple selectmode: "single", // single, multiple
context: "all", // all, board, misc context: "all", // all, board, misc
layertype: "inner", // default type of layertypelist
defaultsize: [600, 400], // window size defaultsize: [600, 400], // window size
layermatrix: { layermatrix: {
layer1: { layer1: {
...@@ -243,6 +242,7 @@ r = gui.selectLayer({ ...@@ -243,6 +242,7 @@ r = gui.selectLayer({
layer_type: "outer" layer_type: "outer"
} }
}, },
layertype: "inner", // default type of layertypelist
layertypelist: [ layertypelist: [
{name: "inner", display_name: "Inner", filter: function(x) { return x["layer_type"] === "inner"; }}, {name: "inner", display_name: "Inner", filter: function(x) { return x["layer_type"] === "inner"; }},
{name: "outer", display_name: "Outer", filter: function(x) { return x["layer_type"] === "outer"; }} {name: "outer", display_name: "Outer", filter: function(x) { return x["layer_type"] === "outer"; }}
......
...@@ -14,7 +14,7 @@ PARAMETER: ...@@ -14,7 +14,7 @@ PARAMETER:
] ]
VERSION_HISTORY: VERSION_HISTORY:
V1.00 2020-04-20 Scott Sun V1.01 2020-04-20 Scott Sun
1.新版本 1.新版本
HELP: HELP:
...@@ -73,11 +73,11 @@ var Status = 'ok'; ...@@ -73,11 +73,11 @@ var Status = 'ok';
var resultData = []; var resultData = [];
try { try {
console.log("=============================check in===================="); console.log("=============================check in====================");
GEN.COM("open_job,job="+Job+",open_win=no,disk_map=,job_map=") // GEN.COM("open_job,job="+Job+",open_win=no,disk_map=,job_map=")
GEN.AUX("set_group,group=99") // GEN.AUX("set_group,group=99")
GEN.COM("close_job,job="+Job+"") // GEN.COM("close_job,job="+Job+"")
GEN.COM("disp_on") // GEN.COM("disp_on")
GEN.COM("origin_on") // GEN.COM("origin_on")
GEN.COM("disp_on") GEN.COM("disp_on")
GEN.COM("origin_on") GEN.COM("origin_on")
GEN.COM("checkin_closed_job,job="+Job); GEN.COM("checkin_closed_job,job="+Job);
......
...@@ -108,7 +108,6 @@ var GUI = $.gui || {}; ...@@ -108,7 +108,6 @@ var GUI = $.gui || {};
var Job = $.job || $.job_name; var Job = $.job || $.job_name;
var JobId = $.job_id; var JobId = $.job_id;
var process = require('process'); var process = require('process');
var zip = require('topsin.zip');
var db = $.db || IKM.db var db = $.db || IKM.db
var PAR = {} var PAR = {}
if ($.par) { if ($.par) {
...@@ -168,10 +167,10 @@ if(mailUserList && mailUserList.length) { ...@@ -168,10 +167,10 @@ if(mailUserList && mailUserList.length) {
var cam_workflow_info = IKM.get_jobinfo({jobid:JobId, jobinfo:"cam_workflow_info"}); var cam_workflow_info = IKM.get_jobinfo({jobid:JobId, jobinfo:"cam_workflow_info"});
console.log("==========cam_workflow_info===========:" + cam_workflow_info); console.log("==========cam_workflow_info===========:" + cam_workflow_info);
try { try {
if(cam_workflow_info && cam_workflow_info != ""){ // if(cam_workflow_info == "err"){ // ! tmp
console.log("==========cam_workflow_info===========:" + cam_workflow_info); // console.log("==========cam_workflow_info===========:" + cam_workflow_info);
throw cam_workflow_info // throw cam_workflow_info
} // }
cam_workflow_info = "sendmail" cam_workflow_info = "sendmail"
console.log("=============================================>anaysis_start"); console.log("=============================================>anaysis_start");
var par = PAR; var par = PAR;
...@@ -187,7 +186,7 @@ try { ...@@ -187,7 +186,7 @@ try {
// 检查料号是否能够check out // 检查料号是否能够check out
if(GEN.checkInout({job:job,mode:"test"}) != 0 && mode == "aimdfm"){ throw "the job check" } if(GEN.checkInout({job:job,mode:"test"}) != 0 && mode == "aimdfm"){ throw "the job check" }
GEN.checkInout({job:job,mode:"out"}); GEN.checkInout({job:job,mode:"out"});
script_info({ msg: "开始分析客户料号" ,result_severity:"info"}) script_info({ msg: "Data Analysis" ,result_severity:"info"})
script_info({ progress: 65 }) script_info({ progress: 65 })
var pcs_step = par.pcs_step == "" ? "cad" : par.pcs_step; var pcs_step = par.pcs_step == "" ? "cad" : par.pcs_step;
var array_step = par.array_step == "" ? "stp" : par.array_step; var array_step = par.array_step == "" ? "stp" : par.array_step;
...@@ -199,7 +198,7 @@ try { ...@@ -199,7 +198,7 @@ try {
pcs_step = step_list[0] pcs_step = step_list[0]
} }
script_info({ msg: "分析上传matrix信息",result_severity:"info" }) script_info({ msg: "Error-Upload matrix",result_severity:"info" })
script_info({ progress: 65 }) script_info({ progress: 65 })
var matrix = UPLOAD_LAYER_MATRIX({job:job}) // 分析matrix 获得分析后的matrix信息 var matrix = UPLOAD_LAYER_MATRIX({job:job}) // 分析matrix 获得分析后的matrix信息
GEN.openStep({job:job, name:pcs_step}) GEN.openStep({job:job, name:pcs_step})
...@@ -255,7 +254,7 @@ try { ...@@ -255,7 +254,7 @@ try {
}) })
GEN.clearLayers() GEN.clearLayers()
script_info({ msg: "分析钻孔叠构" }) script_info({ msg: "Error-Drill Stackup analysis" })
script_info({ progress: 70 }) script_info({ progress: 70 })
// * new 钻孔叠构 // * new 钻孔叠构
var cam_drill_structure = [] var cam_drill_structure = []
...@@ -380,7 +379,7 @@ try { ...@@ -380,7 +379,7 @@ try {
var analysis_obj = analysis({job:job,jobId:JobId,pcs_step:pcs_step,array_step:array_step,matrix:matrix}) var analysis_obj = analysis({job:job,jobId:JobId,pcs_step:pcs_step,array_step:array_step,matrix:matrix})
// 创建profile // 创建profile
var tmp_matrix = GEN.getMatrix({job:job}) var tmp_matrix = GEN.getMatrix({job:job})
script_info({ msg: "分析profile" }) script_info({ msg: "Error-Profile analysis" })
script_info({ progress: 70 }) script_info({ progress: 70 })
// * profile 和 拼版 // * profile 和 拼版
var pandle_step = step_list.map(function(v){ var pandle_step = step_list.map(function(v){
...@@ -454,7 +453,7 @@ try { ...@@ -454,7 +453,7 @@ try {
} }
ALL.gold_fingers = gold_fingers ALL.gold_fingers = gold_fingers
GEN.closeStep() GEN.closeStep()
script_info({ msg: "分析料号信息" }) script_info({ msg: "Error-PN analysis" })
var config = { var config = {
jobInfo: { jobInfo: {
layer_count: ["signal","power_ground"], // Board属性的signal或者power_ground层 layer_count: ["signal","power_ground"], // Board属性的signal或者power_ground层
...@@ -534,7 +533,7 @@ try { ...@@ -534,7 +533,7 @@ try {
console.log("=================================> 5 save drill info") console.log("=================================> 5 save drill info")
script_info({ msg: "分析钻孔信息" }) script_info({ msg: "Error-Drill layer analysis" })
script_info({ progress: 75 }) script_info({ progress: 75 })
// * 获取pcs_step 和 array_step的钻孔信息 // * 获取pcs_step 和 array_step的钻孔信息
var drill_tool_info = {}; var drill_tool_info = {};
...@@ -659,7 +658,7 @@ try { ...@@ -659,7 +658,7 @@ try {
}) })
console.log("=============================> 6 set smd bga") console.log("=============================> 6 set smd bga")
script_info({ msg: "分析smd和bga" }) script_info({ msg: "Error-SMD&BGA analysis" })
script_info({ progress: 80 }); script_info({ progress: 80 });
step_list.forEach(function(step){ step_list.forEach(function(step){
GEN.openStep({job:job,name:step}) GEN.openStep({job:job,name:step})
...@@ -790,7 +789,7 @@ try { ...@@ -790,7 +789,7 @@ try {
}) })
var info = { var info = {
min_line_width: ["line","user_nor_line"], min_line_width: ["line","user_nor_line"],
min_line_spacing: ["l2l","user_nor_line2nor_line"], min_line_spacing: ["c2c","l2l","user_nor_line2nor_line"],
min_line2pad: ["p2line","user_010052nor_line","user_bga2nor_line-1","user_smd2nor_line","user_self_spacing_smd2l"], min_line2pad: ["p2line","user_010052nor_line","user_bga2nor_line-1","user_smd2nor_line","user_self_spacing_smd2l"],
min_pad2pad: ["p2p", "smd2smd", "smd2pad","via2via","bga2pad"], min_pad2pad: ["p2p", "smd2smd", "smd2pad","via2via","bga2pad"],
min_ar_laser:["laser_via_ar"], min_ar_laser:["laser_via_ar"],
...@@ -810,7 +809,7 @@ try { ...@@ -810,7 +809,7 @@ try {
// jobpath = "/home/local_db/server_db/jobs/"+job // jobpath = "/home/local_db/server_db/jobs/"+job
// } // }
mkPath(jobpath,["user","opcam","steps"]) mkPath(jobpath,["user","opcam","steps"])
script_info({ msg: "分析线路" }) script_info({ msg: "Error-Signal layer analysis" })
script_info({ progress: 85 }) script_info({ progress: 85 })
stepList.forEach(function(step){ stepList.forEach(function(step){
GEN.openStep({ job: job, name: step }) GEN.openStep({ job: job, name: step })
...@@ -925,6 +924,7 @@ try { ...@@ -925,6 +924,7 @@ try {
},[])[0] },[])[0]
return {layer:v,symbol:symbol,start:tmp_matrix[v]["drl_start"],end:tmp_matrix[v]["drl_end"]} return {layer:v,symbol:symbol,start:tmp_matrix[v]["drl_start"],end:tmp_matrix[v]["drl_end"]}
}) })
var drillRes = analysisDrill(drillToSignals,step) // 钻孔分析结果 var drillRes = analysisDrill(drillToSignals,step) // 钻孔分析结果
console.log("===============drillRes:" + _.toString(drillRes)); console.log("===============drillRes:" + _.toString(drillRes));
drillRes.forEach(function(item){ drillRes.forEach(function(item){
...@@ -963,7 +963,7 @@ try { ...@@ -963,7 +963,7 @@ try {
if(par.erf){ if(par.erf){
tmpitem.erf = par.erf tmpitem.erf = par.erf
} }
script_info({ msg: "运行线路分析checklist" }) script_info({ msg: "Error-Run Checklist",result_severity:"ok" })
createChklistAndRun({ // 创建checklist并运行 createChklistAndRun({ // 创建checklist并运行
layers: signalLayers, layers: signalLayers,
items: [tmpitem] items: [tmpitem]
...@@ -989,7 +989,6 @@ try { ...@@ -989,7 +989,6 @@ try {
GEN.closeStep() GEN.closeStep()
}) })
mvOutProfile({job:job, step:pcs_step}) mvOutProfile({job:job, step:pcs_step})
IKM.msg("end wait for save")
// 保存 // 保存
if(/yes/ig.test(par.auto_save)){ if(/yes/ig.test(par.auto_save)){
...@@ -1020,7 +1019,9 @@ try { ...@@ -1020,7 +1019,9 @@ try {
}) })
}); });
script_info({ progress: 95 }) script_info({ progress: 95 })
script_info({ msg: "analysis done" })
// 导出 // 导出
if(par.export_path != "" && par.export_mode != "" && par.export_submode != "" ){ if(par.export_path != "" && par.export_mode != "" && par.export_submode != "" ){
if(fs.exists(par.export_path)){ if(fs.exists(par.export_path)){
...@@ -1080,7 +1081,11 @@ catch (e) { ...@@ -1080,7 +1081,11 @@ catch (e) {
GEN.COM("origin_on") GEN.COM("origin_on")
GEN.COM("checkin_closed_job,job="+Job) GEN.COM("checkin_closed_job,job="+Job)
if( cam_workflow_info== "sendmail"){ if( cam_workflow_info== "sendmail"){
IKM.save_job_info({jobid:JobId, jobinfohash:{cam_workflow_info:_.toString(e)}}) IKM.crud("deleteRow", {
table: "pdm_job_jobattr",
where:{job_id:JobId, attr_name:"cam_workflow_info"},
})
IKM.save_job_info({jobid:JobId, jobinfohash:{cam_workflow_info:"err"}})
sendEmail({ sendEmail({
subject:db_customer + ' / '+Job+ " analysis error", subject:db_customer + ' / '+Job+ " analysis error",
content:_.toString(e) content:_.toString(e)
...@@ -2079,8 +2084,17 @@ function analysisChkAttr(par) { ...@@ -2079,8 +2084,17 @@ function analysisChkAttr(par) {
return hash return hash
} }
function analysisDrill(par, step){ function analysisDrill(par, step){
// {"layer":"d1-2","symbol":"r3.937","start":"top","end":"isl2"} // [{
// {"layer":"d1-2","symbol":"r35.0394","start":"top","end":"bottom"} // "layer": "ftdrill2-3l",
// "symbol": "r7.874",
// "start": "l2",
// "end": "l3"
// }, {
// "layer": "ftdrill",
// "symbol": "r7.874",
// "start": "top",
// "end": "bottom"
// }]
var job = Job.toLowerCase() var job = Job.toLowerCase()
GEN.affectedLayer({affected:'no',mode:'all'}) GEN.affectedLayer({affected:'no',mode:'all'})
var res = par.map(function(drill){ var res = par.map(function(drill){
...@@ -2094,25 +2108,35 @@ function analysisDrill(par, step){ ...@@ -2094,25 +2108,35 @@ function analysisDrill(par, step){
if(GEN.isLayerExists({job:job,layer:tmplayer})){GEN.deleteLayer({job:job,step:step,layer:tmplayer})} if(GEN.isLayerExists({job:job,layer:tmplayer})){GEN.deleteLayer({job:job,step:step,layer:tmplayer})}
GEN.selCopyOther({dest:"layer_name",target_layer:tmplayer}) GEN.selCopyOther({dest:"layer_name",target_layer:tmplayer})
GEN.affectedLayer({affected:"no",mode:"all"}) GEN.affectedLayer({affected:"no",mode:"all"})
GEN.selClearFeature(); GEN.selClearFeature();
[drill.start,drill.end].forEach(function(item, i){ [drill.start,drill.end].forEach(function(item, i){
GEN.workLayer({name:item,display_number:1,clear_before:"yes"}) GEN.workLayer({name:item,display_number:1,clear_before:"yes"})
GEN.selClearFeature();
GEN.COM("filter_set,filter_name=popup,update_popup=no,feat_types=pad"); GEN.COM("filter_set,filter_name=popup,update_popup=no,feat_types=pad");
GEN.COM("sel_ref_feat",{layers:tmplayer,use:"filter",mode:"touch",pads_as:"shape",f_types:"pad",polarity:"positive\;negative",include_syms:drill.symbol}) GEN.COM("sel_ref_feat",{layers:tmplayer,use:"filter",mode:"touch",pads_as:"shape",f_types:"pad",polarity:"positive\;negative",include_syms:drill.symbol})
// GEN.selRefFeat({layers:tmplayer, use:"filter",mode:"touch"}) // GEN.selRefFeat({layers:tmplayer, use:"filter",mode:"touch"})
GEN.COM("filter_reset,filter_name=popup") GEN.COM("filter_reset,filter_name=popup")
if(GEN.getSelectCount()>0){ if(GEN.getSelectCount()>0){
var res = "" var res = "";
var pads = GEN.getFeatures({job:job,step:step,layer:item,options:"select"}) var pads = GEN.getFeatures({job:job,step:step,layer:item,options:"select"})
if(pads && pads.length) { if (pads && pads.length) {
pads = pads.filter(function(item){ pads = pads.map(function (item2) {
return /^r\d+/.test(item.symbol) if(!item2.size){
}) if(/^r\d+/.test(item2.symbol)){
pads = pads.sort(function(a,b){ item2.size = Number(item2.symbol.slice(1))
return parseInt(a.symbol.slice(1)) - parseInt(b.symbol.slice(1)) }else if(/^rect([^x]+)x([^x]+)/.test(item2.symbol)){
}) item2.size = Number(RegExp.$1 > RegExp.$2 ? RegExp.$1 :RegExp.$2)
res = pads[0].symbol.slice(1) }
} } else {
item2.size = Number(item2.size)
}
return item2
})
pads = pads.sort(function (a, b) {
return a.size - b.size
})
res = pads[0].size
}
if ( i == 0) { if ( i == 0) {
drill.drl_pad_top = res drill.drl_pad_top = res
} else if (i==1){ } else if (i==1){
......
...@@ -99,10 +99,10 @@ if(mailUserList && mailUserList.length) { ...@@ -99,10 +99,10 @@ if(mailUserList && mailUserList.length) {
} }
var cam_workflow_info = IKM.get_jobinfo({jobid:JobId, jobinfo:"cam_workflow_info"}); var cam_workflow_info = IKM.get_jobinfo({jobid:JobId, jobinfo:"cam_workflow_info"});
try { try {
if(cam_workflow_info && cam_workflow_info != ""){ // if(cam_workflow_info && cam_workflow_info != ""){ //! tmp
throw cam_workflow_info // throw cam_workflow_info
} // }
script_info({ msg: "料号标准化流程开始" ,result_severity:"info"}) script_info({ msg: "Data formatting" ,result_severity:"info"})
script_info({ progress: 35 }) script_info({ progress: 35 })
var par = PAR; var par = PAR;
if(!par.hasOwnProperty("config_path") || par.config_path==""){ if(!par.hasOwnProperty("config_path") || par.config_path==""){
...@@ -138,11 +138,11 @@ try { ...@@ -138,11 +138,11 @@ try {
if(!custCfg){throw "config error"} if(!custCfg){throw "config error"}
// 料号验证 // 料号验证
if(!GEN.isJobExists({job:job})){ if(!GEN.isJobExists({job:job})){
script_info({ msg: "料号"+job+"不存在" ,result_severity:"error"}) script_info({ msg: "No PN was found in system" ,result_severity:"error"})
throw "job "+ job+ " is not exist" } throw "job "+ job+ " is not exist" }
if(!GEN.isJobOpen({job:job})){GEN.openJob({job:job})} if(!GEN.isJobOpen({job:job})){GEN.openJob({job:job})}
if(GEN.checkInout({job:job,mode:"test"}) != 0 && mode == "aimdfm"){ if(GEN.checkInout({job:job,mode:"test"}) != 0 && mode == "aimdfm"){
script_info({ msg: "料号"+job+" check" ,result_severity:"error"}) script_info({ msg: "PN is not checkin" ,result_severity:"error"})
throw "the job check" } throw "the job check" }
console.log("Checkout====== ========================>") console.log("Checkout====== ========================>")
GEN.checkInout({job:job,mode:"out"}); GEN.checkInout({job:job,mode:"out"});
...@@ -264,7 +264,7 @@ try { ...@@ -264,7 +264,7 @@ try {
var after_sort_matrix = ret.sortNames var after_sort_matrix = ret.sortNames
// 改名 // 改名
script_info({ msg: "开始改名" ,result_severity:"info"}) script_info({ msg: "Failed to change name(Name clashes)" ,result_severity:"info"})
script_info({ progress: 50 }) script_info({ progress: 50 })
err = reName({job:job, matrix:after_sort_matrix, cfg:format_cfg}) err = reName({job:job, matrix:after_sort_matrix, cfg:format_cfg})
if(err){throw err} if(err){throw err}
...@@ -306,9 +306,9 @@ try { ...@@ -306,9 +306,9 @@ try {
if(/(\d+)-(\d+)/.test(v)){ if(/(\d+)-(\d+)/.test(v)){
var tmp = /(\d+)-(\d+)/.exec(v) var tmp = /(\d+)-(\d+)/.exec(v)
var num1 = Number(tmp[1]) var num1 = Number(tmp[1])
var num2 = Number(tmp[2]) var num2 = Number(tmp[2])
var chabie = num2 - num1 var chabie = Math.abs(num2 - num1)
if(num1 == 1 && num2 == layer_count && !hasMainDrill){ if(((num1 == 1 && num2 == layer_count) || num2 > layer_count) && !hasMainDrill){
GEN.renameLayer({job:job,layer:v,new_name:"ftdrill"}) GEN.renameLayer({job:job,layer:v,new_name:"ftdrill"})
if (ftdrill_layer[ftdrill_layer.length-1]!= v){ if (ftdrill_layer[ftdrill_layer.length-1]!= v){
GEN.matrixMoveRow({ job:job,layer:"ftdrill",after:ftdrill_layer[ftdrill_layer.length-1] }) GEN.matrixMoveRow({ job:job,layer:"ftdrill",after:ftdrill_layer[ftdrill_layer.length-1] })
...@@ -316,11 +316,15 @@ try { ...@@ -316,11 +316,15 @@ try {
hasMainDrill = !hasMainDrill hasMainDrill = !hasMainDrill
} else if(chabie>1 && chabie < layer_count - 1){ } else if(chabie>1 && chabie < layer_count - 1){
// 改名 // 改名
GEN.renameLayer({job:job,layer:v,new_name:v.substr(0,v.length-1)}) if(num1 > num2){
} var tmpv = "ftdrill"+num2+"-"+num1+"l";
GEN.renameLayer({job:job,layer:v,new_name:tmpv.substr(0,v.length-1)})
} else{
GEN.renameLayer({job:job,layer:v,new_name:v.substr(0,v.length-1)})
}
}
} }
}) })
// 设置钻孔 // 设置钻孔
err = setDrill({job:job}) err = setDrill({job:job})
if(err){throw err} if(err){throw err}
...@@ -387,7 +391,7 @@ try { ...@@ -387,7 +391,7 @@ try {
GEN.closeJob({job:job}); GEN.closeJob({job:job});
GEN.COM("open_job,job="+job); GEN.COM("open_job,job="+job);
script_info({ msg: "准备创建profile" ,result_severity:"info"}) script_info({ msg: "Creating Profile" ,result_severity:"info"})
script_info({ progress: 55 }) script_info({ progress: 55 })
var all_layer = Object.keys(tmp_matrix) var all_layer = Object.keys(tmp_matrix)
// 没有outline层 // 没有outline层
...@@ -418,7 +422,7 @@ try { ...@@ -418,7 +422,7 @@ try {
} }
var hasProfile = GEN.getProfile({job:job, step:tmp_step}) var hasProfile = GEN.getProfile({job:job, step:tmp_step})
if(hasProfile.match(/\n/ig).length == 1){ if(hasProfile.match(/\n/ig).length == 1){
script_info({ msg: "创建profile失败" ,result_severity:"warn"}) script_info({ msg: "Failed to create profile" ,result_severity:"warn"})
job_attrs.readin_result = "Failed to create profile" job_attrs.readin_result = "Failed to create profile"
db.query("",function(q){ db.query("",function(q){
return q.updateRow({ return q.updateRow({
...@@ -432,8 +436,7 @@ try { ...@@ -432,8 +436,7 @@ try {
} }
} }
} }
script_info({ msg: "Data format is done" ,result_severity:"warn"})
script_info({ msg: "料号标准化结束" ,result_severity:"warn"})
db.query("",function(q){ db.query("",function(q){
return q.updateRow({ return q.updateRow({
...@@ -481,7 +484,12 @@ catch (e) { ...@@ -481,7 +484,12 @@ catch (e) {
script_info({ result_severity: "error" }) script_info({ result_severity: "error" })
IKM.msg(_.join(GEN.STATUS, "\n")) IKM.msg(_.join(GEN.STATUS, "\n"))
IKM.msg(e) IKM.msg(e)
IKM.save_job_info({jobid:JobId, jobinfohash:{cam_workflow_info:_.toString(e)}}) console.log("=======save cam workflow info");
IKM.crud("deleteRow", {
table: "pdm_job_jobattr",
where:{job_id:JobId, attr_name:"cam_workflow_info"},
})
IKM.save_job_info({jobid:JobId, jobinfohash:{cam_workflow_info:"err"}})
checkIn() checkIn()
// 发送邮件 // 发送邮件
// sendEmail({ // sendEmail({
...@@ -937,17 +945,20 @@ function createOutline(props){ ...@@ -937,17 +945,20 @@ function createOutline(props){
GEN.deleteLayer({job:job, layer:tmp_outline2}) GEN.deleteLayer({job:job, layer:tmp_outline2})
if(GEN.isLayerExists({job:job,layer:"outline"})){GEN.deleteLayer({job:job,layer:"outline"})} if(GEN.isLayerExists({job:job,layer:"outline"})){GEN.deleteLayer({job:job,layer:"outline"})}
GEN.renameLayer({job:job, layer:l,new_name:'outline'}) GEN.renameLayer({job:job, layer:l,new_name:'outline'})
GEN.deleteLayer({job:job, layer:l}) GEN.deleteLayer({job:job, layer:l})
if(GEN.isLayerExists({job:job, layer:bk2})){ GEN.deleteLayer({job:job, layer:bk2}) }
if(GEN.isLayerExists({job:job, layer:tmp})){ GEN.deleteLayer({job:job, layer:tmp}) }
return true return true
} }
GEN.deleteLayer({job:job, layer:l}) GEN.deleteLayer({job:job, layer:l})
GEN.deleteLayer({job:job, layer:bk2}) if(GEN.isLayerExists({job:job, layer:bk2})){ GEN.deleteLayer({job:job, layer:bk2}) }
if(GEN.isLayerExists({job:job, layer:tmp})){ GEN.deleteLayer({job:job, layer:tmp}) }
GEN.deleteLayer({job:job, layer:[tmp_layer]}) GEN.deleteLayer({job:job, layer:[tmp_layer]})
GEN.deleteLayer({job:job, layer:[tmp_layer]}) GEN.deleteLayer({job:job, layer:[tmp_layer]})
return false return false
} }
GEN.deleteLayer({job:job, layer:[tmp]})
} }
function touch(layer) { function touch(layer) {
......
...@@ -91,10 +91,14 @@ var import_info = []; ...@@ -91,10 +91,14 @@ var import_info = [];
var inputState = []; var inputState = [];
var cam_workflow_info = IKM.get_jobinfo({jobid:JobId, jobinfo:"cam_workflow_info"}); var cam_workflow_info = IKM.get_jobinfo({jobid:JobId, jobinfo:"cam_workflow_info"});
if(cam_workflow_info){ if(cam_workflow_info){
IKM.crud("deleteRow", {
table: "pdm_job_jobattr",
where:{job_id:JobId, attr_name:"cam_workflow_info"},
})
IKM.save_job_info({jobid:JobId, jobinfohash:{cam_workflow_info:""}}) IKM.save_job_info({jobid:JobId, jobinfohash:{cam_workflow_info:""}})
} }
try { try {
script_info({ msg: "开始导入", result_severity:"info" }) script_info({ msg: "Failed to unzip the file", result_severity:"info" })
var par = PAR; var par = PAR;
// var db_path = db.query("",function(q){ // var db_path = db.query("",function(q){
// return q.selectValue({ // return q.selectValue({
...@@ -105,7 +109,7 @@ try { ...@@ -105,7 +109,7 @@ try {
// }); // });
// if(_.isEmpty(db_path)){throw "quote-data-upload error"} // if(_.isEmpty(db_path)){throw "quote-data-upload error"}
if(!par.path || par.path == "") { if(!par.path || par.path == "") {
script_info({ msg: "资料路径不存在", result_severity:"error" }); script_info({ msg: "The data path does not exist", result_severity:"error" });
throw "path error"} throw "path error"}
if(!par.hasOwnProperty("config_path") || par.config_path==""){ if(!par.hasOwnProperty("config_path") || par.config_path==""){
console.log("===================cfg"); console.log("===================cfg");
...@@ -123,7 +127,7 @@ try { ...@@ -123,7 +127,7 @@ try {
}) })
}); });
if(_.isEmpty(db_customer)){ if(_.isEmpty(db_customer)){
script_info({ msg: "该料号客户不存在", result_severity:"error" }); script_info({ msg: "No customer was found", result_severity:"error" });
throw "customer error"} throw "customer error"}
if(db_customer && !(/^done$/ig.test(db_customer)) && db_customer != "" ){ if(db_customer && !(/^done$/ig.test(db_customer)) && db_customer != "" ){
par.customer = db_customer par.customer = db_customer
...@@ -137,11 +141,11 @@ try { ...@@ -137,11 +141,11 @@ try {
}) })
}); });
if (!cfg || cfg == ""){ if (!cfg || cfg == ""){
script_info({ msg: "客户配置不存在", result_severity:"error" }); script_info({ msg: "No customer config was found", result_severity:"error" });
throw "cfg can not find"} throw "cfg can not find"}
var config = eval(cfg); var config = eval(cfg);
if(!config.hasOwnProperty("customer")){ if(!config.hasOwnProperty("customer")){
script_info({ msg: "客户配置不存在", result_severity:"error" }); script_info({ msg: "No customer config was found", result_severity:"error" });
throw "config error"} throw "config error"}
var job = Job; var job = Job;
if(_.isEmpty(job)) throw "没有传入料号名!"; if(_.isEmpty(job)) throw "没有传入料号名!";
...@@ -155,7 +159,7 @@ try { ...@@ -155,7 +159,7 @@ try {
// 获取路径下文件信息 // 获取路径下文件信息
var path = par.path var path = par.path
if(!fs.exists(path)){ if(!fs.exists(path)){
script_info({ msg: "资料路径不存在", result_severity:"error" }); script_info({ msg: "No PN file was found in folder", result_severity:"error" });
throw "path error"} throw "path error"}
var pathInfo = fs.listDir(path + "/" + db_customer.toLowerCase(), 1) var pathInfo = fs.listDir(path + "/" + db_customer.toLowerCase(), 1)
// 判断存不存在料号文件 // 判断存不存在料号文件
...@@ -172,7 +176,7 @@ try { ...@@ -172,7 +176,7 @@ try {
// } // }
var jobFile = pathInfo.filter(function(v){return v.baseName.toLowerCase() == job_file_baseName}) var jobFile = pathInfo.filter(function(v){return v.baseName.toLowerCase() == job_file_baseName})
if(jobFile.length == 0){ if(jobFile.length == 0){
script_info({ msg: "资料路径不存在", result_severity:"error" }); script_info({ msg: "No PN file was found in folder", result_severity:"error" });
throw "job file is not exist"} throw "job file is not exist"}
var jobFiles = [] // 记录要分析的文件 var jobFiles = [] // 记录要分析的文件
if (!jobFile[0].isDir) { if (!jobFile[0].isDir) {
...@@ -209,7 +213,7 @@ try { ...@@ -209,7 +213,7 @@ try {
// 分析料号文件 得到料号导入信息 导入类型 // 分析料号文件 得到料号导入信息 导入类型
var jobInfo = analyJobFiles({jobFiles:jobFiles.filter(function(v){return v.isFile}),custCfg:custCfg,config:config,job:job }) var jobInfo = analyJobFiles({jobFiles:jobFiles.filter(function(v){return v.isFile}),custCfg:custCfg,config:config,job:job })
if(jobInfo.data.length == 0){ if(jobInfo.data.length == 0){
script_info({ msg: "未找到料号文件", result_severity:"error" }); script_info({ msg: "No PN file was found in folder", result_severity:"error" });
throw "file error"} throw "file error"}
var importOk = false; // 是否成功导入 var importOk = false; // 是否成功导入
...@@ -300,23 +304,31 @@ try { ...@@ -300,23 +304,31 @@ try {
gerberCfg.step = step gerberCfg.step = step
return gerberCfg return gerberCfg
}) })
if(GEN.GEN_TYPE == "genesis"){
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") GEN.COM("input_manual_reset")
import_info.push({name:v.layer, type:"gerber274x", date:now(),user:$.user_name}) gerberInfo.forEach(function(v){
GEN.COM("input_manual_set",v) import_info.push({name:v.layer, type:"gerber274x", date:now(),user:$.user_name})
GEN.COM("input_manual") GEN.COM("input_manual_set",v)
}) GEN.COM("input_manual")
})
} else {
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")
})
}
importOk = true importOk = true
} }
if(!importOk){ script_info({ msg: "导入错误",result_severity:"error" }); throw "import error"} if(!importOk){ throw "import error"}
script_info({ progress: 20 }) script_info({ progress: 20 })
reNameStep(job) reNameStep(job)
if(/2171/.test(par.customer)){ if(/2171/.test(par.customer)){
...@@ -331,12 +343,12 @@ try { ...@@ -331,12 +343,12 @@ try {
// GEN.closeStep() // GEN.closeStep()
// } // }
} else if ((/yucca/ig.test(par.customer))) { } else if ((/yucca/ig.test(par.customer))) {
var matrix = GEN.getMatrix({job:job,type:"array"}) // var matrix = GEN.getMatrix({job:job,type:"array"})
matrix.layer_type.forEach(function(v, i){ // matrix.layer_type.forEach(function(v, i){
if( v == "document") { // if( v == "document") {
GEN.COM("matrix_layer_type,job="+job+",matrix=matrix,layer="+matrix.name[i]+",type=signal") // GEN.COM("matrix_layer_type,job="+job+",matrix=matrix,layer="+matrix.name[i]+",type=signal")
} // }
}) // })
} }
var steplist = GEN.getStepList({job:job}) var steplist = GEN.getStepList({job:job})
GEN.openStep({job:job,name:steplist[0]}) GEN.openStep({job:job,name:steplist[0]})
...@@ -362,10 +374,10 @@ try { ...@@ -362,10 +374,10 @@ try {
var import_html = "<table border=1 align='center' cellpadding=5 cellspacing=0 style=\"text-align: center;\"><tr><th>导入状态/Import Status</th><th>文件/File</th><th>类型/Type</th><th>导入时间/Import Time</th><th>操作用户/User</th></tr>" var import_html = "<table border=1 align='center' cellpadding=5 cellspacing=0 style=\"text-align: center;\"><tr><th>导入状态/Import Status</th><th>文件/File</th><th>类型/Type</th><th>导入时间/Import Time</th><th>操作用户/User</th></tr>"
import_info.forEach(function(item){ import_info.forEach(function(item){
var name = item.name var name = item.name;
var type = item.type var type = item.type;
var date = item.date var date = item.date;
var user = item.user var user = item.user;
import_html += "<tr><td>Readin</td><td>"+name+"</td><td>"+type+"</td><td>"+date+"</td><td>"+user+"</td></tr>" import_html += "<tr><td>Readin</td><td>"+name+"</td><td>"+type+"</td><td>"+date+"</td><td>"+user+"</td></tr>"
}) })
import_html += "</table>" import_html += "</table>"
...@@ -400,8 +412,12 @@ try { ...@@ -400,8 +412,12 @@ try {
} }
catch (e) { catch (e) {
script_info({ result_severity: "error" }) script_info({ result_severity: "error" })
IKM.save_job_info({jobid:JobId, jobinfohash:{cam_workflow_info:_.toString(e)}}) IKM.crud("deleteRow", {
table: "pdm_job_jobattr",
where:{job_id:JobId, attr_name:"cam_workflow_info"},
})
IKM.save_job_info({jobid:JobId, jobinfohash:{cam_workflow_info:"err"}})
IKM.msg(_.join(GEN.STATUS, "\n")) IKM.msg(_.join(GEN.STATUS, "\n"))
IKM.msg(e) IKM.msg(e)
...@@ -429,20 +445,19 @@ function analyJobFiles(props){ ...@@ -429,20 +445,19 @@ function analyJobFiles(props){
var job = props.job; var job = props.job;
var custCfg = props.custCfg; var custCfg = props.custCfg;
var rules = custCfg.rules; var rules = custCfg.rules;
var paramsFile = files.filter(function(file){return /param|ncdrill/ig.test(file.baseName)}) var paramsFile = files.filter(function(file){return /nc_param|ncdrill/ig.test(file.baseName)})
var tmp_hash = {} var tmp_hash = {}
paramsFile.forEach(function(file){ paramsFile.forEach(function(file){
tmp_hash[file.baseName] = (function(){ tmp_hash[file.baseName] = (function(){
var tmparr = fs.readFile(file.path).split("\n").filter(function(v){return /^\S+\s+\S/ig.test(v)}) var tmparr = fs.readFile(file.path).split("\n").filter(function(v){return /^\s?\S+\s+\S/ig.test(v)}).filter(function(v){return !/\(/.test(v)})
var tmp = {} var tmp = {}
tmparr.map(function(v){ tmparr.map(function(v){
var arr = v.split(/\b\s+\b/) var arr = v.split(/\b\s+\b/)
tmp[arr[0].replace(/-/ig,"_")] = arr[1] tmp[arr[0].replace(/-/ig,"_").trim()] = arr[1]
}) })
return tmp return tmp
})() })()
}) })
var fileInfo = files.reduce(function(a,file){ var fileInfo = files.reduce(function(a,file){
try { try {
rules.forEach(function(item){ rules.forEach(function(item){
...@@ -558,19 +573,20 @@ function decompression(path, zips) { ...@@ -558,19 +573,20 @@ function decompression(path, zips) {
var count = 0; var count = 0;
var zipfiles = files.filter(function(item){ var zipfiles = files.filter(function(item){
if (item.suffix == "zip" || item.suffix == "rar" || item.suffix == "7z") { if (item.suffix == "zip" || item.suffix == "rar" || item.suffix == "7z") {
inputState.push(item.suffix) inputState.push(item.suffix);
} console.log("--->path:" + item.path)
if(/zip|rar|7z/.test(item.suffix) && zips.indexOf(item.path) < 0){ if(zips.indexOf(item.path) < 0){
if(item.name.length >= 20) { zips.push(item.path)
var mvname = "custom" + count + "." + item.suffix; if(item.name.length >= 20) {
count++ var mvname = "custom" + count + "." + item.suffix;
fs.rename(item.path, item.dir + "/" + mvname) count++
item.path = item.dir + "/" + mvname fs.rename(item.path, item.dir + "/" + mvname)
item.path = item.dir + "/" + mvname
}
var dir_name = item.path.replace(/\.(zip|7z|rar)$/, "");
autoUn(item.path, dir_name);
return true
} }
zips.push(item.path)
var dir_name = item.path.replace(/\.(zip|7z|rar)$/, "");
autoUn(item.path, dir_name);
return true
} }
return false return false
}) })
...@@ -597,4 +613,8 @@ function autoUn(path, dirname) { ...@@ -597,4 +613,8 @@ function autoUn(path, dirname) {
} else { } else {
process.exec('7za', ['x' , path, "-o"+dirname, "-aoa"]) process.exec('7za', ['x' , path, "-o"+dirname, "-aoa"])
} }
}
function exportInfo(info){
fs.writeFile("/home/toplinker/samba/scott_test/tmp", _.toString(info))
} }
\ No newline at end of file
...@@ -507,7 +507,7 @@ ...@@ -507,7 +507,7 @@
{ {
"valid": function(props){ "valid": function(props){
var file = props.file; var file = props.file;
return /.+\.art$|\.l\d+$|\.r1$|\.sb$|\.st$|\.d\d+-\d+|\.[bt]sm$|\.drwg$|\.p\d+p$|\.gdo/ig.test(file.name) return /.+\.gbr$|.+\.art$|\.l\d+$|\.r1$|\.sb$|\.st$|\.d\d+-\d+|\.[bt]sm$|\.drwg$|\.p\d+p$|\.gdo/ig.test(file.name)
}, },
"type": "Gerber274x", "type": "Gerber274x",
"format": "Gerber274x_2", "format": "Gerber274x_2",
...@@ -599,16 +599,16 @@ ...@@ -599,16 +599,16 @@
"tl_name": [ "tl_name": [
{"orig_name" : ["^comp_+_top$"], "tl_name" : "comp_+_top" }, {"orig_name" : ["^comp_+_top$"], "tl_name" : "comp_+_top" },
{"orig_name" : ["^comp_+_bot$"], "tl_name" : "comp_+_bot" }, {"orig_name" : ["^comp_+_bot$"], "tl_name" : "comp_+_bot" },
{"orig_name" : ["^pm_top","paste.pri|pripaste|solderpaste_top","ppst\\.art|spt\\.art","assy[_-]?top\\.art","past_top","paste_top"], "tl_name" : "past_top" }, {"orig_name" : ["^pm_top","spcs\\.gbr$|paste.pri|pripaste|solderpaste_top","ppst\\.art|spt\\.art","assy[_-]?top\\.art","past_top","paste_top"], "tl_name" : "past_top" },
{"orig_name" : ["^pm_bot","paste.sec|secpaste|solderpaste_bottom","spst\\.art|spb\\.art","assy[_-]?bott?o?m?\\.art","past_bot","paste_bot"], "tl_name" : "past_botm" }, {"orig_name" : ["^pm_bot","spps\\.gbr$|paste.sec|secpaste|solderpaste_bottom","spst\\.art|spb\\.art","assy[_-]?bott?o?m?\\.art","past_bot","paste_bot"], "tl_name" : "past_botm" },
{"orig_name" : ["silk.pri","pleg\\.art|sst\\.art","^ss_top","silk_top"], "tl_name" : "silk_top" }, {"orig_name" : ["silk.pri","pleg\\.art|sst\\.art","^ss_top|sscs\\.gbr$","silk_top"], "tl_name" : "silk_top" },
{"orig_name" : ["silk.sec","sleg\\.art|ssb\\.art","^ss_bot","silk_bot"], "tl_name" : "silk_bot" }, {"orig_name" : ["silk.sec","sleg\\.art|ssb\\.art","^ss_bot|ssps\\.gbr$","silk_bot"], "tl_name" : "silk_bot" },
{"orig_name" : ["\\.st$|\\.tsm$|soldermask_top","mask.top\\.art|smt\\.art","mask.pri\\.art","psm\\.art","sm_top"], "tl_name" : "sm_top" }, {"orig_name" : ["\\.st$|\\.tsm$|soldermask_top","mask.top\\.art|smt\\.art","mask.pri\\.art|smcs\\.gbr$","psm\\.art","sm_top"], "tl_name" : "sm_top" },
{"orig_name" : ["\\.sb$|\\.bsm$|soldermask_bottom","mask.bot\\.art|smb\\.art","mask.sec\\.art","ssm\\.art","sm_bot"], "tl_name" : "sm_botm" }, {"orig_name" : ["\\.sb$|\\.bsm$|soldermask_bottom","mask.bot\\.art|smb\\.art","mask.sec\\.art|smps\\.gbr$","ssm\\.art","sm_bot"], "tl_name" : "sm_botm" },
{"orig_name" : ["^(?:(?!assy|enig|pm|past|ss|silk|sm|soldermask).)+_top\.art$","^top$","^top.art$"], "tl_name" : "top" }, {"orig_name" : ["^(?:(?!assy|enig|pm|past|ss|silk|sm|soldermask).)+_top\.art$","^top$","^top.art$"], "tl_name" : "top" },
{"orig_name" : ["^(?:(?!assy|enig|pm|past|ss|silk|sm|soldermask).)+_bottom\.art$","^bot\\.art$","^bottom$","^bottom\\.art$"], "tl_name" : "bottom" }, {"orig_name" : ["^(?:(?!assy|enig|pm|past|ss|silk|sm|soldermask).)+_bottom\.art$","^bot\\.art$","^bottom$","^bottom\\.art$"], "tl_name" : "bottom" },
{"orig_name" : ["int(\\d+)\\.art"], "tl_name" : "l_($1+1)"}, {"orig_name" : ["int(\\d+)\\.art"], "tl_name" : "l_($1+1)"},
{"orig_name" : ["^0?(\\d+)[\\D].*\\.art$","\\.p(\\d+)p?$","\\.l(\\d+)$","^l(\\d+).*\\.art$","^l(\\d+)\\.art$","^0(\\d+).*ccp_ms","^s(\\d+)\\.art","laye?r?(\\d+)","layer_(\\d+)"], "tl_name" : "l_($1)"}, {"orig_name" : ["l(\\d+).*\\.gbr$","^0?(\\d+)[\\D].*\\.art$","\\.p(\\d+)p?$","\\.l(\\d+)$","^l(\\d+).*\\.art$","^l(\\d+)\\.art$","^0(\\d+).*ccp_ms","^s(\\d+)\\.art","laye?r?(\\d+)","layer_(\\d+)"], "tl_name" : "l_($1)"},
{"orig_name" : ["(\\d+)-(\\d+)-((?:(?!laser)[a-zA-Z])+)\\.drl$","\\.d(\\d+)-(\\d+)((?:(?!laser)[a-zA-Z])+)$"], "tl_name" : "d($1)-($2)-($3)"}, {"orig_name" : ["(\\d+)-(\\d+)-((?:(?!laser)[a-zA-Z])+)\\.drl$","\\.d(\\d+)-(\\d+)((?:(?!laser)[a-zA-Z])+)$"], "tl_name" : "d($1)-($2)-($3)"},
{"orig_name" : ["\\.ncd(\\d)-(\\d)$","\\.d(\\d+)-(\\d+)$","-(\\d+)-(\\d+)\\.drl$","(\\d+)-(\\d+)-laser\\.drl$","d(\\d+)-(\\d+)"], "tl_name" : "d_($1)-($2)"}, {"orig_name" : ["\\.ncd(\\d)-(\\d)$","\\.d(\\d+)-(\\d+)$","-(\\d+)-(\\d+)\\.drl$","(\\d+)-(\\d+)-laser\\.drl$","d(\\d+)-(\\d+)"], "tl_name" : "d_($1)-($2)"},
{"orig_name" : ["\\.ncdthru$"], "tl_name" : "drill" }, {"orig_name" : ["\\.ncdthru$"], "tl_name" : "drill" },
...@@ -710,7 +710,7 @@ ...@@ -710,7 +710,7 @@
{ {
"valid": function(props){ "valid": function(props){
var file = props.file; var file = props.file;
return /.+\.ger$/ig.test(file.name) || /\.pho$|\.bol$|\.gdo$|\.pma$|\.pmb$|\.spa$|\.spb$\.sma$|\.smb$|\.ssa$|\.ssb$/ig.test(file.name) || return /.+\.ger$/ig.test(file.name) || /.+\.l\d+$|\.pho$|\.bol$|\.gdo$|\.pma$|\.pmb$|\.spa$|\.spb$\.sma$|\.smb$|\.ssa$|\.ssb$/ig.test(file.name) ||
/.+\.l\d+$/ig.test(file.name) /.+\.l\d+$/ig.test(file.name)
}, },
"type": "Gerber274x", "type": "Gerber274x",
...@@ -833,9 +833,9 @@ ...@@ -833,9 +833,9 @@
{"orig_name" : ["bsilk","^ssb\\.art$","\\.ssb$","silkscrnbot|silkscreenbot","silk.bot|silk-bot"], "tl_name" : "silk_bot" }, {"orig_name" : ["bsilk","^ssb\\.art$","\\.ssb$","silkscrnbot|silkscreenbot","silk.bot|silk-bot"], "tl_name" : "silk_bot" },
{"orig_name" : ["tmask","^smt\\.art$","\\.sma$","soldmask1top|soldermask.?top","sm.top|solder.top"], "tl_name" : "sm_top" }, {"orig_name" : ["tmask","^smt\\.art$","\\.sma$","soldmask1top|soldermask.?top","sm.top|solder.top"], "tl_name" : "sm_top" },
{"orig_name" : ["bmask","^smb\\.art$","\\.smb$","soldmask1bot|soldermask.?bot","sm.bot|solder.bot"], "tl_name" : "sm_botm" }, {"orig_name" : ["bmask","^smb\\.art$","\\.smb$","soldmask1bot|soldermask.?bot","sm.bot|solder.bot"], "tl_name" : "sm_botm" },
{"orig_name" : ["^(?:(?!assy|enig|pm|past|paste|silk|mask).)+top\\.(pho|art)$","^top$","^top\\.art$"], "tl_name" : "top" }, {"orig_name" : ["^(?:(?!assy|export|enig|pm|past|paste|silk|mask).)+top\\.(pho|art)$","^top$","^top\\.art$"], "tl_name" : "top" },
{"orig_name" : ["^(?:(?!ref).)+l(\\d)\\.art$","-(\\d+)l\\.pho$","^l(\\d+).*\\.art$","^v(\\d+)\\.art$","^g(\\d+)\\.art$","^s(\\d+)\\.art$","\\.l(\\d+)$","Copper(\\d+)\\.ger$","^laye?r?_(\\d+)"], "tl_name" : "l_($1)"}, {"orig_name" : ["^(?:(?!ref).)+l(\\d)\\.art$","-(\\d+)l\\.pho$","^l(\\d+).*\\.art$","^v(\\d+)\\.art$","^g(\\d+)\\.art$","^s(\\d+)\\.art$","\\.l(\\d+)$","Copper(\\d+)\\.ger$","^laye?r?_(\\d+)"], "tl_name" : "l_($1)"},
{"orig_name" : ["^(?:(?!assy|enig|pm|past|paste|silk|mask).)+bot\\.(pho|art)$","^bot\\.art$","^bottom$","^bottom.art$"], "tl_name" : "bottom" }, {"orig_name" : ["^(?:(?!assy|view|enig|pm|past|paste|silk|mask).)+bot\\.(pho|art)$","^bot\\.art$","^bottom$","^bottom.art$"], "tl_name" : "bottom" },
{"orig_name" : ["\\.d(\\d+)$"], "tl_name" : "d_($1)-($1+1)"}, {"orig_name" : ["\\.d(\\d+)$"], "tl_name" : "d_($1)-($1+1)"},
{"orig_name" : ["(\\d+)-(\\d+)plated\\.ncd","thruHolePlated_(\\d+)_(\\d+)\\.ncd","(\\d+)-(\\d+)\\.drl$","^drill(\\d+)-(\\d+)$","^d_(\\d+)-(\\d+)$"], "tl_name" : "d_($1)-($2)"}, {"orig_name" : ["(\\d+)-(\\d+)plated\\.ncd","thruHolePlated_(\\d+)_(\\d+)\\.ncd","(\\d+)-(\\d+)\\.drl$","^drill(\\d+)-(\\d+)$","^d_(\\d+)-(\\d+)$"], "tl_name" : "d_($1)-($2)"},
{"orig_name" : ["(\\d+)-(\\d+)-np\\.drl$","ThruHoleNonPlated\\.ncd$","^drill$"], "tl_name" : "drill" }, {"orig_name" : ["(\\d+)-(\\d+)-np\\.drl$","ThruHoleNonPlated\\.ncd$","^drill$"], "tl_name" : "drill" },
...@@ -982,7 +982,7 @@ ...@@ -982,7 +982,7 @@
{"orig_name" : ["soldtop.art","sm_top|mask_top"], "tl_name" : "sm_top" }, {"orig_name" : ["soldtop.art","sm_top|mask_top"], "tl_name" : "sm_top" },
{"orig_name" : ["soldbotm\\.art","sm_bot|mask_bot"], "tl_name" : "sm_botm" }, {"orig_name" : ["soldbotm\\.art","sm_bot|mask_bot"], "tl_name" : "sm_botm" },
{"orig_name" : ["^top$","^top.art$"], "tl_name" : "top" }, {"orig_name" : ["^top$","^top.art$"], "tl_name" : "top" },
{"orig_name" : ["^pgp(\\d+)\\.art$","^art(\\d+)\\.art$","^l_(\\d+)"], "tl_name" : "l_($1)"}, {"orig_name" : ["^gnd(\\d+)\\.art$","^in(\\d+)\\.art$","^pgp(\\d+)\\.art$","^art(\\d+)\\.art$","^l_(\\d+)"], "tl_name" : "l_($1)"},
{"orig_name" : ["^bot\\.art$","^bottom$","^bottom.art$"], "tl_name" : "bottom" }, {"orig_name" : ["^bot\\.art$","^bottom$","^bottom.art$"], "tl_name" : "bottom" },
{"orig_name" : ["\\.d(\\d+)$"], "tl_name" : "d_($1)-($1+1)"}, {"orig_name" : ["\\.d(\\d+)$"], "tl_name" : "d_($1)-($1+1)"},
{"orig_name" : ["(\\d+)-(\\d+)-((?:(?!laser)[a-zA-Z])+)\\.drl$","\\.d(\\d+)-(\\d+)((?:(?!laser)[a-zA-Z])+)$"], "tl_name" : "d($1)-($2)-($3)"}, {"orig_name" : ["(\\d+)-(\\d+)-((?:(?!laser)[a-zA-Z])+)\\.drl$","\\.d(\\d+)-(\\d+)((?:(?!laser)[a-zA-Z])+)$"], "tl_name" : "d($1)-($2)-($3)"},
......
...@@ -188,9 +188,9 @@ ...@@ -188,9 +188,9 @@
}, },
"Excellon2_4": { "Excellon2_4": {
"nf1": 2, "nf1": 2,
"nf2": 3, "nf2": 4,
"units": "mm", "units": "inch",
"zeroes": "leading", "zeroes": "trailing",
"decimal": "no", "decimal": "no",
"nf_comp": 0, "nf_comp": 0,
"break_sr": "yes", "break_sr": "yes",
...@@ -200,7 +200,7 @@ ...@@ -200,7 +200,7 @@
"drill_only": "no", "drill_only": "no",
"multiplier": 1, "multiplier": 1,
"resolution": 3, "resolution": 3,
"tool_units": "mm", "tool_units": "inch",
"coordinates": "absolute", "coordinates": "absolute",
"merge_by_rule": "no", "merge_by_rule": "no",
"signed_coords": "no", "signed_coords": "no",
...@@ -286,6 +286,26 @@ ...@@ -286,6 +286,26 @@
"signed_coords": "no", "signed_coords": "no",
"text_line_width": 0.0024 "text_line_width": 0.0024
}, },
"Excellon2_9": {
"nf1": 3,
"nf2": 6,
"units": "inch",
"zeroes": "leading",
"decimal": "no",
"nf_comp": 0,
"break_sr": "yes",
"data_type": "ascii",
"separator": "nl",
"threshold": 200,
"drill_only": "no",
"multiplier": 1,
"resolution": 3,
"tool_units": "inch",
"coordinates": "absolute",
"merge_by_rule": "no",
"signed_coords": "no",
"text_line_width": 0.0024
},
"IPC356_1": { "IPC356_1": {
"nf1": 2, "nf1": 2,
"nf2": 4, "nf2": 4,
...@@ -787,7 +807,7 @@ ...@@ -787,7 +807,7 @@
{ {
"valid": function(props){ "valid": function(props){
var file = props.file; var file = props.file;
return /.+\.ger$/ig.test(file.name) || /\.gdo$|\.bol$|\.gdo$|\.pma$|\.sma$|\.smb$|\.ssa$|\.ssb$/ig.test(file.name) || return /.+\.ger$/ig.test(file.name) || /\.pho$|\.gdo$|\.bol$|\.gdo$|\.pma$|\.sma$|\.smb$|\.ssa$|\.ssb$/ig.test(file.name) ||
/.+\.l\d+$/ig.test(file.name) /.+\.l\d+$/ig.test(file.name)
}, },
"type": "Gerber274x", "type": "Gerber274x",
...@@ -902,15 +922,15 @@ ...@@ -902,15 +922,15 @@
} }
], ],
"tl_name": [ "tl_name": [
{"orig_name" : ["^pmt\\.art$","\\.pma$","SoldPasteTop\\.ger","past_top"], "tl_name" : "past_top" }, {"orig_name" : ["pastmasktop\\.pho|^pmt\\.art$","\\.pma$","SoldPasteTop\\.ger","past_top"], "tl_name" : "past_top" },
{"orig_name" : ["^pmb\\.art$","\\.pmb$","SoldPasteBot\\.ger","past_botm"], "tl_name" : "past_botm" }, {"orig_name" : ["pastmaskbot\\.pho|^pmb\\.art$","\\.pmb$","SoldPasteBot\\.ger","past_botm"], "tl_name" : "past_botm" },
{"orig_name" : ["tsilk","^sst\\.art$","\\.ssa$","SilkScrnTop\\.ger","silk_top"], "tl_name" : "silk_top" }, {"orig_name" : ["silkscreentop\\.pho|tsilk","^sst\\.art$","\\.ssa$","SilkScrnTop\\.ger","silk_top"], "tl_name" : "silk_top" },
{"orig_name" : ["bsilk","^ssb\\.art$","\\.ssb$","SilkScrnBot\\.ger","silk_bot"], "tl_name" : "silk_bot" }, {"orig_name" : ["silkscreenbot\\.pho|bsilk","^ssb\\.art$","\\.ssb$","SilkScrnBot\\.ger","silk_bot"], "tl_name" : "silk_bot" },
{"orig_name" : ["tmask","^smt\\.art$","\\.sma$","SoldMask1Top\\.ger","sm_top"], "tl_name" : "sm_top" }, {"orig_name" : ["soldermasktop\\.pho|tmask","^smt\\.art$","\\.sma$","SoldMask1Top\\.ger","sm_top"], "tl_name" : "sm_top" },
{"orig_name" : ["bmask","^smb\\.art$","\\.smb$","SoldMask1Bot\\.ger","sm_bot"], "tl_name" : "sm_botm" }, {"orig_name" : ["soldermaskbot\\.pho|bmask","^smb\\.art$","\\.smb$","SoldMask1Bot\\.ger","sm_bot"], "tl_name" : "sm_botm" },
{"orig_name" : ["^top$","^top.art$"], "tl_name" : "top" }, {"orig_name" : ["-top\\.pho$|^top$","^top.art$"], "tl_name" : "top" },
{"orig_name" : ["^l(\\d+).*\\.art$","^v(\\d+)\\.art$","^g(\\d+)\\.art$","^s(\\d+)\\.art$","\\.l(\\d+)$","Copper(\\d+)\\.ger$","^layer_(\\d+)"], "tl_name" : "l_($1)"}, {"orig_name" : ["-(\\d+)l\\.pho$","^l(\\d+).*\\.art$","^v(\\d+)\\.art$","^g(\\d+)\\.art$","^s(\\d+)\\.art$","\\.l(\\d+)$","Copper(\\d+)\\.ger$","^layer_(\\d+)"], "tl_name" : "l_($1)"},
{"orig_name" : ["^bot\\.art$","^bottom$","^bottom.art$"], "tl_name" : "bottom" }, {"orig_name" : ["-bot\\.pho$|^bot\\.art$","^bottom$","^bottom.art$"], "tl_name" : "bottom" },
{"orig_name" : ["\\.d(\\d+)$"], "tl_name" : "d_($1)-($1+1)"}, {"orig_name" : ["\\.d(\\d+)$"], "tl_name" : "d_($1)-($1+1)"},
{"orig_name" : ["thruHolePlated_(\\d+)_(\\d+)\\.ncd","(\\d+)-(\\d+)\\.drl$","^drill(\\d+)-(\\d+)$","^d_(\\d+)-(\\d+)$"], "tl_name" : "d_($1)-($2)"}, {"orig_name" : ["thruHolePlated_(\\d+)_(\\d+)\\.ncd","(\\d+)-(\\d+)\\.drl$","^drill(\\d+)-(\\d+)$","^d_(\\d+)-(\\d+)$"], "tl_name" : "d_($1)-($2)"},
{"orig_name" : ["ThruHoleNonPlated\\.ncd$","^drill$"], "tl_name" : "drill" }, {"orig_name" : ["ThruHoleNonPlated\\.ncd$","^drill$"], "tl_name" : "drill" },
...@@ -918,9 +938,12 @@ ...@@ -918,9 +938,12 @@
{"orig_name" : "fab.art", "tl_name" : "fab.art" }, {"orig_name" : "fab.art", "tl_name" : "fab.art" },
{"orig_name" : ["multipack.art","^array$"], "tl_name" : "array" }, {"orig_name" : ["multipack.art","^array$"], "tl_name" : "array" },
{"orig_name" : ["outline\\.art$","\\.bol$","PnlContourNonPlated\\.ger","^outline"], "tl_name" : "outline" }, {"orig_name" : ["outline\\.art$","\\.bol$","PnlContourNonPlated\\.ger","^outline"], "tl_name" : "outline" },
{"orig_name" : ["top-enig","enig_top"], "tl_name" : "enig_top" }, {"orig_name" : ["^topside.golden\\.pho$","top-enig","enig_top"], "tl_name" : "enig_top" },
{"orig_name" : ["bot-enig","enig_bot"], "tl_name" : "enig_bot" }, {"orig_name" : ["^botside.golden\\.pho$","bot-enig","enig_bot"], "tl_name" : "enig_bot" },
] ],
"mergerule" : {
profile:["silk_top"]
}
}, },
"Vivo":{ "Vivo":{
"step": "cad", "step": "cad",
...@@ -957,6 +980,14 @@ ...@@ -957,6 +980,14 @@
"type": "Excellon2", "type": "Excellon2",
"format": "Excellon2_5" "format": "Excellon2_5"
}, },
{
"valid": function(props){
var file = props.file;
return /^ftdrill/ig.test(file.name)
},
"type": "Gerber274x",
"format": "Gerber274x_4"
},
{ {
"valid": function(props){ "valid": function(props){
var file = props.file; var file = props.file;
...@@ -971,8 +1002,8 @@ ...@@ -971,8 +1002,8 @@
{"orig_name" : ["osp-bottom\\.pho","solderpastebottom","past_botm"], "tl_name" : "past_botm" }, {"orig_name" : ["osp-bottom\\.pho","solderpastebottom","past_botm"], "tl_name" : "past_botm" },
{"orig_name" : ["pleg\\.art","^ss_top","silk_top"], "tl_name" : "silk_top" }, {"orig_name" : ["pleg\\.art","^ss_top","silk_top"], "tl_name" : "silk_top" },
{"orig_name" : ["sleg\\.art","^ss_bot","silk_bot"], "tl_name" : "silk_bot" }, {"orig_name" : ["sleg\\.art","^ss_bot","silk_bot"], "tl_name" : "silk_bot" },
{"orig_name" : ["soldermask-top","top-solder-mask\\.pho","soldermasktop","sm_top"], "tl_name" : "sm_top" }, {"orig_name" : ["soldermask1|soldermask-top","top-solder-mask\\.pho","soldermasktop","sm_top"], "tl_name" : "sm_top" },
{"orig_name" : ["soldermask-bottom","bottom-solder-mask\\.pho","soldermaskbottom","sm_bot"], "tl_name" : "sm_botm" }, {"orig_name" : ["soldermask2|soldermask-bottom","bottom-solder-mask\\.pho","soldermaskbottom","sm_bot"], "tl_name" : "sm_botm" },
{"orig_name" : ["top\\.pho","^top$","layertop"], "tl_name" : "top" }, {"orig_name" : ["top\\.pho","^top$","layertop"], "tl_name" : "top" },
{"orig_name" : ["^lay(\\d+)","layer(\\d+)\\.gdo","layer_(\\d+)"], "tl_name" : "l_($1)"}, {"orig_name" : ["^lay(\\d+)","layer(\\d+)\\.gdo","layer_(\\d+)"], "tl_name" : "l_($1)"},
{"orig_name" : ["^bottom\\.pho$","^bottom$","layerbottom"], "tl_name" : "bottom" }, {"orig_name" : ["^bottom\\.pho$","^bottom$","layerbottom"], "tl_name" : "bottom" },
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -638,7 +638,6 @@ try{ ...@@ -638,7 +638,6 @@ try{
###Open step and clear layer ###Open step and clear layer
$GEN->openStep(job=>$Job,name=>$Step); $GEN->openStep(job=>$Job,name=>$Step);
$GEN->COM("disp_off");
$GEN->clearLayers(); $GEN->clearLayers();
$GEN->affectedLayer(mode=>'all',affected=>'no'); $GEN->affectedLayer(mode=>'all',affected=>'no');
$GEN->units(type=>'inch'); $GEN->units(type=>'inch');
...@@ -979,6 +978,8 @@ try{ ...@@ -979,6 +978,8 @@ try{
$KeepGasket = $info{keep_gasket}; $KeepGasket = $info{keep_gasket};
$UpdateMaxOpening = $info{update_max_opening}; $UpdateMaxOpening = $info{update_max_opening};
$GUI->msgbox(-text=>"start"); #? tmp
%tmp = reverse %tmp; %tmp = reverse %tmp;
foreach my $layer (keys %tmp) { foreach my $layer (keys %tmp) {
my $ref_layer = $tmp{$layer}.'_ref'; my $ref_layer = $tmp{$layer}.'_ref';
...@@ -992,8 +993,8 @@ try{ ...@@ -992,8 +993,8 @@ try{
$GEN->copyLayer(source_job=>$Job,source_step=>$Step,source_layer=>$tmp{$layer},dest_layer=>$tmp{$layer}.$BakSuffix); $GEN->copyLayer(source_job=>$Job,source_step=>$Step,source_layer=>$tmp{$layer},dest_layer=>$tmp{$layer}.$BakSuffix);
$GEN->copyLayer(source_job=>$Job,source_step=>$Step,source_layer=>$layer,dest_layer=>$layer.$BakSuffix); $GEN->copyLayer(source_job=>$Job,source_step=>$Step,source_layer=>$layer,dest_layer=>$layer.$BakSuffix);
$GEN->workLayer(name=>$tmp{$layer},number=>1); $GEN->workLayer(name=>$tmp{$layer},number=>1);
$GEN->PAUSE($layer); #? tmp
$GEN->selectByFilter(attribute=>[{attribute=>'.string',text=>'sm_defined_pad_shave'}]); $GEN->selectByFilter(attribute=>[{attribute=>'.string',text=>'sm_defined_pad_shave'}]);
$GEN->selDelete() if ( $GEN->getSelectCount() > 0 ); $GEN->selDelete() if ( $GEN->getSelectCount() > 0 );
##移除via ##移除via
...@@ -1013,7 +1014,7 @@ try{ ...@@ -1013,7 +1014,7 @@ try{
$GEN->selDelete() if ( $GEN->getSelectCount() > 0 ); $GEN->selDelete() if ( $GEN->getSelectCount() > 0 );
_deleteLayer(layer=>[$tmp{$layer}.$SpecificalWarningSuffix]); _deleteLayer(layer=>[$tmp{$layer}.$SpecificalWarningSuffix]);
$GEN->PAUSE(1); #? tmp
foreach my $item ('smd','bga','pth','via','pad') {#'smd','bga','pth','via','pad' foreach my $item ('smd','bga','pth','via','pad') {#'smd','bga','pth','via','pad'
next unless ( defined $info{$item} and $info{$item} eq 'Yes' ); next unless ( defined $info{$item} and $info{$item} eq 'Yes' );
my $Coverage_tmp = $Coverage; my $Coverage_tmp = $Coverage;
...@@ -1153,7 +1154,6 @@ try{ ...@@ -1153,7 +1154,6 @@ try{
_deleteLayer(layer=>[$include_pad_lyr]); _deleteLayer(layer=>[$include_pad_lyr]);
} }
} }
$GEN->workLayer(name=>$TmpLayer{big_copper_layer},number=>1); $GEN->workLayer(name=>$TmpLayer{big_copper_layer},number=>1);
$GEN->COM('sel_cont_resize',accuracy=>0.1,break_to_islands=>"yes",island_size=>0,hole_size=>0,drill_filter=>"no",corner_ctl=>"no"); $GEN->COM('sel_cont_resize',accuracy=>0.1,break_to_islands=>"yes",island_size=>0,hole_size=>0,drill_filter=>"no",corner_ctl=>"no");
$GEN->selectByFilter(); $GEN->selectByFilter();
...@@ -1469,6 +1469,7 @@ try{ ...@@ -1469,6 +1469,7 @@ try{
); );
$GEN->selDelete() if ( $GEN->getSelectCount() > 0 ); $GEN->selDelete() if ( $GEN->getSelectCount() > 0 );
} }
$GEN->PAUSE(3); #? tmp
####制作碰到大铜面的pad所对应的开窗到临时层pad_opening ####制作碰到大铜面的pad所对应的开窗到临时层pad_opening
...@@ -1628,7 +1629,7 @@ try{ ...@@ -1628,7 +1629,7 @@ try{
} }
_deleteLayer(layer=>[$TmpLayer{tmp_layer}]); _deleteLayer(layer=>[$TmpLayer{tmp_layer}]);
###制作正式层上开窗比pad小的情况 ###制作正式层上开窗比pad小的情况
if ( $GEN->isLayerExists(job=>$Job,layer=>$TmpLayer{sm_less_pad}) and $PAR->{make_sm_less_pad} eq 'Yes') { if ( $GEN->isLayerExists(job=>$Job,layer=>$TmpLayer{sm_less_pad}) and $PAR->{make_sm_less_pad} eq 'Yes') {
$GEN->workLayer(name=>$tmp{$layer},number=>1); $GEN->workLayer(name=>$tmp{$layer},number=>1);
...@@ -1684,7 +1685,6 @@ try{ ...@@ -1684,7 +1685,6 @@ try{
_deleteLayer(layer=>[$TmpLayer{tmp_layer}]); _deleteLayer(layer=>[$TmpLayer{tmp_layer}]);
} }
} }
####gaster 制作(copy 外层pad加大(gasketsize+$CopperOpening)*2 到当前层为surface) ####gaster 制作(copy 外层pad加大(gasketsize+$CopperOpening)*2 到当前层为surface)
$GEN->workLayer(name=>$TmpLayer{pad_touch_copper},number=>1); $GEN->workLayer(name=>$TmpLayer{pad_touch_copper},number=>1);
$GEN->selRefFeat( $GEN->selRefFeat(
...@@ -1707,7 +1707,7 @@ try{ ...@@ -1707,7 +1707,7 @@ try{
_deleteLayer(layer=>[$TmpLayer{tmp_layer}]); _deleteLayer(layer=>[$TmpLayer{tmp_layer}]);
if ( $KeepGasket eq 'Yes' and $GEN->isLayerExists(job=>$Job,layer=>$TmpLayer{pad_on_copper_gasket}) ) { if ( $KeepGasket eq 'Yes' and $GEN->isLayerExists(job=>$Job,layer=>$TmpLayer{pad_on_copper_gasket}) ) {
$GEN->workLayer(name=>$TmpLayer{pad_on_copper_gasket},number=>1); $GEN->workLayer(name=>$TmpLayer{pad_on_copper_gasket},number=>1);
$GEN->COM('sel_resize',size=>($GasketSize+$CopperOpening)*2,corner_ctl=>'no'); $GEN->COM('sel_resize',size=>($GasketSize+$CopperOpening)*3,corner_ctl=>'no');
$GEN->selAddAttr(attribute=>['gasket',{attribute=>'.string',text=>'smdef_gasket'}]); $GEN->selAddAttr(attribute=>['gasket',{attribute=>'.string',text=>'smdef_gasket'}]);
$GEN->selCopyOther(target_layer=>$layer); $GEN->selCopyOther(target_layer=>$layer);
$GEN->selCopyOther(target_layer=>$TmpLayer{big_copper_layer}); $GEN->selCopyOther(target_layer=>$TmpLayer{big_copper_layer});
...@@ -1857,7 +1857,6 @@ try{ ...@@ -1857,7 +1857,6 @@ try{
} }
$GEN->COM('sel_resize',size=>$Coverage_tmp+$CoverageTol_tmp,corner_ctl=>'no'); $GEN->COM('sel_resize',size=>$Coverage_tmp+$CoverageTol_tmp,corner_ctl=>'no');
####制作准确的大铜面pad开窗到临时层 correct_sm_opening ####制作准确的大铜面pad开窗到临时层 correct_sm_opening
$GEN->workLayer(name=>$TmpLayer{pad_opening},number=>1); $GEN->workLayer(name=>$TmpLayer{pad_opening},number=>1);
$GEN->selCopyOther(target_layer=>$TmpLayer{correct_sm_opening},size=>2); $GEN->selCopyOther(target_layer=>$TmpLayer{correct_sm_opening},size=>2);
...@@ -1881,7 +1880,6 @@ try{ ...@@ -1881,7 +1880,6 @@ try{
mode=>'disjoint' mode=>'disjoint'
); );
$GEN->selDelete() if ( $GEN->getSelectCount() > 0 ); $GEN->selDelete() if ( $GEN->getSelectCount() > 0 );
####制作需要刮开的开窗部分 ####制作需要刮开的开窗部分
$GEN->workLayer(name=>$TmpLayer{pad_opening},number=>1); $GEN->workLayer(name=>$TmpLayer{pad_opening},number=>1);
$GEN->selCopyOther(target_layer=>$TmpLayer{sm_opening_free},size=>1); $GEN->selCopyOther(target_layer=>$TmpLayer{sm_opening_free},size=>1);
...@@ -2118,8 +2116,6 @@ try{ ...@@ -2118,8 +2116,6 @@ try{
$GEN->copyLayer(source_job=>$Job,source_step=>$Step,source_layer=>$sm_tmp_bk,dest_layer=>$tmp{$layer}); $GEN->copyLayer(source_job=>$Job,source_step=>$Step,source_layer=>$sm_tmp_bk,dest_layer=>$tmp{$layer});
$GEN->COM("disp_on");
_deleteLayer(layer=>[$sm_tmp_bk,$TmpLayer{sm_defined_tmp_layer}]); _deleteLayer(layer=>[$sm_tmp_bk,$TmpLayer{sm_defined_tmp_layer}]);
...@@ -2181,24 +2177,20 @@ try{ ...@@ -2181,24 +2177,20 @@ try{
###output and return status, if genesis error, it will output genesis error command ###output and return status, if genesis error, it will output genesis error command
unless ($GEN->{STATUS}){ unless ($GEN->{STATUS}){
$GEN->COM("disp_on");
return $Return; return $Return;
} }
else{ else{
$GEN->COM("disp_on");
$GUI->msgbox(-icon=>'error',-text=>join("\n",@{$GEN->{STATUS}})); $GUI->msgbox(-icon=>'error',-text=>join("\n",@{$GEN->{STATUS}}));
#addFlowNotes(-notes=>" Genesis Error:\n ".join("\n ",@{$GEN->{STATUS}})); #addFlowNotes(-notes=>" Genesis Error:\n ".join("\n ",@{$GEN->{STATUS}}));
return 'Error'; return 'Error';
} }
} }
catch Error::Simple with { catch Error::Simple with {
$GEN->COM("disp_on");
my $error = encode("utf8",shift); my $error = encode("utf8",shift);
$GUI->msgbox(-icon=>'error',-text=>$error); $GUI->msgbox(-icon=>'error',-text=>$error);
return 'Error'; return 'Error';
} }
finally{ finally{
$GEN->COM("disp_on");
_deleteLayer(layer=>[values %TmpLayer]); _deleteLayer(layer=>[values %TmpLayer]);
}; };
......
/*
NAME:
DESCRIPTION: ;
PARAMETER:
[
{
name : 'step',
title : 'step',
type : 'LineEdit',
property : {tool_tip : '目标step,默认是orig'},
},
{
name : 'export_path',
title : 'export_path',
type : 'LineEdit',
property : {tool_tip : '目标step,默认是orig'},
},
{
name : 'auto_save',
title : '自动保存',
type : 'RadioBox',
property : {
item_list:[
{name:'yes',text:'YES'},
{name:'no',text:'NO'},
],
tool_tip:'是否自动保存料号开关'
}
}
]
VERSION_HISTORY:
V1.00 2020-09-01 Scott Sun
1.新版本
HELP:
<html><body bgcolor="#DDECFE">
<font size="3" color="#003DB2"><p>功能简介</p></font>
<p> 标题 </p>
<br>
<font size="3" color="#003DB2"><p>参数配置</p></font>
<p> step信息 </p>
<br>
<font size="3" color="#003DB2"><p>注意事项</p></font>
<p> 无 </p>
<br>
</body></html>
*/
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
console.log("==============================>template");
// 引入模块 包
var $ = require('topcam.scriptfunc').argv();
var fs = require('fs');
var _ = require('lodash');
var mode = $.ikm ? "topcam" : "aimdfm";
var IKM = $.ikm;
if (IKM==undefined ) { IKM = require('topcam.ikm6')($) }
var GEN = $.gen;
var GUI = $.gui || {};
var Job = $.job || $.job_name;
var JobId = $.job_id;
var db = $.db || IKM.db
var PAR = {}
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 } });
}
}
var Status = 'ok';
var resultData = [];
var par = PAR;
var default_par = {
step: "edit",
export_path:"C:/Users/ADMINI~1/Desktop/jobs/demo",
auto_save: "No",
units:"mm"
}
for(var key in default_par){ if (!par.hasOwnProperty(key) || par[key] == ""){ par[key] = default_par[key] }}
var job = Job;
try {
if(_.isEmpty(job)){throw "参数job不存在"} else { 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 stepList = GEN.getStepList({job:job})
stepList = stepList.filter(function(step){
var reg = new RegExp(par.step,"ig")
return reg.test(step)
})
var matrix = GEN.getMatrix({job:job});
stepList.forEach(function(step){
var excellon = [];
var gerber = [];
fs.mkdir(par.export_path + "/" + step)
for (var key in matrix) {
var info = matrix[key];
if(!GEN.isLayerEmpty({job:job,step:step,layer:key})){
if(info.layer_type == "drill"){
excellon.push(key)
} else {
gerber.push(key)
}
}
}
if(gerber.length){
GEN.COM("output_layer_reset")
gerber.forEach(function(v){
GEN.COM("output_layer_set,layer="+v+",angle=0,mirror=no,x_scale=1,y_scale=1,comp=0,polarity=positive,setupfile=,setupfiletmp=,line_units=inch,gscl_file=,step_scale=no")
})
GEN.COM("output,job="+job+",step="+step+",format=Gerber274x,dir_path="+par.export_path + "/" + step+",prefix=,suffix=.art,break_sr=yes,break_symbols=no,break_arc=no,scale_mode=all,surface_mode=fill,min_brush=1,units=inch,coordinates=absolute,zeroes=none,nf1=2,nf2=4,x_anchor=0,y_anchor=0,wheel=,x_offset=0,y_offset=0,line_units=inch,override_online=yes,film_size_cross_scan=0,film_size_along_scan=0,ds_model=RG6500")
}
if(excellon.length){
GEN.COM("output_layer_reset")
excellon.forEach(function(v){
GEN.COM("output_layer_set,layer="+v+",angle=0,mirror=no,x_scale=1,y_scale=1,comp=0,polarity=positive,setupfile=,setupfiletmp=,line_units=inch,gscl_file=,step_scale=no")
})
GEN.COM("output,job="+job+",step="+step+",format=Excellon2,dir_path="+par.export_path + "/" + step+",prefix=,suffix=.drill,break_sr=yes,break_symbols=yes,break_arc=no,scale_mode=all,surface_mode=fill,min_brush=1,units=inch,coordinates=absolute,decimal=no,zeroes=none,nf1=2,nf2=4,modal=yes,tool_units=inch,optimize=no,iterations=5,reduction_percent=1,cool_spread=0,x_anchor=0,y_anchor=0,x_offset=0,y_offset=0,line_units=inch,override_online=yes,canned_text_mode=break")
excellon.forEach(function(v){
GEN.COM("ncset_create,name=_1_tmp__+++_")
GEN.COM("ncset_cur,job="+job+",step="+step+",layer="+v+",ncset=")
})
}
})
// 保存
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";
}
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment