Commit 8a7ed7b0 authored by Scott Sun's avatar Scott Sun

scott

parent 1218d449
/*
NAME:
DESCRIPTION: ;
PARAMETER:
[
]
VERSION_HISTORY:
V1.00 2020-04-20 Scott Sun
1.新版本
HELP:
<html><body bgcolor="#DDECFE">
<font size="3" color="#003DB2"><p>功能简介</p></font>
<p> checkin </p>
<br>
<font size="3" color="#003DB2"><p>参数配置</p></font>
<p> 料号 和 客户配置 </p>
<br>
<font size="3" color="#003DB2"><p>注意事项</p></font>
<p> 无 </p>
<br>
</body></html>
*/
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
// 引入模块 包
var $ = require('topcam.scriptfunc').argv();
var fs = require('fs');
var _ = require('lodash');
var process = require('process');
var mode = $.ikm ? "topcam" : "aimdfm";
var IKM = $.ikm;
if (IKM==undefined ) { IKM = require('topcam.ikm6')($) }
var GEN = $.gen;
var GUI = $.gui || {};
var Job = $.job || $.job_name;
var JobId = $.job_id;
var db = $.db || IKM.db
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,
progress: 0
},
where: { id: $.task_id }
});
}
}
var Status = 'ok';
var resultData = [];
try {
GEN.COM("open_job,job="+Job+",open_win=no,disk_map=,job_map=")
GEN.AUX("set_group,group=99")
GEN.COM("close_job,job="+Job+"")
GEN.COM("disp_on")
GEN.COM("origin_on")
GEN.COM("disp_on")
GEN.COM("origin_on")
GEN.COM("checkin_closed_job,job="+Job);
}
catch (e) {
Status = 'error';
resultData.push({type: "error", title: "脚本执行出错!", detail: [{desc: _.toString(e)}]});
return (mode === "aimdfm") ? {status: Status, result_data: resultData} : "Error";
}
This diff is collapsed.
...@@ -26,7 +26,7 @@ PARAMETER: ...@@ -26,7 +26,7 @@ PARAMETER:
] ]
VERSION_HISTORY: VERSION_HISTORY:
V1.00 2020-04-20 Scott Sun V1.01 2020-04-20 Scott Sun
1.新版本 1.新版本
HELP: HELP:
...@@ -53,6 +53,7 @@ var $ = require('topcam.scriptfunc').argv(); ...@@ -53,6 +53,7 @@ var $ = require('topcam.scriptfunc').argv();
var fs = require('fs'); var fs = require('fs');
var _ = require('lodash'); var _ = require('lodash');
var zip = require('topsin.zip'); var zip = require('topsin.zip');
var process = require('process');
var mode = $.ikm ? "topcam" : "aimdfm"; var mode = $.ikm ? "topcam" : "aimdfm";
var IKM = $.ikm; var IKM = $.ikm;
if (IKM==undefined ) { IKM = require('topcam.ikm6')($) } if (IKM==undefined ) { IKM = require('topcam.ikm6')($) }
...@@ -88,8 +89,12 @@ var Status = 'ok'; ...@@ -88,8 +89,12 @@ var Status = 'ok';
var resultData = []; var resultData = [];
var import_info = []; var import_info = [];
var inputState = []; var inputState = [];
var cam_workflow_info = IKM.get_jobinfo({jobid:JobId, jobinfo:"cam_workflow_info"});
if(cam_workflow_info){
IKM.save_job_info({jobid:JobId, jobinfohash:{cam_workflow_info:""}})
}
try { try {
script_info({ msg: "import start" }) script_info({ msg: "import start", result_severity:"info" })
var par = PAR; var par = PAR;
// var db_path = db.query("",function(q){ // var db_path = db.query("",function(q){
// return q.selectValue({ // return q.selectValue({
...@@ -101,7 +106,7 @@ try { ...@@ -101,7 +106,7 @@ try {
// if(_.isEmpty(db_path)){throw "quote-data-upload error"} // if(_.isEmpty(db_path)){throw "quote-data-upload error"}
if(!par.path || par.path == "") {throw "path error"} if(!par.path || par.path == "") {throw "path error"}
if(!par.hasOwnProperty("config_path") || par.config_path==""){ if(!par.hasOwnProperty("config_path") || par.config_path==""){
console.log("========================cfg"); console.log("===================cfg");
par.config_path = "cam/input_data" par.config_path = "cam/input_data"
}; };
if(!par.hasOwnProperty("db") || par.db==""){ if(!par.hasOwnProperty("db") || par.db==""){
...@@ -155,7 +160,6 @@ try { ...@@ -155,7 +160,6 @@ try {
// if(vc_position && vc_position != "" && !(/null/ig.test(vc_position))){ // if(vc_position && vc_position != "" && !(/null/ig.test(vc_position))){
// job_file_baseName = job_file_baseName + "_" + vc_position // job_file_baseName = job_file_baseName + "_" + vc_position
// } // }
console.log("========= ====>pathInfo:"+ _.toString(pathInfo) + " job: " + job_file_baseName)
var jobFile = pathInfo.filter(function(v){return v.baseName.toLowerCase() == job_file_baseName}) var jobFile = pathInfo.filter(function(v){return v.baseName.toLowerCase() == job_file_baseName})
if(jobFile.length == 0){throw "job file is not exist"} if(jobFile.length == 0){throw "job file is not exist"}
var jobFiles = [] // 记录要分析的文件 var jobFiles = [] // 记录要分析的文件
...@@ -169,7 +173,6 @@ try { ...@@ -169,7 +173,6 @@ try {
// 将jobFile下的zip解压 // 将jobFile下的zip解压
decompression(jobFile[0].path, []) decompression(jobFile[0].path, [])
var job_attrs = db.query("",function(q){ var job_attrs = db.query("",function(q){
return q.selectValue({ return q.selectValue({
table:'pdm_job', table:'pdm_job',
...@@ -179,11 +182,7 @@ try { ...@@ -179,11 +182,7 @@ try {
}) })
}); });
if (!job_attrs ) { job_attrs = {}} if (!job_attrs ) { job_attrs = {}}
if (inputState.indexOf("rar") >=0 || inputState.indexOf("7z") >=0) { job_attrs.readin_result = "Readin"
job_attrs.readin_result = "解压失败-格式无法识别"
} else {
job_attrs.readin_result = "已读入"
}
db.query("",function(q){ db.query("",function(q){
return q.updateRow({ return q.updateRow({
table:'pdm_job', table:'pdm_job',
...@@ -198,19 +197,15 @@ try { ...@@ -198,19 +197,15 @@ 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){ if(jobInfo.data.length == 0){
script_info({ msg: "file error" }) script_info({ msg: "file error", result_severity:"error" })
throw "file error"} throw "file error"}
var importOk = false; // 是否成功导入 var importOk = false; // 是否成功导入
script_info({ progress: 10 }) script_info({ progress: 10 })
if(/odb/ig.test(jobInfo.type)){ // odb导入 if(/odb/ig.test(jobInfo.type)){ // odb导入
if(jobInfo.data.length == 1){ // 只分析到一个tgz文件 直接导入 if(jobInfo.data.length == 1){ // 只分析到一个tgz文件 直接导入
IKM.msg("只分析到一个tgz文件 直接导入") IKM.msg("只分析到一个tgz文件 直接导入")
import_info.push({name:jobInfo.data[0].file.name, type:"odb++", date:now(),user:$.user_name}) 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) var err = importJob({name:job,db:custCfg.db,path:jobInfo.data[0].file.path},config.delSameJob)
...@@ -301,20 +296,20 @@ try { ...@@ -301,20 +296,20 @@ try {
GEN.COM("input_manual") GEN.COM("input_manual")
importOk = true importOk = true
} }
if(!importOk){ script_info({ msg: "import error" }); throw "import error"} if(!importOk){ script_info({ msg: "import error",result_severity:"error" }); throw "import error"}
script_info({ progress: 20 }) script_info({ progress: 20 })
reNameStep(job) reNameStep(job)
if(/2171/.test(par.customer)){ if(/2171/.test(par.customer)){
var matrix = GEN.getMatrix({job:job}); // var matrix = GEN.getMatrix({job:job});
comp = Object.keys(matrix).filter(function(v){ // 如果有comp层 删除 // comp = Object.keys(matrix).filter(function(v){ // 如果有comp层 删除
return /^comp_\+_/ig.test(v) // return /^comp_\+_/ig.test(v)
}) // })
if (comp.length > 0){ // if (comp.length > 0){
var tmp = GEN.getStepList({job:job}) // var tmp = GEN.getStepList({job:job})
GEN.openStep({job:job,name:tmp[0]}) // GEN.openStep({job:job,name:tmp[0]})
GEN.COM("delete_comp") // GEN.COM("delete_comp")
GEN.closeStep() // GEN.closeStep()
} // }
} else if ((/yucca/ig.test(par.customer))) { } else if ((/yucca/ig.test(par.customer))) {
var matrix = GEN.getMatrix({job:job,type:"array"}) var matrix = GEN.getMatrix({job:job,type:"array"})
matrix.layer_type.forEach(function(v, i){ matrix.layer_type.forEach(function(v, i){
...@@ -384,6 +379,10 @@ try { ...@@ -384,6 +379,10 @@ try {
} }
} }
catch (e) { catch (e) {
script_info({ result_severity: "error" })
IKM.save_job_info({jobid:JobId, jobinfohash:{cam_workflow_info:_.toString(e)}})
IKM.msg(_.join(GEN.STATUS, "\n")) IKM.msg(_.join(GEN.STATUS, "\n"))
IKM.msg(e) IKM.msg(e)
Status = 'error'; Status = 'error';
...@@ -471,7 +470,6 @@ function importJob(props,delSameJob){ ...@@ -471,7 +470,6 @@ function importJob(props,delSameJob){
} }
} }
props.path = changePath(props.path) props.path = changePath(props.path)
IKM.msg(props)
GEN.importJob(props); GEN.importJob(props);
} }
...@@ -534,7 +532,6 @@ function script_info(props){ // result_severity progress ...@@ -534,7 +532,6 @@ 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 count = 0;
...@@ -542,15 +539,16 @@ function decompression(path, zips) { ...@@ -542,15 +539,16 @@ function decompression(path, zips) {
if (item.suffix == "zip" || item.suffix == "rar" || item.suffix == "7z") { if (item.suffix == "zip" || item.suffix == "rar" || item.suffix == "7z") {
inputState.push(item.suffix) inputState.push(item.suffix)
} }
if(item.suffix === "zip" && zips.indexOf(item.path) < 0){ if(/zip|rar|7z/.test(item.suffix) && zips.indexOf(item.path) < 0){
if(item.name.length >= 20) { if(item.name.length >= 20) {
var mvname = "zip_custom" + count + ".zip"; var mvname = "custom" + count + "." + item.suffix;
count++ count++
fs.rename(item.path, item.dir + "/" + mvname) fs.rename(item.path, item.dir + "/" + mvname)
item.path = item.dir + "/" + mvname item.path = item.dir + "/" + mvname
} }
zips.push(item.path) zips.push(item.path)
zip.unzip(item.path); var dir_name = item.path.replace(/\.(zip|7z|rar)$/, "");
autoUn(item.path, dir_name);
return true return true
} }
return false return false
...@@ -568,3 +566,14 @@ function changePath(path) { ...@@ -568,3 +566,14 @@ function changePath(path) {
} }
}) })
} }
function autoUn(path, dirname) {
console.log("=====path: " + path);
console.log("=====dirname: " + dirname);
if(/\.rar$/.test(path)){
fs.mkdir(dirname)
process.exec('unrar', ['x' , path, dirname, "-o+"])
} else {
process.exec('7za', ['x' , path, "-o"+dirname, "-aoa"])
}
}
\ No newline at end of file
/*
NAME:
DESCRIPTION: ;
PARAMETER:
[
{
name : 'path',
title : '资料路径',
type : 'LineEdit',
property : {tool_tip : '资料路径,必填'},
},
{
name : 'db',
title : '料号db',
type : 'LineEdit',
property : {tool_tip : '料号db,默认是genesis'},
},
{
name : 'config_path',
title : '配置地址',
type : 'LineEdit',
property : {tool_tip : '配置的路径'},
}
]
VERSION_HISTORY:
V1.00 2020-04-20 Scott Sun
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>
<br>
<font size="3" color="#003DB2"><p>注意事项</p></font>
<p> 无 </p>
<br>
</body></html>
*/
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
// 引入模块 包
console.log("=============================================>input_start");
console.log("=============================================>input_start");
console.log("=============================================>input_start");
console.log("=============================================>input_start");
var $ = require('topcam.scriptfunc').argv();
var fs = require('fs');
var _ = require('lodash');
var zip = require('topsin.zip');
var mode = $.ikm ? "topcam" : "aimdfm";
var IKM = $.ikm;
if (IKM==undefined ) { IKM = require('topcam.ikm6')($) }
var GEN = $.gen;
var GUI = $.gui || {};
var Job = $.job || $.job_name;
var JobId = $.job_id;
var db = $.db || IKM.db
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,
progress: 0
},
where: { id: $.task_id }
});
}
}
var Status = 'ok';
var resultData = [];
try {
GEN.COM("open_job,job="+job+",open_win=no,disk_map=,job_map=")
GEN.AUX("set_group,group=99")
GEN.COM("close_job,job="+job+"")
GEN.COM("disp_on")
GEN.COM("origin_on")
GEN.COM("disp_on")
GEN.COM("origin_on")
GEN.COM("checkin_closed_job,job="+job)
if (mode === "aimdfm") {
$.QDfm.updateRow({
table: "pdm_aimdfm_task",
data: {
progress: 30
},
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
};
} else {
resultData.push({ type: "info", title: "操作完成, 请注意检查!" });
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";
}
This diff is collapsed.
...@@ -19,3 +19,6 @@ i6 01_topccp_ms... 02ccp_ms... ... 06_botccp_ms... as_topccp_ms... dimensionsc ...@@ -19,3 +19,6 @@ i6 01_topccp_ms... 02ccp_ms... ... 06_botccp_ms... as_topccp_ms... dimensionsc
vivo: vivo:
topenig topenig
vpn: 5sMm2U71
\ No newline at end of file
...@@ -486,12 +486,6 @@ try { ...@@ -486,12 +486,6 @@ try {
GEN.affectedLayer( {mode:'all',affected:'no'} ); GEN.affectedLayer( {mode:'all',affected:'no'} );
GEN.closeStep() GEN.closeStep()
}) })
// 保存 // 保存
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(/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") {
...@@ -684,8 +678,8 @@ function save_drill_info(props){ ...@@ -684,8 +678,8 @@ function save_drill_info(props){
drill_size_lower_tol : toolInfo.min_tol, drill_size_lower_tol : toolInfo.min_tol,
drill_size_upper_tol : toolInfo.max_tol drill_size_upper_tol : toolInfo.max_tol
}; };
orgDrills.push(orgDrill); orgDrills.push(orgDrillInfo);
miDrills.push(miDrill); miDrills.push(miDrillInfo);
}) })
} }
}) })
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
=head
NAME: ZWZ_Merge_Layer
DESCRIPTION: 复合层铜皮整理
PARAMETER:
[
{
name : 'step_filter',
type : 'LineEdit',
title : 'step过滤',
pack : {row:0,column:1},
property:{tool_tip:'选择step时候的过滤器'},
},
{
name : 'bak_layer_suf',
type : 'LineEdit',
title : '备份层后缀',
pack : {row:0,column:1},
property:{tool_tip:'去铜丝参数'},
}
]
VERSION_HISTORY:
V1.00 2020-10-30 Super
1.新版本
HELP:
<html><body bgcolor="#DDECFE">
<font size="3" color="#003DB2"><p>功能简介</p></font>
<p> DFM优化 </p>
<br>
<font size="3" color="#003DB2"><p>参数配置</p></font>
<font color="#008000"><p> ● 无</p></font>
<font size="3" color="#003DB2"><p>注意事项</p></font>
<p> ● 无 </p>
<br>
</body></html>
=cut
use strict;
use utf8;
use Data::Dump 'dump';
my ($Job,$Step)=($JOB,undef);
my $Report = 'done';
my @work_layers;
$PAR->{bak_layer_suf} = $PAR->{bak_layer_suf} ? $PAR->{bak_layer_suf} : '++--merge+layer++';
try {
###检查Genesis料号是否存在并打开
show_loading("检查${Job}是否存在..",0,position=>'n');
if (! $GEN->isJobExists(job=>$Job) ){
$GUI->msgbox(-icon=>'error',-text=>"料号 $Job 在Genesis中不存在, 请检查!");
return 'Error';
}
update_loading("正在打开料号 ${Job} ...",0,position=>'n');
$GEN->openJob(job=>$Job) unless ($GEN->isJobOpen(job=>$Job));
my @steps = $GEN->getStepList(job=>$Job);
if ( @steps == 0 ) {
$GUI->msgbox(-icon=>'error',-text=>'在料号中没有Step存在,你将退出!');
return 'Error';
}
elsif (@steps != 1){
my $srep_filter = $PAR->{step_filter} ? $PAR->{step_filter} : '.*';
my @tmp_steps = grep(/$srep_filter/,@steps);
if ( @tmp_steps == 0 ) {
$GUI->msgbox(-icon=>'error',-text=>'在料号中没有过滤器中的step存在,你将退出!');
return 'Error';
}
elsif ( @tmp_steps == 1 ) {
$Step = $tmp_steps[0];
}
else {
$Step = $GUI->select_step(-title=>'请选择工作Step',
-steplist=>\@tmp_steps,
-selectmode=>'single');
return 'Cancel' unless ($Step);
}
}
else {
$Step = $steps[0];
}
##
update_loading("过滤层别...",0,position=>'n');
@work_layers = get_work_layer();
return 'Cancel' if grep /^Cancel$/,@work_layers;
###打开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=>'inch');
$GEN->zoomHome();
$GEN->COM("disp_off");
foreach my $layer (@work_layers){
update_loading("$layer 复合层整理中...",0,position=>'n');
next if ($GEN->isLayerEmpty(job=>$Job,step=>$Step,layer=>$layer));
my $bak_layer = $layer.$PAR->{bak_layer_suf};
my $dest_suffix = '__tl__';
$GEN->createLayer(job=>$Job,layer=>$bak_layer,context=>'misc',type=>'document',delete_exists=>'yes');
$GEN->affectedLayer(affected=>'yes',layer=>$layer,clear_before=>'yes');
#1.分解复合层
$GEN->COM('unmerge_layer',layer=>$layer,dest_suffix=>$dest_suffix,dest_max_layers=>1000);
$GEN->selMoveOther(target_layer=>$bak_layer,invert=>'no');
#2.获取复合层名
my %matrix = $GEN->getMatrix(job=>$Job,type=>'hash');
my $exp = $layer.$dest_suffix;
my @merge_layer = grep(/($exp)/,sort {$matrix{$a}{row} <=> $matrix{$b}{row}} keys %matrix);
if(@merge_layer){
foreach my $tmp_layer (@merge_layer){
$GEN->affectedLayer(affected=>'yes',layer=>$tmp_layer,clear_before=>'yes');
my $check = substr($tmp_layer,-1);
if($check =~ /^p$/){
$GEN->selMoveOther(target_layer=>$layer,invert=>'no');
$GEN->affectedLayer(affected=>'yes',layer=>$layer,clear_before=>'yes');
$GEN->selectByFilter(polarity=>'negative',profile=>'all');
next unless ($GEN->getSelectCount());
$GEN->selClearFeature();
$GEN->selectByFilter(feat_types=>'surface',polarity=>'positive',profile=>'all');
next unless ($GEN->getSelectCount());
$GEN->selectByFilter(polarity=>'negative',profile=>'all');
$GEN->selContourize() if ( $GEN->getSelectCount() > 0 );
}else{
$GEN->selMoveOther(target_layer=>$layer,invert=>'yes');
$GEN->affectedLayer(affected=>'yes',layer=>$layer,clear_before=>'yes');
$GEN->selectByFilter(feat_types=>'surface',polarity=>'positive',profile=>'all');
next unless ($GEN->getSelectCount());
$GEN->selectByFilter(polarity=>'negative',profile=>'all');
$GEN->selContourize() if ( $GEN->getSelectCount() > 0 );
}
}
$GEN->deleteLayer(job=>$Job,layer=>[@merge_layer]);
}else{
next;
}
}
$GUI->msgbox(-icon=>'info',-text=>'脚本运行完成请仔细检查!');
###output and return status, if genesis error, it will output genesis error command
unless ($GEN->{STATUS}){
return $Report;
}
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 = shift;
$GUI->msgbox(-icon=>'error',-text=>$error);
return 'Error';
}
finally{
$GEN->clearLayers();
$GEN->affectedLayer( mode=>'all',affected=>'no' );
$GEN->COM("disp_on");
};
=head
选择线路层
=cut
sub get_work_layer{
# 获取工作层
my %matrix = $GEN->getMatrix(job=>$Job,type=>'hash');
foreach my $layer (sort {$matrix{$a}{row} <=> $matrix{$b}{row}} keys %matrix) {
if(defined($matrix{$layer}{context}) and $matrix{$layer}{context} eq 'board' ){
if(defined($matrix{$layer}{tl_type}) and ($matrix{$layer}{tl_type} eq 'outer' or $matrix{$layer}{tl_type} eq 'inner')){
push @work_layers,$layer;
}
}
}
my %tmp_matrix;
foreach my $layer (@work_layers) {
$tmp_matrix{$layer} = $matrix{$layer};
}
if (@work_layers > 1) {
@work_layers = $GUI->select_layer(
-title=>'请选择工作层别',
-layermatrix=>\%tmp_matrix,
-selectmode => 'multiple');#single
return 'Cancel' unless(@work_layers);
}
else {
@work_layers = @work_layers;
}
return @work_layers;
}
This diff is collapsed.
=head
NAME: generate_ref_netlist
DESCRIPTION: 产生参考netlist文件
PARAMETER:
{items => [
{
name=>'step_filter',
label=>'Step过滤',
type=>'string',
must_field=>0,
value => '',
remark=>'选择step时候的过滤器',
},
]}
VERSION_HISTORY:
V1.00 2013-03-02 Tomy
by require
HELP:
<html><body bgcolor="#DDECFE">
<font size="3" color="#003DB2"><p>功能简介</p></font>
<p> </p>
<br>
<font size="3" color="#003DB2"><p>参数配置</p></font>
<font color="#008000"><p> ● step过滤</p></font>
<p> 选择step时候的过滤器</p>
<font size="3" color="#003DB2"><p>注意事项</p></font>
<p> ● </p>
<br>
</body></html>
=cut
#use strict;
#my ($JOB,$GEN,$GUI,$DB,$JOB_ID,$PAR);
use utf8;
use Encode;
use Data::Dump 'dump';
my ($Job,$Step);
my $Return = 'Done';
###处理step过滤
$Job = $JOB;
$PAR->{step_filter} = $PAR->{step_filter} ? $PAR->{step_filter} : '.*';
try{
###检查Genesis料号是否存在并打开
if (! $GEN->isJobExists(job=>$Job) ){
$GUI->msgbox(-type=>'error',-text=>"料号 $Job 在Genesis中不存在, 请检查!");
return 'Error';
}
$GEN->openJob(job=>$Job) unless ($GEN->isJobOpen(job=>$Job));
###check and get work Step name
my @steps = $GEN->getStepList(job=>$Job);
if ( @steps == 0 ) {
$GUI->msgbox(-icon=>'error',-text=>'在料号中没有Step存在,你将退出!');
return 0;
}
elsif (@steps != 1){
my @tmp_steps = grep(/$PAR->{step_filter}/,@steps);
if ( @tmp_steps == 1 ) {
$Step = $tmp_steps[0];
}
else {
$Step = $GUI->select_step(-title=>'请选择工作Step',
-steplist=>[@tmp_steps],
-selectmode=>'single');
return 'Cancel' unless ($Step);
}
}
else {
$Step = $steps[0];
}
###Open step and clear layer
$GEN->openStep(job=>$Job,name=>$Step);
$GEN->clearLayers();
$GEN->affectedLayer(mode=>'all',affected=>'no');
$GEN->units(type=>'inch');
$GEN->COM('netlist_page_open',set=>'yes',job1=>$Job,step1=>$Step,type1=>'cur',job2=>$Job,step2=>$Step,type2=>'cur');
$GEN->COM('netlist_recalc',job=>$Job,step=>$Step,type=>'cur',display=>'top');
$GEN->COM('netlist_ref_update',job=>$Job,step=>$Step,source=>'cur',reduce=>'yes');
$GEN->COM('netlist_page_close');
$Return = 'Finish';
$GUI->msgbox(-text=>"参考网络产生成功");
###output and return status, if genesis error, it will output genesis error command
unless ($GEN->{STATUS}){
return $Return;
}
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{
#_deleteLayer(layer=>[$TmpLayer]);
$GEN->units(type=>'mm');
};
__END__
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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