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

scott

parent b22f98b8
......@@ -137,7 +137,6 @@ var resultData = [];
var ALL = {}
var Omatrix = {};
try {
console.log("=============================================>anaysis_start");
var par = PAR;
var vc_src_01005_pad_result = par.vc_src_01005_pad_result
......@@ -152,7 +151,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({ result_severity: "analysis start" })
script_info({ msg: "analysis start" })
script_info({ progress: 65 })
var pcs_step = par.pcs_step == "" ? "cad" : par.pcs_step;
var array_step = par.array_step == "" ? "stp" : par.array_step;
......@@ -163,7 +162,9 @@ try {
if(step_list.indexOf(pcs_step)<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 })
var matrix = UPLOAD_LAYER_MATRIX({job:job}) // 分析matrix 获得分析后的matrix信息
GEN.openStep({job:job, name:pcs_step})
......@@ -219,7 +220,7 @@ try {
})
GEN.clearLayers()
script_info({ result_severity: "analysis drill_stack" })
script_info({ msg: "analysis drill_stack" })
script_info({ progress: 70 })
// * new 钻孔叠构
var cam_drill_structure = []
......@@ -361,7 +362,7 @@ try {
rmOutProfile({job:job, step:pcs_step})
}
GEN.closeStep()
script_info({ result_severity: "analysis panel_info" })
script_info({ msg: "analysis panel_info" })
script_info({ progress: 70 })
// * profile 和 拼版
var pandle_step = step_list.map(function(v){
......@@ -435,7 +436,7 @@ try {
}
ALL.gold_fingers = gold_fingers
GEN.closeStep()
script_info({ result_severity: "analysis some_job_info" })
script_info({ msg: "analysis some_job_info" })
var config = {
jobInfo: {
layer_count: ["signal","power_ground"], // Board属性的signal或者power_ground层
......@@ -515,7 +516,7 @@ try {
console.log("===================================> 5 save drill info")
script_info({ result_severity: "analysis drill_info" })
script_info({ msg: "analysis drill_info" })
script_info({ progress: 75 })
// * 获取pcs_step 和 array_step的钻孔信息
var drill_tool_info = {};
......@@ -530,6 +531,7 @@ try {
name:par.array_step
}
]
steps_drillinfo.forEach(function(item){
var type = item.type;
var step = item.name;
......@@ -537,7 +539,7 @@ try {
drillLayers.forEach(function(layer){
var layer = layer.name;
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}}
if(!drill_tool_info[layer]){
drill_tool_info[layer] = tool;
......@@ -639,7 +641,7 @@ try {
})
console.log("=============================> 6 set smd bga")
script_info({ result_severity: "analysis smd&bga" })
script_info({ msg: "analysis smd&bga" })
script_info({ progress: 80 })
var allStep = GEN.getStepList({job:job})
allStep.forEach(function(step){
......@@ -783,6 +785,7 @@ try {
jobid: JobId,
jobinfohash: {ATS_surface_area_base_on:"Card"}
})
var jobpath = GEN.getJobPath({job:job})
// if(GEN.GEN_TYPE == "genesis"){
// jobpath = GEN.getJobPath({job:job})
......@@ -790,7 +793,7 @@ try {
// jobpath = "/home/local_db/server_db/jobs/"+job
// }
mkPath(jobpath,["user","opcam","steps"])
script_info({ result_severity: "analysis signal" })
script_info({ msg: "analysis signal" })
script_info({ progress: 85 })
stepList.forEach(function(step){
GEN.openStep({ job: job, name: step })
......@@ -943,7 +946,7 @@ try {
if(par.erf){
tmpitem.erf = par.erf
}
script_info({ result_severity: "analysis run_signal_chk" })
script_info({ msg: "analysis run_signal_chk" })
createChklistAndRun({ // 创建checklist并运行
layers: signalLayers,
items: [tmpitem]
......@@ -1005,7 +1008,7 @@ try {
IKM.msg("export")
script_info({ result_severity: "analysis export" })
script_info({ msg: "analysis export" })
script_info({ progress: 95 })
// 导出
if(par.export_path != "" && par.export_mode != "" && par.export_submode != "" ){
......@@ -1132,6 +1135,26 @@ function ANALYSIS_STACKUP(props){
var matrix = GEN.getMatrix({job:job})
var layer_count = GEN.getLayerCount({job:job}) // !
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){
layer.odb_name = layer.name;
layer.name = layer.tl_name;
......@@ -1265,6 +1288,7 @@ function selCopyLayer(props){ // 拷贝选择的到辅助层
function save_job_info(props){ // 保存料号信息
var jobid = props.jobid;
var jobinfohash = props.jobinfohash;
Object.keys(jobinfohash).forEach(function(key){
var val = jobinfohash[key];
var value = db.query("",function(q){
......@@ -1274,7 +1298,6 @@ function save_job_info(props){ // 保存料号信息
where:{job_id:jobid, attr_name: key}
})
});
console.log("jobid:"+jobid+"==========dbjobvalue:" + val)
if(/done/ig.test(value) || !value){
db.query("",function(q){
return q.insertRow({
......@@ -2034,6 +2057,7 @@ function analysisDrill(par, step){
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("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 = ""
......@@ -2043,7 +2067,7 @@ function analysisDrill(par, step){
return /^r\d+/.test(item.symbol)
})
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)
}
......
......@@ -68,7 +68,7 @@ if (mode === "aimdfm") {
var Status = 'ok';
var resultData = [];
try {
script_info({ result_severity: "format start" })
script_info({ msg: "format start" })
script_info({ progress: 35 })
var par = PAR;
if(!par.hasOwnProperty("config_path") || par.config_path==""){
......@@ -229,7 +229,7 @@ try {
// 改名
script_info({ result_severity: "format rename" })
script_info({ msg: "format rename" })
script_info({ progress: 50 })
err = reName({job:job, matrix:after_sort_matrix, cfg:format_cfg})
if(err){throw err}
......@@ -290,7 +290,7 @@ try {
err = setDrill({job:job})
if(err){throw err}
script_info({ result_severity: "format create profile" })
script_info({ msg: "format create profile" })
script_info({ progress: 55 })
var all_layer = Object.keys(tmp_matrix)
// 没有outline层
......@@ -301,7 +301,7 @@ try {
GEN.openStep({job:job, name:tmp_step})
var now_profile = GEN.getProfile({job:job, step:tmp_step})
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.selAllFeat()
if(GEN.getSelectCount() > 0) {
......@@ -317,7 +317,7 @@ try {
}
var hasProfile = GEN.getProfile({job:job, step:tmp_step})
if(hasProfile.match(/\n/ig).length == 1){
script_info({ result_severity: "创建profile失败" })
script_info({ msg: "创建profile失败" })
throw "创建profile失败"
}
}
......@@ -336,7 +336,6 @@ try {
$.QDfm.updateRow({
table: "pdm_aimdfm_task",
data: {
result_severity: "format ok",
progress: 60
},
where: { id: $.task_id }
......@@ -669,7 +668,6 @@ function mergeLaser(props){ // 合并钻孔
function createOutline(props){
var profileRule = props.profileRule
console.log("----profileRule------->:" + _.toString(profileRule));
var job = props.job
var step = props.step
var matrix = GEN.getMatrix({job:job})
......@@ -683,16 +681,25 @@ function createOutline(props){
})
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 tmp = "drill_all";
if(GEN.isLayerExists({job:job, layer:tmp})) { GEN.deleteLayer({job:job, layer:tmp})}
GEN.openStep({job:job, name:step})
GEN.affectedLayer({affected:'yes',layer:drill_layer})
if(GEN.isLayerExists({job:job, layer:tmp})) { GEN.deleteLayer({job:job, layer:[tmp]})}
drill_layer.forEach(function(d_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.affectedLayer({affected:'no',mode:'all'})
})
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
if(outlines.length){
if( outlines.length){
......
......@@ -89,7 +89,7 @@ var resultData = [];
var import_info = [];
var inputState = [];
try {
script_info({ result_severity: "import start" })
script_info({ msg: "import start" })
var par = PAR;
// var db_path = db.query("",function(q){
// return q.selectValue({
......@@ -164,8 +164,8 @@ try {
} else {
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_fix_ill_polygon,value=yes,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")
// 将jobFile下的zip解压
decompression(jobFile[0].path, [])
......@@ -198,7 +198,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({ result_severity: "file error" })
script_info({ msg: "file error" })
throw "file error"}
var importOk = false; // 是否成功导入
......@@ -301,7 +301,7 @@ try {
GEN.COM("input_manual")
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 })
reNameStep(job)
if(/2171/.test(par.customer)){
......@@ -338,7 +338,7 @@ try {
}
})
}
GEN.closeStep()
GEN.checkInout({job:job,mode:"out"}) // 结束保存料号 关闭料号
GEN.saveJob({ job: job });
GEN.checkInout({job:job,mode:"in"})
......@@ -356,7 +356,7 @@ try {
import_html += "</table>"
// name type date user
resultData.push({type: "info",title:"导入资料列表",detail: [{ desc: import_html }] })
script_info({ result_severity: "import ok" })
script_info({ msg: "import ok" })
if (mode === "aimdfm") {
$.QDfm.updateRow({
table: "pdm_aimdfm_task",
......@@ -395,7 +395,6 @@ function delSameJob(props){
var job = props.job
var delSame = props.delSame
console.log("======================>delsame:"+ delSame);
if(GEN.isJobExists({job:job})){
if(/^yes$/ig.test(delSame)){
if(GEN.isJobOpen({job:job})){ GEN.closeJob({job:job}) }
......@@ -535,6 +534,7 @@ function script_info(props){ // result_severity progress
}
}
function decompression(path, zips) {
var files = fs.listDir(path)
var count = 0;
......
......@@ -679,6 +679,7 @@
GEN.COM("tools_set,layer="+layer+",thickness=0,user_params=,slots=by_length")
}
})
GEN.saveJob({ job: job });
}
}
]
......@@ -964,7 +965,6 @@
],
"mergerule" : {
profile:["silk_top"],
drill:["(\\d+)-(\\d+)\\.drl$","\\.d(\\d+)$"],
laser : {
tl_name: "drill($1)-($2)",
regs: ["(\\d+)-(\\d+)\\.drl$"]
......
......@@ -4,16 +4,22 @@ DESCRIPTION: ;
PARAMETER:
[
{
name : 'step',
title : '操作step',
type : 'LineEdit',
property : {tool_tip : '操作step,默认是net'},
name : 'ring_size',
title : 'ring大小',
type : 'IntLineEdit',
property : {tool_tip : 'ring大小'},
},
{
name : 'line_size',
title : '优化线径值',
type : 'IntLineEdit',
property : {tool_tip : '优化线径值'},
},
{
name : 'cutting_marign',
title : '切除profile外数值',
name : 'step_fliter',
title : 'Step过滤',
type : 'LineEdit',
property : {tool_tip : '切除profile外数值,默认是0.2mm'},
property : {tool_tip : 'unit'},
},
{
name : 'auto_save',
......@@ -30,16 +36,16 @@ PARAMETER:
]
VERSION_HISTORY:
V1.00 2020-04-20 Scott Sun
V1.00 2020-04-28 Scott Sun
1.新版本
HELP:
<html><body bgcolor="#DDECFE">
<font size="3" color="#003DB2"><p>功能简介</p></font>
<p> 删除板外 </p>
<p> 隔离环优化 </p>
<br>
<font size="3" color="#003DB2"><p>参数配置</p></font>
<p> 切除值 </p>
<p> 配置 </p>
<br>
<font size="3" color="#003DB2"><p>注意事项</p></font>
<p> 无 </p>
......@@ -48,7 +54,10 @@ PARAMETER:
*/
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
console.log("==============================>删除板外");
console.log("==============================>JTG_INN_neg_isolation_pad_optimization_aim");
/* question
?
*/
// 引入模块 包
var $ = require('topcam.scriptfunc').argv();
var fs = require('fs');
......@@ -60,7 +69,7 @@ var GEN = $.gen;
var GUI = $.gui || {};
var Job = $.job || $.job_name;
var JobId = $.job_id;
var db = $.db || IKM.db
var db = $.db || IKM.db;
var PAR = {}
if ($.par) {
PAR = $.par
......@@ -87,108 +96,139 @@ var resultData = [];
try {
var par = PAR;
var default_par = {
step:"net",
cutting_marign: "0.2mm",
auto_save: "No",
var default_par = { // par默认参数?
step_fliter:"unit",
units: "mm",
auto_save: "no",
ring_size:200,
line_size:200
}
for(var key in default_par){ // 设置默认属性
if (!par.hasOwnProperty(key) || par[key] == ""){
par[key] = default_par[key]
}
}
par.cutting_marign = parseFloat(par.cutting_marign)
if(!/^(([^0][0-9]+|0)\.([0-9]{1,2})$)|^([^0][0-9]+|0)$/ig.test(par.cutting_marign)){throw "cutting_marign failed"}
var cutting_marign_symbol = "r" + String(par.cutting_marign * 1000)
var par_props = ["ring_size","line_size"] // par的必填参数
par_props.forEach(function(v){
if(par[v] == ""){throw "par props "+v+" err"}
})
if(_.isEmpty(Job)){throw "参数Job不存在"}
var job = "08ha0010hq0a0"
var 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" }
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 board_layers = Object.keys(matrix).reduce(function(a,b){
if(matrix[b].context == "board"){
a.push(b)
}
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
var n_layers = Object.keys(matrix).sort(function(a,b){return matrix[a].row - matrix[b].row})
.filter(function(key){
var val = matrix[key]
return val.layer_type == "power_ground" && val.polarity == "negative" && val.side == "inner" && val.context == "board"
})
// 影响board层
var steplist = GEN.getStepList({job:job})
steplist = steplist.filter(function(v){
var tmpreg = new RegExp(par.step,"ig")
return tmpreg.test(v)
})
steplist.forEach(function(step){
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")
if(n_layers.length == 0){throw "can not find power_ground negative layer"}
var tmp1 = "tmp_1", tmp2 = "tmp_2"
var tmp_layers = [tmp1,tmp2];
stepList.forEach(function(step){
GEN.openStep({job:job, name:step})
GEN.units({type:par.units})
GEN.affectedLayer({affected:'no',mode:'all'})
GEN.clearLayers()
// 切除profile以外0.2mm(cutting_marign)物件
board_layers.forEach(function(layer){
if (outline_layer.indexOf(layer)<0){
GEN.affectedLayer({affected:"no", mode: "all"})
// GEN.workLayer({name:layer,display_number:1,clear_before:'yes'});
// GEN.clipArea({layers_mode:'affected_layers',area:'profile',inout:'outside',margin:0,contour_cut:'no'});
n_layers.forEach(function(layer){
// 逐层制作,过滤选出 rect*,r*,s*,oval 属性的物件并移动到辅助层1;
tmp_layers.forEach(function(v){
if(GEN.isLayerExists({job:job,layer:v})){GEN.deleteLayer({job:job, layer:v})}
GEN.createLayer({job:job, layer:v})
})
GEN.workLayer({name:layer,display_number:2,clear_before:'yes'})
GEN.selectByFilter({profile:"out"})
// GEN.selRefFeat({layers:outline_tmp,use:'filter',mode:'include'});
if(GEN.getSelectCount()>0){GEN.selDelete()}
GEN.COM("clip_area_strt")
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.selectByFilter({include_syms:"rect*;r*;s*;oval*"})
if(GEN.getSelectCount()>0){
GEN.selMoveOther({target_layer:tmp1,invert:'no',dx:0,dy:0,size:0})
// 复制辅助层1至辅助层2,将辅助层1上的物件修改为r1.2;
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';
// var tmp_work_layer = '_tmp_work_layer';
// if(GEN.isLayerExists({job:job,layer:tmp_work_layer})){
// GEN.deleteLayer({job:job,layer:[tmp_work_layer],step:step})
// }
// if(GEN.isLayerExists({job:job,layer:outline_ref})){
// GEN.deleteLayer({job:job,layer:[outline_ref],step:step})
// }
// GEN.createLayer({job:job,layer:tmp_work_layer,conext:'misc',type:'document',delete_exists:"yes"})
// GEN.createLayer({job:job,layer:outline_ref,conext:'misc',type:'document',delete_exists:"yes"})
// GEN.workLayer({name:outline_tmp,display_number:2,clear_before:'yes'})
// GEN.selCopyOther({dest:'layer_name',target_layer:outline_ref,invert:'no',dx:0,dy:0,size:0})
// GEN.affectedLayer({affected:'yes',layer:[outline_ref],clear_before:'yes'});
// GEN.COM('sel_resize',{size:200,corner_ctl:'no'});
// GEN.workLayer({name:layer,display_number:2,clear_before:'yes'})
// GEN.selRefFeat({layers:outline_ref,use:'filter',mode:'cover'});
// if ( GEN.getSelectCount() > 0 ) {
// GEN.selCopyOther({dest:'layer_name',target_layer:tmp_work_layer,invert:'no',dx:0,dy:0,size:0});
// GEN.affectedLayer({affected:'yes',mode:'single',layer:tmp_work_layer,clear_before:'yes'});
// GEN.COM('sel_all_feat');
// GEN.selChangeSym({symbol:'r1'});
// GEN.affectedLayer({affected:'yes',mode:'single',layer:outline_ref,clear_before:'yes'});
// GEN.COM('sel_all_feat');
// GEN.selChangeSym({symbol:'r2'});
// GEN.affectedLayer({affected:'yes',mode:'single',layer:tmp_work_layer,clear_before:'yes'});
// GEN.selRefFeat({layers:outline_ref,use:'filter',mode:'cover'});
// GEN.selReverse();
// if ( GEN.getSelectCount() > 0 ){GEN.selDelete() };
// GEN.affectedLayer({affected:'yes',mode:'single',layer:layer,clear_before:'yes'});
// GEN.selRefFeat({layers:tmp_work_layer,use:'filter',mode:'include'});
// if ( GEN.getSelectCount() > 0 ){GEN.selDelete() };
// }
// GEN.deleteLayer({job:job,layer:[outline_ref,tmp_work_layer]});
if(GEN.isLayerExists({job:job, layer:"pth"})){
GEN.workLayer({name:"pth",display_number:2,clear_before:'yes'})
GEN.selRefFeat({layers:tmp1,use:'filter',mode:'touch'})
// copy这些选中的孔到辅助层2,resize设置为400um; par.ring_size
if(GEN.getSelectCount()>0){
GEN.selCopyOther({dest:'layer_name',target_layer:tmp2,invert:'no',dx:0,dy:0,size:par.ring_size})
}
}
if(GEN.isLayerExists({job:job, layer:"np"})){
GEN.workLayer({name:"np",display_number:2,clear_before:'yes'})
GEN.selRefFeat({layers:tmp1,use:'filter',mode:'touch'})
// copy这些选中的孔到辅助层2,resize设置为400um; par.ring_size
if(GEN.getSelectCount()>0){
GEN.selCopyOther({dest:'layer_name',target_layer:tmp2,invert:'no',dx:0,dy:0,size:par.ring_size + 50})
}
}
GEN.workLayer({name:tmp2,display_number:2,clear_before:'yes'})
var del_layer = tmp2 + "+++"
GEN.runSingleDfm({
chklist: 'valor_dfm_nfpr',
params: {
pp_layer: tmp2,
pp_delete: 'Duplicate',
pp_work: 'Features',
pp_drill: 'PTH\;NPTH\;Via',
pp_remove_mark: 'Remove'
}
})
GEN.deleteLayer({job:job,layer:del_layer})
// 将辅助层2上的物件move至对应的内层负片层
GEN.workLayer({name:tmp2,display_number:2,clear_before:'yes'})
GEN.selAllFeat()
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.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)){
......@@ -199,6 +239,7 @@ try {
} else {
GEN.checkInout({job:job,mode:"in"})
}
console.log("======================== JTG_INN_neg_isolation_pad_optimization_aim end");
if (mode === "aimdfm") {
$.QDfm.updateRow({
table: "pdm_aimdfm_task",
......@@ -231,5 +272,3 @@ try {
resultData.push({type: "error", title: "脚本执行出错!", detail: [{desc: _.toString(e)}]});
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