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
67fabe19
Commit
67fabe19
authored
4 years ago
by
Scott Sun
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of
http://gitlab.topibd.net/scott.sun/scott
parents
5c754241
1218d449
Changes
10
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
395 additions
and
169 deletions
+395
-169
20200929_wistarn.md
ats/topcam/20200929_wistarn.md
+7
-0
ATS_AIM_customer_data_analysis.js
ats/topcam/ATS_AIM_customer_data_analysis.js
+62
-21
ATS_AIM_data_format.js
ats/topcam/ATS_AIM_data_format.js
+36
-16
ATS_AIM_input_data.js
ats/topcam/ATS_AIM_input_data.js
+37
-10
config_ats.js
ats/topcam/config_ats.js
+27
-19
create_work.js
ats/topcam/create_work.js
+1
-4
emai.js
ats/topcam/emai.js
+14
-7
SEC_DRC_analysis.js
public_script/SEC_DRC_analysis.js
+0
-7
scotttest.js
public_script/scotttest.js
+202
-76
silkScreenOptimize.js
public_script/silkScreenOptimize.js
+9
-9
No files found.
ats/topcam/20200929_wistarn.md
View file @
67fabe19
## wistarn
*
100 rule更改 ok
*
101 102 103(profile错误) 7z压缩包
*
104 多套gerber文件
*
106 107 113 147 无文件
*
114 profile 直接创建失败
*
136 139 144 多套数据
*
141 tgz+gerber多套
\ No newline at end of file
This diff is collapsed.
Click to expand it.
ats/topcam/ATS_AIM_customer_data_analysis.js
View file @
67fabe19
...
...
@@ -137,7 +137,6 @@ var resultData = [];
var
ALL
=
{}
var
Omatrix
=
{};
try
{
console
.
log
(
"=============================================>anaysis_start"
);
var
par
=
PAR
;
var
vc_src_01005_pad_result
=
par
.
vc_src_01005_pad_result
...
...
@@ -152,7 +151,7 @@ try {
// 检查料号是否能够check out
if
(
GEN
.
checkInout
({
job
:
job
,
mode
:
"test"
})
!=
0
&&
mode
==
"aimdfm"
){
throw
"the job check"
}
GEN
.
checkInout
({
job
:
job
,
mode
:
"out"
});
script_info
({
result_severity
:
"analysis start"
})
script_info
({
msg
:
"analysis start"
})
script_info
({
progress
:
65
})
var
pcs_step
=
par
.
pcs_step
==
""
?
"cad"
:
par
.
pcs_step
;
var
array_step
=
par
.
array_step
==
""
?
"stp"
:
par
.
array_step
;
...
...
@@ -163,7 +162,9 @@ try {
if
(
step_list
.
indexOf
(
pcs_step
)
<
0
){
pcs_step
=
step_list
[
0
]
}
script_info
({
result_severity
:
"analysis update_matrix_info"
})
script_info
({
msg
:
"analysis update_matrix_info"
})
script_info
({
progress
:
65
})
var
matrix
=
UPLOAD_LAYER_MATRIX
({
job
:
job
})
// 分析matrix 获得分析后的matrix信息
GEN
.
openStep
({
job
:
job
,
name
:
pcs_step
})
...
...
@@ -219,7 +220,7 @@ try {
})
GEN
.
clearLayers
()
script_info
({
result_severity
:
"analysis drill_stack"
})
script_info
({
msg
:
"analysis drill_stack"
})
script_info
({
progress
:
70
})
// * new 钻孔叠构
var
cam_drill_structure
=
[]
...
...
@@ -361,7 +362,7 @@ try {
rmOutProfile
({
job
:
job
,
step
:
pcs_step
})
}
GEN
.
closeStep
()
script_info
({
result_severity
:
"analysis panel_info"
})
script_info
({
msg
:
"analysis panel_info"
})
script_info
({
progress
:
70
})
// * profile 和 拼版
var
pandle_step
=
step_list
.
map
(
function
(
v
){
...
...
@@ -435,7 +436,7 @@ try {
}
ALL
.
gold_fingers
=
gold_fingers
GEN
.
closeStep
()
script_info
({
result_severity
:
"analysis some_job_info"
})
script_info
({
msg
:
"analysis some_job_info"
})
var
config
=
{
jobInfo
:
{
layer_count
:
[
"signal"
,
"power_ground"
],
// Board属性的signal或者power_ground层
...
...
@@ -515,7 +516,7 @@ try {
console
.
log
(
"===================================> 5 save drill info"
)
script_info
({
result_severity
:
"analysis drill_info"
})
script_info
({
msg
:
"analysis drill_info"
})
script_info
({
progress
:
75
})
// * 获取pcs_step 和 array_step的钻孔信息
var
drill_tool_info
=
{};
...
...
@@ -530,6 +531,7 @@ try {
name
:
par
.
array_step
}
]
steps_drillinfo
.
forEach
(
function
(
item
){
var
type
=
item
.
type
;
var
step
=
item
.
name
;
...
...
@@ -537,7 +539,7 @@ try {
drillLayers
.
forEach
(
function
(
layer
){
var
layer
=
layer
.
name
;
if
(
!
GEN
.
isLayerEmpty
({
job
:
job
,
step
:
step
,
layer
:
layer
})){
GEN
.
COM
(
"tools_set,layer="
+
layer
+
",slots=by_length"
)
//
GEN.COM("tools_set,layer="+layer+",slots=by_length")
var
tool
=
GEN
.
getTool
({
job
:
job
,
step
:
step
,
layer
:
layer
,
units
:
"mm"
});
// {"1":{"count":"01156","num":"1","type":"plated","min_tol":"0","max_tol":"0","finish_size":"100.31","drill_size":"100.31","slot_len":"0","type2":"standard","shape":"hole","bit":0}}
if
(
!
drill_tool_info
[
layer
]){
drill_tool_info
[
layer
]
=
tool
;
...
...
@@ -639,7 +641,7 @@ try {
})
console
.
log
(
"=============================> 6 set smd bga"
)
script_info
({
result_severity
:
"analysis smd&bga"
})
script_info
({
msg
:
"analysis smd&bga"
})
script_info
({
progress
:
80
})
var
allStep
=
GEN
.
getStepList
({
job
:
job
})
allStep
.
forEach
(
function
(
step
){
...
...
@@ -783,6 +785,7 @@ try {
jobid
:
JobId
,
jobinfohash
:
{
ATS_surface_area_base_on
:
"Card"
}
})
var
jobpath
=
GEN
.
getJobPath
({
job
:
job
})
// if(GEN.GEN_TYPE == "genesis"){
// jobpath = GEN.getJobPath({job:job})
...
...
@@ -790,7 +793,7 @@ try {
// jobpath = "/home/local_db/server_db/jobs/"+job
// }
mkPath
(
jobpath
,[
"user"
,
"opcam"
,
"steps"
])
script_info
({
result_severity
:
"analysis signal"
})
script_info
({
msg
:
"analysis signal"
})
script_info
({
progress
:
85
})
stepList
.
forEach
(
function
(
step
){
GEN
.
openStep
({
job
:
job
,
name
:
step
})
...
...
@@ -943,7 +946,7 @@ try {
if
(
par
.
erf
){
tmpitem
.
erf
=
par
.
erf
}
script_info
({
result_severity
:
"analysis run_signal_chk"
})
script_info
({
msg
:
"analysis run_signal_chk"
})
createChklistAndRun
({
// 创建checklist并运行
layers
:
signalLayers
,
items
:
[
tmpitem
]
...
...
@@ -982,11 +985,30 @@ try {
GEN
.
checkInout
({
job
:
job
,
mode
:
"in"
})
}
var
job_attrs
=
db
.
query
(
""
,
function
(
q
){
return
q
.
selectValue
({
table
:
'pdm_job'
,
field_format
:{
job_attrs
:
'json'
},
field
:
'job_attrs'
,
where
:{
id
:
JobId
}
})
});
if
(
!
job_attrs
)
{
job_attrs
=
{}}
job_attrs
.
readin_result
=
"已读入"
db
.
query
(
""
,
function
(
q
){
return
q
.
updateRow
({
table
:
'pdm_job'
,
data
:{
job_attrs
:
job_attrs
},
update_policy
:{
attr_data
:
'json_merge'
},
where
:{
id
:
JobId
}
})
});
IKM
.
msg
(
"export"
)
script_info
({
result_severity
:
"analysis export"
})
script_info
({
msg
:
"analysis export"
})
script_info
({
progress
:
95
})
// 导出
if
(
par
.
export_path
!=
""
&&
par
.
export_mode
!=
""
&&
par
.
export_submode
!=
""
){
...
...
@@ -1012,11 +1034,11 @@ try {
})
});
var
err
=
mail
.
sendMail
({
host
:
'smtp.exmail.qq.com'
,
auth_method
:
mail
.
AuthMethod
.
LOGIN
,
host
:
"10.90.79.37"
,
port
:
"25"
,
connection_type
:
mail
.
ConnectionType
.
TCP
,
from
:
'scott.sun@topibd.com
'
,
password
:
'159482673Sun'
,
// user:'ferre.zhang@cn.ats.net
',
//
password:'159482673Sun',
to
:
'scott.sun@topibd.com'
,
subject
:
db_customer
+
' / '
+
job
+
' reading is ready!'
,
content
:
db_customer
+
' / '
+
job
+
' reading is ready!'
...
...
@@ -1025,8 +1047,6 @@ try {
print
(
err
.
text
());
}
if
(
mode
===
"aimdfm"
)
{
$
.
QDfm
.
updateRow
({
table
:
"pdm_aimdfm_task"
,
...
...
@@ -1115,6 +1135,26 @@ function ANALYSIS_STACKUP(props){
var
matrix
=
GEN
.
getMatrix
({
job
:
job
})
var
layer_count
=
GEN
.
getLayerCount
({
job
:
job
})
// !
save_job_info
({
jobid
:
JobId
,
jobcategory
:
props
.
jobcategory
,
jobinfohash
:{
TL_layer_count
:
layer_count
}});
var
job_attrs
=
db
.
query
(
""
,
function
(
q
){
return
q
.
selectValue
({
table
:
'pdm_job'
,
field_format
:{
job_attrs
:
'json'
},
field
:
'job_attrs'
,
where
:{
id
:
JobId
}
})
});
if
(
!
job_attrs
)
{
job_attrs
=
{}}
job_attrs
.
layer_count
=
layer_count
db
.
query
(
""
,
function
(
q
){
return
q
.
updateRow
({
table
:
'pdm_job'
,
data
:{
job_attrs
:
job_attrs
},
update_policy
:{
attr_data
:
'json_merge'
},
where
:{
id
:
JobId
}
})
});
_
.
values
(
matrix
).
sort
(
function
(
a
,
b
){
return
a
.
row
-
b
.
row
}).
forEach
(
function
(
layer
){
layer
.
odb_name
=
layer
.
name
;
layer
.
name
=
layer
.
tl_name
;
...
...
@@ -1248,6 +1288,7 @@ function selCopyLayer(props){ // 拷贝选择的到辅助层
function
save_job_info
(
props
){
// 保存料号信息
var
jobid
=
props
.
jobid
;
var
jobinfohash
=
props
.
jobinfohash
;
Object
.
keys
(
jobinfohash
).
forEach
(
function
(
key
){
var
val
=
jobinfohash
[
key
];
var
value
=
db
.
query
(
""
,
function
(
q
){
...
...
@@ -1257,7 +1298,6 @@ function save_job_info(props){ // 保存料号信息
where
:{
job_id
:
jobid
,
attr_name
:
key
}
})
});
console
.
log
(
"jobid:"
+
jobid
+
"==========dbjobvalue:"
+
val
)
if
(
/done/ig
.
test
(
value
)
||
!
value
){
db
.
query
(
""
,
function
(
q
){
return
q
.
insertRow
({
...
...
@@ -2017,6 +2057,7 @@ function analysisDrill(par, step){
GEN
.
workLayer
({
name
:
item
,
display_number
:
1
,
clear_before
:
"yes"
})
GEN
.
COM
(
"filter_set,filter_name=popup,update_popup=no,feat_types=pad"
);
GEN
.
COM
(
"sel_ref_feat"
,{
layers
:
tmplayer
,
use
:
"filter"
,
mode
:
"touch"
,
pads_as
:
"shape"
,
f_types
:
"pad"
,
polarity
:
"positive
\
;negative"
,
include_syms
:
drill
.
symbol
})
// GEN.selRefFeat({layers:tmplayer, use:"filter",mode:"touch"})
GEN
.
COM
(
"filter_reset,filter_name=popup"
)
if
(
GEN
.
getSelectCount
()
>
0
){
var
res
=
""
...
...
@@ -2026,7 +2067,7 @@ function analysisDrill(par, step){
return
/^r
\d
+/
.
test
(
item
.
symbol
)
})
pads
=
pads
.
sort
(
function
(
a
,
b
){
return
parseInt
(
a
.
symbol
)
-
parseInt
(
b
.
symbol
)
return
parseInt
(
a
.
symbol
.
slice
(
1
))
-
parseInt
(
b
.
symbol
.
slice
(
1
)
)
})
res
=
pads
[
0
].
symbol
.
slice
(
1
)
}
...
...
This diff is collapsed.
Click to expand it.
ats/topcam/ATS_AIM_data_format.js
View file @
67fabe19
...
...
@@ -68,7 +68,7 @@ if (mode === "aimdfm") {
var
Status
=
'ok'
;
var
resultData
=
[];
try
{
script_info
({
result_severity
:
"format start"
})
script_info
({
msg
:
"format start"
})
script_info
({
progress
:
35
})
var
par
=
PAR
;
if
(
!
par
.
hasOwnProperty
(
"config_path"
)
||
par
.
config_path
==
""
){
...
...
@@ -128,7 +128,8 @@ try {
}
}
if
(
/string/ig
.
test
(
typeof
(
mergeRule
.
drill
[
0
]))){
// drill层 计算
var
drill_layers
=
[]
var
drill_layers
=
[];
var
tmp_layers
=
[];
var
matrix
=
GEN
.
getMatrix
({
job
:
job
})
// 计算最大值
var
layers
=
Object
.
keys
(
matrix
)
...
...
@@ -144,6 +145,7 @@ try {
var
tmp
=
reg
.
exec
(
v
)
var
num1
=
Number
(
tmp
[
1
])
var
num2
=
Number
(
tmp
[
2
])
tmp_layers
.
push
({
num1
:
num1
,
num2
:
num2
,
layer
:
v
})
if
(
num1
==
1
){
drill_layers
.
push
({
num1
:
num1
,
num2
:
num2
,
layer
:
v
})
}
...
...
@@ -152,6 +154,10 @@ try {
}
})
var
max
=
maxnum
.
sort
(
function
(
a
,
b
){
return
b
-
a
})[
0
]
if
(
drill_layers
.
length
>
0
&&
String
(
drill_layers
[
0
].
num2
)
==
"NaN"
)
{
var
maxLayer
=
tmp_layers
.
filter
(
function
(
v
)
{
return
v
.
num1
==
max
})
GEN
.
COM
(
"matrix_rename_layer"
,{
job
:
job
,
matrix
:
"matrix"
,
layer
:
maxLayer
[
0
].
layer
,
new_name
:
"drill"
})
}
var
drill_layer
=
drill_layers
.
filter
(
function
(
v
){
return
v
.
num2
==
max
})
if
(
drill_layer
.
length
){
drill_layer
=
drill_layer
[
0
].
layer
...
...
@@ -204,7 +210,6 @@ try {
profileRule
=
mergeRule
.
profile
}
}
// start martix_tl_name
console
.
log
(
"get matrix ====== ======== job:"
+
job
);
var
matrix
=
GEN
.
getMatrix
({
job
:
job
});
...
...
@@ -224,7 +229,7 @@ try {
// 改名
script_info
({
result_severity
:
"format rename"
})
script_info
({
msg
:
"format rename"
})
script_info
({
progress
:
50
})
err
=
reName
({
job
:
job
,
matrix
:
after_sort_matrix
,
cfg
:
format_cfg
})
if
(
err
){
throw
err
}
...
...
@@ -285,7 +290,7 @@ try {
err
=
setDrill
({
job
:
job
})
if
(
err
){
throw
err
}
script_info
({
result_severity
:
"format create profile"
})
script_info
({
msg
:
"format create profile"
})
script_info
({
progress
:
55
})
var
all_layer
=
Object
.
keys
(
tmp_matrix
)
// 没有outline层
...
...
@@ -296,7 +301,7 @@ try {
GEN
.
openStep
({
job
:
job
,
name
:
tmp_step
})
var
now_profile
=
GEN
.
getProfile
({
job
:
job
,
step
:
tmp_step
})
if
(
now_profile
.
match
(
/
\n
/ig
).
length
==
1
){
// 如果没有profile
if
(
profileRule
[
0
]
==
"outline"
)
{
if
(
profileRule
[
0
]
==
"outline"
&&
/1352/ig
.
test
(
PAR
.
customer
)
)
{
GEN
.
workLayer
({
name
:
'outline'
,
display_number
:
2
,
clear_before
:
'yes'
})
GEN
.
selAllFeat
()
if
(
GEN
.
getSelectCount
()
>
0
)
{
...
...
@@ -312,7 +317,7 @@ try {
}
var
hasProfile
=
GEN
.
getProfile
({
job
:
job
,
step
:
tmp_step
})
if
(
hasProfile
.
match
(
/
\n
/ig
).
length
==
1
){
script_info
({
result_severity
:
"创建profile失败"
})
script_info
({
msg
:
"创建profile失败"
})
throw
"创建profile失败"
}
}
...
...
@@ -331,7 +336,6 @@ try {
$
.
QDfm
.
updateRow
({
table
:
"pdm_aimdfm_task"
,
data
:
{
result_severity
:
"format ok"
,
progress
:
60
},
where
:
{
id
:
$
.
task_id
}
...
...
@@ -600,6 +604,7 @@ function reName(props) { // 改名 par{job:要改名的料号, rule: {要改名
}
function mergeLaser(props){ // 合并钻孔
var tmp = []
if(!props.mergeRule){return}
var mergeRuleRegs = props.mergeRule.regs
var mergeTlname = props.mergeRule.tl_name
...
...
@@ -645,11 +650,17 @@ function mergeLaser(props){ // 合并钻孔
}
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()});
if(/drl|drill/ig.test(val.name) && tmp.indexOf(val.name) < 0) {
tmp.push(val.name)
}
})
}
}
GEN.affectedLayer({affected:"
no
",mode:"
all
"});
GEN.clearLayers();
tmp.forEach(function(layer) {
GEN.COM("
matrix_rename_layer
,
job
=
"+job+"
,
matrix
=
matrix
,
layer
=
"+layer+"
,
new_name
=
"+layer.replace(/drl|drill/, "
merage
"))
})
GEN.closeStep();
return newdrills
}
...
...
@@ -657,7 +668,6 @@ function mergeLaser(props){ // 合并钻孔
function createOutline(props){
var profileRule = props.profileRule
console.log("
----
profileRule
------->
:
" + _.toString(profileRule));
var job = props.job
var step = props.step
var matrix = GEN.getMatrix({job:job})
...
...
@@ -671,15 +681,25 @@ function createOutline(props){
})
return flag
})
console.log("
----
outlines
------->
:
" + _.toString(outlines));
var drill_layer = Object.keys(matrix).filter(function(v){return matrix[v].layer_type=="
drill
" && matrix[v].context == "
board
"})
var tmp = "
drill_all
";
if(GEN.isLayerExists({job:job, layer:tmp})) { GEN.deleteLayer({job:job, layer:
tmp
})}
GEN.openStep({job:job, name:step})
GEN.
affectedLayer({affected:'yes',layer:drill_layer
})
if(GEN.isLayerExists({job:job, layer:tmp})) { GEN.deleteLayer({job:job, layer:
[tmp]
})}
drill_layer.forEach(function(d_layer) {
GEN.
workLayer({name:d_layer,display_number:2,clear_before:'yes'
})
GEN.selCopyOther({dest:'layer_name',target_layer:tmp,invert:'no',dx:0,dy:0,size:0})
})
GEN.closeStep()
if (outlines.indexOf("
outline
") >= 0) {
outlines = outlines.reduce(function(a,b){
if(b != "
outline
") {
a.push(b)
}
return a
}, ["
outline
"])
}
var tmp_outline
if(outlines.length){
if( outlines.length){
...
...
This diff is collapsed.
Click to expand it.
ats/topcam/ATS_AIM_
data_input
.js
→
ats/topcam/ATS_AIM_
input_data
.js
View file @
67fabe19
...
...
@@ -86,9 +86,10 @@ if (mode === "aimdfm") {
}
var
Status
=
'ok'
;
var
resultData
=
[];
var
import_info
=
[]
var
import_info
=
[];
var
inputState
=
[];
try
{
script_info
({
result_severity
:
"import start"
})
script_info
({
msg
:
"import start"
})
var
par
=
PAR
;
// var db_path = db.query("",function(q){
// return q.selectValue({
...
...
@@ -163,18 +164,41 @@ try {
}
else
{
jobFiles
=
fs
.
listDir
(
jobFile
[
0
].
path
)
}
GEN
.
COM
(
"config_edit,name=iol_gbr_polygon_break,value=1,mode=user"
)
GEN
.
COM
(
"config_edit,name=iol_fix_ill_polygon,value=yes,mode=user"
)
//
GEN.COM("config_edit,name=iol_gbr_polygon_break,value=1,mode=user")
//
GEN.COM("config_edit,name=iol_fix_ill_polygon,value=yes,mode=user")
// 将jobFile下的zip解压
decompression
(
jobFile
[
0
].
path
,
[])
var
job_attrs
=
db
.
query
(
""
,
function
(
q
){
return
q
.
selectValue
({
table
:
'pdm_job'
,
field_format
:{
job_attrs
:
'json'
},
field
:
'job_attrs'
,
where
:{
id
:
JobId
}
})
});
if
(
!
job_attrs
)
{
job_attrs
=
{}}
if
(
inputState
.
indexOf
(
"rar"
)
>=
0
||
inputState
.
indexOf
(
"7z"
)
>=
0
)
{
job_attrs
.
readin_result
=
"解压失败-格式无法识别"
}
else
{
job_attrs
.
readin_result
=
"已读入"
}
db
.
query
(
""
,
function
(
q
){
return
q
.
updateRow
({
table
:
'pdm_job'
,
data
:{
job_attrs
:
job_attrs
},
update_policy
:{
attr_data
:
'json_merge'
},
where
:{
id
:
JobId
}
})
});
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
){
script_info
({
result_severity
:
"file error"
})
script_info
({
msg
:
"file error"
})
throw
"file error"
}
var
importOk
=
false
;
// 是否成功导入
...
...
@@ -277,7 +301,7 @@ try {
GEN
.
COM
(
"input_manual"
)
importOk
=
true
}
if
(
!
importOk
){
script_info
({
result_severity
:
"import error"
});
throw
"import error"
}
if
(
!
importOk
){
script_info
({
msg
:
"import error"
});
throw
"import error"
}
script_info
({
progress
:
20
})
reNameStep
(
job
)
if
(
/2171/
.
test
(
par
.
customer
)){
...
...
@@ -314,7 +338,7 @@ try {
}
})
}
GEN
.
closeStep
()
GEN
.
checkInout
({
job
:
job
,
mode
:
"out"
})
// 结束保存料号 关闭料号
GEN
.
saveJob
({
job
:
job
});
GEN
.
checkInout
({
job
:
job
,
mode
:
"in"
})
...
...
@@ -332,7 +356,7 @@ try {
import_html
+=
"</table>"
// name type date user
resultData
.
push
({
type
:
"info"
,
title
:
"导入资料列表"
,
detail
:
[{
desc
:
import_html
}]
})
script_info
({
result_severity
:
"import ok"
})
script_info
({
msg
:
"import ok"
})
if
(
mode
===
"aimdfm"
)
{
$
.
QDfm
.
updateRow
({
table
:
"pdm_aimdfm_task"
,
...
...
@@ -371,7 +395,6 @@ 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
})
}
...
...
@@ -511,10 +534,14 @@ function script_info(props){ // result_severity progress
}
}
function
decompression
(
path
,
zips
)
{
var
files
=
fs
.
listDir
(
path
)
var
count
=
0
;
var
zipfiles
=
files
.
filter
(
function
(
item
){
if
(
item
.
suffix
==
"zip"
||
item
.
suffix
==
"rar"
||
item
.
suffix
==
"7z"
)
{
inputState
.
push
(
item
.
suffix
)
}
if
(
item
.
suffix
===
"zip"
&&
zips
.
indexOf
(
item
.
path
)
<
0
){
if
(
item
.
name
.
length
>=
20
)
{
var
mvname
=
"zip_custom"
+
count
+
".zip"
;
...
...
This diff is collapsed.
Click to expand it.
ats/topcam/config_ats.js
View file @
67fabe19
...
...
@@ -190,8 +190,8 @@
"Excellon2_4"
:
{
"nf1"
:
2
,
"nf2"
:
3
,
"units"
:
"
mm
"
,
"zeroes"
:
"
lead
ing"
,
"units"
:
"
inch
"
,
"zeroes"
:
"
trail
ing"
,
"decimal"
:
"no"
,
"nf_comp"
:
0
,
"break_sr"
:
"yes"
,
...
...
@@ -201,7 +201,7 @@
"drill_only"
:
"no"
,
"multiplier"
:
1
,
"resolution"
:
3
,
"tool_units"
:
"
mm
"
,
"tool_units"
:
"
inch
"
,
"coordinates"
:
"absolute"
,
"merge_by_rule"
:
"no"
,
"signed_coords"
:
"no"
,
...
...
@@ -679,6 +679,7 @@
GEN
.
COM
(
"tools_set,layer="
+
layer
+
",thickness=0,user_params=,slots=by_length"
)
}
})
GEN
.
saveJob
({
job
:
job
});
}
}
]
...
...
@@ -828,7 +829,7 @@
{
"valid"
:
function
(
props
){
var
file
=
props
.
file
;
return
/.+
\.
ger$/ig
.
test
(
file
.
name
)
||
/
\.
gdo$|
\.
bol$|
\.
gdo$|
\.
pma$|
\.
sma$|
\.
smb$|
\.
ssa$|
\.
ssb$/ig
.
test
(
file
.
name
)
||
return
/.+
\.
ger$/ig
.
test
(
file
.
name
)
||
/
\.
pho$|
\.
bol$|
\.
gdo$|
\.
pma$|
\.
pmb$|
\.
spa$|
\.
spb$
\.
sma$|
\.
smb$|
\.
ssa$|
\.
ssb$/ig
.
test
(
file
.
name
)
||
/.+
\.
l
\d
+$/ig
.
test
(
file
.
name
)
},
"type"
:
"Gerber274x"
,
...
...
@@ -943,25 +944,32 @@
}
],
"tl_name"
:
[
{
"orig_name"
:
[
"^pmt
\\
.art$"
,
"
\\
.pma$
"
,
"SoldPasteTop
\\
.ger
"
,
"past_top"
],
"tl_name"
:
"past_top"
},
{
"orig_name"
:
[
"^pmb
\\
.art$"
,
"
\\
.pmb$
"
,
"SoldPasteBot
\\
.ger
"
,
"past_botm"
],
"tl_name"
:
"past_botm"
},
{
"orig_name"
:
[
"tsilk"
,
"^sst
\\
.art$"
,
"
\\
.ssa$"
,
"
SilkScrnTop
\\
.ger"
,
"silk_
top"
],
"tl_name"
:
"silk_top"
},
{
"orig_name"
:
[
"bsilk"
,
"^ssb
\\
.art$"
,
"
\\
.ssb$"
,
"
SilkScrnBot
\\
.ger"
,
"silk_
bot"
],
"tl_name"
:
"silk_bot"
},
{
"orig_name"
:
[
"tmask"
,
"^smt
\\
.art$"
,
"
\\
.sma$"
,
"
SoldMask1Top
\\
.ger"
,
"sm_
top"
],
"tl_name"
:
"sm_top"
},
{
"orig_name"
:
[
"bmask"
,
"^smb
\\
.art$"
,
"
\\
.smb$"
,
"
SoldMask1Bot
\\
.ger"
,
"sm_
bot"
],
"tl_name"
:
"sm_botm"
},
{
"orig_name"
:
[
"^
top$"
,
"^top
.art$"
],
"tl_name"
:
"top"
},
{
"orig_name"
:
[
"^l(
\\
d+).*
\\
.art$"
,
"^v(
\\
d+)
\\
.art$"
,
"^g(
\\
d+)
\\
.art$"
,
"^s(
\\
d+)
\\
.art$"
,
"
\\
.l(
\\
d+)$"
,
"Copper(
\\
d+)
\\
.ger$"
,
"^layer_(
\\
d+)"
],
"tl_name"
:
"l_($1)"
},
{
"orig_name"
:
[
"^bot
\\
.art$"
,
"^bottom$"
,
"^bottom.art$"
],
"tl_name"
:
"bottom"
},
{
"orig_name"
:
[
"^pmt
\\
.art$"
,
"
\\
.pma$
|
\\
.spa$"
,
"paste.top|soldPasteTop|pastemask.?top
"
,
"past_top"
],
"tl_name"
:
"past_top"
},
{
"orig_name"
:
[
"^pmb
\\
.art$"
,
"
\\
.pmb$
|
\\
.spb$"
,
"paste.bot|soldPasteBot|pastemask.?bot
"
,
"past_botm"
],
"tl_name"
:
"past_botm"
},
{
"orig_name"
:
[
"tsilk"
,
"^sst
\\
.art$"
,
"
\\
.ssa$"
,
"
silkscrntop|silkscreentop"
,
"silk.top|silk-
top"
],
"tl_name"
:
"silk_top"
},
{
"orig_name"
:
[
"bsilk"
,
"^ssb
\\
.art$"
,
"
\\
.ssb$"
,
"
silkscrnbot|silkscreenbot"
,
"silk.bot|silk-
bot"
],
"tl_name"
:
"silk_bot"
},
{
"orig_name"
:
[
"tmask"
,
"^smt
\\
.art$"
,
"
\\
.sma$"
,
"
soldmask1top|soldermask.?top"
,
"sm.top|solder.
top"
],
"tl_name"
:
"sm_top"
},
{
"orig_name"
:
[
"bmask"
,
"^smb
\\
.art$"
,
"
\\
.smb$"
,
"
soldmask1bot|soldermask.?bot"
,
"sm.bot|solder.
bot"
],
"tl_name"
:
"sm_botm"
},
{
"orig_name"
:
[
"^
(?:(?!assy|enig|pm|past|paste|silk|mask).)+top
\\
.(pho|art)$"
,
"^top$"
,
"^top
\\
.art$"
],
"tl_name"
:
"top"
},
{
"orig_name"
:
[
"^
(?:(?!ref).)+l(
\\
d)
\\
.art$"
,
"-(
\\
d+)l
\\
.pho$"
,
"^
l(
\\
d+).*
\\
.art$"
,
"^v(
\\
d+)
\\
.art$"
,
"^g(
\\
d+)
\\
.art$"
,
"^s(
\\
d+)
\\
.art$"
,
"
\\
.l(
\\
d+)$"
,
"Copper(
\\
d+)
\\
.ger$"
,
"^layer_(
\\
d+)"
],
"tl_name"
:
"l_($1)"
},
{
"orig_name"
:
[
"^
(?:(?!assy|enig|pm|past|paste|silk|mask).)+bot
\\
.(pho|art)$"
,
"^
bot
\\
.art$"
,
"^bottom$"
,
"^bottom.art$"
],
"tl_name"
:
"bottom"
},
{
"orig_name"
:
[
"
\\
.d(
\\
d+)$"
],
"tl_name"
:
"d_($1)-($1+1)"
},
{
"orig_name"
:
[
"thruHolePlated_(
\\
d+)_(
\\
d+)
\\
.ncd"
,
"(
\\
d+)-(
\\
d+)
\\
.drl$"
,
"^drill(
\\
d+)-(
\\
d+)$"
,
"^d_(
\\
d+)-(
\\
d+)$"
],
"tl_name"
:
"d_($1)-($2)"
},
{
"orig_name"
:
[
"ThruHoleNonPlated
\\
.ncd$"
,
"^drill$"
],
"tl_name"
:
"drill"
},
{
"orig_name"
:
[
"
(
\\
d+)-(
\\
d+)-np
\\
.drl$"
,
"
ThruHoleNonPlated
\\
.ncd$"
,
"^drill$"
],
"tl_name"
:
"drill"
},
{
"orig_name"
:
[
"
\\
.rou$"
,
"^rout$"
],
"tl_name"
:
"rout"
},
{
"orig_name"
:
"fab.art"
,
"tl_name"
:
"fab.art"
},
{
"orig_name"
:
[
"multipack.art"
,
"^array$"
],
"tl_name"
:
"array"
},
{
"orig_name"
:
[
"outline
\\
.art$"
,
"
\\
.bol$"
,
"PnlContourNonPlated
\\
.ger"
,
"^outline"
],
"tl_name"
:
"outline"
},
{
"orig_name"
:
[
"top-enig"
,
"enig_top"
],
"tl_name"
:
"enig_top"
},
{
"orig_name"
:
[
"bot-enig"
,
"enig_bot"
],
"tl_name"
:
"enig_bot"
},
]
{
"orig_name"
:
[
"multipack
\\
.art"
,
"^array$"
],
"tl_name"
:
"array"
},
{
"orig_name"
:
[
"p_outline
\\
.art"
,
"panel
\\
.art$"
,
"paneloutline
\\
.pho"
,
"outline
\\
.art$"
,
"
\\
.bol$"
,
"PnlContourNonPlated
\\
.ger"
,
"^outline"
],
"tl_name"
:
"outline"
},
{
"orig_name"
:
[
"topside-golden"
,
"top-enig"
,
"enig_top"
],
"tl_name"
:
"enig_top"
},
{
"orig_name"
:
[
"botside-golden"
,
"bot-enig"
,
"enig_bot"
],
"tl_name"
:
"enig_bot"
},
],
"mergerule"
:
{
profile
:[
"silk_top"
],
laser
:
{
tl_name
:
"drill($1)-($2)"
,
regs
:
[
"(
\\
d+)-(
\\
d+)
\\
.drl$"
]
}
}
},
"Vivo"
:{
"step"
:
"cad"
,
...
...
This diff is collapsed.
Click to expand it.
ats/topcam/create_work.js
View file @
67fabe19
"use strict"
;
var
fs
=
require
(
"fs"
);
var
db
=
require
(
'topsin.database'
);
var
error
=
require
(
'topsin.error'
);
...
...
@@ -20,10 +19,8 @@ try {
if
(
query_1
.
lastError
().
isValid
()){
throw
query_1
.
lastError
().
text
()};
// 获取远程文件夹
console
.
log
(
1
);
var
samba
=
fs
.
listDir
(
"
\\\\
10.90.2.100
\\
samba"
,
1
);
console
.
log
(
2
);
throw
"tmp"
var
sambaDirs_1
=
[];
var
sambaFiles_1
=
[];
samba
.
forEach
(
function
(
v
)
{
...
...
This diff is collapsed.
Click to expand it.
ats/topcam/emai.js
View file @
67fabe19
let
mail
=
require
(
'topsin.mail'
);
let
error
=
require
(
'topsin.error'
);
var
mail
=
require
(
'topsin.mail'
);
var
error
=
require
(
'topsin.error'
);
var
err
=
mail
.
sendMail
({
host
:
'smtp.exmail.qq.com'
,
auth_method
:
mail
.
AuthMethod
.
LOGIN
,
// host:'smtp.exmail.qq.com',
// host:'cshas.ats.net',
host
:
"10.90.79.37"
,
port
:
"25"
,
// auth_method:mail.AuthMethod.LOGIN,
connection_type
:
mail
.
ConnectionType
.
TCP
,
from
:
'scott.sun@topibd.com'
,
password
:
'159482673Sun'
,
// user: "ferre.zhang@cn.ats.net",
// user:'scott.sun@topibd.com',
// password:'159482673Sun',
to
:
'scott.sun@topibd.com'
,
subject
:
'customer_code / job_name reading is ready!'
,
content
:
'customer_code / job_name reading is ready!'
...
...
@@ -14,3 +18,6 @@ var err = mail.sendMail({
if
(
err
.
isValid
())
{
print
(
err
.
text
());
}
This diff is collapsed.
Click to expand it.
public_script/SEC_DRC_analysis.js
View file @
67fabe19
...
...
@@ -492,13 +492,6 @@ try {
// 保存
if
(
/yes/ig
.
test
(
par
.
auto_save
)){
GEN
.
checkInout
({
job
:
job
,
mode
:
"out"
});
GEN
.
saveJob
({
job
:
job
});
GEN
.
checkInout
({
job
:
job
,
mode
:
"in"
});
GEN
.
closeJob
({
job
:
job
});}
else
{
GEN
.
checkInout
({
job
:
job
,
mode
:
"in"
})}
if
(
mode
===
"aimdfm"
)
{
...
...
This diff is collapsed.
Click to expand it.
public_script/scotttest.js
View file @
67fabe19
...
...
@@ -4,10 +4,22 @@ DESCRIPTION: ;
PARAMETER:
[
{
name : 'step',
title : 'step',
name : 'ring_size',
title : 'ring大小',
type : 'IntLineEdit',
property : {tool_tip : 'ring大小'},
},
{
name : 'line_size',
title : '优化线径值',
type : 'IntLineEdit',
property : {tool_tip : '优化线径值'},
},
{
name : 'step_fliter',
title : 'Step过滤',
type : 'LineEdit',
property : {tool_tip : '
目标step,默认是orig
'},
property : {tool_tip : '
unit
'},
},
{
name : 'auto_save',
...
...
@@ -24,16 +36,16 @@ PARAMETER:
]
VERSION_HISTORY:
V1.00 2020-0
9-01
Scott Sun
V1.00 2020-0
4-28
Scott Sun
1.新版本
HELP:
<html><body bgcolor="#DDECFE">
<font size="3" color="#003DB2"><p>功能简介</p></font>
<p>
标题
</p>
<p>
隔离环优化
</p>
<br>
<font size="3" color="#003DB2"><p>参数配置</p></font>
<p>
step信息
</p>
<p>
配置
</p>
<br>
<font size="3" color="#003DB2"><p>注意事项</p></font>
<p> 无 </p>
...
...
@@ -42,7 +54,10 @@ PARAMETER:
*/
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
console
.
log
(
"==============================>template"
);
console
.
log
(
"==============================>JTG_INN_neg_isolation_pad_optimization_aim"
);
/* question
?
*/
// 引入模块 包
var
$
=
require
(
'topcam.scriptfunc'
).
argv
();
var
fs
=
require
(
'fs'
);
...
...
@@ -50,100 +65,211 @@ const { padStart } = require('lodash');
var
_
=
require
(
'lodash'
);
var
mode
=
$
.
ikm
?
"topcam"
:
"aimdfm"
;
var
IKM
=
$
.
ikm
;
require
(
"topsin.genmath"
)
var
genMath
=
new
GenMath
();
if
(
IKM
==
undefined
)
{
IKM
=
require
(
'topcam.ikm6'
)(
$
)
}
var
GEN
=
$
.
gen
;
var
GUI
=
$
.
gui
||
{};
var
Job
=
$
.
job
||
$
.
job_name
;
var
JobId
=
$
.
job_id
;
var
db
=
$
.
db
||
IKM
.
db
var
db
=
$
.
db
||
IKM
.
db
;
var
PAR
=
{}
if
(
$
.
par
)
{
PAR
=
$
.
par
}
else
if
(
$
.
hasOwnProperty
(
'script_parameter'
)){
PAR
=
JSON
.
parse
(
$
.
script_parameter
);
}
if
(
$
.
par
)
{
PAR
=
$
.
par
}
else
if
(
$
.
hasOwnProperty
(
'script_parameter'
)){
PAR
=
JSON
.
parse
(
$
.
script_parameter
);
}
if
(
mode
===
"aimdfm"
)
{
var
database
=
require
(
"topsin.database"
);
database
.
addConnection
(
$
.
conf
.
database_conf
,
"DFM"
);
var
QDfm
=
database
.
query
(
"DFM"
);
$
.
QDfm
=
QDfm
;
if
(
$
.
conf
.
product_type
==
"aimdfm"
)
{
QDfm
.
updateRow
({
table
:
"pdm_aimdfm_task"
,
data
:
{
current_process_title
:
$
.
process_title
},
where
:
{
id
:
$
.
task_id
}
});
QDfm
.
updateRow
({
table
:
"pdm_aimdfm_task"
,
data
:
{
current_process_title
:
$
.
process_title
},
where
:
{
id
:
$
.
task_id
}
});
}
}
var
Status
=
'ok'
;
var
resultData
=
[];
var
par
=
PAR
;
var
default_par
=
{
step
:
"orig"
,
auto_save
:
"No"
,
units
:
"mm"
}
for
(
var
key
in
default_par
){
if
(
!
par
.
hasOwnProperty
(
key
)
||
par
[
key
]
==
""
){
par
[
key
]
=
default_par
[
key
]
}}
var
job
=
Job
;
try
{
if
(
_
.
isEmpty
(
job
)){
throw
"参数job不存在"
}
else
{
job
=
job
.
toLowerCase
()
}
var
par
=
PAR
;
var
default_par
=
{
// par默认参数?
step_fliter
:
"unit"
,
units
:
"mm"
,
auto_save
:
"no"
,
ring_size
:
200
,
line_size
:
200
}
for
(
var
key
in
default_par
){
// 设置默认属性
if
(
!
par
.
hasOwnProperty
(
key
)
||
par
[
key
]
==
""
){
par
[
key
]
=
default_par
[
key
]
}
}
var
par_props
=
[
"ring_size"
,
"line_size"
]
// par的必填参数
par_props
.
forEach
(
function
(
v
){
if
(
par
[
v
]
==
""
){
throw
"par props "
+
v
+
" err"
}
})
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
})
}
if
(
mode
==
"aimdfm"
){
if
(
GEN
.
checkInout
({
job
:
job
,
mode
:
"test"
})
!=
0
){
throw
"the job check"
}
else
{
GEN
.
checkInout
({
job
:
job
,
mode
:
"out"
})
}
}
if
(
mode
==
"aimdfm"
){
if
(
GEN
.
checkInout
({
job
:
job
,
mode
:
"test"
})
!=
0
){
throw
"the job check"
}
GEN
.
checkInout
({
job
:
job
,
mode
:
"out"
});
}
// 脚本开始
var
stepList
=
GEN
.
getStepList
({
job
:
job
})
stepList
=
stepList
.
filter
(
function
(
step
){
var
reg
=
new
RegExp
(
par
.
step
,
"ig"
)
return
reg
.
test
(
step
)
if
(
par
.
step_fliter
!=
""
){
var
step_reg
=
new
RegExp
(
par
.
step_fliter
)
stepList
=
stepList
.
filter
(
function
(
v
){
return
step_reg
.
test
(
v
)})
}
// 通过matrix中选择属性为negative&power_ground&inner的内层负片层
var
matrix
=
GEN
.
getMatrix
({
job
:
job
})
var
n_layers
=
Object
.
keys
(
matrix
).
sort
(
function
(
a
,
b
){
return
matrix
[
a
].
row
-
matrix
[
b
].
row
})
.
filter
(
function
(
key
){
var
val
=
matrix
[
key
]
return
val
.
layer_type
==
"power_ground"
&&
val
.
polarity
==
"negative"
&&
val
.
side
==
"inner"
&&
val
.
context
==
"board"
})
if
(
n_layers
.
length
==
0
){
throw
"can not find power_ground negative layer"
}
var
tmp1
=
"tmp_1"
,
tmp2
=
"tmp_2"
var
tmp_layers
=
[
tmp1
,
tmp2
];
stepList
.
forEach
(
function
(
step
){
GEN
.
openStep
({
job
:
job
,
name
:
step
})
GEN
.
clearLayers
();
//清除层显示
GEN
.
affectedLayer
({
mode
:
'all'
,
affected
:
'no'
});
//设置影响层全部不影响
GEN
.
COM
(
"sel_options,clear_mode=clear_after,display_mode=all_layers,area_inout=inside,area_select=select,select_mode=standard,area_touching_mode=exclude"
);
GEN
.
units
({
type
:
par
.
units
});
GEN
.
zoomHome
();
var
feas
=
GEN
.
getFeatures
({
job
:
job
,
step
:
step
,
layer
:
"tmp"
,
surface
:
1
,
units
:
"mm"
})
IKM
.
msg
(
featsToLimits
(
feas
))
GEN
.
openStep
({
job
:
job
,
name
:
step
})
GEN
.
units
({
type
:
par
.
units
})
GEN
.
affectedLayer
({
affected
:
'no'
,
mode
:
'all'
})
GEN
.
clearLayers
()
n_layers
.
forEach
(
function
(
layer
){
// 逐层制作,过滤选出 rect*,r*,s*,oval 属性的物件并移动到辅助层1;
tmp_layers
.
forEach
(
function
(
v
){
if
(
GEN
.
isLayerExists
({
job
:
job
,
layer
:
v
})){
GEN
.
deleteLayer
({
job
:
job
,
layer
:
v
})}
GEN
.
createLayer
({
job
:
job
,
layer
:
v
})
})
GEN
.
workLayer
({
name
:
layer
,
display_number
:
2
,
clear_before
:
'yes'
})
GEN
.
selectByFilter
({
include_syms
:
"rect*;r*;s*;oval*"
})
if
(
GEN
.
getSelectCount
()
>
0
){
GEN
.
selMoveOther
({
target_layer
:
tmp1
,
invert
:
'no'
,
dx
:
0
,
dy
:
0
,
size
:
0
})
// 复制辅助层1至辅助层2,将辅助层1上的物件修改为r1.2;
GEN
.
workLayer
({
name
:
tmp1
,
display_number
:
2
,
clear_before
:
'yes'
})
GEN
.
selAllFeat
()
GEN
.
selCopyOther
({
dest
:
'layer_name'
,
target_layer
:
tmp2
,
invert
:
'no'
,
dx
:
0
,
dy
:
0
,
size
:
0
})
GEN
.
selChangeSym
({
symbol
:
"r1.2"
})
// 使用参考选择reference select命令touch辅助层1,筛选出drl层上有隔离焊盘的孔;
GEN
.
workLayer
({
name
:
"drl"
,
display_number
:
2
,
clear_before
:
'yes'
})
if
(
!
GEN
.
isLayerExists
({
job
:
job
,
layer
:
"pth"
})){
GEN
.
selectByFilter
({
attribute
:[{
attribute
:
'.drill'
,
option
:
'plated'
}]})
if
(
GEN
.
getSelectCount
()
>
0
)
{
GEN
.
selCopyOther
({
dest
:
'layer_name'
,
target_layer
:
'pth'
,
invert
:
'no'
,
dx
:
0
,
dy
:
0
,
size
:
0
})}
}
if
(
!
GEN
.
isLayerExists
({
job
:
job
,
layer
:
"np"
})){
GEN
.
selectByFilter
({
attribute
:[{
attribute
:
'.drill'
,
option
:
'non_plated'
}]})
if
(
GEN
.
getSelectCount
()
>
0
)
{
GEN
.
selCopyOther
({
dest
:
'layer_name'
,
target_layer
:
'np'
,
invert
:
'no'
,
dx
:
0
,
dy
:
0
,
size
:
0
})}
}
if
(
GEN
.
isLayerExists
({
job
:
job
,
layer
:
"pth"
})){
GEN
.
workLayer
({
name
:
"pth"
,
display_number
:
2
,
clear_before
:
'yes'
})
GEN
.
selRefFeat
({
layers
:
tmp1
,
use
:
'filter'
,
mode
:
'touch'
})
// copy这些选中的孔到辅助层2,resize设置为400um; par.ring_size
if
(
GEN
.
getSelectCount
()
>
0
){
GEN
.
selCopyOther
({
dest
:
'layer_name'
,
target_layer
:
tmp2
,
invert
:
'no'
,
dx
:
0
,
dy
:
0
,
size
:
par
.
ring_size
})
}
}
if
(
GEN
.
isLayerExists
({
job
:
job
,
layer
:
"np"
})){
GEN
.
workLayer
({
name
:
"np"
,
display_number
:
2
,
clear_before
:
'yes'
})
GEN
.
selRefFeat
({
layers
:
tmp1
,
use
:
'filter'
,
mode
:
'touch'
})
// copy这些选中的孔到辅助层2,resize设置为400um; par.ring_size
if
(
GEN
.
getSelectCount
()
>
0
){
GEN
.
selCopyOther
({
dest
:
'layer_name'
,
target_layer
:
tmp2
,
invert
:
'no'
,
dx
:
0
,
dy
:
0
,
size
:
par
.
ring_size
+
50
})
}
}
GEN
.
workLayer
({
name
:
tmp2
,
display_number
:
2
,
clear_before
:
'yes'
})
var
del_layer
=
tmp2
+
"+++"
GEN
.
runSingleDfm
({
chklist
:
'valor_dfm_nfpr'
,
params
:
{
pp_layer
:
tmp2
,
pp_delete
:
'Duplicate'
,
pp_work
:
'Features'
,
pp_drill
:
'PTH
\
;NPTH
\
;Via'
,
pp_remove_mark
:
'Remove'
}
})
GEN
.
deleteLayer
({
job
:
job
,
layer
:
del_layer
})
// 将辅助层2上的物件move至对应的内层负片层
GEN
.
workLayer
({
name
:
tmp2
,
display_number
:
2
,
clear_before
:
'yes'
})
GEN
.
selAllFeat
()
GEN
.
selCopyOther
({
dest
:
'layer_name'
,
target_layer
:
layer
,
invert
:
'no'
,
dx
:
0
,
dy
:
0
,
size
:
0
})
}
})
})
GEN
.
deleteLayer
({
job
:
job
,
layer
:
tmp_layers
})
// 逐层分析内层负片层的物件,如存在小于200um的线,则将线宽优化至200um。 par.line_size
stepList
.
forEach
(
function
(
step
){
GEN
.
openStep
({
job
:
job
,
name
:
step
})
GEN
.
affectedLayer
({
affected
:
'no'
,
mode
:
'all'
})
GEN
.
clearLayers
()
GEN
.
selClearFeature
()
n_layers
.
forEach
(
function
(
layer
){
GEN
.
workLayer
({
name
:
layer
,
display_number
:
2
,
clear_before
:
'yes'
})
var
syms
=
GEN
.
getLayerSymsHist
({
job
:
job
,
step
:
step
,
layer
:
layer
})
var
change_syms
=
[]
for
(
var
key
in
syms
){
var
v
=
syms
[
key
]
if
(
v
.
size
&&
v
.
size
<
par
.
line_size
){
change_syms
.
push
(
key
)
}
}
GEN
.
selectByFilter
({
feat_types
:
"line"
,
include_syms
:
change_syms
.
join
(
";"
)})
if
(
GEN
.
getSelectCount
()
>
0
){
GEN
.
selDelete
()}
})
GEN
.
closeStep
()
})
GEN
.
deleteLayer
({
job
:
job
,
layer
:
tmp_layers
})
// 保存
if
(
/yes/ig
.
test
(
par
.
auto_save
)){
GEN
.
checkInout
({
job
:
job
,
mode
:
"out"
});
GEN
.
saveJob
({
job
:
job
});
GEN
.
checkInout
({
job
:
job
,
mode
:
"in"
});
GEN
.
closeJob
({
job
:
job
});}
else
{
GEN
.
checkInout
({
job
:
job
,
mode
:
"in"
})}
if
(
/yes/ig
.
test
(
par
.
auto_save
)){
GEN
.
checkInout
({
job
:
job
,
mode
:
"out"
})
// 结束保存料号 关闭料号
GEN
.
saveJob
({
job
:
job
});
GEN
.
checkInout
({
job
:
job
,
mode
:
"in"
})
GEN
.
closeJob
({
job
:
job
})
}
else
{
GEN
.
checkInout
({
job
:
job
,
mode
:
"in"
})
}
console
.
log
(
"======================== JTG_INN_neg_isolation_pad_optimization_aim end"
);
if
(
mode
===
"aimdfm"
)
{
$
.
QDfm
.
updateRow
({
table
:
"pdm_aimdfm_task"
,
data
:
{
progress
:
33.33
},
where
:
{
id
:
$
.
task_id
}});
if
(
GEN
.
hasError
())
{
Status
=
'error'
;
resultData
.
push
({
type
:
"error"
,
title
:
"GEN错误!"
,
detail
:
[{
desc
:
_
.
join
(
GEN
.
STATUS
,
"
\n
"
)
}]
});
return
{
status
:
Status
,
result_data
:
resultData
};
}
else
{
resultData
.
push
({
type
:
"info"
,
title
:
"操作完成, 请注意检查!"
});
return
{
status
:
Status
,
result_data
:
resultData
};
}
}
else
{
return
"Done"
}
$
.
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
};
}
}
else
{
return
"Done"
}
}
catch
(
e
)
{
IKM
.
msg
(
_
.
join
(
GEN
.
STATUS
,
"
\n
"
));
IKM
.
msg
(
e
);
Status
=
'error'
;
IKM
.
msg
(
_
.
join
(
GEN
.
STATUS
,
"
\n
"
))
IKM
.
msg
(
e
)
Status
=
'error'
;
resultData
.
push
({
type
:
"error"
,
title
:
"脚本执行出错!"
,
detail
:
[{
desc
:
_
.
toString
(
e
)}]});
return
(
mode
===
"aimdfm"
)
?
{
status
:
Status
,
result_data
:
resultData
}
:
"Error"
;
}
\ No newline at end of file
function
featsToLimits
(
feats
)
{
feats
.
forEach
(
function
(
item
)
{
if
(
item
.
feats
)
{
var
polygon
=
genMath
.
profile2Polygon
(
item
.
feats
.
join
(
"
\n
"
),
0
)
var
res
=
polygon
.
reduce
(
function
(
a
,
b
){
a
.
xmin
=
b
.
x
>
a
.
xmin
?
a
.
xmin
:
b
.
x
;
a
.
ymin
=
b
.
y
>
a
.
ymin
?
a
.
ymin
:
b
.
y
;
a
.
xmax
=
b
.
x
<
a
.
xmax
?
a
.
xmax
:
b
.
x
;
a
.
ymax
=
b
.
y
<
a
.
ymax
?
a
.
ymax
:
b
.
y
;
return
a
},
{
xmin
:
polygon
[
0
].
x
,
ymin
:
polygon
[
0
].
y
,
xmax
:
polygon
[
0
].
x
,
ymax
:
polygon
[
0
].
y
})
res
.
xsize
=
Math
.
abs
(
res
.
xmax
-
res
.
xmin
)
res
.
ysize
=
Math
.
abs
(
res
.
ymax
-
res
.
ymin
)
res
.
xc
=
res
.
xmin
+
res
.
xsize
/
2
res
.
yc
=
res
.
ymin
+
res
.
ysize
/
2
item
.
limits
=
res
}
})
return
feats
}
This diff is collapsed.
Click to expand it.
public_script/silkScreenOptimize.js
View file @
67fabe19
...
...
@@ -178,17 +178,17 @@ try {
var
workstep
=
getWorkStep
()
if
(
!
Array
.
isArray
(
workstep
)){
throw
"工作step错误"
}
//
var err = createCoverLayer({workstep:workstep}) // 创建套层
//
if (err) {throw err}
//
GEN.PAUSE("createCoverLayer end; please check")
var
err
=
createCoverLayer
({
workstep
:
workstep
})
// 创建套层
if
(
err
)
{
throw
err
}
GEN
.
PAUSE
(
"createCoverLayer end; please check"
)
//
var err = ssFrameSeparate({workstep:workstep}) // 分离文字和文字框
//
if (err) {throw err}
//
GEN.PAUSE("ssFrameSeparate end; please check")
var
err
=
ssFrameSeparate
({
workstep
:
workstep
})
// 分离文字和文字框
if
(
err
)
{
throw
err
}
GEN
.
PAUSE
(
"ssFrameSeparate end; please check"
)
//
var err = slBoxOptimize({workstep:workstep}) // 文字框优化
//
if (err) {throw err}
//
GEN.PAUSE("slBoxOptimize end; please check")
var
err
=
slBoxOptimize
({
workstep
:
workstep
})
// 文字框优化
if
(
err
)
{
throw
err
}
GEN
.
PAUSE
(
"slBoxOptimize end; please check"
)
var
err
=
slOptimize
({
workstep
:
workstep
})
// 文字优化
if
(
err
)
{
throw
err
}
...
...
This diff is collapsed.
Click to expand it.
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