/*
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 2021-03-08 Scott Sun
1.新版本
HELP:
功能简介
标题 p>
参数配置
step信息
注意事项
无
*/
// 引入模块 包 外部参数
var $ = require('topcam.scriptfunc').argv();
var fs = require('fs');
var _ = require('lodash');
var mode = $.ikm ? "topcam" : "aimdfm";
var IKM = $.ikm ? $.ikm : require('topcam.ikm6')($);
var GEN = $.gen;
var Job = $.job || $.job_name;
var JobId = $.job_id;
var db = $.db || IKM.db;
var gui_piug = require('topsin.gengui');
var GUI = gui_piug.newGui(gui_piug.__dirname);
var PAR = {};
if ($.par) { PAR = $.par } else if ($.hasOwnProperty('script_parameter')) { PAR = JSON.parse($.script_parameter); }
if (mode === "aimdfm") {
var database = require("topsin.database");
database.addConnection($.conf.database_conf, "DFM");
var QDfm = database.query("DFM");
$.QDfm = QDfm;
if ($.conf.product_type == "aimdfm") {
QDfm.updateRow({ table: "pdm_aimdfm_task", data: { current_process_title: $.process_title }, where: { id: $.task_id } });
}
}
var Status = 'ok';
var resultData = [];
var par = PAR; // 接收参数
var default_par = { // 设置默认参数
step: "orig",
auto_save: "No",
units: "mm"
}
for (var key in default_par) {
if (!par.hasOwnProperty(key) || par[key] == "") {
par[key] = default_par[key]
}
}
// 定义变量
var job = Job;
try {
// 常规验证 准备工作
if (!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}) // 工作step列表
stepList = stepList.filter(function(step){
var reg = new RegExp(par.step,"ig");
return reg.test(step);
})
var verification = function(size) {
return size <= 500
}
var drills = getLayer({layer_type:"drill",name:"drl"})
stepList.forEach(function(step) {
GEN.openStep({ job: job, name: step });
GEN.clearLayers(); //清除层显示
GEN.affectedLayer({ mode: 'all', affected: 'no' }); //设置影响层全部不影响
GEN.COM("sel_options,clear_mode=clear_after,display_mode=all_layers,area_inout=inside,area_select=select,select_mode=standard,area_touching_mode=exclude");
GEN.units({ type: par.units }); //单位初始化
GEN.zoomHome(); //窗口显示回到原始位置
GEN.selClearFeature()
drills.forEach(function(drl) {
GEN.workLayer({name:drl,display_number:2,clear_before:'yes'})
var sys = GEN.getLayerSymsHist({job:Job,step:'net',layer:drl,units:'mm'})
var includesys = [];
// r700":{"symbol":"r700","line":"0","pad":"400","arc":"0","size":"700"},
Object.keys(sys).forEach(function(key){
var symbolinfo = sys[key];
if(!symbolinfo.size && symbolinfo.width){
symbolinfo.size = symbolinfo.width > symbolinfo.height ? symbolinfo.width : symbolinfo.height;
}
if(symbolinfo.size){
symbolinfo.size = symbolinfo.size - 0;
if(verification(symbolinfo.size)){
includesys.push(symbolinfo.symbol)
}
}
})
if(includesys.length){
GEN.selectByFilter({include_syms:includesys.join(";")})
if(GEN.getSelectCount()>0){
GEN.COM("cur_atr_set,attribute=.drill,option=via")
GEN.COM("sel_change_atr,mode=add")
}
}
})
})
// 保存料号
if (/yes/ig.test(par.auto_save)) {
GEN.checkInout({ job: job, mode: "out" });
GEN.saveJob({ job: job });
}
GEN.checkInout({ job: job, mode: "in" });
// 结尾返回 固定写法
var Return = "Done"
if (mode === "aimdfm") {
$.QDfm.updateRow({ table: "pdm_aimdfm_task", data: { progress: 100 }, where: { id: $.task_id } });
var tmperr = { type: "info", title: "操作完成, 请注意检查!" }
if (GEN.hasError()) {
Status = 'error';
tmperr = { type: "error", title: "GEN错误!", detail: [{ desc: GEN.STATUS.join("\n") }] }
}
resultData.push(tmperr);
Return = { status: Status, result_data: resultData };
}
return Return
} catch (e) {
if(GEN.STATUS.length > 0) {
IKM.msg(GEN.STATUS.join("\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 getLayer(props){ // 获取层
if (!props) {
return
}
if (!props.context) {
props.context = "board"
}
var matrix = GEN.getMatrix({job:job})
return Object.keys(matrix).reduce(function(a,b){
var info = matrix[b];
var ret = true;
for (var key in props) {
if (!Array.isArray(props[key])) {
props[key] = [props[key]]
}
if (info[key] && props[key].indexOf(info[key]) < 0) {
ret = false
}
}
if (ret) {
a.push(props.res == "info" ? info : b)
}
return a
},[])
}