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)){
......@@ -1021,6 +1020,8 @@ try {
});
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){
......@@ -2097,21 +2111,31 @@ function analysisDrill(par, step){
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 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)
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 parseInt(a.symbol.slice(1)) - parseInt(b.symbol.slice(1))
pads = pads.sort(function (a, b) {
return a.size - b.size
})
res = pads[0].symbol.slice(1)
res = pads[0].size
}
if ( i == 0) {
drill.drl_pad_top = res
......
......@@ -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}
......@@ -307,8 +307,8 @@ try {
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 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){
// 改名
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({
......@@ -938,16 +946,19 @@ function createOutline(props){
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})
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,8 +304,14 @@ try {
gerberCfg.step = step
return gerberCfg
})
if(GEN.GEN_TYPE == "genesis"){
GEN.COM("input_manual_reset")
gerberInfo.forEach(function(v){
import_info.push({name:v.layer, type:"gerber274x", date:now(),user:$.user_name})
GEN.COM("input_manual_set",v)
GEN.COM("input_manual")
})
} else {
gerberInfo.forEach(function(v){
GEN.COM("input_result_reset,step=,category=warnings,close_tab=yes")
GEN.COM("input_create,path="+v.path)
......@@ -314,9 +324,11 @@ try {
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>"
......@@ -401,7 +413,11 @@ 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,20 +573,21 @@ 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){
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
}
zips.push(item.path)
var dir_name = item.path.replace(/\.(zip|7z|rar)$/, "");
autoUn(item.path, dir_name);
return true
}
}
return false
})
if(zipfiles.length) {decompression(path, zips)}
......@@ -598,3 +614,7 @@ function autoUn(path, dirname) {
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
......@@ -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.
/*
NAME:
DESCRIPTION: ;
PARAMETER:
[
{
name : 'step',
title : 'step',
type : 'LineEdit',
property : {tool_tip : '目标step,默认是orig'},
},
{
name : 'auto_save',
title : '自动保存',
type : 'RadioBox',
property : {
item_list:[
{name:'yes',text:'YES'},
{name:'no',text:'NO'},
],
tool_tip:'是否自动保存料号开关'
}
}
]
VERSION_HISTORY:
V1.00 2020-09-01 Scott Sun
1.新版本
HELP:
<html><body bgcolor="#DDECFE">
<font size="3" color="#003DB2"><p>功能简介</p></font>
<p> 标题 </p>
<br>
<font size="3" color="#003DB2"><p>参数配置</p></font>
<p> step信息 </p>
<br>
<font size="3" color="#003DB2"><p>注意事项</p></font>
<p> 无 </p>
<br>
</body></html>
*/
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
console.log("==============================>template");
// 引入模块 包
var $ = require('topcam.scriptfunc').argv();
var fs = require('fs');
var _ = require('lodash');
var mode = $.ikm ? "topcam" : "aimdfm";
var IKM = $.ikm;
if (IKM==undefined ) { IKM = require('topcam.ikm6')($) }
var GEN = $.gen;
var GUI = $.gui || {};
var Job = $.job || $.job_name;
var JobId = $.job_id;
var db = $.db || IKM.db
var PAR = {}
if ($.par) { PAR = $.par } else if ($.hasOwnProperty('script_parameter')){ PAR = JSON.parse($.script_parameter); }
if (mode === "aimdfm") {
var database = require("topsin.database");
database.addConnection($.conf.database_conf, "DFM");
var QDfm = database.query("DFM");
$.QDfm = QDfm;
if ($.conf.product_type == "aimdfm") {
QDfm.updateRow({ table: "pdm_aimdfm_task", data: { current_process_title: $.process_title }, where: { id: $.task_id } });
}
}
var Status = 'ok';
var resultData = [];
var par = PAR;
var default_par = {
step: "orig",
auto_save: "No",
units:"mm"
}
for(var key in default_par){ if (!par.hasOwnProperty(key) || par[key] == ""){ par[key] = default_par[key] }}
var job = Job;
try {
if(_.isEmpty(job)){throw "参数job不存在"} else { job = job.toLowerCase() }
if(!GEN.isJobExists({job:job})){throw "料号"+job+"不存在"}
if(!GEN.isJobOpen({job:job})){ GEN.openJob({job:job}) }
if(mode == "aimdfm"){ if(GEN.checkInout({job:job,mode:"test"}) != 0){ throw "the job check" } else { GEN.checkInout({job:job,mode:"out"}) } }
var stepList = GEN.getStepList({job:job})
stepList = stepList.filter(function(step){
var reg = new RegExp(par.step,"ig")
return reg.test(step)
})
GEN.PAUSE("Ok")
IKM.msg("Ok")
// 保存
if(/yes/ig.test(par.auto_save)){GEN.checkInout({job:job,mode:"out"}); GEN.saveJob({ job: job });GEN.checkInout({job:job,mode:"in"});GEN.closeJob({job:job});} else {GEN.checkInout({job:job,mode:"in"})}
if (mode === "aimdfm") {
$.QDfm.updateRow({table: "pdm_aimdfm_task",data: {progress: 33.33},where: { id: $.task_id }});
if (GEN.hasError()) { Status = 'error';resultData.push({ type: "error", title: "GEN错误!", detail: [{ desc: _.join(GEN.STATUS, "\n") }] });
return {status: Status,result_data: resultData};
} else { resultData.push({ type: "info", title: "操作完成, 请注意检查!" }); return {status: Status,result_data: resultData}; }
}else { return "Done" }
} catch (e) {
IKM.msg(_.join(GEN.STATUS, "\n"));IKM.msg(e);Status = 'error';
resultData.push({type: "error", title: "脚本执行出错!", detail: [{desc: _.toString(e)}]});
return (mode === "aimdfm") ? {status: Status, result_data: resultData} : "Error";
}
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment