Commit 59930434 authored by Scott Sun's avatar Scott Sun

s

parent 904c607d
...@@ -74,6 +74,7 @@ var db = $.db; ...@@ -74,6 +74,7 @@ var db = $.db;
var Status = 'ok'; var Status = 'ok';
var resultData = []; var resultData = [];
var PAR = {}; var PAR = {};
var ALL = {}
if ($.hasOwnProperty('script_parameter')){ if ($.hasOwnProperty('script_parameter')){
PAR = JSON.parse($.script_parameter); PAR = JSON.parse($.script_parameter);
} }
...@@ -157,6 +158,15 @@ try { ...@@ -157,6 +158,15 @@ try {
} }
} }
// glod_finger
var gold_fingers = Object.keys(tmp_matrix).filter(function(v){return /^top_enig$|^bot_enig$/ig.test(v)})
if(gold_fingers.length){
gold_fingers = gold_fingers.map(function(v){
var type = (v=="top_enig") ? "top" : "bot"
return {name:v, type:type}
})
}
ALL.gold_fingers = gold_fingers
GEN.closeStep() GEN.closeStep()
var config = { var config = {
jobInfo: { jobInfo: {
...@@ -174,13 +184,13 @@ try { ...@@ -174,13 +184,13 @@ try {
milling_bit_size: true, // todo 检查array中pcs的最小间距值 milling_bit_size: true, // todo 检查array中pcs的最小间距值
milling_length: true, // todo 检查array中铣切长度 milling_length: true, // todo 检查array中铣切长度
vc_src_01005_pad_result: {api:"board_has_attr", props:"01005_pad"}, vc_src_01005_pad_result: {api:"board_has_attr", props:"01005_pad"},
vc_src_EDGE_PLATING: {api:"layer_exist2", props:["fab_page2"]}, // fab_page2
ATS_technology_25dc: {api:"layer_exist", props:["bend","top_coverlay"]}, // yes|no:存在cavity层别时存yes ATS_technology_25dc: {api:"layer_exist", props:["bend","top_coverlay"]}, // yes|no:存在cavity层别时存yes
ATS_technology_25dr: {api:"layer_exist", props:"nclegend-1-2"}, // yes|no:存在cavity层别时存yes ATS_technology_25dr: {api:"layer_exist", props:"nclegend-1-2"}, // yes|no:存在cavity层别时存yes
vc_src_EDGE_PLATING: true, // yes|no:检查线路外形是否存在物件,存在则存yes // !料号需要有rout层 // vc_src_EDGE_PLATING: true, // yes|no:检查线路外形是否存在物件,存在则存yes // !料号需要有rout层
vc_src_EDGE_PLATING: {api:"layer_exist2", props:["fab_page2"]}, // fab_page2
edge_plating_length: true, // todo 检查线路外形处物件的长度 edge_plating_length: true, // todo 检查线路外形处物件的长度
glod_finger: true, // todo yes|no:暂无逻辑 gold_finger: true, //
glod_finger_area: true, // todo 暂无逻辑 glod_finger_area: true, //
ATS_sm_side: true, // top|bot|both:检查防焊层所在面次 ATS_sm_side ATS_sm_side: true, // top|bot|both:检查防焊层所在面次 ATS_sm_side
vc_id_print_side: true, // top|bot|both:检查文字层所在面次 vc_id_print_side vc_id_print_side: true, // top|bot|both:检查文字层所在面次 vc_id_print_side
min_drl_size: true, // todo 0.5mm 最小圆孔 min_drl_size: true, // todo 0.5mm 最小圆孔
...@@ -426,8 +436,30 @@ try { ...@@ -426,8 +436,30 @@ try {
}) })
stepList.forEach(function(step){ stepList.forEach(function(step){
GEN.openStep({ job: job, name: step }) GEN.openStep({ job: job, name: step })
// 曝光 // 曝光
analysis_obj.matrixInfo.mOuters.forEach(function(item){ analysis_obj.matrixInfo.mOuters.forEach(function(item){
if(ALL.gold_fingers.length>0){
var tmp_gold_info = {}
ALL.gold_fingers.forEach(function(item2){
tmp_gold_info[item2.type] = item2.name
})
var layer_gold_type = /top/ig.test(item.signalL) ? "top" : "bot"
if(tmp_gold_info[layer_gold_type]){
var tmp_info = GEN.exposedArea({layer1:item.signalL,mask1:tmp_gold_info[layer_gold_type]})
// console.log(_.toString({
// ref_layer: tmp_gold_info[item.type],
// exposed_area: tmp_info
// }));
save_layerinfo({
jobid: JobId,
layer: item.signalL,
layerinfohash: {
sf_area_gold_area: tmp_info.percent
}
})
}
}
if(item.solderL){ if(item.solderL){
var tmp_info = GEN.exposedArea({layer1:item.signalL,mask1:item.solderL}) var tmp_info = GEN.exposedArea({layer1:item.signalL,mask1:item.solderL})
// {"area":"0.73817","percent":"8.986"} // {"area":"0.73817","percent":"8.986"}
...@@ -948,9 +980,9 @@ function analysis(props){ ...@@ -948,9 +980,9 @@ function analysis(props){
T_m_p.prototype.analysis_layer_exist2 = function(props){ // 存在某某层? string T_m_p.prototype.analysis_layer_exist2 = function(props){ // 存在某某层? string
var layers = Object.keys(this.matrixInfo.matrix) var layers = Object.keys(this.matrixInfo.matrix)
if(/string/ig.test(typeof(props))){ if(/string/ig.test(typeof(props))){
return layers.indexOf(props) >= 0 ? "yes" : "unknow" return layers.indexOf(props) >= 0 ? "yes" : "no"
} else { } else {
var res = "unknow" var res = "no"
props.forEach(function(v){ props.forEach(function(v){
if(layers.indexOf(v)>=0){ if(layers.indexOf(v)>=0){
res = "yes" res = "yes"
...@@ -1054,10 +1086,28 @@ function analysis(props){ ...@@ -1054,10 +1086,28 @@ function analysis(props){
T_m_p.prototype.analysis_edge_plating_length = function(){ // todo T_m_p.prototype.analysis_edge_plating_length = function(){ // todo
return "_todo" return "_todo"
} }
T_m_p.prototype.analysis_glod_finger = function(){ // todo T_m_p.prototype.analysis_gold_finger = function(){ //
return "_todo" if(!ALL.gold_fingers){return "no"}
return ALL.gold_fingers.length > 0 ? "yes" : "no"
} }
T_m_p.prototype.analysis_glod_finger_area = function(){ // todo T_m_p.prototype.analysis_glod_finger_area = function(){ //
if(ALL.gold_fingers.length > 0){
GEN.openStep({job:this.job, name:this.pcs_step})
var gold_finger_area = {}
var res = 0;
ALL.gold_fingers.forEach(function(item){
var tmp = GEN.copperArea({layer1:item.name}).percent
res += Number(tmp)
// var tmp = GEN.copperArea({layer1:item.name}).percent + "%"
// var key = item.type == "top" ? "sf_area_gold_area_front" : "sf_area_gold_area_back"
// gold_finger_area[key] = tmp
})
GEN.closeStep()
if(res){
return String(res.toFixed(4)) + "%"
}
}
return "_todo" return "_todo"
} }
T_m_p.prototype.analysis_ATS_sm_side = function(){ // 检查防焊层所在面次 T_m_p.prototype.analysis_ATS_sm_side = function(){ // 检查防焊层所在面次
......
...@@ -9,21 +9,14 @@ PARAMETER: ...@@ -9,21 +9,14 @@ PARAMETER:
name : 'path', name : 'path',
title : '资料路径', title : '资料路径',
type : 'LineEdit', type : 'LineEdit',
property : {tool_tip : '存放所有料号的文件夹路径,不需要进入到料号文件夹内'}, property : {tool_tip : '资料路径,必填'},
}, },
{ {
name : 'customer', name : 'db',
title : '客户配置', title : '料号db',
type : 'RadioBox', type : 'LineEdit',
property : { property : {tool_tip : '料号db,默认是genesis'},
item_list:[ },
{name:'customer_1',text:'customer_1'},
{name:'customer_2',text:'customer_2'},
{name:'new_data',text:'new_data'},
],
tool_tip:'客户代码'
}
},
{ {
name : 'config_path', name : 'config_path',
title : '配置地址', title : '配置地址',
...@@ -33,7 +26,7 @@ PARAMETER: ...@@ -33,7 +26,7 @@ PARAMETER:
] ]
VERSION_HISTORY: VERSION_HISTORY:
V1.00 2020-04-15 Scott Sun V1.00 2020-04-20 Scott Sun
1.新版本 1.新版本
HELP: HELP:
...@@ -54,6 +47,8 @@ PARAMETER: ...@@ -54,6 +47,8 @@ PARAMETER:
// 引入模块 包 // 引入模块 包
console.log("=============================================>input_start"); console.log("=============================================>input_start");
console.log("=============================================>input_start"); console.log("=============================================>input_start");
console.log("=============================================>input_start");
console.log("=============================================>input_start");
var $ = require('topcam.scriptfunc').argv(); var $ = require('topcam.scriptfunc').argv();
var fs = require('fs'); var fs = require('fs');
var _ = require('lodash'); var _ = require('lodash');
...@@ -71,6 +66,7 @@ if ($.conf.product_type == "aimdfm") { ...@@ -71,6 +66,7 @@ if ($.conf.product_type == "aimdfm") {
} }
var GEN = $.gen; var GEN = $.gen;
var Job = $.job_name; var Job = $.job_name;
var JobId = $.job_id;
var db = $.db; var db = $.db;
var Status = 'ok'; var Status = 'ok';
var resultData = []; var resultData = [];
...@@ -78,12 +74,36 @@ var PAR = {}; ...@@ -78,12 +74,36 @@ var PAR = {};
if ($.hasOwnProperty('script_parameter')){ if ($.hasOwnProperty('script_parameter')){
PAR = JSON.parse($.script_parameter); PAR = JSON.parse($.script_parameter);
} }
try { try {
var par = PAR; var par = PAR;
if(!par.hasOwnProperty("customer")){throw "未填写配置"}; // var db_path = db.query("",function(q){
if(!par.hasOwnProperty("config_path")){par.config_path = "cam/input_data"}; // return q.selectValue({
// table:'pub_conf',
// field:'text_data',
// where:{path : "quote-data-upload"}
// })
// });
// if(_.isEmpty(db_path)){throw "quote-data-upload error"}
if(!par.path || par.path == "") {throw "path error"}
if(!par.hasOwnProperty("config_path") || par.config_path==""){
console.log("========================cfg");
par.config_path = "cam/input_data"
};
if(!par.hasOwnProperty("db") || par.db==""){
console.log("========================db");
par.db = "genesis"
};
var db_customer = db.query("",function(q){
return q.selectValue({
table:'pdm_job',
field:'customer_code',
where:{id : JobId}
})
});
if(_.isEmpty(db_customer)){throw "customer error"}
if(db_customer && !(/^done$/ig.test(db_customer)) && db_customer != "" ){
par.customer = db_customer
}
par.customer = par.customer[0].toUpperCase()+par.customer.slice(1).toLowerCase() par.customer = par.customer[0].toUpperCase()+par.customer.slice(1).toLowerCase()
var cfg = db.query("",function(q){ var cfg = db.query("",function(q){
return q.selectValue({ return q.selectValue({
...@@ -92,9 +112,7 @@ try { ...@@ -92,9 +112,7 @@ try {
where:{path : par.config_path} where:{path : par.config_path}
}) })
}); });
if (!cfg || cfg == ""){throw "cfg can not find"} if (!cfg || cfg == ""){throw "cfg can not find"}
var config = eval(cfg); var config = eval(cfg);
if(!config.hasOwnProperty("customer")){throw "config error"} if(!config.hasOwnProperty("customer")){throw "config error"}
var job = Job; var job = Job;
...@@ -103,13 +121,27 @@ try { ...@@ -103,13 +121,27 @@ try {
// 如果genesis已经存在这个料号 // 如果genesis已经存在这个料号
err = delSameJob({job:job,delSame:config.delSameJob}); if(err){throw err}; err = delSameJob({job:job,delSame:config.delSameJob}); if(err){throw err};
var custCfg = config.customer[par.customer] var custCfg = config.customer[par.customer]
if(!custCfg){throw "config error"} if(!custCfg){throw "customer config error:"+par.customer}
custCfg.db = par.db || custCfg.db
var step = custCfg.step.toLowerCase() var step = custCfg.step.toLowerCase()
// 获取路径下文件信息 // 获取路径下文件信息
var path = par.path || custCfg.path var path = par.path
var pathInfo = fs.listDir(path, 1) console.log("========= ====>path:"+ path)
if(!fs.exists(path)){throw "path error"}
var pathInfo = fs.listDir(path + "/" + db_customer.toLowerCase(), 1)
// 判断存不存在料号文件 // 判断存不存在料号文件
var jobFile = pathInfo.filter(function(v){return v.baseName.toLowerCase() == job}) var vc_position = db.query("",function(q){
return q.selectValue({
table:'pdm_job',
field:'version',
where:{id : JobId}
})
});
var job_file_baseName = job
if(vc_position && vc_position != "" && !(/null/ig.test(vc_position))){
job_file_baseName = job_file_baseName + "_" + vc_position
}
var jobFile = pathInfo.filter(function(v){return v.baseName.toLowerCase() == job_file_baseName})
if(jobFile.length == 0){throw "job file is not exist"} if(jobFile.length == 0){throw "job file is not exist"}
var jobFiles = [] // 记录要分析的文件 var jobFiles = [] // 记录要分析的文件
if (!jobFile[0].isDir) { if (!jobFile[0].isDir) {
...@@ -126,27 +158,36 @@ try { ...@@ -126,27 +158,36 @@ try {
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)
if(err){throw err} if(err){throw err}
} else { // 多个tgz文件 说明需要合并 } else { // 多个tgz文件 说明需要合并
var mergeFiles = jobInfo.data.filter(function(item){ console.log("==========合并的情况");
var err = importJob({name:item.file.baseName,db:custCfg.db,path:item.file.path},config.delSameJob) var jobs = jobInfo.data.map(function(item, i){
var err = importJob({name:job + "_tmp_" + i,db:custCfg.db,path:item.file.path},config.delSameJob)
if(err){throw err} if(err){throw err}
return /yes/ig.test(item.format.isMerge) return job + "_tmp_" + i
})
// 分析arr_job 和 pcs_job
jobs = jobs.map(function(jobname){
GEN.openJob({job:jobname});
var step_tmp = GEN.getStepList({job:jobname})[0]
var type = getStepType(step_tmp)
return {
jobname: jobname,
stepname: step_tmp,
type: type
}
}) })
var arr_job = mergeFiles[0]
var arr_step; var pcs_job = jobs.filter(function(v){return v.type == "pcs"})[0]
var steplist = GEN.getStepList({job:arr_job.file.baseName}) var arr_job = jobs.filter(function(v){return v.type == "arr"})[0]
if(steplist.indexOf(arr_job.format.arrStep) < 0){
arr_step = steplist[0]
}else{arr_step = arr_job.format.arrStep}
GEN.openJob({job:job});
GEN.openJob({job:arr_job.file.baseName});
GEN.copyStep({ // 合并 GEN.copyStep({ // 合并
source_job:arr_job.file.baseName, source_job:arr_job.jobname,
source_name:arr_step, source_name:arr_job.stepname,
dest_job:job, dest_job:pcs_job.jobname,
dest_name:arr_step, dest_name:arr_job.stepname,
}); });
GEN.closeJob({ job: arr_job.file.baseName }); GEN.closeJob({ job: arr_job.jobname });
GEN.deleteJob({ job: arr_job.file.baseName }); // 合并后 删除array的料号 GEN.deleteJob({ job: arr_job.jobname }); // 合并后 删除array的料号
// 修改pcs料号名称
GEN.COM("rename_entity,job=,is_fw=no,type=job,fw_type=form,name="+pcs_job.jobname+",new_name="+job)
} }
importOk = true importOk = true
} }
...@@ -175,7 +216,7 @@ try { ...@@ -175,7 +216,7 @@ try {
if(!importOk){throw "import error"} if(!importOk){throw "import error"}
// 导入结束 // 导入结束
var matrix = GEN.getMatrix({job:job}); var matrix = GEN.getMatrix({job:job});
comp = Object.keys(matrix).filter(function(v){ // 如果有comp层 删除 comp = Object.keys(matrix).filter(function(v){ // 如果有comp层 删除
return /^comp_\+_/ig.test(v) return /^comp_\+_/ig.test(v)
}) })
...@@ -224,7 +265,9 @@ catch (e) { ...@@ -224,7 +265,9 @@ catch (e) {
function delSameJob(props){ function delSameJob(props){
var job = props.job var job = props.job
var delSame = props.delSame var delSame = props.delSame
console.log("======================>delsame:"+ delSame);
if(GEN.isJobExists({job:job})){ if(GEN.isJobExists({job:job})){
if(/^yes$/ig.test(delSame)){ if(/^yes$/ig.test(delSame)){
if(GEN.isJobOpen({job:job})){ GEN.closeJob({job:job}) } if(GEN.isJobOpen({job:job})){ GEN.closeJob({job:job}) }
...@@ -302,4 +345,12 @@ function importJob(props,delSameJob){ ...@@ -302,4 +345,12 @@ function importJob(props,delSameJob){
GEN.importJob(props); GEN.importJob(props);
} }
function getStepType(step){
if(/pcs|cad|orig/ig.test(step)){
return "pcs"
}
if(/stp|arr/ig.test(step)){
return "arr"
}
return pcs
}
...@@ -62,7 +62,7 @@ try { ...@@ -62,7 +62,7 @@ try {
var mode = "use" // develop var mode = "use" // develop
var par = PAR; var par = PAR;
if(!par.hasOwnProperty("config_path") || par.config_path==""){ if(!par.hasOwnProperty("config_path") || par.config_path==""){
console.log("========================cfg"); console.log("==============cfg");
par.config_path = "cam/input_data" par.config_path = "cam/input_data"
}; };
var db_customer = db.query("",function(q){ var db_customer = db.query("",function(q){
...@@ -92,7 +92,6 @@ try { ...@@ -92,7 +92,6 @@ try {
var custCfg = config.customer[par.customer] // 获取客户配置 var custCfg = config.customer[par.customer] // 获取客户配置
if(!custCfg){throw "config error"} if(!custCfg){throw "config error"}
var step = custCfg.step.toLowerCase() // 获取pcs_step
// 料号验证 // 料号验证
if(!GEN.isJobExists({job:job})){ throw "job "+ job+ " is not exist" } if(!GEN.isJobExists({job:job})){ throw "job "+ job+ " is not exist" }
if(!GEN.isJobOpen({job:job})){GEN.openJob({job:job})} if(!GEN.isJobOpen({job:job})){GEN.openJob({job:job})}
...@@ -292,10 +291,12 @@ function setDrill(props){ // 设置钻孔 ...@@ -292,10 +291,12 @@ function setDrill(props){ // 设置钻孔
return v.attr.type == "signal" && v.attr.context == "board" return v.attr.type == "signal" && v.attr.context == "board"
}) })
console.log("=================>setdrill:drillLayer:" + _.toString(drillLayer)); console.log("=================>setdrill:drillLayer:" + _.toString(drillLayer));
console.log("=================>setdrill:signalLayer:" + _.toString(signalLayer));
var layerCount = GEN.getLayerCount({job:job}) var layerCount = GEN.getLayerCount({job:job})
// findSignal 根据传入的数字找到对应的signal层 如 1 => top ; 2 => layer_2 // findSignal 根据传入的数字找到对应的signal层 如 1 => top ; 2 => layer_2
function findSignal(num){ function findSignal(num){
console.log(num)
return signalLayer[Number(num-1)].name return signalLayer[Number(num-1)].name
} }
function doDrill(drills){ // 分析钻孔层 function doDrill(drills){ // 分析钻孔层
......
...@@ -419,9 +419,8 @@ ...@@ -419,9 +419,8 @@
{"orig_name" : "fab.art", "tl_name" : "fab.art" }, {"orig_name" : "fab.art", "tl_name" : "fab.art" },
{"orig_name" : ["multipack.art","^array$"], "tl_name" : "array" }, {"orig_name" : ["multipack.art","^array$"], "tl_name" : "array" },
{"orig_name" : ["^outline"], "tl_name" : "outline" }, {"orig_name" : ["^outline"], "tl_name" : "outline" },
{"orig_name" : "top-enig", "tl_name" : "top-enig" }, {"orig_name" : ["top-enig","top_enig"], "tl_name" : "top_enig" },
{"orig_name" : "bot-enig", "tl_name" : "bot-enig" }, {"orig_name" : ["bot-enig","bot_enig"], "tl_name" : "bot_enig" },
{"orig_name" : "fab_page2", "tl_name" : "fab_page2" },
] ]
}, },
"New_data": { "New_data": {
...@@ -549,7 +548,7 @@ ...@@ -549,7 +548,7 @@
} }
}, },
"data_format": [ "data_format": [
{"tl_name":"top_enig" , "new_name":"top_enig" , "attr":{ "context":"board", "type":"mixed" }}, {"tl_name":"top_enig" , "new_name":"top_enig" , "attr":{ "context":"board", "type":"document" }},
{"tl_name":"past_top" , "new_name":"past_top" , "attr":{ "context":"board", "type":"solder_paste" }}, {"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":"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":"sm_top" , "new_name":"sm_top" , "attr":{ "context":"board", "type":"solder_mask" }},
...@@ -559,7 +558,7 @@ ...@@ -559,7 +558,7 @@
{"tl_name":"sm_botm" , "new_name":"sm_botm" , "attr":{ "context":"board", "type":"solder_mask" }}, {"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":"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":"past_botm" , "new_name":"past_botm" , "attr":{ "context":"board", "type":"solder_paste" }},
{"tl_name":"bot_enig" , "new_name":"bot_enig" , "attr":{ "context":"board", "type":"mixed" }}, {"tl_name":"bot_enig" , "new_name":"bot_enig" , "attr":{ "context":"board", "type":"document" }},
{"tl_name":"d_(\\d+)-(\\d+)","new_name":"d($1)-($2)" ,"attr":{"context":"board","type":"drill"}}, {"tl_name":"d_(\\d+)-(\\d+)","new_name":"d($1)-($2)" ,"attr":{"context":"board","type":"drill"}},
{"tl_name":"drill","new_name":"drill" ,"attr":{"context":"board","type":"drill"}}, {"tl_name":"drill","new_name":"drill" ,"attr":{"context":"board","type":"drill"}},
{"tl_name":"rout","new_name":"rout" ,"attr":{"context":"board","type":"rout"}}, {"tl_name":"rout","new_name":"rout" ,"attr":{"context":"board","type":"rout"}},
......
...@@ -54,43 +54,7 @@ if ($.hasOwnProperty('script_parameter')){ ...@@ -54,43 +54,7 @@ if ($.hasOwnProperty('script_parameter')){
} }
try { try {
var job = Job;
if(_.isEmpty(job)) throw "没有传入料号名!";
job = job.toLowerCase()
// 料号验证
if(!GEN.isJobExists({job:job})){ throw "job "+ job+ " is not exist" }
if(!GEN.isJobOpen({job:job})){GEN.openJob({job:job})}
var matrix = GEN.getMatrix({job:job})
var signalLayers = Object.keys(matrix).filter(function(v){
var val = matrix[v]
return val.layer_type == "signal" && val.context == "board"
})
var step = "cad"
GEN.openStep({job:job, name:step})
var copper_percent_pcs = signalLayers.map(function(v){
var tmp = {layer:v}
tmp.card_copper_distribution = GEN.copperArea({layer1:v}).percent + "%"
return tmp
})
console.log("==================================>card copper_percent_pcs:"+_.toString(copper_percent_pcs))
var arr_step = "stp"
GEN.openStep({job:job, name:arr_step})
var copper_percent_stp = signalLayers.map(function(v){
var tmp = {layer:v}
tmp.array_copper_distribution = GEN.copperArea({layer1:v}).percent + "%"
return tmp
})
console.log("==================================>card copper_percent_stp:"+_.toString(copper_percent_stp))
QDfm.updateRow({ QDfm.updateRow({
table: "pdm_aimdfm_task", table: "pdm_aimdfm_task",
data: { data: {
......
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