Commit 684776ec authored by Scott Sun's avatar Scott Sun

scott

parent ae709692
...@@ -4,10 +4,10 @@ DESCRIPTION: ; ...@@ -4,10 +4,10 @@ DESCRIPTION: ;
PARAMETER: PARAMETER:
[ [
{ {
name : 'step_filter', name : 'step',
title : 'step 过滤', title : 'step',
type : 'LineEdit', type : 'LineEdit',
property : {tool_tip : 'step 过滤,默认是unit'}, property : {tool_tip : '目标step,默认是orig'},
}, },
{ {
name : 'auto_save', name : 'auto_save',
...@@ -24,16 +24,16 @@ PARAMETER: ...@@ -24,16 +24,16 @@ PARAMETER:
] ]
VERSION_HISTORY: VERSION_HISTORY:
V1.00 2020-04-28 Carver V1.00 2020-09-01 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> ol转孔 </p>
<br> <br>
<font size="3" color="#003DB2"><p>参数配置</p></font> <font size="3" color="#003DB2"><p>参数配置</p></font>
<p> </p> <p> step信息 </p>
<br> <br>
<font size="3" color="#003DB2"><p>注意事项</p></font> <font size="3" color="#003DB2"><p>注意事项</p></font>
<p> 无 </p> <p> 无 </p>
...@@ -42,7 +42,7 @@ PARAMETER: ...@@ -42,7 +42,7 @@ PARAMETER:
*/ */
////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////
console.log("=============================>JTG_DRL_delete_duplicate_hole_aim"); console.log("==============================>template");
// 引入模块 包 // 引入模块 包
var $ = require('topcam.scriptfunc').argv(); var $ = require('topcam.scriptfunc').argv();
var fs = require('fs'); var fs = require('fs');
...@@ -79,20 +79,19 @@ if (mode === "aimdfm") { ...@@ -79,20 +79,19 @@ if (mode === "aimdfm") {
var Status = 'ok'; var Status = 'ok';
var resultData = []; var resultData = [];
var drl_name = 'drl'
try { try {
var par = PAR; var par = PAR;
var default_par = { var default_par = {
step_filter: 'unit', step: "unit",
units: 'mm', auto_save: "No",
units: "mm",
rout: "ol"
} }
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]
} }
} }
if(_.isEmpty(Job)){throw "参数Job不存在"} if(_.isEmpty(Job)){throw "参数Job不存在"}
var job = Job.toLowerCase() var job = Job.toLowerCase()
if(!GEN.isJobExists({job:job})){throw "料号"+job+"不存在"} if(!GEN.isJobExists({job:job})){throw "料号"+job+"不存在"}
...@@ -101,133 +100,57 @@ try { ...@@ -101,133 +100,57 @@ try {
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"});
} }
var step = "unit"
var font_layer = "gto_font"
// IKM.msg(GEN.getFeatures({job:job, step:"unit", layer:"1",options:"feat_index"}))
// GEN.selLayerFeat({layer:"1", index:"1",operation:"select"})
// 字符优化 var steplists = GEN.getStepList({job:job});
// 1. 拷贝到辅助层 _1 _2 changesymbol r0.1 _1辅助层转铜皮 if(steplists.length == 0){return "该料号没有step"}
var tmp1 = font_layer + "_1"; steplists = steplists.filter(function(name){
var tmp2 = font_layer + "_2"; var reg = new RegExp(par.step, "ig")
var tmp3 = font_layer + "_3"; return reg.test(name)
var tmp4 = font_layer + "_4";
var tmp5 = font_layer + "_5";
var bk = font_layer + "_bk";
[tmp1,tmp2,tmp3,tmp4,tmp5,bk].forEach(function(v){
if(GEN.isLayerExists({job:job, layer:v})){GEN.deleteLayer({job:job,layer:[v]})}
}) })
GEN.copyLayer({source_job:job,source_step:step,source_layer:font_layer,dest_layer:tmp1, mode:"replace"})
GEN.copyLayer({source_job:job,source_step:step,source_layer:font_layer,dest_layer:bk, mode:"replace"}) steplists.forEach(function(step){
GEN.openStep({job:job, name:step})
GEN.units({type:par.units})
GEN.affectedLayer({affected:'no',mode:'all'}) GEN.affectedLayer({affected:'no',mode:'all'})
GEN.selClearFeature() GEN.selClearFeature()
GEN.workLayer({name:tmp1,display_number:2,clear_before:'yes'}) GEN.workLayer({name:par.rout,display_number:2,clear_before:'yes'})
GEN.selChangeSym({symbol:"r0.1"})
GEN.copyLayer({source_job:job,source_step:step,source_layer:tmp1,dest_layer:tmp2, mode:"replace"}) var feats = GEN.getFeatures({job:job,step:step,layer:par.rout,options:"feat_index"})
GEN.COM("sel_contourize,accuracy=0,break_to_islands=yes,clean_hole_size=0,clean_hole_mode=x_and_y") // [{
GEN.affectedLayer({affected:'no',mode:'all'}) // "type": "arc",
GEN.clearLayers() // "xs": "4.121787",
// 2. // "ys": "3.7740178",
var features = GEN.getFeatures({job:job,step:step,layer:tmp1,options:"feat_index"}) // "xe": "4.1141847",
var indexes = [] // "ye": "3.8220052",
features.forEach(function(item){ // "xc": "3.7942278",
GEN.workLayer({name:tmp1,display_number:2,clear_before:'yes'}) // "yc": "3.7467211",
var index = item.index; // "symbol": "r7.874",
// 选中index 将它复制到tmp3 获取信息 // "polarity": "positive",
GEN.selLayerFeat({layer:tmp1, index:index,operation:"select"}) // "direction": "cw",
if(GEN.getSelectCount() > 0){ // "attributes": []
item.limit = GEN.getLayerLimits({job:job,step:step,layer:tmp1,units:'mm', options:"select"}) // }]
} feats = feats.filter(function(item){
return item.type === "arc" && item.xs === item.xe && item.ys === item.ye
}) })
feats = feats.filter(function(item){
var d = 2*Math.sqrt((item.xe - item.xc)*(item.xe - item.xc) + (item.ye - item.yc)*(item.ye - item.yc))
function surfaceAnalysis(props){ return d <= 6
props.limit.xmin = props.limit.xmin - 0;
props.limit.ymin = props.limit.ymin - 0;
props.limit.xmax = props.limit.xmax - 0;
props.limit.ymax = props.limit.ymax - 0;
props.limit.xsize = props.limit.xsize - 0;
props.limit.ysize = props.limit.ysize - 0;
props.xc = props.limit.xsize / 2 + props.limit.xmin
props.yc = props.limit.ysize / 2 + props.limit.ymin
}
var xs = {};
var ys = {};
features.forEach(function(item){
surfaceAnalysis(item)
indexes.push({
index:item.index,
xmin : item.limit.xmin,
ymin : item.limit.ymin,
xmax : item.limit.xmax,
ymax : item.limit.ymax,
xc:item.xc,
yc:item.yc
}) })
if(!ys[turnFix(item.yc)]){ys[turnFix(item.yc)] = []} feats.forEach(function(item) {
ys[turnFix(item.yc)].push(item) GEN.selLayerFeat({layer:par.rout, index:item.index,operation:"select"})
if(!xs[turnFix(item.xc)]){xs[turnFix(item.xc)] = []}
xs[turnFix(item.xc)].push(item)
}) })
// npth move至drl
var limitinfo = [] if(GEN.getSelectCount() >0 ) {
indexes = sameDirection(ys, "xc", limitinfo, indexes) GEN.selMoveOther({target_layer:'ol_tmp',invert:'no',dx:0,dy:0,size:0})
indexes = sameDirection(xs, "yc", limitinfo, indexes) GEN.workLayer({name:"ol_tmp",display_number:2,clear_before:'yes'})
GEN.COM("cur_atr_set,attribute=.drill,option=non_plated")
if(GEN.isLayerExists({job:job,layer:"_ok"})){GEN.deleteLayer({job:job,layer:["_ok"]})} GEN.COM("sel_change_atr,mode=add")
if(GEN.isLayerExists({job:job,layer:"_fail"})){GEN.deleteLayer({job:job,layer:["_fail"]})} GEN.selMoveOther({target_layer:'drl',invert:'no',dx:0,dy:0,size:0})
GEN.createLayer({job:job,layer:'_ok',conext:'misc',type:'document'}) GEN.deleteLayer({job:job,layer:"ol_tmp"})
GEN.createLayer({job:job,layer:'_fail',conext:'misc',type:'document'})
limitinfo.forEach(function(item){
GEN.workLayer({name:bk,display_number:2,clear_before:'yes'})
GEN.COM("filter_area_strt")
GEN.COM("filter_area_xy,x="+item.xmin+",y=" + item.ymin)
GEN.COM("filter_area_xy,x="+item.xmax+",y=" + item.ymax)
GEN.COM("filter_area_end,layer=,filter_name=popup,operation=select,area_type=rectangle,inside_area=yes,intersect_area=yes")
if(GEN.getSelectCount() > 0 ) {
GEN.selMoveOther({target_layer:'transform_temp',invert:'no',dx:0,dy:0,size:0})
GEN.workLayer({name:"transform_temp",display_number:2,clear_before:'yes'})
GEN.selTransform({mode:'anchor',oper:'scale',
x_anchor: item.xmin + Math.abs(item.xmax - item.xmin) / 2,
y_anchor: item.ymin + Math.abs(item.ymax - item.ymin) / 2,
x_scale:1.2,y_scale:1.2})
// 与成功层touch 有碰移动到失败层 没碰移动到成功层
GEN.selRefFeat({layers:"_ok",use:"filter",mode:"touch"})
if(GEN.getSelectCount() > 0) {
GEN.selClearFeature()
GEN.selMoveOther({target_layer:'_fail',invert:'no',dx:0,dy:0,size:0})
} else {
GEN.selMoveOther({target_layer:'_ok',invert:'no',dx:0,dy:0,size:0})
}
} }
}) })
indexes.forEach(function(item){
var xc = item.xc;
var yc = item.yc;
GEN.workLayer({name:bk,display_number:2,clear_before:'yes'})
GEN.COM("filter_area_strt")
GEN.COM("filter_area_xy,x="+item.xmin+",y=" + item.ymin)
GEN.COM("filter_area_xy,x="+item.xmax+",y=" + item.ymax)
GEN.COM("filter_area_end,layer=,filter_name=popup,operation=select,area_type=rectangle,inside_area=yes,intersect_area=yes")
if(GEN.getSelectCount() > 0 ) {
GEN.selMoveOther({target_layer:'transform_temp',invert:'no',dx:0,dy:0,size:0})
GEN.workLayer({name:"transform_temp",display_number:2,clear_before:'yes'})
GEN.selTransform({mode:'anchor',oper:'scale',x_anchor: xc,y_anchor: yc,
x_scale:1.2,y_scale:1.2})
// 与成功层touch 有碰移动到失败层 没碰移动到成功层
GEN.selRefFeat({layers:"_ok",use:"filter",mode:"touch"})
if(GEN.getSelectCount() > 0) {
GEN.selClearFeature()
GEN.selMoveOther({target_layer:'_fail',invert:'no',dx:0,dy:0,size:0})
} else {
GEN.selMoveOther({target_layer:'_ok',invert:'no',dx:0,dy:0,size:0})
}
}
})
// 保存 // 保存
...@@ -241,26 +164,13 @@ try { ...@@ -241,26 +164,13 @@ try {
} }
if (mode === "aimdfm") { if (mode === "aimdfm") {
$.QDfm.updateRow({ $.QDfm.updateRow({table: "pdm_aimdfm_task",data: {progress: 33.33},where: { id: $.task_id }});
table: "pdm_aimdfm_task",
data: {
progress: 33.33
},
where: { id: $.task_id }
});
if (GEN.hasError()) { if (GEN.hasError()) {
Status = 'error'; Status = 'error';resultData.push({ type: "error", title: "GEN错误!", detail: [{ desc: _.join(GEN.STATUS, "\n") }] });
resultData.push({ type: "error", title: "GEN错误!", detail: [{ desc: _.join(GEN.STATUS, "\n") }] }); return {status: Status,result_data: resultData};
return {
status: Status,
result_data: resultData
};
} else { } else {
resultData.push({ type: "info", title: "操作完成, 请注意检查!" }); resultData.push({ type: "info", title: "操作完成, 请注意检查!" });
return { return {status: Status,result_data: resultData};
status: Status,
result_data: resultData
};
} }
}else { }else {
return "Done" return "Done"
...@@ -272,61 +182,3 @@ try { ...@@ -272,61 +182,3 @@ try {
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
function sameDirection(xory, type, res, indexes) {
for (var key in xory) {
var current = -1;
var data = xory[key];
data.sort(function(a,b){return a[type] - b[type]})
data.forEach(function(item, i){
if (i > current){
var ret = [item];
current = searchFont(item, data, i, ret,type)
if(ret.length > 1) {
ret.forEach(function(item) {
indexes = indexes.filter(function(item2){
return item2.index != item.index
})
})
res.push(ret.reduce(function(a,b){
if(Number(b.limit.xmin) < Number(a.xmin)){
a.xmin = b.limit.xmin
}
if(Number(b.limit.ymin) < Number(a.ymin)){
a.ymin = b.limit.ymin
}
if(Number(b.limit.xmax) > Number(a.xmax)){
a.xmax = b.limit.xmax
}
if(Number(b.limit.ymax) > Number(a.ymax)){
a.ymax = b.limit.ymax
}
return a
},{
xmin: item.limit.xmin,
ymin: item.limit.ymin,
xmax: item.limit.xmax,
ymax: item.limit.ymax
}))
}
}
})
}
return indexes
}
function searchFont(l ,arr, i, ret, type){
if(arr[i+1]){
var len = Math.abs(l[type] - arr[i+1][type])
if(len <= 1.5){
ret.push(arr[i+1])
return searchFont(arr[i+1], arr, i+1, ret, type)
} else {return i}
}
return i+1
}
function turnFix(data) {
return parseFloat(data).toFixed(2)
}
\ No newline at end of file
...@@ -594,17 +594,16 @@ function slBoxOptimize(){ ...@@ -594,17 +594,16 @@ function slBoxOptimize(){
var ref_layer = layerInfo.ref_layer; var ref_layer = layerInfo.ref_layer;
var tmp1 = 'tl_script_tmp1', tmp2 = "tl_script_tmp2"; var tmp1 = 'tl_script_tmp1', tmp2 = "tl_script_tmp2";
delLayer([tmp1, tmp2]); delLayer([tmp1, tmp2]);
GEN.workLayer({name:work_layer,display_number:1,clear_before:'yes'});
GEN.displayLayer({name:ref_layer,number:2});
// 放大 // 放大
var ref_pad = "tmp_ref_pad"; delLayer([ref_pad]); var ref_pad = "tmp_ref_pad"; delLayer([ref_pad]);
GEN.createLayer({job:job,layer:ref_pad,context:'misc',type:'document'}); GEN.createLayer({job:job,layer:ref_pad,context:'misc',type:'document'});
var flag = true; var flag = true;
IKM.msg("请选择需放大的文字框,不需制作了请【左键框选空白处】") IKM.msg(work_layer + "层:请选择需放大的文字框,不需制作了请【左键框选空白处】")
while(flag){ while(flag){
var tmp_con = GEN.MOUSE({type:'r',text:"Please Select"}); var tmp_con = GEN.MOUSE({type:'r',text:"Please Select"});
GEN.workLayer({name:work_layer,display_number:1,clear_before:'yes'}); GEN.workLayer({name:work_layer,display_number:1,clear_before:'yes'});
GEN.displayLayer({name:ref_layer,number:2});
GEN.COM("filter_area_strt") GEN.COM("filter_area_strt")
GEN.COM("filter_area_xy,x="+tmp_con.x1+",y="+tmp_con.y1) GEN.COM("filter_area_xy,x="+tmp_con.x1+",y="+tmp_con.y1)
GEN.COM("filter_area_xy,x="+tmp_con.x2+",y="+tmp_con.y2) GEN.COM("filter_area_xy,x="+tmp_con.x2+",y="+tmp_con.y2)
...@@ -641,9 +640,6 @@ function slBoxOptimize(){ ...@@ -641,9 +640,6 @@ function slBoxOptimize(){
GEN.selectByFilter({area_rect:{x1:layer_limits_tmp1.xmin-0.01,y1:layer_limits_tmp1.ymin-0.01,x2:layer_limits_tmp1.xmax+0.01,y2:layer_limits_tmp1.ymax+0.01}}); GEN.selectByFilter({area_rect:{x1:layer_limits_tmp1.xmin-0.01,y1:layer_limits_tmp1.ymin-0.01,x2:layer_limits_tmp1.xmax+0.01,y2:layer_limits_tmp1.ymax+0.01}});
GEN.selTransform({mode:'anchor',oper:"rotate",x_anchor:layer_limits_tmp.xc,y_anchor:layer_limits_tmp.yc,angle:angle}) GEN.selTransform({mode:'anchor',oper:"rotate",x_anchor:layer_limits_tmp.xc,y_anchor:layer_limits_tmp.yc,angle:angle})
GEN.PAUSE(1)
GEN.copyLayer({source_job:job,source_step:step,source_layer:tmp1,dest_layer:tmp2,mode:'replace',invert:'no'}); GEN.copyLayer({source_job:job,source_step:step,source_layer:tmp1,dest_layer:tmp2,mode:'replace',invert:'no'});
var text_tmp = 'tl_tmp_text'; var text_tmp = 'tl_tmp_text';
GEN.copyLayer({source_job:job,source_step:step,source_layer:tmp1,dest_layer:text_tmp,mode:'replace',invert:'no'}); GEN.copyLayer({source_job:job,source_step:step,source_layer:tmp1,dest_layer:text_tmp,mode:'replace',invert:'no'});
...@@ -760,6 +756,7 @@ function slBoxOptimize(){ ...@@ -760,6 +756,7 @@ function slBoxOptimize(){
GEN.displayLayer({name:work_layer,number:2}); GEN.displayLayer({name:work_layer,number:2});
if(!GEN.isLayerEmpty({ job:job,step:step,layer:ref_pad})){GEN.displayLayer({name:ref_layer,number:3})} if(!GEN.isLayerEmpty({ job:job,step:step,layer:ref_pad})){GEN.displayLayer({name:ref_layer,number:3})}
GEN.COM('disp_on'); GEN.COM('disp_on');
if(GEN.isLayerExists({ job:job,step:step,layer:ref_pad})){GEN.deleteLayer({job:job, layer:ref_pad})}
var ans = GEN.PAUSE('Please Check...'); var ans = GEN.PAUSE('Please Check...');
if(!/ok/ig.test(ans)){ throw "cancel" } if(!/ok/ig.test(ans)){ throw "cancel" }
GEN.COM('disp_off'); GEN.COM('disp_off');
...@@ -918,9 +915,11 @@ function slOptimize() { ...@@ -918,9 +915,11 @@ function slOptimize() {
} }
} }
}) })
IKM.msg(layer + "层完毕,请确认,将正确的移动到_ok层") IKM.msg(layer + "层完毕,请确认,将正确的移动到_ok层")
GEN.PAUSE("PAUSE") GEN.PAUSE("PAUSE")
GEN.workLayer({name:"_ok",display_number:2,clear_before:'yes'}) GEN.workLayer({name:"_ok",display_number:2,clear_before:'yes'})
// 将ok的移动到文字层
}) })
}) })
} }
...@@ -1171,7 +1170,7 @@ function searchFont(l ,arr, i, ret, type){ ...@@ -1171,7 +1170,7 @@ function searchFont(l ,arr, i, ret, type){
return i+1 return i+1
} }
function turnFix(data) { function turnFix(data) {
return parseFloat(data).toFixed(2) return parseFloat(data).toFixed(1)
} }
function surfaceAnalysis(props){ function surfaceAnalysis(props){
props.limit.xmin = props.limit.xmin - 0; props.limit.xmin = props.limit.xmin - 0;
......
This source diff could not be displayed because it is too large. You can view the blob instead.
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