Commit 537294e3 authored by Scott Sun's avatar Scott Sun

s

parent 1ce59e4e
......@@ -60,7 +60,7 @@
* 比对原稿
* 产生mirror step并link层别 todo
## Array流程
## Array流程 undo
* 创建step
* step拼版
* 制作array outline并倒R角
......@@ -68,4 +68,58 @@
* 更新原稿折断边
* 添加折断边辅助孔/光学点
* 内层折断边铺铜
* 检查array资料不可进pcs
\ No newline at end of file
* 检查array资料不可进pcs
## Panel流程
## 外层流程
* 检查外层是否有异常(取消)
* 去除成型线外内容(公共脚本)
* 矫正pad ok
* 转铜皮(公共脚本)
* 备份原稿pad层 ok
* 原稿预分析 ok
* 外层补偿 ok
* Ring优化 ok
* 优化削铜(公共脚本)
* 补铜桥 ok
* 外层削间距 ok
* 外层削smd ok
* 外层添加泪滴 ok
* 外层补细丝 ok
* 蚀刻文字处理 ok
* 加logo标记
* 外层分析 ok
* 网络比对 ok
* 比对原稿 (公共脚本)
* 折断边制作 todo
* 板框内容确认 (手动确认)
## 防焊流程
* 去除成型线外内容
* 参考外层制作开窗
* 阻焊优化
* SM define处理
* 防垂流
* 塞孔制作
* 比对原稿
* 制作挡墨片
* 制作Fi验孔
* 折断边制作
* 板框内容确认
* 制作重工底片
## 文字流程
* 去除成型线外内容
* 建立辅助参考层
* 字框分离
* 字符线宽字高优化
* 文字框处理
* 合并文字和文字框
* 辅助层套文字
* 加logo标记
* 文字分析
* 比对原稿
* 核对客户料号和厂内料号 版本号
* 折断边检查
* 板框内容确认
\ No newline at end of file
......@@ -325,7 +325,6 @@ try {
GEN.deleteLayer({job:job,layer:sm_layer+'_flatten_panel'});
GEN.deleteLayer({job:job,layer:dc_layer+'_tmp'});
// 保存
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") {
......@@ -772,7 +771,6 @@ function NewGUI (gui) {
}
}
function resizeBox(box){
box.xmin = Number(box.xmin);
box.xmax = Number(box.xmax);
......@@ -797,4 +795,15 @@ function profile2Polygon(feat) {
}
})
return info
}
function exportDrl(props) {
var job = props.job;
var step = props.step;
var layer = props.layer;
GEN.COM("output_layer_reset")
GEN.COM("output_layer_set,layer="+layer+",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")
GEN.COM("ncset_create,name=_1_tmp__+++_")
GEN.COM("ncset_cur,job="+job+",step="+step+",layer="+layer+",ncset=")
}
\ No newline at end of file
......@@ -66,7 +66,7 @@ PARAMETER:
<font size="3" color="#003DB2"><p>注意事项</p></font>
<p> 无 </p>
<br>
</body></html>
</body></html>
*/
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
......@@ -538,8 +538,8 @@ function convert_new_program(info){
})
head_tmp.sort(function(a,b){
var a_tmp_value = (Math.abs(a.value-3.176)<=0.001 || Math.abs(a.value-3.151)<=0.001 || Math.abs(a.value-0.699)<=0.001) ? -a.value : a.value;
var b_tmp_value = (Math.abs(a.value-3.176)<=0.001 || Math.abs(a.value-3.151)<=0.001 || Math.abs(a.value-0.699)<=0.001) ? -b.value : b.value;
var a_tmp_value = (Math.abs(a.value-3.176)<=0.001 || Math.abs(a.value-3.151)<=0.001 || Math.abs(a.value-0.699)<=0.0001) ? -a.value : a.value;
var b_tmp_value = (Math.abs(a.value-3.176)<=0.001 || Math.abs(a.value-3.151)<=0.001 || Math.abs(a.value-0.699)<=0.0001) ? -b.value : b.value;
if(a_tmp_value >= 0){
if(/\.\d\d1$/.test(a_tmp_value)){
a_tmp_value = a_tmp_value + 10000;
......
......@@ -36,13 +36,30 @@ PARAMETER:
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>
*/
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
......
/*
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 = [];
try {
var par = PAR;
var default_par = {
step: "edit",
auto_save: "No",
units:"mm"
}
for(var key in default_par){ // 设置默认属性
if (!par.hasOwnProperty(key) || par[key] == ""){
par[key] = default_par[key]
}
}
if(_.isEmpty(Job)){throw "参数Job不存在"}
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"});
}
var steplist = GEN.getStepList({job:job})
steplist = steplist.filter(function(v){
var tmpreg = new RegExp(par.step,"ig")
return tmpreg.test(v)
})
var drl = "drl";
var outLayers = [];
var matrix = GEN.getMatrix({job:job})
for (var key in matrix) {
var layer_info = matrix[key];
if(layer_info.context == "board" && layer_info.layer_type == "signal" && /top|bot/.test(layer_info.side)){
outLayers.push(key)
}
}
steplist.forEach(function(step) {
GEN.openStep({job:job, name:step})
GEN.units({type:"mm"})
GEN.affectedLayer({affected:'no',mode:'all'})
GEN.COM("chklist_single",{action:'valor_dfm_td',show:'yes'});
GEN.COM("chklist_cupd",{chklist:'valor_dfm_td',nact:1,
params:"((pp_layer=.type=signal&side=top|bottom)(pp_type=Straight)(pp_ar=152.4)(pp_spacing=101.6)(pp_min_hole=0)(pp_max_hole=5080)(pp_hole_spacing=203.2)(pp_del_old=yes))",
mode:'regular'});
GEN.COM("chklist_run",{chklist:'valor_dfm_td',nact:1,area:'profile'});
GEN.COM("chklist_res_show",{chklist:'valor_dfm_td',nact:1,'x':0,'y':0,w:0,h:0});
// GEN.COM("chklist_close",{chklist:'valor_dfm_td',mode:'hide'});
})
// 保存
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";
}
/*
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 = [];
try {
var par = PAR;
var default_par = {
step: "edit",
auto_save: "No",
}
for(var key in default_par){ // 设置默认属性
if (!par.hasOwnProperty(key) || par[key] == ""){
par[key] = default_par[key]
}
}
if(_.isEmpty(Job)){throw "参数Job不存在"}
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"});
}
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"})
if(GEN.isChklistExists({job:job,step:step,chklist:'checklist'})){
GEN.COM("chklist_delete,chklist=checklist")
}
GEN.COM("chklist_create,chklist=checklist")
GEN.COM("chklist_show,chklist=checklist")
GEN.COM("chklist_single,action=valor_analysis_signal,show=yes")
GEN.COM("chklist_erf,chklist=valor_analysis_signal,nact=1,erf=Outer (Mils)")
GEN.COM("chklist_pclear")
GEN.COM("chklist_cupd,chklist=valor_analysis_signal,nact=1,params=((pp_layer=.type=signal|mixed&side=top|bottom)(pp_spacing=508)(pp_r2c=635)(pp_d2c=355.6)(pp_sliver=254)(pp_min_pad_overlap=127)(pp_tests=Spacing\;Drill\;Rout\;Size\;Sliver\;Stubs\;Center\;SMD\;Bottleneck\;Pad Connection Check)(pp_selected=All)(pp_check_missing_pads_for_drills=Yes)(pp_use_compensated_rout=Yes)(pp_sm_spacing=Yes)),mode=regular")
GEN.COM("chklist_pcopy,chklist=valor_analysis_signal,nact=1")
GEN.COM("chklist_ppaste,chklist=checklist,row=0")
GEN.COM("chklist_close,chklist=valor_analysis_signal,mode=hide")
GEN.COM("chklist_cupd,chklist=checklist,nact=1,params=((pp_layer=.type=signal|mixed&side=top|bottom)(pp_spacing=508)(pp_r2c=635)(pp_d2c=355.6)(pp_sliver=254)(pp_min_pad_overlap=127)(pp_tests=Spacing\;Drill\;Rout\;Size\;Sliver\;Stubs\;Center\;SMD\;Bottleneck\;Pad Connection Check)(pp_selected=All)(pp_check_missing_pads_for_drills=Yes)(pp_use_compensated_rout=Yes)(pp_sm_spacing=Yes)),mode=regular")
GEN.COM("chklist_run,chklist=checklist,nact=1,area=local")
GEN.COM("chklist_res_show,chklist=checklist,nact=1,x=0,y=0,w=0,h=0")
})
// 保存
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";
}
/*
NAME:
DESCRIPTION: 备份原稿pad,将外层的pad拷贝出来;
PARAMETER:
[
{
name : 'step',
title : 'step',
type : 'LineEdit',
property : {tool_tip : '目标step,默认是orig'},
},
{
name : 'bk_suffix',
title : '备份层后缀',
type : 'LineEdit',
property : {tool_tip : '目标step,默认是_pad '},
},
{
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> 备份原稿pad </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 = [];
try {
var par = PAR;
var default_par = {
step: "orig$",
bk_suffix:"_pad",
auto_save: "No",
units:"mm"
}
for(var key in default_par){ // 设置默认属性
if (!par.hasOwnProperty(key) || par[key] == ""){
par[key] = default_par[key]
}
}
if(_.isEmpty(Job)){throw "参数Job不存在"}
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"});
}
var steplist = GEN.getStepList({job:job})
steplist = steplist.filter(function(v){
var tmpreg = new RegExp(par.step,"ig")
return tmpreg.test(v)
})
var outLayers = [];
var matrix = GEN.getMatrix({job:job})
for (var key in matrix) {
var layer_info = matrix[key];
if(layer_info.context == "board" && layer_info.layer_type == "signal" && /top|bot/.test(layer_info.side)){
outLayers.push(key)
}
}
steplist.forEach(function(step) {
GEN.openStep({job:job, name:step})
GEN.units({type:"mm"})
GEN.affectedLayer({affected:'no',mode:'all'})
outLayers.forEach(function(v){
GEN.workLayer({name:v,display_number:2,clear_before:'yes'})
// 选择pad
GEN.selectByFilter({feat_types:"pad"})
if(GEN.getSelectCount() > 0) {
var bk_layer = v + par.bk_suffix;
// 如果有pad 判断有没有xxx_pad
if(GEN.isLayerExists({job:job, layer:bk_layer})){
GEN.workLayer({name:bk_layer,display_number:2,clear_before:'yes'})
GEN.selAllFeat()
if(GEN.getSelectCount() > 0) { GEN.selDelete() }
GEN.workLayer({name:v,display_number:2,clear_before:'yes'})
GEN.selectByFilter({feat_types:"pad"})
}
GEN.selCopyOther({dest:'layer_name',target_layer:bk_layer,invert:'no',dx:0,dy:0,size:0})
}
})
})
// 保存
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";
}
/*
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 = [];
try {
var par = PAR;
var default_par = {
step: "edit",
auto_save: "No",
}
for(var key in default_par){ // 设置默认属性
if (!par.hasOwnProperty(key) || par[key] == ""){
par[key] = default_par[key]
}
}
if(_.isEmpty(Job)){throw "参数Job不存在"}
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"});
}
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"})
if(GEN.isChklistExists({job:job,step:step,chklist:'checklist'})){
GEN.COM("chklist_delete,chklist=checklist")
}
GEN.COM("chklist_create,chklist=checklist")
GEN.COM("chklist_show,chklist=checklist")
GEN.COM("chklist_single,action=valor_analysis_signal,show=yes")
GEN.COM("chklist_erf,chklist=valor_analysis_signal,nact=1,erf=Inner (Mils)")
GEN.COM("chklist_pclear")
GEN.COM("chklist_cupd,chklist=valor_analysis_signal,nact=1,params=((pp_layer=.type=signal|mixed&side=inner)(pp_spacing=203)(pp_r2c=381)(pp_d2c=356)(pp_sliver=254)(pp_min_pad_overlap=127)(pp_tests=Spacing\;Drill\;Rout\;Size\;Sliver\;Stubs\;Center\;SMD\;Bottleneck\;Pad Connection Check)(pp_selected=All)(pp_check_missing_pads_for_drills=No)(pp_use_compensated_rout=No)(pp_sm_spacing=No)),mode=regular")
GEN.COM("chklist_pcopy,chklist=valor_analysis_signal,nact=1")
GEN.COM("chklist_ppaste,chklist=checklist,row=0")
GEN.COM("chklist_close,chklist=valor_analysis_signal,mode=hide")
GEN.COM("chklist_cupd,chklist=checklist,nact=1,params=((pp_layer=.type=signal|mixed&side=inner)(pp_spacing=203)(pp_r2c=381)(pp_d2c=356)(pp_sliver=254)(pp_min_pad_overlap=127)(pp_tests=Spacing\;Drill\;Rout\;Size\;Sliver\;Stubs\;Center\;SMD\;Bottleneck\;Pad Connection Check)(pp_selected=All)(pp_check_missing_pads_for_drills=No)(pp_use_compensated_rout=No)(pp_sm_spacing=No)),mode=regular")
GEN.COM("chklist_run,chklist=checklist,nact=1,area=local")
GEN.COM("chklist_res_show,chklist=checklist,nact=1,x=0,y=0,w=0,h=0")
})
// 保存
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";
}
/*
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 = [];
try {
var par = PAR;
var default_par = {
step: "edit",
auto_save: "No",
units:"mm"
}
for(var key in default_par){ // 设置默认属性
if (!par.hasOwnProperty(key) || par[key] == ""){
par[key] = default_par[key]
}
}
if(_.isEmpty(Job)){throw "参数Job不存在"}
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"});
}
var steplist = GEN.getStepList({job:job})
steplist = steplist.filter(function(v){
var tmpreg = new RegExp(par.step,"ig")
return tmpreg.test(v)
})
var outLayers = [];
var matrix = GEN.getMatrix({job:job})
for (var key in matrix) {
var layer_info = matrix[key];
if(layer_info.context == "board" && layer_info.layer_type == "signal" && /top|bot/.test(layer_info.side)){
outLayers.push(key)
}
}
var scale_lengthy = 5; // 长宽最短距离 mm
var scale_lengthx = 3; // 长宽最短距离 mm
steplist.forEach(function(step) {
GEN.openStep({job:job, name:step})
GEN.units({type:"mm"})
GEN.affectedLayer({affected:'no',mode:'all'})
outLayers.forEach(function(layer){
GEN.workLayer({name:layer,display_number:2,clear_before:'yes'})
var tmp = layer + "_tmp";
if(GEN.isLayerExists({job:job,layer:tmp})){GEN.deleteLayer({job:job,layer:tmp})}
// 手动选择蚀刻字
IKM.msg("将暂停,请选择需要优化的蚀刻字")
GEN.PAUSE("please select etc fonts")
if(GEN.getSelectCount() > 0) {
GEN.selMoveOther({target_layer:tmp,invert:'no',dx:0,dy:0,size:0})
GEN.workLayer({name:tmp,display_number:2,clear_before:'yes'})
// 获取最小蚀刻大小
var etc_size = 650;
// 缩小最小蚀刻大小
var flag = true;
var count = 0;
while (flag) {
var tmp_2 = tmp + "2";
if(GEN.isLayerExists({job:job,layer:tmp_2})){GEN.deleteLayer({job:job,layer:tmp_2})}
GEN.selCopyOther({dest:'layer_name',target_layer:tmp_2,invert:'no',dx:0,dy:0,size:-etc_size})
GEN.selRefFeat({layers:tmp_2, use:"filter",mode:"disjoint"})
count++;
if(GEN.getSelectCount() > 0 ){
GEN.selResize({size:20});
} else {
flag = false
}
if(count >= 10){flag = false}
GEN.deleteLayer({job:job,layer:tmp_2})
}
var features = GEN.getFeatures({job:job, step:step, layer:tmp, surface:1,units:"mm"})
features.forEach(function(item){
if(item.feats){
var surface_data = profile2Polygon(item.feats)
var limits = polygonLimits(surface_data);
// 根据limits信息将文字放大
var x_center_k = 1;
var y_center_k = 1;
var x_center = Number(limits.xmin) + limits.xsize/2;
if(limits.xsize < scale_lengthx){ x_center_k = scale_lengthx/limits.xsize}
var y_center = Number(limits.ymin) + limits.ysize/2;
if(limits.ysize < scale_lengthy){ y_center_k = scale_lengthy/limits.ysize}
GEN.selLayerFeat({layer:tmp, index:item.index,operation:"select"})
if(GEN.getSelectCount() > 0){
GEN.selTransform({mode:'anchor',oper:'scale',x_anchor:x_center,y_anchor:y_center,x_scale:x_center_k,y_scale:y_center_k})
}
}
})
GEN.workLayer({name:tmp,display_number:2,clear_before:'yes'})
GEN.selMoveOther({target_layer:layer,invert:'no',dx:0,dy:0,size:0})
GEN.deleteLayer({job:job, layer:tmp})
}
})
})
// 保存
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";
}
function profile2Polygon(feat) {
var info = [];
feat.forEach(function(v){
if (/^#O. ([\S]+) ([\S]+)/.test(v)) {
info.push({
x: RegExp.$1 - 0,
y: RegExp.$2 - 0
})
}
})
return info
}
function polygonLimits(par) {
var tmpx = par.map(function(v){return v.x}).sort(function(a,b){return a-b})
var xmin = tmpx[0]
var xmax = tmpx[tmpx.length - 1]
var tmpy = par.map(function(v){return v.y}).sort(function(a,b){return a-b})
var ymin = tmpy[0]
var ymax = tmpy[tmpy.length - 1]
var xsize = xmax - xmin;
var ysize = ymax - ymin;
return {xmin:xmin, xmax:xmax, ymin:ymin, ymax:ymax, xsize:xsize, ysize:ysize};
}
\ No newline at end of file
/*
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 = [];
try {
var par = PAR;
var default_par = {
step: "edit",
auto_save: "No",
}
for(var key in default_par){ // 设置默认属性
if (!par.hasOwnProperty(key) || par[key] == ""){
par[key] = default_par[key]
}
}
if(_.isEmpty(Job)){throw "参数Job不存在"}
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"});
}
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"})
if(GEN.isChklistExists({job:job,step:step,chklist:'checklist'})){
GEN.COM("chklist_delete,chklist=checklist")
}
GEN.COM("chklist_create,chklist=checklist")
GEN.COM("chklist_show,chklist=checklist")
GEN.COM("chklist_single,action=valor_analysis_signal,show=yes")
GEN.COM("chklist_erf,chklist=valor_analysis_signal,nact=1,erf=Outer (Mils)")
GEN.COM("chklist_pclear")
GEN.COM("chklist_cupd,chklist=valor_analysis_signal,nact=1,params=((pp_layer=.type=signal|mixed&side=top|bottom)(pp_spacing=508)(pp_r2c=635)(pp_d2c=355.6)(pp_sliver=254)(pp_min_pad_overlap=127)(pp_tests=Spacing\;Drill\;Rout\;Size\;Sliver\;Stubs\;Center\;SMD\;Bottleneck\;Pad Connection Check)(pp_selected=All)(pp_check_missing_pads_for_drills=Yes)(pp_use_compensated_rout=Yes)(pp_sm_spacing=Yes)),mode=regular")
GEN.COM("chklist_pcopy,chklist=valor_analysis_signal,nact=1")
GEN.COM("chklist_ppaste,chklist=checklist,row=0")
GEN.COM("chklist_close,chklist=valor_analysis_signal,mode=hide")
GEN.COM("chklist_cupd,chklist=checklist,nact=1,params=((pp_layer=.type=signal|mixed&side=top|bottom)(pp_spacing=508)(pp_r2c=635)(pp_d2c=355.6)(pp_sliver=254)(pp_min_pad_overlap=127)(pp_tests=Spacing\;Drill\;Rout\;Size\;Sliver\;Stubs\;Center\;SMD\;Bottleneck\;Pad Connection Check)(pp_selected=All)(pp_check_missing_pads_for_drills=Yes)(pp_use_compensated_rout=Yes)(pp_sm_spacing=Yes)),mode=regular")
GEN.COM("chklist_run,chklist=checklist,nact=1,area=local")
GEN.COM("chklist_res_show,chklist=checklist,nact=1,x=0,y=0,w=0,h=0")
})
// 保存
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";
}
/*
NAME:
DESCRIPTION: 矫正pad;
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> 矫正pad </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 = [];
try {
var par = PAR;
var default_par = {
step: "edit",
auto_save: "No",
units:"mm"
}
for(var key in default_par){ // 设置默认属性
if (!par.hasOwnProperty(key) || par[key] == ""){
par[key] = default_par[key]
}
}
if(_.isEmpty(Job)){throw "参数Job不存在"}
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"});
}
var steplist = GEN.getStepList({job:job})
steplist = steplist.filter(function(v){
var tmpreg = new RegExp(par.step,"ig")
return tmpreg.test(v)
})
var drl = "drl";
var outLayers = [];
var matrix = GEN.getMatrix({job:job})
for (var key in matrix) {
var layer_info = matrix[key];
if(layer_info.context == "board" && layer_info.layer_type == "signal" && /top|bot/.test(layer_info.side)){
outLayers.push(key)
}
}
steplist.forEach(function(step) {
GEN.openStep({job:job, name:step})
GEN.units({type:"mm"})
GEN.affectedLayer({affected:'no',mode:'all'})
if(GEN.isLayerExists({job:job, layer:drl})){
var tmpchk = "pad_snap"
if(GEN.isChklistExists({job:job,step:step,chklist:tmpchk})){
GEN.COM("chklist_delete,chklist="+tmpchk)
}
GEN.COM("chklist_create,chklist="+tmpchk)
GEN.COM("chklist_show,chklist="+tmpchk)
GEN.COM("chklist_single,action=valor_dfm_pad_snap,show=yes")
GEN.COM("chklist_pclear")
GEN.COM("chklist_cupd,chklist=valor_dfm_pad_snap,nact=1,params=((pp_layer="+drl+")(pp_ref_layer=.affected)(pp_max_snapping=50)),mode=regular") // (pp_ref_layer=lyr1)
GEN.COM("chklist_pcopy,chklist=valor_dfm_pad_snap,nact=1")
GEN.COM("chklist_close,chklist=valor_dfm_pad_snap,mode=hide")
GEN.COM("chklist_ppaste,chklist="+tmpchk+",row=0")
GEN.workLayer({name:drl,display_number:2,clear_before:'yes'})
GEN.affectedLayer({affected:'no',mode:'all'})
GEN.affectedLayer({affected:'yes',layer:outLayers})
GEN.chklistRun({chklist:tmpchk})
GEN.units({ type: par.units }); //单位初始化
}
GEN.affectedLayer({affected:'no',mode:'all'})
})
// 保存
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";
}
/*
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 = [];
try {
var par = PAR;
var default_par = {
step: "edit",
auto_save: "No",
units:"mm"
}
for(var key in default_par){ // 设置默认属性
if (!par.hasOwnProperty(key) || par[key] == ""){
par[key] = default_par[key]
}
}
if(_.isEmpty(Job)){throw "参数Job不存在"}
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"});
}
var steplist = GEN.getStepList({job:job})
steplist = steplist.filter(function(v){
var tmpreg = new RegExp(par.step,"ig")
return tmpreg.test(v)
})
var drl = "drl";
var outLayers = [];
var matrix = GEN.getMatrix({job:job})
for (var key in matrix) {
var layer_info = matrix[key];
if(layer_info.context == "board" && layer_info.layer_type == "signal" && /top|bot/.test(layer_info.side)){
outLayers.push(key)
}
}
steplist.forEach(function(step) {
GEN.openStep({job:job, name:step})
GEN.units({type:"mm"})
GEN.affectedLayer({affected:'no',mode:'all'})
GEN.COM("chklist_single,action=valor_dfm_sigopt,show=yes")
GEN.COM("chklist_erf,chklist=valor_dfm_sigopt,nact=1,erf=Outer Shave")
GEN.COM("chklist_cupd,chklist=valor_dfm_sigopt,nact=1,params=((pp_layer=.type=signal&side=top|bottom)(pp_min_pth_ar=150)(pp_opt_pth_ar=150)(pp_min_via_ar=125)(pp_opt_via_ar=125)(pp_min_microvia_ar=0)(pp_opt_microvia_ar=0)(pp_min_spacing=71)(pp_opt_spacing=75)(pp_min_p2p_spacing=71)(pp_opt_p2p_spacing=75)(pp_min_line=71)(pp_opt_line=75)(pp_nd_percent=25)(pp_abs_min_line=70)(pp_min_pth2c=150)(pp_selected=All)(pp_work_on=Pads)(pp_modification=Shave)),mode=regular")
GEN.COM("chklist_run,chklist=valor_dfm_sigopt,nact=1,area=profile")
})
// 保存
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";
}
/*
NAME:
DESCRIPTION: 削SMD;
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> 削SMD </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 = [];
try {
var par = PAR;
var default_par = {
step: "edit",
auto_save: "No",
units:"mm"
}
for(var key in default_par){ // 设置默认属性
if (!par.hasOwnProperty(key) || par[key] == ""){
par[key] = default_par[key]
}
}
if(_.isEmpty(Job)){throw "参数Job不存在"}
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"});
}
var steplist = GEN.getStepList({job:job})
steplist = steplist.filter(function(v){
var tmpreg = new RegExp(par.step,"ig")
return tmpreg.test(v)
})
var drl = "drl";
var outLayers = [];
var matrix = GEN.getMatrix({job:job})
for (var key in matrix) {
var layer_info = matrix[key];
if(layer_info.context == "board" && layer_info.layer_type == "signal" && /top|bot/.test(layer_info.side)){
outLayers.push(key)
}
}
steplist.forEach(function(step) {
GEN.openStep({job:job, name:step})
GEN.units({type:"mm"})
GEN.affectedLayer({affected:'no',mode:'all'})
GEN.COM("chklist_single,action=valor_dfm_sigopt,show=yes")
GEN.COM("chklist_erf,chklist=valor_dfm_sigopt,nact=1,erf=Outer Shave")
GEN.COM("chklist_cupd,chklist=valor_dfm_sigopt,nact=1,params=((pp_layer=.type=signal&side=top|bottom)(pp_min_pth_ar=150)(pp_opt_pth_ar=150)(pp_min_via_ar=125)(pp_opt_via_ar=125)(pp_min_microvia_ar=0)(pp_opt_microvia_ar=0)(pp_min_spacing=71)(pp_opt_spacing=75)(pp_min_p2p_spacing=71)(pp_opt_p2p_spacing=75)(pp_min_line=71)(pp_opt_line=75)(pp_nd_percent=25)(pp_abs_min_line=70)(pp_min_pth2c=150)(pp_selected=All)(pp_work_on=SMDs)(pp_modification=Shave)),mode=regular")
GEN.COM("chklist_run,chklist=valor_dfm_sigopt,nact=1,area=profile")
})
// 保存
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";
}
/*
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 = [];
try {
var par = PAR;
var default_par = {
step: "edit",
auto_save: "No",
units:"mm"
}
for(var key in default_par){ // 设置默认属性
if (!par.hasOwnProperty(key) || par[key] == ""){
par[key] = default_par[key]
}
}
if(_.isEmpty(Job)){throw "参数Job不存在"}
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"});
}
var steplist = GEN.getStepList({job:job})
steplist = steplist.filter(function(v){
var tmpreg = new RegExp(par.step,"ig")
return tmpreg.test(v)
})
var drl = "drl";
var outLayers = [];
var matrix = GEN.getMatrix({job:job})
for (var key in matrix) {
var layer_info = matrix[key];
if(layer_info.context == "board" && layer_info.layer_type == "signal" && /top|bot/.test(layer_info.side)){
outLayers.push(key)
}
}
steplist.forEach(function(step) {
GEN.openStep({job:job, name:step})
GEN.units({type:"mm"})
GEN.affectedLayer({affected:'no',mode:'all'})
GEN.COM("chklist_single,action=frontline_sliver_repair,show=yes")
GEN.COM("chklist_cupd,chklist=frontline_sliver_repair,nact=1,params=((pp_layer=.type=signal&side=top|bottom)(pp_repair_content=Sliver\;Peelable\;Pinhole\;Tangency\;Text Sliver)(pp_max_sliver=127)(pp_max_peelable=127)(pp_max_txt_sliver=0)(pp_spacing=152.4)(pp_min_ar=127)(pp_max_hole=76.2)(pp_max_island=101.6)(pp_max_angle=90.000000)(pp_hole_measure_mode=X or Y)(pp_overlap=25.4)(pp_tangency=25.4)(pp_tan_work_on=Lines)(pp_sliver_cover_f=Surfaces)(pp_hole_cover_f=Surfaces)(pp_repair=Repair)(pp_selected=All)),mode=regular")
GEN.COM("chklist_run,chklist=frontline_sliver_repair,nact=1,area=profile")
})
// 保存
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";
}
/*
NAME:
DESCRIPTION: 添加logo;
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> 添加logo </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 = [];
try {
var par = PAR;
var default_par = {
step: "edit$",
auto_save: "No",
units:"mm"
}
for(var key in default_par){ // 设置默认属性
if (!par.hasOwnProperty(key) || par[key] == ""){
par[key] = default_par[key]
}
}
if(_.isEmpty(Job)){throw "参数Job不存在"}
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"});
}
var steplist = GEN.getStepList({job:job})
steplist = steplist.filter(function(v){
var tmpreg = new RegExp(par.step,"ig")
return tmpreg.test(v)
})
var workLayers = [];
// var matrix = GEN.getMatrix({job:job})
// for (var key in matrix) {
// var layer_info = matrix[key];
// if(layer_info.context == "board" && layer_info.layer_type == "signal" && /top|bot/.test(layer_info.side)){
// workLayers.push(key)
// }
// }
var tmp = "logo_tmp"
steplist.forEach(function(step) {
GEN.openStep({job:job, name:step})
GEN.units({type:"mm"})
GEN.affectedLayer({affected:'no',mode:'all'})
// 是否有logo_tmp 层 有就删除 没有就创建
if(GEN.isLayerExists({job:job, layer:tmp})){
GEN.deleteLayer({job:job, layer:tmp})
}
GEN.createLayer({job:job,layer:tmp})
GEN.workLayer({name:tmp,display_number:2,clear_before:'yes'})
GEN.COM("add_pad,attributes=no,x=0,y=0,symbol=ul,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1")
GEN.COM("add_pad,attributes=no,x=50,y=0,symbol=8888,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1")
// 将logo拷贝到层
})
// 保存
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";
}
......@@ -129,13 +129,13 @@ try {
inner: {layer_type:"signal", side:"inner", context:"board", polarity:"positive"},
all: {layer_type:"signal",side:"top|bottom|inner", context:"board", polarity:"positive"},
power_ground: {layer_type:"power_ground", side:"inner", context:"board", polarity:"negative"},
}
}
var layer_cfg
if(par.layer_type != ""){
layer_cfg = layer_config[par.layer_type]
}
var matrix = GEN.getMatrix({job:job})
var matrix = GEN.getMatrix({job:job});
var n_layers = Object.keys(matrix).sort(function(a,b){return matrix[a].row - matrix[b].row})
.filter(function(key){
var val = matrix[key]
......@@ -148,10 +148,10 @@ try {
}
}
return flag
})
});
if(n_layers.length == 0){throw "can not find layer"}
var stepList = GEN.getStepList({job:job})
var stepList = GEN.getStepList({job:job});
if (par.step_fliter != "") {
stepList = stepList.filter(function (v) {
var step_reg = new RegExp(par.step_fliter)
......@@ -215,7 +215,7 @@ try {
function resize_tmp(props){
GEN.selectByFilter(props.select)
if(GEN.getSelectCount()>0){
GEN.selResize({size: props.resize})
GEN.selResize({size: props.resize})
}
}
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