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

scott

parent ae709692
......@@ -3,11 +3,11 @@ NAME:
DESCRIPTION: ;
PARAMETER:
[
{
name : 'step_filter',
title : 'step 过滤',
{
name : 'step',
title : 'step',
type : 'LineEdit',
property : {tool_tip : 'step 过滤,默认是unit'},
property : {tool_tip : '目标step,默认是orig'},
},
{
name : 'auto_save',
......@@ -24,16 +24,16 @@ PARAMETER:
]
VERSION_HISTORY:
V1.00 2020-04-28 Carver
V1.00 2020-09-01 Scott Sun
1.新版本
HELP:
<html><body bgcolor="#DDECFE">
<font size="3" color="#003DB2"><p>功能简介</p></font>
<p> 删除重孔 </p>
<p> ol转孔 </p>
<br>
<font size="3" color="#003DB2"><p>参数配置</p></font>
<p> </p>
<p> step信息 </p>
<br>
<font size="3" color="#003DB2"><p>注意事项</p></font>
<p> 无 </p>
......@@ -42,7 +42,7 @@ PARAMETER:
*/
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
console.log("=============================>JTG_DRL_delete_duplicate_hole_aim");
console.log("==============================>template");
// 引入模块 包
var $ = require('topcam.scriptfunc').argv();
var fs = require('fs');
......@@ -79,20 +79,19 @@ if (mode === "aimdfm") {
var Status = 'ok';
var resultData = [];
var drl_name = 'drl'
try {
var par = PAR;
var default_par = {
step_filter: 'unit',
units: 'mm',
step: "unit",
auto_save: "No",
units: "mm",
rout: "ol"
}
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+"不存在"}
......@@ -100,134 +99,58 @@ try {
if(mode == "aimdfm"){
if(GEN.checkInout({job:job,mode:"test"}) != 0){ throw "the job check" }
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"})
}
// 字符优化
// 1. 拷贝到辅助层 _1 _2 changesymbol r0.1 _1辅助层转铜皮
var tmp1 = font_layer + "_1";
var tmp2 = font_layer + "_2";
var tmp3 = font_layer + "_3";
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"})
GEN.affectedLayer({affected:'no',mode:'all'})
GEN.selClearFeature()
GEN.workLayer({name:tmp1,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"})
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'})
GEN.clearLayers()
// 2.
var features = GEN.getFeatures({job:job,step:step,layer:tmp1,options:"feat_index"})
var indexes = []
features.forEach(function(item){
GEN.workLayer({name:tmp1,display_number:2,clear_before:'yes'})
var index = item.index;
// 选中index 将它复制到tmp3 获取信息
GEN.selLayerFeat({layer:tmp1, index:index,operation:"select"})
if(GEN.getSelectCount() > 0){
item.limit = GEN.getLayerLimits({job:job,step:step,layer:tmp1,units:'mm', options:"select"})
}
var steplists = GEN.getStepList({job:job});
if(steplists.length == 0){return "该料号没有step"}
steplists = steplists.filter(function(name){
var reg = new RegExp(par.step, "ig")
return reg.test(name)
})
steplists.forEach(function(step){
GEN.openStep({job:job, name:step})
GEN.units({type:par.units})
GEN.affectedLayer({affected:'no',mode:'all'})
GEN.selClearFeature()
GEN.workLayer({name:par.rout,display_number:2,clear_before:'yes'})
function surfaceAnalysis(props){
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
var feats = GEN.getFeatures({job:job,step:step,layer:par.rout,options:"feat_index"})
// [{
// "type": "arc",
// "xs": "4.121787",
// "ys": "3.7740178",
// "xe": "4.1141847",
// "ye": "3.8220052",
// "xc": "3.7942278",
// "yc": "3.7467211",
// "symbol": "r7.874",
// "polarity": "positive",
// "direction": "cw",
// "attributes": []
// }]
feats = feats.filter(function(item){
return item.type === "arc" && item.xs === item.xe && item.ys === item.ye
})
if(!ys[turnFix(item.yc)]){ys[turnFix(item.yc)] = []}
ys[turnFix(item.yc)].push(item)
if(!xs[turnFix(item.xc)]){xs[turnFix(item.xc)] = []}
xs[turnFix(item.xc)].push(item)
})
var limitinfo = []
indexes = sameDirection(ys, "xc", limitinfo, indexes)
indexes = sameDirection(xs, "yc", limitinfo, indexes)
if(GEN.isLayerExists({job:job,layer:"_ok"})){GEN.deleteLayer({job:job,layer:["_ok"]})}
if(GEN.isLayerExists({job:job,layer:"_fail"})){GEN.deleteLayer({job:job,layer:["_fail"]})}
GEN.createLayer({job:job,layer:'_ok',conext:'misc',type:'document'})
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})
}
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))
return d <= 6
})
feats.forEach(function(item) {
GEN.selLayerFeat({layer:par.rout, index:item.index,operation:"select"})
})
// npth move至drl
if(GEN.getSelectCount() >0 ) {
GEN.selMoveOther({target_layer:'ol_tmp',invert:'no',dx:0,dy:0,size:0})
GEN.workLayer({name:"ol_tmp",display_number:2,clear_before:'yes'})
GEN.COM("cur_atr_set,attribute=.drill,option=non_plated")
GEN.COM("sel_change_atr,mode=add")
GEN.selMoveOther({target_layer:'drl',invert:'no',dx:0,dy:0,size:0})
GEN.deleteLayer({job:job,layer:"ol_tmp"})
}
})
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})
}
}
})
// 保存
......@@ -240,93 +163,22 @@ try {
GEN.checkInout({job:job,mode:"in"})
}
if (mode === "aimdfm") {
$.QDfm.updateRow({
table: "pdm_aimdfm_task",
data: {
progress: 33.33
},
where: { id: $.task_id }
});
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
};
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
};
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 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)
return (mode === "aimdfm") ? {status: Status, result_data: resultData} : "Error";
}
\ No newline at end of file
......@@ -594,17 +594,16 @@ function slBoxOptimize(){
var ref_layer = layerInfo.ref_layer;
var tmp1 = 'tl_script_tmp1', tmp2 = "tl_script_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]);
GEN.createLayer({job:job,layer:ref_pad,context:'misc',type:'document'});
var flag = true;
IKM.msg("请选择需放大的文字框,不需制作了请【左键框选空白处】")
IKM.msg(work_layer + "层:请选择需放大的文字框,不需制作了请【左键框选空白处】")
while(flag){
var tmp_con = GEN.MOUSE({type:'r',text:"Please Select"});
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_xy,x="+tmp_con.x1+",y="+tmp_con.y1)
GEN.COM("filter_area_xy,x="+tmp_con.x2+",y="+tmp_con.y2)
......@@ -640,10 +639,7 @@ function slBoxOptimize(){
GEN.workLayer({name:ref_layer,display_number:1,clear_before:'yes'});
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.PAUSE(1)
GEN.copyLayer({source_job:job,source_step:step,source_layer:tmp1,dest_layer:tmp2,mode:'replace',invert:'no'});
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'});
......@@ -760,6 +756,7 @@ function slBoxOptimize(){
GEN.displayLayer({name:work_layer,number:2});
if(!GEN.isLayerEmpty({ job:job,step:step,layer:ref_pad})){GEN.displayLayer({name:ref_layer,number:3})}
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...');
if(!/ok/ig.test(ans)){ throw "cancel" }
GEN.COM('disp_off');
......@@ -918,9 +915,11 @@ function slOptimize() {
}
}
})
IKM.msg(layer + "层完毕,请确认,将正确的移动到_ok层")
GEN.PAUSE("PAUSE")
GEN.workLayer({name:"_ok",display_number:2,clear_before:'yes'})
// 将ok的移动到文字层
})
})
}
......@@ -1171,7 +1170,7 @@ function searchFont(l ,arr, i, ret, type){
return i+1
}
function turnFix(data) {
return parseFloat(data).toFixed(2)
return parseFloat(data).toFixed(1)
}
function surfaceAnalysis(props){
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