Commit 1218d449 authored by Scott Sun's avatar Scott Sun

scott

parent b22f98b8
...@@ -137,7 +137,6 @@ var resultData = []; ...@@ -137,7 +137,6 @@ var resultData = [];
var ALL = {} var ALL = {}
var Omatrix = {}; var Omatrix = {};
try { try {
console.log("=============================================>anaysis_start"); console.log("=============================================>anaysis_start");
var par = PAR; var par = PAR;
var vc_src_01005_pad_result = par.vc_src_01005_pad_result var vc_src_01005_pad_result = par.vc_src_01005_pad_result
...@@ -152,7 +151,7 @@ try { ...@@ -152,7 +151,7 @@ try {
// 检查料号是否能够check out // 检查料号是否能够check out
if(GEN.checkInout({job:job,mode:"test"}) != 0 && mode == "aimdfm"){ throw "the job check" } if(GEN.checkInout({job:job,mode:"test"}) != 0 && mode == "aimdfm"){ throw "the job check" }
GEN.checkInout({job:job,mode:"out"}); GEN.checkInout({job:job,mode:"out"});
script_info({ result_severity: "analysis start" }) script_info({ msg: "analysis start" })
script_info({ progress: 65 }) script_info({ progress: 65 })
var pcs_step = par.pcs_step == "" ? "cad" : par.pcs_step; var pcs_step = par.pcs_step == "" ? "cad" : par.pcs_step;
var array_step = par.array_step == "" ? "stp" : par.array_step; var array_step = par.array_step == "" ? "stp" : par.array_step;
...@@ -163,7 +162,9 @@ try { ...@@ -163,7 +162,9 @@ try {
if(step_list.indexOf(pcs_step)<0){ if(step_list.indexOf(pcs_step)<0){
pcs_step = step_list[0] pcs_step = step_list[0]
} }
script_info({ result_severity: "analysis update_matrix_info" })
script_info({ msg: "analysis update_matrix_info" })
script_info({ progress: 65 }) script_info({ progress: 65 })
var matrix = UPLOAD_LAYER_MATRIX({job:job}) // 分析matrix 获得分析后的matrix信息 var matrix = UPLOAD_LAYER_MATRIX({job:job}) // 分析matrix 获得分析后的matrix信息
GEN.openStep({job:job, name:pcs_step}) GEN.openStep({job:job, name:pcs_step})
...@@ -219,7 +220,7 @@ try { ...@@ -219,7 +220,7 @@ try {
}) })
GEN.clearLayers() GEN.clearLayers()
script_info({ result_severity: "analysis drill_stack" }) script_info({ msg: "analysis drill_stack" })
script_info({ progress: 70 }) script_info({ progress: 70 })
// * new 钻孔叠构 // * new 钻孔叠构
var cam_drill_structure = [] var cam_drill_structure = []
...@@ -361,7 +362,7 @@ try { ...@@ -361,7 +362,7 @@ try {
rmOutProfile({job:job, step:pcs_step}) rmOutProfile({job:job, step:pcs_step})
} }
GEN.closeStep() GEN.closeStep()
script_info({ result_severity: "analysis panel_info" }) script_info({ msg: "analysis panel_info" })
script_info({ progress: 70 }) script_info({ progress: 70 })
// * profile 和 拼版 // * profile 和 拼版
var pandle_step = step_list.map(function(v){ var pandle_step = step_list.map(function(v){
...@@ -435,7 +436,7 @@ try { ...@@ -435,7 +436,7 @@ try {
} }
ALL.gold_fingers = gold_fingers ALL.gold_fingers = gold_fingers
GEN.closeStep() GEN.closeStep()
script_info({ result_severity: "analysis some_job_info" }) script_info({ msg: "analysis some_job_info" })
var config = { var config = {
jobInfo: { jobInfo: {
layer_count: ["signal","power_ground"], // Board属性的signal或者power_ground层 layer_count: ["signal","power_ground"], // Board属性的signal或者power_ground层
...@@ -515,7 +516,7 @@ try { ...@@ -515,7 +516,7 @@ try {
console.log("===================================> 5 save drill info") console.log("===================================> 5 save drill info")
script_info({ result_severity: "analysis drill_info" }) script_info({ msg: "analysis drill_info" })
script_info({ progress: 75 }) script_info({ progress: 75 })
// * 获取pcs_step 和 array_step的钻孔信息 // * 获取pcs_step 和 array_step的钻孔信息
var drill_tool_info = {}; var drill_tool_info = {};
...@@ -530,6 +531,7 @@ try { ...@@ -530,6 +531,7 @@ try {
name:par.array_step name:par.array_step
} }
] ]
steps_drillinfo.forEach(function(item){ steps_drillinfo.forEach(function(item){
var type = item.type; var type = item.type;
var step = item.name; var step = item.name;
...@@ -537,7 +539,7 @@ try { ...@@ -537,7 +539,7 @@ try {
drillLayers.forEach(function(layer){ drillLayers.forEach(function(layer){
var layer = layer.name; var layer = layer.name;
if(!GEN.isLayerEmpty({job:job,step:step,layer:layer})){ if(!GEN.isLayerEmpty({job:job,step:step,layer:layer})){
GEN.COM("tools_set,layer="+layer+",slots=by_length") // GEN.COM("tools_set,layer="+layer+",slots=by_length")
var tool = GEN.getTool({job:job,step:step,layer:layer,units:"mm"}); // {"1":{"count":"01156","num":"1","type":"plated","min_tol":"0","max_tol":"0","finish_size":"100.31","drill_size":"100.31","slot_len":"0","type2":"standard","shape":"hole","bit":0}} var tool = GEN.getTool({job:job,step:step,layer:layer,units:"mm"}); // {"1":{"count":"01156","num":"1","type":"plated","min_tol":"0","max_tol":"0","finish_size":"100.31","drill_size":"100.31","slot_len":"0","type2":"standard","shape":"hole","bit":0}}
if(!drill_tool_info[layer]){ if(!drill_tool_info[layer]){
drill_tool_info[layer] = tool; drill_tool_info[layer] = tool;
...@@ -639,7 +641,7 @@ try { ...@@ -639,7 +641,7 @@ try {
}) })
console.log("=============================> 6 set smd bga") console.log("=============================> 6 set smd bga")
script_info({ result_severity: "analysis smd&bga" }) script_info({ msg: "analysis smd&bga" })
script_info({ progress: 80 }) script_info({ progress: 80 })
var allStep = GEN.getStepList({job:job}) var allStep = GEN.getStepList({job:job})
allStep.forEach(function(step){ allStep.forEach(function(step){
...@@ -783,6 +785,7 @@ try { ...@@ -783,6 +785,7 @@ try {
jobid: JobId, jobid: JobId,
jobinfohash: {ATS_surface_area_base_on:"Card"} jobinfohash: {ATS_surface_area_base_on:"Card"}
}) })
var jobpath = GEN.getJobPath({job:job}) var jobpath = GEN.getJobPath({job:job})
// if(GEN.GEN_TYPE == "genesis"){ // if(GEN.GEN_TYPE == "genesis"){
// jobpath = GEN.getJobPath({job:job}) // jobpath = GEN.getJobPath({job:job})
...@@ -790,7 +793,7 @@ try { ...@@ -790,7 +793,7 @@ try {
// jobpath = "/home/local_db/server_db/jobs/"+job // jobpath = "/home/local_db/server_db/jobs/"+job
// } // }
mkPath(jobpath,["user","opcam","steps"]) mkPath(jobpath,["user","opcam","steps"])
script_info({ result_severity: "analysis signal" }) script_info({ msg: "analysis signal" })
script_info({ progress: 85 }) script_info({ progress: 85 })
stepList.forEach(function(step){ stepList.forEach(function(step){
GEN.openStep({ job: job, name: step }) GEN.openStep({ job: job, name: step })
...@@ -943,7 +946,7 @@ try { ...@@ -943,7 +946,7 @@ try {
if(par.erf){ if(par.erf){
tmpitem.erf = par.erf tmpitem.erf = par.erf
} }
script_info({ result_severity: "analysis run_signal_chk" }) script_info({ msg: "analysis run_signal_chk" })
createChklistAndRun({ // 创建checklist并运行 createChklistAndRun({ // 创建checklist并运行
layers: signalLayers, layers: signalLayers,
items: [tmpitem] items: [tmpitem]
...@@ -1005,7 +1008,7 @@ try { ...@@ -1005,7 +1008,7 @@ try {
IKM.msg("export") IKM.msg("export")
script_info({ result_severity: "analysis export" }) script_info({ msg: "analysis export" })
script_info({ progress: 95 }) script_info({ progress: 95 })
// 导出 // 导出
if(par.export_path != "" && par.export_mode != "" && par.export_submode != "" ){ if(par.export_path != "" && par.export_mode != "" && par.export_submode != "" ){
...@@ -1131,7 +1134,27 @@ function ANALYSIS_STACKUP(props){ ...@@ -1131,7 +1134,27 @@ function ANALYSIS_STACKUP(props){
if(!props.hasOwnProperty("jobcategory")){ props.jobcategory = 'work' } if(!props.hasOwnProperty("jobcategory")){ props.jobcategory = 'work' }
var matrix = GEN.getMatrix({job:job}) var matrix = GEN.getMatrix({job:job})
var layer_count = GEN.getLayerCount({job:job}) // ! var layer_count = GEN.getLayerCount({job:job}) // !
save_job_info({jobid:JobId,jobcategory:props.jobcategory,jobinfohash:{TL_layer_count:layer_count}}); save_job_info({jobid:JobId,jobcategory:props.jobcategory,jobinfohash:{TL_layer_count:layer_count}});
var job_attrs = db.query("",function(q){
return q.selectValue({
table:'pdm_job',
field_format:{job_attrs:'json'},
field:'job_attrs',
where:{id : JobId}
})
});
if (!job_attrs ) { job_attrs = {}}
job_attrs.layer_count = layer_count
db.query("",function(q){
return q.updateRow({
table:'pdm_job',
data:{job_attrs:job_attrs},
update_policy:{attr_data:'json_merge'},
where:{id : JobId}
})
});
_.values(matrix).sort(function(a,b){return a.row-b.row}).forEach(function(layer){ _.values(matrix).sort(function(a,b){return a.row-b.row}).forEach(function(layer){
layer.odb_name = layer.name; layer.odb_name = layer.name;
layer.name = layer.tl_name; layer.name = layer.tl_name;
...@@ -1265,6 +1288,7 @@ function selCopyLayer(props){ // 拷贝选择的到辅助层 ...@@ -1265,6 +1288,7 @@ function selCopyLayer(props){ // 拷贝选择的到辅助层
function save_job_info(props){ // 保存料号信息 function save_job_info(props){ // 保存料号信息
var jobid = props.jobid; var jobid = props.jobid;
var jobinfohash = props.jobinfohash; var jobinfohash = props.jobinfohash;
Object.keys(jobinfohash).forEach(function(key){ Object.keys(jobinfohash).forEach(function(key){
var val = jobinfohash[key]; var val = jobinfohash[key];
var value = db.query("",function(q){ var value = db.query("",function(q){
...@@ -1274,7 +1298,6 @@ function save_job_info(props){ // 保存料号信息 ...@@ -1274,7 +1298,6 @@ function save_job_info(props){ // 保存料号信息
where:{job_id:jobid, attr_name: key} where:{job_id:jobid, attr_name: key}
}) })
}); });
console.log("jobid:"+jobid+"==========dbjobvalue:" + val)
if(/done/ig.test(value) || !value){ if(/done/ig.test(value) || !value){
db.query("",function(q){ db.query("",function(q){
return q.insertRow({ return q.insertRow({
...@@ -2034,6 +2057,7 @@ function analysisDrill(par, step){ ...@@ -2034,6 +2057,7 @@ function analysisDrill(par, step){
GEN.workLayer({name:item,display_number:1,clear_before:"yes"}) GEN.workLayer({name:item,display_number:1,clear_before:"yes"})
GEN.COM("filter_set,filter_name=popup,update_popup=no,feat_types=pad"); GEN.COM("filter_set,filter_name=popup,update_popup=no,feat_types=pad");
GEN.COM("sel_ref_feat",{layers:tmplayer,use:"filter",mode:"touch",pads_as:"shape",f_types:"pad",polarity:"positive\;negative",include_syms:drill.symbol}) GEN.COM("sel_ref_feat",{layers:tmplayer,use:"filter",mode:"touch",pads_as:"shape",f_types:"pad",polarity:"positive\;negative",include_syms:drill.symbol})
// GEN.selRefFeat({layers:tmplayer, use:"filter",mode:"touch"})
GEN.COM("filter_reset,filter_name=popup") GEN.COM("filter_reset,filter_name=popup")
if(GEN.getSelectCount()>0){ if(GEN.getSelectCount()>0){
var res = "" var res = ""
...@@ -2043,7 +2067,7 @@ function analysisDrill(par, step){ ...@@ -2043,7 +2067,7 @@ function analysisDrill(par, step){
return /^r\d+/.test(item.symbol) return /^r\d+/.test(item.symbol)
}) })
pads = pads.sort(function(a,b){ pads = pads.sort(function(a,b){
return parseInt(a.symbol) - parseInt(b.symbol) return parseInt(a.symbol.slice(1)) - parseInt(b.symbol.slice(1))
}) })
res = pads[0].symbol.slice(1) res = pads[0].symbol.slice(1)
} }
......
...@@ -68,7 +68,7 @@ if (mode === "aimdfm") { ...@@ -68,7 +68,7 @@ if (mode === "aimdfm") {
var Status = 'ok'; var Status = 'ok';
var resultData = []; var resultData = [];
try { try {
script_info({ result_severity: "format start" }) script_info({ msg: "format start" })
script_info({ progress: 35 }) script_info({ progress: 35 })
var par = PAR; var par = PAR;
if(!par.hasOwnProperty("config_path") || par.config_path==""){ if(!par.hasOwnProperty("config_path") || par.config_path==""){
...@@ -229,7 +229,7 @@ try { ...@@ -229,7 +229,7 @@ try {
// 改名 // 改名
script_info({ result_severity: "format rename" }) script_info({ msg: "format rename" })
script_info({ progress: 50 }) script_info({ progress: 50 })
err = reName({job:job, matrix:after_sort_matrix, cfg:format_cfg}) err = reName({job:job, matrix:after_sort_matrix, cfg:format_cfg})
if(err){throw err} if(err){throw err}
...@@ -290,7 +290,7 @@ try { ...@@ -290,7 +290,7 @@ try {
err = setDrill({job:job}) err = setDrill({job:job})
if(err){throw err} if(err){throw err}
script_info({ result_severity: "format create profile" }) script_info({ msg: "format create profile" })
script_info({ progress: 55 }) script_info({ progress: 55 })
var all_layer = Object.keys(tmp_matrix) var all_layer = Object.keys(tmp_matrix)
// 没有outline层 // 没有outline层
...@@ -301,7 +301,7 @@ try { ...@@ -301,7 +301,7 @@ try {
GEN.openStep({job:job, name:tmp_step}) GEN.openStep({job:job, name:tmp_step})
var now_profile = GEN.getProfile({job:job, step:tmp_step}) var now_profile = GEN.getProfile({job:job, step:tmp_step})
if(now_profile.match(/\n/ig).length == 1){ // 如果没有profile if(now_profile.match(/\n/ig).length == 1){ // 如果没有profile
if(profileRule[0] == "outline") { if(profileRule[0] == "outline" && /1352/ig.test(PAR.customer)) {
GEN.workLayer({name:'outline',display_number:2,clear_before:'yes'}) GEN.workLayer({name:'outline',display_number:2,clear_before:'yes'})
GEN.selAllFeat() GEN.selAllFeat()
if(GEN.getSelectCount() > 0) { if(GEN.getSelectCount() > 0) {
...@@ -317,7 +317,7 @@ try { ...@@ -317,7 +317,7 @@ try {
} }
var hasProfile = GEN.getProfile({job:job, step:tmp_step}) var hasProfile = GEN.getProfile({job:job, step:tmp_step})
if(hasProfile.match(/\n/ig).length == 1){ if(hasProfile.match(/\n/ig).length == 1){
script_info({ result_severity: "创建profile失败" }) script_info({ msg: "创建profile失败" })
throw "创建profile失败" throw "创建profile失败"
} }
} }
...@@ -336,7 +336,6 @@ try { ...@@ -336,7 +336,6 @@ try {
$.QDfm.updateRow({ $.QDfm.updateRow({
table: "pdm_aimdfm_task", table: "pdm_aimdfm_task",
data: { data: {
result_severity: "format ok",
progress: 60 progress: 60
}, },
where: { id: $.task_id } where: { id: $.task_id }
...@@ -669,7 +668,6 @@ function mergeLaser(props){ // 合并钻孔 ...@@ -669,7 +668,6 @@ function mergeLaser(props){ // 合并钻孔
function createOutline(props){ function createOutline(props){
var profileRule = props.profileRule var profileRule = props.profileRule
console.log("----profileRule------->:" + _.toString(profileRule)); console.log("----profileRule------->:" + _.toString(profileRule));
var job = props.job var job = props.job
var step = props.step var step = props.step
var matrix = GEN.getMatrix({job:job}) var matrix = GEN.getMatrix({job:job})
...@@ -683,16 +681,25 @@ function createOutline(props){ ...@@ -683,16 +681,25 @@ function createOutline(props){
}) })
return flag return flag
}) })
console.log("---- outlines------->:" + _.toString(outlines));
var drill_layer = Object.keys(matrix).filter(function(v){return matrix[v].layer_type=="drill" && matrix[v].context == "board"}) var drill_layer = Object.keys(matrix).filter(function(v){return matrix[v].layer_type=="drill" && matrix[v].context == "board"})
var tmp = "drill_all"; var tmp = "drill_all";
if(GEN.isLayerExists({job:job, layer:tmp})) { GEN.deleteLayer({job:job, layer:tmp})} if(GEN.isLayerExists({job:job, layer:tmp})) { GEN.deleteLayer({job:job, layer:[tmp]})}
GEN.openStep({job:job, name:step}) drill_layer.forEach(function(d_layer) {
GEN.affectedLayer({affected:'yes',layer:drill_layer}) GEN.workLayer({name:d_layer,display_number:2,clear_before:'yes'})
GEN.selCopyOther({dest:'layer_name',target_layer:tmp,invert:'no',dx:0,dy:0,size:0}) GEN.selCopyOther({dest:'layer_name',target_layer:tmp,invert:'no',dx:0,dy:0,size:0})
GEN.affectedLayer({affected:'no',mode:'all'}) })
GEN.closeStep() GEN.closeStep()
if (outlines.indexOf("outline") >= 0) {
outlines = outlines.reduce(function(a,b){
if(b != "outline") {
a.push(b)
}
return a
}, ["outline"])
}
var tmp_outline var tmp_outline
if(outlines.length){ if(outlines.length){
if( outlines.length){ if( outlines.length){
...@@ -709,7 +716,7 @@ function createOutline(props){ ...@@ -709,7 +716,7 @@ function createOutline(props){
} }
}else{return false} }else{return false}
function cl(l){ function cl(l){
GEN.openStep({job:job, name:step}) GEN.openStep({job:job, name:step})
GEN.affectedLayer({affected:'no',mode:'all'}) GEN.affectedLayer({affected:'no',mode:'all'})
GEN.workLayer({name:l,display_number:2,clear_before:"yes"}) GEN.workLayer({name:l,display_number:2,clear_before:"yes"})
var bk = l + "_bk" var bk = l + "_bk"
...@@ -808,4 +815,4 @@ function script_info(props){ // result_severity progress ...@@ -808,4 +815,4 @@ function script_info(props){ // result_severity progress
where: { id: $.task_id } where: { id: $.task_id }
}); });
} }
} }
\ No newline at end of file
...@@ -89,7 +89,7 @@ var resultData = []; ...@@ -89,7 +89,7 @@ var resultData = [];
var import_info = []; var import_info = [];
var inputState = []; var inputState = [];
try { try {
script_info({ result_severity: "import start" }) script_info({ msg: "import start" })
var par = PAR; var par = PAR;
// var db_path = db.query("",function(q){ // var db_path = db.query("",function(q){
// return q.selectValue({ // return q.selectValue({
...@@ -164,8 +164,8 @@ try { ...@@ -164,8 +164,8 @@ try {
} else { } else {
jobFiles = fs.listDir(jobFile[0].path) jobFiles = fs.listDir(jobFile[0].path)
} }
GEN.COM("config_edit,name=iol_gbr_polygon_break,value=1,mode=user") // GEN.COM("config_edit,name=iol_gbr_polygon_break,value=1,mode=user")
GEN.COM("config_edit,name=iol_fix_ill_polygon,value=yes,mode=user") // GEN.COM("config_edit,name=iol_fix_ill_polygon,value=yes,mode=user")
// 将jobFile下的zip解压 // 将jobFile下的zip解压
decompression(jobFile[0].path, []) decompression(jobFile[0].path, [])
...@@ -198,7 +198,7 @@ try { ...@@ -198,7 +198,7 @@ try {
// 分析料号文件 得到料号导入信息 导入类型 // 分析料号文件 得到料号导入信息 导入类型
var jobInfo = analyJobFiles({jobFiles:jobFiles.filter(function(v){return v.isFile}),custCfg:custCfg,config:config,job:job }) var jobInfo = analyJobFiles({jobFiles:jobFiles.filter(function(v){return v.isFile}),custCfg:custCfg,config:config,job:job })
if(jobInfo.data.length == 0){ if(jobInfo.data.length == 0){
script_info({ result_severity: "file error" }) script_info({ msg: "file error" })
throw "file error"} throw "file error"}
var importOk = false; // 是否成功导入 var importOk = false; // 是否成功导入
...@@ -301,7 +301,7 @@ try { ...@@ -301,7 +301,7 @@ try {
GEN.COM("input_manual") GEN.COM("input_manual")
importOk = true importOk = true
} }
if(!importOk){ script_info({ result_severity: "import error" }); throw "import error"} if(!importOk){ script_info({ msg: "import error" }); throw "import error"}
script_info({ progress: 20 }) script_info({ progress: 20 })
reNameStep(job) reNameStep(job)
if(/2171/.test(par.customer)){ if(/2171/.test(par.customer)){
...@@ -338,7 +338,7 @@ try { ...@@ -338,7 +338,7 @@ try {
} }
}) })
} }
GEN.closeStep()
GEN.checkInout({job:job,mode:"out"}) // 结束保存料号 关闭料号 GEN.checkInout({job:job,mode:"out"}) // 结束保存料号 关闭料号
GEN.saveJob({ job: job }); GEN.saveJob({ job: job });
GEN.checkInout({job:job,mode:"in"}) GEN.checkInout({job:job,mode:"in"})
...@@ -356,7 +356,7 @@ try { ...@@ -356,7 +356,7 @@ try {
import_html += "</table>" import_html += "</table>"
// name type date user // name type date user
resultData.push({type: "info",title:"导入资料列表",detail: [{ desc: import_html }] }) resultData.push({type: "info",title:"导入资料列表",detail: [{ desc: import_html }] })
script_info({ result_severity: "import ok" }) script_info({ msg: "import ok" })
if (mode === "aimdfm") { if (mode === "aimdfm") {
$.QDfm.updateRow({ $.QDfm.updateRow({
table: "pdm_aimdfm_task", table: "pdm_aimdfm_task",
...@@ -395,7 +395,6 @@ function delSameJob(props){ ...@@ -395,7 +395,6 @@ function delSameJob(props){
var job = props.job var job = props.job
var delSame = props.delSame var delSame = props.delSame
console.log("======================>delsame:"+ 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}) }
...@@ -535,6 +534,7 @@ function script_info(props){ // result_severity progress ...@@ -535,6 +534,7 @@ function script_info(props){ // result_severity progress
} }
} }
function decompression(path, zips) { function decompression(path, zips) {
var files = fs.listDir(path) var files = fs.listDir(path)
var count = 0; var count = 0;
......
...@@ -679,6 +679,7 @@ ...@@ -679,6 +679,7 @@
GEN.COM("tools_set,layer="+layer+",thickness=0,user_params=,slots=by_length") GEN.COM("tools_set,layer="+layer+",thickness=0,user_params=,slots=by_length")
} }
}) })
GEN.saveJob({ job: job });
} }
} }
] ]
...@@ -964,7 +965,6 @@ ...@@ -964,7 +965,6 @@
], ],
"mergerule" : { "mergerule" : {
profile:["silk_top"], profile:["silk_top"],
drill:["(\\d+)-(\\d+)\\.drl$","\\.d(\\d+)$"],
laser : { laser : {
tl_name: "drill($1)-($2)", tl_name: "drill($1)-($2)",
regs: ["(\\d+)-(\\d+)\\.drl$"] regs: ["(\\d+)-(\\d+)\\.drl$"]
......
...@@ -4,16 +4,22 @@ DESCRIPTION: ; ...@@ -4,16 +4,22 @@ DESCRIPTION: ;
PARAMETER: PARAMETER:
[ [
{ {
name : 'step', name : 'ring_size',
title : '操作step', title : 'ring大小',
type : 'LineEdit', type : 'IntLineEdit',
property : {tool_tip : '操作step,默认是net'}, property : {tool_tip : 'ring大小'},
},
{
name : 'line_size',
title : '优化线径值',
type : 'IntLineEdit',
property : {tool_tip : '优化线径值'},
}, },
{ {
name : 'cutting_marign', name : 'step_fliter',
title : '切除profile外数值', title : 'Step过滤',
type : 'LineEdit', type : 'LineEdit',
property : {tool_tip : '切除profile外数值,默认是0.2mm'}, property : {tool_tip : 'unit'},
}, },
{ {
name : 'auto_save', name : 'auto_save',
...@@ -30,16 +36,16 @@ PARAMETER: ...@@ -30,16 +36,16 @@ PARAMETER:
] ]
VERSION_HISTORY: VERSION_HISTORY:
V1.00 2020-04-20 Scott Sun V1.00 2020-04-28 Scott Sun
1.新版本 1.新版本
HELP: HELP:
<html><body bgcolor="#DDECFE"> <html><body bgcolor="#DDECFE">
<font size="3" color="#003DB2"><p>功能简介</p></font> <font size="3" color="#003DB2"><p>功能简介</p></font>
<p> 删除板外 </p> <p> 隔离环优化 </p>
<br> <br>
<font size="3" color="#003DB2"><p>参数配置</p></font> <font size="3" color="#003DB2"><p>参数配置</p></font>
<p> 切除值 </p> <p> 配置 </p>
<br> <br>
<font size="3" color="#003DB2"><p>注意事项</p></font> <font size="3" color="#003DB2"><p>注意事项</p></font>
<p> 无 </p> <p> 无 </p>
...@@ -48,7 +54,10 @@ PARAMETER: ...@@ -48,7 +54,10 @@ PARAMETER:
*/ */
////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////
console.log("==============================>删除板外"); console.log("==============================>JTG_INN_neg_isolation_pad_optimization_aim");
/* question
?
*/
// 引入模块 包 // 引入模块 包
var $ = require('topcam.scriptfunc').argv(); var $ = require('topcam.scriptfunc').argv();
var fs = require('fs'); var fs = require('fs');
...@@ -60,7 +69,7 @@ var GEN = $.gen; ...@@ -60,7 +69,7 @@ var GEN = $.gen;
var GUI = $.gui || {}; var GUI = $.gui || {};
var Job = $.job || $.job_name; var Job = $.job || $.job_name;
var JobId = $.job_id; var JobId = $.job_id;
var db = $.db || IKM.db var db = $.db || IKM.db;
var PAR = {} var PAR = {}
if ($.par) { if ($.par) {
PAR = $.par PAR = $.par
...@@ -86,109 +95,140 @@ var Status = 'ok'; ...@@ -86,109 +95,140 @@ var Status = 'ok';
var resultData = []; var resultData = [];
try { try {
var par = PAR; var par = PAR;
var default_par = { var default_par = { // par默认参数?
step:"net", step_fliter:"unit",
cutting_marign: "0.2mm", units: "mm",
auto_save: "No", auto_save: "no",
ring_size:200,
line_size:200
} }
for(var key in default_par){ // 设置默认属性 for(var key in default_par){ // 设置默认属性
if (!par.hasOwnProperty(key) || par[key] == ""){ if (!par.hasOwnProperty(key) || par[key] == ""){
par[key] = default_par[key] par[key] = default_par[key]
} }
} }
par.cutting_marign = parseFloat(par.cutting_marign) var par_props = ["ring_size","line_size"] // par的必填参数
if(!/^(([^0][0-9]+|0)\.([0-9]{1,2})$)|^([^0][0-9]+|0)$/ig.test(par.cutting_marign)){throw "cutting_marign failed"} par_props.forEach(function(v){
var cutting_marign_symbol = "r" + String(par.cutting_marign * 1000) if(par[v] == ""){throw "par props "+v+" err"}
})
if(_.isEmpty(Job)){throw "参数Job不存在"} if(_.isEmpty(Job)){throw "参数Job不存在"}
var job = "08ha0010hq0a0" var job = Job.toLowerCase()
// 料号验证
if(!GEN.isJobExists({job:job})){throw "料号"+job+"不存在"} if(!GEN.isJobExists({job:job})){throw "料号"+job+"不存在"}
if(!GEN.isJobOpen({job:job})){ GEN.openJob({job:job}) } if(!GEN.isJobOpen({job:job})){ GEN.openJob({job:job}) }
if(mode == "aimdfm"){ if(mode == "aimdfm"){
if(GEN.checkInout({job:job,mode:"test"}) != 0){ throw "the job check" } if(GEN.checkInout({job:job,mode:"test"}) != 0){ throw "the job check" }
GEN.checkInout({job:job,mode:"out"}); GEN.checkInout({job:job,mode:"out"});
} }
// 通过matrix获取board层 // 脚本开始
var stepList = GEN.getStepList({job:job})
if(par.step_fliter != ""){
var step_reg = new RegExp(par.step_fliter)
stepList = stepList.filter(function(v){return step_reg.test(v)})
}
// 通过matrix中选择属性为negative&power_ground&inner的内层负片层
var matrix = GEN.getMatrix({job:job}) var matrix = GEN.getMatrix({job:job})
var board_layers = Object.keys(matrix).reduce(function(a,b){ var n_layers = Object.keys(matrix).sort(function(a,b){return matrix[a].row - matrix[b].row})
if(matrix[b].context == "board"){ .filter(function(key){
a.push(b) var val = matrix[key]
} return val.layer_type == "power_ground" && val.polarity == "negative" && val.side == "inner" && val.context == "board"
return a
},[])
var all_layers = Object.keys(matrix)
var outline_layer = ["gko","gm1","ol"]
outline_layer = outline_layer.filter(function(v){
return all_layers.indexOf(v) >=0
}) })
// 影响board层 if(n_layers.length == 0){throw "can not find power_ground negative layer"}
var steplist = GEN.getStepList({job:job}) var tmp1 = "tmp_1", tmp2 = "tmp_2"
steplist = steplist.filter(function(v){ var tmp_layers = [tmp1,tmp2];
var tmpreg = new RegExp(par.step,"ig") stepList.forEach(function(step){
return tmpreg.test(v) GEN.openStep({job:job, name:step})
}) GEN.units({type:par.units})
steplist.forEach(function(step){ GEN.affectedLayer({affected:'no',mode:'all'})
GEN.openStep({job:job,name:step})
GEN.units({type:"mm"})
var outline_tmp = "outline_tmp"
// 创建outline参考层
if(GEN.isLayerExists({job:job,layer:outline_tmp})){
GEN.deleteLayer({job:job, layer:outline_tmp})
}
GEN.COM("profile_to_rout,layer="+outline_tmp+",width=1")
GEN.clearLayers() GEN.clearLayers()
// 切除profile以外0.2mm(cutting_marign)物件 n_layers.forEach(function(layer){
board_layers.forEach(function(layer){ // 逐层制作,过滤选出 rect*,r*,s*,oval 属性的物件并移动到辅助层1;
if (outline_layer.indexOf(layer)<0){ tmp_layers.forEach(function(v){
GEN.affectedLayer({affected:"no", mode: "all"}) if(GEN.isLayerExists({job:job,layer:v})){GEN.deleteLayer({job:job, layer:v})}
// GEN.workLayer({name:layer,display_number:1,clear_before:'yes'}); GEN.createLayer({job:job, layer:v})
// GEN.clipArea({layers_mode:'affected_layers',area:'profile',inout:'outside',margin:0,contour_cut:'no'}); })
GEN.workLayer({name:layer,display_number:2,clear_before:'yes'}) GEN.workLayer({name:layer,display_number:2,clear_before:'yes'})
GEN.selectByFilter({profile:"out"}) GEN.selectByFilter({include_syms:"rect*;r*;s*;oval*"})
// GEN.selRefFeat({layers:outline_tmp,use:'filter',mode:'include'}); if(GEN.getSelectCount()>0){
if(GEN.getSelectCount()>0){GEN.selDelete()} GEN.selMoveOther({target_layer:tmp1,invert:'no',dx:0,dy:0,size:0})
GEN.COM("clip_area_strt") // 复制辅助层1至辅助层2,将辅助层1上的物件修改为r1.2;
GEN.COM("clip_area_end,layers_mode=affected_layers,layer=,area=profile,area_type=rectangle,inout=outside,contour_cut=yes,margin=0,feat_types=line\;pad\;surface\;arc\;text") GEN.workLayer({name:tmp1,display_number:2,clear_before:'yes'})
GEN.selAllFeat()
GEN.selCopyOther({dest:'layer_name',target_layer:tmp2,invert:'no',dx:0,dy:0,size:0})
GEN.selChangeSym({symbol:"r1.2"})
// 使用参考选择reference select命令touch辅助层1,筛选出drl层上有隔离焊盘的孔;
GEN.workLayer({name:"drl",display_number:2,clear_before:'yes'})
if(!GEN.isLayerExists({job:job, layer:"pth"})){
GEN.selectByFilter({attribute:[{attribute:'.drill',option:'plated'}]})
if(GEN.getSelectCount() > 0) {GEN.selCopyOther({dest:'layer_name',target_layer:'pth',invert:'no',dx:0,dy:0,size:0})}
}
if(!GEN.isLayerExists({job:job, layer:"np"})){
GEN.selectByFilter({attribute:[{attribute:'.drill',option:'non_plated'}]})
if(GEN.getSelectCount() > 0) {GEN.selCopyOther({dest:'layer_name',target_layer:'np',invert:'no',dx:0,dy:0,size:0})}
}
// var outline_ref = 'ol_tl_tmp'; if(GEN.isLayerExists({job:job, layer:"pth"})){
// var tmp_work_layer = '_tmp_work_layer'; GEN.workLayer({name:"pth",display_number:2,clear_before:'yes'})
// if(GEN.isLayerExists({job:job,layer:tmp_work_layer})){ GEN.selRefFeat({layers:tmp1,use:'filter',mode:'touch'})
// GEN.deleteLayer({job:job,layer:[tmp_work_layer],step:step}) // copy这些选中的孔到辅助层2,resize设置为400um; par.ring_size
// } if(GEN.getSelectCount()>0){
// if(GEN.isLayerExists({job:job,layer:outline_ref})){ GEN.selCopyOther({dest:'layer_name',target_layer:tmp2,invert:'no',dx:0,dy:0,size:par.ring_size})
// GEN.deleteLayer({job:job,layer:[outline_ref],step:step}) }
// } }
// GEN.createLayer({job:job,layer:tmp_work_layer,conext:'misc',type:'document',delete_exists:"yes"}) if(GEN.isLayerExists({job:job, layer:"np"})){
// GEN.createLayer({job:job,layer:outline_ref,conext:'misc',type:'document',delete_exists:"yes"}) GEN.workLayer({name:"np",display_number:2,clear_before:'yes'})
// GEN.workLayer({name:outline_tmp,display_number:2,clear_before:'yes'}) GEN.selRefFeat({layers:tmp1,use:'filter',mode:'touch'})
// GEN.selCopyOther({dest:'layer_name',target_layer:outline_ref,invert:'no',dx:0,dy:0,size:0}) // copy这些选中的孔到辅助层2,resize设置为400um; par.ring_size
// GEN.affectedLayer({affected:'yes',layer:[outline_ref],clear_before:'yes'}); if(GEN.getSelectCount()>0){
// GEN.COM('sel_resize',{size:200,corner_ctl:'no'}); GEN.selCopyOther({dest:'layer_name',target_layer:tmp2,invert:'no',dx:0,dy:0,size:par.ring_size + 50})
// GEN.workLayer({name:layer,display_number:2,clear_before:'yes'}) }
// GEN.selRefFeat({layers:outline_ref,use:'filter',mode:'cover'}); }
// if ( GEN.getSelectCount() > 0 ) { GEN.workLayer({name:tmp2,display_number:2,clear_before:'yes'})
// GEN.selCopyOther({dest:'layer_name',target_layer:tmp_work_layer,invert:'no',dx:0,dy:0,size:0}); var del_layer = tmp2 + "+++"
// GEN.affectedLayer({affected:'yes',mode:'single',layer:tmp_work_layer,clear_before:'yes'}); GEN.runSingleDfm({
// GEN.COM('sel_all_feat'); chklist: 'valor_dfm_nfpr',
// GEN.selChangeSym({symbol:'r1'}); params: {
// GEN.affectedLayer({affected:'yes',mode:'single',layer:outline_ref,clear_before:'yes'}); pp_layer: tmp2,
// GEN.COM('sel_all_feat'); pp_delete: 'Duplicate',
// GEN.selChangeSym({symbol:'r2'}); pp_work: 'Features',
// GEN.affectedLayer({affected:'yes',mode:'single',layer:tmp_work_layer,clear_before:'yes'}); pp_drill: 'PTH\;NPTH\;Via',
// GEN.selRefFeat({layers:outline_ref,use:'filter',mode:'cover'}); pp_remove_mark: 'Remove'
// GEN.selReverse(); }
// if ( GEN.getSelectCount() > 0 ){GEN.selDelete() }; })
// GEN.affectedLayer({affected:'yes',mode:'single',layer:layer,clear_before:'yes'}); GEN.deleteLayer({job:job,layer:del_layer})
// GEN.selRefFeat({layers:tmp_work_layer,use:'filter',mode:'include'}); // 将辅助层2上的物件move至对应的内层负片层
// if ( GEN.getSelectCount() > 0 ){GEN.selDelete() }; GEN.workLayer({name:tmp2,display_number:2,clear_before:'yes'})
// } GEN.selAllFeat()
// GEN.deleteLayer({job:job,layer:[outline_ref,tmp_work_layer]}); GEN.selCopyOther({dest:'layer_name',target_layer:layer,invert:'no',dx:0,dy:0,size:0})
} }
}) })
})
GEN.deleteLayer({job:job, layer:tmp_layers})
// 逐层分析内层负片层的物件,如存在小于200um的线,则将线宽优化至200um。 par.line_size
stepList.forEach(function(step){
GEN.openStep({job:job, name:step})
GEN.affectedLayer({affected:'no',mode:'all'}) GEN.affectedLayer({affected:'no',mode:'all'})
GEN.deleteLayer({job:job,layer:[outline_tmp]}) GEN.clearLayers()
GEN.selClearFeature()
n_layers.forEach(function(layer){
GEN.workLayer({name:layer,display_number:2,clear_before:'yes'})
var syms = GEN.getLayerSymsHist({job:job,step:step,layer:layer})
var change_syms = []
for(var key in syms){
var v = syms[key]
if(v.size && v.size < par.line_size){
change_syms.push(key)
}
}
GEN.selectByFilter({feat_types:"line", include_syms:change_syms.join(";")})
if(GEN.getSelectCount()>0){GEN.selDelete()}
})
GEN.closeStep()
}) })
GEN.deleteLayer({job:job, layer:tmp_layers})
// 保存 // 保存
if(/yes/ig.test(par.auto_save)){ if(/yes/ig.test(par.auto_save)){
...@@ -199,6 +239,7 @@ try { ...@@ -199,6 +239,7 @@ try {
} else { } else {
GEN.checkInout({job:job,mode:"in"}) GEN.checkInout({job:job,mode:"in"})
} }
console.log("======================== JTG_INN_neg_isolation_pad_optimization_aim end");
if (mode === "aimdfm") { if (mode === "aimdfm") {
$.QDfm.updateRow({ $.QDfm.updateRow({
table: "pdm_aimdfm_task", table: "pdm_aimdfm_task",
...@@ -230,6 +271,4 @@ try { ...@@ -230,6 +271,4 @@ try {
Status = 'error'; Status = 'error';
resultData.push({type: "error", title: "脚本执行出错!", detail: [{desc: _.toString(e)}]}); resultData.push({type: "error", title: "脚本执行出错!", detail: [{desc: _.toString(e)}]});
return (mode === "aimdfm") ? {status: Status, result_data: resultData} : "Error"; return (mode === "aimdfm") ? {status: Status, result_data: resultData} : "Error";
} }
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment