Commit 76687869 authored by Scott Sun's avatar Scott Sun

Merge branch 'master' of http://gitlab.topibd.net/scott.sun/scott

parents c463b267 5fddd5fb
104: d xx - xx -np
\ No newline at end of file
## yucca
* 101: 要密码 多个压缩包
* 103: 多套gerber todo
* 110: 无法创建profile todo
* 115: 缺少层 无法创建profile
* 117: gerber 可以使用 ; tgz 获取matrix会报错:
```js
{"message":"Result of expression 'result[result[item]['drl_start']]' [undefined] is not an object.","lineNumber":701,"sourceId":218669104,"fileName":"D:/TopJS/3.3.1/topjs_modules/topcam.gencom/index.js","expressionBeginOffset":26307,"expressionCaretOffset":26340,"expressionEndOffset":26350}
```
* 118: 多gerber tgz也有问题 todo
* 119: 7z 压缩包
* 122: 无法创建profile 创建过程就报错了
* 124/126 undo gerber+tgz
* 131 undo gerber+tgz
* 133: undo profile
* 136: undo 多套文件
* 140 142 143 unfo profile
* 141 undo 无文件
* 144: 无法创建profile
* 147 148 149 undo profile
\ No newline at end of file
......@@ -816,8 +816,8 @@ try {
GEN.copyLayer({source_job:job,source_step:step,source_layer:tmp_gold_info[layer_gold_type],dest_layer:tmp_area_layer,mode:'replace',invert:'no'});
GEN.COM("clip_area_strt")
GEN.COM("clip_area_end,layers_mode=layer_name,layer="+tmp_area_layer+",area=profile,area_type=rectangle,inout=outside,contour_cut=yes,margin=0,feat_types=line\;pad\;surface\;arc\;text")
var tmp_info = GEN.copperArea({layer1:tmp_gold_info[layer_gold_type],resolution_value:1})
// var tmp_info = GEN.exposedArea({layer1:item.signalL,mask1:tmp_gold_info[layer_gold_type]})
// var tmp_info = GEN.copperArea({layer1:tmp_gold_info[layer_gold_type],resolution_value:25.4})
var tmp_info = GEN.exposedArea({layer1:item.signalL,mask1:tmp_gold_info[layer_gold_type],resolution_value:1})
var tmp_data = {}
if(layer_gold_type == "top") {
tmp_data.sf_area_ref_layer_front = tmp_gold_info[layer_gold_type]
......@@ -842,8 +842,8 @@ try {
}
}
if(item.solderL){
var tmp_info = GEN.copperArea({layer1:item.solderL,resolution_value:1})
// var tmp_info = GEN.exposedArea({layer1:item.signalL,mask1:item.solderL})
// var tmp_info = GEN.copperArea({layer1:item.solderL,resolution_value:1})
var tmp_info = GEN.exposedArea({layer1:item.signalL,mask1:item.solderL,resolution_value:1})
// {"area":"0.73817","percent":"8.986"}
var tmp_area = tmp_info.area
var tmp_percent = tmp_info.percent;
......
......@@ -228,11 +228,31 @@ try {
script_info({ progress: 50 })
err = reName({job:job, matrix:after_sort_matrix, cfg:format_cfg})
if(err){throw err}
// 设置钻孔
err = setDrill({job:job})
if(err){throw err}
// 处理 yu cca ftdrillx-x-np
var tmp_step = GEN.getStepList({job:job})
GEN.openStep({job:job,name:tmp_step[0]})
var layers = Object.keys(GEN.getMatrix({job:job}))
layers.forEach(function(layer) {
if(/^ftdrill(\d+)-(\d+)-np$/ig.test(layer)) {
var $1 = RegExp.$1;
var $2 = RegExp.$2;
// 1. 将此层改为npth属性
// 2. 将此层合并到 ftdrill(\d+)-(\d+)l(如果有)
GEN.workLayer({name:layer,display_number:2,clear_before:'yes'})
GEN.COM("cur_atr_reset")
GEN.COM("cur_atr_set,attribute=.drill,option=non_plated")
GEN.COM("sel_change_atr,mode=add")
GEN.COM("cur_atr_reset")
var target = "ftdrill"+$1+"-"+$2+"l";
if(GEN.isLayerExists({job:job, layer:target})) {
GEN.copyLayer({source_job:job,source_step:tmp_step[0],source_layer:layer,dest_layer:target,mode:"append"})
GEN.deleteLayer({job:job,layer:[layer]})
} else {
GEN.renameLayer({job:job,layer:layer,new_name:target})
}
}
})
GEN.closeStep()
var tmp_matrix = GEN.getMatrix({job:job})
......@@ -261,6 +281,10 @@ try {
}
})
// 设置钻孔
err = setDrill({job:job})
if(err){throw err}
script_info({ result_severity: "format create profile" })
script_info({ progress: 55 })
var all_layer = Object.keys(tmp_matrix)
......@@ -268,7 +292,6 @@ try {
if(all_layer.indexOf("outline") >= 0) { profileRule.unshift("outline")}
if(profileRule){
// 判断有没有profile
var tmp_step = GEN.getStepList({job:job})[0]
GEN.openStep({job:job, name:tmp_step})
var now_profile = GEN.getProfile({job:job, step:tmp_step})
......@@ -279,16 +302,6 @@ try {
script_info({ result_severity: "创建profile失败" })
throw "创建profile失败"
}
} else {
var now_matrix = GEN.getMatrix({job:job})
var board_layer = Object.keys(now_matrix).filter(function(v){
return now_matrix[v].context == "board"
})
GEN.affectedLayer({affected:'yes',layer: board_layer, clear_before:"yes"})
GEN.selectByFilter({profile:"out"})
if(GEN.getSelectCount() > 0){
GEN.selDelete()
}
}
}
......@@ -478,7 +491,7 @@ function setDrill(props){ // 设置钻孔
}
function doDrill(drills){ // 分析钻孔层
return drills.map(function(v){
if(v.name == "drill" || v.name=="rout" || v.name=="outline"){
if(v.name == "ftdrill" || v.name=="rout" || v.name=="outline"){
return {start:findSignal(1), end:findSignal(layerCount), layer:v.name}
} else {
var tmp = /(\d+)-(\d+)/ig.exec(v.name);
......@@ -509,7 +522,6 @@ function reName(props) { // 改名 par{job:要改名的料号, rule: {要改名
var new_name;
var tl_name = item.tl_name
var rule = item.rule
if(rule === tl_name){
new_name = item.new_name
} else {
......@@ -521,24 +533,28 @@ function reName(props) { // 改名 par{job:要改名的料号, rule: {要改名
new_name = item.new_name
var params = {}
for(var i = 0; i<replaceArr.length;i++){
if(/\d+/ig.test(replaceArr[i])) {
params["$"+(i+1)] = replaceArr[i]
} else {
params["$"+(i+1)] = "'" + replaceArr[i] + "'"
}
}
replaceArr.forEach(function(v,i){
new_name = new_name.replace("($"+(i+1)+")",v)
tl_name = tl_name.replace("($"+(i+1)+")",v)
})
// new_name = replaceTlName(new_name)
// function replaceTlName(name){
// var tmp = /(\([^)]*\))/ig.exec(name)
// if(!tmp){ return name }
// var param_arr = tmp[1].match(/\$\d+/ig)
// var newname = tmp[1]
// param_arr.forEach(function(v){
// newname = newname.replace(new RegExp("\\"+v,"ig"), params[v])
// })
// newname = name.replace(tmp[1],eval(newname))
// return replaceTlName(newname)
// }
// {"tl_name":"d1-10-np","new_name":"ftdrill($1)-($2)-($3)"}
new_name = replaceTlName(new_name)
function replaceTlName(name){
var tmp = /(\([^)]*\))/ig.exec(name)
if(!tmp){ return name }
var param_arr = tmp[1].match(/\$\d+/ig)
var newname = tmp[1]
param_arr.forEach(function(v){
newname = newname.replace(new RegExp("\\"+v,"ig"), params[v])
})
newname = name.replace(tmp[1],eval(newname))
return replaceTlName(newname)
}
}
return {
orig_name: item.name,
......@@ -701,9 +717,11 @@ function createOutline(props){
GEN.deleteLayer({job:job, layer:tmp_outline2})
if(GEN.isLayerExists({job:job,layer:"outline"})){GEN.deleteLayer({job:job,layer:"outline"})}
GEN.renameLayer({job:job, layer:l,new_name:'outline'})
GEN.deleteLayer({job:job, layer:l})
return true
}
GEN.deleteLayer({job:job, layer:tmp_layer})
GEN.deleteLayer({job:job, layer:l})
GEN.deleteLayer({job:job, layer:[tmp_layer]})
return false
}
}
......
......@@ -186,7 +186,6 @@ try {
IKM.msg("只分析到一个tgz文件 直接导入")
import_info.push({name:jobInfo.data[0].file.name, type:"odb++", date:now(),user:$.user_name})
var err = importJob({name:job,db:custCfg.db,path:jobInfo.data[0].file.path},config.delSameJob)
if(err){throw err}
......@@ -276,12 +275,10 @@ try {
GEN.COM("input_manual")
importOk = true
}
if(!importOk){
script_info({ result_severity: "import error" })
throw "import error"}
if(!importOk){ script_info({ result_severity: "import error" }); throw "import error"}
script_info({ progress: 20 })
// 导入结束
reNameStep(job)
if(/2171/.test(par.customer)){
var matrix = GEN.getMatrix({job:job});
comp = Object.keys(matrix).filter(function(v){ // 如果有comp层 删除
return /^comp_\+_/ig.test(v)
......@@ -292,8 +289,7 @@ try {
GEN.COM("delete_comp")
GEN.closeStep()
}
reNameStep(job)
}
GEN.checkInout({job:job,mode:"out"}) // 结束保存料号 关闭料号
GEN.saveJob({ job: job });
......@@ -465,9 +461,11 @@ function now(){
function reNameStep(job) {
var stepList = GEN.getStepList({job:job})
if(!stepList){return}
var pcs = []
var arr = []
stepList.forEach(function(v){
if(v){
if(v==="cad"){
pcs.unshift(v)
} else if(/pcs|cad|orig|pcb/ig.test(v)){
......@@ -475,6 +473,7 @@ function reNameStep(job) {
} else if(/stp|arr/ig.test(v)){
arr.push(v)
}
}
})
pcs.forEach(function(v, i){
if (i==0 && v == "cad") {
......
......@@ -126,6 +126,7 @@
"signed_coords": "no",
"text_line_width": 0.0024
},
"Excellon2_1": {
"nf1": 3,
"nf2": 5,
......@@ -286,6 +287,26 @@
"signed_coords": "no",
"text_line_width": 0.0024
},
"Excellon2_9": {
"nf1": 2,
"nf2": 3,
"units": "inch",
"zeroes": "trailing",
"decimal": "no",
"nf_comp": 0,
"break_sr": "yes",
"data_type": "ascii",
"separator": "nl",
"threshold": 200,
"drill_only": "no",
"multiplier": 1,
"resolution": 3,
"tool_units": "inch",
"coordinates": "absolute",
"merge_by_rule": "no",
"signed_coords": "no",
"text_line_width": 0.0024
},
"IPC356_1": {
"nf1": 2,
"nf2": 4,
......@@ -476,7 +497,15 @@
{
"valid": function(props){
var file = props.file;
return /.+\.art$|\.l\d+$|\.r1$|\.sb$|\.st$/ig.test(file.name)
return /\.ncd/ig.test(file.name)
},
"type": "Excellon2",
"format": "Excellon2_9"
},
{
"valid": function(props){
var file = props.file;
return /.+\.art$|\.l\d+$|\.r1$|\.sb$|\.st$|\.d\d+-\d+|\.[bt]sm$|\.drwg$|\.p\d+p$/ig.test(file.name)
},
"type": "Gerber274x",
"format": "Gerber274x_2",
......@@ -524,7 +553,7 @@
{
"valid": function(props){
var file = props.file;
return /.+\.drl$|\.d(\d+)-(\d+)/ig.test(file.name)
return /.+\.drl$/ig.test(file.name)
},
"type": "Excellon2",
"format": "Excellon2_1",
......@@ -540,6 +569,7 @@
if(/yes/ig.test(trailing)){
zeroes = "trailing"
}
if(!params.nc_param["OUTPUT_UNITS"]){ params.nc_param["OUTPUT_UNITS"] = params.art_param["OUTPUT_UNITS"]}
return {
"nf1": params.nc_param["INTEGER_PLACES"]? Number(params.nc_param["INTEGER_PLACES"]) : 3,
"nf2": params.nc_param["DECIMAL_PLACES"]? Number(params.nc_param["DECIMAL_PLACES"]) : 5,
......@@ -565,17 +595,19 @@
}
],
"tl_name": [
{"orig_name" : ["^pm_top","paste.pri","assytop\\.art","past_top","paste_top"], "tl_name" : "past_top" },
{"orig_name" : ["^pm_bot","paste.sec","assybot\\.art","past_bot","paste_bot"], "tl_name" : "past_botm" },
{"orig_name" : ["silk.pri","pleg\\.art","^ss_top","silk_top"], "tl_name" : "silk_top" },
{"orig_name" : ["silk.sec","sleg\\.art","^ss_bot","silk_bot"], "tl_name" : "silk_bot" },
{"orig_name" : ["\\.st$","mask.top\\.art","mask.pri\\.art","psm\\.art","sm_top"], "tl_name" : "sm_top" },
{"orig_name" : ["\\.sb$","mask.bot\\.art","mask.sec\\.art","ssm\\.art","sm_bot"], "tl_name" : "sm_botm" },
{"orig_name" : ["^top$","^top.art$"], "tl_name" : "top" },
{"orig_name" : ["\\.l(\\d+)$","^l(\\d+).*\\.art$","^0?(\\d+)_.*\\.art$","^l(\\d+)\\.art$","^0(\\d+).*ccp_ms","^s(\\d+)\\.art","lay(\\d+)\\.art","layer_(\\d+)"], "tl_name" : "l_($1)"},
{"orig_name" : ["^bottom$","^bottom\\.art$"], "tl_name" : "bottom" },
{"orig_name" : ["\\.d(\\d+)-(\\d+)([A-Za-z]+)$"], "tl_name" : "d($1)-($2)-($3)"},
{"orig_name" : ["\\.d(\\d+)-(\\d+)$","-(\\d+)-(\\d+)\\.drl$","(\\d+)-(\\d+)-laser\\.drl$","d(\\d+)-(\\d+)"], "tl_name" : "d_($1)-($2)"},
{"orig_name" : ["^pm_top","paste.pri|pripaste","ppst\\.art|spt\\.art","assy[_-]?top\\.art","past_top","paste_top"], "tl_name" : "past_top" },
{"orig_name" : ["^pm_bot","paste.sec|secpaste","spst\\.art|spb\\.art","assy[_-]?bott?o?m?\\.art","past_bot","paste_bot"], "tl_name" : "past_botm" },
{"orig_name" : ["silk.pri","pleg\\.art|sst\\.art","^ss_top","silk_top"], "tl_name" : "silk_top" },
{"orig_name" : ["silk.sec","sleg\\.art|ssb\\.art","^ss_bot","silk_bot"], "tl_name" : "silk_bot" },
{"orig_name" : ["\\.st$|\\.tsm$","mask.top\\.art|smt\\.art","mask.pri\\.art","psm\\.art","sm_top"], "tl_name" : "sm_top" },
{"orig_name" : ["\\.sb$|\\.bsm$","mask.bot\\.art|smb\\.art","mask.sec\\.art","ssm\\.art","sm_bot"], "tl_name" : "sm_botm" },
{"orig_name" : ["main_board_top\\.art$","^top$","^top.art$"], "tl_name" : "top" },
{"orig_name" : ["int(\\d+)\\.art"], "tl_name" : "l_($1+1)"},
{"orig_name" : ["^0?(\\d+)[\\D].*\\.art$","\\.p(\\d+)p$","\\.l(\\d+)$","^l(\\d+).*\\.art$","^l(\\d+)\\.art$","^0(\\d+).*ccp_ms","^s(\\d+)\\.art","laye?r?(\\d+)\\.art","layer_(\\d+)"], "tl_name" : "l_($1)"},
{"orig_name" : ["^bot\\.art$","main_board_bottom\\.art$","^bottom$","^bottom\\.art$"], "tl_name" : "bottom" },
{"orig_name" : ["(\\d+)-(\\d+)-([A-Za-z]+)\\.drl$","\\.d(\\d+)-(\\d+)([A-Za-z]+)$"], "tl_name" : "d($1)-($2)-($3)"},
{"orig_name" : ["\\.ncd(\\d)-(\\d)$","\\.d(\\d+)-(\\d+)$","-(\\d+)-(\\d+)\\.drl$","(\\d+)-(\\d+)-laser\\.drl$","d(\\d+)-(\\d+)"], "tl_name" : "d_($1)-($2)"},
{"orig_name" : ["\\.ncdthru$"], "tl_name" : "drill" },
{"orig_name" : ["\\.rou$","^rout$"], "tl_name" : "rout" },
{"orig_name" : "fab.art", "tl_name" : "fab.art" },
{"orig_name" : ["multipack.art","^array$"], "tl_name" : "array" },
......@@ -584,7 +616,7 @@
{"orig_name" : ["^sst\\.art$","bot-enig","enig_bot"], "tl_name" : "enig_bot" }
],
"mergerule" : {
profile:["past_top"]
profile:["past_top","sm_top"]
},
"extra": [
{
......@@ -623,9 +655,9 @@
laser: "via",
via: "via"
}
Object.keys(toolsInfo).forEach(function(row){
Object.keys(toolsInfo).forEach(function(row, i){
var info = toolsInfo[row];
var numberrow = row - 1;
var numberrow = i;
var type = res[numberrow]? res[numberrow].type.toLowerCase() : info.type.toLowerCase();
var min_tol = res[numberrow]? Math.abs( res[numberrow].tolerance.split("/")[1] * 1000 ): info.min_tol;
var max_tol = res[numberrow]? Math.abs(res[numberrow].tolerance.split("/")[0] * 1000) : info.max_tol;
......
......@@ -100,61 +100,45 @@ try {
if(GEN.checkInout({job:job,mode:"test"}) != 0){ throw "the job check" }
GEN.checkInout({job:job,mode:"out"});
}
job = "1";
job = "88880017_117";
var step = "cad"
var layer= "drl"
if(GEN.isLayerExists({job:job, layer:"pt-rou"})){GEN.deleteLayer({job:'Job',layer:["pt-rou"]})}
if(GEN.isLayerExists({job:job, layer:"ol_tmp"})){GEN.deleteLayer({job:'Job',layer:["ol_tmp"]})}
GEN.createLayer({job:job,layer:'pt-rou',conext:'misc',type:'rout'})
GEN.matrixMoveRow({job:job,layer:'pt-rou',after:'---'})
var feats = GEN.getFeatures({job:job,step:step,layer:layer, options:"feat_index", units:"mm"})
feats.forEach(function(item) {
if(item.type == "line") { // 槽孔
var width = parseFloat(item.symbol.slice(1))
var length = width + Math.sqrt((item.xe - item.xs)*(item.xe - item.xs) + (item.ye - item.ys)*(item.ye - item.ys))
if(item.attributes && item.attributes.indexOf(".drill=non_plated") >= 0) {
if(width >= 6050 || length>= 12000){
GEN.selLayerFeat({layer:layer, index:index,operation:"select"});
if(GEN.getSelectCount() > 0){GEN.selMoveOther({target_layer:'ol_tmp',invert:'no',dx:0,dy:0,size:0})}
}
} else if (item.attributes && item.attributes.indexOf(".drill=plated") >= 0) {
if(width >= 6050 || length>= 12000){
GEN.selLayerFeat({layer:layer, index:index,operation:"select"});
if(GEN.getSelectCount() > 0){GEN.selMoveOther({target_layer:'pt-rou',invert:'no',dx:0,dy:0,size:0})}
}
}
}
if(item.type == "pad") {
var size = parseFloat(item.symbol.slice(1));
if(item.attributes && item.attributes.indexOf(".drill=non_plated") >= 0) {
if(size > 6000 ){
GEN.selLayerFeat({layer:layer, index:index,operation:"select"});
if(GEN.getSelectCount() > 0){GEN.selMoveOther({target_layer:'ol_tmp',invert:'no',dx:0,dy:0,size:0})}
}
} else if (item.attributes && item.attributes.indexOf(".drill=plated") >= 0) {
if(size > 12000 ){
GEN.selLayerFeat({layer:layer, index:index,operation:"select"});
if(GEN.getSelectCount() > 0){GEN.selMoveOther({target_layer:'pt-rou',invert:'no',dx:0,dy:0,size:0})}
}
}
}
})
// 将ol_tmp 和 pt-rou的转为非闭合图形
GEN.clearLayers()
GEN.affectedLayer({affected:'yes',layer:["ol_tmp", "pt-rou"], clear_before:"yes"})
GEN.COM("sel_contourize,accuracy=0,break_to_islands=yes,clean_hole_size=0,clean_hole_mode=x_and_y")
GEN.COM("sel_surf2outline,width=1")
GEN.affectedLayer({affected:'no',mode:'all'})
GEN.workLayer({name:'ol_tmp',display_number:2,clear_before:'yes'})
GEN.selMoveOther({target_layer:'ol',invert:'no',dx:0,dy:0,size:0})
var func = "function(prop){return GUI.showForm(prop) }"
var ret = IKM.command(func, {
title: "确认是否加减物件",
size: "200x120",
items: {
name: 'main',
type: 'FormGridLayout',
property: { margin: 18, spacing: 20, columns: 2 },
pack: {},
child: [
{
name: "chanegitem",
type: "RadioBox",
property: {
item_list:[
{name:"yes", text:"yes"},
{name:"yes", text:"yes"}
]
},
pack: {
label: "是否加减物件",
column_span: 2,
label_alignment: "Left"
},
},
{
type: 'stretch'
}
]
},
values: {},
self: this
}, 1);
IKM.msg(ret)
// 保存
if(/yes/ig.test(par.auto_save)){
GEN.checkInout({job:job,mode:"out"}) // 结束保存料号 关闭料号
......
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