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)){
...@@ -1021,6 +1020,8 @@ try { ...@@ -1021,6 +1020,8 @@ 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){
...@@ -2097,21 +2111,31 @@ function analysisDrill(par, step){ ...@@ -2097,21 +2111,31 @@ function analysisDrill(par, step){
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)){
item2.size = Number(item2.symbol.slice(1))
}else if(/^rect([^x]+)x([^x]+)/.test(item2.symbol)){
item2.size = Number(RegExp.$1 > RegExp.$2 ? RegExp.$1 :RegExp.$2)
}
} else {
item2.size = Number(item2.size)
}
return item2
}) })
pads = pads.sort(function(a,b){ pads = pads.sort(function (a, b) {
return parseInt(a.symbol.slice(1)) - parseInt(b.symbol.slice(1)) return a.size - b.size
}) })
res = pads[0].symbol.slice(1) res = pads[0].size
} }
if ( i == 0) { if ( i == 0) {
drill.drl_pad_top = res drill.drl_pad_top = res
......
...@@ -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}
...@@ -307,8 +307,8 @@ try { ...@@ -307,8 +307,8 @@ try {
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){
// 改名 // 改名
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)}) 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({
...@@ -938,16 +946,19 @@ function createOutline(props){ ...@@ -938,16 +946,19 @@ function createOutline(props){
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,8 +304,14 @@ try { ...@@ -300,8 +304,14 @@ try {
gerberCfg.step = step gerberCfg.step = step
return gerberCfg return gerberCfg
}) })
if(GEN.GEN_TYPE == "genesis"){
GEN.COM("input_manual_reset")
gerberInfo.forEach(function(v){
import_info.push({name:v.layer, type:"gerber274x", date:now(),user:$.user_name})
GEN.COM("input_manual_set",v)
GEN.COM("input_manual")
})
} else {
gerberInfo.forEach(function(v){ gerberInfo.forEach(function(v){
GEN.COM("input_result_reset,step=,category=warnings,close_tab=yes") GEN.COM("input_result_reset,step=,category=warnings,close_tab=yes")
GEN.COM("input_create,path="+v.path) GEN.COM("input_create,path="+v.path)
...@@ -314,9 +324,11 @@ try { ...@@ -314,9 +324,11 @@ try {
GEN.COM("input_manual_set",v) GEN.COM("input_manual_set",v)
GEN.COM("input_manual") 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>"
...@@ -401,7 +413,11 @@ try { ...@@ -401,7 +413,11 @@ 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,20 +573,21 @@ function decompression(path, zips) { ...@@ -558,20 +573,21 @@ 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){
zips.push(item.path)
if(item.name.length >= 20) { if(item.name.length >= 20) {
var mvname = "custom" + count + "." + item.suffix; var mvname = "custom" + count + "." + item.suffix;
count++ count++
fs.rename(item.path, item.dir + "/" + mvname) fs.rename(item.path, item.dir + "/" + mvname)
item.path = item.dir + "/" + mvname item.path = item.dir + "/" + mvname
} }
zips.push(item.path)
var dir_name = item.path.replace(/\.(zip|7z|rar)$/, ""); var dir_name = item.path.replace(/\.(zip|7z|rar)$/, "");
autoUn(item.path, dir_name); autoUn(item.path, dir_name);
return true return true
} }
}
return false return false
}) })
if(zipfiles.length) {decompression(path, zips)} if(zipfiles.length) {decompression(path, zips)}
...@@ -598,3 +614,7 @@ function autoUn(path, dirname) { ...@@ -598,3 +614,7 @@ function autoUn(path, dirname) {
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
...@@ -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.
/*
NAME:
DESCRIPTION: ;
PARAMETER:
[
{
name : 'step',
title : 'step',
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: "orig",
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)
})
GEN.PAUSE("Ok")
IKM.msg("Ok")
// 保存
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.
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