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({
filter: ".*", // regular expression
selectmode: "single", // single, multiple
context: "all", // all, board, misc
layertype: "inner", // default type of layertypelist
defaultsize: [600, 400], // window size
layermatrix: {
layer1: {
......@@ -243,6 +242,7 @@ r = gui.selectLayer({
layer_type: "outer"
}
},
layertype: "inner", // default type of layertypelist
layertypelist: [
{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"; }}
......
......@@ -14,7 +14,7 @@ PARAMETER:
]
VERSION_HISTORY:
V1.00 2020-04-20 Scott Sun
V1.01 2020-04-20 Scott Sun
1.新版本
HELP:
......@@ -73,11 +73,11 @@ var Status = 'ok';
var resultData = [];
try {
console.log("=============================check in====================");
GEN.COM("open_job,job="+Job+",open_win=no,disk_map=,job_map=")
GEN.AUX("set_group,group=99")
GEN.COM("close_job,job="+Job+"")
GEN.COM("disp_on")
GEN.COM("origin_on")
// GEN.COM("open_job,job="+Job+",open_win=no,disk_map=,job_map=")
// GEN.AUX("set_group,group=99")
// GEN.COM("close_job,job="+Job+"")
// GEN.COM("disp_on")
// GEN.COM("origin_on")
GEN.COM("disp_on")
GEN.COM("origin_on")
GEN.COM("checkin_closed_job,job="+Job);
......
......@@ -108,7 +108,6 @@ var GUI = $.gui || {};
var Job = $.job || $.job_name;
var JobId = $.job_id;
var process = require('process');
var zip = require('topsin.zip');
var db = $.db || IKM.db
var PAR = {}
if ($.par) {
......@@ -168,10 +167,10 @@ if(mailUserList && mailUserList.length) {
var cam_workflow_info = IKM.get_jobinfo({jobid:JobId, jobinfo:"cam_workflow_info"});
console.log("==========cam_workflow_info===========:" + cam_workflow_info);
try {
if(cam_workflow_info && cam_workflow_info != ""){
console.log("==========cam_workflow_info===========:" + cam_workflow_info);
throw cam_workflow_info
}
// if(cam_workflow_info == "err"){ // ! tmp
// console.log("==========cam_workflow_info===========:" + cam_workflow_info);
// throw cam_workflow_info
// }
cam_workflow_info = "sendmail"
console.log("=============================================>anaysis_start");
var par = PAR;
......@@ -187,7 +186,7 @@ try {
// 检查料号是否能够check out
if(GEN.checkInout({job:job,mode:"test"}) != 0 && mode == "aimdfm"){ throw "the job check" }
GEN.checkInout({job:job,mode:"out"});
script_info({ msg: "开始分析客户料号" ,result_severity:"info"})
script_info({ msg: "Data Analysis" ,result_severity:"info"})
script_info({ progress: 65 })
var pcs_step = par.pcs_step == "" ? "cad" : par.pcs_step;
var array_step = par.array_step == "" ? "stp" : par.array_step;
......@@ -199,7 +198,7 @@ try {
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 })
var matrix = UPLOAD_LAYER_MATRIX({job:job}) // 分析matrix 获得分析后的matrix信息
GEN.openStep({job:job, name:pcs_step})
......@@ -255,7 +254,7 @@ try {
})
GEN.clearLayers()
script_info({ msg: "分析钻孔叠构" })
script_info({ msg: "Error-Drill Stackup analysis" })
script_info({ progress: 70 })
// * new 钻孔叠构
var cam_drill_structure = []
......@@ -380,7 +379,7 @@ try {
var analysis_obj = analysis({job:job,jobId:JobId,pcs_step:pcs_step,array_step:array_step,matrix:matrix})
// 创建profile
var tmp_matrix = GEN.getMatrix({job:job})
script_info({ msg: "分析profile" })
script_info({ msg: "Error-Profile analysis" })
script_info({ progress: 70 })
// * profile 和 拼版
var pandle_step = step_list.map(function(v){
......@@ -454,7 +453,7 @@ try {
}
ALL.gold_fingers = gold_fingers
GEN.closeStep()
script_info({ msg: "分析料号信息" })
script_info({ msg: "Error-PN analysis" })
var config = {
jobInfo: {
layer_count: ["signal","power_ground"], // Board属性的signal或者power_ground层
......@@ -534,7 +533,7 @@ try {
console.log("=================================> 5 save drill info")
script_info({ msg: "分析钻孔信息" })
script_info({ msg: "Error-Drill layer analysis" })
script_info({ progress: 75 })
// * 获取pcs_step 和 array_step的钻孔信息
var drill_tool_info = {};
......@@ -659,7 +658,7 @@ try {
})
console.log("=============================> 6 set smd bga")
script_info({ msg: "分析smd和bga" })
script_info({ msg: "Error-SMD&BGA analysis" })
script_info({ progress: 80 });
step_list.forEach(function(step){
GEN.openStep({job:job,name:step})
......@@ -790,7 +789,7 @@ try {
})
var info = {
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_pad2pad: ["p2p", "smd2smd", "smd2pad","via2via","bga2pad"],
min_ar_laser:["laser_via_ar"],
......@@ -810,7 +809,7 @@ try {
// jobpath = "/home/local_db/server_db/jobs/"+job
// }
mkPath(jobpath,["user","opcam","steps"])
script_info({ msg: "分析线路" })
script_info({ msg: "Error-Signal layer analysis" })
script_info({ progress: 85 })
stepList.forEach(function(step){
GEN.openStep({ job: job, name: step })
......@@ -925,6 +924,7 @@ try {
},[])[0]
return {layer:v,symbol:symbol,start:tmp_matrix[v]["drl_start"],end:tmp_matrix[v]["drl_end"]}
})
var drillRes = analysisDrill(drillToSignals,step) // 钻孔分析结果
console.log("===============drillRes:" + _.toString(drillRes));
drillRes.forEach(function(item){
......@@ -963,7 +963,7 @@ try {
if(par.erf){
tmpitem.erf = par.erf
}
script_info({ msg: "运行线路分析checklist" })
script_info({ msg: "Error-Run Checklist",result_severity:"ok" })
createChklistAndRun({ // 创建checklist并运行
layers: signalLayers,
items: [tmpitem]
......@@ -989,7 +989,6 @@ try {
GEN.closeStep()
})
mvOutProfile({job:job, step:pcs_step})
IKM.msg("end wait for save")
// 保存
if(/yes/ig.test(par.auto_save)){
......@@ -1020,7 +1019,9 @@ try {
})
});
script_info({ progress: 95 })
script_info({ progress: 95 })
script_info({ msg: "analysis done" })
// 导出
if(par.export_path != "" && par.export_mode != "" && par.export_submode != "" ){
if(fs.exists(par.export_path)){
......@@ -1080,7 +1081,11 @@ catch (e) {
GEN.COM("origin_on")
GEN.COM("checkin_closed_job,job="+Job)
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({
subject:db_customer + ' / '+Job+ " analysis error",
content:_.toString(e)
......@@ -2079,8 +2084,17 @@ function analysisChkAttr(par) {
return hash
}
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()
GEN.affectedLayer({affected:'no',mode:'all'})
var res = par.map(function(drill){
......@@ -2094,25 +2108,35 @@ function analysisDrill(par, step){
if(GEN.isLayerExists({job:job,layer:tmplayer})){GEN.deleteLayer({job:job,step:step,layer:tmplayer})}
GEN.selCopyOther({dest:"layer_name",target_layer:tmplayer})
GEN.affectedLayer({affected:"no",mode:"all"})
GEN.selClearFeature();
GEN.selClearFeature();
[drill.start,drill.end].forEach(function(item, i){
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("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.COM("filter_reset,filter_name=popup")
if(GEN.getSelectCount()>0){
var res = ""
var pads = GEN.getFeatures({job:job,step:step,layer:item,options:"select"})
if(pads && pads.length) {
pads = pads.filter(function(item){
return /^r\d+/.test(item.symbol)
})
pads = pads.sort(function(a,b){
return parseInt(a.symbol.slice(1)) - parseInt(b.symbol.slice(1))
})
res = pads[0].symbol.slice(1)
}
var res = "";
var pads = GEN.getFeatures({job:job,step:step,layer:item,options:"select"})
if (pads && pads.length) {
pads = pads.map(function (item2) {
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) {
return a.size - b.size
})
res = pads[0].size
}
if ( i == 0) {
drill.drl_pad_top = res
} else if (i==1){
......
......@@ -99,10 +99,10 @@ if(mailUserList && mailUserList.length) {
}
var cam_workflow_info = IKM.get_jobinfo({jobid:JobId, jobinfo:"cam_workflow_info"});
try {
if(cam_workflow_info && cam_workflow_info != ""){
throw cam_workflow_info
}
script_info({ msg: "料号标准化流程开始" ,result_severity:"info"})
// if(cam_workflow_info && cam_workflow_info != ""){ //! tmp
// throw cam_workflow_info
// }
script_info({ msg: "Data formatting" ,result_severity:"info"})
script_info({ progress: 35 })
var par = PAR;
if(!par.hasOwnProperty("config_path") || par.config_path==""){
......@@ -138,11 +138,11 @@ try {
if(!custCfg){throw "config error"}
// 料号验证
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" }
if(!GEN.isJobOpen({job:job})){GEN.openJob({job:job})}
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" }
console.log("Checkout====== ========================>")
GEN.checkInout({job:job,mode:"out"});
......@@ -264,7 +264,7 @@ try {
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 })
err = reName({job:job, matrix:after_sort_matrix, cfg:format_cfg})
if(err){throw err}
......@@ -306,9 +306,9 @@ try {
if(/(\d+)-(\d+)/.test(v)){
var tmp = /(\d+)-(\d+)/.exec(v)
var num1 = Number(tmp[1])
var num2 = Number(tmp[2])
var chabie = num2 - num1
if(num1 == 1 && num2 == layer_count && !hasMainDrill){
var num2 = Number(tmp[2])
var chabie = Math.abs(num2 - num1)
if(((num1 == 1 && num2 == layer_count) || num2 > layer_count) && !hasMainDrill){
GEN.renameLayer({job:job,layer:v,new_name:"ftdrill"})
if (ftdrill_layer[ftdrill_layer.length-1]!= v){
GEN.matrixMoveRow({ job:job,layer:"ftdrill",after:ftdrill_layer[ftdrill_layer.length-1] })
......@@ -316,11 +316,15 @@ try {
hasMainDrill = !hasMainDrill
} else if(chabie>1 && chabie < layer_count - 1){
// 改名
GEN.renameLayer({job:job,layer:v,new_name:v.substr(0,v.length-1)})
}
if(num1 > num2){
var tmpv = "ftdrill"+num2+"-"+num1+"l";
GEN.renameLayer({job:job,layer:v,new_name:tmpv.substr(0,v.length-1)})
} else{
GEN.renameLayer({job:job,layer:v,new_name:v.substr(0,v.length-1)})
}
}
}
})
// 设置钻孔
err = setDrill({job:job})
if(err){throw err}
......@@ -387,7 +391,7 @@ try {
GEN.closeJob({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 })
var all_layer = Object.keys(tmp_matrix)
// 没有outline层
......@@ -418,7 +422,7 @@ try {
}
var hasProfile = GEN.getProfile({job:job, step:tmp_step})
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"
db.query("",function(q){
return q.updateRow({
......@@ -432,8 +436,7 @@ try {
}
}
}
script_info({ msg: "料号标准化结束" ,result_severity:"warn"})
script_info({ msg: "Data format is done" ,result_severity:"warn"})
db.query("",function(q){
return q.updateRow({
......@@ -481,7 +484,12 @@ catch (e) {
script_info({ result_severity: "error" })
IKM.msg(_.join(GEN.STATUS, "\n"))
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()
// 发送邮件
// sendEmail({
......@@ -937,17 +945,20 @@ function createOutline(props){
GEN.deleteLayer({job:job, layer:tmp_outline2})
if(GEN.isLayerExists({job:job,layer:"outline"})){GEN.deleteLayer({job:job,layer:"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
}
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]})
return false
}
GEN.deleteLayer({job:job, layer:[tmp]})
}
function touch(layer) {
......
......@@ -91,10 +91,14 @@ var import_info = [];
var inputState = [];
var cam_workflow_info = IKM.get_jobinfo({jobid:JobId, jobinfo:"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:""}})
}
try {
script_info({ msg: "开始导入", result_severity:"info" })
script_info({ msg: "Failed to unzip the file", result_severity:"info" })
var par = PAR;
// var db_path = db.query("",function(q){
// return q.selectValue({
......@@ -105,7 +109,7 @@ try {
// });
// if(_.isEmpty(db_path)){throw "quote-data-upload error"}
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"}
if(!par.hasOwnProperty("config_path") || par.config_path==""){
console.log("===================cfg");
......@@ -123,7 +127,7 @@ try {
})
});
if(_.isEmpty(db_customer)){
script_info({ msg: "该料号客户不存在", result_severity:"error" });
script_info({ msg: "No customer was found", result_severity:"error" });
throw "customer error"}
if(db_customer && !(/^done$/ig.test(db_customer)) && db_customer != "" ){
par.customer = db_customer
......@@ -137,11 +141,11 @@ try {
})
});
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"}
var config = eval(cfg);
if(!config.hasOwnProperty("customer")){
script_info({ msg: "客户配置不存在", result_severity:"error" });
script_info({ msg: "No customer config was found", result_severity:"error" });
throw "config error"}
var job = Job;
if(_.isEmpty(job)) throw "没有传入料号名!";
......@@ -155,7 +159,7 @@ try {
// 获取路径下文件信息
var path = par.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"}
var pathInfo = fs.listDir(path + "/" + db_customer.toLowerCase(), 1)
// 判断存不存在料号文件
......@@ -172,7 +176,7 @@ try {
// }
var jobFile = pathInfo.filter(function(v){return v.baseName.toLowerCase() == job_file_baseName})
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"}
var jobFiles = [] // 记录要分析的文件
if (!jobFile[0].isDir) {
......@@ -209,7 +213,7 @@ try {
// 分析料号文件 得到料号导入信息 导入类型
var jobInfo = analyJobFiles({jobFiles:jobFiles.filter(function(v){return v.isFile}),custCfg:custCfg,config:config,job:job })
if(jobInfo.data.length == 0){
script_info({ msg: "未找到料号文件", result_severity:"error" });
script_info({ msg: "No PN file was found in folder", result_severity:"error" });
throw "file error"}
var importOk = false; // 是否成功导入
......@@ -300,23 +304,31 @@ try {
gerberCfg.step = step
return gerberCfg
})
gerberInfo.forEach(function(v){
GEN.COM("input_result_reset,step=,category=warnings,close_tab=yes")
GEN.COM("input_create,path="+v.path)
GEN.COM("input_selected_reset")
GEN.COM("input_selected_add,path="+v.path)
GEN.COM("input_identify_selected,path=,job="+job+",script_path=,gbr_ext=no,drl_ext=no,gbr_units=auto,drl_units=auto,unify=yes,break_sr=yes,gbr_wtp_filter=*,drl_wtp_filter=*,gbr_wtp_units=auto,drl_wtp_units=auto,wtp_dir=,have_wheels=yes,wheel=,gbr_consider_headlines=yes,drl_consider_headlines=yes,board_size_x=0,board_size_y=0")
if(GEN.GEN_TYPE == "genesis"){
GEN.COM("input_manual_reset")
import_info.push({name:v.layer, type:"gerber274x", date:now(),user:$.user_name})
GEN.COM("input_manual_set",v)
GEN.COM("input_manual")
})
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){
GEN.COM("input_result_reset,step=,category=warnings,close_tab=yes")
GEN.COM("input_create,path="+v.path)
GEN.COM("input_selected_reset")
GEN.COM("input_selected_add,path="+v.path)
GEN.COM("input_identify_selected,path=,job="+job+",script_path=,gbr_ext=no,drl_ext=no,gbr_units=auto,drl_units=auto,unify=yes,break_sr=yes,gbr_wtp_filter=*,drl_wtp_filter=*,gbr_wtp_units=auto,drl_wtp_units=auto,wtp_dir=,have_wheels=yes,wheel=,gbr_consider_headlines=yes,drl_consider_headlines=yes,board_size_x=0,board_size_y=0")
GEN.COM("input_manual_reset")
import_info.push({name:v.layer, type:"gerber274x", date:now(),user:$.user_name})
GEN.COM("input_manual_set",v)
GEN.COM("input_manual")
})
}
importOk = true
}
if(!importOk){ script_info({ msg: "导入错误",result_severity:"error" }); throw "import error"}
if(!importOk){ throw "import error"}
script_info({ progress: 20 })
reNameStep(job)
if(/2171/.test(par.customer)){
......@@ -331,12 +343,12 @@ try {
// GEN.closeStep()
// }
} else if ((/yucca/ig.test(par.customer))) {
var matrix = GEN.getMatrix({job:job,type:"array"})
matrix.layer_type.forEach(function(v, i){
if( v == "document") {
GEN.COM("matrix_layer_type,job="+job+",matrix=matrix,layer="+matrix.name[i]+",type=signal")
}
})
// var matrix = GEN.getMatrix({job:job,type:"array"})
// matrix.layer_type.forEach(function(v, i){
// if( v == "document") {
// GEN.COM("matrix_layer_type,job="+job+",matrix=matrix,layer="+matrix.name[i]+",type=signal")
// }
// })
}
var steplist = GEN.getStepList({job:job})
GEN.openStep({job:job,name:steplist[0]})
......@@ -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>"
import_info.forEach(function(item){
var name = item.name
var type = item.type
var date = item.date
var user = item.user
var name = item.name;
var type = item.type;
var date = item.date;
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 += "</table>"
......@@ -400,8 +412,12 @@ try {
}
catch (e) {
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(e)
......@@ -429,20 +445,19 @@ function analyJobFiles(props){
var job = props.job;
var custCfg = props.custCfg;
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 = {}
paramsFile.forEach(function(file){
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 = {}
tmparr.map(function(v){
var arr = v.split(/\b\s+\b/)
tmp[arr[0].replace(/-/ig,"_")] = arr[1]
tmp[arr[0].replace(/-/ig,"_").trim()] = arr[1]
})
return tmp
})()
})
var fileInfo = files.reduce(function(a,file){
try {
rules.forEach(function(item){
......@@ -558,19 +573,20 @@ function decompression(path, zips) {
var count = 0;
var zipfiles = files.filter(function(item){
if (item.suffix == "zip" || item.suffix == "rar" || item.suffix == "7z") {
inputState.push(item.suffix)
}
if(/zip|rar|7z/.test(item.suffix) && zips.indexOf(item.path) < 0){
if(item.name.length >= 20) {
var mvname = "custom" + count + "." + item.suffix;
count++
fs.rename(item.path, item.dir + "/" + mvname)
item.path = item.dir + "/" + mvname
inputState.push(item.suffix);
console.log("--->path:" + item.path)
if(zips.indexOf(item.path) < 0){
zips.push(item.path)
if(item.name.length >= 20) {
var mvname = "custom" + count + "." + item.suffix;
count++
fs.rename(item.path, item.dir + "/" + mvname)
item.path = item.dir + "/" + mvname
}
var dir_name = item.path.replace(/\.(zip|7z|rar)$/, "");
autoUn(item.path, dir_name);
return true
}
zips.push(item.path)
var dir_name = item.path.replace(/\.(zip|7z|rar)$/, "");
autoUn(item.path, dir_name);
return true
}
return false
})
......@@ -597,4 +613,8 @@ function autoUn(path, dirname) {
} else {
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 @@
{
"valid": function(props){
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",
"format": "Gerber274x_2",
......@@ -599,16 +599,16 @@
"tl_name": [
{"orig_name" : ["^comp_+_top$"], "tl_name" : "comp_+_top" },
{"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_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" : ["silk.pri","pleg\\.art|sst\\.art","^ss_top","silk_top"], "tl_name" : "silk_top" },
{"orig_name" : ["silk.sec","sleg\\.art|ssb\\.art","^ss_bot","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" : ["\\.sb$|\\.bsm$|soldermask_bottom","mask.bot\\.art|smb\\.art","mask.sec\\.art","ssm\\.art","sm_bot"], "tl_name" : "sm_botm" },
{"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","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|sscs\\.gbr$","silk_top"], "tl_name" : "silk_top" },
{"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|smcs\\.gbr$","psm\\.art","sm_top"], "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" : ["^(?:(?!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" : ["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" : ["\\.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" },
......@@ -710,7 +710,7 @@
{
"valid": function(props){
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)
},
"type": "Gerber274x",
......@@ -833,9 +833,9 @@
{"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" : ["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" : ["^(?:(?!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+)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" },
......@@ -982,7 +982,7 @@
{"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" : ["^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" : ["\\.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)"},
......
......@@ -188,9 +188,9 @@
},
"Excellon2_4": {
"nf1": 2,
"nf2": 3,
"units": "mm",
"zeroes": "leading",
"nf2": 4,
"units": "inch",
"zeroes": "trailing",
"decimal": "no",
"nf_comp": 0,
"break_sr": "yes",
......@@ -200,7 +200,7 @@
"drill_only": "no",
"multiplier": 1,
"resolution": 3,
"tool_units": "mm",
"tool_units": "inch",
"coordinates": "absolute",
"merge_by_rule": "no",
"signed_coords": "no",
......@@ -286,6 +286,26 @@
"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,
......@@ -787,7 +807,7 @@
{
"valid": function(props){
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)
},
"type": "Gerber274x",
......@@ -902,15 +922,15 @@
}
],
"tl_name": [
{"orig_name" : ["^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" : ["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" : ["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" : ["^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" : ["^bot\\.art$","^bottom$","^bottom.art$"], "tl_name" : "bottom" },
{"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" },
......@@ -918,9 +938,12 @@
{"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" : ["top-enig","enig_top"], "tl_name" : "enig_top" },
{"orig_name" : ["bot-enig","enig_bot"], "tl_name" : "enig_bot" },
]
{"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",
......@@ -957,6 +980,14 @@
"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;
......@@ -971,8 +1002,8 @@
{"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" : ["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" : ["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" },
......
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{
###Open step and clear layer
$GEN->openStep(job=>$Job,name=>$Step);
$GEN->COM("disp_off");
$GEN->clearLayers();
$GEN->affectedLayer(mode=>'all',affected=>'no');
$GEN->units(type=>'inch');
......@@ -979,6 +978,8 @@ try{
$KeepGasket = $info{keep_gasket};
$UpdateMaxOpening = $info{update_max_opening};
$GUI->msgbox(-text=>"start"); #? tmp
%tmp = reverse %tmp;
foreach my $layer (keys %tmp) {
my $ref_layer = $tmp{$layer}.'_ref';
......@@ -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=>$layer,dest_layer=>$layer.$BakSuffix);
$GEN->workLayer(name=>$tmp{$layer},number=>1);
$GEN->PAUSE($layer); #? tmp
$GEN->selectByFilter(attribute=>[{attribute=>'.string',text=>'sm_defined_pad_shave'}]);
$GEN->selDelete() if ( $GEN->getSelectCount() > 0 );
##移除via
......@@ -1013,7 +1014,7 @@ try{
$GEN->selDelete() if ( $GEN->getSelectCount() > 0 );
_deleteLayer(layer=>[$tmp{$layer}.$SpecificalWarningSuffix]);
$GEN->PAUSE(1); #? tmp
foreach my $item ('smd','bga','pth','via','pad') {#'smd','bga','pth','via','pad'
next unless ( defined $info{$item} and $info{$item} eq 'Yes' );
my $Coverage_tmp = $Coverage;
......@@ -1153,7 +1154,6 @@ try{
_deleteLayer(layer=>[$include_pad_lyr]);
}
}
$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->selectByFilter();
......@@ -1469,6 +1469,7 @@ try{
);
$GEN->selDelete() if ( $GEN->getSelectCount() > 0 );
}
$GEN->PAUSE(3); #? tmp
####制作碰到大铜面的pad所对应的开窗到临时层pad_opening
......@@ -1628,7 +1629,7 @@ try{
}
_deleteLayer(layer=>[$TmpLayer{tmp_layer}]);
###制作正式层上开窗比pad小的情况
if ( $GEN->isLayerExists(job=>$Job,layer=>$TmpLayer{sm_less_pad}) and $PAR->{make_sm_less_pad} eq 'Yes') {
$GEN->workLayer(name=>$tmp{$layer},number=>1);
......@@ -1684,7 +1685,6 @@ try{
_deleteLayer(layer=>[$TmpLayer{tmp_layer}]);
}
}
####gaster 制作(copy 外层pad加大(gasketsize+$CopperOpening)*2 到当前层为surface)
$GEN->workLayer(name=>$TmpLayer{pad_touch_copper},number=>1);
$GEN->selRefFeat(
......@@ -1707,7 +1707,7 @@ try{
_deleteLayer(layer=>[$TmpLayer{tmp_layer}]);
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->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->selCopyOther(target_layer=>$layer);
$GEN->selCopyOther(target_layer=>$TmpLayer{big_copper_layer});
......@@ -1857,7 +1857,6 @@ try{
}
$GEN->COM('sel_resize',size=>$Coverage_tmp+$CoverageTol_tmp,corner_ctl=>'no');
####制作准确的大铜面pad开窗到临时层 correct_sm_opening
$GEN->workLayer(name=>$TmpLayer{pad_opening},number=>1);
$GEN->selCopyOther(target_layer=>$TmpLayer{correct_sm_opening},size=>2);
......@@ -1881,7 +1880,6 @@ try{
mode=>'disjoint'
);
$GEN->selDelete() if ( $GEN->getSelectCount() > 0 );
####制作需要刮开的开窗部分
$GEN->workLayer(name=>$TmpLayer{pad_opening},number=>1);
$GEN->selCopyOther(target_layer=>$TmpLayer{sm_opening_free},size=>1);
......@@ -2118,8 +2116,6 @@ try{
$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}]);
......@@ -2181,24 +2177,20 @@ try{
###output and return status, if genesis error, it will output genesis error command
unless ($GEN->{STATUS}){
$GEN->COM("disp_on");
return $Return;
}
else{
$GEN->COM("disp_on");
$GUI->msgbox(-icon=>'error',-text=>join("\n",@{$GEN->{STATUS}}));
#addFlowNotes(-notes=>" Genesis Error:\n ".join("\n ",@{$GEN->{STATUS}}));
return 'Error';
}
}
catch Error::Simple with {
$GEN->COM("disp_on");
my $error = encode("utf8",shift);
$GUI->msgbox(-icon=>'error',-text=>$error);
return 'Error';
}
finally{
$GEN->COM("disp_on");
_deleteLayer(layer=>[values %TmpLayer]);
};
......
/*
NAME:
DESCRIPTION: ;
PARAMETER:
[
{
name : 'step',
title : 'step',
type : 'LineEdit',
property : {tool_tip : '目标step,默认是orig'},
},
{
name : 'export_path',
title : 'export_path',
type : 'LineEdit',
property : {tool_tip : '目标step,默认是orig'},
},
{
name : 'auto_save',
title : '自动保存',
type : 'RadioBox',
property : {
item_list:[
{name:'yes',text:'YES'},
{name:'no',text:'NO'},
],
tool_tip:'是否自动保存料号开关'
}
}
]
VERSION_HISTORY:
V1.00 2020-09-01 Scott Sun
1.新版本
HELP:
<html><body bgcolor="#DDECFE">
<font size="3" color="#003DB2"><p>功能简介</p></font>
<p> 标题 </p>
<br>
<font size="3" color="#003DB2"><p>参数配置</p></font>
<p> step信息 </p>
<br>
<font size="3" color="#003DB2"><p>注意事项</p></font>
<p> 无 </p>
<br>
</body></html>
*/
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
console.log("==============================>template");
// 引入模块 包
var $ = require('topcam.scriptfunc').argv();
var fs = require('fs');
var _ = require('lodash');
var mode = $.ikm ? "topcam" : "aimdfm";
var IKM = $.ikm;
if (IKM==undefined ) { IKM = require('topcam.ikm6')($) }
var GEN = $.gen;
var GUI = $.gui || {};
var Job = $.job || $.job_name;
var JobId = $.job_id;
var db = $.db || IKM.db
var PAR = {}
if ($.par) { PAR = $.par } else if ($.hasOwnProperty('script_parameter')){ PAR = JSON.parse($.script_parameter); }
if (mode === "aimdfm") {
var database = require("topsin.database");
database.addConnection($.conf.database_conf, "DFM");
var QDfm = database.query("DFM");
$.QDfm = QDfm;
if ($.conf.product_type == "aimdfm") {
QDfm.updateRow({ table: "pdm_aimdfm_task", data: { current_process_title: $.process_title }, where: { id: $.task_id } });
}
}
var Status = 'ok';
var resultData = [];
var par = PAR;
var default_par = {
step: "edit",
export_path:"C:/Users/ADMINI~1/Desktop/jobs/demo",
auto_save: "No",
units:"mm"
}
for(var key in default_par){ if (!par.hasOwnProperty(key) || par[key] == ""){ par[key] = default_par[key] }}
var job = Job;
try {
if(_.isEmpty(job)){throw "参数job不存在"} else { job = job.toLowerCase() }
if(!GEN.isJobExists({job:job})){throw "料号"+job+"不存在"}
if(!GEN.isJobOpen({job:job})){ GEN.openJob({job:job}) }
if(mode == "aimdfm"){ if(GEN.checkInout({job:job,mode:"test"}) != 0){ throw "the job check" } else { GEN.checkInout({job:job,mode:"out"}) } }
var stepList = GEN.getStepList({job:job})
stepList = stepList.filter(function(step){
var reg = new RegExp(par.step,"ig")
return reg.test(step)
})
var matrix = GEN.getMatrix({job:job});
stepList.forEach(function(step){
var excellon = [];
var gerber = [];
fs.mkdir(par.export_path + "/" + step)
for (var key in matrix) {
var info = matrix[key];
if(!GEN.isLayerEmpty({job:job,step:step,layer:key})){
if(info.layer_type == "drill"){
excellon.push(key)
} else {
gerber.push(key)
}
}
}
if(gerber.length){
GEN.COM("output_layer_reset")
gerber.forEach(function(v){
GEN.COM("output_layer_set,layer="+v+",angle=0,mirror=no,x_scale=1,y_scale=1,comp=0,polarity=positive,setupfile=,setupfiletmp=,line_units=inch,gscl_file=,step_scale=no")
})
GEN.COM("output,job="+job+",step="+step+",format=Gerber274x,dir_path="+par.export_path + "/" + step+",prefix=,suffix=.art,break_sr=yes,break_symbols=no,break_arc=no,scale_mode=all,surface_mode=fill,min_brush=1,units=inch,coordinates=absolute,zeroes=none,nf1=2,nf2=4,x_anchor=0,y_anchor=0,wheel=,x_offset=0,y_offset=0,line_units=inch,override_online=yes,film_size_cross_scan=0,film_size_along_scan=0,ds_model=RG6500")
}
if(excellon.length){
GEN.COM("output_layer_reset")
excellon.forEach(function(v){
GEN.COM("output_layer_set,layer="+v+",angle=0,mirror=no,x_scale=1,y_scale=1,comp=0,polarity=positive,setupfile=,setupfiletmp=,line_units=inch,gscl_file=,step_scale=no")
})
GEN.COM("output,job="+job+",step="+step+",format=Excellon2,dir_path="+par.export_path + "/" + step+",prefix=,suffix=.drill,break_sr=yes,break_symbols=yes,break_arc=no,scale_mode=all,surface_mode=fill,min_brush=1,units=inch,coordinates=absolute,decimal=no,zeroes=none,nf1=2,nf2=4,modal=yes,tool_units=inch,optimize=no,iterations=5,reduction_percent=1,cool_spread=0,x_anchor=0,y_anchor=0,x_offset=0,y_offset=0,line_units=inch,override_online=yes,canned_text_mode=break")
excellon.forEach(function(v){
GEN.COM("ncset_create,name=_1_tmp__+++_")
GEN.COM("ncset_cur,job="+job+",step="+step+",layer="+v+",ncset=")
})
}
})
// 保存
if(/yes/ig.test(par.auto_save)){GEN.checkInout({job:job,mode:"out"}); GEN.saveJob({ job: job });GEN.checkInout({job:job,mode:"in"});GEN.closeJob({job:job});} else {GEN.checkInout({job:job,mode:"in"})}
if (mode === "aimdfm") {
$.QDfm.updateRow({table: "pdm_aimdfm_task",data: {progress: 33.33},where: { id: $.task_id }});
if (GEN.hasError()) { Status = 'error';resultData.push({ type: "error", title: "GEN错误!", detail: [{ desc: _.join(GEN.STATUS, "\n") }] });
return {status: Status,result_data: resultData};
} else { resultData.push({ type: "info", title: "操作完成, 请注意检查!" }); return {status: Status,result_data: resultData}; }
}else { return "Done" }
} catch (e) {
IKM.msg(_.join(GEN.STATUS, "\n"));IKM.msg(e);Status = 'error';
resultData.push({type: "error", title: "脚本执行出错!", detail: [{desc: _.toString(e)}]});
return (mode === "aimdfm") ? {status: Status, result_data: resultData} : "Error";
}
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment