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
1218d449
Commit
1218d449
authored
4 years ago
by
Scott Sun
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
scott
parent
b22f98b8
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
207 additions
and
137 deletions
+207
-137
ATS_AIM_customer_data_analysis.js
ats/topcam/ATS_AIM_customer_data_analysis.js
+39
-15
ATS_AIM_data_format.js
ats/topcam/ATS_AIM_data_format.js
+21
-14
ATS_AIM_input_data.js
ats/topcam/ATS_AIM_input_data.js
+8
-8
config_ats.js
ats/topcam/config_ats.js
+1
-1
scotttest.js
public_script/scotttest.js
+138
-99
No files found.
ats/topcam/ATS_AIM_customer_data_analysis.js
View file @
1218d449
...
...
@@ -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
]
...
...
@@ -1005,7 +1008,7 @@ try {
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
!=
""
){
...
...
@@ -1132,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
;
...
...
@@ -1265,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
){
...
...
@@ -1274,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
({
...
...
@@ -2034,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
=
""
...
...
@@ -2043,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 @
1218d449
...
...
@@ -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
==
""
){
...
...
@@ -229,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
}
...
...
@@ -290,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层
...
...
@@ -301,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
)
{
...
...
@@ -317,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失败"
}
}
...
...
@@ -336,7 +336,6 @@ try {
$
.
QDfm
.
updateRow
({
table
:
"pdm_aimdfm_task"
,
data
:
{
result_severity
:
"format ok"
,
progress
:
60
},
where
:
{
id
:
$
.
task_id
}
...
...
@@ -669,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})
...
...
@@ -683,16 +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.affectedLayer({affected:'no',mode:'all'})
})
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 @
1218d449
...
...
@@ -89,7 +89,7 @@ var resultData = [];
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({
...
...
@@ -164,8 +164,8 @@ 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
,
[])
...
...
@@ -198,7 +198,7 @@ try {
// 分析料号文件 得到料号导入信息 导入类型
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
;
// 是否成功导入
...
...
@@ -301,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
)){
...
...
@@ -338,7 +338,7 @@ try {
}
})
}
GEN
.
closeStep
()
GEN
.
checkInout
({
job
:
job
,
mode
:
"out"
})
// 结束保存料号 关闭料号
GEN
.
saveJob
({
job
:
job
});
GEN
.
checkInout
({
job
:
job
,
mode
:
"in"
})
...
...
@@ -356,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"
,
...
...
@@ -395,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
})
}
...
...
@@ -535,6 +534,7 @@ function script_info(props){ // result_severity progress
}
}
function
decompression
(
path
,
zips
)
{
var
files
=
fs
.
listDir
(
path
)
var
count
=
0
;
...
...
This diff is collapsed.
Click to expand it.
ats/topcam/config_ats.js
View file @
1218d449
...
...
@@ -679,6 +679,7 @@
GEN
.
COM
(
"tools_set,layer="
+
layer
+
",thickness=0,user_params=,slots=by_length"
)
}
})
GEN
.
saveJob
({
job
:
job
});
}
}
]
...
...
@@ -964,7 +965,6 @@
],
"mergerule"
:
{
profile
:[
"silk_top"
],
drill
:[
"(
\\
d+)-(
\\
d+)
\\
.drl$"
,
"
\\
.d(
\\
d+)$"
],
laser
:
{
tl_name
:
"drill($1)-($2)"
,
regs
:
[
"(
\\
d+)-(
\\
d+)
\\
.drl$"
]
...
...
This diff is collapsed.
Click to expand it.
public_script/scotttest.js
View file @
1218d449
...
...
@@ -4,16 +4,22 @@ DESCRIPTION: ;
PARAMETER:
[
{
name : 'step',
title : '操作step',
type : 'LineEdit',
property : {tool_tip : '操作step,默认是net'},
name : 'ring_size',
title : 'ring大小',
type : 'IntLineEdit',
property : {tool_tip : 'ring大小'},
},
{
name : 'line_size',
title : '优化线径值',
type : 'IntLineEdit',
property : {tool_tip : '优化线径值'},
},
{
name : '
cutting_marign
',
title : '
切除profile外数值
',
name : '
step_fliter
',
title : '
Step过滤
',
type : 'LineEdit',
property : {tool_tip : '
切除profile外数值,默认是0.2mm
'},
property : {tool_tip : '
unit
'},
},
{
name : 'auto_save',
...
...
@@ -30,16 +36,16 @@ PARAMETER:
]
VERSION_HISTORY:
V1.00 2020-04-2
0
Scott Sun
V1.00 2020-04-2
8
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>
切除值
</p>
<p>
配置
</p>
<br>
<font size="3" color="#003DB2"><p>注意事项</p></font>
<p> 无 </p>
...
...
@@ -48,7 +54,10 @@ PARAMETER:
*/
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
console
.
log
(
"==============================>删除板外"
);
console
.
log
(
"==============================>JTG_INN_neg_isolation_pad_optimization_aim"
);
/* question
?
*/
// 引入模块 包
var
$
=
require
(
'topcam.scriptfunc'
).
argv
();
var
fs
=
require
(
'fs'
);
...
...
@@ -60,7 +69,7 @@ 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
...
...
@@ -87,108 +96,139 @@ var resultData = [];
try
{
var
par
=
PAR
;
var
default_par
=
{
step
:
"net"
,
cutting_marign
:
"0.2mm"
,
auto_save
:
"No"
,
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
]
}
}
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
)
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
=
"08ha0010hq0a0"
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"
}
GEN
.
checkInout
({
job
:
job
,
mode
:
"out"
});
}
// 通过matrix获取board层
// 脚本开始
var
stepList
=
GEN
.
getStepList
({
job
:
job
})
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
board_layers
=
Object
.
keys
(
matrix
).
reduce
(
function
(
a
,
b
){
if
(
matrix
[
b
].
context
==
"board"
){
a
.
push
(
b
)
}
return
a
},[])
var
all_layers
=
Object
.
keys
(
matrix
)
var
outline_layer
=
[
"gko"
,
"gm1"
,
"ol"
]
outline_layer
=
outline_layer
.
filter
(
function
(
v
){
return
all_layers
.
indexOf
(
v
)
>=
0
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"
})
// 影响board层
var
steplist
=
GEN
.
getStepList
({
job
:
job
})
steplist
=
steplist
.
filter
(
function
(
v
){
var
tmpreg
=
new
RegExp
(
par
.
step
,
"ig"
)
return
tmpreg
.
test
(
v
)
})
steplist
.
forEach
(
function
(
step
){
GEN
.
openStep
({
job
:
job
,
name
:
step
})
GEN
.
units
({
type
:
"mm"
})
var
outline_tmp
=
"outline_tmp"
// 创建outline参考层
if
(
GEN
.
isLayerExists
({
job
:
job
,
layer
:
outline_tmp
})){
GEN
.
deleteLayer
({
job
:
job
,
layer
:
outline_tmp
})
}
GEN
.
COM
(
"profile_to_rout,layer="
+
outline_tmp
+
",width=1"
)
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
.
units
({
type
:
par
.
units
})
GEN
.
affectedLayer
({
affected
:
'no'
,
mode
:
'all'
})
GEN
.
clearLayers
()
// 切除profile以外0.2mm(cutting_marign)物件
board_layers
.
forEach
(
function
(
layer
){
if
(
outline_layer
.
indexOf
(
layer
)
<
0
){
GEN
.
affectedLayer
({
affected
:
"no"
,
mode
:
"all"
})
// GEN.workLayer({name:layer,display_number:1,clear_before:'yes'});
// GEN.clipArea({layers_mode:'affected_layers',area:'profile',inout:'outside',margin:0,contour_cut:'no'});
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
({
profile
:
"out"
})
// GEN.selRefFeat({layers:outline_tmp,use:'filter',mode:'include'});
if
(
GEN
.
getSelectCount
()
>
0
){
GEN
.
selDelete
()}
GEN
.
COM
(
"clip_area_strt"
)
GEN
.
COM
(
"clip_area_end,layers_mode=affected_layers,layer=,area=profile,area_type=rectangle,inout=outside,contour_cut=yes,margin=0,feat_types=line
\
;pad
\
;surface
\
;arc
\
;text"
)
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
})}
}
// var outline_ref = 'ol_tl_tmp';
// var tmp_work_layer = '_tmp_work_layer';
// if(GEN.isLayerExists({job:job,layer:tmp_work_layer})){
// GEN.deleteLayer({job:job,layer:[tmp_work_layer],step:step})
// }
// if(GEN.isLayerExists({job:job,layer:outline_ref})){
// GEN.deleteLayer({job:job,layer:[outline_ref],step:step})
// }
// GEN.createLayer({job:job,layer:tmp_work_layer,conext:'misc',type:'document',delete_exists:"yes"})
// GEN.createLayer({job:job,layer:outline_ref,conext:'misc',type:'document',delete_exists:"yes"})
// GEN.workLayer({name:outline_tmp,display_number:2,clear_before:'yes'})
// GEN.selCopyOther({dest:'layer_name',target_layer:outline_ref,invert:'no',dx:0,dy:0,size:0})
// GEN.affectedLayer({affected:'yes',layer:[outline_ref],clear_before:'yes'});
// GEN.COM('sel_resize',{size:200,corner_ctl:'no'});
// GEN.workLayer({name:layer,display_number:2,clear_before:'yes'})
// GEN.selRefFeat({layers:outline_ref,use:'filter',mode:'cover'});
// if ( GEN.getSelectCount() > 0 ) {
// GEN.selCopyOther({dest:'layer_name',target_layer:tmp_work_layer,invert:'no',dx:0,dy:0,size:0});
// GEN.affectedLayer({affected:'yes',mode:'single',layer:tmp_work_layer,clear_before:'yes'});
// GEN.COM('sel_all_feat');
// GEN.selChangeSym({symbol:'r1'});
// GEN.affectedLayer({affected:'yes',mode:'single',layer:outline_ref,clear_before:'yes'});
// GEN.COM('sel_all_feat');
// GEN.selChangeSym({symbol:'r2'});
// GEN.affectedLayer({affected:'yes',mode:'single',layer:tmp_work_layer,clear_before:'yes'});
// GEN.selRefFeat({layers:outline_ref,use:'filter',mode:'cover'});
// GEN.selReverse();
// if ( GEN.getSelectCount() > 0 ){GEN.selDelete() };
// GEN.affectedLayer({affected:'yes',mode:'single',layer:layer,clear_before:'yes'});
// GEN.selRefFeat({layers:tmp_work_layer,use:'filter',mode:'include'});
// if ( GEN.getSelectCount() > 0 ){GEN.selDelete() };
// }
// GEN.deleteLayer({job:job,layer:[outline_ref,tmp_work_layer]});
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
.
deleteLayer
({
job
:
job
,
layer
:[
outline_tmp
]})
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
)){
...
...
@@ -199,6 +239,7 @@ try {
}
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"
,
...
...
@@ -231,5 +272,3 @@ try {
resultData
.
push
({
type
:
"error"
,
title
:
"脚本执行出错!"
,
detail
:
[{
desc
:
_
.
toString
(
e
)}]});
return
(
mode
===
"aimdfm"
)
?
{
status
:
Status
,
result_data
:
resultData
}
:
"Error"
;
}
\ No newline at end of file
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