Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in / Register
Toggle navigation
S
Scott
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Scott Sun
Scott
Commits
1dbd449a
Commit
1dbd449a
authored
Apr 22, 2020
by
Scott Sun
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
v20200422-rc1
parent
e4ff3359
Changes
16
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
3994 additions
and
918 deletions
+3994
-918
ATS_AIM_data_input.js
ats/input/ATS_AIM_data_input.js
+317
-0
ATS_AIM_input_data.js
ats/input/ATS_AIM_input_data.js
+14
-12
ATS_AIM_data_format.js
ats/rename/ATS_AIM_data_format.js
+410
-0
config_ats.js
config_ats.js
+7
-7
JTG_NET_set_drill_attribute_aim.js
jtg/JTG_NET_set_drill_attribute_aim.js
+273
-0
JTG_ORG_backup_layers_aim.js
jtg/JTG_ORG_backup_layers_aim.js
+166
-0
JTG_ORG_create_outline_aim.js
jtg/JTG_ORG_create_outline_aim.js
+187
-0
JTG_ORG_delete_profile_aim.js
jtg/JTG_ORG_delete_profile_aim.js
+154
-0
JTG_ORG_input_data_aim.js
jtg/JTG_ORG_input_data_aim.js
+339
-0
JTG_ORG_set_origin_aim.js
jtg/JTG_ORG_set_origin_aim.js
+156
-0
JTG_PUB_auto_save_job_aim.js
jtg/JTG_PUB_auto_save_job_aim.js
+93
-0
JTG_PUB_copy_step_aim.js
jtg/JTG_PUB_copy_step_aim.js
+140
-0
ATS_AIM_customer_data_analysis copy.js
test/ATS_AIM_customer_data_analysis copy.js
+568
-1
ATS_AIM_customer_data_analysis.js
test/ATS_AIM_customer_data_analysis.js
+943
-304
mytest.js
test/mytest.js
+225
-490
test.js
test/test.js
+2
-104
No files found.
ats/input/ATS_AIM_data_input.js
0 → 100644
View file @
1dbd449a
/*
NAME:
DESCRIPTION: ;
PARAMETER:
[
{
name : 'path',
title : '资料路径',
type : 'LineEdit',
property : {tool_tip : '存放所有料号的文件夹路径,不需要进入到料号文件夹内'},
},
{
name : 'customer',
title : '客户配置',
type : 'ComboBox',
property : {
item_list:['customer_1','customer_2','new_data'],
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
database
=
require
(
"topsin.database"
);
database
.
addConnection
(
$
.
conf
.
database_conf
,
"DFM"
);
var
QDfm
=
database
.
query
(
"DFM"
);
if
(
$
.
conf
.
product_type
==
"aimdfm"
)
{
QDfm
.
updateRow
({
table
:
"pdm_aimdfm_task"
,
data
:
{
current_process_title
:
$
.
process_title
},
where
:
{
id
:
$
.
task_id
}
});
}
var
GEN
=
$
.
gen
;
var
Job
=
$
.
job_name
;
var
db
=
$
.
db
;
var
Status
=
'ok'
;
var
resultData
=
[];
var
PAR
=
{};
if
(
$
.
hasOwnProperty
(
'script_parameter'
)){
PAR
=
JSON
.
parse
(
$
.
script_parameter
);
}
try
{
var
par
=
PAR
;
if
(
!
par
.
hasOwnProperty
(
"customer"
)
||
par
.
customer
==
""
){
throw
"未填写配置"
};
if
(
!
par
.
hasOwnProperty
(
"path"
)
||
par
.
path
==
""
){
throw
"未填写路径"
};
if
(
!
par
.
hasOwnProperty
(
"config_path"
)
||
par
.
config_path
==
""
){
console
.
log
(
"========================cfg"
);
par
.
config_path
=
"cam/input_data"
};
if
(
!
par
.
hasOwnProperty
(
"db"
)
||
par
.
db
==
""
){
console
.
log
(
"========================db"
);
par
.
db
=
"genesis"
};
par
.
customer
=
par
.
customer
[
0
].
toUpperCase
()
+
par
.
customer
.
slice
(
1
).
toLowerCase
()
var
cfg
=
db
.
query
(
""
,
function
(
q
){
return
q
.
selectValue
({
table
:
'pub_conf'
,
field
:
'text_data'
,
where
:{
path
:
par
.
config_path
}
})
});
if
(
!
cfg
||
cfg
==
""
){
throw
"cfg can not find"
}
var
config
=
eval
(
cfg
);
if
(
!
config
.
hasOwnProperty
(
"customer"
)){
throw
"config error"
}
var
job
=
Job
;
if
(
_
.
isEmpty
(
job
))
throw
"没有传入料号名!"
;
job
=
job
.
toLowerCase
()
// 如果genesis已经存在这个料号
err
=
delSameJob
({
job
:
job
,
delSame
:
config
.
delSameJob
});
if
(
err
){
throw
err
};
var
custCfg
=
config
.
customer
[
par
.
customer
]
if
(
!
custCfg
){
throw
"config error"
}
custCfg
.
db
=
par
.
db
||
custCfg
.
db
var
step
=
custCfg
.
step
.
toLowerCase
()
// 获取路径下文件信息
var
path
=
par
.
path
||
custCfg
.
path
var
pathInfo
=
fs
.
listDir
(
path
,
1
)
// 判断存不存在料号文件
var
jobFile
=
pathInfo
.
filter
(
function
(
v
){
return
v
.
baseName
.
toLowerCase
()
==
job
})
if
(
jobFile
.
length
==
0
){
throw
"job file is not exist"
}
var
jobFiles
=
[]
// 记录要分析的文件
if
(
!
jobFile
[
0
].
isDir
)
{
jobFiles
.
push
(
jobFile
[
0
])
}
else
{
jobFiles
=
fs
.
listDir
(
jobFile
[
0
].
path
)
}
// 分析料号文件 得到料号导入信息 导入类型
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"
}
var
importOk
=
false
;
// 是否成功导入
if
(
/odb/ig
.
test
(
jobInfo
.
type
)){
// odb导入
if
(
jobInfo
.
data
.
length
==
1
){
// 只分析到一个tgz文件 直接导入
var
err
=
importJob
({
name
:
job
,
db
:
custCfg
.
db
,
path
:
jobInfo
.
data
[
0
].
file
.
path
},
config
.
delSameJob
)
if
(
err
){
throw
err
}
}
else
{
// 多个tgz文件 说明需要合并
var
mergeFiles
=
jobInfo
.
data
.
filter
(
function
(
item
){
var
err
=
importJob
({
name
:
item
.
file
.
baseName
,
db
:
custCfg
.
db
,
path
:
item
.
file
.
path
},
config
.
delSameJob
)
if
(
err
){
throw
err
}
return
/yes/ig
.
test
(
item
.
format
.
isMerge
)
})
var
arr_job
=
mergeFiles
[
0
]
var
arr_step
;
var
steplist
=
GEN
.
getStepList
({
job
:
arr_job
.
file
.
baseName
})
if
(
steplist
.
indexOf
(
arr_job
.
format
.
arrStep
)
<
0
){
arr_step
=
steplist
[
0
]
}
else
{
arr_step
=
arr_job
.
format
.
arrStep
}
GEN
.
openJob
({
job
:
job
});
GEN
.
openJob
({
job
:
arr_job
.
file
.
baseName
});
GEN
.
copyStep
({
// 合并
source_job
:
arr_job
.
file
.
baseName
,
source_name
:
arr_step
,
dest_job
:
job
,
dest_name
:
arr_step
,
});
GEN
.
closeJob
({
job
:
arr_job
.
file
.
baseName
});
GEN
.
deleteJob
({
job
:
arr_job
.
file
.
baseName
});
// 合并后 删除array的料号
}
importOk
=
true
}
if
(
/gerber/ig
.
test
(
jobInfo
.
type
)){
// gerber导入
GEN
.
createJob
({
name
:
job
,
db
:
custCfg
.
db
})
GEN
.
createStep
({
job
:
job
,
name
:
step
})
var
gerberInfo
=
jobInfo
.
data
.
map
(
function
(
item
){
var
gerberCfg
=
JSON
.
parse
(
JSON
.
stringify
(
item
.
format
));
var
file
=
item
.
file
gerberCfg
.
layer
=
file
.
name
.
toLowerCase
()
gerberCfg
.
path
=
file
.
path
gerberCfg
.
format
=
item
.
type
gerberCfg
.
job
=
job
gerberCfg
.
step
=
step
return
gerberCfg
})
GEN
.
COM
(
"input_manual_reset"
)
gerberInfo
.
forEach
(
function
(
v
){
GEN
.
COM
(
"input_manual_set"
,
v
)
})
GEN
.
COM
(
"input_manual"
)
importOk
=
true
}
if
(
!
importOk
){
throw
"import error"
}
// 导入结束
var
matrix
=
GEN
.
getMatrix
({
job
:
job
});
comp
=
Object
.
keys
(
matrix
).
filter
(
function
(
v
){
// 如果有comp层 删除
return
/^comp_
\+
_/ig
.
test
(
v
)
})
if
(
comp
.
length
>
0
){
var
tmp
=
GEN
.
getStepList
({
job
:
job
})
GEN
.
openStep
({
job
:
job
,
name
:
tmp
[
0
]})
GEN
.
COM
(
"delete_comp"
)
GEN
.
closeStep
()
}
GEN
.
checkInout
({
job
:
job
,
mode
:
"out"
})
// 结束保存料号 关闭料号
GEN
.
saveJob
({
job
:
job
});
GEN
.
checkInout
({
job
:
job
,
mode
:
"in"
})
GEN
.
closeJob
({
job
:
job
})
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
};
}
else
{
resultData
.
push
({
type
:
"info"
,
title
:
"操作完成, 请注意检查!"
});
return
{
status
:
Status
,
result_data
:
resultData
};
}
}
catch
(
e
)
{
Status
=
'error'
;
console
.
log
(
"====================================>error"
);
console
.
log
(
_
.
toString
(
e
));
resultData
.
push
({
type
:
"error"
,
title
:
"脚本执行出错!"
,
detail
:
[{
desc
:
_
.
toString
(
e
)}]});
return
{
status
:
Status
,
result_data
:
resultData
};
}
function
delSameJob
(
props
){
var
job
=
props
.
job
var
delSame
=
props
.
delSame
console
.
log
(
"======================>delsame:"
+
delSame
);
if
(
GEN
.
isJobExists
({
job
:
job
})){
if
(
/^yes$/ig
.
test
(
delSame
)){
if
(
GEN
.
isJobOpen
({
job
:
job
})){
GEN
.
closeJob
({
job
:
job
})
}
GEN
.
deleteJob
({
job
:
job
})
}
else
{
return
"job "
+
job
+
" exist"
}
}
}
function
analyJobFiles
(
props
){
var
files
=
props
.
jobFiles
;
var
config
=
props
.
config
;
var
job
=
props
.
job
;
var
custCfg
=
props
.
custCfg
;
var
rules
=
custCfg
.
rules
;
var
paramsFile
=
files
.
filter
(
function
(
file
){
return
/param/ig
.
test
(
file
.
baseName
)})
var
tmp_hash
=
{}
paramsFile
.
forEach
(
function
(
file
){
tmp_hash
[
file
.
baseName
]
=
(
function
(){
var
tmparr
=
fs
.
readFile
(
file
.
path
).
split
(
"
\n
"
)
var
tmp
=
{}
tmparr
.
map
(
function
(
v
){
var
arr
=
v
.
split
(
/
\b\s
+
\b
/
)
tmp
[
arr
[
0
].
replace
(
/-/ig
,
"_"
)]
=
arr
[
1
]
})
return
tmp
})()
})
var
fileInfo
=
files
.
reduce
(
function
(
a
,
file
){
try
{
rules
.
forEach
(
function
(
item
){
if
(
item
.
valid
({
file
:
file
,
job
:
job
})){
var
format
=
config
.
formats
[
item
.
format
]
var
format1
;
if
(
item
.
format_params
){
format1
=
item
.
format_params
({
params
:
tmp_hash
})
}
if
(
format1
){
throw
{
file
:
file
,
type
:
item
.
type
,
format
:
format1
}
}
else
{
throw
{
file
:
file
,
type
:
item
.
type
,
format
:
format
}
}
}
})
}
catch
(
info
)
{
a
.
push
(
info
)
}
return
a
},[])
var
odbfiles
=
fileInfo
.
filter
(
function
(
item
){
return
/odb/ig
.
test
(
item
.
type
)})
if
(
odbfiles
.
length
==
0
){
return
{
type
:
"Gerber"
,
data
:
fileInfo
}
}
else
{
return
{
type
:
"ODB"
,
data
:
odbfiles
}
}
}
function
importJob
(
props
,
delSameJob
){
var
name
=
props
.
name
if
(
GEN
.
isJobExists
({
job
:
name
}))
{
if
(
/^yes$/ig
.
test
(
delSameJob
))
{
if
(
GEN
.
isJobOpen
({
job
:
name
})){
GEN
.
closeJob
({
job
:
name
});
}
GEN
.
deleteJob
({
job
:
name
});
}
else
{
return
"job "
+
name
+
" exist"
;
}
}
GEN
.
importJob
(
props
);
}
ats/input/ATS_AIM_input_data.js
View file @
1dbd449a
...
@@ -12,11 +12,18 @@ PARAMETER:
...
@@ -12,11 +12,18 @@ PARAMETER:
property : {tool_tip : '存放所有料号的文件夹路径,不需要进入到料号文件夹内'},
property : {tool_tip : '存放所有料号的文件夹路径,不需要进入到料号文件夹内'},
},
},
{
{
name : 'customer',
name : 'customer',
title : '客户配置',
title : '客户配置',
type : 'LineEdit',
type : 'RadioBox',
property : {tool_tip : '客户配置'},
property : {
},
item_list:[
{name:'customer_1',text:'customer_1'},
{name:'customer_2',text:'customer_2'},
{name:'new_data',text:'new_data'},
],
tool_tip:'客户代码'
}
},
{
{
name : 'config_path',
name : 'config_path',
title : '配置地址',
title : '配置地址',
...
@@ -47,8 +54,6 @@ PARAMETER:
...
@@ -47,8 +54,6 @@ PARAMETER:
// 引入模块 包
// 引入模块 包
console
.
log
(
"=============================================>input_start"
);
console
.
log
(
"=============================================>input_start"
);
console
.
log
(
"=============================================>input_start"
);
console
.
log
(
"=============================================>input_start"
);
console
.
log
(
"=============================================>input_start"
);
console
.
log
(
"=============================================>input_start"
);
var
$
=
require
(
'topcam.scriptfunc'
).
argv
();
var
$
=
require
(
'topcam.scriptfunc'
).
argv
();
var
fs
=
require
(
'fs'
);
var
fs
=
require
(
'fs'
);
var
_
=
require
(
'lodash'
);
var
_
=
require
(
'lodash'
);
...
@@ -73,15 +78,12 @@ var PAR = {};
...
@@ -73,15 +78,12 @@ var PAR = {};
if
(
$
.
hasOwnProperty
(
'script_parameter'
)){
if
(
$
.
hasOwnProperty
(
'script_parameter'
)){
PAR
=
JSON
.
parse
(
$
.
script_parameter
);
PAR
=
JSON
.
parse
(
$
.
script_parameter
);
}
}
if
(
!
$
.
hasOwnProperty
(
'config_path'
)){
PAR
.
config_path
=
"cam/input_data"
}
try
{
try
{
var
par
=
PAR
;
var
par
=
PAR
;
console
.
log
(
par
);
if
(
!
par
.
hasOwnProperty
(
"customer"
)){
throw
"未填写配置"
};
if
(
!
par
.
hasOwnProperty
(
"customer"
)){
throw
"未填写配置"
};
if
(
!
par
.
hasOwnProperty
(
"config_path"
)){
par
.
config_path
=
"cam/input_data"
};
par
.
customer
=
par
.
customer
[
0
].
toUpperCase
()
+
par
.
customer
.
slice
(
1
).
toLowerCase
()
par
.
customer
=
par
.
customer
[
0
].
toUpperCase
()
+
par
.
customer
.
slice
(
1
).
toLowerCase
()
var
cfg
=
db
.
query
(
""
,
function
(
q
){
var
cfg
=
db
.
query
(
""
,
function
(
q
){
return
q
.
selectValue
({
return
q
.
selectValue
({
...
...
ats/rename/ATS_AIM_data_format.js
0 → 100644
View file @
1dbd449a
/*
NAME:
DESCRIPTION: ;
PARAMETER:
[
{
name : 'customer',
title : '客户配置',
type : 'ComboBox',
property : {
item_list:['customer_1','customer_2','new_data'],
tool_tip:'客户代码'
}
},
{
name : 'config_path',
title : '配置地址',
type : 'LineEdit',
property : {tool_tip : '配置的路径'},
}
]
VERSION_HISTORY:
V1.00 2020-04-17 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
(
"==============================================>data_format"
)
var
$
=
require
(
'topcam.scriptfunc'
).
argv
();
var
fs
=
require
(
'fs'
);
var
_
=
require
(
'lodash'
);
var
database
=
require
(
"topsin.database"
);
database
.
addConnection
(
$
.
conf
.
database_conf
,
"DFM"
);
var
QDfm
=
database
.
query
(
"DFM"
);
if
(
$
.
conf
.
product_type
==
"aimdfm"
)
{
QDfm
.
updateRow
({
table
:
"pdm_aimdfm_task"
,
data
:
{
current_process_title
:
$
.
process_title
},
where
:
{
id
:
$
.
task_id
}
});
}
var
GEN
=
$
.
gen
;
var
Job
=
$
.
job_name
;
var
db
=
$
.
db
var
Status
=
'ok'
;
var
resultData
=
[];
var
PAR
=
{};
if
(
$
.
hasOwnProperty
(
'script_parameter'
)){
PAR
=
JSON
.
parse
(
$
.
script_parameter
);
}
try
{
var
mode
=
"use"
// develop
var
par
=
PAR
;
if
(
!
par
.
hasOwnProperty
(
"customer"
)
||
par
.
customer
==
""
){
throw
"未填写配置"
};
if
(
!
par
.
hasOwnProperty
(
"config_path"
)
||
par
.
config_path
==
""
){
console
.
log
(
"========================cfg"
);
par
.
config_path
=
"cam/input_data"
};
par
.
customer
=
par
.
customer
[
0
].
toUpperCase
()
+
par
.
customer
.
slice
(
1
).
toLowerCase
()
var
cfg
=
db
.
query
(
""
,
function
(
q
){
return
q
.
selectValue
({
table
:
'pub_conf'
,
field
:
'text_data'
,
where
:{
path
:
par
.
config_path
}
})
});
if
(
!
cfg
||
cfg
==
""
){
throw
"cfg can not find"
}
var
config
=
eval
(
cfg
)
var
job
=
Job
;
if
(
_
.
isEmpty
(
job
))
throw
"没有传入料号名!"
;
job
=
job
.
toLowerCase
()
var
custCfg
=
config
.
customer
[
par
.
customer
]
// 获取客户配置
if
(
!
custCfg
){
throw
"config error"
}
var
step
=
custCfg
.
step
.
toLowerCase
()
// 获取pcs_step
// 料号验证
if
(
!
GEN
.
isJobExists
({
job
:
job
})){
throw
"job "
+
job
+
" is not exist"
}
if
(
!
GEN
.
isJobOpen
({
job
:
job
})){
GEN
.
openJob
({
job
:
job
})}
if
(
GEN
.
checkInout
({
job
:
job
,
mode
:
"test"
})
!=
0
&&
mode
!=
"develop"
){
throw
"the job check"
}
GEN
.
checkInout
({
job
:
job
,
mode
:
"out"
});
// if(config.hasOwnProperty("merge_drill")){ // todo
// mergeDrill({job:job})
// }
// start martix_tl_name
var
matrix
=
GEN
.
getMatrix
({
job
:
job
})
var
tl_name_matrix
=
tlNameMatrix
({
matrix
:
matrix
,
tl_name
:
custCfg
.
tl_name
})
// 给matrix信息添加tl_name
var
format_cfg
=
config
.
data_format
// 拿到数据标准化配置
// 排序和设属性
var
ret
=
sortLayer
({
job
:
job
,
rule
:
format_cfg
,
matrix
:
tl_name_matrix
})
if
(
ret
.
err
){
throw
err
}
var
after_sort_matrix
=
ret
.
sortNames
// 设置钻孔
err
=
setDrill
({
job
:
job
,
matrix
:
after_sort_matrix
})
if
(
err
){
throw
err
}
// 改名
err
=
reName
({
job
:
job
,
matrix
:
after_sort_matrix
,
cfg
:
format_cfg
})
if
(
err
){
throw
err
}
// end
GEN
.
checkInout
({
job
:
job
,
mode
:
"out"
})
// 结束保存料号 关闭料号
GEN
.
saveJob
({
job
:
job
});
GEN
.
checkInout
({
job
:
job
,
mode
:
"in"
})
GEN
.
closeJob
({
job
:
job
})
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
};
}
else
{
resultData
.
push
({
type
:
"info"
,
title
:
"操作完成, 请注意检查!"
});
return
{
status
:
Status
,
result_data
:
resultData
};
}
}
catch
(
e
)
{
Status
=
'error'
;
resultData
.
push
({
type
:
"error"
,
title
:
"脚本执行出错!"
,
detail
:
[{
desc
:
_
.
toString
(
e
)}]});
return
{
status
:
Status
,
result_data
:
resultData
};
}
function
tlNameMatrix
(
props
){
// 设置标准名
var
matrix
=
props
.
matrix
var
tlname_rules
=
[]
props
.
tl_name
.
forEach
(
function
(
item
){
if
(
typeof
item
.
orig_name
==
"string"
){
tlname_rules
.
push
(
item
)
}
else
{
item
.
orig_name
.
forEach
(
function
(
name2
){
tlname_rules
.
push
({
orig_name
:
name2
,
tl_name
:
item
.
tl_name
})
})
}
})
var
res
=
Object
.
keys
(
matrix
).
map
(
function
(
key
){
// 将matrix信息添加tl_name 如果没有tl_name 就返回原信息
var
val
=
matrix
[
key
]
if
(
val
.
hasOwnProperty
(
"tl_name"
)){
delete
val
.
tl_name
}
var
tlRule
=
tlname_rules
.
filter
(
function
(
rule
){
if
(
rule
.
orig_name
===
key
){
return
true
}
var
reg
=
new
RegExp
(
rule
.
orig_name
,
"ig"
)
return
reg
.
test
(
key
)
})
if
(
tlRule
.
length
==
0
){
return
val
}
for
(
var
i
=
0
;
i
<
tlRule
.
length
;
i
++
){
if
(
tlRule
[
i
].
orig_name
===
key
){
return
_
.
assign
(
val
,{
tl_name
:
tlRule
[
0
].
tl_name
})}
}
var
reg
=
new
RegExp
(
tlRule
[
0
].
orig_name
,
"ig"
)
var
tmp
=
reg
.
exec
(
key
)
if
(
tmp
&&
tmp
.
length
){
var
replaceArr
=
tmp
.
slice
(
1
)
var
tl_name
=
tlRule
[
0
].
tl_name
var
params
=
{}
for
(
var
i
=
0
;
i
<
replaceArr
.
length
;
i
++
){
params
[
"$"
+
(
i
+
1
)]
=
replaceArr
[
i
]
}
replaceArr
.
forEach
(
function
(
v
,
i
){
tl_name
=
tl_name
.
replace
(
"($"
+
(
i
+
1
)
+
")"
,
v
)
})
tl_name
=
replaceTlName
(
tl_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 _.assign(val,{tl_name:tl_name})
}else {
return _.assign(val,{tl_name:tlRule[0].tl_name})
}
})
return res
}
function sortLayer(props){ // 排序方法 {job:要排序的料号, rule: {要改名的规则}
var job = props.job
var matrix = GEN.getMatrix({job:job})
var tl_matrix = props.matrix
var matrixName = Object.keys(matrix).sort(function(a,b){return matrix[a].row - matrix[b].row})
var matrixFirst = matrixName[0]; // 记录matrix中第一位
var sortNames = [];
var miscName = tl_matrix.filter(function(value){ // 找出需要排序的名称列表
var flag = true;
if (!value.tl_name || value.tl_name == ""){return true}
var tl_name = value.tl_name
props.rule.forEach(function(item,i){
var evalReg = "
/
"+item.tl_name+"
/
ig
.
test
(
tl_name
)
";
if(tl_name == item.tl_name || eval(evalReg)){
flag = false;
if(tl_name === item.tl_name){
var _item = JSON.parse(JSON.stringify(item));
_item.value = i;
_item.name = value.name
_item.rule = item.tl_name
sortNames.push(_item);
} else {
var _item = JSON.parse(JSON.stringify(item));
_item.value = i;
var str = "
/
"+ item.tl_name +"
/
ig
.
exec
(
tl_name
)
"
_item.value2 = eval(str).pop() - 0;
_item.name = value.name
_item.rule = item.tl_name
_item.tl_name = tl_name;
sortNames.push(_item);
}
}
});
return flag;
}).map(function(v){return v.name})
miscName.forEach(function(n){
if(matrix[n].context == 'board'){
GEN.matrixLayerAttr({job:job,layer:n,context:'misc'})
}
})
sortNames = sortNames.sort(function(a,b){
return a.value - b.value || a.value2 - b.value2
})
// 排序
if(sortNames.length){
if(sortNames[0].name !== matrixFirst) { // 如果第一位和matrix中第一位不同,先把第一位插入到最前面
GEN.matrixMoveRow({ job:job,layer:sortNames[0].name,before:matrixFirst })
}
sortNames.forEach(function(v,i,arr){
if(i !== 0){
GEN.matrixMoveRow({ job:job,layer:v.name,after:arr[i-1].name })
}
GEN.matrixLayerAttr(_.assign({job:job,layer:v.name},v.attr));
})
}
return {
sortNames:sortNames
}
}
function setDrill(props){ // 设置钻孔
var job = props.job
var matrix = props.matrix
// 获取所有的钻孔层
var drillLayer =matrix.filter(function(v){
return (v.attr.type == "
drill
" || v.attr.type == "
rout
") && v.attr.context == "
board
"
})
// 获取所有single层
var signalLayer =matrix.filter(function(v){
return v.attr.type == "
signal
" && v.attr.context == "
board
"
})
var layerCount = GEN.getLayerCount({job:job})
// findSignal 根据传入的数字找到对应的signal层 如 1 => top ; 2 => layer_2
function findSignal(num){
return signalLayer[Number(num-1)].name
}
function doDrill(drills){ // 分析钻孔层
return drills.map(function(v){
if(v.name == "
drill
" || v.name=="
rout
"){
return {start:findSignal(1), end:findSignal(layerCount), layer:v.name}
} else {
var tmp = /(
\
d+)-(
\
d+)/ig.exec(v.tl_name);
if(tmp){
var start = findSignal(tmp[1]);
var end = findSignal(tmp[2]);
return {start:start, end:end, layer:v.name}
} else {
return 0;
}
}
})
}
var drillSetList = doDrill(drillLayer); // 分析得到钻孔设置结果
drillSetList = drillSetList.filter(function(v){return v!==0})
drillSetList.forEach(function(v){
GEN.matrixLayerDrill({job:job,layer:v.layer,start:v.start ,end:v.end})
})
}
function reName(props) { // 改名 par{job:要改名的料号, rule: {要改名的规则}
var job = props.job
var matrix = props.matrix
var cfg = props.cfg
matrix = matrix.filter(function(v){return v.name != v.new_name})
var rename_list = matrix.map(function(item){
var new_name;
var tl_name = item.tl_name
var rule = item.rule
if(rule === tl_name){
new_name = item.new_name
} else {
var reg = new RegExp(rule,"
ig
")
var tmp = reg.exec(tl_name)
if(!tmp){return undefined}
var replaceArr = tmp.slice(1)
new_name = item.new_name
var params = {}
for(var i = 0; i<replaceArr.length;i++){
params["
$
"+(i+1)] = replaceArr[i]
}
replaceArr.forEach(function(v,i){
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)
}
}
return {
orig_name: item.name,
new_name: new_name
}
})
rename_list = rename_list.filter(function(v){
var flag = true
if(!v){flag = false}
if(!v.orig_name || !v.new_name ){flag = false}
return flag
})
rename_list.forEach(function(v){
if(v.orig_name !== v.new_name){
GEN.renameLayer({job:job,layer:v.orig_name,new_name:v.new_name})
}
});
}
function mergeDrill(props){ // 合并钻孔
var newdrills = []
var job = props.job;
var step = GEN.getStepList({job:job})[0];
var maxDrill = {name:"",value:0};
function getDrl(str){
var num = /(
\
d+)-(
\
d+)
\
.drl/ig.exec(str); // 匹配出 num-num
var tmp = [];
for(var i = Number(num[1]);i<num[2];i++){
if(i == 1){
maxDrill = Number(num[2]) > maxDrill.value? {name:str,value:Number(num[2])} : maxDrill;
}
tmp.push("
L
"+i+"
-
"+(i+1));
}
return tmp;
}
var matrix = GEN.getMatrix({job:job});
GEN.openStep({job : job,name:step});
for(var key in matrix){
var val = matrix[key];
if(val.layer_type == "
drill
" && /(
\
d+)-(
\
d+)
\
.drl/ig.test(val.name)){
var mergeTo = getDrl(val.name) // 要合并到的地方
mergeTo.forEach(function(layerName){
if(GEN.isLayerExists({job : job ,layer:layerName.toLowerCase()}) && newdrills.indexOf(layerName.toLowerCase()) < 0){
GEN.deleteLayer({job:job, layer:layerName.toLowerCase()})
}
if(!GEN.isLayerExists({job : job ,layer:layerName.toLowerCase()})){
GEN.createLayer({job:job,layer:layerName.toLowerCase(),conext:'board',type:val.layer_type});
newdrills.push(layerName.toLowerCase())
}
GEN.workLayer({name:layerName.toLowerCase(),display_number:1,clear_before:'yes'});
GEN.copyLayer({source_job:job ,mode:'append',source_step:step,source_layer:val.name,dest_layer:layerName.toLowerCase()});
})
}
}
GEN.createLayer({job:job,layer:"
b1
-
"+maxDrill.value,conext:'board',type:'drill'});
GEN.workLayer({name:"
b1
-
"+maxDrill.value,display_number:1,clear_before:'yes'});
GEN.copyLayer({source_job:job ,mode:'append',source_step:step,source_layer:maxDrill.name,dest_layer:"
b1
-
"+maxDrill.value});
GEN.affectedLayer({affected:"
no
",mode:"
all
"});
GEN.clearLayers();
GEN.closeStep();
}
config_ats.js
View file @
1dbd449a
...
@@ -150,7 +150,7 @@
...
@@ -150,7 +150,7 @@
"customer"
:
{
"customer"
:
{
"Customer_1"
:
{
"Customer_1"
:
{
"path"
:
"/opt/resource/customer_1"
,
"path"
:
"/opt/resource/customer_1"
,
"db"
:
"
server_db
"
,
"db"
:
"
genesis
"
,
"step"
:
"cad"
,
"step"
:
"cad"
,
"rules"
:
[
"rules"
:
[
{
{
...
@@ -208,7 +208,7 @@
...
@@ -208,7 +208,7 @@
},
},
"Customer_2"
:
{
"Customer_2"
:
{
"path"
:
"/opt/resource/customer_2"
,
"path"
:
"/opt/resource/customer_2"
,
"db"
:
"
server_db
"
,
"db"
:
"
genesis
"
,
"step"
:
"cad"
,
"step"
:
"cad"
,
"rules"
:
[
"rules"
:
[
{
{
...
@@ -348,7 +348,7 @@
...
@@ -348,7 +348,7 @@
},
},
"New_data"
:
{
"New_data"
:
{
"path"
:
"/opt/resource/new_data"
,
"path"
:
"/opt/resource/new_data"
,
"db"
:
"
server_db
"
,
"db"
:
"
genesis
"
,
"step"
:
"cad"
,
"step"
:
"cad"
,
"rules"
:
[
"rules"
:
[
{
{
...
@@ -455,18 +455,18 @@
...
@@ -455,18 +455,18 @@
{
"orig_name"
:
"pleg.art"
,
"tl_name"
:
"silk_top"
},
{
"orig_name"
:
"pleg.art"
,
"tl_name"
:
"silk_top"
},
{
"orig_name"
:
"soldtop.art"
,
"tl_name"
:
"sm_top"
},
{
"orig_name"
:
"soldtop.art"
,
"tl_name"
:
"sm_top"
},
{
"orig_name"
:
[
"top.art"
,
"^top$"
],
"tl_name"
:
"top"
},
{
"orig_name"
:
[
"top.art"
,
"^top$"
],
"tl_name"
:
"top"
},
{
"orig_name"
:
[
"
art
(
\\
d+)
\\
.art"
,
"layer_(
\\
d+)"
],
"tl_name"
:
"l_($1)"
},
{
"orig_name"
:
[
"
inner_
(
\\
d+)
\\
.art"
,
"layer_(
\\
d+)"
],
"tl_name"
:
"l_($1)"
},
{
"orig_name"
:
[
"bottom.art"
,
"^bottom$"
],
"tl_name"
:
"bottom"
},
{
"orig_name"
:
[
"bottom.art"
,
"^bottom$"
],
"tl_name"
:
"bottom"
},
{
"orig_name"
:
"soldbotm.art"
,
"tl_name"
:
"sm_botm"
},
{
"orig_name"
:
"soldbotm.art"
,
"tl_name"
:
"sm_botm"
},
{
"orig_name"
:
"sleg.art"
,
"tl_name"
:
"silk_bot"
},
{
"orig_name"
:
"sleg.art"
,
"tl_name"
:
"silk_bot"
},
{
"orig_name"
:
"pastbotm.art"
,
"tl_name"
:
"past_botm"
},
{
"orig_name"
:
"pastbotm.art"
,
"tl_name"
:
"past_botm"
},
{
"orig_name"
:
"multipack.art"
,
"tl_name"
:
"array"
},
{
"orig_name"
:
"multipack.art"
,
"tl_name"
:
"array"
},
{
"orig_name"
:
"outline.art"
,
"tl_name"
:
"outline"
},
{
"orig_name"
:
[
"outline.art"
,
"outline"
]
,
"tl_name"
:
"outline"
},
{
"orig_name"
:
"fab.art"
,
"tl_name"
:
"fab"
},
{
"orig_name"
:
[
"fab.art"
,
"fab"
]
,
"tl_name"
:
"fab"
},
{
"orig_name"
:
"top-enig"
,
"tl_name"
:
"top-enig"
},
{
"orig_name"
:
"top-enig"
,
"tl_name"
:
"top-enig"
},
{
"orig_name"
:
"bot-enig"
,
"tl_name"
:
"bot-enig"
},
{
"orig_name"
:
"bot-enig"
,
"tl_name"
:
"bot-enig"
},
{
"orig_name"
:
"fab_page2"
,
"tl_name"
:
"fab_page2"
},
{
"orig_name"
:
"fab_page2"
,
"tl_name"
:
"fab_page2"
},
{
"orig_name"
:
[
"(
\\
d+)-(
\\
d+)
$
"
,
"d(
\\
d+)-(
\\
d+)"
],
"tl_name"
:
"d_($1)-($2)"
}
{
"orig_name"
:
[
"(
\\
d+)-(
\\
d+)
-laser
\\
.drl
"
,
"d(
\\
d+)-(
\\
d+)"
],
"tl_name"
:
"d_($1)-($2)"
}
]
]
}
}
},
},
...
...
jtg/JTG_NET_set_drill_attribute_aim.js
0 → 100644
View file @
1dbd449a
/*
NAME:
DESCRIPTION: ;
PARAMETER:
[
{
name : 'max_via_size',
title : '最大via孔径',
type : 'LineEdit',
property : {tool_tip : '最大via孔径,默认是0.9mm'},
},
{
name : 'min_via_num',
title : '最少via孔数',
type : 'LineEdit',
property : {tool_tip : '最少via孔数,默认是100'},
},
{
name : 'equidistant_tolerance',
title : '等间距公差',
type : 'LineEdit',
property : {tool_tip : '等间距公差,默认是0.005mm'},
},
{
name : 'auto_save',
title : '自动保存',
type : 'RadioBox',
property : {
item_list:[
{name:'yes',text:'YES'},
{name:'no',text:'NO'},
],
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
(
"==============================>set drill"
);
// 引入模块 包
var
$
=
require
(
'topcam.scriptfunc'
).
argv
();
var
fs
=
require
(
'fs'
);
var
_
=
require
(
'lodash'
);
var
database
=
require
(
"topsin.database"
);
database
.
addConnection
(
$
.
conf
.
database_conf
,
"DFM"
);
var
QDfm
=
database
.
query
(
"DFM"
);
if
(
$
.
conf
.
product_type
==
"aimdfm"
)
{
QDfm
.
updateRow
({
table
:
"pdm_aimdfm_task"
,
data
:
{
current_process_title
:
$
.
process_title
},
where
:
{
id
:
$
.
task_id
}
});
}
var
GEN
=
$
.
gen
;
var
Job
=
$
.
job_name
;
var
db
=
$
.
db
var
Status
=
'ok'
;
var
resultData
=
[];
var
PAR
=
{};
if
(
$
.
hasOwnProperty
(
'script_parameter'
)){
PAR
=
JSON
.
parse
(
$
.
script_parameter
);
}
try
{
var
par
=
PAR
;
var
default_par
=
{
max_via_size
:
"0.9mm"
,
min_via_num
:
"100"
,
equidistant_tolerance
:
"0.005mm"
,
auto_save
:
"No"
}
for
(
var
key
in
default_par
){
// 设置默认属性
if
(
!
par
.
hasOwnProperty
(
key
)
||
par
[
key
]
==
""
){
par
[
key
]
=
default_par
[
key
]
}
}
var
max_via_size
=
parseFloat
(
par
.
max_via_size
);
var
equidistant_tolerance
=
parseFloat
(
par
.
equidistant_tolerance
);
if
(
_
.
isEmpty
(
Job
)){
throw
"参数Job不存在"
}
var
job
=
Job
.
toLowerCase
()
// 检查料号是否存在
if
(
!
GEN
.
isJobExists
({
job
:
job
})){
throw
"料号已经:"
+
job
+
"不存在"
}
// 检查料号是否被打开
if
(
!
GEN
.
isJobOpen
({
job
:
job
})){
GEN
.
openJob
({
job
:
job
})
}
// 检查料号是否能够check out
if
(
GEN
.
checkInout
({
job
:
job
,
mode
:
"test"
})
!=
0
){
throw
"the job check"
}
GEN
.
checkInout
({
job
:
job
,
mode
:
"out"
});
// 通过matrix获取board属性的钻孔层
var
matrix
=
GEN
.
getMatrix
({
job
:
job
})
var
dirll_layer
=
Object
.
keys
(
matrix
).
reduce
(
function
(
a
,
b
){
if
(
matrix
[
b
].
context
==
"board"
&&
matrix
[
b
].
layer_type
==
"drill"
){
a
.
push
(
b
)
}
return
a
},[])
var
stepList
=
GEN
.
getStepList
({
job
:
job
})
stepList
.
forEach
(
function
(
step
){
GEN
.
openStep
({
job
:
job
,
name
:
step
})
dirll_layer
.
forEach
(
function
(
layer
){
// 逐层设置钻孔工作层
GEN
.
workLayer
({
name
:
layer
,
display_number
:
2
,
clear_before
:
'yes'
})
// 分析via孔:排除超过max_via_size的孔径的孔,排除数量少于min_via_num数量的钻孔,排除存在等间距equidistant_tolerance的钻孔
// 排除超过max_via_size的孔径的孔
var
layerSymsHist
=
GEN
.
getLayerSymsHist
({
job
:
job
,
step
:
step
,
layer
:
layer
});
var
via_symbol
=
Object
.
keys
(
layerSymsHist
).
map
(
function
(
v
){
return
layerSymsHist
[
v
]})
via_symbol
=
via_symbol
.
filter
(
function
(
item
){
return
Number
(
item
.
size
)
<=
max_via_size
})
// 排除少于min_via_num数量的钻孔
via_symbol
=
via_symbol
.
filter
(
function
(
item
){
return
item
.
pad
>=
Number
(
par
.
min_via_num
)
})
if
(
via_symbol
.
length
){
// 如果via_symbol存在
GEN
.
selClearFeature
()
GEN
.
selectByFilter
({
feat_types
:
"pad"
,
include_syms
:
via_symbol
.
map
(
function
(
v
){
return
v
.
symbol
}).
join
(
","
)
})
// 将选中的复制到辅助层
var
layer_tmp
=
layer
+
"_tmp"
if
(
GEN
.
isLayerExists
({
job
:
job
,
layer
:
layer_tmp
})){
GEN
.
deleteLayer
({
job
:
job
,
step
:
step
,
layer
:
layer_tmp
})}
GEN
.
selCopyOther
({
dest
:
"layer_name"
,
target_layer
:
layer_tmp
,
invert
:
'no'
})
GEN
.
selClearFeature
();
GEN
.
workLayer
({
name
:
layer_tmp
,
display_number
:
2
,
clear_before
:
'yes'
})
var
ck
=
"tmp_chk"
if
(
GEN
.
isChklistExists
({
job
:
job
,
step
:
step
,
chklist
:
ck
})){
GEN
.
COM
(
"chklist_delete"
,
{
chklist
:
ck
})
}
// 创建并运行
GEN
.
createChklist
({
// 创建checklist
chklist
:
ck
,
items
:
[{
name
:
"viaPitch"
,
nact
:
1
,
action
:
"valor_analysis_signal"
,
erf
:
"S2_conductor_Check"
,
params
:
{
pp_layer
:
".affected"
,
pp_spacing
:
20
,
pp_selected
:
"All"
,
pp_r2c
:
10
,
pp_d2c
:
15
,
pp_sliver
:
8
,
pp_min_pad_overlap
:
5
,
pp_check_missing_pads_for_drills
:
"Yes"
,
pp_use_compensated_rout
:
"Skeleton"
,
pp_sm_spacing
:
"Yes"
,
pp_tests
:
"Spacing"
,
pp_check_missing_pads_for_drills
:
"Yes"
}
}]
})
GEN
.
chklistShow
({
chklist
:
ck
})
GEN
.
affectedLayer
({
affected
:
"yes"
,
layer
:
layer
,
clear_before
:
"yes"
})
GEN
.
chklistRun
({
chklist
:
ck
,
nact
:
1
,
area
:
"profile"
})
var
tmp_layer1
=
"mk_1_"
+
layer_tmp
+
"_pitch"
var
tmp_layer2
=
"ms_1_"
+
layer_tmp
+
"_pitch"
if
(
GEN
.
isLayerExists
({
job
:
job
,
layer
:
tmp_layer1
})){
GEN
.
deleteLayer
({
job
:
job
,
layer
:
tmp_layer1
})
}
if
(
GEN
.
isLayerExists
({
job
:
job
,
layer
:
tmp_layer2
})){
GEN
.
deleteLayer
({
job
:
job
,
layer
:
tmp_layer2
})
}
GEN
.
COM
(
"chklist_create_lyrs,chklist="
+
ck
+
",severity=3,suffix=pitch"
);
GEN
.
workLayer
({
name
:
tmp_layer2
,
display_number
:
1
,
clear_before
:
'yes'
});
GEN
.
selectByFilter
({
attribute
:[{
attribute
:
".string"
,
text
:
"via_pitch"
}]})
var
tmp_layer2_tmp
=
tmp_layer2
+
"_tmp"
if
(
GEN
.
isLayerExists
({
job
:
job
,
layer
:
tmp_layer2
})){
GEN
.
deleteLayer
({
job
:
job
,
layer
:
tmp_layer2_tmp
})
}
GEN
.
selCopyOther
({
dest
:
"layer_name"
,
target_layer
:
tmp_layer2_tmp
,
invert
:
'no'
})
GEN
.
selClearFeature
();
GEN
.
workLayer
({
name
:
tmp_layer2_tmp
,
display_number
:
1
,
clear_before
:
'yes'
});
var
symbols_tmp
=
GEN
.
getLayerSymsHist
({
job
:
job
,
layer
:
tmp_layer2_tmp
,
step
:
step
})
// 找出间距 equidistant_tolerance 的
var
equidistant_tolerance_symbol
=
_
.
values
(
symbols_tmp
).
filter
(
function
(
item
){
return
Math
.
abs
(
Number
(
item
.
size
)
-
equidistant_tolerance
)
<
0.000001
})
// 如果有 根据上面找到的 参考选择 删掉 layer_tmp 层里的钻孔
if
(
equidistant_tolerance_symbol
.
length
){
GEN
.
selectByFilter
({
exclude_syms
:
equidistant_tolerance_symbol
.
map
(
function
(
v
){
return
v
.
symbol
}).
join
(
","
)
})
GEN
.
selDelete
()
GEN
.
workLayer
({
name
:
layer_tmp
,
display_number
:
2
,
clear_before
:
'yes'
})
GEN
.
selRefFeat
({
layers
:
tmp_layer2_tmp
,
use
:
'filter'
,
mode
:
'touch'
})
GEN
.
selDelete
()
}
// 根据layer_tmp层的钻孔参考选择出 层里面的镭射层
GEN
.
selClearFeature
()
GEN
.
workLayer
({
name
:
layer
,
display_number
:
2
,
clear_before
:
'yes'
})
GEN
.
selRefFeat
({
layers
:
layer_tmp
,
use
:
'filter'
,
mode
:
'touch'
})
// 设置选中的via孔属性
GEN
.
selAddAttr
({
attribute
:
'.drill'
,
option
:
'via'
})
GEN
.
selClearFeature
()
// 删除辅助层
var
deleLayers
=
[
tmp_layer1
,
tmp_layer2
,
tmp_layer2_tmp
,
layer_tmp
]
deleLayers
.
forEach
(
function
(
v
){
GEN
.
deleteLayer
({
job
:
job
,
layer
:
v
})
})
}
})
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"
})
}
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
};
}
else
{
resultData
.
push
({
type
:
"info"
,
title
:
"操作完成, 请注意检查!"
});
return
{
status
:
Status
,
result_data
:
resultData
};
}
}
catch
(
e
)
{
Status
=
'error'
;
resultData
.
push
({
type
:
"error"
,
title
:
"脚本执行出错!"
,
detail
:
[{
desc
:
_
.
toString
(
e
)}]});
return
{
status
:
Status
,
result_data
:
resultData
};
}
\ No newline at end of file
jtg/JTG_ORG_backup_layers_aim.js
0 → 100644
View file @
1dbd449a
/*
NAME:
DESCRIPTION: ;
PARAMETER:
[
{
name : 'prefix',
title : '前缀名',
type : 'LineEdit',
property : {tool_tip : '前缀名,默认是org-'},
},
{
name : 'suffix',
title : '后缀名',
type : 'LineEdit',
property : {tool_tip : '后缀名,默认没有'},
},
{
name : 'auto_save',
title : '自动保存',
type : 'RadioBox',
property : {
item_list:[
{name:'yes',text:'YES'},
{name:'no',text:'NO'},
],
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
(
"==============================>备份层"
);
// 引入模块 包
var
$
=
require
(
'topcam.scriptfunc'
).
argv
();
var
fs
=
require
(
'fs'
);
var
_
=
require
(
'lodash'
);
var
database
=
require
(
"topsin.database"
);
database
.
addConnection
(
$
.
conf
.
database_conf
,
"DFM"
);
var
QDfm
=
database
.
query
(
"DFM"
);
if
(
$
.
conf
.
product_type
==
"aimdfm"
)
{
QDfm
.
updateRow
({
table
:
"pdm_aimdfm_task"
,
data
:
{
current_process_title
:
$
.
process_title
},
where
:
{
id
:
$
.
task_id
}
});
}
var
GEN
=
$
.
gen
;
var
Job
=
$
.
job_name
;
var
db
=
$
.
db
var
Status
=
'ok'
;
var
resultData
=
[];
var
PAR
=
{};
if
(
$
.
hasOwnProperty
(
'script_parameter'
)){
PAR
=
JSON
.
parse
(
$
.
script_parameter
);
}
try
{
var
par
=
PAR
;
var
default_par
=
{
prefix
:
"org-"
,
suffix
:
""
,
auto_save
:
"No"
,
}
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
+
"不存在"
}
// 检查料号是否被打开
if
(
!
GEN
.
isJobOpen
({
job
:
job
})){
GEN
.
openJob
({
job
:
job
})
}
// 检查料号是否能够check out
if
(
GEN
.
checkInout
({
job
:
job
,
mode
:
"test"
})
!=
0
){
throw
"the job check"
}
GEN
.
checkInout
({
job
:
job
,
mode
:
"out"
});
// 通过matrix获取board层
var
matrix
=
GEN
.
getMatrix
({
job
:
job
})
var
board_layers
=
Object
.
keys
(
matrix
).
reduce
(
function
(
a
,
b
){
if
(
matrix
[
b
].
context
==
"board"
){
a
.
push
(
b
)
}
return
a
},[])
board_layers
.
forEach
(
function
(
layer
){
var
new_layer
=
par
.
prefix
+
layer
+
par
.
suffix
if
(
GEN
.
isLayerExists
({
job
:
job
,
layer
:
new_layer
})){
GEN
.
deleteLayer
({
job
:
job
,
layer
:
new_layer
})
}
GEN
.
matrixAddLayer
({
job
:
job
,
layer
:
new_layer
,
context
:
'misc'
,
type
:
matrix
[
layer
].
layer_type
})
})
var
stepList
=
GEN
.
getStepList
({
job
:
job
})
stepList
.
forEach
(
function
(
step
){
GEN
.
openStep
({
job
:
job
,
name
:
step
})
// 逐层备份原稿层,备份名为prefix + 层名 + suffix
board_layers
.
forEach
(
function
(
layer
){
var
new_layer
=
par
.
prefix
+
layer
+
par
.
suffix
GEN
.
affectedLayer
({
affected
:
'no'
,
mode
:
'all'
})
GEN
.
workLayer
({
name
:
layer
,
display_number
:
2
,
clear_before
:
'yes'
})
GEN
.
selClearFeature
()
GEN
.
selAllFeat
()
GEN
.
selCopyOther
({
dest
:
"layer_name"
,
target_layer
:
new_layer
})
GEN
.
selClearFeature
()
GEN
.
clearLayers
()
})
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"
})
}
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
};
}
else
{
resultData
.
push
({
type
:
"info"
,
title
:
"操作完成, 请注意检查!"
});
return
{
status
:
Status
,
result_data
:
resultData
};
}
}
catch
(
e
)
{
Status
=
'error'
;
resultData
.
push
({
type
:
"error"
,
title
:
"脚本执行出错!"
,
detail
:
[{
desc
:
_
.
toString
(
e
)}]});
return
{
status
:
Status
,
result_data
:
resultData
};
}
\ No newline at end of file
jtg/JTG_ORG_create_outline_aim.js
0 → 100644
View file @
1dbd449a
/*
NAME:
DESCRIPTION: ;
PARAMETER:
[
{
name : 'ref_outline',
title : '参考层',
type : 'LineEdit',
property : {tool_tip : '参考层,默认是gm1'},
},
{
name : 'outline',
title : '外形层',
type : 'LineEdit',
property : {tool_tip : '外形层,默认是gko'},
},
{
name : 'outline_width',
title : '外形线宽',
type : 'LineEdit',
property : {tool_tip : '外形线宽,默认是0.2mm'},
},
{
name : 'auto_save',
title : '自动保存',
type : 'RadioBox',
property : {
item_list:[
{name:'yes',text:'YES'},
{name:'no',text:'NO'},
],
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> 创建GKO </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
(
"==============================>create_outline"
);
// 引入模块 包
var
$
=
require
(
'topcam.scriptfunc'
).
argv
();
var
fs
=
require
(
'fs'
);
var
_
=
require
(
'lodash'
);
var
database
=
require
(
"topsin.database"
);
database
.
addConnection
(
$
.
conf
.
database_conf
,
"DFM"
);
var
QDfm
=
database
.
query
(
"DFM"
);
if
(
$
.
conf
.
product_type
==
"aimdfm"
)
{
QDfm
.
updateRow
({
table
:
"pdm_aimdfm_task"
,
data
:
{
current_process_title
:
$
.
process_title
},
where
:
{
id
:
$
.
task_id
}
});
}
var
GEN
=
$
.
gen
;
var
Job
=
$
.
job_name
;
var
db
=
$
.
db
var
Status
=
'ok'
;
var
resultData
=
[];
var
PAR
=
{};
if
(
$
.
hasOwnProperty
(
'script_parameter'
)){
PAR
=
JSON
.
parse
(
$
.
script_parameter
);
}
try
{
var
par
=
PAR
;
var
default_par
=
{
ref_outline
:
"gm1"
,
outline
:
"gko"
,
outline_width
:
"0.2mm"
,
auto_save
:
"No"
,
}
for
(
var
key
in
default_par
){
// 设置默认属性
if
(
!
par
.
hasOwnProperty
(
key
)
||
par
[
key
]
==
""
){
par
[
key
]
=
default_par
[
key
]
}
}
var
outline_symbol
;
if
(
par
.
outline
==
""
||
par
.
outline
==
undefined
||
par
.
outline
==
null
||
par
.
outline
==
"null"
){
outline_symbol
=
"null"
;
}
else
{
if
(
!
/^
(([^
0
][
0-9
]
+|0
)\.([
0-9
]{1,2})
$
)
|^
([^
0
][
0-9
]
+|0
)
$/ig
.
test
(
par
.
outline_width
)){
throw
"outline_width failed"
}
par
.
outline_width
=
parseFloat
(
par
.
outline_width
)
outline_symbol
=
"r"
+
String
(
par
.
outline_width
*
1000
);
}
var
ref_outline
=
par
.
ref_outline
;
var
outline
=
par
.
outline
;
if
(
_
.
isEmpty
(
Job
)){
throw
"参数Job不存在"
}
var
job
=
Job
.
toLowerCase
()
// 检查料号是否存在
if
(
!
GEN
.
isJobExists
({
job
:
job
})){
throw
"料号已经:"
+
job
+
"不存在"
}
// 检查料号是否被打开
if
(
!
GEN
.
isJobOpen
({
job
:
job
})){
GEN
.
openJob
({
job
:
job
})
}
// 检查料号是否能够check out
if
(
GEN
.
checkInout
({
job
:
job
,
mode
:
"test"
})
!=
0
){
throw
"the job check"
}
GEN
.
checkInout
({
job
:
job
,
mode
:
"out"
});
// 判断参考层(ref_outline)是否存在并不为空
if
(
!
GEN
.
isLayerExists
({
job
:
job
,
layer
:
ref_outline
})){
throw
"ref_outline不存在"
}
var
steplist
=
GEN
.
getStepList
({
job
:
job
})
steplist
.
forEach
(
function
(
step
){
if
(
!
GEN
.
isLayerEmpty
({
job
:
job
,
step
:
step
,
layer
:
ref_outline
})){
// 创建新的外形层(outline)
GEN
.
openStep
({
job
:
job
,
name
:
step
})
if
(
GEN
.
isLayerExists
({
job
:
job
,
layer
:
outline
})){
GEN
.
workLayer
({
name
:
outline
,
display_number
:
2
,
clear_before
:
'yes'
})
GEN
.
selDelete
()
}
else
{
GEN
.
createLayer
({
job
:
job
,
layer
:
outline
,
conext
:
"misc"
,
type
:
"document"
})
}
// 将参考层copy到外形层中
GEN
.
selClearFeature
()
GEN
.
workLayer
({
name
:
ref_outline
,
display_number
:
2
,
clear_before
:
'yes'
})
GEN
.
selAllFeat
()
GEN
.
selCopyOther
({
dest
:
"layer_name"
,
target_layer
:
outline
})
GEN
.
selClearFeature
()
GEN
.
workLayer
({
name
:
outline
,
display_number
:
2
,
clear_before
:
'yes'
})
if
(
outline_symbol
!=
"null"
){
GEN
.
selChangeSym
({
symbol
:
outline_symbol
})
GEN
.
selClearFeature
()
}
GEN
.
clearLayers
()
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"
})
}
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
};
}
else
{
resultData
.
push
({
type
:
"info"
,
title
:
"操作完成, 请注意检查!"
});
return
{
status
:
Status
,
result_data
:
resultData
};
}
}
catch
(
e
)
{
Status
=
'error'
;
resultData
.
push
({
type
:
"error"
,
title
:
"脚本执行出错!"
,
detail
:
[{
desc
:
_
.
toString
(
e
)}]});
return
{
status
:
Status
,
result_data
:
resultData
};
}
\ No newline at end of file
jtg/JTG_ORG_delete_profile_aim.js
0 → 100644
View file @
1dbd449a
/*
NAME:
DESCRIPTION: ;
PARAMETER:
[
{
name : 'cutting_marign',
title : '切除profile外数值',
type : 'LineEdit',
property : {tool_tip : '切除profile外数值,默认是0.2mm'},
},
{
name : 'auto_save',
title : '自动保存',
type : 'RadioBox',
property : {
item_list:[
{name:'yes',text:'YES'},
{name:'no',text:'NO'},
],
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
(
"==============================>删除板外"
);
// 引入模块 包
var
$
=
require
(
'topcam.scriptfunc'
).
argv
();
var
fs
=
require
(
'fs'
);
var
_
=
require
(
'lodash'
);
var
database
=
require
(
"topsin.database"
);
database
.
addConnection
(
$
.
conf
.
database_conf
,
"DFM"
);
var
QDfm
=
database
.
query
(
"DFM"
);
if
(
$
.
conf
.
product_type
==
"aimdfm"
)
{
QDfm
.
updateRow
({
table
:
"pdm_aimdfm_task"
,
data
:
{
current_process_title
:
$
.
process_title
},
where
:
{
id
:
$
.
task_id
}
});
}
var
GEN
=
$
.
gen
;
var
Job
=
$
.
job_name
;
var
db
=
$
.
db
var
Status
=
'ok'
;
var
resultData
=
[];
var
PAR
=
{};
if
(
$
.
hasOwnProperty
(
'script_parameter'
)){
PAR
=
JSON
.
parse
(
$
.
script_parameter
);
}
try
{
var
par
=
PAR
;
var
default_par
=
{
cutting_marign
:
"0.2mm"
,
auto_save
:
"No"
,
}
for
(
var
key
in
default_par
){
// 设置默认属性
if
(
!
par
.
hasOwnProperty
(
key
)
||
par
[
key
]
==
""
){
par
[
key
]
=
default_par
[
key
]
}
}
par
.
cutting_marign
=
parseFloat
(
par
.
cutting_marign
)
if
(
!
/^
(([^
0
][
0-9
]
+|0
)\.([
0-9
]{1,2})
$
)
|^
([^
0
][
0-9
]
+|0
)
$/ig
.
test
(
par
.
cutting_marign
)){
throw
"cutting_marign failed"
}
var
cutting_marign_symbol
=
"r"
+
String
(
par
.
cutting_marign
*
1000
)
if
(
_
.
isEmpty
(
Job
)){
throw
"参数Job不存在"
}
var
job
=
Job
.
toLowerCase
()
// 检查料号是否存在
if
(
!
GEN
.
isJobExists
({
job
:
job
})){
throw
"料号已经:"
+
job
+
"不存在"
}
// 检查料号是否被打开
if
(
!
GEN
.
isJobOpen
({
job
:
job
})){
GEN
.
openJob
({
job
:
job
})
}
// 检查料号是否能够check out
if
(
GEN
.
checkInout
({
job
:
job
,
mode
:
"test"
})
!=
0
){
throw
"the job check"
}
GEN
.
checkInout
({
job
:
job
,
mode
:
"out"
});
// 通过matrix获取board层
var
matrix
=
GEN
.
getMatrix
({
job
:
job
})
var
board_layers
=
Object
.
keys
(
matrix
).
reduce
(
function
(
a
,
b
){
if
(
matrix
[
b
].
context
==
"board"
){
a
.
push
(
b
)
}
return
a
},[])
// 影响board层
var
steplist
=
GEN
.
getStepList
({
job
:
job
})
steplist
.
forEach
(
function
(
step
){
GEN
.
openStep
({
job
:
job
,
name
:
step
})
GEN
.
clearLayers
()
GEN
.
affectedLayer
({
affected
:
"no"
,
mode
:
"all"
})
GEN
.
affectedLayer
({
affected
:
"yes"
,
layer
:
board_layers
})
// 切除profile以外0.2mm(cutting_marign)物件
GEN
.
selectByFilter
({
include_syms
:
cutting_marign_symbol
,
profile
:
"out"
})
GEN
.
selDelete
()
// ?
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"
})
}
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
};
}
else
{
resultData
.
push
({
type
:
"info"
,
title
:
"操作完成, 请注意检查!"
});
return
{
status
:
Status
,
result_data
:
resultData
};
}
}
catch
(
e
)
{
Status
=
'error'
;
resultData
.
push
({
type
:
"error"
,
title
:
"脚本执行出错!"
,
detail
:
[{
desc
:
_
.
toString
(
e
)}]});
return
{
status
:
Status
,
result_data
:
resultData
};
}
\ No newline at end of file
jtg/JTG_ORG_input_data_aim.js
0 → 100644
View file @
1dbd449a
/*
NAME:
DESCRIPTION: ;
PARAMETER:
[
{
name : 'path',
title : '资料路径',
type : 'LineEdit',
property : {tool_tip : '资料路径'},
},
{
name : 'auto_save',
title : '自动保存',
type : 'RadioBox',
property : {
item_list:[
{name:'yes',text:'YES'},
{name:'no',text:'NO'},
],
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> input原稿 </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原稿"
);
var
$
=
require
(
'topcam.scriptfunc'
).
argv
();
var
fs
=
require
(
'fs'
);
var
_
=
require
(
'lodash'
);
var
database
=
require
(
"topsin.database"
);
database
.
addConnection
(
$
.
conf
.
database_conf
,
"DFM"
);
var
QDfm
=
database
.
query
(
"DFM"
);
if
(
$
.
conf
.
product_type
==
"aimdfm"
)
{
QDfm
.
updateRow
({
table
:
"pdm_aimdfm_task"
,
data
:
{
current_process_title
:
$
.
process_title
},
where
:
{
id
:
$
.
task_id
}
});
}
var
GEN
=
$
.
gen
;
var
fs
=
require
(
"fs"
);
var
Job
=
$
.
job_name
;
var
db
=
$
.
db
var
Status
=
'ok'
;
var
resultData
=
[];
var
PAR
=
{};
if
(
$
.
hasOwnProperty
(
'script_parameter'
)){
PAR
=
JSON
.
parse
(
$
.
script_parameter
);
}
if
(
!
$
.
hasOwnProperty
(
'auto_save'
)){
PAR
.
auto_save
=
"no"
}
// drill tool manage
var
drill_toll_manage
=
[]
try
{
var
par
=
PAR
;
var
config
=
{
format
:
{
"Gerber274x_1"
:
{
"nf1"
:
2
,
"nf2"
:
5
,
"units"
:
"inch"
,
"zeroes"
:
"leading"
,
"decimal"
:
"no"
,
"nf_comp"
:
0
,
"break_sr"
:
"yes"
,
"data_type"
:
"ascii"
,
"separator"
:
"*"
,
"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
},
"Excellon2_1"
:
{
"nf1"
:
2
,
"nf2"
:
5
,
"units"
:
"inch"
,
"zeroes"
:
"none"
,
"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
}
},
odb
:
[{
vaild
:
function
(
item
){
return
/
\.
tgz$/ig
.
test
(
item
.
name
)
// 以.tgz结尾的
}
}],
gerber
:
[
{
vaild
:
function
(
item
){
return
/
\.
art$/ig
.
test
(
item
.
name
)
// 以.art结尾的
},
type
:
"Gerber274x"
,
format
:
"Gerber274x_1"
},
{
vaild
:
function
(
item
){
return
/
\.
drl$/ig
.
test
(
item
.
name
)
// 以.drl结尾的
},
type
:
"Excellon2"
,
format
:
"Excellon2_1"
}
]
}
if
(
!
par
.
hasOwnProperty
(
"path"
)){
throw
"缺少资料路径"
}
if
(
_
.
isEmpty
(
Job
)){
throw
"参数Job不存在"
}
var
job
=
Job
.
toLowerCase
()
// 检查genesis中料号情况,存在则报警退出
if
(
GEN
.
isJobExists
({
job
:
job
})){
throw
"料号已经:"
+
job
+
"已经存在"
}
if
(
par
.
path
[
par
.
path
.
length
-
1
]
!==
"/"
){
par
.
path
=
par
.
path
+
"/"
}
var
path
=
par
.
path
+
Job
// 检查待读入文件路径,路径不存在则报警退出
if
(
!
fs
.
exists
(
path
)){
throw
"路径:"
+
path
+
"不存在"
}
// 检查文件格式,odb++或者gerber274,其中gerber存在一种特殊格式,其钻孔文件需要解析文件信息并更改文件内容才能读入(见特殊钻孔文件说明)
var
inputInfo
=
getJobInfo
({
path
:
path
,
job
:
job
,
config
:
config
})
if
(
inputInfo
.
type
==
"none"
){
throw
"file error"
}
// 读入gerber或者odb++ 判断读入方式
// 读入odb++
if
(
/odb/ig
.
test
(
inputInfo
.
type
)){
importJob
({
db
:
"genesis"
,
path
:
inputInfo
.
data
.
path
,
name
:
job
})
}
// 读入gerber
if
(
/gerber/ig
.
test
(
inputInfo
.
type
)){
// ? 处理特殊钻孔文件
inputInfo
.
data
.
forEach
(
function
(
file
){
if
(
/
\.
drl$/ig
.
test
(
file
.
name
)){
var
backUpName
=
file
.
name
+
".backup"
// 备份
fs
.
copyFile
(
file
.
path
,
file
.
dir
+
"/"
+
backUpName
)
// 读取
var
data
=
fs
.
readFile
(
file
.
path
)
data
=
data
.
split
(
"
\n
"
)
var
head
=
getHead
(
data
)
var
body
=
data
// 解析head
var
headData
=
head
.
filter
(
function
(
v
){
return
/Holesize.+Tolerance.+PLATED/ig
.
test
(
v
)
})
headData
.
map
(
function
(
v
){
var
res
=
{
holesize
:
{},
tolerance
:
{},
attr
:
""
,
unit
:
""
,
quantity
:
0
}
var
holesize_tmp
=
/
(
Holesize.+
)
Tolerance/
.
exec
(
v
)[
1
];
holesize_tmp
=
holesize_tmp
.
split
(
"="
)
res
.
holesize
.
key
=
holesize_tmp
[
0
].
trim
()
res
.
holesize
.
value
=
holesize_tmp
[
1
].
trim
()
var
Tolerance_tmp
=
/
(
Tolerance.
{23})
/
.
exec
(
v
)[
1
];
Tolerance_tmp
=
Tolerance_tmp
.
split
(
"="
)[
1
].
split
(
"/"
)
res
.
tolerance
.
top
=
Tolerance_tmp
[
0
].
trim
()
res
.
tolerance
.
bot
=
Tolerance_tmp
[
1
].
trim
()
res
.
attr
=
/NON_PLATED/ig
.
test
(
v
)
?
"non_plated"
:
"plated"
res
.
unit
=
/MILES/ig
.
test
(
v
)
?
"inch"
:
"mm"
res
.
quantity
=
parseInt
(
v
.
split
(
"="
).
pop
())
drill_toll_manage
.
push
(
res
)
})
// 给body添加刀
var
count
=
0
body
.
forEach
(
function
(
v
,
i
){
if
(
/^%$|^M00/ig
.
test
(
v
)){
var
k
=
"T"
+
getK
(
++
count
)
body
[
i
]
=
v
+
"
\n
"
+
k
}
})
// 写入文件
var
resStr
=
head
.
join
(
"
\n
"
)
+
"
\n
"
+
body
.
join
(
"
\n
"
)
fs
.
writeFile
(
file
.
path
,
resStr
)
}
})
drill_toll_manage
.
forEach
(
function
(
v
){
console
.
log
(
v
);
})
// importGerber({job:job,step:"pcs",db:"genesis",data:inputInfo.data})
}
// 保存
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"
})
}
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
};
}
else
{
resultData
.
push
({
type
:
"info"
,
title
:
"操作完成, 请注意检查!"
});
return
{
status
:
Status
,
result_data
:
resultData
};
}
}
catch
(
e
)
{
Status
=
'error'
;
resultData
.
push
({
type
:
"error"
,
title
:
"脚本执行出错!"
,
detail
:
[{
desc
:
_
.
toString
(
e
)}]});
return
{
status
:
Status
,
result_data
:
resultData
};
}
function
getJobInfo
(
props
){
var
path
=
props
.
path
var
config
=
props
.
config
var
job
=
props
.
job
var
files
=
fs
.
listDir
(
path
)
files
=
files
.
filter
(
function
(
v
){
return
v
.
isFile
})
// 过滤出文件
// 先判断是不是odb
var
odbFiles
=
files
.
filter
(
function
(
file
){
// 拿到odb文件
return
config
.
odb
.
reduce
(
function
(
a
,
b
){
if
(
b
.
vaild
(
file
)){
a
=
true
}
return
a
},
false
)
})
if
(
odbFiles
.
length
){
return
{
type
:
"odb"
,
data
:
odbFiles
[
0
]
}
}
var
gerberFiles
=
files
.
filter
(
function
(
file
){
// 拿到odb文件
return
config
.
gerber
.
reduce
(
function
(
a
,
b
){
if
(
b
.
vaild
(
file
)){
file
.
gerber
=
config
.
format
[
b
.
format
];
file
.
type
=
b
.
type
;
a
=
true
}
return
a
},
false
)
})
if
(
gerberFiles
.
length
){
return
{
type
:
"gerber"
,
data
:
gerberFiles
}
}
return
"none"
}
function
importJob
(
props
){
GEN
.
importJob
(
props
);
}
function
importGerber
(
props
){
// job db step
var
job
=
props
.
job
var
step
=
props
.
step
var
files
=
props
.
data
GEN
.
createJob
({
name
:
job
,
db
:
props
.
db
})
GEN
.
createStep
({
job
:
job
,
name
:
props
.
step
})
var
gerberInfo
=
files
.
map
(
function
(
item
){
var
gerberCfg
=
JSON
.
parse
(
JSON
.
stringify
(
item
.
gerber
));
gerberCfg
.
layer
=
item
.
name
.
toLowerCase
()
gerberCfg
.
path
=
item
.
path
gerberCfg
.
format
=
item
.
type
gerberCfg
.
job
=
job
gerberCfg
.
step
=
step
return
gerberCfg
})
GEN
.
COM
(
"input_manual_reset"
)
gerberInfo
.
forEach
(
function
(
v
){
GEN
.
COM
(
"input_manual_set"
,
v
)
})
GEN
.
COM
(
"input_manual"
)
}
function
getHead
(
arr
,
head
){
head
=
head
||
[];
if
(
arr
[
0
]
!=
"%"
){
head
.
push
(
arr
.
shift
())
return
getHead
(
arr
,
head
)
}
else
{
return
head
}
}
function
getK
(
count
){
return
count
<
10
?
"0"
+
String
(
count
)
:
String
(
count
)
}
jtg/JTG_ORG_set_origin_aim.js
0 → 100644
View file @
1dbd449a
/*
NAME:
DESCRIPTION: ;
PARAMETER:
[
{
name : 'outline',
title : '外形层',
type : 'LineEdit',
property : {tool_tip : '外形层,默认是gko'},
},
{
name : 'auto_save',
title : '自动保存',
type : 'RadioBox',
property : {
item_list:[
{name:'yes',text:'YES'},
{name:'no',text:'NO'},
],
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
(
"==============================>设置零点"
);
// 引入模块 包
var
$
=
require
(
'topcam.scriptfunc'
).
argv
();
var
fs
=
require
(
'fs'
);
var
_
=
require
(
'lodash'
);
var
database
=
require
(
"topsin.database"
);
database
.
addConnection
(
$
.
conf
.
database_conf
,
"DFM"
);
var
QDfm
=
database
.
query
(
"DFM"
);
if
(
$
.
conf
.
product_type
==
"aimdfm"
)
{
QDfm
.
updateRow
({
table
:
"pdm_aimdfm_task"
,
data
:
{
current_process_title
:
$
.
process_title
},
where
:
{
id
:
$
.
task_id
}
});
}
var
GEN
=
$
.
gen
;
var
Job
=
$
.
job_name
;
var
db
=
$
.
db
var
Status
=
'ok'
;
var
resultData
=
[];
var
PAR
=
{};
if
(
$
.
hasOwnProperty
(
'script_parameter'
)){
PAR
=
JSON
.
parse
(
$
.
script_parameter
);
}
try
{
var
par
=
PAR
;
var
default_par
=
{
outline
:
"gko"
,
auto_save
:
"No"
,
}
for
(
var
key
in
default_par
){
// 设置默认属性
if
(
!
par
.
hasOwnProperty
(
key
)
||
par
[
key
]
==
""
){
par
[
key
]
=
default_par
[
key
]
}
}
if
(
_
.
isEmpty
(
Job
))
var
job
=
Job
.
toLowerCase
()
var
outline
=
par
.
outline
// 检查料号是否存在
if
(
!
GEN
.
isJobExists
({
job
:
job
})){
throw
"料号已经:"
+
job
+
"不存在"
}
// 检查料号是否被打开
if
(
!
GEN
.
isJobOpen
({
job
:
job
})){
GEN
.
openJob
({
job
:
job
})
}
// 检查料号是否能够check out
if
(
GEN
.
checkInout
({
job
:
job
,
mode
:
"test"
})
!=
0
){
throw
"the job check"
}
GEN
.
checkInout
({
job
:
job
,
mode
:
"out"
});
// 判断参考层(outline)是否存在并不为空
if
(
!
GEN
.
isLayerExists
({
job
:
job
,
layer
:
outline
})){
throw
"outline不存在"
}
var
steplist
=
GEN
.
getStepList
({
job
:
job
})
steplist
.
forEach
(
function
(
step
){
if
(
GEN
.
isLayerEmpty
({
job
:
job
,
step
:
step
,
layer
:
outline
})){
GEN
.
openStep
({
job
:
job
,
name
:
step
})
// 将所有物件依据外形移动到零点
GEN
.
workLayer
({
name
:
outline
,
display_number
:
2
,
clear_before
:
'yes'
})
var
outline_symbol
=
GEN
.
getSymbolLimits
({
job
:
job
,
symbol
:
outline
})
GEN
.
affectedLayer
({
affected
:
"yes"
,
mode
:
"all"
})
GEN
.
selMove
({
dx
:
-
outline_symbol
.
xmin
,
dy
:
-
outline_symbol
.
ymin
})
// 创建为profile
GEN
.
affectedLayer
({
affected
:
"no"
,
mode
:
"all"
})
GEN
.
workLayer
({
name
:
outline
,
display_number
:
2
,
clear_before
:
'yes'
})
GEN
.
selAllFeat
()
GEN
.
selCreateProfile
()
GEN
.
clearLayers
()
GEN
.
selClearFeature
()
GEN
.
closeJob
()
}
})
// 保存
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"
})
}
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
};
}
else
{
resultData
.
push
({
type
:
"info"
,
title
:
"操作完成, 请注意检查!"
});
return
{
status
:
Status
,
result_data
:
resultData
};
}
}
catch
(
e
)
{
Status
=
'error'
;
resultData
.
push
({
type
:
"error"
,
title
:
"脚本执行出错!"
,
detail
:
[{
desc
:
_
.
toString
(
e
)}]});
return
{
status
:
Status
,
result_data
:
resultData
};
}
\ No newline at end of file
jtg/JTG_PUB_auto_save_job_aim.js
0 → 100644
View file @
1dbd449a
/*
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> 保存料号 </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
(
"==============================>保存料号"
);
// 引入模块 包
var
$
=
require
(
'topcam.scriptfunc'
).
argv
();
var
fs
=
require
(
'fs'
);
var
_
=
require
(
'lodash'
);
var
database
=
require
(
"topsin.database"
);
database
.
addConnection
(
$
.
conf
.
database_conf
,
"DFM"
);
var
QDfm
=
database
.
query
(
"DFM"
);
if
(
$
.
conf
.
product_type
==
"aimdfm"
)
{
QDfm
.
updateRow
({
table
:
"pdm_aimdfm_task"
,
data
:
{
current_process_title
:
$
.
process_title
},
where
:
{
id
:
$
.
task_id
}
});
}
var
GEN
=
$
.
gen
;
var
Job
=
$
.
job_name
;
var
db
=
$
.
db
var
Status
=
'ok'
;
var
resultData
=
[];
try
{
if
(
_
.
isEmpty
(
Job
)){
throw
"参数Job不存在"
}
var
job
=
Job
.
toLowerCase
()
// 检查料号是否存在
if
(
!
GEN
.
isJobExists
({
job
:
job
})){
throw
"料号已经:"
+
job
+
"不存在"
}
// 检查料号是否被打开
if
(
!
GEN
.
isJobOpen
({
job
:
job
})){
throw
"料号没有打开"
}
// ?
// 检查料号是否能够check out
if
(
GEN
.
checkInout
({
job
:
job
,
mode
:
"test"
})
!=
0
){
throw
"the job check"
}
GEN
.
checkInout
({
job
:
job
,
mode
:
"out"
})
// 结束保存料号 关闭料号
GEN
.
saveJob
({
job
:
job
});
GEN
.
checkInout
({
job
:
job
,
mode
:
"in"
})
GEN
.
closeJob
({
job
:
job
})
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
};
}
else
{
resultData
.
push
({
type
:
"info"
,
title
:
"操作完成, 请注意检查!"
});
return
{
status
:
Status
,
result_data
:
resultData
};
}
}
catch
(
e
)
{
Status
=
'error'
;
resultData
.
push
({
type
:
"error"
,
title
:
"脚本执行出错!"
,
detail
:
[{
desc
:
_
.
toString
(
e
)}]});
return
{
status
:
Status
,
result_data
:
resultData
};
}
\ No newline at end of file
jtg/JTG_PUB_copy_step_aim.js
0 → 100644
View file @
1dbd449a
/*
NAME:
DESCRIPTION: ;
PARAMETER:
[
{
name : 'source_step',
title : '来源step',
type : 'LineEdit',
property : {tool_tip : '来源step,默认是orig'},
},
{
name : 'dest_step',
title : '目标step',
type : 'LineEdit',
property : {tool_tip : '目标step,默认是net'},
},
{
name : 'auto_save',
title : '自动保存',
type : 'RadioBox',
property : {
item_list:[
{name:'yes',text:'YES'},
{name:'no',text:'NO'},
],
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> 复制net </p>
<br>
<font size="3" color="#003DB2"><p>参数配置</p></font>
<p> step信息 </p>
<br>
<font size="3" color="#003DB2"><p>注意事项</p></font>
<p> 无 </p>
<br>
</body></html>
*/
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
console
.
log
(
"==============================>复制net"
);
// 引入模块 包
var
$
=
require
(
'topcam.scriptfunc'
).
argv
();
var
fs
=
require
(
'fs'
);
var
_
=
require
(
'lodash'
);
var
database
=
require
(
"topsin.database"
);
database
.
addConnection
(
$
.
conf
.
database_conf
,
"DFM"
);
var
QDfm
=
database
.
query
(
"DFM"
);
if
(
$
.
conf
.
product_type
==
"aimdfm"
)
{
QDfm
.
updateRow
({
table
:
"pdm_aimdfm_task"
,
data
:
{
current_process_title
:
$
.
process_title
},
where
:
{
id
:
$
.
task_id
}
});
}
var
GEN
=
$
.
gen
;
var
Job
=
$
.
job_name
;
var
db
=
$
.
db
var
Status
=
'ok'
;
var
resultData
=
[];
var
PAR
=
{};
if
(
$
.
hasOwnProperty
(
'script_parameter'
)){
PAR
=
JSON
.
parse
(
$
.
script_parameter
);
}
try
{
var
par
=
PAR
;
var
default_par
=
{
source_step
:
"orig"
,
dest_step
:
"net"
,
auto_save
:
"No"
,
}
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
+
"不存在"
}
// 检查料号是否被打开
if
(
!
GEN
.
isJobOpen
({
job
:
job
})){
GEN
.
openJob
({
job
:
job
})
}
// 检查料号是否能够check out
if
(
GEN
.
checkInout
({
job
:
job
,
mode
:
"test"
})
!=
0
){
throw
"the job check"
}
GEN
.
checkInout
({
job
:
job
,
mode
:
"out"
});
// 将source_step 拷贝到成dest_step
if
(
GEN
.
isStepExists
({
job
:
job
,
step
:
par
.
dest_step
})){
GEN
.
deleteStep
({
job
:
job
,
step
:
par
.
dest_step
})
}
GEN
.
copyStep
({
source_job
:
job
,
source_name
:
par
.
source_step
,
dest_job
:
job
,
dest_name
:
par
.
dest_step
})
// 保存
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"
})
}
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
};
}
else
{
resultData
.
push
({
type
:
"info"
,
title
:
"操作完成, 请注意检查!"
});
return
{
status
:
Status
,
result_data
:
resultData
};
}
}
catch
(
e
)
{
Status
=
'error'
;
resultData
.
push
({
type
:
"error"
,
title
:
"脚本执行出错!"
,
detail
:
[{
desc
:
_
.
toString
(
e
)}]});
return
{
status
:
Status
,
result_data
:
resultData
};
}
\ No newline at end of file
test/ATS_AIM_customer_data_analysis copy.js
View file @
1dbd449a
...
@@ -407,7 +407,9 @@ function saveJobInfo(props,par){
...
@@ -407,7 +407,9 @@ function saveJobInfo(props,par){
GEN
.
selRefFeat
({
layers
:
cover_layer
,
use
:
'filter'
,
mode
:
'cover'
})
GEN
.
selRefFeat
({
layers
:
cover_layer
,
use
:
'filter'
,
mode
:
'cover'
})
var
count
=
GEN
.
getSelectCount
()
var
count
=
GEN
.
getSelectCount
()
if
(
count
>
0
){
if
(
count
>
0
){
laser_info
[
start_layer
]
=
{}
if
(
!
laser_info
[
start_layer
]){
laser_info
[
start_layer
]
=
{}
}
laser_info
[
start_layer
].
drill_connect_layer
=
cover_layer
laser_info
[
start_layer
].
drill_connect_layer
=
cover_layer
laser_info
[
start_layer
].
drill_connect_point
=
count
laser_info
[
start_layer
].
drill_connect_point
=
count
}
}
...
@@ -554,3 +556,568 @@ function set_drill_attr(props){ // 镭射孔via,无铜孔npth,其余孔pth
...
@@ -554,3 +556,568 @@ function set_drill_attr(props){ // 镭射孔via,无铜孔npth,其余孔pth
GEN
.
selAllFeat
()
GEN
.
selAllFeat
()
GEN
.
selAddAttr
({
attribute
:
attr
})
GEN
.
selAddAttr
({
attribute
:
attr
})
}
}
/*
NAME:
DESCRIPTION: 客户数据分析
PARAMETER:
[
{
name : 'step_filter',
title : 'Step过滤',
type : 'LineEdit',
property : {tool_tip : '过滤step信息'}
},
{
name : 'erf',
title : 'erf名称',
type : 'LineEdit',
property : {tool_tip : ''}
},
{
name : 'auto_save',
title : '自动保存',
type : 'RadioBox',
property : {
item_list:[
{name:'yes',text:'YES'},
{name:'no',text:'NO'},
],
tool_tip:'是否自动保存料号开关'
}
}
]
VERSION_HISTORY:
V1.00 2020 3-30 Scott
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>
*/
/*
// 引入模块 包
var $ = require('topcam.scriptfunc').argv();
var fs = require('fs');
var _ = require('lodash');
var IKM = $.ikm;
var GEN = $.gen;
var GUI = $.gui;
var Job = $.job;
var JobId = $.job_id;
var mode = "develop" // 运行模式 develop 开发模式 方便调试
try {
var job = "1"
var matrix = UPLOAD_LAYER_MATRIX({job:job}) // 分析matrix 获得分析后的matrix信息
// 获得镭射层
var laser_drills = _.values(matrix).filter(function(v){return v.type == "laser_drill"})
// 获取钻孔信息上传
// 拿到array_step的信息
var array_step = "stp"
var arr_step_drill_tool_info = {}
GEN.openStep({job:job,name:array_step})
laser_drills.forEach(function(layer){
// 打散step
GEN.COM('sredit_reduce_nesting,mode=one_highest')
arr_step_drill_tool_info[layer] = GEN.getTool({job:job,step:array_step,layer:layer})
})
GEN.closeStep()
var stepList = ["cad"]
stepList.forEach(function(step){
GEN.openStep({job:job,name:step})
laser_drills.forEach(function(layer){
GEN.clearLayers()
GEN.workLayer({name:layer.name, display_number:1,clear_before:"yes"})
GEN.selClearFeature()
GEN.selAllFeat()
var count = GEN.getSelectCount()
if(GEN.getSelectCount()>0){
GEN.selClearFeature()
// GEN.selAddAttr({attribute:'.drill',option:'laser'})
// GEN.selectByFilter({attribute:[{attribute:'.drill',option:'laser'}]})
// GEN.selReverse()
var tool_mamager = GEN.getTool({job:job,step:step,layer:layer.name})
Object.keys(tool_mamager).forEach(function(key){
var tool = tool_mamager[key];
var data = {
job_id: JobId,
layer_name: layer.name,
tool_num: key,
tool_flag: key,
tool_type: tool.shape,
drill_type:tool.type,
drill_size : tool.drill_size,
drill_slot_length: tool.slot_len,
finish_size : tool.finish_size,
finish_slot_length: tool.slot_len,
size_tol_lower: tool.min_tol,
size_tol_upper: tool.max_tol,
pcs_count: tool.count,
array_count: arr_step_drill_tool_info[layer.name][key].count, // todo
attr_data: {}
// {"allowance": 2, "org_layer_name": "hhhh"}
}
IKM.crud("insertRow",{
table:'pdm_job_cam_drill',
data:data,
return_field:'id',
})
})
}
GEN.selClearFeature()
GEN.clearLayers()
})
GEN.closeStep()
})
GUI.msg("Done")
return 'Done';
}
catch (error) {
GUI.msg(error);
return 'Error';
}
function UPLOAD_LAYER_MATRIX(props){
var job = props.job
props.jobcategory = props.jobcategory || "work"
var matrix = ANALYSIS_STACKUP({job:job, jobcategory:props.jobcategory});
var func = 'function(ARGV)\
{\
var jobId = ARGV["job_id"];\
var tableName = "pdm_job_" + ARGV["jobcategory"] + "_layer";\
//GUI.msgbox({text: TDataParse.variant2JsonStr(tableName)});\
var db = new TSqlQueryV2(T_SQLCNT_POOL.getSqlDatabase());\
db.begin();\
try{\
var oLayers = db.selectMapMap({table:tableName, field:["odb_name","release_status"], where:{job_id:jobId}, uniquefield:"odb_name"});\
if (db.lastError().isValid()) throw db.lastError();\
//GUI.msgbox({text: TDataParse.variant2JsonStr(oLayers)});\
\
db.deleteRow({table:tableName, where:{job_id:jobId}});\
if (db.lastError().isValid()) throw db.lastError();\
\
var fieldLst = ["name", "odb_context", "odb_type", "odb_polarity", "odb_side", "drl_start", "drl_end",\
"row_num", "type", "drl_start_num", "drl_end_num", "drl_from_num", "drl_to_num", "drl_connect_to", \
"odb_name", "side", "stackup_num", "customer_field", "input_file_name", "odb_row_num"];\
\
for (var i=0;i<ARGV["layers"].length;i++)\
{\
layerName = ARGV["layers"][i];\
var layerInfo = ARGV["matrix"][layerName];\
var tmpData = {"job_id":jobId, "name": layerInfo["name"]};\
if (ARGV["releasestatus"] != undefined && ARGV["releasestatus"] != null && ARGV["releasestatus"].length>0\
&& ARGV["releasestatus"][layerInfo["odb_name"]] != undefined && ARGV["releasestatus"][layerInfo["odb_name"]] != null )\
{\
tmpData["release_status"] = ARGV["releasestatus"];\
}\
else\
{\
tmpData["release_status"] = oLayers.hasOwnProperty(layerInfo["odb_name"]) ? oLayers[layerInfo["odb_name"]]["release_status"] : null;\
}\
for (n = 0; n < fieldLst.length; n++)\
{\
tmpData[fieldLst[n]] = layerInfo[fieldLst[n]];\
}\
//GUI.msgbox({text: TDataParse.variant2JsonStr(tmpData)});\
db.insertRow({table:tableName, data:tmpData});\
if (db.lastError().isValid()) throw db.lastError();\
}\
db.commit();\
return new TDataResponse();\
}\
catch (err)\
{\
print(err.text());\
db.rollback();\
return new TDataResponse(err, "");\
}\
}';
// var ret = IKM.command( func, // ?? =========================> tmp
// { job_id :JobId,
// matrix:matrix,
// layers: Object.keys(matrix).sort(function(a,b){return matrix[a]["row"] - matrix[b]["row"]}),
// jobcategory:props.jobcategory}, 1);
// if (ret.errText) {
// return {
// jobcategory:props.jobcategory,
// errText :ret.errText,
// errCode :ret.errCode,
// };
// }
return matrix
}
function ANALYSIS_STACKUP(props){
var job = props.job
if(!props.hasOwnProperty("jobcategory")){ props.jobcategory = 'work' }
var matrix = GEN.getMatrix({job:job})
var layer_count = IKM.get_jobinfo({jobname:JobId,jobcategory:props.jobcategory,jobinfo:'layer_count'});
if(!layer_count){
layer_count = GEN.getLayerCount({job:job})
}
IKM.save_job_info({jobid:JobId,jobcategory:props.jobcategory,jobinfohash:{TL_layer_count:layer_count}});
_.values(matrix).sort(function(a,b){return a.row-b.row}).forEach(function(layer){
layer.odb_name = layer.name;
layer.name = layer.tl_name;
layer.odb_context = layer.context;
layer.odb_type = layer.layer_type;
layer.odb_polarity = layer.polarity;
layer.odb_side = layer.side;
layer.row_num = layer.tl_num;
layer.type = layer.tl_type;
layer.side = layer.enum_tl_side;
layer.input_file_name = layer.file_name;
layer.odb_row_num = layer.row;
if (layer.odb_name == 'drill'){
layer.name = 'drill';
layer.drl_start_num = 1;
layer.drl_end_num = layer_count;
layer.drl_from_num = 1;
layer.drl_to_num = layer_count;
layer.type = 'main_drill';
}
else if (/^d_(\d+)\-(\d+)$/.test(layer.odb_name)){
var tmp = /^d(\d+)\-(\d+)$/.exec(layer.odb_name)
var drl_star = tmp[1];
var drl_end = tmp[2];
layer.name = 'drill' + drl_star + '-' + drl_end;
layer.drl_start_num = drl_star;
layer.drl_end_num = drl_end;
layer.drl_from_num = drl_star;
layer.drl_to_num = drl_end;
if( drl_star == 1 || drl_end == layer_count ){
layer.type = 'blind_drill'; // 埋孔
}
else{
layer.type = 'bury_drill'; // 盲孔
}
}
else if (/^d(\d+)\-(\d+)$/.test(layer.odb_name)){
var tmp = /^d(\d+)\-(\d+)$/.exec(layer.odb_name)
var drl_star = tmp[1];
var drl_end = tmp[2];
layer.name = 'd'+drl_star+'-'+drl_end;
layer.drl_start_num = drl_star;
layer.drl_end_num = drl_end;
layer.drl_from_num = drl_star;
layer.drl_to_num = drl_end;
layer.type = 'laser_drill'; // 镭射孔
}
else if (/\-a$/.test(layer.odb_name)){
layer.side = 'top';
if(!layer.name){
layer.name = '__'+layer.odb_name+'__'
}
if(!layer.type){
layer.type = 'other'
}
}
else if (/\-b$/.test(layer.odb_name)){
layer.side = 'bottom';
if(!layer.name){
layer.name = '__'+layer.odb_name+'__'
}
if(!layer.type){
layer.type = 'other'
}
}
else{
if(!layer.name){
layer.name = '__'+layer.odb_name+'__'
}
if(!layer.type){
layer.type = 'other'
}
}
})
return matrix;
}
function tmp(){
return {
"sst": {
"row": "1","type": "solder_paste","name": "sp_fr","context": "board","layer_type": "solder_paste","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
"tl_num": -1000,"tl_name": "sp_fr","tl_type": "solder_paste","odb_name": "sst","odb_context": "board","odb_type": "solder_paste","odb_polarity": "positive","odb_side": "top",
"row_num": -1000,"odb_row_num": "1"
},
"spt": {
"row": "2","type": "solder_paste","name": "sp_fr(2)","context": "board","layer_type": "solder_paste","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
"tl_num": -999,"tl_name": "sp_fr(2)","tl_type": "solder_paste","odb_name": "spt","odb_context": "board","odb_type": "solder_paste","odb_polarity": "positive","odb_side": "top",
"row_num": -999,"odb_row_num": "2"
},
"smt": {
"row": "3","type": "solder_mask","name": "sm_fr","context": "board","layer_type": "solder_mask","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
"tl_num": -998,"tl_name": "sm_fr","tl_type": "solder_mask","odb_name": "smt","odb_context": "board","odb_type": "solder_mask","odb_polarity": "positive","odb_side": "top",
"row_num": -998,"odb_row_num": "3"
},
"top": {
"row": "4","type": "outer","name": "top","context": "board","layer_type": "signal","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
"tl_num": 1,"tl_name": "top","tl_type": "outer","odb_name": "top","odb_context": "board","odb_type": "signal","odb_polarity": "positive","odb_side": "top",
"row_num": 1,"odb_row_num": "4"
},
"isl2": {
"row": "5","type": "inner","name": "l2","context": "board","layer_type": "signal","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
"tl_num": 2,"tl_name": "l2","tl_type": "inner","odb_name": "isl2","odb_context": "board","odb_type": "signal","odb_polarity": "positive","odb_side": "inner",
"row_num": 2,"odb_row_num": "5"
},
"isl3": {
"row": "6","type": "inner","name": "l3","context": "board","layer_type": "signal","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
"tl_num": 3,"tl_name": "l3","tl_type": "inner","odb_name": "isl3","odb_context": "board","odb_type": "signal","odb_polarity": "positive","odb_side": "inner",
"row_num": 3,"odb_row_num": "6"
},
"isl4": {
"row": "7","type": "inner","name": "l4","context": "board","layer_type": "signal","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
"tl_num": 4,"tl_name": "l4","tl_type": "inner","odb_name": "isl4","odb_context": "board","odb_type": "signal","odb_polarity": "positive","odb_side": "inner",
"row_num": 4,"odb_row_num": "7"
},
"isl5": {
"row": "8","type": "inner","name": "l5","context": "board","layer_type": "signal","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
"tl_num": 5,"tl_name": "l5","tl_type": "inner","odb_name": "isl5","odb_context": "board","odb_type": "signal","odb_polarity": "positive","odb_side": "inner",
"row_num": 5,"odb_row_num": "8"
},
"isl6": {
"row": "9","type": "inner","name": "l6","context": "board","layer_type": "signal","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
"tl_num": 6,"tl_name": "l6","tl_type": "inner","odb_name": "isl6","odb_context": "board","odb_type": "signal","odb_polarity": "positive","odb_side": "inner",
"row_num": 6,"odb_row_num": "9"
},
"isl7": {
"row": "10","type": "inner","name": "l7","context": "board","layer_type": "signal","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
"tl_num": 7,"tl_name": "l7","tl_type": "inner","odb_name": "isl7","odb_context": "board","odb_type": "signal","odb_polarity": "positive","odb_side": "inner",
"row_num": 7,"odb_row_num": "10"
},
"isl8": {
"row": "11","type": "inner","name": "l8","context": "board","layer_type": "signal","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
"tl_num": 8,"tl_name": "l8","tl_type": "inner","odb_name": "isl8","odb_context": "board","odb_type": "signal","odb_polarity": "positive","odb_side": "inner",
"row_num": 8,"odb_row_num": "11"
},
"isl9": {
"row": "12","type": "inner","name": "l9","context": "board","layer_type": "signal","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
"tl_num": 9,"tl_name": "l9","tl_type": "inner","odb_name": "isl9","odb_context": "board","odb_type": "signal","odb_polarity": "positive","odb_side": "inner",
"row_num": 9,"odb_row_num": "12"
},
"bottom": {
"row": "13","type": "outer","name": "bottom","context": "board","layer_type": "signal","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
"tl_num": 10,"tl_name": "bottom","tl_type": "outer","odb_name": "bottom","odb_context": "board","odb_type": "signal","odb_polarity": "positive","odb_side": "bottom",
"row_num": 10,"odb_row_num": "13"
},
"smb": {
"row": "14","type": "solder_mask","name": "sm_ba","context": "board","layer_type": "solder_mask","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
"tl_num": 1013,"tl_name": "sm_ba","tl_type": "solder_mask","odb_name": "smb","odb_context": "board","odb_type": "solder_mask","odb_polarity": "positive","odb_side": "bottom",
"row_num": 1013,"odb_row_num": "14"
},
"spb": {
"row": "15","type": "solder_paste","name": "sp_ba","context": "board","layer_type": "solder_paste","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
"tl_num": 1014,"tl_name": "sp_ba","tl_type": "solder_paste","odb_name": "spb","odb_context": "board","odb_type": "solder_paste","odb_polarity": "positive","odb_side": "bottom",
"row_num": 1014,"odb_row_num": "15"
},
"ssb": {
"row": "16","type": "solder_paste","name": "sp_ba(2)","context": "board","layer_type": "solder_paste","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
"tl_num": 1015,"tl_name": "sp_ba(2)","tl_type": "solder_paste","odb_name": "ssb","odb_context": "board","odb_type": "solder_paste","odb_polarity": "positive","odb_side": "bottom",
"row_num": 1015,"odb_row_num": "16"
},
"d1-2": {
"row": "17","type": "laser_drill","name": "d1-2","context": "board","layer_type": "drill","polarity": "positive","drl_start": "top",
"drl_end": "isl2","gdrl_start": "top","gdrl_end": "isl2","drl_start_num": "1","drl_end_num": "2","tl_name": "drill1-2","tl_type": "drill",
"tl_num": 10016,"odb_name": "d1-2","odb_context": "board","odb_type": "drill","odb_polarity": "positive","odb_side": "none",
"row_num": 10016,"odb_row_num": "17","drl_from_num": "1","drl_to_num": "2"
},
"d2-3": {
"row": "18","type": "laser_drill","name": "d2-3","context": "board","layer_type": "drill","polarity": "positive","drl_start": "isl2","drl_end": "isl3","gdrl_start": "isl2","gdrl_end": "isl3","drl_start_num": "2","drl_end_num": "3","tl_name": "drill2-3","tl_type": "drill",
"tl_num": 10017,"odb_name": "d2-3","odb_context": "board","odb_type": "drill","odb_polarity": "positive","odb_side": "none",
"row_num": 10017,"odb_row_num": "18","drl_from_num": "2","drl_to_num": "3"
},
"d3-4": {
"row": "19","type": "laser_drill","name": "d3-4","context": "board","layer_type": "drill","polarity": "positive","drl_start": "isl3","drl_end": "isl4","gdrl_start": "isl3","gdrl_end": "isl4","drl_start_num": "3","drl_end_num": "4","tl_name": "drill3-4","tl_type": "drill",
"tl_num": 10018,"odb_name": "d3-4","odb_context": "board","odb_type": "drill","odb_polarity": "positive","odb_side": "none",
"row_num": 10018,"odb_row_num": "19","drl_from_num": "3","drl_to_num": "4"
},
"d4-5": {
"row": "20","type": "laser_drill","name": "d4-5","context": "board","layer_type": "drill","polarity": "positive","drl_start": "isl4","drl_end": "isl5","gdrl_start": "isl4","gdrl_end": "isl5","drl_start_num": "4","drl_end_num": "5","tl_name": "drill4-5","tl_type": "drill",
"tl_num": 10019,"odb_name": "d4-5","odb_context": "board","odb_type": "drill","odb_polarity": "positive","odb_side": "none",
"row_num": 10019,"odb_row_num": "20","drl_from_num": "4","drl_to_num": "5"
},
"d5-6": {
"row": "21","type": "laser_drill","name": "d5-6","context": "board","layer_type": "drill","polarity": "positive","drl_start": "isl5","drl_end": "isl6","gdrl_start": "isl5","gdrl_end": "isl6","drl_start_num": "5","drl_end_num": "6","tl_name": "drill5-6","tl_type": "drill",
"tl_num": 10020,"odb_name": "d5-6","odb_context": "board","odb_type": "drill","odb_polarity": "positive","odb_side": "none",
"row_num": 10020,"odb_row_num": "21","drl_from_num": "5","drl_to_num": "6"
},
"d6-7": {
"row": "22","type": "laser_drill","name": "d6-7","context": "board","layer_type": "drill","polarity": "positive","drl_start": "isl6","drl_end": "isl7","gdrl_start": "isl6","gdrl_end": "isl7","drl_start_num": "6","drl_end_num": "7","tl_name": "drill6-7","tl_type": "drill",
"tl_num": 10021,"odb_name": "d6-7","odb_context": "board","odb_type": "drill","odb_polarity": "positive","odb_side": "none",
"row_num": 10021,"odb_row_num": "22","drl_from_num": "6","drl_to_num": "7"
},
"d7-8": {
"row": "23","type": "laser_drill","name": "d7-8","context": "board","layer_type": "drill","polarity": "positive","drl_start": "isl7","drl_end": "isl8","gdrl_start": "isl7","gdrl_end": "isl8","drl_start_num": "7","drl_end_num": "8","tl_name": "drill7-8","tl_type": "drill",
"tl_num": 10022,"odb_name": "d7-8","odb_context": "board","odb_type": "drill","odb_polarity": "positive","odb_side": "none",
"row_num": 10022,"odb_row_num": "23","drl_from_num": "7","drl_to_num": "8"
},
"d8-9": {
"row": "24","type": "laser_drill","name": "d8-9","context": "board","layer_type": "drill","polarity": "positive","drl_start": "isl8","drl_end": "isl9","gdrl_start": "isl8","gdrl_end": "isl9","drl_start_num": "8","drl_end_num": "9","tl_name": "drill8-9","tl_type": "drill",
"tl_num": 10023,"odb_name": "d8-9","odb_context": "board","odb_type": "drill","odb_polarity": "positive","odb_side": "none",
"row_num": 10023,"odb_row_num": "24","drl_from_num": "8","drl_to_num": "9"
},
"d9-10": {
"row": "25","type": "laser_drill","name": "d9-10","context": "board","layer_type": "drill","polarity": "positive","drl_start": "isl9","drl_end": "bottom","gdrl_start": "isl9","gdrl_end": "bottom","drl_start_num": "9","drl_end_num": "10","tl_name": "drill9-10","tl_type": "drill",
"tl_num": 10024,"odb_name": "d9-10","odb_context": "board","odb_type": "drill","odb_polarity": "positive","odb_side": "none",
"row_num": 10024,"odb_row_num": "25","drl_from_num": "9","drl_to_num": "10"
},
"drill": {
"row": "26","type": "main_drill","name": "drill","context": "board","layer_type": "drill","polarity": "positive","drl_start": "top","drl_end": "bottom","gdrl_start": "top","gdrl_end": "bottom","drl_start_num": 1,"drl_end_num": 10,"tl_name": "drill","tl_type": "drill",
"tl_num": 10025,"odb_name": "drill","odb_context": "board","odb_type": "drill","odb_polarity": "positive","odb_side": "none",
"row_num": 10025,"odb_row_num": "26","drl_from_num": 1,"drl_to_num": 10
},
"rout": {
"row": "27","type": "other","name": "__rout__","context": "board","layer_type": "rout","polarity": "positive","drl_start": "top","drl_end": "bottom","gdrl_start": "top","gdrl_end": "bottom","odb_name": "rout","odb_context": "board","odb_type": "rout","odb_polarity": "positive","odb_side": "none","odb_row_num": "27"
},
"nclegend-1-2": {
"row": "28","type": "other","name": "__nclegend-1-2__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
"tl_num": 110027,"odb_name": "nclegend-1-2","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
"row_num": 110027,"odb_row_num": "28"
},
"nclegend-2-3": {
"row": "29","type": "other","name": "__nclegend-2-3__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
"tl_num": 110028,"odb_name": "nclegend-2-3","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
"row_num": 110028,"odb_row_num": "29"
},
"nclegend-3-4": {
"row": "30","type": "other","name": "__nclegend-3-4__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
"tl_num": 110029,"odb_name": "nclegend-3-4","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
"row_num": 110029,"odb_row_num": "30"
},
"nclegend-4-5": {
"row": "31","type": "other","name": "__nclegend-4-5__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
"tl_num": 110030,"odb_name": "nclegend-4-5","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
"row_num": 110030,"odb_row_num": "31"
},
"nclegend-5-6": {
"row": "32","type": "other","name": "__nclegend-5-6__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
"tl_num": 110031,"odb_name": "nclegend-5-6","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
"row_num": 110031,"odb_row_num": "32"
},
"nclegend-6-7": {
"row": "33","type": "other","name": "__nclegend-6-7__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
"tl_num": 110032,"odb_name": "nclegend-6-7","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
"row_num": 110032,"odb_row_num": "33"
},
"nclegend-7-8": {
"row": "34","type": "other","name": "__nclegend-7-8__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
"tl_num": 110033,"odb_name": "nclegend-7-8","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
"row_num": 110033,"odb_row_num": "34"
},
"nclegend-8-9": {
"row": "35","type": "other","name": "__nclegend-8-9__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
"tl_num": 110034,"odb_name": "nclegend-8-9","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
"row_num": 110034,"odb_row_num": "35"
},
"nclegend-9-10": {
"row": "36","type": "other","name": "__nclegend-9-10__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
"tl_num": 110035,"odb_name": "nclegend-9-10","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
"row_num": 110035,"odb_row_num": "36"
},
"nclegend-1-10": {
"row": "37","type": "other","name": "__nclegend-1-10__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
"tl_num": 110036,"odb_name": "nclegend-1-10","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
"row_num": 110036,"odb_row_num": "37"
},
"outline": {
"row": "38","type": "other","name": "__outline__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
"tl_num": 110037,"odb_name": "outline","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
"row_num": 110037,"odb_row_num": "38"
},
"top_assem": {
"row": "39","type": "other","name": "__top_assem__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
"tl_num": 110038,"odb_name": "top_assem","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
"row_num": 110038,"odb_row_num": "39"
},
"bot_assem": {
"row": "40","type": "other","name": "__bot_assem__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
"tl_num": 110039,"odb_name": "bot_assem","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
"row_num": 110039,"odb_row_num": "40"
},
"top_testpoint": {
"row": "41","type": "other","name": "__top_testpoint__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
"tl_num": 110040,"odb_name": "top_testpoint","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
"row_num": 110040,"odb_row_num": "41"
},
"bot_testpoint": {
"row": "42","type": "other","name": "__bot_testpoint__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
"tl_num": 110041,"odb_name": "bot_testpoint","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
"row_num": 110041,"odb_row_num": "42"
},
"top_osp": {
"row": "43","type": "other","name": "__top_osp__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
"tl_num": 110042,"odb_name": "top_osp","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
"row_num": 110042,"odb_row_num": "43"
},
"bot_osp": {
"row": "44","type": "other","name": "__bot_osp__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
"tl_num": 110043,"odb_name": "bot_osp","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
"row_num": 110043,"odb_row_num": "44"
},
"top_enig": {
"row": "45","type": "other","name": "__top_enig__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
"tl_num": 110044,"odb_name": "top_enig","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
"row_num": 110044,"odb_row_num": "45"
},
"bot_enig": {
"row": "46","type": "other","name": "__bot_enig__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
"tl_num": 110045,"odb_name": "bot_enig","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
"row_num": 110045,"odb_row_num": "46"
},
"fab_page2": {
"row": "47","type": "other","name": "__fab_page2__","context": "misc","layer_type": "document","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
"tl_num": 110046,"odb_name": "fab_page2","odb_context": "misc","odb_type": "document","odb_polarity": "positive","odb_side": "none",
"row_num": 110046,"odb_row_num": "47"
},
"tmp_top_shorts": {
"row": "48","type": "other","name": "__tmp_top_shorts__","context": "misc","layer_type": "signal","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
"tl_num": 110047,"odb_name": "tmp_top_shorts","odb_context": "misc","odb_type": "signal","odb_polarity": "positive","odb_side": "none",
"row_num": 110047,"odb_row_num": "48"
},
"tmp_bot_shorts": {
"row": "49","type": "other","name": "__tmp_bot_shorts__","context": "misc","layer_type": "signal","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
"tl_num": 110048,"odb_name": "tmp_bot_shorts","odb_context": "misc","odb_type": "signal","odb_polarity": "positive","odb_side": "none",
"row_num": 110048,"odb_row_num": "49"
},
"bot_assy_mate": {
"row": "50","type": "other","name": "__bot_assy_mate__","context": "misc","layer_type": "signal","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
"tl_num": 110049,"odb_name": "bot_assy_mate","odb_context": "misc","odb_type": "signal","odb_polarity": "positive","odb_side": "none",
"row_num": 110049,"odb_row_num": "50"
},
"outline+1": {
"row": "51","type": "other","name": "__outline+1__","context": "misc","layer_type": "signal","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
"tl_num": 110050,"odb_name": "outline+1","odb_context": "misc","odb_type": "signal","odb_polarity": "positive","odb_side": "none",
"row_num": 110050,"odb_row_num": "51"
},
"top_assy_mate": {
"row": "52","type": "other","name": "__top_assy_mate__","context": "misc","layer_type": "signal","polarity": "positive","drl_start": "","drl_end": "","gdrl_start": "","gdrl_end": "",
"tl_num": 110051,"odb_name": "top_assy_mate","odb_context": "misc","odb_type": "signal","odb_polarity": "positive","odb_side": "none",
"row_num": 110051,"odb_row_num": "52"
}
}
}
*/
\ No newline at end of file
test/ATS_AIM_customer_data_analysis.js
View file @
1dbd449a
...
@@ -58,56 +58,141 @@ var JobId = $.job_id;
...
@@ -58,56 +58,141 @@ var JobId = $.job_id;
var
mode
=
"develop"
// 运行模式 develop 开发模式 方便调试
var
mode
=
"develop"
// 运行模式 develop 开发模式 方便调试
try
{
try
{
// IKM.crud("insertRow",{
// table:'pdm_job_org_drill',
// data:{job_id:"1",step_name:"cad",step_type:"pcs", std_layer_name:"d_1-2",odb_layer_name:"d1-2",
// row_num:"1", drill_size:"r2",finish_size:"r2.1",drill_type:"laser_drill",drill_shape:"s",
// slot_length:"12", count:"231",drill_size_lower_tol:"23",drill_size_upper_tol:"asd"
// },
// return_field:'uid',
// })
var
job
=
"1"
var
job
=
"1"
var
pcs_step
=
"cad"
,
array_step
=
"stp"
;
var
matrix
=
UPLOAD_LAYER_MATRIX
({
job
:
job
})
// 分析matrix 获得分析后的matrix信息
var
matrix
=
UPLOAD_LAYER_MATRIX
({
job
:
job
})
// 分析matrix 获得分析后的matrix信息
// 获得镭射层
var
analysis_obj
=
analysis
({
job
:
job
,
jobId
:
JobId
,
pcs_step
:
pcs_step
,
array_step
:
array_step
,
matrix
:
matrix
})
var
config
=
{
var
laser_drills
=
_
.
values
(
matrix
).
filter
(
function
(
v
){
return
v
.
type
==
"laser_drill"
})
jobInfo
:
{
layer_count
:
[
"signal"
,
"power_ground"
],
// Board属性的signal或者power_ground层
vc_card_size_w
:
{
api
:
"vc_card_size"
,
props
:
"xsize"
},
// card短边尺寸 // ? 保留小数
vc_card_size_l
:
{
api
:
"vc_card_size"
,
props
:
"ysize"
},
// card长边尺寸 // ? 保留小数
vc_array_size_w
:
{
api
:
"vc_array_size"
,
props
:
"xsize"
},
// ! array短边尺寸 需要arr_step // ? 保留小数
vc_array_size_l
:
{
api
:
"vc_array_size"
,
props
:
"ysize"
},
// ! array长边尺寸 需要arr_step // ? 保留小数
vc_pcs_count_on_panel
:
true
,
// todo array中pcs的数量 ! 需要arr_step
stack_vias_number
:
true
,
// via孔连续叠加的层数
stack_vias_more
:
{
only_value
:
true
},
// yes|no : 14层板以上时,Stack Vias >=12时,存yes // ! 需要分析完via连续叠加层数
depth_drilling
:
{
api
:
"layer_exist"
,
props
:
"depth_drill"
},
// yes|no :存在depth_drill 层时 ,存yes
depth_routing
:
{
api
:
"layer_exist"
,
props
:
"depth_routing"
},
// tmp yes|no :存在depth_routing 层时,,存yes
laser_via_on_buried_hole
:
true
,
// todo via孔在埋孔上时,存yes
milling_bit_size
:
true
,
// todo 检查array中pcs的最小间距值
milling_length
:
true
,
// todo 检查array中铣切长度
vc_src_01005_pad_result
:
{
api
:
"board_has_attr"
,
props
:
".smd"
},
// * yes|no:board 层中检查存在01005属性物件时,存yes 这里先拿.smd代替了
ATS_technology_25dc
:
{
api
:
"layer_exist"
,
props
:
"cavity"
},
// yes|no:存在cavity层别时存yes
ATS_technology_25dr
:
{
api
:
"layer_exist"
,
props
:
"cavity"
},
// yes|no:存在cavity层别时存yes
vc_src_EDGE_PLATING
:
true
,
// yes|no:检查线路外形是否存在物件,存在则存yes // !料号需要有rout层
edge_plating_length
:
true
,
// todo 检查线路外形处物件的长度
glod_finger
:
true
,
// todo yes|no:暂无逻辑
glod_finger_area
:
true
,
// todo 暂无逻辑
solder_mask_side
:
true
,
// top|bot|both:检查防焊层所在面次
silk_screen_side
:
true
,
// top|bot|both:检查文字层所在面次
min_drl_size
:
true
,
// todo 0.5mm 最小圆孔
max_pth_drl_size
:
true
,
// todo 3.5mm 最大pth圆孔
max_npth_drl_size
:
true
,
// todo 6.0mm 最大npth圆孔
min_slot_drl_size
:
true
,
// todo 0.8mm 最小槽孔
max_slot_drl_size
:
true
,
// todo 1.2mm 最大槽孔
max_slot_drl_length
:
true
,
// todo 2.0mm 最大槽孔
max_spec_slot_drl_size
:
true
,
// todo 2.1mm 最大异形槽孔
max_spec_slot_drl_length
:
true
,
// todo 3.0mm 最大异形槽孔
}
}
laser_drills
.
forEach
(
function
(
layer
){
// 分析料号info
GEN
.
workLayer
({
name
:
layer
.
name
,
display_number
:
1
,
clear_before
:
"yes"
})
var
jobInfo
=
{}
GEN
.
selClearFeature
()
Object
.
keys
(
config
.
jobInfo
).
forEach
(
function
(
key
){
GEN
.
selAllFeat
()
var
props
=
config
.
jobInfo
[
key
];
var
count
=
GEN
.
getSelectCount
()
if
(
props
){
if
(
GEN
.
getSelectCount
()
>
0
){
try
{
// GEN.selAddAttr({attribute:"via"})
if
(
props
.
hasOwnProperty
(
"api"
)
&&
props
.
hasOwnProperty
(
"props"
)){
jobInfo
[
key
]
=
analysis_obj
[
"analysis_"
+
props
.
api
](
props
.
props
)
}
else
if
(
props
.
only_value
){
jobInfo
[
key
]
=
analysis_obj
[
key
]
}
else
{
jobInfo
[
key
]
=
analysis_obj
[
"analysis_"
+
key
](
props
)
}
}
catch
(
e
)
{
console
.
log
(
e
);
jobInfo
[
key
]
=
"_error"
}
}
})
// 过滤掉料号信息的 _todo 和 _error
for
(
var
key
in
jobInfo
)
{
if
(
jobInfo
[
key
]
===
"_todo"
||
jobInfo
[
key
]
===
"_error"
){
delete
jobInfo
[
key
]
}
}
// 上传jobInfo IKM版本
IKM
.
save_job_info
({
jobid
:
JobId
,
jobinfohash
:
jobInfo
})
// todo 上传jobInfo topjs3版本
// save_job_info({
// jobid: JobId,
// jobinfohash: jobInfo
// })
// todo 设置钻孔层孔属性,镭射孔via,无铜孔npth,其余孔pth
// todo 上传钻孔信息
// 获取pcs_step 和 array_step的钻孔信息
var
drill_info
=
{};
var
drillLayers
=
analysis_obj
.
matrixInfo
.
mDrills
;
[
pcs_step
,
array_step
].
forEach
(
function
(
step
){
drill_info
[
step
]
=
drill_info
[
step
]
||
{};
drillLayers
.
forEach
(
function
(
layer
){
var
layer_tool_manager
=
GEN
.
getTool
({
job
:
job
,
step
:
step
,
layer
:
layer
.
name
})
drill_info
[
step
][
layer
.
name
]
=
layer_tool_manager
})
})
var
pcs_tool_manager
=
drill_info
[
pcs_step
];
var
array_tool_manager
=
drill_info
[
array_step
];
Object
.
keys
(
pcs_tool_manager
).
forEach
(
function
(
layer
){
Object
.
keys
(
pcs_tool_manager
[
layer
]).
forEach
(
function
(
key
){
var
tool
=
pcs_tool_manager
[
layer
][
key
];
var
array_count
;
if
(
array_tool_manager
&&
array_tool_manager
[
layer
]
&&
array_tool_manager
[
layer
][
key
]){
array_count
=
array_tool_manager
[
layer
][
key
].
count
}
var
data
=
{
var
data
=
{
job_id
:
JobId
,
job_id
:
JobId
,
step_name
:
"cad"
,
layer_name
:
layer
,
odb_layer_name
:
layer
.
odb_name
,
tool_num
:
key
,
row_num
:
layer
.
row_num
,
tool_flag
:
key
,
drill_type
:
layer
.
type
,
tool_type
:
tool
.
shape
,
count
:
count
drill_type
:
tool
.
type
,
drill_size
:
tool
.
drill_size
,
drill_slot_length
:
tool
.
slot_len
,
finish_size
:
tool
.
finish_size
,
finish_slot_length
:
tool
.
slot_len
,
size_tol_lower
:
tool
.
min_tol
,
size_tol_upper
:
tool
.
max_tol
,
pcs_count
:
tool
.
count
,
array_count
:
array_count
,
// todo
attr_data
:
{}
// {"allowance": 2, "org_layer_name": "hhhh"}
}
}
if
(
!
array_count
){
delete
data
.
array_count
}
}
var
id
=
IKM
.
crud
(
"selectValue"
,{
GEN
.
selClearFeature
()
table
:
'pdm_job_cam_drill'
,
GEN
.
clearLayers
()
field
:
"id"
,
where
:{
job_id
:
JobId
,
layer_name
:
layer
,
tool_num
:
key
}
})
if
(
/done/ig
.
test
(
id
)){
IKM
.
crud
(
"insertRow"
,{
table
:
'pdm_job_cam_drill'
,
data
:
data
,
return_field
:
'id'
,
})
}
else
{
IKM
.
crud
(
"updateRow"
,{
table
:
'pdm_job_cam_drill'
,
where
:
{
id
:
id
},
data
:
data
,
update_policy
:{
tags
:
'array_append'
,
attr_data
:
'json_merge'
}
})
}
})
})
})
var
laser_drills_info
=
laser_drills
// 获取钻孔信息
GUI
.
msg
(
"Done"
)
GUI
.
msg
(
"Done"
)
return
'Done'
;
return
'Done'
;
...
@@ -271,271 +356,825 @@ function ANALYSIS_STACKUP(props){
...
@@ -271,271 +356,825 @@ function ANALYSIS_STACKUP(props){
})
})
return
matrix
;
return
matrix
;
}
}
function
getMatrixInfo
(
props
){
// 获取matrix各种信息
function
tmp
(){
var
job
=
props
.
job
return
{
var
matrix
=
GEN
.
getMatrix
({
job
:
job
})
"sst"
:
{
var
res
=
{
"row"
:
"1"
,
"type"
:
"solder_paste"
,
"name"
:
"sp_fr"
,
"context"
:
"board"
,
"layer_type"
:
"solder_paste"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
matrix
:
matrix
,
// matrix
"tl_num"
:
-
1000
,
"tl_name"
:
"sp_fr"
,
"tl_type"
:
"solder_paste"
,
"odb_name"
:
"sst"
,
"odb_context"
:
"board"
,
"odb_type"
:
"solder_paste"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"top"
,
matrixVal
:
[],
// matrix 的 value数组
"row_num"
:
-
1000
,
"odb_row_num"
:
"1"
mSignal
:
{},
// board的signal层 {}
},
mSignals
:
[],
// board的signal层 []
"spt"
:
{
mDrill
:
{},
// board的drill层
"row"
:
"2"
,
"type"
:
"solder_paste"
,
"name"
:
"sp_fr(2)"
,
"context"
:
"board"
,
"layer_type"
:
"solder_paste"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
mDrills
:
[],
// board的drill层
"tl_num"
:
-
999
,
"tl_name"
:
"sp_fr(2)"
,
"tl_type"
:
"solder_paste"
,
"odb_name"
:
"spt"
,
"odb_context"
:
"board"
,
"odb_type"
:
"solder_paste"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"top"
,
mSolderMask
:
{},
// 防焊层
"row_num"
:
-
999
,
"odb_row_num"
:
"2"
mSolderMasks
:
[],
// 防焊层
},
mOuters
:
[],
// 外层和对于的防旱
"smt"
:
{
mBoardLayer
:
[]
// board层
"row"
:
"3"
,
"type"
:
"solder_mask"
,
"name"
:
"sm_fr"
,
"context"
:
"board"
,
"layer_type"
:
"solder_mask"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
-
998
,
"tl_name"
:
"sm_fr"
,
"tl_type"
:
"solder_mask"
,
"odb_name"
:
"smt"
,
"odb_context"
:
"board"
,
"odb_type"
:
"solder_mask"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"top"
,
"row_num"
:
-
998
,
"odb_row_num"
:
"3"
},
"top"
:
{
"row"
:
"4"
,
"type"
:
"outer"
,
"name"
:
"top"
,
"context"
:
"board"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
1
,
"tl_name"
:
"top"
,
"tl_type"
:
"outer"
,
"odb_name"
:
"top"
,
"odb_context"
:
"board"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"top"
,
"row_num"
:
1
,
"odb_row_num"
:
"4"
},
"isl2"
:
{
"row"
:
"5"
,
"type"
:
"inner"
,
"name"
:
"l2"
,
"context"
:
"board"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
2
,
"tl_name"
:
"l2"
,
"tl_type"
:
"inner"
,
"odb_name"
:
"isl2"
,
"odb_context"
:
"board"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"inner"
,
"row_num"
:
2
,
"odb_row_num"
:
"5"
},
"isl3"
:
{
"row"
:
"6"
,
"type"
:
"inner"
,
"name"
:
"l3"
,
"context"
:
"board"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
3
,
"tl_name"
:
"l3"
,
"tl_type"
:
"inner"
,
"odb_name"
:
"isl3"
,
"odb_context"
:
"board"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"inner"
,
"row_num"
:
3
,
"odb_row_num"
:
"6"
},
"isl4"
:
{
"row"
:
"7"
,
"type"
:
"inner"
,
"name"
:
"l4"
,
"context"
:
"board"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
4
,
"tl_name"
:
"l4"
,
"tl_type"
:
"inner"
,
"odb_name"
:
"isl4"
,
"odb_context"
:
"board"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"inner"
,
"row_num"
:
4
,
"odb_row_num"
:
"7"
},
"isl5"
:
{
"row"
:
"8"
,
"type"
:
"inner"
,
"name"
:
"l5"
,
"context"
:
"board"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
5
,
"tl_name"
:
"l5"
,
"tl_type"
:
"inner"
,
"odb_name"
:
"isl5"
,
"odb_context"
:
"board"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"inner"
,
"row_num"
:
5
,
"odb_row_num"
:
"8"
},
"isl6"
:
{
"row"
:
"9"
,
"type"
:
"inner"
,
"name"
:
"l6"
,
"context"
:
"board"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
6
,
"tl_name"
:
"l6"
,
"tl_type"
:
"inner"
,
"odb_name"
:
"isl6"
,
"odb_context"
:
"board"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"inner"
,
"row_num"
:
6
,
"odb_row_num"
:
"9"
},
"isl7"
:
{
"row"
:
"10"
,
"type"
:
"inner"
,
"name"
:
"l7"
,
"context"
:
"board"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
7
,
"tl_name"
:
"l7"
,
"tl_type"
:
"inner"
,
"odb_name"
:
"isl7"
,
"odb_context"
:
"board"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"inner"
,
"row_num"
:
7
,
"odb_row_num"
:
"10"
},
"isl8"
:
{
"row"
:
"11"
,
"type"
:
"inner"
,
"name"
:
"l8"
,
"context"
:
"board"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
8
,
"tl_name"
:
"l8"
,
"tl_type"
:
"inner"
,
"odb_name"
:
"isl8"
,
"odb_context"
:
"board"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"inner"
,
"row_num"
:
8
,
"odb_row_num"
:
"11"
},
"isl9"
:
{
"row"
:
"12"
,
"type"
:
"inner"
,
"name"
:
"l9"
,
"context"
:
"board"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
9
,
"tl_name"
:
"l9"
,
"tl_type"
:
"inner"
,
"odb_name"
:
"isl9"
,
"odb_context"
:
"board"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"inner"
,
"row_num"
:
9
,
"odb_row_num"
:
"12"
},
"bottom"
:
{
"row"
:
"13"
,
"type"
:
"outer"
,
"name"
:
"bottom"
,
"context"
:
"board"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
10
,
"tl_name"
:
"bottom"
,
"tl_type"
:
"outer"
,
"odb_name"
:
"bottom"
,
"odb_context"
:
"board"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"bottom"
,
"row_num"
:
10
,
"odb_row_num"
:
"13"
},
"smb"
:
{
"row"
:
"14"
,
"type"
:
"solder_mask"
,
"name"
:
"sm_ba"
,
"context"
:
"board"
,
"layer_type"
:
"solder_mask"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
1013
,
"tl_name"
:
"sm_ba"
,
"tl_type"
:
"solder_mask"
,
"odb_name"
:
"smb"
,
"odb_context"
:
"board"
,
"odb_type"
:
"solder_mask"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"bottom"
,
"row_num"
:
1013
,
"odb_row_num"
:
"14"
},
"spb"
:
{
"row"
:
"15"
,
"type"
:
"solder_paste"
,
"name"
:
"sp_ba"
,
"context"
:
"board"
,
"layer_type"
:
"solder_paste"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
1014
,
"tl_name"
:
"sp_ba"
,
"tl_type"
:
"solder_paste"
,
"odb_name"
:
"spb"
,
"odb_context"
:
"board"
,
"odb_type"
:
"solder_paste"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"bottom"
,
"row_num"
:
1014
,
"odb_row_num"
:
"15"
},
"ssb"
:
{
"row"
:
"16"
,
"type"
:
"solder_paste"
,
"name"
:
"sp_ba(2)"
,
"context"
:
"board"
,
"layer_type"
:
"solder_paste"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
1015
,
"tl_name"
:
"sp_ba(2)"
,
"tl_type"
:
"solder_paste"
,
"odb_name"
:
"ssb"
,
"odb_context"
:
"board"
,
"odb_type"
:
"solder_paste"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"bottom"
,
"row_num"
:
1015
,
"odb_row_num"
:
"16"
},
"d1-2"
:
{
"row"
:
"17"
,
"type"
:
"laser_drill"
,
"name"
:
"d1-2"
,
"context"
:
"board"
,
"layer_type"
:
"drill"
,
"polarity"
:
"positive"
,
"drl_start"
:
"top"
,
"drl_end"
:
"isl2"
,
"gdrl_start"
:
"top"
,
"gdrl_end"
:
"isl2"
,
"drl_start_num"
:
"1"
,
"drl_end_num"
:
"2"
,
"tl_name"
:
"drill1-2"
,
"tl_type"
:
"drill"
,
"tl_num"
:
10016
,
"odb_name"
:
"d1-2"
,
"odb_context"
:
"board"
,
"odb_type"
:
"drill"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
10016
,
"odb_row_num"
:
"17"
,
"drl_from_num"
:
"1"
,
"drl_to_num"
:
"2"
},
"d2-3"
:
{
"row"
:
"18"
,
"type"
:
"laser_drill"
,
"name"
:
"d2-3"
,
"context"
:
"board"
,
"layer_type"
:
"drill"
,
"polarity"
:
"positive"
,
"drl_start"
:
"isl2"
,
"drl_end"
:
"isl3"
,
"gdrl_start"
:
"isl2"
,
"gdrl_end"
:
"isl3"
,
"drl_start_num"
:
"2"
,
"drl_end_num"
:
"3"
,
"tl_name"
:
"drill2-3"
,
"tl_type"
:
"drill"
,
"tl_num"
:
10017
,
"odb_name"
:
"d2-3"
,
"odb_context"
:
"board"
,
"odb_type"
:
"drill"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
10017
,
"odb_row_num"
:
"18"
,
"drl_from_num"
:
"2"
,
"drl_to_num"
:
"3"
},
"d3-4"
:
{
"row"
:
"19"
,
"type"
:
"laser_drill"
,
"name"
:
"d3-4"
,
"context"
:
"board"
,
"layer_type"
:
"drill"
,
"polarity"
:
"positive"
,
"drl_start"
:
"isl3"
,
"drl_end"
:
"isl4"
,
"gdrl_start"
:
"isl3"
,
"gdrl_end"
:
"isl4"
,
"drl_start_num"
:
"3"
,
"drl_end_num"
:
"4"
,
"tl_name"
:
"drill3-4"
,
"tl_type"
:
"drill"
,
"tl_num"
:
10018
,
"odb_name"
:
"d3-4"
,
"odb_context"
:
"board"
,
"odb_type"
:
"drill"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
10018
,
"odb_row_num"
:
"19"
,
"drl_from_num"
:
"3"
,
"drl_to_num"
:
"4"
},
"d4-5"
:
{
"row"
:
"20"
,
"type"
:
"laser_drill"
,
"name"
:
"d4-5"
,
"context"
:
"board"
,
"layer_type"
:
"drill"
,
"polarity"
:
"positive"
,
"drl_start"
:
"isl4"
,
"drl_end"
:
"isl5"
,
"gdrl_start"
:
"isl4"
,
"gdrl_end"
:
"isl5"
,
"drl_start_num"
:
"4"
,
"drl_end_num"
:
"5"
,
"tl_name"
:
"drill4-5"
,
"tl_type"
:
"drill"
,
"tl_num"
:
10019
,
"odb_name"
:
"d4-5"
,
"odb_context"
:
"board"
,
"odb_type"
:
"drill"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
10019
,
"odb_row_num"
:
"20"
,
"drl_from_num"
:
"4"
,
"drl_to_num"
:
"5"
},
"d5-6"
:
{
"row"
:
"21"
,
"type"
:
"laser_drill"
,
"name"
:
"d5-6"
,
"context"
:
"board"
,
"layer_type"
:
"drill"
,
"polarity"
:
"positive"
,
"drl_start"
:
"isl5"
,
"drl_end"
:
"isl6"
,
"gdrl_start"
:
"isl5"
,
"gdrl_end"
:
"isl6"
,
"drl_start_num"
:
"5"
,
"drl_end_num"
:
"6"
,
"tl_name"
:
"drill5-6"
,
"tl_type"
:
"drill"
,
"tl_num"
:
10020
,
"odb_name"
:
"d5-6"
,
"odb_context"
:
"board"
,
"odb_type"
:
"drill"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
10020
,
"odb_row_num"
:
"21"
,
"drl_from_num"
:
"5"
,
"drl_to_num"
:
"6"
},
"d6-7"
:
{
"row"
:
"22"
,
"type"
:
"laser_drill"
,
"name"
:
"d6-7"
,
"context"
:
"board"
,
"layer_type"
:
"drill"
,
"polarity"
:
"positive"
,
"drl_start"
:
"isl6"
,
"drl_end"
:
"isl7"
,
"gdrl_start"
:
"isl6"
,
"gdrl_end"
:
"isl7"
,
"drl_start_num"
:
"6"
,
"drl_end_num"
:
"7"
,
"tl_name"
:
"drill6-7"
,
"tl_type"
:
"drill"
,
"tl_num"
:
10021
,
"odb_name"
:
"d6-7"
,
"odb_context"
:
"board"
,
"odb_type"
:
"drill"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
10021
,
"odb_row_num"
:
"22"
,
"drl_from_num"
:
"6"
,
"drl_to_num"
:
"7"
},
"d7-8"
:
{
"row"
:
"23"
,
"type"
:
"laser_drill"
,
"name"
:
"d7-8"
,
"context"
:
"board"
,
"layer_type"
:
"drill"
,
"polarity"
:
"positive"
,
"drl_start"
:
"isl7"
,
"drl_end"
:
"isl8"
,
"gdrl_start"
:
"isl7"
,
"gdrl_end"
:
"isl8"
,
"drl_start_num"
:
"7"
,
"drl_end_num"
:
"8"
,
"tl_name"
:
"drill7-8"
,
"tl_type"
:
"drill"
,
"tl_num"
:
10022
,
"odb_name"
:
"d7-8"
,
"odb_context"
:
"board"
,
"odb_type"
:
"drill"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
10022
,
"odb_row_num"
:
"23"
,
"drl_from_num"
:
"7"
,
"drl_to_num"
:
"8"
},
"d8-9"
:
{
"row"
:
"24"
,
"type"
:
"laser_drill"
,
"name"
:
"d8-9"
,
"context"
:
"board"
,
"layer_type"
:
"drill"
,
"polarity"
:
"positive"
,
"drl_start"
:
"isl8"
,
"drl_end"
:
"isl9"
,
"gdrl_start"
:
"isl8"
,
"gdrl_end"
:
"isl9"
,
"drl_start_num"
:
"8"
,
"drl_end_num"
:
"9"
,
"tl_name"
:
"drill8-9"
,
"tl_type"
:
"drill"
,
"tl_num"
:
10023
,
"odb_name"
:
"d8-9"
,
"odb_context"
:
"board"
,
"odb_type"
:
"drill"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
10023
,
"odb_row_num"
:
"24"
,
"drl_from_num"
:
"8"
,
"drl_to_num"
:
"9"
},
"d9-10"
:
{
"row"
:
"25"
,
"type"
:
"laser_drill"
,
"name"
:
"d9-10"
,
"context"
:
"board"
,
"layer_type"
:
"drill"
,
"polarity"
:
"positive"
,
"drl_start"
:
"isl9"
,
"drl_end"
:
"bottom"
,
"gdrl_start"
:
"isl9"
,
"gdrl_end"
:
"bottom"
,
"drl_start_num"
:
"9"
,
"drl_end_num"
:
"10"
,
"tl_name"
:
"drill9-10"
,
"tl_type"
:
"drill"
,
"tl_num"
:
10024
,
"odb_name"
:
"d9-10"
,
"odb_context"
:
"board"
,
"odb_type"
:
"drill"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
10024
,
"odb_row_num"
:
"25"
,
"drl_from_num"
:
"9"
,
"drl_to_num"
:
"10"
},
"drill"
:
{
"row"
:
"26"
,
"type"
:
"main_drill"
,
"name"
:
"drill"
,
"context"
:
"board"
,
"layer_type"
:
"drill"
,
"polarity"
:
"positive"
,
"drl_start"
:
"top"
,
"drl_end"
:
"bottom"
,
"gdrl_start"
:
"top"
,
"gdrl_end"
:
"bottom"
,
"drl_start_num"
:
1
,
"drl_end_num"
:
10
,
"tl_name"
:
"drill"
,
"tl_type"
:
"drill"
,
"tl_num"
:
10025
,
"odb_name"
:
"drill"
,
"odb_context"
:
"board"
,
"odb_type"
:
"drill"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
10025
,
"odb_row_num"
:
"26"
,
"drl_from_num"
:
1
,
"drl_to_num"
:
10
},
"rout"
:
{
"row"
:
"27"
,
"type"
:
"other"
,
"name"
:
"__rout__"
,
"context"
:
"board"
,
"layer_type"
:
"rout"
,
"polarity"
:
"positive"
,
"drl_start"
:
"top"
,
"drl_end"
:
"bottom"
,
"gdrl_start"
:
"top"
,
"gdrl_end"
:
"bottom"
,
"odb_name"
:
"rout"
,
"odb_context"
:
"board"
,
"odb_type"
:
"rout"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"odb_row_num"
:
"27"
},
"nclegend-1-2"
:
{
"row"
:
"28"
,
"type"
:
"other"
,
"name"
:
"__nclegend-1-2__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110027
,
"odb_name"
:
"nclegend-1-2"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110027
,
"odb_row_num"
:
"28"
},
"nclegend-2-3"
:
{
"row"
:
"29"
,
"type"
:
"other"
,
"name"
:
"__nclegend-2-3__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110028
,
"odb_name"
:
"nclegend-2-3"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110028
,
"odb_row_num"
:
"29"
},
"nclegend-3-4"
:
{
"row"
:
"30"
,
"type"
:
"other"
,
"name"
:
"__nclegend-3-4__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110029
,
"odb_name"
:
"nclegend-3-4"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110029
,
"odb_row_num"
:
"30"
},
"nclegend-4-5"
:
{
"row"
:
"31"
,
"type"
:
"other"
,
"name"
:
"__nclegend-4-5__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110030
,
"odb_name"
:
"nclegend-4-5"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110030
,
"odb_row_num"
:
"31"
},
"nclegend-5-6"
:
{
"row"
:
"32"
,
"type"
:
"other"
,
"name"
:
"__nclegend-5-6__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110031
,
"odb_name"
:
"nclegend-5-6"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110031
,
"odb_row_num"
:
"32"
},
"nclegend-6-7"
:
{
"row"
:
"33"
,
"type"
:
"other"
,
"name"
:
"__nclegend-6-7__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110032
,
"odb_name"
:
"nclegend-6-7"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110032
,
"odb_row_num"
:
"33"
},
"nclegend-7-8"
:
{
"row"
:
"34"
,
"type"
:
"other"
,
"name"
:
"__nclegend-7-8__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110033
,
"odb_name"
:
"nclegend-7-8"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110033
,
"odb_row_num"
:
"34"
},
"nclegend-8-9"
:
{
"row"
:
"35"
,
"type"
:
"other"
,
"name"
:
"__nclegend-8-9__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110034
,
"odb_name"
:
"nclegend-8-9"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110034
,
"odb_row_num"
:
"35"
},
"nclegend-9-10"
:
{
"row"
:
"36"
,
"type"
:
"other"
,
"name"
:
"__nclegend-9-10__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110035
,
"odb_name"
:
"nclegend-9-10"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110035
,
"odb_row_num"
:
"36"
},
"nclegend-1-10"
:
{
"row"
:
"37"
,
"type"
:
"other"
,
"name"
:
"__nclegend-1-10__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110036
,
"odb_name"
:
"nclegend-1-10"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110036
,
"odb_row_num"
:
"37"
},
"outline"
:
{
"row"
:
"38"
,
"type"
:
"other"
,
"name"
:
"__outline__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110037
,
"odb_name"
:
"outline"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110037
,
"odb_row_num"
:
"38"
},
"top_assem"
:
{
"row"
:
"39"
,
"type"
:
"other"
,
"name"
:
"__top_assem__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110038
,
"odb_name"
:
"top_assem"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110038
,
"odb_row_num"
:
"39"
},
"bot_assem"
:
{
"row"
:
"40"
,
"type"
:
"other"
,
"name"
:
"__bot_assem__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110039
,
"odb_name"
:
"bot_assem"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110039
,
"odb_row_num"
:
"40"
},
"top_testpoint"
:
{
"row"
:
"41"
,
"type"
:
"other"
,
"name"
:
"__top_testpoint__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110040
,
"odb_name"
:
"top_testpoint"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110040
,
"odb_row_num"
:
"41"
},
"bot_testpoint"
:
{
"row"
:
"42"
,
"type"
:
"other"
,
"name"
:
"__bot_testpoint__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110041
,
"odb_name"
:
"bot_testpoint"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110041
,
"odb_row_num"
:
"42"
},
"top_osp"
:
{
"row"
:
"43"
,
"type"
:
"other"
,
"name"
:
"__top_osp__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110042
,
"odb_name"
:
"top_osp"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110042
,
"odb_row_num"
:
"43"
},
"bot_osp"
:
{
"row"
:
"44"
,
"type"
:
"other"
,
"name"
:
"__bot_osp__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110043
,
"odb_name"
:
"bot_osp"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110043
,
"odb_row_num"
:
"44"
},
"top_enig"
:
{
"row"
:
"45"
,
"type"
:
"other"
,
"name"
:
"__top_enig__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110044
,
"odb_name"
:
"top_enig"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110044
,
"odb_row_num"
:
"45"
},
"bot_enig"
:
{
"row"
:
"46"
,
"type"
:
"other"
,
"name"
:
"__bot_enig__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110045
,
"odb_name"
:
"bot_enig"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110045
,
"odb_row_num"
:
"46"
},
"fab_page2"
:
{
"row"
:
"47"
,
"type"
:
"other"
,
"name"
:
"__fab_page2__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110046
,
"odb_name"
:
"fab_page2"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110046
,
"odb_row_num"
:
"47"
},
"tmp_top_shorts"
:
{
"row"
:
"48"
,
"type"
:
"other"
,
"name"
:
"__tmp_top_shorts__"
,
"context"
:
"misc"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110047
,
"odb_name"
:
"tmp_top_shorts"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110047
,
"odb_row_num"
:
"48"
},
"tmp_bot_shorts"
:
{
"row"
:
"49"
,
"type"
:
"other"
,
"name"
:
"__tmp_bot_shorts__"
,
"context"
:
"misc"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110048
,
"odb_name"
:
"tmp_bot_shorts"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110048
,
"odb_row_num"
:
"49"
},
"bot_assy_mate"
:
{
"row"
:
"50"
,
"type"
:
"other"
,
"name"
:
"__bot_assy_mate__"
,
"context"
:
"misc"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110049
,
"odb_name"
:
"bot_assy_mate"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110049
,
"odb_row_num"
:
"50"
},
"outline+1"
:
{
"row"
:
"51"
,
"type"
:
"other"
,
"name"
:
"__outline+1__"
,
"context"
:
"misc"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110050
,
"odb_name"
:
"outline+1"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110050
,
"odb_row_num"
:
"51"
},
"top_assy_mate"
:
{
"row"
:
"52"
,
"type"
:
"other"
,
"name"
:
"__top_assy_mate__"
,
"context"
:
"misc"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110051
,
"odb_name"
:
"top_assy_mate"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110051
,
"odb_row_num"
:
"52"
}
}
for
(
var
key
in
matrix
)
{
var
value
=
matrix
[
key
]
res
.
matrixVal
.
push
(
value
)
if
(
value
.
context
==
"board"
){
res
.
mBoardLayer
.
push
(
key
)
switch
(
value
.
layer_type
)
{
case
"signal"
:
res
.
mSignal
[
key
]
=
value
res
.
mSignals
.
push
(
value
)
break
;
case
"drill"
:
res
.
mDrill
[
key
]
=
value
res
.
mDrills
.
push
(
value
)
break
;
case
"solder_mask"
:
res
.
mSolderMask
[
key
]
=
value
res
.
mSolderMasks
.
push
(
value
)
break
;
}
}
}
res
.
matrixVal
=
res
.
matrixVal
.
sort
(
function
(
a
,
b
){
return
Number
(
a
.
row
)
-
Number
(
b
.
row
)})
res
.
mSignals
=
res
.
mSignals
.
sort
(
function
(
a
,
b
){
return
Number
(
a
.
row
)
-
Number
(
b
.
row
)})
res
.
mDrills
=
res
.
mDrills
.
sort
(
function
(
a
,
b
){
return
Number
(
a
.
row
)
-
Number
(
b
.
row
)})
// 找出外层 以及外层对应的防焊层 [{signalL:"top", solderL:"smt"}]
res
.
mOuters
=
res
.
mSignals
.
reduce
(
function
(
a
,
b
){
if
(
b
.
tl_type
==
"outer"
){
var
solderLayers
=
res
.
mSolderMasks
.
filter
(
function
(
v
){
return
v
.
side
==
b
.
side
})
a
.
push
({
signalL
:
b
.
name
,
solderL
:
solderLayers
.
length
>
0
?
solderLayers
[
0
][
"name"
]
:
null
})
}
return
a
},[])
return
res
}
}
function
selCopyLayer
(
props
){
// 拷贝选择的到辅助层
var
layer
=
props
.
layer
var
job
=
props
.
job
if
(
GEN
.
isLayerExists
({
job
:
job
,
layer
:
layer
})){
GEN
.
deleteLayer
({
job
:
job
,
layer
:
layer
})
}
GEN
.
selCopyOther
({
dest
:
'layer_name'
,
target_layer
:
layer
})
}
}
function
save_job_info
(
props
){
// todo 保存料号信息
}
function
analysis
(
props
){
var
job
=
props
.
job
||
Job
;
var
jobId
=
props
.
jobId
||
JobId
;
var
pcs_step
=
props
.
pcs_step
||
false
;
var
array_step
=
props
.
array_step
||
false
;
var
matrix
=
props
.
matrix
;
function
T_m_p
(
props
){
this
.
job
=
props
.
job
;
this
.
jobInfo
=
{};
this
.
jobId
=
props
.
jobId
;
if
(
props
.
pcs_step
){
this
.
pcs_step
=
props
.
pcs_step
;
}
if
(
props
.
matrix
){
this
.
matrix
=
props
.
matrix
;
}
if
(
props
.
array_step
){
this
.
array_step
=
props
.
array_step
;
}
this
.
matrixInfo
=
getMatrixInfo
({
job
:
this
.
job
})
this
.
init
();
}
T_m_p
.
prototype
.
init
=
function
(){
var
init_checking
=
[
"job"
,
"jobId"
,
"pcs_step"
,
"matrix"
];
var
t
=
this
;
init_checking
.
forEach
(
function
(
v
){
if
(
!
t
[
v
]){
t
.
e
(
v
+
" is undefined"
)}
})
}
T_m_p
.
prototype
.
e
=
function
(
e
){
// 处理error
console
.
log
(
e
)
throw
e
}
T_m_p
.
prototype
.
analysis_layer_count
=
function
(
props
){
// 分析board属性的层数量 []string
var
matrix
=
this
.
matrixInfo
.
matrixVal
;
var
res
=
matrix
.
filter
(
function
(
v
){
return
v
.
context
==
"board"
&&
props
.
indexOf
(
v
.
layer_type
)
>=
0
})
return
res
.
length
}
T_m_p
.
prototype
.
analysis_vc_card_size
=
function
(
props
){
// card短边尺寸 string
return
GEN
.
getProfileLimits
({
job
:
this
.
job
,
step
:
this
.
pcs_step
})[
props
].
toFixed
(
3
)
}
T_m_p
.
prototype
.
analysis_vc_array_size
=
function
(
props
){
// array长边尺寸 string
if
(
!
this
.
array_step
){
return
"error"
}
return
GEN
.
getProfileLimits
({
job
:
this
.
job
,
step
:
this
.
array_step
})[
props
].
toFixed
(
3
)
}
T_m_p
.
prototype
.
analysis_vc_pcs_count_on_panel
=
function
(
props
){
//
return
"_todo"
}
T_m_p
.
prototype
.
analysis_stack_vias_number
=
function
(
props
){
// via孔连续叠加的层数
var
t
=
this
;
var
res
;
// 找出 镭射孔
var
laser_layers
=
[]
for
(
var
key
in
t
.
matrix
)
{
var
val
=
t
.
matrix
[
key
]
if
(
val
.
type
==
"laser_drill"
){
laser_layers
.
push
(
val
)
}
}
if
(
laser_layers
.
length
==
0
){
return
"error"
}
GEN
.
openStep
({
job
:
t
.
job
,
name
:
t
.
pcs_step
})
laser_layers
=
laser_layers
.
sort
(
function
(
a
,
b
){
return
Number
(
a
.
row
)
-
Number
(
b
.
row
)})
var
laser_info
=
{}
for
(
var
i
=
0
;
i
<
laser_layers
.
length
-
1
;
i
++
){
var
start_layer
=
laser_layers
[
i
].
name
var
cover_layer
=
laser_layers
[
i
+
1
].
name
GEN
.
workLayer
({
name
:
start_layer
,
display_number
:
2
,
clear_before
:
'yes'
})
GEN
.
selClearFeature
()
GEN
.
selRefFeat
({
layers
:
cover_layer
,
use
:
'filter'
,
mode
:
'cover'
})
var
count
=
GEN
.
getSelectCount
()
if
(
count
>
0
){
if
(
!
laser_info
[
start_layer
]){
laser_info
[
start_layer
]
=
{}
}
laser_info
[
start_layer
].
drill_connect_layer
=
cover_layer
laser_info
[
start_layer
].
drill_connect_point
=
count
}
}
// via孔连续叠加的层数
var
via_vias_info
=
[]
function
analysis_via_number
(
layers
){
if
(
layers
.
length
<
2
){
return
}
var
startlayer
=
layers
[
0
].
name
+
"_cover"
GEN
.
selClearFeature
()
GEN
.
workLayer
({
name
:
layers
[
0
].
name
,
display_number
:
2
,
clear_before
:
'yes'
})
GEN
.
selAllFeat
()
selCopyLayer
({
job
:
t
.
job
,
layer
:
startlayer
})
var
end_index
=
start_cover_next
(
startlayer
,
layers
,
0
)
via_vias_info
.
push
(
end_index
+
1
)
analysis_via_number
(
layers
.
slice
(
end_index
))
}
function
start_cover_next
(
start
,
layers
,
end_index
){
if
(
layers
.
length
<
2
){
GEN
.
deleteLayer
({
job
:
t
.
job
,
layer
:
start
})
return
end_index
}
layers
=
layers
.
slice
(
1
)
GEN
.
workLayer
({
name
:
start
,
display_number
:
2
,
clear_before
:
'yes'
})
GEN
.
selClearFeature
()
GEN
.
selRefFeat
({
layers
:
layers
[
0
].
name
,
use
:
'filter'
,
mode
:
'cover'
})
var
count
=
GEN
.
getSelectCount
()
if
(
count
<
1
)
{
GEN
.
deleteLayer
({
job
:
t
.
job
,
layer
:
start
})
return
++
end_index
}
var
nextstartlayer
=
layers
[
0
].
name
+
"_cover"
selCopyLayer
({
job
:
t
.
job
,
layer
:
nextstartlayer
})
GEN
.
deleteLayer
({
job
:
t
.
job
,
layer
:
start
})
return
start_cover_next
(
nextstartlayer
,
layers
,
++
end_index
)
}
analysis_via_number
(
laser_layers
.
slice
())
if
(
via_vias_info
.
length
==
1
){
res
=
via_vias_info
[
0
]
}
else
{
res
=
via_vias_info
.
reduce
(
function
(
a
,
b
){
return
a
-
b
>
0
?
a
:
b
})
}
t
.
jobInfo
.
stack_vias_more
=
"no"
if
(
GEN
.
getLayerCount
({
job
:
t
.
job
})
>
14
&&
res
>=
12
){
t
.
jobInfo
.
stack_vias_more
=
"yes"
}
t
.
jobInfo
.
laser_info
=
laser_info
;
return
res
}
T_m_p
.
prototype
.
analysis_layer_exist
=
function
(
props
){
// 存在某某层? string
return
this
.
matrixInfo
.
matrix
.
hasOwnProperty
(
props
)
?
"yes"
:
"no"
}
T_m_p
.
prototype
.
analysis_laser_via_on_buried_hole
=
function
(){
// todo
return
"_todo"
}
T_m_p
.
prototype
.
analysis_milling_bit_size
=
function
(){
// todo
return
"_todo"
}
T_m_p
.
prototype
.
analysis_milling_length
=
function
(){
// todo
return
"_todo"
}
T_m_p
.
prototype
.
analysis_board_has_attr
=
function
(
props
){
// board层中检查存在01005属性物件时
GEN
.
openStep
({
job
:
this
.
job
,
name
:
this
.
pcs_step
})
GEN
.
clearLayers
()
GEN
.
affectedLayer
({
affected
:
'yes'
,
layer
:
this
.
matrixInfo
.
mBoardLayer
,
clear_before
:
'yes'
});
GEN
.
selClearFeature
()
GEN
.
selectByFilter
({
attribute
:
props
})
var
res
=
GEN
.
getSelectCount
()
>
0
?
"yes"
:
"no"
GEN
.
affectedLayer
({
affected
:
'no'
,
mode
:
'all'
});
GEN
.
selClearFeature
()
GEN
.
closeStep
()
return
res
}
T_m_p
.
prototype
.
analysis_vc_src_EDGE_PLATING
=
function
(
props
){
// ? 检查线路外形是否存在物件,存在则存yes
var
res
=
"no"
var
rout
=
this
.
matrixInfo
.
matrixVal
.
filter
(
function
(
v
){
return
v
.
layer_type
==
"rout"
})
// 找rout层
if
(
rout
.
length
==
0
){
return
"error:cant find rout layer"
}
GEN
.
openStep
({
job
:
this
.
job
,
name
:
this
.
pcs_step
})
GEN
.
affectedLayer
({
affected
:
'no'
,
mode
:
'all'
})
try
{
this
.
matrixInfo
.
mSignals
.
forEach
(
function
(
v
){
// 用线路层逐层与rout层touch 找得到说明存在
GEN
.
workLayer
({
name
:
v
.
name
,
display_number
:
2
,
clear_before
:
'yes'
})
GEN
.
selClearFeature
()
GEN
.
selRefFeat
({
layers
:
rout
[
0
].
name
,
mode
:
"touch"
,
use
:
"filter"
})
if
(
GEN
.
getSelectCount
()
>
0
){
throw
"yes"
}
GEN
.
clearLayers
()
})
}
catch
(
msg
)
{
res
=
msg
GEN
.
affectedLayer
({
affected
:
'no'
,
mode
:
'all'
})
GEN
.
selClearFeature
()
}
GEN
.
closeStep
()
return
res
}
T_m_p
.
prototype
.
analysis_edge_plating_length
=
function
(){
// todo
return
"_todo"
}
T_m_p
.
prototype
.
analysis_glod_finger
=
function
(){
// todo
return
"_todo"
}
T_m_p
.
prototype
.
analysis_glod_finger_area
=
function
(){
// todo
return
"_todo"
}
T_m_p
.
prototype
.
analysis_solder_mask_side
=
function
(){
// 检查防焊层所在面次
var
solder_paste_layers
=
this
.
matrixInfo
.
matrixVal
.
filter
(
function
(
v
){
return
v
.
layer_type
==
"solder_paste"
})
var
solder_paste_info
=
solder_paste_layers
.
map
(
function
(
v
){
return
v
.
side
}).
reduce
(
function
(
a
,
b
){
if
(
a
.
indexOf
(
b
)
<
0
){
a
.
push
(
b
)
}
return
a
},[])
var
res
=
"no"
if
(
solder_paste_info
.
length
==
0
){
res
=
"no"
}
else
if
(
solder_paste_info
.
length
==
1
)
{
res
=
/top/ig
.
test
(
solder_paste_info
[
0
])
?
"top"
:
"bot"
}
else
{
res
=
"both"
}
return
res
}
T_m_p
.
prototype
.
analysis_silk_screen_side
=
function
(){
// 检查文字层所在面次
var
solder_mask_layers
=
this
.
matrixInfo
.
matrixVal
.
filter
(
function
(
v
){
return
v
.
layer_type
==
"solder_mask"
})
var
solder_mask_info
=
solder_mask_layers
.
map
(
function
(
v
){
return
v
.
side
}).
reduce
(
function
(
a
,
b
){
if
(
a
.
indexOf
(
b
)
<
0
){
a
.
push
(
b
)
}
return
a
},[])
var
res
=
"no"
if
(
solder_mask_info
.
length
==
0
){
res
=
"no"
}
else
if
(
solder_mask_info
.
length
==
1
)
{
res
=
/top/ig
.
test
(
solder_mask_info
[
0
])
?
"top"
:
"bot"
}
else
{
res
=
"both"
}
return
res
}
T_m_p
.
prototype
.
analysis_min_drl_size
=
function
(){
// todo
return
"_todo"
}
T_m_p
.
prototype
.
analysis_max_pth_drl_size
=
function
(){
// todo
return
"_todo"
}
T_m_p
.
prototype
.
analysis_max_npth_drl_size
=
function
(){
// todo
return
"_todo"
}
T_m_p
.
prototype
.
analysis_min_slot_drl_size
=
function
(){
// todo
return
"_todo"
}
T_m_p
.
prototype
.
analysis_max_slot_drl_size
=
function
(){
// todo
return
"_todo"
}
T_m_p
.
prototype
.
analysis_max_slot_drl_length
=
function
(){
// todo
return
"_todo"
}
T_m_p
.
prototype
.
analysis_max_spec_slot_drl_size
=
function
(){
// todo
return
"_todo"
}
T_m_p
.
prototype
.
analysis_max_spec_slot_drl_length
=
function
(){
// todo
return
"_todo"
}
return
new
T_m_p
({
job
:
job
,
jobId
:
jobId
,
pcs_step
:
pcs_step
,
array_step
:
array_step
,
matrix
:
matrix
})
}
function
tmp
(){
return
{
"sst"
:
{
"row"
:
"1"
,
"type"
:
"solder_paste"
,
"name"
:
"sp_fr"
,
"context"
:
"board"
,
"layer_type"
:
"solder_paste"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
-
1000
,
"tl_name"
:
"sp_fr"
,
"tl_type"
:
"solder_paste"
,
"odb_name"
:
"sst"
,
"odb_context"
:
"board"
,
"odb_type"
:
"solder_paste"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"top"
,
"row_num"
:
-
1000
,
"odb_row_num"
:
"1"
},
"spt"
:
{
"row"
:
"2"
,
"type"
:
"solder_paste"
,
"name"
:
"sp_fr(2)"
,
"context"
:
"board"
,
"layer_type"
:
"solder_paste"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
-
999
,
"tl_name"
:
"sp_fr(2)"
,
"tl_type"
:
"solder_paste"
,
"odb_name"
:
"spt"
,
"odb_context"
:
"board"
,
"odb_type"
:
"solder_paste"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"top"
,
"row_num"
:
-
999
,
"odb_row_num"
:
"2"
},
"smt"
:
{
"row"
:
"3"
,
"type"
:
"solder_mask"
,
"name"
:
"sm_fr"
,
"context"
:
"board"
,
"layer_type"
:
"solder_mask"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
-
998
,
"tl_name"
:
"sm_fr"
,
"tl_type"
:
"solder_mask"
,
"odb_name"
:
"smt"
,
"odb_context"
:
"board"
,
"odb_type"
:
"solder_mask"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"top"
,
"row_num"
:
-
998
,
"odb_row_num"
:
"3"
},
"top"
:
{
"row"
:
"4"
,
"type"
:
"outer"
,
"name"
:
"top"
,
"context"
:
"board"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
1
,
"tl_name"
:
"top"
,
"tl_type"
:
"outer"
,
"odb_name"
:
"top"
,
"odb_context"
:
"board"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"top"
,
"row_num"
:
1
,
"odb_row_num"
:
"4"
},
"isl2"
:
{
"row"
:
"5"
,
"type"
:
"inner"
,
"name"
:
"l2"
,
"context"
:
"board"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
2
,
"tl_name"
:
"l2"
,
"tl_type"
:
"inner"
,
"odb_name"
:
"isl2"
,
"odb_context"
:
"board"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"inner"
,
"row_num"
:
2
,
"odb_row_num"
:
"5"
},
"isl3"
:
{
"row"
:
"6"
,
"type"
:
"inner"
,
"name"
:
"l3"
,
"context"
:
"board"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
3
,
"tl_name"
:
"l3"
,
"tl_type"
:
"inner"
,
"odb_name"
:
"isl3"
,
"odb_context"
:
"board"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"inner"
,
"row_num"
:
3
,
"odb_row_num"
:
"6"
},
"isl4"
:
{
"row"
:
"7"
,
"type"
:
"inner"
,
"name"
:
"l4"
,
"context"
:
"board"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
4
,
"tl_name"
:
"l4"
,
"tl_type"
:
"inner"
,
"odb_name"
:
"isl4"
,
"odb_context"
:
"board"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"inner"
,
"row_num"
:
4
,
"odb_row_num"
:
"7"
},
"isl5"
:
{
"row"
:
"8"
,
"type"
:
"inner"
,
"name"
:
"l5"
,
"context"
:
"board"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
5
,
"tl_name"
:
"l5"
,
"tl_type"
:
"inner"
,
"odb_name"
:
"isl5"
,
"odb_context"
:
"board"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"inner"
,
"row_num"
:
5
,
"odb_row_num"
:
"8"
},
"isl6"
:
{
"row"
:
"9"
,
"type"
:
"inner"
,
"name"
:
"l6"
,
"context"
:
"board"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
6
,
"tl_name"
:
"l6"
,
"tl_type"
:
"inner"
,
"odb_name"
:
"isl6"
,
"odb_context"
:
"board"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"inner"
,
"row_num"
:
6
,
"odb_row_num"
:
"9"
},
"isl7"
:
{
"row"
:
"10"
,
"type"
:
"inner"
,
"name"
:
"l7"
,
"context"
:
"board"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
7
,
"tl_name"
:
"l7"
,
"tl_type"
:
"inner"
,
"odb_name"
:
"isl7"
,
"odb_context"
:
"board"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"inner"
,
"row_num"
:
7
,
"odb_row_num"
:
"10"
},
"isl8"
:
{
"row"
:
"11"
,
"type"
:
"inner"
,
"name"
:
"l8"
,
"context"
:
"board"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
8
,
"tl_name"
:
"l8"
,
"tl_type"
:
"inner"
,
"odb_name"
:
"isl8"
,
"odb_context"
:
"board"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"inner"
,
"row_num"
:
8
,
"odb_row_num"
:
"11"
},
"isl9"
:
{
"row"
:
"12"
,
"type"
:
"inner"
,
"name"
:
"l9"
,
"context"
:
"board"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
9
,
"tl_name"
:
"l9"
,
"tl_type"
:
"inner"
,
"odb_name"
:
"isl9"
,
"odb_context"
:
"board"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"inner"
,
"row_num"
:
9
,
"odb_row_num"
:
"12"
},
"bottom"
:
{
"row"
:
"13"
,
"type"
:
"outer"
,
"name"
:
"bottom"
,
"context"
:
"board"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
10
,
"tl_name"
:
"bottom"
,
"tl_type"
:
"outer"
,
"odb_name"
:
"bottom"
,
"odb_context"
:
"board"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"bottom"
,
"row_num"
:
10
,
"odb_row_num"
:
"13"
},
"smb"
:
{
"row"
:
"14"
,
"type"
:
"solder_mask"
,
"name"
:
"sm_ba"
,
"context"
:
"board"
,
"layer_type"
:
"solder_mask"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
1013
,
"tl_name"
:
"sm_ba"
,
"tl_type"
:
"solder_mask"
,
"odb_name"
:
"smb"
,
"odb_context"
:
"board"
,
"odb_type"
:
"solder_mask"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"bottom"
,
"row_num"
:
1013
,
"odb_row_num"
:
"14"
},
"spb"
:
{
"row"
:
"15"
,
"type"
:
"solder_paste"
,
"name"
:
"sp_ba"
,
"context"
:
"board"
,
"layer_type"
:
"solder_paste"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
1014
,
"tl_name"
:
"sp_ba"
,
"tl_type"
:
"solder_paste"
,
"odb_name"
:
"spb"
,
"odb_context"
:
"board"
,
"odb_type"
:
"solder_paste"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"bottom"
,
"row_num"
:
1014
,
"odb_row_num"
:
"15"
},
"ssb"
:
{
"row"
:
"16"
,
"type"
:
"solder_paste"
,
"name"
:
"sp_ba(2)"
,
"context"
:
"board"
,
"layer_type"
:
"solder_paste"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
1015
,
"tl_name"
:
"sp_ba(2)"
,
"tl_type"
:
"solder_paste"
,
"odb_name"
:
"ssb"
,
"odb_context"
:
"board"
,
"odb_type"
:
"solder_paste"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"bottom"
,
"row_num"
:
1015
,
"odb_row_num"
:
"16"
},
"d1-2"
:
{
"row"
:
"17"
,
"type"
:
"laser_drill"
,
"name"
:
"d1-2"
,
"context"
:
"board"
,
"layer_type"
:
"drill"
,
"polarity"
:
"positive"
,
"drl_start"
:
"top"
,
"drl_end"
:
"isl2"
,
"gdrl_start"
:
"top"
,
"gdrl_end"
:
"isl2"
,
"drl_start_num"
:
"1"
,
"drl_end_num"
:
"2"
,
"tl_name"
:
"drill1-2"
,
"tl_type"
:
"drill"
,
"tl_num"
:
10016
,
"odb_name"
:
"d1-2"
,
"odb_context"
:
"board"
,
"odb_type"
:
"drill"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
10016
,
"odb_row_num"
:
"17"
,
"drl_from_num"
:
"1"
,
"drl_to_num"
:
"2"
},
"d2-3"
:
{
"row"
:
"18"
,
"type"
:
"laser_drill"
,
"name"
:
"d2-3"
,
"context"
:
"board"
,
"layer_type"
:
"drill"
,
"polarity"
:
"positive"
,
"drl_start"
:
"isl2"
,
"drl_end"
:
"isl3"
,
"gdrl_start"
:
"isl2"
,
"gdrl_end"
:
"isl3"
,
"drl_start_num"
:
"2"
,
"drl_end_num"
:
"3"
,
"tl_name"
:
"drill2-3"
,
"tl_type"
:
"drill"
,
"tl_num"
:
10017
,
"odb_name"
:
"d2-3"
,
"odb_context"
:
"board"
,
"odb_type"
:
"drill"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
10017
,
"odb_row_num"
:
"18"
,
"drl_from_num"
:
"2"
,
"drl_to_num"
:
"3"
},
"d3-4"
:
{
"row"
:
"19"
,
"type"
:
"laser_drill"
,
"name"
:
"d3-4"
,
"context"
:
"board"
,
"layer_type"
:
"drill"
,
"polarity"
:
"positive"
,
"drl_start"
:
"isl3"
,
"drl_end"
:
"isl4"
,
"gdrl_start"
:
"isl3"
,
"gdrl_end"
:
"isl4"
,
"drl_start_num"
:
"3"
,
"drl_end_num"
:
"4"
,
"tl_name"
:
"drill3-4"
,
"tl_type"
:
"drill"
,
"tl_num"
:
10018
,
"odb_name"
:
"d3-4"
,
"odb_context"
:
"board"
,
"odb_type"
:
"drill"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
10018
,
"odb_row_num"
:
"19"
,
"drl_from_num"
:
"3"
,
"drl_to_num"
:
"4"
},
"d4-5"
:
{
"row"
:
"20"
,
"type"
:
"laser_drill"
,
"name"
:
"d4-5"
,
"context"
:
"board"
,
"layer_type"
:
"drill"
,
"polarity"
:
"positive"
,
"drl_start"
:
"isl4"
,
"drl_end"
:
"isl5"
,
"gdrl_start"
:
"isl4"
,
"gdrl_end"
:
"isl5"
,
"drl_start_num"
:
"4"
,
"drl_end_num"
:
"5"
,
"tl_name"
:
"drill4-5"
,
"tl_type"
:
"drill"
,
"tl_num"
:
10019
,
"odb_name"
:
"d4-5"
,
"odb_context"
:
"board"
,
"odb_type"
:
"drill"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
10019
,
"odb_row_num"
:
"20"
,
"drl_from_num"
:
"4"
,
"drl_to_num"
:
"5"
},
"d5-6"
:
{
"row"
:
"21"
,
"type"
:
"laser_drill"
,
"name"
:
"d5-6"
,
"context"
:
"board"
,
"layer_type"
:
"drill"
,
"polarity"
:
"positive"
,
"drl_start"
:
"isl5"
,
"drl_end"
:
"isl6"
,
"gdrl_start"
:
"isl5"
,
"gdrl_end"
:
"isl6"
,
"drl_start_num"
:
"5"
,
"drl_end_num"
:
"6"
,
"tl_name"
:
"drill5-6"
,
"tl_type"
:
"drill"
,
"tl_num"
:
10020
,
"odb_name"
:
"d5-6"
,
"odb_context"
:
"board"
,
"odb_type"
:
"drill"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
10020
,
"odb_row_num"
:
"21"
,
"drl_from_num"
:
"5"
,
"drl_to_num"
:
"6"
},
"d6-7"
:
{
"row"
:
"22"
,
"type"
:
"laser_drill"
,
"name"
:
"d6-7"
,
"context"
:
"board"
,
"layer_type"
:
"drill"
,
"polarity"
:
"positive"
,
"drl_start"
:
"isl6"
,
"drl_end"
:
"isl7"
,
"gdrl_start"
:
"isl6"
,
"gdrl_end"
:
"isl7"
,
"drl_start_num"
:
"6"
,
"drl_end_num"
:
"7"
,
"tl_name"
:
"drill6-7"
,
"tl_type"
:
"drill"
,
"tl_num"
:
10021
,
"odb_name"
:
"d6-7"
,
"odb_context"
:
"board"
,
"odb_type"
:
"drill"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
10021
,
"odb_row_num"
:
"22"
,
"drl_from_num"
:
"6"
,
"drl_to_num"
:
"7"
},
"d7-8"
:
{
"row"
:
"23"
,
"type"
:
"laser_drill"
,
"name"
:
"d7-8"
,
"context"
:
"board"
,
"layer_type"
:
"drill"
,
"polarity"
:
"positive"
,
"drl_start"
:
"isl7"
,
"drl_end"
:
"isl8"
,
"gdrl_start"
:
"isl7"
,
"gdrl_end"
:
"isl8"
,
"drl_start_num"
:
"7"
,
"drl_end_num"
:
"8"
,
"tl_name"
:
"drill7-8"
,
"tl_type"
:
"drill"
,
"tl_num"
:
10022
,
"odb_name"
:
"d7-8"
,
"odb_context"
:
"board"
,
"odb_type"
:
"drill"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
10022
,
"odb_row_num"
:
"23"
,
"drl_from_num"
:
"7"
,
"drl_to_num"
:
"8"
},
"d8-9"
:
{
"row"
:
"24"
,
"type"
:
"laser_drill"
,
"name"
:
"d8-9"
,
"context"
:
"board"
,
"layer_type"
:
"drill"
,
"polarity"
:
"positive"
,
"drl_start"
:
"isl8"
,
"drl_end"
:
"isl9"
,
"gdrl_start"
:
"isl8"
,
"gdrl_end"
:
"isl9"
,
"drl_start_num"
:
"8"
,
"drl_end_num"
:
"9"
,
"tl_name"
:
"drill8-9"
,
"tl_type"
:
"drill"
,
"tl_num"
:
10023
,
"odb_name"
:
"d8-9"
,
"odb_context"
:
"board"
,
"odb_type"
:
"drill"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
10023
,
"odb_row_num"
:
"24"
,
"drl_from_num"
:
"8"
,
"drl_to_num"
:
"9"
},
"d9-10"
:
{
"row"
:
"25"
,
"type"
:
"laser_drill"
,
"name"
:
"d9-10"
,
"context"
:
"board"
,
"layer_type"
:
"drill"
,
"polarity"
:
"positive"
,
"drl_start"
:
"isl9"
,
"drl_end"
:
"bottom"
,
"gdrl_start"
:
"isl9"
,
"gdrl_end"
:
"bottom"
,
"drl_start_num"
:
"9"
,
"drl_end_num"
:
"10"
,
"tl_name"
:
"drill9-10"
,
"tl_type"
:
"drill"
,
"tl_num"
:
10024
,
"odb_name"
:
"d9-10"
,
"odb_context"
:
"board"
,
"odb_type"
:
"drill"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
10024
,
"odb_row_num"
:
"25"
,
"drl_from_num"
:
"9"
,
"drl_to_num"
:
"10"
},
"drill"
:
{
"row"
:
"26"
,
"type"
:
"main_drill"
,
"name"
:
"drill"
,
"context"
:
"board"
,
"layer_type"
:
"drill"
,
"polarity"
:
"positive"
,
"drl_start"
:
"top"
,
"drl_end"
:
"bottom"
,
"gdrl_start"
:
"top"
,
"gdrl_end"
:
"bottom"
,
"drl_start_num"
:
1
,
"drl_end_num"
:
10
,
"tl_name"
:
"drill"
,
"tl_type"
:
"drill"
,
"tl_num"
:
10025
,
"odb_name"
:
"drill"
,
"odb_context"
:
"board"
,
"odb_type"
:
"drill"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
10025
,
"odb_row_num"
:
"26"
,
"drl_from_num"
:
1
,
"drl_to_num"
:
10
},
"rout"
:
{
"row"
:
"27"
,
"type"
:
"other"
,
"name"
:
"__rout__"
,
"context"
:
"board"
,
"layer_type"
:
"rout"
,
"polarity"
:
"positive"
,
"drl_start"
:
"top"
,
"drl_end"
:
"bottom"
,
"gdrl_start"
:
"top"
,
"gdrl_end"
:
"bottom"
,
"odb_name"
:
"rout"
,
"odb_context"
:
"board"
,
"odb_type"
:
"rout"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"odb_row_num"
:
"27"
},
"nclegend-1-2"
:
{
"row"
:
"28"
,
"type"
:
"other"
,
"name"
:
"__nclegend-1-2__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110027
,
"odb_name"
:
"nclegend-1-2"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110027
,
"odb_row_num"
:
"28"
},
"nclegend-2-3"
:
{
"row"
:
"29"
,
"type"
:
"other"
,
"name"
:
"__nclegend-2-3__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110028
,
"odb_name"
:
"nclegend-2-3"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110028
,
"odb_row_num"
:
"29"
},
"nclegend-3-4"
:
{
"row"
:
"30"
,
"type"
:
"other"
,
"name"
:
"__nclegend-3-4__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110029
,
"odb_name"
:
"nclegend-3-4"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110029
,
"odb_row_num"
:
"30"
},
"nclegend-4-5"
:
{
"row"
:
"31"
,
"type"
:
"other"
,
"name"
:
"__nclegend-4-5__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110030
,
"odb_name"
:
"nclegend-4-5"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110030
,
"odb_row_num"
:
"31"
},
"nclegend-5-6"
:
{
"row"
:
"32"
,
"type"
:
"other"
,
"name"
:
"__nclegend-5-6__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110031
,
"odb_name"
:
"nclegend-5-6"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110031
,
"odb_row_num"
:
"32"
},
"nclegend-6-7"
:
{
"row"
:
"33"
,
"type"
:
"other"
,
"name"
:
"__nclegend-6-7__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110032
,
"odb_name"
:
"nclegend-6-7"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110032
,
"odb_row_num"
:
"33"
},
"nclegend-7-8"
:
{
"row"
:
"34"
,
"type"
:
"other"
,
"name"
:
"__nclegend-7-8__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110033
,
"odb_name"
:
"nclegend-7-8"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110033
,
"odb_row_num"
:
"34"
},
"nclegend-8-9"
:
{
"row"
:
"35"
,
"type"
:
"other"
,
"name"
:
"__nclegend-8-9__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110034
,
"odb_name"
:
"nclegend-8-9"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110034
,
"odb_row_num"
:
"35"
},
"nclegend-9-10"
:
{
"row"
:
"36"
,
"type"
:
"other"
,
"name"
:
"__nclegend-9-10__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110035
,
"odb_name"
:
"nclegend-9-10"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110035
,
"odb_row_num"
:
"36"
},
"nclegend-1-10"
:
{
"row"
:
"37"
,
"type"
:
"other"
,
"name"
:
"__nclegend-1-10__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110036
,
"odb_name"
:
"nclegend-1-10"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110036
,
"odb_row_num"
:
"37"
},
"outline"
:
{
"row"
:
"38"
,
"type"
:
"other"
,
"name"
:
"__outline__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110037
,
"odb_name"
:
"outline"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110037
,
"odb_row_num"
:
"38"
},
"top_assem"
:
{
"row"
:
"39"
,
"type"
:
"other"
,
"name"
:
"__top_assem__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110038
,
"odb_name"
:
"top_assem"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110038
,
"odb_row_num"
:
"39"
},
"bot_assem"
:
{
"row"
:
"40"
,
"type"
:
"other"
,
"name"
:
"__bot_assem__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110039
,
"odb_name"
:
"bot_assem"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110039
,
"odb_row_num"
:
"40"
},
"top_testpoint"
:
{
"row"
:
"41"
,
"type"
:
"other"
,
"name"
:
"__top_testpoint__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110040
,
"odb_name"
:
"top_testpoint"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110040
,
"odb_row_num"
:
"41"
},
"bot_testpoint"
:
{
"row"
:
"42"
,
"type"
:
"other"
,
"name"
:
"__bot_testpoint__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110041
,
"odb_name"
:
"bot_testpoint"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110041
,
"odb_row_num"
:
"42"
},
"top_osp"
:
{
"row"
:
"43"
,
"type"
:
"other"
,
"name"
:
"__top_osp__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110042
,
"odb_name"
:
"top_osp"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110042
,
"odb_row_num"
:
"43"
},
"bot_osp"
:
{
"row"
:
"44"
,
"type"
:
"other"
,
"name"
:
"__bot_osp__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110043
,
"odb_name"
:
"bot_osp"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110043
,
"odb_row_num"
:
"44"
},
"top_enig"
:
{
"row"
:
"45"
,
"type"
:
"other"
,
"name"
:
"__top_enig__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110044
,
"odb_name"
:
"top_enig"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110044
,
"odb_row_num"
:
"45"
},
"bot_enig"
:
{
"row"
:
"46"
,
"type"
:
"other"
,
"name"
:
"__bot_enig__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110045
,
"odb_name"
:
"bot_enig"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110045
,
"odb_row_num"
:
"46"
},
"fab_page2"
:
{
"row"
:
"47"
,
"type"
:
"other"
,
"name"
:
"__fab_page2__"
,
"context"
:
"misc"
,
"layer_type"
:
"document"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110046
,
"odb_name"
:
"fab_page2"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"document"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110046
,
"odb_row_num"
:
"47"
},
"tmp_top_shorts"
:
{
"row"
:
"48"
,
"type"
:
"other"
,
"name"
:
"__tmp_top_shorts__"
,
"context"
:
"misc"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110047
,
"odb_name"
:
"tmp_top_shorts"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110047
,
"odb_row_num"
:
"48"
},
"tmp_bot_shorts"
:
{
"row"
:
"49"
,
"type"
:
"other"
,
"name"
:
"__tmp_bot_shorts__"
,
"context"
:
"misc"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110048
,
"odb_name"
:
"tmp_bot_shorts"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110048
,
"odb_row_num"
:
"49"
},
"bot_assy_mate"
:
{
"row"
:
"50"
,
"type"
:
"other"
,
"name"
:
"__bot_assy_mate__"
,
"context"
:
"misc"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110049
,
"odb_name"
:
"bot_assy_mate"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110049
,
"odb_row_num"
:
"50"
},
"outline+1"
:
{
"row"
:
"51"
,
"type"
:
"other"
,
"name"
:
"__outline+1__"
,
"context"
:
"misc"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110050
,
"odb_name"
:
"outline+1"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110050
,
"odb_row_num"
:
"51"
},
"top_assy_mate"
:
{
"row"
:
"52"
,
"type"
:
"other"
,
"name"
:
"__top_assy_mate__"
,
"context"
:
"misc"
,
"layer_type"
:
"signal"
,
"polarity"
:
"positive"
,
"drl_start"
:
""
,
"drl_end"
:
""
,
"gdrl_start"
:
""
,
"gdrl_end"
:
""
,
"tl_num"
:
110051
,
"odb_name"
:
"top_assy_mate"
,
"odb_context"
:
"misc"
,
"odb_type"
:
"signal"
,
"odb_polarity"
:
"positive"
,
"odb_side"
:
"none"
,
"row_num"
:
110051
,
"odb_row_num"
:
"52"
}
}
}
function
tmp_2
(){
return
{
"cad"
:
{
"d1-2"
:
{
"1"
:
{
"count"
:
"06896"
,
"num"
:
"1"
,
"type"
:
"via"
,
"min_tol"
:
"2.756"
,
"max_tol"
:
"0.984"
,
"finish_size"
:
"2.756"
,
"drill_size"
:
"2.756"
,
"slot_len"
:
"0"
,
"type2"
:
"laser"
,
"shape"
:
"hole"
,
"bit"
:
0
}
},
"d2-3"
:
{
"1"
:
{
"count"
:
"07430"
,
"num"
:
"1"
,
"type"
:
"via"
,
"min_tol"
:
"2.756"
,
"max_tol"
:
"0.984"
,
"finish_size"
:
"2.756"
,
"drill_size"
:
"2.756"
,
"slot_len"
:
"0"
,
"type2"
:
"laser"
,
"shape"
:
"hole"
,
"bit"
:
0
}
},
"d3-4"
:
{
"1"
:
{
"count"
:
"06866"
,
"num"
:
"1"
,
"type"
:
"via"
,
"min_tol"
:
"2.756"
,
"max_tol"
:
"0.984"
,
"finish_size"
:
"2.756"
,
"drill_size"
:
"2.756"
,
"slot_len"
:
"0"
,
"type2"
:
"laser"
,
"shape"
:
"hole"
,
"bit"
:
0
}
},
"d4-5"
:
{
"1"
:
{
"count"
:
"06413"
,
"num"
:
"1"
,
"type"
:
"via"
,
"min_tol"
:
"2.756"
,
"max_tol"
:
"0.984"
,
"finish_size"
:
"2.756"
,
"drill_size"
:
"2.756"
,
"slot_len"
:
"0"
,
"type2"
:
"laser"
,
"shape"
:
"hole"
,
"bit"
:
0
}
},
"d5-6"
:
{
"1"
:
{
"count"
:
"08938"
,
"num"
:
"1"
,
"type"
:
"via"
,
"min_tol"
:
"2.756"
,
"max_tol"
:
"0.984"
,
"finish_size"
:
"2.756"
,
"drill_size"
:
"2.756"
,
"slot_len"
:
"0"
,
"type2"
:
"laser"
,
"shape"
:
"hole"
,
"bit"
:
0
}
},
"d6-7"
:
{
"1"
:
{
"count"
:
"09057"
,
"num"
:
"1"
,
"type"
:
"via"
,
"min_tol"
:
"2.756"
,
"max_tol"
:
"0.984"
,
"finish_size"
:
"2.756"
,
"drill_size"
:
"2.756"
,
"slot_len"
:
"0"
,
"type2"
:
"laser"
,
"shape"
:
"hole"
,
"bit"
:
0
}
},
"d7-8"
:
{
"1"
:
{
"count"
:
"07818"
,
"num"
:
"1"
,
"type"
:
"via"
,
"min_tol"
:
"2.756"
,
"max_tol"
:
"0.984"
,
"finish_size"
:
"2.756"
,
"drill_size"
:
"2.756"
,
"slot_len"
:
"0"
,
"type2"
:
"laser"
,
"shape"
:
"hole"
,
"bit"
:
0
}
},
"d8-9"
:
{
"1"
:
{
"count"
:
"09126"
,
"num"
:
"1"
,
"type"
:
"via"
,
"min_tol"
:
"2.756"
,
"max_tol"
:
"0.984"
,
"finish_size"
:
"2.756"
,
"drill_size"
:
"2.756"
,
"slot_len"
:
"0"
,
"type2"
:
"laser"
,
"shape"
:
"hole"
,
"bit"
:
0
}
},
"d9-10"
:
{
"1"
:
{
"count"
:
"08498"
,
"num"
:
"1"
,
"type"
:
"via"
,
"min_tol"
:
"2.756"
,
"max_tol"
:
"0.984"
,
"finish_size"
:
"2.756"
,
"drill_size"
:
"2.756"
,
"slot_len"
:
"0"
,
"type2"
:
"laser"
,
"shape"
:
"hole"
,
"bit"
:
0
}
},
"drill"
:
{
"1"
:
{
"count"
:
"05"
,
"num"
:
"1"
,
"type"
:
"non_plated"
,
"min_tol"
:
"3.15"
,
"max_tol"
:
"3.15"
,
"finish_size"
:
"15.748"
,
"drill_size"
:
"15.748"
,
"slot_len"
:
"0"
,
"type2"
:
"standard"
,
"shape"
:
"hole"
,
"bit"
:
0
},
"2"
:
{
"count"
:
"01"
,
"num"
:
"2"
,
"type"
:
"non_plated"
,
"min_tol"
:
"0"
,
"max_tol"
:
"1.969"
,
"finish_size"
:
"35.039"
,
"drill_size"
:
"35.039"
,
"slot_len"
:
"0"
,
"type2"
:
"standard"
,
"shape"
:
"hole"
,
"bit"
:
0
},
"3"
:
{
"count"
:
"01"
,
"num"
:
"3"
,
"type"
:
"non_plated"
,
"min_tol"
:
"3.15"
,
"max_tol"
:
"3.15"
,
"finish_size"
:
"35.039"
,
"drill_size"
:
"35.039"
,
"slot_len"
:
"0"
,
"type2"
:
"standard"
,
"shape"
:
"hole"
,
"bit"
:
0
},
"4"
:
{
"count"
:
"01"
,
"num"
:
"4"
,
"type"
:
"non_plated"
,
"min_tol"
:
"1.969"
,
"max_tol"
:
"1.969"
,
"finish_size"
:
"47.244"
,
"drill_size"
:
"47.244"
,
"slot_len"
:
"0"
,
"type2"
:
"standard"
,
"shape"
:
"hole"
,
"bit"
:
0
},
"5"
:
{
"count"
:
"05"
,
"num"
:
"5"
,
"type"
:
"non_plated"
,
"min_tol"
:
"1.969"
,
"max_tol"
:
"1.969"
,
"finish_size"
:
"59.055"
,
"drill_size"
:
"59.055"
,
"slot_len"
:
"0"
,
"type2"
:
"standard"
,
"shape"
:
"hole"
,
"bit"
:
0
},
"6"
:
{
"count"
:
"01"
,
"num"
:
"6"
,
"type"
:
"non_plated"
,
"min_tol"
:
"1.969"
,
"max_tol"
:
"1.969"
,
"finish_size"
:
"70.866"
,
"drill_size"
:
"70.866"
,
"slot_len"
:
"0"
,
"type2"
:
"standard"
,
"shape"
:
"hole"
,
"bit"
:
0
},
"7"
:
{
"count"
:
"01"
,
"num"
:
"7"
,
"type"
:
"non_plated"
,
"min_tol"
:
"1.969"
,
"max_tol"
:
"1.969"
,
"finish_size"
:
"74.803"
,
"drill_size"
:
"74.803"
,
"slot_len"
:
"0"
,
"type2"
:
"standard"
,
"shape"
:
"hole"
,
"bit"
:
0
}
}
},
"stp"
:
{
"d1-2"
:
{},
"d2-3"
:
{},
"d3-4"
:
{},
"d4-5"
:
{},
"d5-6"
:
{},
"d6-7"
:
{},
"d7-8"
:
{},
"d8-9"
:
{},
"d9-10"
:
{},
"drill"
:
{
"1"
:
{
"count"
:
"08"
,
"num"
:
"1"
,
"type"
:
"non_plated"
,
"min_tol"
:
"0"
,
"max_tol"
:
"1.969"
,
"finish_size"
:
"118.11"
,
"drill_size"
:
"118.11"
,
"slot_len"
:
"0"
,
"type2"
:
"standard"
,
"shape"
:
"hole"
,
"bit"
:
0
}
}
}
}
}
\ No newline at end of file
test/mytest.js
View file @
1dbd449a
...
@@ -8,507 +8,242 @@ var GEN = $.gen;
...
@@ -8,507 +8,242 @@ var GEN = $.gen;
var
GUI
=
$
.
gui
;
var
GUI
=
$
.
gui
;
var
Job
=
$
.
job
;
var
Job
=
$
.
job
;
var
JobId
=
$
.
job_id
;
var
JobId
=
$
.
job_id
;
var
Status
=
'ok'
;
var
drill_toll_manage
=
{}
var
resultData
=
[];
try
{
try
{
// var config = require("../config.js") // 读取配置文件 config
var
job
=
"sj"
;
var
cfg
=
IKM
.
select_value
({
table
:
'pub_conf'
,
field
:
'text_data'
,
where
:{
path
:
'cam/input_data'
}})
// 拿到框架中的系统配置
if
(
GEN
.
isJobExists
({
job
:
job
})){
if
(
!
cfg
||
cfg
==
""
){
throw
"cfg can not find"
}
GEN
.
closeJob
({
job
:
job
})
var
par
=
{
// ??? 通过某种方式拿到料号和客户名
GEN
.
deleteJob
({
job
:
job
})
job
:
"i4"
,
customer
:
"Customer_2"
// Customer_1 || Customer_2 || New_data
}
var
config
=
eval
(
cfg
)
var
job
=
par
.
job
||
Job
;
if
(
_
.
isEmpty
(
job
))
throw
"没有传入料号名!"
;
job
=
job
.
toLowerCase
()
// 如果genesis已经存在这个料号
err
=
delSameJob
({
job
:
job
,
delSame
:
config
.
delSameJob
});
if
(
err
){
throw
err
};
var
custCfg
=
config
.
customer
[
par
.
customer
]
if
(
!
custCfg
){
throw
"config error"
}
var
step
=
custCfg
.
step
.
toLowerCase
()
// 获取路径下文件信息
var
path
=
par
.
path
||
custCfg
.
path
var
pathInfo
=
fs
.
listDir
(
path
,
1
)
// 判断存不存在料号文件
var
jobFile
=
pathInfo
.
filter
(
function
(
v
){
return
v
.
baseName
.
toLowerCase
()
==
job
})
if
(
jobFile
.
length
==
0
){
throw
"job file is not exist"
}
var
jobFiles
=
[]
// 记录要分析的文件
if
(
!
jobFile
[
0
].
isDir
)
{
jobFiles
.
push
(
jobFile
[
0
])
}
else
{
jobFiles
=
fs
.
listDir
(
jobFile
[
0
].
path
)
}
}
// 分析料号文件 得到料号导入信息 导入类型
var
config
=
{
var
jobInfo
=
analyJobFiles
({
jobFiles
:
jobFiles
.
filter
(
function
(
v
){
return
v
.
isFile
}),
custCfg
:
custCfg
,
config
:
config
,
job
:
job
})
format
:
{
// IKM.msg(jobInfo.data.map(function(v){return v.format}))
"Gerber274x_1"
:
{
if
(
jobInfo
.
data
.
length
==
0
){
throw
"file error"
}
"nf1"
:
5
,
var
importOk
=
false
;
// 是否成功导入
"nf2"
:
5
,
if
(
/odb/ig
.
test
(
jobInfo
.
type
)){
// odb导入
"units"
:
"inch"
,
if
(
jobInfo
.
data
.
length
==
1
){
// 只分析到一个tgz文件 直接导入
"zeroes"
:
"leading"
,
var
err
=
importJob
({
name
:
job
,
db
:
custCfg
.
db
,
path
:
jobInfo
.
data
[
0
].
file
.
path
},
config
.
delSameJob
)
"decimal"
:
"no"
,
if
(
err
){
throw
err
}
"nf_comp"
:
0
,
}
else
{
// 多个tgz文件 说明需要合并
"break_sr"
:
"yes"
,
var
mergeFiles
=
jobInfo
.
data
.
filter
(
function
(
item
){
"data_type"
:
"ascii"
,
var
err
=
importJob
({
name
:
item
.
file
.
baseName
,
db
:
custCfg
.
db
,
path
:
item
.
file
.
path
},
config
.
delSameJob
)
"separator"
:
"*"
,
if
(
err
){
throw
err
}
"threshold"
:
200
,
return
/yes/ig
.
test
(
item
.
format
.
isMerge
)
"drill_only"
:
"no"
,
})
"multiplier"
:
1
,
var
arr_job
=
mergeFiles
[
0
]
"resolution"
:
3
,
var
arr_step
;
"tool_units"
:
"inch"
,
var
steplist
=
GEN
.
getStepList
({
job
:
arr_job
.
file
.
baseName
})
"coordinates"
:
"absolute"
,
if
(
steplist
.
indexOf
(
arr_job
.
format
.
arrStep
)
<
0
){
"merge_by_rule"
:
"no"
,
arr_step
=
steplist
[
0
]
"signed_coords"
:
"no"
,
}
else
{
arr_step
=
arr_job
.
format
.
arrStep
}
"text_line_width"
:
0.0024
GEN
.
openJob
({
job
:
job
});
},
GEN
.
openJob
({
job
:
arr_job
.
file
.
baseName
});
"Excellon2_1"
:
{
GEN
.
copyStep
({
// 合并
"nf1"
:
2
,
source_job
:
arr_job
.
file
.
baseName
,
"nf2"
:
3
,
source_name
:
arr_step
,
"units"
:
"inch"
,
dest_job
:
job
,
"zeroes"
:
"none"
,
dest_name
:
arr_step
,
"decimal"
:
"no"
,
});
"nf_comp"
:
0
,
GEN
.
closeJob
({
job
:
arr_job
.
file
.
baseName
});
"break_sr"
:
"yes"
,
GEN
.
deleteJob
({
job
:
arr_job
.
file
.
baseName
});
// 合并后 删除array的料号
"data_type"
:
"ascii"
,
}
"separator"
:
"nl"
,
importOk
=
true
"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
}
},
odb
:
[{
vaild
:
function
(
item
){
return
/
\.
tgz$/ig
.
test
(
item
.
name
)
// 以.tgz结尾的
}
}],
gerber
:
[
{
vaild
:
function
(
item
){
return
/
\.
art$/ig
.
test
(
item
.
name
)
// 以.art结尾的
},
type
:
"Gerber274x"
,
format
:
"Gerber274x_1"
},
{
vaild
:
function
(
item
){
return
/
\.
drl$/ig
.
test
(
item
.
name
)
// 以.drl结尾的
},
type
:
"Excellon2"
,
format
:
"Excellon2_1"
}
]
}
}
var
path
=
"C:/Users/Administrator/Desktop/sj(1)"
if
(
/gerber/ig
.
test
(
jobInfo
.
type
)){
// gerber导入
GEN
.
createJob
({
name
:
job
,
db
:
custCfg
.
db
})
var
inputInfo
=
getJobInfo
({
path
:
path
,
job
:
job
,
config
:
config
})
GEN
.
createStep
({
job
:
job
,
name
:
step
})
var
gerberInfo
=
jobInfo
.
data
.
map
(
function
(
item
){
if
(
/gerber/ig
.
test
(
inputInfo
.
type
)){
var
gerberCfg
=
JSON
.
parse
(
JSON
.
stringify
(
item
.
format
));
inputInfo
.
data
.
forEach
(
function
(
file
){
var
file
=
item
.
file
if
(
/
\.
drl$/ig
.
test
(
file
.
name
)){
gerberCfg
.
layer
=
file
.
name
.
toLowerCase
()
var
backUpName
=
file
.
name
+
".backup"
gerberCfg
.
path
=
file
.
path
// 备份
gerberCfg
.
format
=
item
.
type
fs
.
copyFile
(
file
.
path
,
file
.
dir
+
"/"
+
backUpName
)
gerberCfg
.
job
=
job
// 读取
gerberCfg
.
step
=
step
var
data
=
fs
.
readFile
(
file
.
path
)
return
gerberCfg
data
=
data
.
split
(
"
\n
"
)
var
head
=
getHead
(
data
)
var
body
=
data
// 解析head
var
headData
=
head
.
filter
(
function
(
v
){
return
/Holesize.+Tolerance.+PLATED/ig
.
test
(
v
)
})
headData
.
map
(
function
(
v
){
var
res
=
{
holesize
:
{},
tolerance
:
{},
attr
:
""
,
unit
:
""
,
quantity
:
0
}
var
holesize_tmp
=
/
(
Holesize.+
)
Tolerance/
.
exec
(
v
)[
1
];
holesize_tmp
=
holesize_tmp
.
split
(
"="
)
res
.
holesize
.
key
=
holesize_tmp
[
0
].
trim
()
res
.
holesize
.
value
=
holesize_tmp
[
1
].
trim
()
var
Tolerance_tmp
=
/
(
Tolerance.
{23})
/
.
exec
(
v
)[
1
];
Tolerance_tmp
=
Tolerance_tmp
.
split
(
"="
)[
1
].
split
(
"/"
)
res
.
tolerance
.
top
=
Tolerance_tmp
[
0
].
trim
()
res
.
tolerance
.
bot
=
Tolerance_tmp
[
1
].
trim
()
res
.
attr
=
/NON_PLATED/ig
.
test
(
v
)
?
"non_plated"
:
"plated"
res
.
unit
=
/MILS/ig
.
test
(
v
)
?
"inch"
:
"mm"
res
.
quantity
=
parseInt
(
v
.
split
(
"="
).
pop
())
if
(
!
drill_toll_manage
.
hasOwnProperty
(
file
.
name
)){
drill_toll_manage
[
file
.
name
]
=
{}
}
drill_toll_manage
[
file
.
name
][
/
(\d
+
)
/ig
.
exec
(
res
.
holesize
.
key
)[
1
]]
=
res
})
// 给body添加刀
var
count
=
0
;
body
=
body
.
filter
(
function
(
v
){
return
!
(
/T
\d
+/ig
.
test
(
v
))
})
body
.
forEach
(
function
(
v
,
i
){
if
(
/^%$|^M00/ig
.
test
(
v
)){
var
k
=
"T"
+
getK
(
++
count
)
body
[
i
]
=
v
+
"
\n
"
+
k
}
})
// 写入文件
var
resStr
=
head
.
join
(
"
\n
"
)
+
"
\n
"
+
body
.
join
(
"
\n
"
)
fs
.
writeFile
(
file
.
path
,
resStr
)
}
})
})
GEN
.
COM
(
"input_manual_reset"
)
importGerber
({
job
:
job
,
step
:
"pcs"
,
db
:
"genesis"
,
data
:
inputInfo
.
data
})
gerberInfo
.
forEach
(
function
(
v
){
// 导入后 修改 tool manager
GEN
.
COM
(
"input_manual_set"
,
v
)
var
stepList
=
GEN
.
getStepList
({
job
:
job
})
var
matrix
=
GEN
.
getMatrix
({
job
:
job
})
var
drill_layers
=
Object
.
keys
(
matrix
).
filter
(
function
(
v
){
return
matrix
[
v
].
layer_type
==
"drill"
})
stepList
.
forEach
(
function
(
step
){
GEN
.
openStep
({
job
:
job
,
name
:
step
})
drill_layers
.
forEach
(
function
(
layer
){
var
drill_tool_manage_info
=
drill_toll_manage
[
layer
]
var
drill_tool_keys
=
Object
.
keys
(
drill_tool_manage_info
).
sort
(
function
(
a
,
b
){
return
a
-
b
})
GEN
.
COM
(
"tools_tab_reset"
)
drill_tool_keys
.
forEach
(
function
(
key
){
var
val
=
drill_tool_manage_info
[
key
]
GEN
.
COM
(
"tools_tab_add"
,
{
num
:
key
,
type
:
/plated/ig
.
test
(
val
.
attr
)
?
"plate"
:
"nplate"
,
min_tol
:
Number
(
val
.
tolerance
.
top
),
max_tol
:
Number
(
val
.
tolerance
.
bot
),
finish_size
:
Number
(
val
.
holesize
.
value
),
drill_size
:
Number
(
val
.
holesize
.
value
)
})
})
GEN
.
COM
(
"tools_set"
,{
layer
:
layer
,
thickness
:
0
,
user_params
:
1
,
slots
:
"by_length"
})
})
GEN
.
closeStep
()
})
})
GEN
.
COM
(
"input_manual"
)
}
importOk
=
true
return
"Done"
}
}
catch
(
e
)
{
IKM
.
msg
(
e
)
if
(
!
importOk
){
throw
"import error"
}
return
"Error"
// 导入结束
var
matrix
=
GEN
.
getMatrix
({
job
:
job
});
comp
=
Object
.
keys
(
matrix
).
filter
(
function
(
v
){
// 如果有comp层 删除
return
/^comp_
\+
_/ig
.
test
(
v
)
})
if
(
comp
.
length
>
0
){
var
tmp
=
GEN
.
getStepList
({
job
:
job
})
GEN
.
openStep
({
job
:
job
,
name
:
tmp
[
0
]})
GEN
.
COM
(
"delete_comp"
)
GEN
.
closeStep
()
}
// !!!! tmp
// GEN.checkInout({job:job,mode:"out"}) // 结束保存料号 关闭料号
// GEN.saveJob({ job: job });
// GEN.checkInout({job:job,mode:"in"})
// GEN.closeJob({job:job})
return
'Done'
;
}
catch
(
error
)
{
GUI
.
msg
(
error
)
return
'Error'
;
}
}
function
delSameJob
(
props
){
function
getJobInfo
(
props
){
var
path
=
props
.
path
var
config
=
props
.
config
var
job
=
props
.
job
var
job
=
props
.
job
var
delSame
=
props
.
delSame
var
files
=
fs
.
listDir
(
path
)
if
(
GEN
.
isJobExists
({
job
:
job
})){
files
=
files
.
filter
(
function
(
v
){
return
v
.
isFile
})
// 过滤出文件
if
(
/^yes$/ig
.
test
(
delSame
)){
// 先判断是不是odb
if
(
GEN
.
isJobOpen
({
job
:
job
})){
GEN
.
closeJob
({
job
:
job
})
}
var
odbFiles
=
files
.
filter
(
function
(
file
){
// 拿到odb文件
GEN
.
deleteJob
({
job
:
job
})
return
config
.
odb
.
reduce
(
function
(
a
,
b
){
}
else
{
if
(
b
.
vaild
(
file
)){
return
"job "
+
job
+
" exist"
a
=
true
}
return
a
},
false
)
})
if
(
odbFiles
.
length
){
return
{
type
:
"odb"
,
data
:
odbFiles
[
0
]
}
}
}
}
}
var
gerberFiles
=
files
.
filter
(
function
(
file
){
// 拿到odb文件
function
analyJobFiles
(
props
){
return
config
.
gerber
.
reduce
(
function
(
a
,
b
){
var
files
=
props
.
jobFiles
;
if
(
b
.
vaild
(
file
)){
var
config
=
props
.
config
;
file
.
gerber
=
config
.
format
[
b
.
format
];
var
job
=
props
.
job
;
file
.
type
=
b
.
type
;
var
custCfg
=
props
.
custCfg
;
a
=
true
var
rules
=
custCfg
.
rules
;
}
var
paramsFile
=
files
.
filter
(
function
(
file
){
return
/param/ig
.
test
(
file
.
baseName
)})
return
a
var
tmp_hash
=
{}
},
false
)
paramsFile
.
forEach
(
function
(
file
){
})
tmp_hash
[
file
.
baseName
]
=
(
function
(){
if
(
gerberFiles
.
length
){
var
tmparr
=
fs
.
readFile
(
file
.
path
).
split
(
"
\n
"
)
return
{
var
tmp
=
{}
type
:
"gerber"
,
tmparr
.
map
(
function
(
v
){
data
:
gerberFiles
var
arr
=
v
.
split
(
/
\b\s
+
\b
/
)
tmp
[
arr
[
0
].
replace
(
/-/ig
,
"_"
)]
=
arr
[
1
]
})
return
tmp
})()
})
var
fileInfo
=
files
.
reduce
(
function
(
a
,
file
){
try
{
rules
.
forEach
(
function
(
item
){
if
(
item
.
valid
({
file
:
file
,
job
:
job
})){
var
format
=
config
.
formats
[
item
.
format
]
var
format1
;
if
(
item
.
format_params
){
format1
=
item
.
format_params
({
params
:
tmp_hash
})
}
if
(
format1
){
throw
{
file
:
file
,
type
:
item
.
type
,
format
:
format1
}
}
else
{
throw
{
file
:
file
,
type
:
item
.
type
,
format
:
format
}
}
}
})
}
catch
(
info
)
{
a
.
push
(
info
)
}
return
a
},[])
var
odbfiles
=
fileInfo
.
filter
(
function
(
item
){
return
/odb/ig
.
test
(
item
.
type
)})
if
(
odbfiles
.
length
==
0
){
return
{
type
:
"Gerber"
,
data
:
fileInfo
}
}
else
{
return
{
type
:
"ODB"
,
data
:
odbfiles
}
}
}
function
importJob
(
props
,
delSameJob
){
var
name
=
props
.
name
if
(
GEN
.
isJobExists
({
job
:
name
}))
{
if
(
/^yes$/ig
.
test
(
delSameJob
))
{
if
(
GEN
.
isJobOpen
({
job
:
name
})){
GEN
.
closeJob
({
job
:
name
});
}
GEN
.
deleteJob
({
job
:
name
});
}
else
{
return
"job "
+
name
+
" exist"
;
}
}
}
}
GEN
.
importJob
(
props
);
return
"none"
}
}
function
importGerber
(
props
){
// job db step
var
job
=
props
.
job
var
step
=
props
.
step
var
files
=
props
.
data
GEN
.
createJob
({
name
:
job
,
db
:
props
.
db
})
GEN
.
createStep
({
job
:
job
,
name
:
props
.
step
})
var
gerberInfo
=
files
.
map
(
function
(
item
){
var
gerberCfg
=
JSON
.
parse
(
JSON
.
stringify
(
item
.
gerber
));
gerberCfg
.
layer
=
item
.
name
.
toLowerCase
()
gerberCfg
.
path
=
item
.
path
gerberCfg
.
format
=
item
.
type
gerberCfg
.
job
=
job
gerberCfg
.
step
=
step
return
gerberCfg
})
GEN
.
COM
(
"input_manual_reset"
)
gerberInfo
.
forEach
(
function
(
v
){
GEN
.
COM
(
"input_manual_set"
,
v
)
})
GEN
.
COM
(
"input_manual"
)
}
function
getHead
(
arr
,
head
){
head
=
head
||
[];
if
(
arr
[
0
]
!=
"%"
){
head
.
push
(
arr
.
shift
())
return
getHead
(
arr
,
head
)
}
else
{
return
head
}
}
/*
function
getK
(
count
){
NAME:
return
count
<
10
?
"0"
+
String
(
count
)
:
String
(
count
)
DESCRIPTION: ;
}
PARAMETER:
\ No newline at end of file
[
{
name : 'path',
title : '资料路径',
type : 'LineEdit',
property : {tool_tip : '存放所有料号的文件夹路径,不需要进入到料号文件夹内'},
},
{
name : 'customer',
title : '客户配置',
type : 'LineEdit',
property : {tool_tip : '客户配置'},
},
{
name : 'config_path',
title : '配置地址',
type : 'LineEdit',
property : {tool_tip : '配置的路径'},
}
]
VERSION_HISTORY:
V1.00 2020-04-15 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 database = require("topsin.database");
// database.addConnection($.conf.database_conf, "DFM");
// var QDfm = database.query("DFM");
// if ($.conf.product_type == "aimdfm") {
// QDfm.updateRow({
// table: "pdm_aimdfm_task",
// data: {
// current_process_title: $.process_title
// },
// where: { id: $.task_id }
// });
// }
// var GEN = $.gen;
// var Job = $.job_name;
// var db = $.db
// var Status = 'ok';
// var resultData = [];
// var PAR = {};
// if ($.hasOwnProperty('script_parameter')){
// PAR = JSON.parse($.script_parameter);
// }
// if (!$.hasOwnProperty('config_path')){
// PAR.config_path = "cam/input_data"
// }
// try {
// var par = PAR;
// console.log(par);
// if(!par.hasOwnProperty("customer")){throw "未填写配置"}
// var cfg = db.query("",function(q){
// return q.selectValue({
// table:'pub_conf',
// field:'text_data',
// where:{path : par.config_path}
// })
// })
// if (!cfg || cfg == ""){throw "cfg can not find"}
// var config = eval(cfg)
// if(!config.hasOwnProperty("customer")){throw "config error"}
// var job = Job;
// if(_.isEmpty(job)) throw "没有传入料号名!";
// job = job.toLowerCase()
// console.log(typeof config)
// console.log("=================Job:"+job)
// throw "tmp"
// // 如果genesis已经存在这个料号
// err = delSameJob({job:job,delSame:config.delSameJob}); if(err){throw err};
// var custCfg = config.customer[par.customer]
// if(!custCfg){throw "config error"}
// var step = custCfg.step.toLowerCase()
// // 获取路径下文件信息
// var path = par.path || custCfg.path
// var pathInfo = fs.listDir(path, 1)
// // 判断存不存在料号文件
// var jobFile = pathInfo.filter(function(v){return v.baseName.toLowerCase() == job})
// if(jobFile.length == 0){throw "job file is not exist"}
// var jobFiles = [] // 记录要分析的文件
// if (!jobFile[0].isDir) {
// jobFiles.push(jobFile[0])
// } else {
// jobFiles = fs.listDir(jobFile[0].path)
// }
// // 分析料号文件 得到料号导入信息 导入类型
// 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"}
// var importOk = false; // 是否成功导入
// if(/odb/ig.test(jobInfo.type)){ // odb导入
// if(jobInfo.data.length == 1){ // 只分析到一个tgz文件 直接导入
// var err = importJob({name:job,db:custCfg.db,path:jobInfo.data[0].file.path},config.delSameJob)
// if(err){throw err}
// } else { // 多个tgz文件 说明需要合并
// var mergeFiles = jobInfo.data.filter(function(item){
// var err = importJob({name:item.file.baseName,db:custCfg.db,path:item.file.path},config.delSameJob)
// if(err){throw err}
// return /yes/ig.test(item.format.isMerge)
// })
// var arr_job = mergeFiles[0]
// var arr_step;
// var steplist = GEN.getStepList({job:arr_job.file.baseName})
// if(steplist.indexOf(arr_job.format.arrStep) < 0){
// arr_step = steplist[0]
// }else{arr_step = arr_job.format.arrStep}
// GEN.openJob({job:job});
// GEN.openJob({job:arr_job.file.baseName});
// GEN.copyStep({ // 合并
// source_job:arr_job.file.baseName,
// source_name:arr_step,
// dest_job:job,
// dest_name:arr_step,
// });
// GEN.closeJob({ job: arr_job.file.baseName });
// GEN.deleteJob({ job: arr_job.file.baseName }); // 合并后 删除array的料号
// }
// importOk = true
// }
// if(/gerber/ig.test(jobInfo.type)){ // gerber导入
// GEN.createJob({name:job,db:custCfg.db})
// GEN.createStep({job:job,name:step})
// var gerberInfo = jobInfo.data.map(function(item){
// var gerberCfg = JSON.parse(JSON.stringify(item.format));
// var file = item.file
// gerberCfg.layer = file.name.toLowerCase()
// gerberCfg.path = file.path
// gerberCfg.format = item.type
// gerberCfg.job = job
// gerberCfg.step = step
// return gerberCfg
// })
// GEN.COM("input_manual_reset")
// gerberInfo.forEach(function(v){
// GEN.COM("input_manual_set",v)
// })
// GEN.COM("input_manual")
// importOk = true
// }
// if(!importOk){throw "import error"}
// // 导入结束
// var matrix = GEN.getMatrix({job:job});
// comp = Object.keys(matrix).filter(function(v){ // 如果有comp层 删除
// return /^comp_\+_/ig.test(v)
// })
// if (comp.length > 0){
// var tmp = GEN.getStepList({job:job})
// GEN.openStep({job:job,name:tmp[0]})
// GEN.COM("delete_comp")
// GEN.closeStep()
// }
// GEN.checkInout({job:job,mode:"out"}) // 结束保存料号 关闭料号
// GEN.saveJob({ job: job });
// GEN.checkInout({job:job,mode:"in"})
// GEN.closeJob({job:job})
// 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
// };
// } else {
// resultData.push({ type: "info", title: "操作完成, 请注意检查!" });
// return {
// status: Status,
// result_data: resultData
// };
// }
// }
// catch (e) {
// Status = 'error';
// resultData.push({type: "error", title: "脚本执行出错!", detail: [{desc: _.toString(e)}]});
// return {status: Status, result_data: resultData};
// }
// function delSameJob(props){
// var job = props.job
// var delSame = props.delSame
// if(GEN.isJobExists({job:job})){
// if(/^yes$/ig.test(delSame)){
// if(GEN.isJobOpen({job:job})){ GEN.closeJob({job:job}) }
// GEN.deleteJob({job:job})
// } else {
// return "job "+ job+ " exist"
// }
// }
// }
// function analyJobFiles(props){
// var files = props.jobFiles;
// var config = props.config;
// var job = props.job;
// var custCfg = props.custCfg;
// var rules = custCfg.rules;
// var paramsFile = files.filter(function(file){return /param/ig.test(file.baseName)})
// var tmp_hash = {}
// paramsFile.forEach(function(file){
// tmp_hash[file.baseName] = (function(){
// var tmparr = fs.readFile(file.path).split("\n")
// var tmp = {}
// tmparr.map(function(v){
// var arr = v.split(/\b\s+\b/)
// tmp[arr[0].replace(/-/ig,"_")] = arr[1]
// })
// return tmp
// })()
// })
// var fileInfo = files.reduce(function(a,file){
// try {
// rules.forEach(function(item){
// if(item.valid({file:file, job:job})){
// var format = config.formats[item.format]
// var format1;
// if(item.format_params){
// format1 = item.format_params({params:tmp_hash})
// }
// if(format1){
// throw {file:file,type:item.type,format:format1}
// }else{
// throw {file:file,type:item.type,format:format}
// }
// }
// })
// } catch (info) {
// a.push(info)
// }
// return a
// },[])
// var odbfiles = fileInfo.filter(function(item){return /odb/ig.test(item.type)})
// if(odbfiles.length == 0){
// return {
// type: "Gerber",
// data: fileInfo
// }
// } else {
// return {
// type: "ODB",
// data: odbfiles
// }
// }
// }
// function importJob(props,delSameJob){
// var name = props.name
// if (GEN.isJobExists({ job: name })) {
// if (/^yes$/ig.test(delSameJob)) {
// if(GEN.isJobOpen({ job: name })){ GEN.closeJob({ job: name }); }
// GEN.deleteJob({ job: name });
// }
// else {
// return "job "+name+" exist";
// }
// }
// GEN.importJob(props);
// }
test/test.js
View file @
1dbd449a
/*
NAME:
DESCRIPTION: ;
PARAMETER:
[
{
name : 'auto_save',
title : '自动保存',
type : 'RadioBox',
property : {
item_list:[
{name:'yes',text:'YES'},
{name:'no',text:'NO'},
],
tool_tip:'是否自动保存料号开关'
}
}
]
VERSION_HISTORY:
V1.00 2020-04-17 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
(
"==================================test"
);
console
.
log
(
"==================================test"
);
console
.
log
(
"==================================test"
);
// 引入模块 包
var
$
=
require
(
'topcam.scriptfunc'
).
argv
();
var
fs
=
require
(
'fs'
);
var
_
=
require
(
'lodash'
);
var
database
=
require
(
"topsin.database"
);
database
.
addConnection
(
$
.
conf
.
database_conf
,
"DFM"
);
var
QDfm
=
database
.
query
(
"DFM"
);
if
(
$
.
conf
.
product_type
==
"aimdfm"
)
{
QDfm
.
updateRow
({
table
:
"pdm_aimdfm_task"
,
data
:
{
current_process_title
:
$
.
process_title
},
where
:
{
id
:
$
.
task_id
}
});
}
var
GEN
=
$
.
gen
;
var
fs
=
require
(
"fs"
);
var
Job
=
$
.
job_name
;
var
db
=
$
.
db
var
Status
=
'ok'
;
var
resultData
=
[];
var
PAR
=
{};
if
(
$
.
hasOwnProperty
(
'script_parameter'
)){
PAR
=
JSON
.
parse
(
$
.
script_parameter
);
}
try
{
var
str
=
"-0.0001"
var
par
=
PAR
;
console
.
log
(
par
)
console
.
log
(
Number
(
str
));
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
};
}
else
{
resultData
.
push
({
type
:
"info"
,
title
:
"操作完成, 请注意检查!"
});
return
{
status
:
Status
,
result_data
:
resultData
};
}
}
catch
(
e
)
{
Status
=
'error'
;
resultData
.
push
({
type
:
"error"
,
title
:
"脚本执行出错!"
,
detail
:
[{
desc
:
_
.
toString
(
e
)}]});
return
{
status
:
Status
,
result_data
:
resultData
};
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment