Commit 6423c068 authored by Scott Sun's avatar Scott Sun

scott

parent 0ab79f16
...@@ -4,8 +4,8 @@ ...@@ -4,8 +4,8 @@
* 103: 多套gerber 尝试只导入一套 无法创建profile * 103: 多套gerber 尝试只导入一套 无法创建profile
* 110 122 133 140 142 143 144 149: 无法创建 profile * 110 122 133 140 142 143 144 149: 无法创建 profile
* 115: 缺少层 无法创建profile * 115: 缺少层 无法创建profile
* 117, 118, 124, 126,136(多odb,tgz版本): 多套gerber 既有gerber又有tgz gerber 可以使用 ; tgz 获取matrix会报错: * 117, 118, 124, 126, 136(多odb,tgz版本): 多套gerber 既有gerber又有tgz
* 119: 7z 压缩包 * 119: 7z 压缩包 topjs不支持解压
* 131: 有gerber 有tgz gerber规则不同 tgz无法导入 * 131: 有gerber 有tgz gerber规则不同 tgz无法导入
* 141: 无文件 * 141: 无文件
* 145 150 151 152 odb文件有问题无法手动导入 * 145 150 151 152 odb文件有问题无法手动导入
......
## 1352 ## 1352
* * 103,105 rar压缩包
* 109,113,143,147 创建profile失败
* 115 多套gerber文件 缺少层
...@@ -173,7 +173,9 @@ try { ...@@ -173,7 +173,9 @@ try {
// 分析料号文件 得到料号导入信息 导入类型 // 分析料号文件 得到料号导入信息 导入类型
var jobInfo = analyJobFiles({jobFiles:jobFiles.filter(function(v){return v.isFile}),custCfg:custCfg,config:config,job:job }) var jobInfo = analyJobFiles({jobFiles:jobFiles.filter(function(v){return v.isFile}),custCfg:custCfg,config:config,job:job })
if(jobInfo.data.length == 0){throw "file error"} if(jobInfo.data.length == 0){
script_info({ result_severity: "file error" })
throw "file error"}
var importOk = false; // 是否成功导入 var importOk = false; // 是否成功导入
script_info({ progress: 10 }) script_info({ progress: 10 })
...@@ -511,8 +513,15 @@ function script_info(props){ // result_severity progress ...@@ -511,8 +513,15 @@ function script_info(props){ // result_severity progress
function decompression(path, zips) { function decompression(path, zips) {
var files = fs.listDir(path) var files = fs.listDir(path)
var count = 0;
var zipfiles = files.filter(function(item){ var zipfiles = files.filter(function(item){
if(item.suffix === "zip" && zips.indexOf(item.path) < 0){ if(item.suffix === "zip" && zips.indexOf(item.path) < 0){
if(item.name.length >= 20) {
var mvname = "zip_custom" + count + ".zip";
count++
fs.rename(item.path, item.dir + "/" + mvname)
item.path = item.dir + "/" + mvname
}
zips.push(item.path) zips.push(item.path)
zip.unzip(item.path); zip.unzip(item.path);
return true return true
......
...@@ -296,7 +296,20 @@ try { ...@@ -296,7 +296,20 @@ try {
GEN.openStep({job:job, name:tmp_step}) GEN.openStep({job:job, name:tmp_step})
var now_profile = GEN.getProfile({job:job, step:tmp_step}) var now_profile = GEN.getProfile({job:job, step:tmp_step})
if(now_profile.match(/\n/ig).length == 1){ // 如果没有profile if(now_profile.match(/\n/ig).length == 1){ // 如果没有profile
if(profileRule[0] == "outline") {
GEN.workLayer({name:'outline',display_number:2,clear_before:'yes'})
GEN.selAllFeat()
if(GEN.getSelectCount() > 0) {
GEN.selCreateProfile()
}
var hasProfile = GEN.getProfile({job:job, step:tmp_step})
GEN.closeStep()
if(hasProfile.match(/\n/ig).length == 1){
createOutline({job:job, step:tmp_step, matrix: tmp_matrix, profileRule:profileRule}) createOutline({job:job, step:tmp_step, matrix: tmp_matrix, profileRule:profileRule})
}
} else {
createOutline({job:job, step:tmp_step, matrix: tmp_matrix, profileRule:profileRule})
}
var hasProfile = GEN.getProfile({job:job, step:tmp_step}) var hasProfile = GEN.getProfile({job:job, step:tmp_step})
if(hasProfile.match(/\n/ig).length == 1){ if(hasProfile.match(/\n/ig).length == 1){
script_info({ result_severity: "创建profile失败" }) script_info({ result_severity: "创建profile失败" })
...@@ -688,6 +701,9 @@ function createOutline(props){ ...@@ -688,6 +701,9 @@ function createOutline(props){
if(GEN.getSelectCount()>0){GEN.selDelete()} if(GEN.getSelectCount()>0){GEN.selDelete()}
GEN.selClearFeature() GEN.selClearFeature()
GEN.COM("sel_cut_data,det_tol=1,con_tol=1,rad_tol=0.1,filter_overlaps=no,delete_doubles=no,use_order=yes,ignore_width=yes,ignore_holes=none,start_positive=yes,polarity_of_touching=same") GEN.COM("sel_cut_data,det_tol=1,con_tol=1,rad_tol=0.1,filter_overlaps=no,delete_doubles=no,use_order=yes,ignore_width=yes,ignore_holes=none,start_positive=yes,polarity_of_touching=same")
if(/1352/ig.test(PAR.customer) ){
GEN.COM("sel_polarity,polarity=positive")
}
GEN.selectByFilter({feat_types:"surface"}) GEN.selectByFilter({feat_types:"surface"})
GEN.selReverse() GEN.selReverse()
if(GEN.getSelectCount()>0){GEN.selDelete()} if(GEN.getSelectCount()>0){GEN.selDelete()}
......
...@@ -1081,11 +1081,11 @@ ...@@ -1081,11 +1081,11 @@
], ],
"tl_name": [ "tl_name": [
{"orig_name" : ["pasttop\\.art","past_top"], "tl_name" : "past_top" }, {"orig_name" : ["pasttop\\.art","past_top"], "tl_name" : "past_top" },
{"orig_name" : ["pastbotm\\.art","past_botm"], "tl_name" : "past_botm" }, {"orig_name" : ["pastbotm\\.art","past_bot"], "tl_name" : "past_botm" },
{"orig_name" : ["^silktop\\.art$","silk_top"], "tl_name" : "silk_top" }, {"orig_name" : ["^silktop\\.art$","silk_top"], "tl_name" : "silk_top" },
{"orig_name" : ["^silkbotm\\.art$","silk_bot"], "tl_name" : "silk_bot" }, {"orig_name" : ["^silkbotm\\.art$","silk_bot"], "tl_name" : "silk_bot" },
{"orig_name" : ["soldtop.art","sm_top"], "tl_name" : "sm_top" }, {"orig_name" : ["soldtop.art","sm_top|mask_top"], "tl_name" : "sm_top" },
{"orig_name" : ["soldbotm\\.art","sm_bot"], "tl_name" : "sm_botm" }, {"orig_name" : ["soldbotm\\.art","sm_bot|mask_bot"], "tl_name" : "sm_botm" },
{"orig_name" : ["^top$","^top.art$"], "tl_name" : "top" }, {"orig_name" : ["^top$","^top.art$"], "tl_name" : "top" },
{"orig_name" : ["^pgp(\\d+)\\.art$","^art(\\d+)\\.art$","^l_(\\d+)"], "tl_name" : "l_($1)"}, {"orig_name" : ["^pgp(\\d+)\\.art$","^art(\\d+)\\.art$","^l_(\\d+)"], "tl_name" : "l_($1)"},
{"orig_name" : ["^bot\\.art$","^bottom$","^bottom.art$"], "tl_name" : "bottom" }, {"orig_name" : ["^bot\\.art$","^bottom$","^bottom.art$"], "tl_name" : "bottom" },
...@@ -1106,7 +1106,65 @@ ...@@ -1106,7 +1106,65 @@
tl_name: "drill($1)-($2)", tl_name: "drill($1)-($2)",
regs: ["(\\d+)-(\\d+)\\.drl$"] regs: ["(\\d+)-(\\d+)\\.drl$"]
} }
},
"extra": [
{
"verification": function(info){
if(!info.type){return false}
return /gerber/ig.test(info.type)
},
"fn": function(props){
var fileInfo = props.fileInfo;
var step = props.step;
fileInfo.forEach(function(item){
var layer = item.file.name.toLowerCase().split(" ").join("-")
var path = item.file.path
var filectx = fs.readFile(path)
var tmp = filectx.match(/Holesize \d\. = [\d\.]+ Tolerance = [\S]+ [\S]+ [\S]+ Quantity = \d+\n/igm)
if(tmp && tmp.length) {
var units = "mm"
var res = tmp.map(function(v,i) {
var tmp2 = /Holesize \d\. = ([\d\.]+) Tolerance = ([\S]+) ([\S]+) ([\S]+) Quantity = \d+\n/igm.exec(v);
if(/MILS/ig.test(tmp2[4])){
units = "inch"
}
return {
size: tmp2[1],
tolerance: tmp2[2],
type: tmp2[3],
unit: tmp2[4],
row: i+1
}
})
// [{"size":"0.100300","tolerance":"+0.020000/-0.020000","type":"PLATED","unit":"MM" MILS,"row":1}]
GEN.units({type:units})
var toolsInfo = GEN.getTool({job:job, step:step, layer:layer, units:units})
GEN.COM("tools_show,layer="+layer)
// {"1":{"count":"01156","num":"1","type":"plated","min_tol":"0","max_tol":"0","finish_size":"1","drill_size":"1","slot_len":"0","type2":"standard","shape":"hole","bit":0}}
GEN.COM("tools_tab_reset")
var alltype = {
plated: "plate",
non_plated: "nplate",
laser: "via",
via: "via"
} }
Object.keys(toolsInfo).forEach(function(row, i){
var info = toolsInfo[row];
var numberrow = i;
var k = units == "mm" ? 1000 : 1;
var type = res[numberrow]? res[numberrow].type.toLowerCase() : info.type.toLowerCase();
var min_tol = res[numberrow]? Math.abs( res[numberrow].tolerance.split("/")[1] * k ): info.min_tol;
var max_tol = res[numberrow]? Math.abs(res[numberrow].tolerance.split("/")[0] * k) : info.max_tol;
var drill_size = res[numberrow]? res[numberrow].size * k : info.drill_size;
GEN.COM("tools_tab_add,num="+row+",shape="+info.shape+",type="+alltype[type]
+",min_tol="+min_tol+",max_tol="+max_tol+",bit=,finish_size="+drill_size+",drill_size="+drill_size);
})
GEN.COM("tools_set,layer="+layer+",thickness=0,user_params=,slots=by_length")
}
})
}
}
]
} }
}, },
"data_format": [ "data_format": [
......
This diff is collapsed.
...@@ -5,9 +5,9 @@ PARAMETER: ...@@ -5,9 +5,9 @@ PARAMETER:
[ [
{ {
name : 'step', name : 'step',
title : 'step', title : '过滤Step',
type : 'LineEdit', type : 'LineEdit',
property : {tool_tip : '目标step,默认是orig'}, property : {tool_tip : '过滤Step'},
}, },
{ {
name : 'auto_save', name : 'auto_save',
...@@ -22,15 +22,14 @@ PARAMETER: ...@@ -22,15 +22,14 @@ PARAMETER:
} }
} }
] ]
VERSION_HISTORY: VERSION_HISTORY:
V1.00 2020-09-01 Scott Sun V1.00 2020-09-25 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> sec drc 分析 </p>
<br> <br>
<font size="3" color="#003DB2"><p>参数配置</p></font> <font size="3" color="#003DB2"><p>参数配置</p></font>
<p> step信息 </p> <p> step信息 </p>
...@@ -40,9 +39,8 @@ PARAMETER: ...@@ -40,9 +39,8 @@ PARAMETER:
<br> <br>
</body></html> </body></html>
*/ */
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
console.log("==============================>template");
// 引入模块 包 // 引入模块 包
var $ = require('topcam.scriptfunc').argv(); var $ = require('topcam.scriptfunc').argv();
var fs = require('fs'); var fs = require('fs');
...@@ -56,81 +54,60 @@ var Job = $.job || $.job_name; ...@@ -56,81 +54,60 @@ var Job = $.job || $.job_name;
var JobId = $.job_id; var JobId = $.job_id;
var db = $.db || IKM.db var db = $.db || IKM.db
var PAR = {} var PAR = {}
if ($.par) { if ($.par) { PAR = $.par } else if ($.hasOwnProperty('script_parameter')){ PAR = JSON.parse($.script_parameter); }
PAR = $.par
} else if ($.hasOwnProperty('script_parameter')){
PAR = JSON.parse($.script_parameter);
}
if (mode === "aimdfm") { if (mode === "aimdfm") {
var database = require("topsin.database"); var database = require("topsin.database");
database.addConnection($.conf.database_conf, "DFM"); database.addConnection($.conf.database_conf, "DFM");
var QDfm = database.query("DFM"); var QDfm = database.query("DFM");
$.QDfm = QDfm; $.QDfm = QDfm;
if ($.conf.product_type == "aimdfm") { if ($.conf.product_type == "aimdfm") {
QDfm.updateRow({ QDfm.updateRow({ table: "pdm_aimdfm_task", data: { current_process_title: $.process_title }, where: { id: $.task_id } });
table: "pdm_aimdfm_task",
data: {
current_process_title: $.process_title
},
where: { id: $.task_id }
});
} }
} }
var Status = 'ok'; var Status = 'ok';
var resultData = []; var resultData = [];
var par = PAR;
try { var default_par = {
var par = PAR;
var default_par = {
step: "unit", step: "unit",
auto_save: "No", auto_save: "No",
units: 'mm' }
} for(var key in default_par){ if (!par.hasOwnProperty(key) || par[key] == ""){ par[key] = default_par[key] }}
for(var key in default_par){ // 设置默认属性 var job = Job;
if (!par.hasOwnProperty(key) || par[key] == ""){ try {
par[key] = default_par[key] if(_.isEmpty(job)){throw "参数job不存在"} else { job = job.toLowerCase() }
}
}
if(_.isEmpty(Job)){throw "参数Job不存在"}
var job = Job.toLowerCase()
if(!GEN.isJobExists({job:job})){throw "料号"+job+"不存在"} if(!GEN.isJobExists({job:job})){throw "料号"+job+"不存在"}
if(!GEN.isJobOpen({job:job})){ GEN.openJob({job:job}) } if(!GEN.isJobOpen({job:job})){ GEN.openJob({job:job}) }
if(mode == "aimdfm"){ if(mode == "aimdfm"){ if(GEN.checkInout({job:job,mode:"test"}) != 0){ throw "the job check" } else { GEN.checkInout({job:job,mode:"out"}) } }
if(GEN.checkInout({job:job,mode:"test"}) != 0){ throw "the job check" }
GEN.checkInout({job:job,mode:"out"});
}
var step = "pcbdata"
var job = "88880026_126"
var matrix = GEN.getMatrix({job:job,type:"array"}) var stepList = GEN.getStepList({job:job})
matrix.layer_type.forEach(function(v, i){ stepList = stepList.filter(function(v){
if( v == "document") { var reg = new RegExp(par.step_filter,"ig")
GEN.COM("matrix_layer_type,job="+job+",matrix=matrix,layer="+matrix.name[i]+",type=signal") return reg.test(v)
}
}) })
if(stepList.length == 0){throw "未找到step"}
IKM.msg(GEN.getTool({job:job,step:"unit",layer:"drl"}))
// 保存
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") { if (mode === "aimdfm") {
$.QDfm.updateRow({table: "pdm_aimdfm_task",data: {progress: 33.33},where: { id: $.task_id }}); $.QDfm.updateRow({table: "pdm_aimdfm_task",data: {progress: 33.33},where: { id: $.task_id }});
if (GEN.hasError()) { if (GEN.hasError()) { Status = 'error';resultData.push({ type: "error", title: "GEN错误!", detail: [{ desc: _.join(GEN.STATUS, "\n") }] });
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 { resultData.push({ type: "info", title: "操作完成, 请注意检查!" }); return {status: Status,result_data: resultData}; }
}else { }else { return "Done" }
return "Done"
}
} catch (e) { } catch (e) {
IKM.msg(_.join(GEN.STATUS, "\n")) IKM.msg(_.join(GEN.STATUS, "\n"));IKM.msg(e);Status = 'error';
IKM.msg(e)
Status = 'error';
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";
} }
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
var fs = require("fs");
var fonts = fs.readFile("./data")
fonts = fonts.split("\n").filter(function(v){return v !== ""})
fonts = fonts.map(function(v){ if (v[0] === "第") {return "\n\n" + v} else {return v} })
var str = fonts.join("")
fs.writeFile("./tmp.md",str)
\ No newline at end of file
=head
NAME:ZWZ_output_drill_table
DESCRIPTION:
PARAMETER:
[
]
VERSION_HISTORY:
V1.01 2014-01-07 Sting
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> ● 无</p>
<font size="3" color="#003DB2"><p>注意事项</p></font>
<p> ● 无 </p>
<br>
</body></html>
=cut
use Data::Dump 'dump';
dump('+-+-+-+-+-+-+-+++-+------1');
$GEN->PAUSE('1');
use strict;
use utf8;
use Encode;
use Number::Format 'round';
use File::Path 'make_path';
use File::Copy;
use_module('TL_GenMath');
use_module('TL_OLE_Excel');
dump('+-+-+-+-+-+-+-+++-+------2');
try{
my $EX = TL::OLE::Excel->new();
$GEN->PAUSE('2');
unless ($GEN->{STATUS}){
show_loading("孔表资料制作完成....!",0,position=>'center');
sleep(1);
}
else{
$GUI->msgbox(-icon=>'error',-text=>join("\n",@{$GEN->{STATUS}}));
addFlowNotes(-notes=>" Genesis Error:\n ".join("\n ",@{$GEN->{STATUS}}));
return 'Error';
}
}
catch Error::Simple with {
my $error = encode("utf8",shift);
$GUI->msgbox(-icon=>'error',-text=>$error);
return 'Error';
}
finally{
};
=head
钻孔信息写入Excel template_file=>,file=>,data=>,
A 刀具
C 产品孔径
D PTH
E 公差(+)
F 公差(-)
G 钻咀直接
N PA孔数
P 类型
Q 备注
=cut
sub output_excel
{
my %par = @_;
if(defined$par{data}){
my $template_file = $par{template_file};
my %drl_layer;
#多层钻孔时数据是合在一起的
foreach my $tmp (keys %{$par{data}}){
my ($tmp_data,) = split /\-/,$tmp;
if(defined($drl_layer{$tmp_data})){
next;
}else{
$drl_layer{$tmp_data} = 1;
}
}
foreach my $tmp (keys %drl_layer){
my $cam = $IKM->get_jobinfo(-jobname=>$Job,-jobid=>$JOB_ID,-jobcategory=>'work',-jobinfo=>'cam_serial_number',-withspec=>1);
my $folder = 'drill';
my $path = $PAR->{Outpath}."$cam/$folder";
my $excel_file = $path.'/'.$Job.'_'."$tmp.xls";
unlink $excel_file if (-e $excel_file);
if (-e $excel_file) {
$GUI->msgbox(-icon=>'error',-text=>"你正打开${excel_file},请关闭${excel_file}后再运行脚本!");
return 'Error';
}
copy($template_file,$excel_file);
my @data = grep($_ =~ /($tmp)/,sort{$par{data}->{$a}{sequence} <=> $par{data}->{$b}{sequence}} keys %{$par{data}});
foreach my $tmp (@data){
}
# my $EX = TL::OLE::Excel->new();
# my $tol_row = 2;#从第2行开始
# $EX->open_file($excel_file);
# $EX->select_ws('drill_table');
# $EX->set_range_value('A'.$tol_row => 'T01');
# $EX->save();
}
}
}
__END__
saveMeans({job:job,step:pcs_step,chklist:oChecklistName})
function mkPath(path, list) {
if (list.length) {
var newPath = path + '/' + list.shift()
if (!fs.dirExists(newPath)) {fs.mkdir(newPath)}
return mkPath(newPath, list)
} else {
return path
}
}
function saveMeans(props){
var job = props.job
var custstep = props.step
var chklist = props.chklist
var nact = props.nact
var jobpath = GEN.getJobPath({job: job})
var filter = props.filter
var afterPath = mkPath(jobpath, ["user", "opencam", "steps"])
var steps;
if (custstep) {
steps = [custstep]
} else {
steps = GEN.getStepList({job: job})
}
if(!steps || steps.length==0){
return
}
steps.forEach(function (step) {
var chkPath = mkPath(afterPath, [step, "chk"])
var chks
if (chklist) {chks = [chklist]}else {
chks = GEN.getChecklist({job: job,step: step})
}
if(chks && chks.length){
chks.forEach(function (item, i) {
var afterChkPath = mkPath(chkPath, [item])
var hdr = "{\n\
\"title\": \"" + item + "\",\n\
\"sequence\": " + (i + 1) + "\n\
}"
fs.writeFile(afterChkPath + "/hdr", _.toString(hdr))
var nacts = []
if (nact) {
nacts = [nact]
} else {
var nactCount = GEN.getChklistActCount({job:job,step:step,chklist:item})
for (var i = 0; i < nactCount; i++) {
nacts.push(i+1)
}
}
if(nacts.length > 0){
var actionPath = mkPath(afterChkPath, ["actions"])
nacts.forEach(function(index){
var titleFile = GEN.INFO({
entity_type: "check",
entity_path: job + "/" + step + "/" + item,
data_type: "TITLE",
options: "action=" + index,
parse:'no'
})
var title = fs.readFile(titleFile)
title = title.split("=")[1].trim()
title = title.substring(1, title.length-1)
var nackPath = mkPath(actionPath, [index+"-"+title])
fs.writeFile(nackPath + "/hdr", "{\n\
\"title\": \"" + (index + "-" + title) + "\",\n\
\"sequence\": " + index + ",\n\
\"dfm_name\": \"" + title + "\"\n\
}")
var displayFile = GEN.INFO({
entity_type: 'check',
entity_path: job + "/" + step + "/" + item,
data_type: 'MEAS_DISP_ID',
options: "action=" + index,
parse:'no'
});
fs.writeFile(nackPath + "/disp", fs.readFile(displayFile))
var measFile = GEN.INFO({entity_type:'check', entity_path:job+'/'+step+'/'+item, data_type:'MEAS', options:"index+action="+index, parse:'no'});
var means
if(filter){ // 处理过滤
var fileArray = []
var file = fs.openFile(measFile,'r');
while(!file.atEnd()) {
fileArray.push(file.readLine())
}
if(Array.isArray(filter)){
var nowFilter = filter.filter(function(item2){
for (var key in item2) {
var value = item2[key]
if (!Array.isArray(value)){
item2[key] = [value]
}
}
return item2.step.indexOf(step)>=0 && item2.chk.indexOf(item)>=0 && item2.nact.indexOf(index)>=0
})
if (nowFilter.length > 0){
var nowfilter = nowFilter.map(function(v){return v.filter}).reduce(function(a,b){
b.forEach(function(v2){
if (a.indexOf(v2)<0){
a.push(v2)
}
})
return a
},[])
fileArray = fileArray.filter(function(line){
var flag = false
nowfilter.forEach(function(f){
var reg = new RegExp(f, "ig")
if (reg.test(line)){
flag = true
}
})
return flag
})
}
} else if (typeof filter == "object") {
if (filter[step] && filter[step][item] && filter[step][item][String(index)]) {
var nowFilter = filter[step][item][String(index)]
if (!Array.isArray(nowFilter)){nowFilter = [nowFilter]}
fileArray = fileArray.filter(function(line){
var flag = false
nowFilter.forEach(function(f){
var reg = new RegExp(f, "ig")
if (reg.test(line)){
flag = true
}
})
return flag
})
}
}
means = fileArray.join("\n")
} else {
means = fs.readFile(measFile)
}
fs.writeFile(nackPath + "/meas", means)
})
}
})
}
})
}
// 自定义信息
saveCustChk({job:job,custChk:custChk})
function saveCustChk(props){
var job = props.job
var chkinfo = props.custChk
var path = mkPath(GEN.getJobPath({job: job}), ["user", "opencam", "steps"])
chkinfo.forEach(function(chk){
var ckpath = mkPath(path, [chk.step, "chk","custom_chk"])
// 写入action hdr
fs.writeFile(ckpath+"/hdr", "{\n\
\"title\": \"cust_chk\",\n\
\"sequence\": 0\n\
}")
var actionPath = mkPath(ckpath, ["actions"])
chk.action.forEach(function(action, i){
var nact = i + 1
var nactPath = mkPath(actionPath, [nact+"-"+action.name])
// nactPath 写入 meas hdr display
fs.writeFile(nactPath + "/hdr", "{\n\
\"title\": \"" + (nact + "-" + action.name) + "\",\n\
\"sequence\": " + nact + ",\n\
\"dfm_name\": \"" + action.name + "\"\n\
}")
if (Array.isArray(action.meas)){
action.meas = action.meas.map(function(mea, i){
return mea + " " + nact + " R " + String(i + 1)
})
action.meas = action.meas.join("\n")
} else {
action.meas = action.meas + " " + nact + " G " + 1
}
if (!/string/ig.test(typeof action.disp) ) {
action.disp = action.disp.workLayer + " "+ nact+" "+action.disp.showLayers.join(" ")
}
fs.writeFile(nactPath + "/disp", action.disp)
fs.writeFile(nactPath + "/meas", action.meas)
})
})
}
\ No newline at end of file
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