Commit 62b678fa authored by Scott Sun's avatar Scott Sun

s

parent c52da11a
var plugin = require('topsin.gengui'); var plugin = require('topsin.gengui');
var gui = plugin.newGui(); var gui = plugin.newGui(plugin.__dirname);
var tmplayers = gui.selectLayer({ // var tmplayers = gui.selectLayer({
title: '请选择需拼片原稿层', // title: '请选择需拼片原稿层',
// layermatrix: {
// layer1: {
// context:"board",
// row: 1,
// name: "layer1",
// layer_type: "inner"
// },
// layer2: {
// context:"misc",
// 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);
r = gui.selectLayer({
title: "+1s",
filter: ".*", // regular expression
selectmode: "single", // single, multiple
// context: "all", // all, board, misc
// layertype: "inner", // default type of layertypelist
defaultsize: [600, 400], // window size
layermatrix: { layermatrix: {
layer1: { layer1: {
context: "board",
row: 1, row: 1,
name: "layer1", name: "layer1",
layer_type: "inner" layer_type: "inner"
...@@ -15,22 +59,18 @@ var tmplayers = gui.selectLayer({ ...@@ -15,22 +59,18 @@ var tmplayers = gui.selectLayer({
row: 2, row: 2,
name: "layer2", name: "layer2",
layer_type: "outer" layer_type: "outer"
}
}, },
layertype: "_default", layer3: {
layertypelist: [{ context: "misc",
name: "_default", row: 3,
display_name: "_default", name: "layer3",
filter: function (x) { layer_type: "inner"
return true
} }
}, ], },
selectmode: 'multiple', layertypelist: [
filter: ".*", // regular expression {name: "inner", display_name: "Inner", filter: function(x) { return x["layer_type"] === "inner"; }},
selectmode: "single", // single, multiple {name: "all", display_name: "All", filter: function(x) { return true; }},
context: "all", // all, board, misc {name: "outer", display_name: "Outer", filter: function(x) { return x["layer_type"] === "outer"; }}
defaultsize: [600, 400], // window size ],
gen:null gen: null
}); });
\ No newline at end of file
console.log(tmplayers);
\ No newline at end of file
...@@ -9,6 +9,18 @@ ...@@ -9,6 +9,18 @@
type : 'LineEdit', type : 'LineEdit',
property : {tool_tip : 'pcs step名,默认是cad'} property : {tool_tip : 'pcs step名,默认是cad'}
}, },
{
name : 'send_email',
title : '是否发送邮件',
type : 'RadioBox',
property : {
item_list:[
{name:'yes',text:'YES'},
{name:'no',text:'NO'},
],
tool_tip:'是否自动保存料号开关'
}
},
{ {
name : 'cam_type', name : 'cam_type',
title : 'cam_type', title : 'cam_type',
...@@ -191,7 +203,7 @@ try { ...@@ -191,7 +203,7 @@ try {
}); });
} }
cam_workflow_info = "sendmail" cam_workflow_info = "sendmail"
console.log("=============================================>anaysis_start"); console.log("============== ===============================>anaysis_start");
var par = PAR; var par = PAR;
var vc_src_01005_pad_result = par.vc_src_01005_pad_result var vc_src_01005_pad_result = par.vc_src_01005_pad_result
if(vc_src_01005_pad_result == ""){ if(vc_src_01005_pad_result == ""){
...@@ -692,8 +704,8 @@ try { ...@@ -692,8 +704,8 @@ try {
}) })
console.log("=============================> 6 set smd bga") console.log("=============================> 6 set smd bga")
script_info({ msg: "SMD&BGA analysis" }) script_info({ msg: "SMD&BGA create" })
global._ERRORMAG = "Error-SMD&BGA analysis"; global._ERRORMAG = "Error-SMD&BGA create";
script_info({ progress: 80 }); script_info({ progress: 80 });
step_list.forEach(function(step){ step_list.forEach(function(step){
...@@ -734,23 +746,27 @@ try { ...@@ -734,23 +746,27 @@ try {
var oping_layer = layer.solderL var oping_layer = layer.solderL
GEN.workLayer({name:layer,display_number:2,clear_before:'yes'}) GEN.workLayer({name:layer,display_number:2,clear_before:'yes'})
GEN.selClearFeature() GEN.selClearFeature()
var symbols_tmp = GEN.getLayerSymsHist({job:job,step:step,layer:layer}) // var symbols_test = GEN.getLayerSymsHist({job:job,step:step,layer:layer},true);
var syms = Object.keys(symbols_tmp) // GEN.INFO({units:"mm", entity_type:'layer', entity_path:job+'/'+step+'/'+layer, data_type:'SYMS_HIST'});
var filter_syms = syms.filter(function(item){ // GEN.INFO_RESULT
if(/^rect(\d+\.\d+|\d+)x(\d+\.\d+|\d+)/ig.test(item)){ // exportInfo({
var res = /^rect(\d+\.\d+|\d+)x(\d+\.\d+|\d+)/ig.exec(item).slice(1) // layer:layer,
var num1 = res[0], num2 = res[1] // INFO_RESULT: GEN.INFO_RESULT
if(num1<3 || num2<3){return true} // })
} // var symbols_tmp = GEN.getLayerSymsHist({job:job,step:step,layer:layer})
return /^r\d+/.test(item)} // var syms = Object.keys(symbols_tmp)
) // var filter_syms = syms.filter(function(item){
if(filter_syms.length){ // if(/^rect(\d+\.\d+|\d+)x(\d+\.\d+|\d+)/ig.test(item)){
var filter_syms = filter_syms.join(";") // var res = /^rect(\d+\.\d+|\d+)x(\d+\.\d+|\d+)/ig.exec(item).slice(1)
GEN.selectByFilter({attribute:".smd", include_syms:filter_syms, profile:"in"}) // var num1 = res[0], num2 = res[1]
// if(num1<3 || num2<3){return true}
// }
// return /^r\d+/.test(item)}
// )
GEN.selectByFilter({attribute:".smd", include_syms:"r*", exclude_syms:"rect*", profile:"in"})
if(GEN.getSelectCount()>0){ if(GEN.getSelectCount()>0){
GEN.COM("sel_delete_atr,attributes=.smd") GEN.COM("sel_delete_atr,attributes=.smd")
} }
}
if(oping_layer){ if(oping_layer){
GEN.COM("filter_atr_set,filter_name=popup,condition=yes,attribute=.smd") GEN.COM("filter_atr_set,filter_name=popup,condition=yes,attribute=.smd")
GEN.COM("sel_ref_feat,layers="+oping_layer+",use=filter,mode=disjoint,pads_as=shape,f_types=line\;pad\;surface\;arc\;text,polarity=positive\;negative,include_syms=,exclude_syms=") GEN.COM("sel_ref_feat,layers="+oping_layer+",use=filter,mode=disjoint,pads_as=shape,f_types=line\;pad\;surface\;arc\;text,polarity=positive\;negative,include_syms=,exclude_syms=")
...@@ -762,7 +778,8 @@ try { ...@@ -762,7 +778,8 @@ try {
GEN.closeStep() GEN.closeStep()
}) })
console.log("============= ===============> 6 analysis smd") console.log("============= ===============> 6 analysis smd")
script_info({ msg: "SMD&BGA analysis" })
global._ERRORMAG = "Error-SMD&BGA analysis";
// smd // smd
var smdInfo; var smdInfo;
try { try {
...@@ -809,20 +826,20 @@ try { ...@@ -809,20 +826,20 @@ try {
return tmp return tmp
}) })
copper_percent_tmp.forEach(function(item){ copper_percent_tmp.forEach(function(item){
var save_info = { var save_info2 = {
jobid: JobId, jobid: JobId,
layer: item.layer, layer: item.layer,
} }
if(/^cad/ig.test(step)){ if(/^cad/ig.test(step)){
save_info.layerinfohash = { save_info2.layerinfohash = {
card_copper_distribution: item.copper_percent card_copper_distribution: item.copper_percent
} }
} else if(/^stp/ig.test(step)){ } else if(/^stp/ig.test(step)){
save_info.layerinfohash = { save_info2.layerinfohash = {
array_copper_distribution: item.copper_percent array_copper_distribution: item.copper_percent
} }
} }
save_layerinfo(save_info) save_layerinfo(save_info2)
}) })
GEN.closeStep() GEN.closeStep()
} }
...@@ -858,7 +875,6 @@ try { ...@@ -858,7 +875,6 @@ try {
// } else { // } else {
// jobpath = "/home/local_db/server_db/jobs/"+job // jobpath = "/home/local_db/server_db/jobs/"+job
// } // }
// mkPath(jobpath,["user","opcam","steps"])
script_info({ msg: "Signal layer analysis" }) script_info({ msg: "Signal layer analysis" })
global._ERRORMAG = "Error-Signal layer analysis"; global._ERRORMAG = "Error-Signal layer analysis";
...@@ -932,6 +948,8 @@ try { ...@@ -932,6 +948,8 @@ try {
GEN.affectedLayer({affected:'no',mode:'all'}) GEN.affectedLayer({affected:'no',mode:'all'})
GEN.selClearFeature() GEN.selClearFeature()
GEN.workLayer({name:item.signalL,display_number:2,clear_before:'yes'}) GEN.workLayer({name:item.signalL,display_number:2,clear_before:'yes'})
GEN.INFO({units:"mm", entity_type:'layer', entity_path:job+'/'+step+'/'+item.signalL, data_type:'SYMS_HIST'});
if(GEN.INFO_RESULT.gSYMS_HISTsymbol){
GEN.selectByFilter({feat_types:"pad", profile:"in"}) GEN.selectByFilter({feat_types:"pad", profile:"in"})
if(GEN.getSelectCount() > 0){ if(GEN.getSelectCount() > 0){
selCopyLayer({job:job, layer:item.signalL + "_pad"}) selCopyLayer({job:job, layer:item.signalL + "_pad"})
...@@ -961,6 +979,7 @@ try { ...@@ -961,6 +979,7 @@ try {
} }
GEN.deleteLayer({job:job, layer:item.signalL + "_pad"}) GEN.deleteLayer({job:job, layer:item.signalL + "_pad"})
} }
}
}) })
GEN.clearLayers() GEN.clearLayers()
GEN.affectedLayer({ affected: 'no', mode: 'all' }) GEN.affectedLayer({ affected: 'no', mode: 'all' })
...@@ -1068,9 +1087,32 @@ try { ...@@ -1068,9 +1087,32 @@ try {
}) })
GEN.closeStep() GEN.closeStep()
}) })
// mvOutProfile({job:job, step:pcs_step}) // !! mvOutProfile({job:job, step:pcs_step})
global._ERRORMAG = false; global._ERRORMAG = false;
saveMeans({job:job,step:pcs_step})
// zip压缩 jobpath/user/opcam
// var zip = require('topsin.zip');
// var iSrcDir = jobpath + "/user/opencam";
// var iDestZipFile = jobpath + "/user/opencam.zip";
// zip.zipDir(iSrcDir,iDestZipFile);
// fs.rmdir(jobpath + "/user/opencam")
// jobpath
// process.exec("cp",["-r",jobpath,"/home/toplinker/samba/export/"+job])
if(db_customer == "2171"){
var matrix_2171 = GEN.getMatrix({job:job});
var comp = Object.keys(matrix_2171).filter(function(v){ // 如果有comp层 删除
return /comp/ig.test(v)
})
if (comp.length > 0){
var tmp = GEN.getStepList({job:job})
GEN.openStep({job:job,name:tmp[0]})
GEN.COM("delete_comp")
GEN.closeStep()
}
}
// 保存 // 保存
if(/yes/ig.test(par.auto_save)){ if(/yes/ig.test(par.auto_save)){
GEN.checkInout({job:job,mode:"out"}) // 结束保存料号 关闭料号 GEN.checkInout({job:job,mode:"out"}) // 结束保存料号 关闭料号
...@@ -1104,25 +1146,36 @@ try { ...@@ -1104,25 +1146,36 @@ try {
script_info({ msg: "analysis done" }) script_info({ msg: "analysis done" })
//! means信息无法导出 //! means信息无法导出
// 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)){
// if(GEN.GEN_TYPE == "genesis"){ if(GEN.GEN_TYPE == "genesis"){
// GEN.COM("export_job,job="+job+",path="+par.export_path+",mode="+par.export_mode+",submode="+par.export_submode+",overwrite=yes") GEN.COM("export_job,job="+job+",path="+par.export_path+",mode="+par.export_mode+",submode="+par.export_submode+",overwrite=yes")
// } else { } else {
// GEN.COM("export_job",{job:job,path:par.export_path,mode:par.export_mode,submode:par.export_submode,overwrite:"yes",format:"genesis",output_name:job}) GEN.COM("export_job",{job:job,path:par.export_path,mode:par.export_mode,submode:par.export_submode,overwrite:"yes",format:"genesis",output_name:job})
// GEN.COM("disp_on") GEN.COM("disp_on")
// GEN.COM("origin_on") GEN.COM("origin_on")
// } }
// } else { // jobpath + "/user/opencam"; par.export_path + "/" + job + ".tgz"
// resultData.push({ type: "error", title: "导出路径不存在!", detail: [{ desc: par.export_path }] }); // 到导出路径下解压 tgz
// } process.exec("/bin/tar",["-zxvf",par.export_path + "/" + job + ".tgz","-C",par.export_path])
// } // jobpath + "/user/opencam"
process.exec("/bin/cp",["-r",jobpath + "/user/opencam",par.export_path + "/" + job+"/user/"])
// 将导出路径下的 压缩成 tgz
process.exec("cd" ,[par.export_path,"&&","/bin/tar","-zcvf", "/tmp/tmp/" + job + ".tgz", job])
// fs.rmdir(par.export_path + "/" + job)
} else {
resultData.push({ type: "error", title: "导出路径不存在!", detail: [{ desc: par.export_path }] });
}
}
if(/yes/.test(par.send_email) ){
// 邮件触发 // 邮件触发
sendEmail({ sendEmail({
subject:db_customer + ' / '+job+' reading is ready!', subject:db_customer + ' / '+job+' reading is ready!',
content: db_customer + ' / '+job+' reading is ready!' content: db_customer + ' / '+job+' reading is ready!'
}) })
}
if (mode === "aimdfm") { if (mode === "aimdfm") {
$.QDfm.updateRow({ $.QDfm.updateRow({
...@@ -1173,7 +1226,25 @@ catch (e) { ...@@ -1173,7 +1226,25 @@ catch (e) {
// }) // })
} }
if(global._ERRORMAG){ if(global._ERRORMAG){
script_info({ msg: global._ERRORMAG }) script_info({ msg: global._ERRORMAG });
var job_attrs = db.query("",function(q){
return q.selectValue({
table:'pdm_job',
field_format:{job_attrs:'json'},
field:'job_attrs',
where:{id : JobId}
})
});
if (!job_attrs ) { job_attrs = {}}
job_attrs.readin_result = global._ERRORMAG
db.query("",function(q){
return q.updateRow({
table:'pdm_job',
data:{job_attrs:job_attrs},
update_policy:{attr_data:'json_merge'},
where:{id : JobId}
})
});
} }
IKM.msg(_.join(GEN.STATUS, "\n")) IKM.msg(_.join(GEN.STATUS, "\n"))
IKM.msg(e) IKM.msg(e)
...@@ -2199,7 +2270,6 @@ function analysisChkAttr(par) { ...@@ -2199,7 +2270,6 @@ function analysisChkAttr(par) {
var oChecklistName = par.oChecklistName var oChecklistName = par.oChecklistName
layers.forEach(function (v) { layers.forEach(function (v) {
var nact = /top|bot/.test(v) ? 1 : 2; var nact = /top|bot/.test(v) ? 1 : 2;
// saveMeans({job:job,step:par.step,chklist:oChecklistName,nact:nact,layer:v,jobpath:par.jobpath})
hash[v] = {} hash[v] = {}
Object.keys(info).forEach(function (key) { Object.keys(info).forEach(function (key) {
var val = info[key] var val = info[key]
...@@ -2308,7 +2378,7 @@ function analysisDrill(par, step){ ...@@ -2308,7 +2378,7 @@ function analysisDrill(par, step){
}) })
} }
// exportInfo({drill:drill, item:item}); // exportInfo({drill:drill, item:item});
var pads = GEN.getFeatures({job:job,step:step,layer:"temp"}) var pads = GEN.getFeatures({job:job,step:step,layer:"temp"}) || [];
pads = pads.filter(function(v){v.size=v.symbol.slice(1)-0 ;return /^r\d/.test(v.symbol)}) pads = pads.filter(function(v){v.size=v.symbol.slice(1)-0 ;return /^r\d/.test(v.symbol)})
if (pads && pads.length) { if (pads && pads.length) {
...@@ -2761,27 +2831,158 @@ function unSelect(){ ...@@ -2761,27 +2831,158 @@ function unSelect(){
GEN.selectByFilter({attribute:[{attribute:'.drill',option:'via'}],profile:'all',operation:"unselect"}) GEN.selectByFilter({attribute:[{attribute:'.drill',option:'via'}],profile:'all',operation:"unselect"})
GEN.selectByFilter({attribute:[{attribute:'.drill',option:'non_plated'}],profile:'all',operation:"unselect"}) GEN.selectByFilter({attribute:[{attribute:'.drill',option:'non_plated'}],profile:'all',operation:"unselect"})
} }
function mkPath(path,list) {
if(list.length){ function mkPath(path, list) {
if (list.length) {
var newPath = path + '/' + list.shift() var newPath = path + '/' + list.shift()
if(!fs.dirExists(newPath)){ if (!fs.dirExists(newPath)) {fs.mkdir(newPath)}
fs.mkdir(newPath) return mkPath(newPath, list)
} else {
return path
} }
return mkPath(newPath,list)
} else {return path}
} }
function saveMeans(props){ function saveMeans(props){
var job = props.job var job = props.job
var step = props.step var custstep = props.step
var chklist = props.chklist var chklist = props.chklist
var nact = props.nact var nact = props.nact
var layer = props.layer var jobpath = GEN.getJobPath({job: job})
// 获取meas var filter = props.filter
var meas = GEN.getCheckMeas({job:job,step:step,chklist:chklist,nact:nact,layer:layer}) var afterPath = mkPath(jobpath, ["user", "opencam", "steps"])
var basepath = props.jobpath+"/user/opcam/steps" var steps;
var respath = mkPath(basepath,[step,"chk",chklist+"_"+nact,layer]) if (custstep) {
fs.writeFile(respath+"/meas",meas.join("\n")) steps = [custstep]
fs.chmod(respath+"/meas",777) } else {
steps = GEN.getStepList({job: job})
steps = steps.filter(function(v){return v!="" || v!= " "})
}
if(!steps || steps.length==0){
return
}
steps.forEach(function (step) {
var chkPath = mkPath(afterPath, [step, "chk"])
var chks;
if (chklist) {chks = [chklist]}else {
chks = GEN.getChecklist({job: job,step: step})
}
chks = chks.filter(function(v){return /quotation/.test(v)});
if(chks && chks.length){
chks.forEach(function (item, i) {
var afterChkPath = mkPath(chkPath, [item])
var hdr = "{\n\
\"title\": \"" + item + "\",\n\
\"sequence\": " + (i + 1) + "\n\
}"
fs.writeFile(afterChkPath + "/hdr", _.toString(hdr))
var nacts = []
if (nact) {
nacts = [nact]
} else {
var nactCount = GEN.getChklistActCount({job:job,step:step,chklist:item}) || 0;
if(/quotation/.test(item)){
nactCount = 5;
}
for (var i = 0; i < nactCount; i++) {
nacts.push(i+1)
}
}
if(nacts.length > 0){
var actionPath = mkPath(afterChkPath, ["actions"])
nacts.forEach(function(index){
var titleFile = GEN.INFO({
entity_type: "check",
entity_path: job + "/" + step + "/" + item,
data_type: "TITLE",
options: "action=" + index,
parse:'no'
})
var title = fs.readFile(titleFile) || item
if(title && title != ""){
if(/=/.test(title)){
title = title.split("=")[1].trim()
title = title.substring(1, title.length-1)
}
var nackPath = mkPath(actionPath, [index+"-"+title])
fs.writeFile(nackPath + "/hdr", "{\n\
\"title\": \"" + (index + "-" + title) + "\",\n\
\"sequence\": " + index + ",\n\
\"dfm_name\": \"" + title + "\"\n\
}");
var displayFile = GEN.INFO({
entity_type: 'check',
entity_path: job + "/" + step + "/" + item,
data_type: 'MEAS_DISP_ID',
options: "action=" + index,
parse:'no'
});
fs.writeFile(nackPath + "/disp", fs.readFile(displayFile))
var measFile = GEN.INFO({entity_type:'check', entity_path:job+'/'+step+'/'+item, data_type:'MEAS', options:"index+action="+index, parse:'no'});
var means;
if(filter){ // 处理过滤
var fileArray = []
var file = fs.openFile(measFile,'r');
while(!file.atEnd()) {
fileArray.push(file.readLine())
}
if(Array.isArray(filter)){
var nowFilter = filter.filter(function(item2){
for (var key in item2) {
var value = item2[key]
if (!Array.isArray(value)){
item2[key] = [value]
}
}
return item2.step.indexOf(step)>=0 && item2.chk.indexOf(item)>=0 && item2.nact.indexOf(index)>=0
})
if (nowFilter.length > 0){
var nowfilter = nowFilter.map(function(v){return v.filter}).reduce(function(a,b){
b.forEach(function(v2){
if (a.indexOf(v2)<0){
a.push(v2)
}
})
return a
},[])
fileArray = fileArray.filter(function(line){
var flag = false
nowfilter.forEach(function(f){
var reg = new RegExp(f, "ig")
if (reg.test(line)){
flag = true
}
})
return flag
})
}
} else if (typeof filter == "object") {
if (filter[step] && filter[step][item] && filter[step][item][String(index)]) {
var nowFilter = filter[step][item][String(index)]
if (!Array.isArray(nowFilter)){nowFilter = [nowFilter]}
fileArray = fileArray.filter(function(line){
var flag = false
nowFilter.forEach(function(f){
var reg = new RegExp(f, "ig")
if (reg.test(line)){
flag = true
}
})
return flag
})
}
}
means = fileArray.join("\n")
} else {
means = fs.readFile(measFile)
}
fs.writeFile(nackPath + "/meas", means)
}
})
}
})
}
})
} }
// 算弧长 // 算弧长
function arcLength(x1,y1,x2,y2,x3,y3){ function arcLength(x1,y1,x2,y2,x3,y3){
...@@ -2887,15 +3088,15 @@ function mvOutProfile (props) { ...@@ -2887,15 +3088,15 @@ function mvOutProfile (props) {
function autoUn(path, dirname) { function autoUn(path, dirname) {
if(/\.rar$/.test(path)){ if(/\.rar$/.test(path)){
process.exec('mkdir', [dirname]) fs.mkdir(dirname)
process.exec('unrar', ['x' , path, dirname, "-o+"]) process.exec('/opt/rar/unrar', ['x' , path, dirname, "-o+"])
} else { } else {
process.exec('7za', ['x' , path, "-o"+dirname, "-aoa"]) process.exec('/usr/local/lib/p7zip/7za', ['x' , path, "-o"+dirname, "-aoa"])
} }
} }
function exportInfo(info){ function exportInfo(info){
fs.writeFile("/home/toplinker/samba/scott_test/tmp", _.toString(info)) fs.writeFile("/home/toplinker/samba/Test_Scott/tmp", _.toString(info))
} }
function sendEmail(msg) { function sendEmail(msg) {
......
...@@ -420,22 +420,15 @@ try { ...@@ -420,22 +420,15 @@ try {
}) })
} }
} else if (/^yucca$/ig.test(par.customer)) { } else if (/^yucca$/ig.test(par.customer)) {
if(profileRule[0] == "outline" && /1352/ig.test(PAR.customer)) { if(all_layer.indexOf("outline") >= 0) {
GEN.workLayer({name:'outline',display_number:2,clear_before:'yes'}) GEN.workLayer({name:"outline",display_number:2,clear_before:'yes'})
GEN.selAllFeat() GEN.selAllFeat()
if(GEN.getSelectCount() > 0) { if(GEN.getSelectCount() > 0) {
if(GEN.GEN_TYPE == "genesis"){
GEN.selCreateProfile()
// GEN.COM("sel_create_profile,create_profile_with_holes=no") // GEN.COM("sel_create_profile,create_profile_with_holes=no")
} else { // cutting data
GEN.COM("profile_limits,layers=outline,type=lyrfilter,margin=0") createOutline({job:job, step:tmp_step, profileRule:["^outline$"]})
}
}
var hasProfile = GEN.getProfile({job:job, step:tmp_step})
GEN.closeStep()
if(hasProfile.match(/\n/ig).length == 1){
createOutline({job:job, step:tmp_step, profileRule:profileRule})
} }
else { createOutline({job:job, step:tmp_step, profileRule:profileRule}) }
} else { } else {
createOutline({job:job, step:tmp_step, profileRule:profileRule}) createOutline({job:job, step:tmp_step, profileRule:profileRule})
} }
...@@ -445,11 +438,18 @@ try { ...@@ -445,11 +438,18 @@ try {
if(all_layer.indexOf("outline") >= 0){ if(all_layer.indexOf("outline") >= 0){
GEN.workLayer({name:"outline",display_number:2,clear_before:'yes'}) GEN.workLayer({name:"outline",display_number:2,clear_before:'yes'})
GEN.selAllFeat() GEN.selAllFeat()
if(GEN.getSelectCount() > 0) { GEN.COM("sel_create_profile,create_profile_with_holes=no") } if(GEN.getSelectCount() > 0) {
// GEN.COM("sel_create_profile,create_profile_with_holes=no")
// cutting data
createOutline({job:job, step:tmp_step, profileRule:["^outline$"]})
}
else { createOutline({job:job, step:tmp_step, profileRule:profileRule}) }
} else if (contours.length) { } else if (contours.length) {
// 过滤上下方的框 // 过滤上下方的框
profileRule.unshift("contour"); profileRule.unshift("contour");
createOutline({job:job, step:tmp_step, profileRule:profileRule}) createOutline({job:job, step:tmp_step, profileRule:profileRule})
} else {
createOutline({job:job, step:tmp_step, profileRule:profileRule})
} }
} else if (/^vivo$/ig.test(par.customer)) { } else if (/^vivo$/ig.test(par.customer)) {
// 判断有没有line层 // 判断有没有line层
...@@ -457,7 +457,11 @@ try { ...@@ -457,7 +457,11 @@ try {
GEN.workLayer({name:"line",display_number:2,clear_before:'yes'}) GEN.workLayer({name:"line",display_number:2,clear_before:'yes'})
GEN.selAllFeat() GEN.selAllFeat()
if(GEN.getSelectCount() > 0) { GEN.COM("sel_create_profile,create_profile_with_holes=no") } if(GEN.getSelectCount() > 0) { GEN.COM("sel_create_profile,create_profile_with_holes=no") }
} else if(all_layer.indexOf("top") >= 0) { } else if(all_layer.indexOf("array") >= 0) {
GEN.workLayer({name:"array",display_number:2,clear_before:'yes'})
GEN.selAllFeat()
if(GEN.getSelectCount() > 0) { GEN.COM("sel_create_profile,create_profile_with_holes=no") }
}else if(all_layer.indexOf("top") >= 0) {
GEN.selClearFeature() GEN.selClearFeature()
GEN.workLayer({name:"top",display_number:2,clear_before:'yes'}) GEN.workLayer({name:"top",display_number:2,clear_before:'yes'})
// 判断是否有外框 // 判断是否有外框
...@@ -594,7 +598,25 @@ catch (e) { ...@@ -594,7 +598,25 @@ catch (e) {
IKM.msg(_.join(GEN.STATUS, "\n")) IKM.msg(_.join(GEN.STATUS, "\n"))
IKM.msg(e) IKM.msg(e)
if(global._ERRORMAG){ if(global._ERRORMAG){
script_info({ msg: global._ERRORMAG }) script_info({ msg: global._ERRORMAG });
var job_attrs = db.query("",function(q){
return q.selectValue({
table:'pdm_job',
field_format:{job_attrs:'json'},
field:'job_attrs',
where:{id : JobId}
})
});
if (!job_attrs ) { job_attrs = {}}
job_attrs.readin_result = global._ERRORMAG
db.query("",function(q){
return q.updateRow({
table:'pdm_job',
data:{job_attrs:job_attrs},
update_policy:{attr_data:'json_merge'},
where:{id : JobId}
})
});
} }
IKM.crud("deleteRow", { IKM.crud("deleteRow", {
table: "pdm_job_jobattr", table: "pdm_job_jobattr",
...@@ -773,7 +795,11 @@ function setDrill(props){ // 设置钻孔 ...@@ -773,7 +795,11 @@ function setDrill(props){ // 设置钻孔
// findSignal 根据传入的数字找到对应的signal层 如 1 => top ; 2 => layer_2 // findSignal 根据传入的数字找到对应的signal层 如 1 => top ; 2 => layer_2
function findSignal(num){ function findSignal(num){
console.log(num) console.log(num)
return signalLayer[Number(num-1)].name var tmpnum = Number(num-1)
if(tmpnum > signalLayer.length -1){
tmpnum = signalLayer.length -1
}
return signalLayer[tmpnum].name
} }
function doDrill(drills){ // 分析钻孔层 function doDrill(drills){ // 分析钻孔层
return drills.map(function(v){ return drills.map(function(v){
...@@ -804,6 +830,17 @@ function reName(props) { // 改名 par{job:要改名的料号, rule: {要改名 ...@@ -804,6 +830,17 @@ function reName(props) { // 改名 par{job:要改名的料号, rule: {要改名
var cfg = props.cfg var cfg = props.cfg
matrix = matrix.filter(function(v){return v.name != v.new_name}) matrix = matrix.filter(function(v){return v.name != v.new_name})
matrix.forEach(function(v){
// 在数据库层信息里找v.name 找得到就直接改名
var new_name = IKM.get_layerinfo({jobid: JobId, layer: v.name, layerinfo: "new_name" })
var layers_tmp = Object.keys(GEN.getMatrix({job:job}));
if(new_name && new_name!="" && new_name != v.name && layers_tmp.indexOf(new_name) < 0){
GEN.renameLayer({job:job,layer:v.name,new_name:new_name})
}
})
if(matrix.length > 0){
var rename_list = matrix.map(function(item){ var rename_list = matrix.map(function(item){
var new_name; var new_name;
var tl_name = item.tl_name var tl_name = item.tl_name
...@@ -854,14 +891,15 @@ function reName(props) { // 改名 par{job:要改名的料号, rule: {要改名 ...@@ -854,14 +891,15 @@ function reName(props) { // 改名 par{job:要改名的料号, rule: {要改名
return flag return flag
}) })
rename_list.forEach(function(v){ rename_list.forEach(function(v){
if(v.orig_name !== v.new_name && !GEN.isLayerExists({job:job, layer: v.new_name})){ var layers_tmp = Object.keys(GEN.getMatrix({job:job}));
if(!GEN.isLayerExists({job:job, layer:v.new_name})){ if(v.orig_name !== v.new_name && layers_tmp.indexOf(v.new_name) < 0){
GEN.renameLayer({job:job,layer:v.orig_name,new_name:v.new_name}) GEN.renameLayer({job:job,layer:v.orig_name,new_name:v.new_name})
} }
}
}); });
}
// 最后 如果第一个 最后一个不是top bottom 就手动修改 // 最后 如果第一个 最后一个不是top bottom 就手动修改
var afterMatrix = GEN.getMatrix({job:job}) var afterMatrix = GEN.getMatrix({job:job});
var signals = Object.keys(afterMatrix).filter(function(v){return afterMatrix[v].layer_type=="signal" && afterMatrix[v].context=="board"}) var signals = Object.keys(afterMatrix).filter(function(v){return afterMatrix[v].layer_type=="signal" && afterMatrix[v].context=="board"})
signals = signals.sort(function(a,b){return afterMatrix[a].row - afterMatrix[b].row}) signals = signals.sort(function(a,b){return afterMatrix[a].row - afterMatrix[b].row})
var topSignal = signals[0] var topSignal = signals[0]
...@@ -1072,7 +1110,9 @@ function createOutline(props){ ...@@ -1072,7 +1110,9 @@ function createOutline(props){
} }
function exportInfo(info){
fs.writeFile("/home/toplinker/samba/Test_Scott/tmp", _.toString(info))
}
function touch(layer) { function touch(layer) {
GEN.selRefFeat({layers:layer,use:"filter",mode:"touch"}) GEN.selRefFeat({layers:layer,use:"filter",mode:"touch"})
if(GEN.getSelectCount() > 0) { if(GEN.getSelectCount() > 0) {
......
...@@ -159,7 +159,7 @@ try { ...@@ -159,7 +159,7 @@ try {
var custCfg = config.customer[par.customer] var custCfg = config.customer[par.customer]
if(!custCfg){throw "customer config error:"+par.customer} if(!custCfg){throw "customer config error:"+par.customer}
custCfg.db = par.db || custCfg.db custCfg.db = par.db || custCfg.db
var step = custCfg.step.toLowerCase() var step = custCfg.step.toLowerCase() || "cad";
// 获取路径下文件信息 // 获取路径下文件信息
var path = par.path var path = par.path
if(!fs.exists(path)){ if(!fs.exists(path)){
...@@ -196,7 +196,10 @@ try { ...@@ -196,7 +196,10 @@ try {
// 将jobFile下的zip解压 // 将jobFile下的zip解压
script_info({ msg: "unzip the file", result_severity:"info" }) script_info({ msg: "unzip the file", result_severity:"info" })
global._ERRORMAG = "Failed to unzip the file"; global._ERRORMAG = "Failed to unzip the file";
decompression(jobFile[0].path, []) decompression(jobFile[0].path, []);
changePath2(jobFile[0].path)
var job_attrs = db.query("",function(q){ var job_attrs = db.query("",function(q){
return q.selectValue({ return q.selectValue({
table:'pdm_job', table:'pdm_job',
...@@ -232,12 +235,15 @@ try { ...@@ -232,12 +235,15 @@ try {
script_info({ msg: "Import odb++", result_severity:"error" }); script_info({ msg: "Import odb++", result_severity:"error" });
global._ERRORMAG = "Fail to import odb++"; global._ERRORMAG = "Fail to import odb++";
if(jobInfo.data.length == 1){ // 只分析到一个tgz文件 直接导入 if(jobInfo.data.length == 1){ // 只分析到一个tgz文件 直接导入
IKM.msg("只分析到一个tgz文件 直接导入") IKM.msg("只分析到一个tgz文件 直接导入");
import_info.push({name:jobInfo.data[0].file.name, type:"odb++", date:now(),user:$.user_name}) import_info.push({name:jobInfo.data[0].file.name, type:"odb++", date:now(),user:$.user_name});
var err = importJob({name:job,db:custCfg.db,path:jobInfo.data[0].file.path},config.delSameJob) var err = importJob({name:job,db:custCfg.db,path:jobInfo.data[0].file.path},config.delSameJob);
// 将step改名cad
var step_tmp = GEN.getStepList({job:job})[0];
if(step_tmp != "cad"){
GEN.renameStep({job:job,name:step_tmp,new_name:'cad'})
}
if(err){throw err} if(err){throw err}
} else { // 多个tgz文件 说明需要合并 } else { // 多个tgz文件 说明需要合并
console.log("==========合并的情况"); console.log("==========合并的情况");
var jobs = jobInfo.data.map(function(item, i){ var jobs = jobInfo.data.map(function(item, i){
...@@ -384,7 +390,6 @@ try { ...@@ -384,7 +390,6 @@ try {
GEN.checkInout({job:job,mode:"in"}) GEN.checkInout({job:job,mode:"in"})
GEN.closeJob({job:job}) GEN.closeJob({job:job})
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;
...@@ -426,7 +431,25 @@ try { ...@@ -426,7 +431,25 @@ try {
catch (e) { catch (e) {
script_info({ result_severity: "error" }) script_info({ result_severity: "error" })
if(global._ERRORMAG){ if(global._ERRORMAG){
script_info({ msg: global._ERRORMAG }) script_info({ msg: global._ERRORMAG });
var job_attrs = db.query("",function(q){
return q.selectValue({
table:'pdm_job',
field_format:{job_attrs:'json'},
field:'job_attrs',
where:{id : JobId}
})
});
if (!job_attrs ) { job_attrs = {}}
job_attrs.readin_result = global._ERRORMAG
db.query("",function(q){
return q.updateRow({
table:'pdm_job',
data:{job_attrs:job_attrs},
update_policy:{attr_data:'json_merge'},
where:{id : JobId}
})
});
} }
IKM.crud("deleteRow", { IKM.crud("deleteRow", {
table: "pdm_job_jobattr", table: "pdm_job_jobattr",
...@@ -522,6 +545,7 @@ function importJob(props,delSameJob){ ...@@ -522,6 +545,7 @@ function importJob(props,delSameJob){
} }
} }
props.path = changePath(props.path) props.path = changePath(props.path)
// 如果path的tgz不符合规范 纠正一下
GEN.importJob(props); GEN.importJob(props);
} }
...@@ -587,23 +611,31 @@ function decompression(path, zips) { ...@@ -587,23 +611,31 @@ function decompression(path, zips) {
var files = fs.listDir(path) var files = fs.listDir(path)
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" || item.suffix == "ZIP") {
inputState.push(item.suffix); inputState.push(item.suffix);
console.log("--->path:" + item.path) console.log("--->path:" + item.path)
if(zips.indexOf(item.path) < 0){ if(zips.indexOf(item.path) < 0){
zips.push(item.path) zips.push(item.path);
if(item.name.length >= 20) { if(item.name.length >= 30 && !/�|\?/.test(item.name)) {
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
} }
var dir_name = item.path.replace(/\.(zip|7z|rar)$/, ""); var dir_name = item.path.replace(/\.(zip|7z|rar)$/ig, "");
autoUn(item.path, dir_name); autoUn(item.path, dir_name);
return true return true
} }
} }
// else if(/7z/.test(item.completeSuffix)){
// inputState.push("7z");
// if(zips.indexOf(item.path) < 0){
// zips.push(item.path);
// var dir_name = item.path.replace(".7z", "");
// autoUn(item.path, dir_name);
// return true
// }
// }
return false return false
}) })
if(zipfiles.length) {decompression(path, zips)} if(zipfiles.length) {decompression(path, zips)}
...@@ -630,5 +662,29 @@ function autoUn(path, dirname) { ...@@ -630,5 +662,29 @@ function autoUn(path, dirname) {
} }
function exportInfo(info){ function exportInfo(info){
fs.writeFile("/home/toplinker/samba/scott_test/tmp", _.toString(info)) fs.writeFile("/home/toplinker/samba/Test_Scott/tmp", _.toString(info))
}
function changePath2(filePath){
var fileList = fs.listDir(filePath);
var tmp = [];
for(var i = 0;i<fileList.length;i++){
if(fileList[i].isDir){
var path = fileList[i].path;
var fileName = fileList[i].baseName;
var obj = {
path:path,
fileName:fileName
}
tmp.push(obj);
}
}
var list = [];
for(var i = tmp.length-1;i>=0;i--){
var newFileName = tmp[i].fileName.replace(/\s*/g,'');//去除文件名中空格
newFileName = newFileName.replace(/\?/g,'');//去除文件名中?
var newPath = tmp[i].path.replace(/^(.*)\/[^\/]*$/,"$1");
var file = fs.rename(tmp[i].path,newPath+'/'+newFileName);
list.push(file);
}
} }
\ No newline at end of file
...@@ -343,7 +343,7 @@ ...@@ -343,7 +343,7 @@
{ {
"valid": function(props){ "valid": function(props){
var file = props.file; var file = props.file;
return /.+\.art$/ig.test(file.name) return /.+\.art$|\.gbr$/ig.test(file.name)
}, },
"type": "Gerber274x", "type": "Gerber274x",
"format": "Gerber274x_2", "format": "Gerber274x_2",
...@@ -452,19 +452,19 @@ ...@@ -452,19 +452,19 @@
{"orig_name" : ["^comp_+_bot$"], "tl_name" : "comp_+_bot" }, {"orig_name" : ["^comp_+_bot$"], "tl_name" : "comp_+_bot" },
{"orig_name" : ["top_enig","top-enig","enig_top"], "tl_name" : "enig_top" }, {"orig_name" : ["top_enig","top-enig","enig_top"], "tl_name" : "enig_top" },
{"orig_name" : ["bot_enig","bot-enig","enig_bot"], "tl_name" : "enig_bot" }, {"orig_name" : ["bot_enig","bot-enig","enig_bot"], "tl_name" : "enig_bot" },
{"orig_name" : ["top_paste","^spt$","^past_top$"], "tl_name" : "past_top" }, {"orig_name" : ["top_(?:solder)paste","^spt(?:\\.gbr)?$","^past_top$"], "tl_name" : "past_top" },
{"orig_name" : ["bottom_paste","^spb$","^past_botm$"], "tl_name" : "past_botm" }, {"orig_name" : ["bot(?:tom)?_(?:solder)paste","^spb(?:\\.gbr)?$","^past_botm$"], "tl_name" : "past_botm" },
{"orig_name" : ["top_silk","^sst$","^silk_top$"], "tl_name" : "silk_top" }, {"orig_name" : ["top_silk","^sst(?:\\.gbr)?$","^silk_top$"], "tl_name" : "silk_top" },
{"orig_name" : ["bottom_silk","^ssb$","^silk_bot$"], "tl_name" : "silk_bot" }, {"orig_name" : ["bot(?:tom)?_silk","^ssb(?:\\.gbr)?$","^silk_bot$"], "tl_name" : "silk_bot" },
{"orig_name" : ["top_solder","^smt$","^sm_top$"], "tl_name" : "sm_top" }, {"orig_name" : ["top_(?:solder)mask","^smt(?:\\.gbr)?$","^sm_top$"], "tl_name" : "sm_top" },
{"orig_name" : ["bottom_solder","^smb$","^sm_botm$"], "tl_name" : "sm_botm" }, {"orig_name" : ["bot(?:tom)?_(?:solder)mask","^smb(?:\\.gbr)?$","^sm_botm$"], "tl_name" : "sm_botm" },
{"orig_name" : "^top$", "tl_name" : "top" }, {"orig_name" : ["^top$","^top\\.gbr$","^top\\.art$"], "tl_name" : "top" },
{"orig_name" : "^drill$", "tl_name" : "drill" }, {"orig_name" : "^drill(?:\\.drl)$", "tl_name" : "drill" },
{"orig_name" : ["^board_outline$","outline.art","^outline$"], "tl_name" : "outline" }, {"orig_name" : ["^board_outline$","outline\\.gbr|outline\\.art","^outline$"], "tl_name" : "outline" },
{"orig_name" : ["^rout$","\\.rou$"], "tl_name" : "rout" }, {"orig_name" : ["^rout$","\\.rou$"], "tl_name" : "rout" },
{"orig_name" : "^bottom$", "tl_name" : "bottom" }, {"orig_name" : ["^bottom$","^bottom\\.gbr$","^bottom\\.art$"], "tl_name" : "bottom" },
{"orig_name" : ["^l(\\d+)","^isl(\\d+)$","^layer_(\\d+)$"], "tl_name" : "l_($1)"}, {"orig_name" : ["^inner_(\\d+)\\.art","^l(\\d+)","^isl(\\d+)(?:\\.gbr)?$","^layer_(\\d+)$"], "tl_name" : "l_($1)"},
{"orig_name" : ["_isl(\\d+)_isl(\\d+)","d(\\d+)-(\\d+)"], "tl_name" : "d_($1)-($2)"}, {"orig_name" : ["-(\\d+)-(\\d+)(?:-laser)?\\.drl","_isl(\\d+)_isl(\\d+)","d(\\d+)-(\\d+)"], "tl_name" : "d_($1)-($2)"},
{"orig_name" : ["_top_isl(\\d+)"], "tl_name" : "d_1-($1)"}, {"orig_name" : ["_top_isl(\\d+)"], "tl_name" : "d_1-($1)"},
{"orig_name" : ["_isl(\\d+)_bottom"], "tl_name" : "d_($1)-($1+1)"} {"orig_name" : ["_isl(\\d+)_bottom"], "tl_name" : "d_($1)-($1+1)"}
] ]
...@@ -599,25 +599,27 @@ ...@@ -599,25 +599,27 @@
"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","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_top","spcs\\.gbr$|paste.pri|pripaste|solderpaste_top","ppst\\.art|spt\\.art","assy[_-]?top\\.art","past_top","paste_top|spt"], "tl_name" : "past_top" },
{"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" : ["^pm_bot","spps\\.gbr$|paste.sec|secpaste|solderpaste_bottom","spst\\.art|spb\\.art","assy[_-]?bott?o?m?\\.art","past_bot","paste_bot|spb"], "tl_name" : "past_botm" },
{"orig_name" : ["silk.pri","pleg\\.art|sst\\.art","^ss_top|sscs\\.gbr$","silk_top"], "tl_name" : "silk_top" }, {"orig_name" : ["silk.pri","pleg\\.art|sst\\.art","^ss_top|sscs\\.gbr$","silk_top|sst"], "tl_name" : "silk_top" },
{"orig_name" : ["silk.sec","sleg\\.art|ssb\\.art","^ss_bot|ssps\\.gbr$","silk_bot"], "tl_name" : "silk_bot" }, {"orig_name" : ["silk.sec","sleg\\.art|ssb\\.art","^ss_bot|ssps\\.gbr$","silk_bot|ssb"], "tl_name" : "silk_bot" },
{"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" : ["\\.st$|\\.tsm$|soldermask_top","mask.top\\.art|smt\\.art","mask.pri\\.art|smcs\\.gbr$","psm\\.art","sm_top|smt"], "tl_name" : "sm_top" },
{"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" : ["\\.sb$|\\.bsm$|soldermask_bottom","mask.bot\\.art|smb\\.art","mask.sec\\.art|smps\\.gbr$","ssm\\.art","sm_bot|smb"], "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" : ["^lay(\\d+)\\.art$|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" : ["^(?:signal|plane|layer)_(\\d+)$","^l(\\d+)$","_l(\\d+)-.{3}\\.art$","lay(\\d+)\\.art$","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" : ["_l?(\\d+)_l?(\\d+)$","\\.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" : ["^drill$","\\.ncdthru$"], "tl_name" : "drill" },
{"orig_name" : ["\\.rou$","^rout$"], "tl_name" : "rout" }, {"orig_name" : ["\\.rou$","^rout$"], "tl_name" : "rout" },
{"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" : ["^contour\\.gdo$","\\.R1$","outline"], "tl_name" : "outline" }, {"orig_name" : ["^ro\\.art$","^contour\\.gdo$","\\.R1$","outline"], "tl_name" : "outline" },
{"orig_name" : ["^pst\\.art$","top-enig","enig_top"], "tl_name" : "enig_top" }, {"orig_name" : ["^pst\\.art$","top-enig","enig_top"], "tl_name" : "enig_top" },
{"orig_name" : ["^sst\\.art$","bot-enig","enig_bot"], "tl_name" : "enig_bot" } {"orig_name" : ["^sst\\.art$","bot-enig","enig_bot"], "tl_name" : "enig_bot" },
{"orig_name" : ["_top_l(\\d+)"], "tl_name" : "d_1-($1)"},
{"orig_name" : ["_l(\\d+)_bottom"], "tl_name" : "d_($1)-($1+1)"}
], ],
"mergerule" : { "mergerule" : {
profile:["past_top","sm_top"], profile:["past_top","sm_top"],
...@@ -827,27 +829,27 @@ ...@@ -827,27 +829,27 @@
"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" : ["^pmt\\.art$","\\.pma$|\\.spa$","paste.top|soldPasteTop|pastemask.?top","past_top"], "tl_name" : "past_top" }, {"orig_name" : ["^pmt\\.art$","\\.pma$|\\.spa$","paste.?top|soldPasteTop|pastemask.?top","past_top"], "tl_name" : "past_top" },
{"orig_name" : ["^pmb\\.art$","\\.pmb$|\\.spb$","paste.bot|soldPasteBot|pastemask.?bot","past_botm"], "tl_name" : "past_botm" }, {"orig_name" : ["^pmb\\.art$","\\.pmb$|\\.spb$","paste.?bot|soldPasteBot|pastemask.?bot","past_botm"], "tl_name" : "past_botm" },
{"orig_name" : ["tsilk","^sst\\.art$","\\.ssa$","silkscrntop|silkscreentop","silk.top|silk-top"], "tl_name" : "silk_top" }, {"orig_name" : ["tsilk|silktop","^sst\\.art$","\\.ssa$","silkscrntop|silkscreentop","silk.top|silk-top"], "tl_name" : "silk_top" },
{"orig_name" : ["bsilk","^ssb\\.art$","\\.ssb$","silkscrnbot|silkscreenbot","silk.bot|silk-bot"], "tl_name" : "silk_bot" }, {"orig_name" : ["bsilk|silkbot","^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|export|enig|pm|past|paste|silk|mask).)+top\\.(pho|art)$","^top$","^top\\.art$"], "tl_name" : "top" }, {"orig_name" : ["^top\\.(pho|art)$","^(?:(?!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" : ["_s(\\d+)\\.art$","^(?:(?!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|view|enig|pm|past|paste|silk|mask).)+bot\\.(pho|art)$","^bot\\.art$","^bottom$","^bottom.art$"], "tl_name" : "bottom" }, {"orig_name" : ["^bottom\\.(pho|art)$","^(?:(?!assy|view|enig|pm|past|paste|silk|mask).)+bot(tom)?\\.(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" },
{"orig_name" : ["\\.rou$","^rout$"], "tl_name" : "rout" }, {"orig_name" : ["\\.rou$","^rout$"], "tl_name" : "rout" },
{"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" : ["p_outline\\.art","panel\\.art$","paneloutline\\.pho","outline\\.art$","\\.bol$","PnlContourNonPlated\\.ger","^outline"], "tl_name" : "outline" }, {"orig_name" : ["p_outline\\.art","panel\\.(art|pho)$","panel-?outline\\.pho","outline\\.art$","\\.bol$","PnlContourNonPlated\\.ger","^outline"], "tl_name" : "outline" },
{"orig_name" : ["topside-golden","top-enig","enig_top"], "tl_name" : "enig_top" }, {"orig_name" : ["topside-golden","top-enig","enig_top"], "tl_name" : "enig_top" },
{"orig_name" : ["botside-golden","bot-enig","enig_bot"], "tl_name" : "enig_bot" }, {"orig_name" : ["botside-golden","bot-enig","enig_bot"], "tl_name" : "enig_bot" },
], ],
"mergerule" : { "mergerule" : {
profile:["silk_top"], profile:["silk_top","past_top"],
laser : { laser : {
tl_name: "drill($1)-($2)", tl_name: "drill($1)-($2)",
regs: ["(\\d+)-(\\d+)\\.drl$"] regs: ["(\\d+)-(\\d+)\\.drl$"]
...@@ -876,7 +878,7 @@ ...@@ -876,7 +878,7 @@
{ {
"valid": function(props){ "valid": function(props){
var file = props.file; var file = props.file;
return /\.gdo$|\.pho$|^line$|^ftdrill/ig.test(file.name) return /\.gbr$|\.gdo$|\.pho$|^line$|^ftdrill/ig.test(file.name)
}, },
"type": "Gerber274x", "type": "Gerber274x",
"format": "Gerber274x_4" "format": "Gerber274x_4"
...@@ -905,19 +907,19 @@ ...@@ -905,19 +907,19 @@
{"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" : ["soldermask1|soldermask-top","top-solder-mask\\.pho","soldermasktop","sm_top"], "tl_name" : "sm_top" }, {"orig_name" : ["topsoldermask|soldermask1|soldermask-top","top-solder-mask\\.pho","soldermasktop","sm_top"], "tl_name" : "sm_top" },
{"orig_name" : ["soldermask2|soldermask-bottom","bottom-solder-mask\\.pho","soldermaskbottom","sm_bot"], "tl_name" : "sm_botm" }, {"orig_name" : ["bottomsoldermask|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" : ["^m1\\.gbr$","top\\.pho","^top$","lay(?:er)?top"], "tl_name" : "top" },
{"orig_name" : ["^lay(\\d+)","layer(\\d+)\\.gdo","layer_(\\d+)"], "tl_name" : "l_($1)"}, {"orig_name" : ["^m(\\d+)\\.gbr$","^lay(\\d+)","layer(\\d+)\\.gdo","layer(?:_)?(\\d+)"], "tl_name" : "l_($1)"},
{"orig_name" : ["^bottom\\.pho$","^bottom$","layerbottom"], "tl_name" : "bottom" }, {"orig_name" : ["^mbot\\.gbr$","^bottom\\.pho$","^bottom$","lay(?:er)?bottom"], "tl_name" : "bottom" },
{"orig_name" : ["^drill(\\d+)-(\\d+)$","^d(\\d+)-(\\d+)$"], "tl_name" : "d_($1)-($2)"}, {"orig_name" : ["^dr(?:l)?(\\d+)-(\\d+)\\.drl","^drill(\\d+)-(\\d+)$","^d(\\d+)-(\\d+)$"], "tl_name" : "d_($1)-($2)"},
{"orig_name" : ["^drill$"], "tl_name" : "drill" }, {"orig_name" : ["^drill$"], "tl_name" : "drill" },
{"orig_name" : ["\\.rou$","^rout$"], "tl_name" : "rout" }, {"orig_name" : ["\\.rou$","^rout$"], "tl_name" : "rout" },
{"orig_name" : "fab.art", "tl_name" : "fab.art" }, {"orig_name" : ["fab\\.art|fab\\.gbr"], "tl_name" : "fab.art" },
{"orig_name" : ["pcb-set\\.gdo","^pcb-set\\.pho$","^pcb-set$","^array$"], "tl_name" : "array" }, {"orig_name" : ["pcb-set\\.gdo","^pcb-set\\.pho$","^pcb-set$","^array$"], "tl_name" : "array" },
{"orig_name" : ["^outline"], "tl_name" : "outline" }, {"orig_name" : ["^outline"], "tl_name" : "outline" },
{"orig_name" : ["au_mask-bottom\\.gdo","au_mask_bottom\\.gdo","enig_top"], "tl_name" : "enig_top" }, {"orig_name" : ["au[_-]mask[_-]bot","enig_top"], "tl_name" : "enig_top" },
{"orig_name" : ["au_mask-top\\.gdo","au_mask_top\\.gdo","enig_bot"], "tl_name" : "enig_bot" }, {"orig_name" : ["au[_-]mask[_-]top","enig_bot"], "tl_name" : "enig_bot" },
{"orig_name" : ["cavitytop","cavity_top"], "tl_name" : "cavity_top" }, {"orig_name" : ["cavitytop","cavity_top"], "tl_name" : "cavity_top" },
{"orig_name" : ["cavitybottom","cavity_bot"], "tl_name" : "cavity_bot" }, {"orig_name" : ["cavitybottom","cavity_bot"], "tl_name" : "cavity_bot" },
], ],
......
(function(){return {
"formats": {
"ODB": {},
"ODB_1": {
"comments": "",
"arrStep": "stp",
"isMerge": "yes"
},
"Gerber274x_1": {
"nf1": 3,
"nf2": 4,
"units": "mm",
"zeroes": "leading",
"decimal": "no",
"nf_comp": 0,
"break_sr": "yes",
"data_type": "ascii",
"separator": "*",
"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
},
"Gerber274x_2": {
"nf1": 3,
"nf2": 5,
"units": "inch",
"zeroes": "leading",
"decimal": "no",
"nf_comp": 0,
"break_sr": "yes",
"data_type": "ascii",
"separator": "*",
"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
},
"Gerber274x_3": {
"nf1": 3,
"nf2": 5,
"units": "mm",
"zeroes": "leading",
"decimal": "no",
"nf_comp": 0,
"break_sr": "yes",
"data_type": "ascii",
"separator": "*",
"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
},
"Gerber274x_4": {
"nf1": 2,
"nf2": 3,
"units": "mm",
"zeroes": "none",
"decimal": "no",
"nf_comp": 0,
"break_sr": "yes",
"data_type": "ascii",
"separator": "*",
"threshold": 200,
"drill_only": "no",
"multiplier": 1,
"resolution": 3,
"tool_units": "mm",
"coordinates": "absolute",
"merge_by_rule": "no",
"signed_coords": "no",
"text_line_width": 0.0024
},
"Gerber274x_5": {
"nf1": 2,
"nf2": 3,
"units": "mm",
"zeroes": "leading",
"decimal": "no",
"nf_comp": 0,
"break_sr": "yes",
"data_type": "ascii",
"separator": "*",
"threshold": 200,
"drill_only": "no",
"multiplier": 1,
"resolution": 3,
"tool_units": "mm",
"coordinates": "absolute",
"merge_by_rule": "no",
"signed_coords": "no",
"text_line_width": 0.0024
},
"Excellon1_1":{
"nf1": 3,
"nf2": 0,
"units": "mm",
"zeroes": "leading",
"decimal": "yes",
"nf_comp": 0,
"break_sr": "yes",
"data_type": "ascii",
"separator": "nl",
"threshold": 200,
"drill_only": "no",
"multiplier": 1,
"resolution": 3,
"tool_units": "mm",
"coordinates": "absolute",
"merge_by_rule": "no",
"signed_coords": "no",
"text_line_width": 0.0024
},
"Excellon2_1": {
"nf1": 3,
"nf2": 5,
"units": "mm",
"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": "mm",
"coordinates": "absolute",
"merge_by_rule": "no",
"signed_coords": "no",
"text_line_width": 0.0024
},
"Excellon2_2": {
"nf1": 2,
"nf2": 3,
"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
},
"Excellon2_3": {
"nf1": 2,
"nf2": 5,
"units": "inch",
"zeroes": "trailing",
"decimal": "no",
"nf_comp": 0,
"break_sr": "yes",
"data_type": "ascii",
"separator": "nl",
"threshold": 200,
"drill_only": "no",
"multiplier": 1,
"resolution": 3,
"tool_units": "mm",
"coordinates": "absolute",
"merge_by_rule": "no",
"signed_coords": "no",
"text_line_width": 0.0024
},
"Excellon2_4": {
"nf1": 2,
"nf2": 4,
"units": "inch",
"zeroes": "trailing",
"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
},
"Excellon2_5": {
"nf1": 2,
"nf2": 3,
"units": "mm",
"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": "mm",
"coordinates": "absolute",
"merge_by_rule": "no",
"signed_coords": "no",
"text_line_width": 0.0024
},
"Excellon2_6": {
"nf1": 3,
"nf2": 4,
"units": "mm",
"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": "mm",
"coordinates": "absolute",
"merge_by_rule": "no",
"signed_coords": "no",
"text_line_width": 0.0024
},
"Excellon2_7": {
"nf1": 3,
"nf2": 4,
"units": "inch",
"zeroes": "none",
"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
},
"Excellon2_8": {
"nf1": 2,
"nf2": 5,
"units": "inch",
"zeroes": "none",
"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
},
"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": {
"nf1": 2,
"nf2": 4,
"units": "inch",
"zeroes": "none",
"decimal": "no",
"nf_comp": 0,
"break_sr": "yes",
"data_type": "ascii",
"separator": "*",
"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
}
},
"customer": {
"2171": {
"step": "cad",
"rules": [
{
"valid": function(props){
var file = props.file;
return /.+\.tgz$/ig.test(file.name)
},
"type": "ODB",
"format": "ODB"
},
{
"valid": function(props){
var file = props.file;
return /.+\.art$/ig.test(file.name)
},
"type": "Gerber274x",
"format": "Gerber274x_2",
"format_params": function(props){
var params = props.params
if(params.art_param){
var leading = params.art_param["SUPPRESS_LEAD_ZEROES"]
var trailing = params.art_param["SUPPRESS_TRAIL_ZEROES"]
var zeroes = "none"
if(/yes/ig.test(leading)){
zeroes = "leading"
}
if(/yes/ig.test(trailing)){
zeroes = "trailing"
}
var nf1,nf2
if(params.art_param.hasOwnProperty("FORMAT")){
var tmp = params.art_param["FORMAT"].split(".")
if(/\d+/ig.test(tmp[0])){nf1 = Number(tmp[0])}
if(/\d+/ig.test(tmp[1])){nf2 = Number(tmp[1])}
}
return {
"nf1": nf1 || 3,
"nf2": nf2 || 5,
"units": /METRIC|MM/ig.test(params.art_param["OUTPUT_UNITS"])? "mm" :"inch",
"zeroes": zeroes,
"decimal": "no",
"nf_comp": 0,
"break_sr": "yes",
"data_type": "ascii",
"separator": "*",
"threshold": 200,
"drill_only": "no",
"multiplier": 1,
"resolution": 3,
"tool_units": /METRIC|MM/ig.test(params.art_param["OUTPUT_UNITS"])? "mm" :"inch",
"coordinates": "absolute",
"merge_by_rule": "no",
"signed_coords": "no",
"text_line_width": 0.0024
}
}
}
},
{
"valid": function(props){
var file = props.file;
return /.+\.drl$/ig.test(file.name)
},
"type": "Excellon2",
"format": "Excellon2_1",
"format_params": function(props){
var params = props.params
if(params.nc_param){
var leading = params.nc_param["SUPPRESS_LEAD_ZEROES"]
var trailing = params.nc_param["SUPPRESS_TRAIL_ZEROES"]
var zeroes = "none"
if(/yes/ig.test(leading)){
zeroes = "leading"
}
if(/yes/ig.test(trailing)){
zeroes = "trailing"
}
return {
"nf1": params.nc_param["INTEGER_PLACES"]? Number(params.nc_param["INTEGER_PLACES"]) : 3,
"nf2": params.nc_param["DECIMAL_PLACES"]? Number(params.nc_param["DECIMAL_PLACES"]) : 5,
"units": /METRIC|MM/ig.test(params.nc_param["OUTPUT_UNITS"])? "mm" :"inch",
"zeroes": zeroes,
"decimal": "no",
"nf_comp": 0,
"break_sr": "yes",
"data_type": "ascii",
"separator": "nl",
"threshold": 200,
"drill_only": "no",
"multiplier": 1,
"resolution": 3,
"tool_units": /METRIC|MM/ig.test(params.nc_param["OUTPUT_UNITS"])? "mm" :"inch",
"coordinates": params.nc_param["COORDINATES"]? params.nc_param["COORDINATES"].toLowerCase() :"absolute",
"merge_by_rule": "no",
"signed_coords": "no",
"text_line_width": 0.0024
}
}
}
},
{
"valid": function(props){
var file = props.file;
return /.+\.drd$/ig.test(file.name)
},
"type": "Excellon1",
"format": "Excellon1_1"
},
{
"valid": function(props){
var file = props.file;
return /.+\.phd$/ig.test(file.name)
},
"type": "Gerber274x",
"format": "Gerber274x_1"
}
],
"tl_name": [
{"orig_name" : ["top_enig","top-enig","enig_top"], "tl_name" : "enig_top" },
{"orig_name" : ["bot_enig","bot-enig","enig_bot"], "tl_name" : "enig_bot" },
{"orig_name" : ["top_paste","^spt$","^past_top$"], "tl_name" : "past_top" },
{"orig_name" : ["bottom_paste","^spb$","^past_botm$"], "tl_name" : "past_botm" },
{"orig_name" : ["top_silk","^sst$","^silk_top$"], "tl_name" : "silk_top" },
{"orig_name" : ["bottom_silk","^ssb$","^silk_bot$"], "tl_name" : "silk_bot" },
{"orig_name" : ["top_solder","^smt$","^sm_top$"], "tl_name" : "sm_top" },
{"orig_name" : ["bottom_solder","^smb$","^sm_botm$"], "tl_name" : "sm_botm" },
{"orig_name" : "^top$", "tl_name" : "top" },
{"orig_name" : "^drill$", "tl_name" : "drill" },
{"orig_name" : ["^board_outline$","outline.art","^outline$"], "tl_name" : "outline" },
{"orig_name" : ["^rout$","\\.rou$"], "tl_name" : "rout" },
{"orig_name" : "^bottom$", "tl_name" : "bottom" },
{"orig_name" : ["^l(\\d+)","^isl(\\d+)$","^layer_(\\d+)$"], "tl_name" : "l_($1)"},
{"orig_name" : ["_isl(\\d+)_isl(\\d+)","d(\\d+)-(\\d+)"], "tl_name" : "d_($1)-($2)"},
{"orig_name" : ["_top_isl(\\d+)"], "tl_name" : "d_1-($1)"},
{"orig_name" : ["_isl(\\d+)_bottom"], "tl_name" : "d_($1)-($1+1)"}
]
},
"Yucca": {
"step": "cad",
"rules": [
{
"valid": function(props){
var file = props.file;
return /.+\.tgz$/ig.test(file.name)
},
"type": "ODB",
"format": "ODB"
},
{
"valid": function(props){
var file = props.file;
return /.+\.ipc$/ig.test(file.name)
},
"type": "IPC356",
"format": "IPC356_1"
},
{
"valid": function(props){
var file = props.file;
return /.+\.rou$/ig.test(file.name)
},
"type": "Excellon2",
"format": "Excellon2_3"
},
{
"valid": function(props){
var file = props.file;
return /.+\.art$/ig.test(file.name)
},
"type": "Gerber274x",
"format": "Gerber274x_2",
"format_params": function(props){
var params = props.params
if(params.art_param){
var leading = params.art_param["SUPPRESS_LEAD_ZEROES"]
var trailing = params.art_param["SUPPRESS_TRAIL_ZEROES"]
var zeroes = "none"
if(/yes/ig.test(leading)){
zeroes = "leading"
}
if(/yes/ig.test(trailing)){
zeroes = "trailing"
}
var nf1,nf2
if(params.art_param.hasOwnProperty("FORMAT")){
var tmp = params.art_param["FORMAT"].split(".")
if(/\d+/ig.test(tmp[0])){nf1 = Number(tmp[0])}
if(/\d+/ig.test(tmp[1])){nf2 = Number(tmp[1])}
}
return {
"nf1": nf1 || 3,
"nf2": nf2 || 5,
"units": /METRIC|MM/ig.test(params.art_param["OUTPUT_UNITS"])? "mm" :"inch",
"zeroes": zeroes,
"decimal": "no",
"nf_comp": 0,
"break_sr": "yes",
"data_type": "ascii",
"separator": "*",
"threshold": 200,
"drill_only": "no",
"multiplier": 1,
"resolution": 3,
"tool_units": /METRIC|MM/ig.test(params.art_param["OUTPUT_UNITS"])? "mm" :"inch",
"coordinates": "absolute",
"merge_by_rule": "no",
"signed_coords": "no",
"text_line_width": 0.0024
}
}
}
},
{
"valid": function(props){
var file = props.file;
return /.+\.drl$/ig.test(file.name)
},
"type": "Excellon2",
"format": "Excellon2_1",
"format_params": function(props){
var params = props.params
if(params.nc_param){
var leading = params.nc_param["SUPPRESS_LEAD_ZEROES"]
var trailing = params.nc_param["SUPPRESS_TRAIL_ZEROES"]
var zeroes = "none"
if(/yes/ig.test(leading)){
zeroes = "leading"
}
if(/yes/ig.test(trailing)){
zeroes = "trailing"
}
return {
"nf1": params.nc_param["INTEGER_PLACES"]? Number(params.nc_param["INTEGER_PLACES"]) : 3,
"nf2": params.nc_param["DECIMAL_PLACES"]? Number(params.nc_param["DECIMAL_PLACES"]) : 5,
"units": /METRIC|MM/ig.test(params.nc_param["OUTPUT_UNITS"])? "mm" :"inch",
"zeroes": zeroes,
"decimal": "no",
"nf_comp": 0,
"break_sr": "yes",
"data_type": "ascii",
"separator": "nl",
"threshold": 200,
"drill_only": "no",
"multiplier": 1,
"resolution": 3,
"tool_units": /METRIC|MM/ig.test(params.nc_param["OUTPUT_UNITS"])? "mm" :"inch",
"coordinates": params.nc_param["COORDINATES"]? params.nc_param["COORDINATES"].toLowerCase() :"absolute",
"merge_by_rule": "no",
"signed_coords": "no",
"text_line_width": 0.0024
}
}
}
}
],
"tl_name": [
{"orig_name" : ["^pm_top","paste.pri","assytop\\.art","past_top","paste_top"], "tl_name" : "past_top" },
{"orig_name" : ["^pm_bot","paste.sec","assybot\\.art","past_bot","paste_bot"], "tl_name" : "past_botm" },
{"orig_name" : ["silk.pri","pleg\\.art","^ss_top","silk_top"], "tl_name" : "silk_top" },
{"orig_name" : ["silk.sec","sleg\\.art","^ss_bot","silk_bot"], "tl_name" : "silk_bot" },
{"orig_name" : ["mask.top\\.art","mask.pri\\.art","psm\\.art","sm_top"], "tl_name" : "sm_top" },
{"orig_name" : ["mask.bot\\.art","mask.sec\\.art","ssm\\.art","sm_bot"], "tl_name" : "sm_botm" },
{"orig_name" : ["^top$","^top.art$"], "tl_name" : "top" },
{"orig_name" : ["\\.l(\d+)$","^l(\\d+).*\\.art$","^0?(\\d+)_.*\\.art$","^l(\\d+)\\.art$","^0(\\d+).*ccp_ms","^s(\\d+)\\.art","lay(\\d+)\\.art","layer_(\\d+)"], "tl_name" : "l_($1)"},
{"orig_name" : ["^bottom$","^bottom\\.art$"], "tl_name" : "bottom" },
{"orig_name" : ["\\.d(\\d+)-(\\d+)$","-(\\d+)-(\\d+)\\.drl$","(\\d+)-(\\d+)-laser\\.drl$","d(\\d+)-(\\d+)"], "tl_name" : "d_($1)-($2)"},
{"orig_name" : ["\\.rou$","^rout$"], "tl_name" : "rout" },
{"orig_name" : "fab.art", "tl_name" : "fab.art" },
{"orig_name" : ["multipack.art","^array$"], "tl_name" : "array" },
{"orig_name" : ["outline"], "tl_name" : "outline" },
{"orig_name" : ["^pst\\.art$","top-enig","enig_top"], "tl_name" : "enig_top" },
{"orig_name" : ["^sst\\.art$","bot-enig","enig_bot"], "tl_name" : "enig_bot" }
],
"mergerule" : {
profile:["past_top"]
},
"extra": [
{
"verification": function(info){
if(!info.type){return false}
return /gerber/ig.test(info.type)
},
"fn": function(props){
var fileInfo = props.fileInfo;
var step = props.step;
fileInfo.forEach(function(item){
var layer = item.file.name.toLowerCase().split(" ").join("-")
var path = item.file.path
var filectx = fs.readFile(path)
var tmp = filectx.match(/Holesize \d\. = [\d\.]+ Tolerance = [\S]+ [\S]+ [\S]+ Quantity = \d+\n/igm)
if(tmp && tmp.length) {
var res = tmp.map(function(v,i) {
var tmp2 = /Holesize \d\. = ([\d\.]+) Tolerance = ([\S]+) ([\S]+) ([\S]+) Quantity = \d+\n/igm.exec(v);
return {
size: tmp2[1],
tolerance: tmp2[2],
type: tmp2[3],
unit: tmp2[4],
row: i+1
}
})
// [{"size":"0.100300","tolerance":"+0.020000/-0.020000","type":"PLATED","unit":"MM","row":1}]
GEN.units({type:"mm"})
var toolsInfo = GEN.getTool({job:job, step:step, layer:layer, units:"mm"})
GEN.COM("tools_show,layer="+layer)
// {"1":{"count":"01156","num":"1","type":"plated","min_tol":"0","max_tol":"0","finish_size":"1","drill_size":"1","slot_len":"0","type2":"standard","shape":"hole","bit":0}}
GEN.COM("tools_tab_reset")
var alltype = {
plated: "plate",
non_plated: "nplate",
laser: "via",
via: "via"
}
Object.keys(toolsInfo).forEach(function(row){
var info = toolsInfo[row];
var numberrow = row - 1;
var type = res[numberrow]? res[numberrow].type.toLowerCase() : info.type.toLowerCase();
var min_tol = res[numberrow]? Math.abs( res[numberrow].tolerance.split("/")[1] * 1000 ): info.min_tol;
var max_tol = res[numberrow]? Math.abs(res[numberrow].tolerance.split("/")[0] * 1000) : info.max_tol;
var drill_size = res[numberrow]? res[numberrow].size * 1000 : info.drill_size;
GEN.COM("tools_tab_add,num="+row+",shape="+info.shape+",type="+alltype[type]
+",min_tol="+min_tol+",max_tol="+max_tol+",bit=,finish_size="+drill_size+",drill_size="+drill_size);
})
GEN.COM("tools_set,layer="+layer+",thickness=0,user_params=,slots=by_length")
// {"layer":"gfp2_1216_lte_rl03_am_m1610201_r01-bl-2-3-laser.drl",
// "info":[{"size":"0.090300","tolerance":"+0.020000/-0.020000","type":"PLATED","unit":"MM","row":1}]}
}
})
}
}
]
},
"New_data": {
"step": "cad",
"rules": [
{
"valid": function(props){
var file = props.file;
return /.+\.tgz$/ig.test(file.name)
},
"type": "ODB",
"format": "ODB"
},
{
"valid": function(props){
var file = props.file;
return /.+\.art$/ig.test(file.name)
},
"type": "Gerber274x",
"format": "Gerber274x_2",
"format_params": function(props){
var params = props.params
if(params.art_param){
var leading = params.art_param["SUPPRESS_LEAD_ZEROES"]
var trailing = params.art_param["SUPPRESS_TRAIL_ZEROES"]
var zeroes = "none"
if(/yes/ig.test(leading)){
zeroes = "leading"
}
if(/yes/ig.test(trailing)){
zeroes = "trailing"
}
var nf1,nf2
if(params.art_param.hasOwnProperty("FORMAT")){
var tmp = params.art_param["FORMAT"].split(".")
if(/\d+/ig.test(tmp[0])){nf1 = Number(tmp[0])}
if(/\d+/ig.test(tmp[1])){nf2 = Number(tmp[1])}
}
return {
"nf1": nf1 || 3,
"nf2": nf2 || 5,
"units": /METRIC|MM/ig.test(params.art_param["OUTPUT_UNITS"])? "mm" :"inch",
"zeroes": zeroes,
"decimal": "no",
"nf_comp": 0,
"break_sr": "yes",
"data_type": "ascii",
"separator": "*",
"threshold": 200,
"drill_only": "no",
"multiplier": 1,
"resolution": 3,
"tool_units": /METRIC|MM/ig.test(params.art_param["OUTPUT_UNITS"])? "mm" :"inch",
"coordinates": "absolute",
"merge_by_rule": "no",
"signed_coords": "no",
"text_line_width": 0.0024
}
}
}
},
{
"valid": function(props){
var file = props.file;
return /.+\.drl$/ig.test(file.name)
},
"type": "Excellon2",
"format": "Excellon2_1",
"format_params": function(props){
var params = props.params
if(params.nc_param){
var leading = params.nc_param["SUPPRESS_LEAD_ZEROES"]
var trailing = params.nc_param["SUPPRESS_TRAIL_ZEROES"]
var zeroes = "none"
if(/yes/ig.test(leading)){
zeroes = "leading"
}
if(/yes/ig.test(trailing)){
zeroes = "trailing"
}
return {
"nf1": params.nc_param["INTEGER_PLACES"]? Number(params.nc_param["INTEGER_PLACES"]) : 3,
"nf2": params.nc_param["DECIMAL_PLACES"]? Number(params.nc_param["DECIMAL_PLACES"]) : 5,
"units": /METRIC|MM/ig.test(params.nc_param["OUTPUT_UNITS"])? "mm" :"inch",
"zeroes": zeroes,
"decimal": "no",
"nf_comp": 0,
"break_sr": "yes",
"data_type": "ascii",
"separator": "nl",
"threshold": 200,
"drill_only": "no",
"multiplier": 1,
"resolution": 3,
"tool_units": /METRIC|MM/ig.test(params.nc_param["OUTPUT_UNITS"])? "mm" :"inch",
"coordinates": params.nc_param["COORDINATES"]? params.nc_param["COORDINATES"].toLowerCase() :"absolute",
"merge_by_rule": "no",
"signed_coords": "no",
"text_line_width": 0.0024
}
}
}
}
],
"tl_name": [
{"orig_name" : ["pasttop.art","^past_top$","top_solderpaste"], "tl_name" : "past_top" },
{"orig_name" : ["^silk_top\\.art$","pleg\\.art","^silk_top$","top_silkscreen"], "tl_name" : "silk_top" },
{"orig_name" : ["_r1\\.phd$","_r1\\.fph$","^smt\\.art$","soldtop.art","^sm_top$","top_soldermask"], "tl_name" : "sm_top" },
{"orig_name" : ["^top\\.art$","^top$"], "tl_name" : "top" },
{"orig_name" : ["_l(\\d+)\\.phd$","_l(\\d+)\\.fph$","^in_(\\d+)\\.art$","^l(\\d+)\\.art$","inner_(\\d+)\\.art","layer_(\\d+)"], "tl_name" : "l_($1)"},
{"orig_name" : ["^bot\\.art$","^bottom\\.art","^bottom$"], "tl_name" : "bottom" },
{"orig_name" : ["_r\\d\\.phd$","_r\\d\\.fph$","^smb\\.art$","soldbotm.art","^sm_botm$","bot_soldermask"], "tl_name" : "sm_botm" },
{"orig_name" : ["^silk_bottom\\.art$","sleg\\.art","^silk_bot$","bot_silkscreen"], "tl_name" : "silk_bot" },
{"orig_name" : ["pastbotm\\.art","^past_botm$","bot_solderpaste"], "tl_name" : "past_botm" },
{"orig_name" : ["^nc_drill$","^drill$"], "tl_name" : "drill" },
{"orig_name" : "multipack\\.art", "tl_name" : "array" },
{"orig_name" : ["\\.rou$","^rout$"], "tl_name" : "rout" },
{"orig_name" : ["outline.art","^outline$"], "tl_name" : "outline" },
{"orig_name" : ["fab.art","fab"], "tl_name" : "fab" },
{"orig_name" : "top-enig", "tl_name" : "top-enig" },
{"orig_name" : "bot-enig", "tl_name" : "bot-enig" },
{"orig_name" : "fab_page2", "tl_name" : "fab_page2" },
{"orig_name" : ["_d(\\d)(\\d+)\\.drd","_d(\\d)(\\d+)\\.fdr","^d(\\d)(\\d+)\\.art$","(\\d+)-(\\d+)-laser\\.drl","d(\\d+)-(\\d+)"], "tl_name" : "d_($1)-($2)"}
]
},
"Wistron":{
"step": "cad",
"rules": [
{
"valid": function(props){
var file = props.file;
return /.+\.tgz$/ig.test(file.name)
},
"type": "ODB",
"format": "ODB"
},
{
"valid": function(props){
var file = props.file;
return /.+\.btd$/ig.test(file.name)
},
"type": "IPC356",
"format": "IPC356_1"
},
{
"valid": function(props){
var file = props.file;
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)
},
"type": "Gerber274x",
"format": "Gerber274x_3"
},
{
"valid": function(props){
var file = props.file;
return /.+\.ncd$/ig.test(file.name)
},
"type": "Excellon2",
"format": "Excellon2_4"
},
{
"valid": function(props){
var file = props.file;
return /.+\.d\d+$/ig.test(file.name)
},
"type": "Excellon2",
"format": "Excellon2_6"
},
{
"valid": function(props){
var file = props.file;
return /.+\.art$/ig.test(file.name)
},
"type": "Gerber274x",
"format": "Gerber274x_3",
"format_params": function(props){
var params = props.params
if(params.art_param){
var leading = params.art_param["SUPPRESS_LEAD_ZEROES"]
var trailing = params.art_param["SUPPRESS_TRAIL_ZEROES"]
var zeroes = "none"
if(/yes/ig.test(leading)){
zeroes = "leading"
}
if(/yes/ig.test(trailing)){
zeroes = "trailing"
}
var nf1,nf2
if(params.art_param.hasOwnProperty("FORMAT")){
var tmp = params.art_param["FORMAT"].split(".")
if(/\d+/ig.test(tmp[0])){nf1 = Number(tmp[0])}
if(/\d+/ig.test(tmp[1])){nf2 = Number(tmp[1])}
}
return {
"nf1": nf1 || 3,
"nf2": nf2 || 5,
"units": /METRIC|MM/ig.test(params.art_param["OUTPUT_UNITS"])? "mm" :"inch",
"zeroes": zeroes,
"decimal": "no",
"nf_comp": 0,
"break_sr": "yes",
"data_type": "ascii",
"separator": "*",
"threshold": 200,
"drill_only": "no",
"multiplier": 1,
"resolution": 3,
"tool_units": /METRIC|MM/ig.test(params.art_param["OUTPUT_UNITS"])? "mm" :"inch",
"coordinates": "absolute",
"merge_by_rule": "no",
"signed_coords": "no",
"text_line_width": 0.0024
}
}
}
},
{
"valid": function(props){
var file = props.file;
return /.+\.drl$|\.rou$/ig.test(file.name)
},
"type": "Excellon2",
"format": "Excellon2_4",
"format_params": function(props){
var params = props.params
if (params.ncdrill && !params.nc_param){params.nc_param = params.ncdrill}
if(params.nc_param){
var leading = params.nc_param["SUPPRESS_LEAD_ZEROES"]
var trailing = params.nc_param["SUPPRESS_TRAIL_ZEROES"]
var zeroes = "none"
if(/yes/ig.test(leading)){
zeroes = "leading"
}
if(/yes/ig.test(trailing)){
zeroes = "trailing"
}
return {
"nf1": params.nc_param["INTEGER_PLACES"]? Number(params.nc_param["INTEGER_PLACES"]) : 3,
"nf2": params.nc_param["DECIMAL_PLACES"]? Number(params.nc_param["DECIMAL_PLACES"]) : 5,
"units": /METRIC|MM/ig.test(params.nc_param["OUTPUT_UNITS"])? "mm" :"inch",
"zeroes": zeroes,
"decimal": "no",
"nf_comp": 0,
"break_sr": "yes",
"data_type": "ascii",
"separator": "nl",
"threshold": 200,
"drill_only": "no",
"multiplier": 1,
"resolution": 3,
"tool_units": /METRIC|MM/ig.test(params.nc_param["OUTPUT_UNITS"])? "mm" :"inch",
"coordinates": params.nc_param["COORDINATES"]? params.nc_param["COORDINATES"].toLowerCase() :"absolute",
"merge_by_rule": "no",
"signed_coords": "no",
"text_line_width": 0.0024
}
}
}
}
],
"tl_name": [
{"orig_name" : ["pastmasktop\\.pho|^pmt\\.art$","\\.pma$","SoldPasteTop\\.ger","past_top"], "tl_name" : "past_top" },
{"orig_name" : ["pastmaskbot\\.pho|^pmb\\.art$","\\.pmb$","SoldPasteBot\\.ger","past_botm"], "tl_name" : "past_botm" },
{"orig_name" : ["silkscreentop\\.pho|tsilk","^sst\\.art$","\\.ssa$","SilkScrnTop\\.ger","silk_top"], "tl_name" : "silk_top" },
{"orig_name" : ["silkscreenbot\\.pho|bsilk","^ssb\\.art$","\\.ssb$","SilkScrnBot\\.ger","silk_bot"], "tl_name" : "silk_bot" },
{"orig_name" : ["soldermasktop\\.pho|tmask","^smt\\.art$","\\.sma$","SoldMask1Top\\.ger","sm_top"], "tl_name" : "sm_top" },
{"orig_name" : ["soldermaskbot\\.pho|bmask","^smb\\.art$","\\.smb$","SoldMask1Bot\\.ger","sm_bot"], "tl_name" : "sm_botm" },
{"orig_name" : ["-top\\.pho$|^top$","^top.art$"], "tl_name" : "top" },
{"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\\.pho$|^bot\\.art$","^bottom$","^bottom.art$"], "tl_name" : "bottom" },
{"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" : ["ThruHoleNonPlated\\.ncd$","^drill$"], "tl_name" : "drill" },
{"orig_name" : ["\\.rou$","^rout$"], "tl_name" : "rout" },
{"orig_name" : "fab.art", "tl_name" : "fab.art" },
{"orig_name" : ["multipack.art","^array$"], "tl_name" : "array" },
{"orig_name" : ["outline\\.art$","\\.bol$","PnlContourNonPlated\\.ger","^outline"], "tl_name" : "outline" },
{"orig_name" : ["^topside.golden\\.pho$","top-enig","enig_top"], "tl_name" : "enig_top" },
{"orig_name" : ["^botside.golden\\.pho$","bot-enig","enig_bot"], "tl_name" : "enig_bot" },
],
"mergerule" : {
profile:["silk_top"]
}
},
"Vivo":{
"step": "cad",
"rules": [
{
"valid": function(props){
var file = props.file;
return /.+\.tgz$/ig.test(file.name)
},
"type": "ODB",
"format": "ODB"
},
{
"valid": function(props){
var file = props.file;
return /.+\.btd$|.+\.rou$/ig.test(file.name)
},
"type": "IPC356A",
"format": "IPC356A_1"
},
{
"valid": function(props){
var file = props.file;
return /\.gdo$|\.pho$/ig.test(file.name)
},
"type": "Gerber274x",
"format": "Gerber274x_4"
},
{
"valid": function(props){
var file = props.file;
return /.+\.ncd$/ig.test(file.name) || /.+\.d\d+$/ig.test(file.name)
},
"type": "Excellon2",
"format": "Excellon2_5"
},
{
"valid": function(props){
var file = props.file;
return /^ftdrill/ig.test(file.name)
},
"type": "Gerber274x",
"format": "Gerber274x_4"
},
{
"valid": function(props){
var file = props.file;
return /.+\.drl/ig.test(file.name) || /.+\.d\d+$/ig.test(file.name)
},
"type": "Excellon2",
"format": "Excellon2_7"
}
],
"tl_name": [
{"orig_name" : ["osp-top\\.pho","solderpastetop","past_top"], "tl_name" : "past_top" },
{"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" : ["sleg\\.art","^ss_bot","silk_bot"], "tl_name" : "silk_bot" },
{"orig_name" : ["soldermask1|soldermask-top","top-solder-mask\\.pho","soldermasktop","sm_top"], "tl_name" : "sm_top" },
{"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" : ["^lay(\\d+)","layer(\\d+)\\.gdo","layer_(\\d+)"], "tl_name" : "l_($1)"},
{"orig_name" : ["^bottom\\.pho$","^bottom$","layerbottom"], "tl_name" : "bottom" },
{"orig_name" : ["^drill(\\d+)-(\\d+)$","^d(\\d+)-(\\d+)$"], "tl_name" : "d_($1)-($2)"},
{"orig_name" : ["^drill$"], "tl_name" : "drill" },
{"orig_name" : ["\\.rou$","^rout$"], "tl_name" : "rout" },
{"orig_name" : "fab.art", "tl_name" : "fab.art" },
{"orig_name" : ["pcb-set\\.gdo","^pcb-set\\.pho$","^pcb-set$","^array$"], "tl_name" : "array" },
{"orig_name" : ["^outline"], "tl_name" : "outline" },
{"orig_name" : ["au_mask-bottom\\.gdo","au_mask_bottom\\.gdo","enig_top"], "tl_name" : "enig_top" },
{"orig_name" : ["au_mask-top\\.gdo","au_mask_top\\.gdo","enig_bot"], "tl_name" : "enig_bot" },
{"orig_name" : ["cavitytop","cavity_top"], "tl_name" : "cavity_top" },
{"orig_name" : ["cavitybottom","cavity_bot"], "tl_name" : "cavity_bot" },
],
"mergerule" : {
drill_second: ["(\\d+)-(\\d+)\\.drl$"],
drill: [
{orig_rule:["contournonplated"],drill_type:"non_plated",shape:"slot"},
{orig_rule:["contourplated"],drill_type:"plated",shape:"slot"},
{orig_rule:["thruholenonplated"],drill_type:"non_plated",shape:"hole"},
{orig_rule:["thruholeplated"],drill_type:"plated",shape:"hole"},
],
profile:["enig_bot","past_top"],
laser : {
tl_name: "drill($1)-($2)",
regs: ["(\\d+)-(\\d+)plated\\.ncd$","(\\d+)-(\\d+)\\.drl$"]
}
}
},
"1352":{
"step": "cad",
"rules": [
{
"valid": function(props){
var file = props.file;
return /.+\.tgz$/ig.test(file.name)
},
"type": "ODB",
"format": "ODB"
},
{
"valid": function(props){
var file = props.file;
return /.+\.ipc$/ig.test(file.name)
},
"type": "IPC356",
"format": "IPC356_1"
},
{
"valid": function(props){
var file = props.file;
return /.+\.art$/ig.test(file.name)
},
"type": "Gerber274x",
"format": "Gerber274x_5"
},
{
"valid": function(props){
var file = props.file;
return /.+\.drl$/ig.test(file.name)
},
"type": "Excellon2",
"format": "Excellon2_8"
}
],
"tl_name": [
{"orig_name" : ["pasttop\\.art","past_top"], "tl_name" : "past_top" },
{"orig_name" : ["pastbotm\\.art","past_botm"], "tl_name" : "past_botm" },
{"orig_name" : ["^silktop\\.art$","silk_top"], "tl_name" : "silk_top" },
{"orig_name" : ["^silkbotm\\.art$","silk_bot"], "tl_name" : "silk_bot" },
{"orig_name" : ["soldtop.art","sm_top"], "tl_name" : "sm_top" },
{"orig_name" : ["soldbotm\\.art","sm_bot"], "tl_name" : "sm_botm" },
{"orig_name" : ["^top$","^top.art$"], "tl_name" : "top" },
{"orig_name" : ["^pgp(\\d+)\\.art$","^art(\\d+)\\.art$","^l_(\\d+)"], "tl_name" : "l_($1)"},
{"orig_name" : ["^bot\\.art$","^bottom$","^bottom.art$"], "tl_name" : "bottom" },
{"orig_name" : ["\\.d(\\d+)$"], "tl_name" : "d_($1)-($1+1)"},
{"orig_name" : ["^drill(\\d+)-(\\d+)$","^d_(\\d+)-(\\d+)$"], "tl_name" : "d_($1)-($2)"},
{"orig_name" : ["^drill$"], "tl_name" : "drill" },
{"orig_name" : ["\\.rou$","^rout$"], "tl_name" : "rout" },
{"orig_name" : "fab.art", "tl_name" : "fab.art" },
{"orig_name" : ["multipack.art","^array$"], "tl_name" : "array" },
{"orig_name" : ["\\.bol$","PnlContourNonPlated\\.ger","^outline"], "tl_name" : "outline" },
{"orig_name" : ["top-enig","enig_top"], "tl_name" : "enig_top" },
{"orig_name" : ["bot-enig","enig_bot"], "tl_name" : "enig_bot" },
],
"mergerule" : {
drill:["(\\d+)-(\\d+)\\.drl$"],
profile:["sm_top"],
laser : {
tl_name: "drill($1)-($2)",
regs: ["(\\d+)-(\\d+)\\.drl$"]
}
}
}
},
"data_format": [
{"tl_name":"enig_top" , "new_name":"enig_top" , "attr":{ "context":"board", "type":"document" }},
{"tl_name":"past_top" , "new_name":"past_top" , "attr":{ "context":"board", "type":"solder_paste" }},
{"tl_name":"silk_top" , "new_name":"silk_top" , "attr":{ "context":"board", "type":"silk_screen" }},
{"tl_name":"sm_top" , "new_name":"sm_top" , "attr":{ "context":"board", "type":"solder_mask" }},
{"tl_name":"^top$" , "new_name":"top" , "attr":{ "context":"board", "type":"signal" }},
{"tl_name":"l_(\\d+)","new_name":"l($1)" ,"attr":{"context":"board","type":"signal"}},
{"tl_name":"^bottom$","new_name":"bottom" ,"attr":{"context":"board","type":"signal"}},
{"tl_name":"sm_botm" , "new_name":"sm_botm" , "attr":{ "context":"board", "type":"solder_mask" }},
{"tl_name":"silk_bot" , "new_name":"silk_bot" , "attr":{ "context":"board", "type":"silk_screen" }},
{"tl_name":"past_botm" , "new_name":"past_botm" , "attr":{ "context":"board", "type":"solder_paste" }},
{"tl_name":"enig_bot" , "new_name":"enig_bot" , "attr":{ "context":"board", "type":"document" }},
{"tl_name":"d_(\\d+)-(\\d+)","new_name":"ftdrill($1)-($2)l" ,"attr":{"context":"board","type":"drill"}},
{"tl_name":"drill","new_name":"ftdrill" ,"attr":{"context":"board","type":"drill"}},
{"tl_name":"rout","new_name":"rout" ,"attr":{"context":"board","type":"rout"}},
{"tl_name":"outline","new_name":"outline" ,"attr":{"context":"board","type":"rout"}},
{"tl_name":"array","new_name":"array" ,"attr":{"context":"misc"}},
{"tl_name":"cavity_top","new_name":"cavity_top" ,"attr":{"context":"misc"}},
{"tl_name":"cavity_bot","new_name":"cavity_bot" ,"attr":{"context":"misc"}},
{"tl_name":"fab.art","new_name":"fab.art" ,"attr":{"context":"misc"}}
],
"delSameJob": "yes"
}})()
\ No newline at end of file
...@@ -78,44 +78,41 @@ for(var key in default_par){ if (!par.hasOwnProperty(key) || par[key] == ""){ pa ...@@ -78,44 +78,41 @@ for(var key in default_par){ if (!par.hasOwnProperty(key) || par[key] == ""){ pa
var job = Job; var job = Job;
try { try {
if(_.isEmpty(job)){throw "参数job不存在"} else { job = job.toLowerCase() } if(_.isEmpty(job)){throw "参数job不存在"} else { job = job.toLowerCase() }
// if(!GEN.isJobExists({job:job})){throw "料号"+job+"不存在"} if(!GEN.isJobExists({job:job})){throw "料号"+job+"不存在"}
// if(!GEN.isJobOpen({job:job})){ GEN.openJob({job: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"}) } } if(mode == "aimdfm"){ if(GEN.checkInout({job:job,mode:"test"}) != 0){ throw "the job check" } else { GEN.checkInout({job:job,mode:"out"}) } }
GEN.openStep({job:job,name:"cad"})
var matrix = GEN.getMatrix({job:job})
exportInfo("getMatrix"); // 获取matrix
GEN.INFO({entity_type:'matrix', entity_path:job+'/matrix', data_type:'row', parameters:'name'});
exportInfo({matrix:Object.keys(matrix),infores: GEN.INFO_RESULT});
// var stepList = GEN.getStepList({job:job})
// stepList = stepList.filter(function(step){
// var reg = new RegExp(par.step,"ig")
// process.exec('7za', ['x' ,"/tmp/topcamtest/custom0.zip", "-o/tmp/topcamtest/custom0", "-aoa"])
// return reg.test(step)
// })
process.exec('/usr/local/lib/p7zip/7za', ['x' ,"/tmp/tmp/custom0.zip","-o/tmp/tmp/custom0","-aoa"])
// /usr/local/lib/p7zip/7za x /tmp/topcamtest/custom0.zip -o/tmp/topcamtest/custom0 -aoa
// /usr/bin/sudo -u genesis -b -s /usr/bin/id -un > /tmp/topcamtest/test.txt
// mkdir /tmp/test
// exportInfo(ret)
// /usr/bin/sudo -u genesis -b -s /usr/local/lib/p7zip/7za x /tmp/topcamtest/custom0.zip -o/tmp/topcamtest/custom0 -aoa
// sudo -u genesis -b -s /bin/csh -c "setenv DISPLAY ':0.0';cd /opt/toplinker/aimdfmserver/bin;./aimdfmserver > /dev/null"
// stepList.forEach(function(step){
// GEN.openStep({job:job,name:step});
// GEN.COM("tools_set,layer=ftdrill,slots=by_length")
// var tool = GEN.getTool({job:job,step:step,layer:"ftdrill",units:"mm"},true); // {"1":{"count":"01156","num":"1","type":"plated","min_tol":"0","max_tol":"0","finish_size":"100.31","drill_size":"100.31","slot_len":"0","type2":"standard","shape":"hole","bit":0}}
// fs.writeFile("/home/toplinker/samba/scott_test/tmp", _.toString(tool))
// })
// 保存 // 保存
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(/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") { if (mode === "aimdfm") {
$.QDfm.updateRow({table: "pdm_aimdfm_task",data: {progress: 33.33},where: { id: $.task_id }}); $.QDfm.updateRow({table: "pdm_aimdfm_task",data: {progress: 100},where: { id: $.task_id }});
if (GEN.hasError()) { Status = 'error';resultData.push({ type: "error", title: "GEN错误!", detail: [{ desc: _.join(GEN.STATUS, "\n") }] }); if (GEN.hasError()) { Status = 'error';resultData.push({ type: "error", title: "GEN错误!", detail: [{ desc: _.join(GEN.STATUS, "\n") }] });
return {status: Status,result_data: resultData}; return {status: Status,result_data: resultData};
} else { resultData.push({ type: "info", title: "操作完成, 请注意检查!" }); return {status: Status,result_data: resultData}; } } else { resultData.push({ type: "info", title: "操作完成, 请注意检查!" }); return {status: Status,result_data: resultData}; }
}else { return "Done" } }else { return "Done" }
} catch (e) { } catch (e) {
GEN.COM("disp_on")
GEN.COM("origin_on")
GEN.COM("checkin_closed_job,job="+job);
IKM.msg(_.join(GEN.STATUS, "\n"));IKM.msg(e);Status = 'error'; IKM.msg(_.join(GEN.STATUS, "\n"));IKM.msg(e);Status = 'error';
resultData.push({type: "error", title: "脚本执行出错!", detail: [{desc: _.toString(e)}]}); resultData.push({type: "error", title: "脚本执行出错!", detail: [{desc: _.toString(e)}]});
return (mode === "aimdfm") ? {status: Status, result_data: resultData} : "Error"; return (mode === "aimdfm") ? {status: Status, result_data: resultData} : "Error";
} }
function exportInfo(info){ function exportInfo(info){
fs.writeFile("/home/toplinker/samba/scott_test/tmp", _.toString(info)) fs.writeFile("/home/toplinker/samba/Test_Scott/tmp", _.toString(info))
} }
\ No newline at end of file
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