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
861f24fb
Commit
861f24fb
authored
Feb 25, 2021
by
Scott Sun
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
scott
parent
09227f67
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
1719 additions
and
344 deletions
+1719
-344
ATS_AIM_customer_data_analysis.js
ats/topcam/ATS_AIM_customer_data_analysis.js
+174
-94
ATS_AIM_data_format.js
ats/topcam/ATS_AIM_data_format.js
+43
-8
ATS_AIM_data_input.js
ats/topcam/ATS_AIM_data_input.js
+7
-5
config_ats.js
ats/topcam/config_ats.js
+7
-17
scotttest.js
public_script/scotttest.js
+1365
-80
ss_op.js
public_script/ss_op.js
+120
-122
template.js
template.js
+3
-18
script_javascript_driver.jsc
驱动/script_javascript_driver.jsc
+0
-0
No files found.
ats/topcam/ATS_AIM_customer_data_analysis.js
View file @
861f24fb
...
...
@@ -232,7 +232,6 @@ try {
script_info
({
msg
:
"Upload matrix"
,
result_severity
:
"info"
})
global
.
_ERRORMAG
=
"Error-Upload matrix"
;
script_info
({
progress
:
65
})
var
matrix
=
UPLOAD_LAYER_MATRIX
({
job
:
job
})
// 分析matrix 获得分析后的matrix信息
GEN
.
openStep
({
job
:
job
,
name
:
pcs_step
})
...
...
@@ -242,14 +241,23 @@ try {
GEN
.
affectedLayer
({
affected
:
'no'
,
mode
:
'all'
})
GEN
.
workLayer
({
name
:
v
.
odb_name
,
display_number
:
2
,
clear_before
:
'yes'
})
GEN
.
selClearFeature
()
GEN
.
selAllFeat
()
if
(
GEN
.
getSelectCount
()
>
0
){
// unSelect()
// if(GEN.getSelectCount() > 0){
// GEN.COM("cur_atr_reset")
// GEN.COM("cur_atr_set,attribute=.drill,option=via")
// GEN.COM("sel_change_atr,mode=add")
// }
// GEN.selAllFeat()
var
syms
=
GEN
.
getLayerSymsHist
({
job
:
job
,
step
:
pcs_step
,
layer
:
v
.
odb_name
});
// var getLayerSymsHist = $.gen.getLayerSymsHist({job:'demo',step:'panel',layer:'l2',options:'break_sr',units:'mm'});
var
include_syms
=
[];
for
(
var
key
in
syms
)
{
var
info
=
syms
[
key
];
if
(
info
.
size
>
5.9055
)
{
include_syms
.
push
(
key
)
}
}
GEN
.
selectByFilter
({
include_syms
:
include_syms
.
join
(
"
\\
;"
)})
if
(
GEN
.
getSelectCount
()
>
0
){
GEN
.
COM
(
"cur_atr_reset"
)
GEN
.
COM
(
"cur_atr_set,attribute=.drill,option=plated"
)
GEN
.
COM
(
"sel_change_atr,mode=add"
)
}
GEN
.
clearLayers
()
GEN
.
selClearFeature
()
...
...
@@ -501,6 +509,7 @@ try {
script_info
({
msg
:
"PN analysis"
})
global
.
_ERRORMAG
=
"Error-PN analysis"
;
var
config
=
{
jobInfo
:
{
layer_count
:
[
"signal"
,
"power_ground"
],
// Board属性的signal或者power_ground层
...
...
@@ -539,13 +548,15 @@ try {
}
}
console
.
log
(
"===============================> 2analysis_obj"
)
// 分析料号info
var
jobInfo
=
{}
Object
.
keys
(
config
.
jobInfo
).
forEach
(
function
(
key
){
var
props
=
config
.
jobInfo
[
key
];
if
(
props
){
try
{
console
.
log
(
"-------------"
+
key
+
"-----------"
);
if
(
props
.
hasOwnProperty
(
"api"
)
&&
props
.
hasOwnProperty
(
"props"
)){
jobInfo
[
key
]
=
analysis_obj
[
"analysis_"
+
props
.
api
](
props
.
props
)
}
else
if
(
props
.
only_value
){
...
...
@@ -554,11 +565,12 @@ try {
jobInfo
[
key
]
=
analysis_obj
[
"analysis_"
+
key
](
props
)
}
}
catch
(
e
)
{
IKM
.
msg
(
e
)
console
.
log
(
"========================================error:"
);
jobInfo
[
key
]
=
"_error"
}
}
})
})
;
console
.
log
(
"===================================> 3 jobinfo"
)
// 过滤掉料号信息的 _todo 和 _error
...
...
@@ -582,7 +594,7 @@ try {
})
console
.
log
(
"=================================> 5 save drill info"
)
script_info
({
msg
:
"Drill layer analysis"
})
global
.
_ERRORMAG
=
"Error-Drill layer analysis"
;
...
...
@@ -606,10 +618,15 @@ try {
var
step
=
item
.
name
;
if
(
GEN
.
isStepExists
({
job
:
job
,
step
:
step
})){
GEN
.
openStep
({
job
:
job
,
name
:
step
})
drillLayers
.
forEach
(
function
(
layer
){
var
layer
=
layer
.
name
;
if
(
!
GEN
.
isLayerEmpty
({
job
:
job
,
step
:
step
,
layer
:
layer
})){
var
mv_layer
=
moveSlotDrls
({
job
:
job
,
step
:
step
,
layer
:
layer
})
GEN
.
COM
(
"tools_set,layer="
+
layer
+
",slots=by_length"
)
GEN
.
COM
(
"tools_merge_ex,layer="
+
layer
+
",mode=merge"
)
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
;
...
...
@@ -640,6 +657,10 @@ try {
}
}
}
if
(
mv_layer
)
{
GEN
.
workLayer
({
name
:
mv_layer
,
display_number
:
2
,
clear_before
:
'yes'
})
GEN
.
selCopyOther
({
dest
:
'layer_name'
,
target_layer
:
layer
,
invert
:
'no'
,
dx
:
0
,
dy
:
0
,
size
:
0
})
}
}
})
GEN
.
closeStep
()
...
...
@@ -654,6 +675,7 @@ try {
})
});
var
seq_index
=
1
;
// 钻孔管理器信息处理
Object
.
keys
(
drill_tool_info
).
forEach
(
function
(
layer
){
var
datalist
=
[]
var
tool_num
=
1
;
...
...
@@ -662,6 +684,9 @@ try {
var
drill_type
=
item
.
type
if
(
matrix
[
layer
].
type
==
"laser_drill"
&&
/^
[^\d]
+
(\d
+
)
-
(\d
+
)[^\d]?
$/
.
test
(
layer_name
)){
drill_type
=
"laser"
if
(
Number
(
item
.
drill_size
)
>=
150
){
drill_type
=
"plated"
}
var
info_drilll
=
/^
[^\d]
+
(\d
+
)
-
(\d
+
)[^\d]?
$/
.
exec
(
layer_name
);
layer_name
=
"l"
+
info_drilll
[
1
]
+
"-"
+
info_drilll
[
2
];
}
else
if
(
layer_name
===
"ftdrill"
){
...
...
@@ -710,7 +735,8 @@ try {
});
})
})
console
.
log
(
"=============================> 6 set smd bga"
)
script_info
({
msg
:
"SMD&BGA create"
})
global
.
_ERRORMAG
=
"Error-SMD&BGA create"
;
...
...
@@ -757,10 +783,7 @@ try {
// var symbols_test = GEN.getLayerSymsHist({job:job,step:step,layer:layer},true);
// GEN.INFO({units:"mm", entity_type:'layer', entity_path:job+'/'+step+'/'+layer, data_type:'SYMS_HIST'});
// GEN.INFO_RESULT
// exportInfo({
// layer:layer,
// INFO_RESULT: GEN.INFO_RESULT
// })
// var symbols_tmp = GEN.getLayerSymsHist({job:job,step:step,layer:layer})
// var syms = Object.keys(symbols_tmp)
// var filter_syms = syms.filter(function(item){
...
...
@@ -885,7 +908,6 @@ try {
// }
script_info
({
msg
:
"Signal layer analysis"
})
global
.
_ERRORMAG
=
"Error-Signal layer analysis"
;
script_info
({
progress
:
85
})
stepList
.
forEach
(
function
(
step
){
GEN
.
openStep
({
job
:
job
,
name
:
step
})
...
...
@@ -902,13 +924,14 @@ try {
if
(
GEN
.
isLayerExists
({
job
:
job
,
layer
:
tmp_area_layer
})){
GEN
.
deleteLayer
({
job
:
job
,
layer
:[
tmp_area_layer
]})
}
GEN
.
copyLayer
({
source_job
:
job
,
source_step
:
step
,
source_layer
:
tmp_gold_info
[
layer_gold_type
],
dest_layer
:
tmp_area_layer
,
mode
:
'replace'
,
invert
:
'no'
});
GEN
.
COM
(
"clip_area_strt"
)
GEN
.
COM
(
"clip_area_end,layers_mode=layer_name,layer="
+
tmp_area_layer
+
",area=profile,area_type=rectangle,inout=outside,contour_cut=yes,margin=0,feat_types=line
\
;pad
\
;surface
\
;arc
\
;text"
)
// var tmp_info = GEN.copperArea({layer1:tmp_gold_info[layer_gold_type],resolution_value:1})
// var tmp_info = GEN.exposedArea({layer1:item.signalL,mask1:tmp_gold_info[layer_gold_type],resolution_value:1})
var
tmp_info
=
GEN
.
exposedArea
({
layer1
:
item
.
signalL
,
mask1
:
tmp_gold_info
[
layer_gold_type
],
resolution_value
:
1
})
var
tmp_data
=
{}
var
tmp_data
=
{}
;
if
(
layer_gold_type
==
"top"
)
{
tmp_data
.
sf_area_ref_layer_front
=
tmp_gold_info
[
layer_gold_type
]
tmp_data
.
sf_area_gold_area_front
=
tmp_info
.
area
...
...
@@ -990,7 +1013,7 @@ try {
}
})
GEN
.
clearLayers
()
GEN
.
affectedLayer
({
affected
:
'no'
,
mode
:
'all'
})
GEN
.
affectedLayer
({
affected
:
'no'
,
mode
:
'all'
})
;
console
.
log
(
"==================================> Drill analysis"
)
...
...
@@ -1007,6 +1030,7 @@ try {
return
{
layer
:
v
,
symbol
:
symbol
,
start
:
tmp_matrix
[
v
][
"drl_start"
],
end
:
tmp_matrix
[
v
][
"drl_end"
]}
})
var
drillRes
=
analysisDrill
(
drillToSignals
,
step
)
// 钻孔分析结果
drillRes
.
forEach
(
function
(
item
){
save_layerinfo
({
...
...
@@ -1020,6 +1044,19 @@ try {
})
console
.
log
(
"==================================> chk signals analysis"
)
// 删除线路层的外形线
if
(
GEN
.
isLayerExists
({
job
:
job
,
layer
:
"out_rout"
})){
GEN
.
deleteLayer
({
job
:
job
,
layer
:
"out_rout"
})}
GEN
.
units
({
type
:
"mm"
})
GEN
.
COM
(
"profile_to_rout,layer=out_rout,width=1"
)
GEN
.
units
({
type
:
"inch"
})
GEN
.
affectedLayer
({
affected
:
'no'
,
mode
:
'all'
})
signalLayers
.
forEach
(
function
(
signal
){
GEN
.
workLayer
({
name
:
signal
,
display_number
:
2
,
clear_before
:
'yes'
})
GEN
.
selRefFeat
({
layers
:
'out_rout'
,
use
:
'filter'
,
mode
:
'touch'
})
if
(
GEN
.
getSelectCount
()
>
0
)
{
GEN
.
selDelete
()}
})
// 创建chklist并运行 如果chklist存在先删除
// var tmpitem = {
...
...
@@ -1834,7 +1871,7 @@ function analysis(props){
return
"_todo"
}
T_m_p
.
prototype
.
analysis_milling_length_card
=
function
(){
// todo
var
allStep
=
[
this
.
pcs_step
,
this
.
array_step
]
var
allStep
=
[
this
.
pcs_step
,
this
.
array_step
]
.
filter
(
function
(
v
){
return
v
})
var
res
=
0
var
that
=
this
;
console
.
log
(
"============analysis_milling_length_card============="
);
...
...
@@ -1912,7 +1949,7 @@ function analysis(props){
if
(
ret
==
"no"
&&
hasComp
==
false
)
{
var
mOuters
=
this
.
matrixInfo
.
mOuters
// signalL solderL(null)
var
job_tmp
=
this
.
job
GEN
.
openStep
({
job
:
job_tmp
,
name
:
this
.
array_
step
})
GEN
.
openStep
({
job
:
job_tmp
,
name
:
step
})
GEN
.
clearLayers
()
mOuters
.
forEach
(
function
(
outer_layer
){
if
(
outer_layer
.
solderL
){
...
...
@@ -2307,8 +2344,9 @@ function analysisChkAttr(par) {
return
hash
}
function
analysisDrill
(
par
,
step
){
// [{
// "layer": "ftdrill2-3l",
// "layer": "
ftdrill2-3l",
// "symbol": "r7.874",
// "start": "l2",
// "end": "l3"
...
...
@@ -2333,81 +2371,82 @@ function analysisDrill(par, step){
GEN
.
affectedLayer
({
affected
:
"no"
,
mode
:
"all"
})
GEN
.
selClearFeature
();
[
drill
.
start
,
drill
.
end
].
forEach
(
function
(
item
,
i
){
GEN
.
workLayer
({
name
:
item
,
display_number
:
1
,
clear_before
:
"yes"
})
GEN
.
selClearFeature
();
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
.
COM
(
"sel_ref_feat,layers="
+
tmplayer
+
",use=filter,mode=touch,pads_as=shape,f_types=pad,polarity=positive
\
;negative,include_syms=,exclude_syms="
)
// GEN.selRefFeat({layers:tmplayer, use:"filter",mode:"touch"})
GEN
.
COM
(
"filter_reset,filter_name=popup"
)
if
(
GEN
.
getSelectCount
()
>
0
){
var
res
=
999
;
if
(
GEN
.
isLayerExists
({
job
:
job
,
layer
:
"temp"
})){
GEN
.
deleteLayer
({
job
:
job
,
layer
:[
"temp"
]})}
if
(
GEN
.
isLayerExists
({
job
:
job
,
layer
:
"temp+++"
})){
GEN
.
deleteLayer
({
job
:
job
,
layer
:[
"temp+++"
]})}
GEN
.
selCopyOther
({
dest
:
'layer_name'
,
target_layer
:
'temp'
,
invert
:
'no'
,
dx
:
0
,
dy
:
0
,
size
:
0
})
GEN
.
workLayer
({
name
:
"temp"
,
display_number
:
1
,
clear_before
:
"yes"
})
// GEN.COM("sel_ref_feat,layers="+item+",use=filter,mode=touch,pads_as=shape,f_types=surface,polarity=positive\;negative,include_syms=,exclude_syms=")
// if(GEN.getSelectCount()>0){GEN.selDelete()}
GEN
.
COM
(
"chklist_single,action=valor_dfm_nfpr,show=yes"
)
GEN
.
COM
(
"chklist_cupd,chklist=valor_dfm_nfpr,nact=1,params=((pp_layer=temp)(pp_delete=Duplicate)(pp_work=Features)(pp_drill=PTH
\
;NPTH
\
;Via)(pp_non_drilled=Yes)(pp_in_selected=All)(pp_remove_mark=Remove)),mode=regular"
)
GEN
.
COM
(
"chklist_run,chklist=valor_dfm_nfpr,nact=1,area=profile"
)
var
layer
=
"temp"
;
var
drl_layer
=
layer
+
"_drl"
if
(
GEN
.
isLayerExists
({
job
:
job
,
layer
:
drl_layer
})){
GEN
.
deleteLayer
({
job
:
job
,
layer
:
drl_layer
})}
GEN
.
createLayer
({
job
:
job
,
layer
:
drl_layer
,
type
:
'drill'
})
GEN
.
selCopyOther
({
dest
:
'layer_name'
,
target_layer
:
drl_layer
,
invert
:
'no'
,
dx
:
0
,
dy
:
0
,
size
:
0
})
if
(
GEN
.
isChklistExists
({
job
:
job
,
step
:
step
,
chklist
:
'tmp_chk'
})){
GEN
.
COM
(
"chklist_delete,chklist=tmp_chk"
)
}
GEN
.
COM
(
"chklist_create,chklist=tmp_chk"
)
GEN
.
COM
(
"chklist_show,chklist=tmp_chk"
)
GEN
.
COM
(
"chklist_single,action=valor_analysis_drill,show=yes"
)
GEN
.
COM
(
"chklist_pclear"
)
GEN
.
COM
(
"chklist_cupd,chklist=valor_analysis_drill,nact=1,params=((pp_drill_layer="
+
drl_layer
+
")(pp_rout_distance=200)(pp_tests=Hole Separation)(pp_extra_hole_type=Pth
\
;Via)(pp_use_compensated_rout=Skeleton)),mode=regular"
)
GEN
.
COM
(
"chklist_pcopy,chklist=valor_analysis_drill,nact=1"
)
GEN
.
COM
(
"chklist_ppaste,chklist=tmp_chk,row=0"
)
GEN
.
COM
(
"chklist_run,chklist=tmp_chk,nact=1,area=profile"
)
GEN
.
COM
(
"chklist_close,chklist=valor_analysis_drill,mode=hide"
)
GEN
.
COM
(
"chklist_close,chklist=tmp_chk,mode=hide"
)
GEN
.
deleteLayer
({
job
:
job
,
layer
:
drl_layer
})
// GEN.deleteLayer({job:job, layer:[layer, layer+"+++"]})
var
meas
=
GEN
.
getCheckMeas
({
job
:
job
,
step
:
step
,
chklist
:
'tmp_chk'
,
nact
:
1
})
if
(
!
/^comp_
\+
_/
.
test
(
item
)){
GEN
.
workLayer
({
name
:
item
,
display_number
:
1
,
clear_before
:
"yes"
})
GEN
.
selClearFeature
();
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
.
COM
(
"sel_ref_feat,layers="
+
tmplayer
+
",use=filter,mode=touch,pads_as=shape,f_types=pad,polarity=positive
\
;negative,include_syms=,exclude_syms="
)
meas
=
meas
.
filter
(
function
(
v
){
return
/^touch/
.
test
(
v
)})
if
(
meas
.
length
){
meas
.
forEach
(
function
(
v
){
var
tmparr
=
v
.
split
(
" "
)
GEN
.
COM
(
"sel_net_feat,operation=select,x="
+
tmparr
[
7
]
+
",y="
+
tmparr
[
8
]
+
",use_ffilter=no"
)
if
(
GEN
.
getSelectCount
()
>
0
){
GEN
.
selDelete
()}
})
}
// exportInfo({drill:drill, item:item});
var
pads
=
GEN
.
getFeatures
({
job
:
job
,
step
:
step
,
layer
:
"temp"
})
||
[];
pads
=
pads
.
filter
(
function
(
v
){
v
.
size
=
v
.
symbol
.
slice
(
1
)
-
0
;
return
/^r
\d
/
.
test
(
v
.
symbol
)})
if
(
pads
&&
pads
.
length
)
{
var
tmphash
=
{};
pads
.
forEach
(
function
(
item2
){
var
key
=
item2
.
x
+
"x"
+
item2
.
y
if
(
!
tmphash
[
key
]){
tmphash
[
key
]
=
item2
}
else
{
tmphash
[
key
]
=
tmphash
[
key
].
size
>
item2
.
size
?
tmphash
[
key
]:
item2
// GEN.selRefFeat({layers:tmplayer, use:"filter",mode:"touch"})
GEN
.
COM
(
"filter_reset,filter_name=popup"
)
if
(
GEN
.
getSelectCount
()
>
0
){
var
res
=
999
;
if
(
GEN
.
isLayerExists
({
job
:
job
,
layer
:
"temp"
})){
GEN
.
deleteLayer
({
job
:
job
,
layer
:[
"temp"
]})}
if
(
GEN
.
isLayerExists
({
job
:
job
,
layer
:
"temp+++"
})){
GEN
.
deleteLayer
({
job
:
job
,
layer
:[
"temp+++"
]})}
GEN
.
selCopyOther
({
dest
:
'layer_name'
,
target_layer
:
'temp'
,
invert
:
'no'
,
dx
:
0
,
dy
:
0
,
size
:
0
})
GEN
.
workLayer
({
name
:
"temp"
,
display_number
:
1
,
clear_before
:
"yes"
})
// GEN.COM("sel_ref_feat,layers="+item+",use=filter,mode=touch,pads_as=shape,f_types=surface,polarity=positive\;negative,include_syms=,exclude_syms=")
// if(GEN.getSelectCount()>0){GEN.selDelete()}
GEN
.
COM
(
"chklist_single,action=valor_dfm_nfpr,show=yes"
)
GEN
.
COM
(
"chklist_cupd,chklist=valor_dfm_nfpr,nact=1,params=((pp_layer=temp)(pp_delete=Duplicate)(pp_work=Features)(pp_drill=PTH
\
;NPTH
\
;Via)(pp_non_drilled=Yes)(pp_in_selected=All)(pp_remove_mark=Remove)),mode=regular"
)
GEN
.
COM
(
"chklist_run,chklist=valor_dfm_nfpr,nact=1,area=profile"
)
var
layer
=
"temp"
;
var
drl_layer
=
layer
+
"_drl"
if
(
GEN
.
isLayerExists
({
job
:
job
,
layer
:
drl_layer
})){
GEN
.
deleteLayer
({
job
:
job
,
layer
:
drl_layer
})}
GEN
.
createLayer
({
job
:
job
,
layer
:
drl_layer
,
type
:
'drill'
})
GEN
.
selCopyOther
({
dest
:
'layer_name'
,
target_layer
:
drl_layer
,
invert
:
'no'
,
dx
:
0
,
dy
:
0
,
size
:
0
})
if
(
GEN
.
isChklistExists
({
job
:
job
,
step
:
step
,
chklist
:
'tmp_chk'
})){
GEN
.
COM
(
"chklist_delete,chklist=tmp_chk"
)
}
GEN
.
COM
(
"chklist_create,chklist=tmp_chk"
)
GEN
.
COM
(
"chklist_show,chklist=tmp_chk"
)
GEN
.
COM
(
"chklist_single,action=valor_analysis_drill,show=yes"
)
GEN
.
COM
(
"chklist_pclear"
)
GEN
.
COM
(
"chklist_cupd,chklist=valor_analysis_drill,nact=1,params=((pp_drill_layer="
+
drl_layer
+
")(pp_rout_distance=200)(pp_tests=Hole Separation)(pp_extra_hole_type=Pth
\
;Via)(pp_use_compensated_rout=Skeleton)),mode=regular"
)
GEN
.
COM
(
"chklist_pcopy,chklist=valor_analysis_drill,nact=1"
)
GEN
.
COM
(
"chklist_ppaste,chklist=tmp_chk,row=0"
)
GEN
.
COM
(
"chklist_run,chklist=tmp_chk,nact=1,area=profile"
)
GEN
.
COM
(
"chklist_close,chklist=valor_analysis_drill,mode=hide"
)
GEN
.
COM
(
"chklist_close,chklist=tmp_chk,mode=hide"
)
GEN
.
deleteLayer
({
job
:
job
,
layer
:
drl_layer
})
// GEN.deleteLayer({job:job, layer:[layer, layer+"+++"]})
var
meas
=
GEN
.
getCheckMeas
({
job
:
job
,
step
:
step
,
chklist
:
'tmp_chk'
,
nact
:
1
})
meas
=
meas
.
filter
(
function
(
v
){
return
/^touch/
.
test
(
v
)})
if
(
meas
.
length
){
meas
.
forEach
(
function
(
v
){
var
tmparr
=
v
.
split
(
" "
)
GEN
.
COM
(
"sel_net_feat,operation=select,x="
+
tmparr
[
7
]
+
",y="
+
tmparr
[
8
]
+
",use_ffilter=no"
)
if
(
GEN
.
getSelectCount
()
>
0
){
GEN
.
selDelete
()}
})
}
var
pads
=
GEN
.
getFeatures
({
job
:
job
,
step
:
step
,
layer
:
"temp"
})
||
[];
pads
=
pads
.
filter
(
function
(
v
){
v
.
size
=
v
.
symbol
.
slice
(
1
)
-
0
;
return
/^r
\d
/
.
test
(
v
.
symbol
)})
if
(
pads
&&
pads
.
length
)
{
var
tmphash
=
{};
pads
.
forEach
(
function
(
item2
){
var
key
=
item2
.
x
+
"x"
+
item2
.
y
if
(
!
tmphash
[
key
]){
tmphash
[
key
]
=
item2
}
else
{
tmphash
[
key
]
=
tmphash
[
key
].
size
>
item2
.
size
?
tmphash
[
key
]:
item2
}
})
for
(
var
key
in
tmphash
)
{
var
size
=
tmphash
[
key
].
size
;
res
=
size
<
res
?
size
:
res
;
}
})
for
(
var
key
in
tmphash
)
{
var
size
=
tmphash
[
key
].
size
;
res
=
size
<
res
?
size
:
res
;
if
(
res
==
999
)
{
res
=
""
}
}
if
(
i
==
0
)
{
drill
.
drl_pad_top
=
res
}
else
if
(
i
==
1
){
drill
.
drl_pad_bot
=
res
}
if
(
res
==
999
)
{
res
=
""
}
}
if
(
i
==
0
)
{
drill
.
drl_pad_top
=
res
}
else
if
(
i
==
1
){
drill
.
drl_pad_bot
=
res
}
}
}
})
GEN
.
deleteLayer
({
job
:
job
,
step
:
step
,
layer
:
tmplayer
})
}
...
...
@@ -3126,4 +3165,45 @@ function sendEmail(msg) {
print
(
err
.
text
());
}
}
}
function
moveSlotDrls
(
props
){
var
job
=
props
.
job
;
var
step
=
props
.
step
;
var
drl_layer
=
props
.
layer
;
var
flag
;
GEN
.
affectedLayer
({
affected
:
'no'
,
mode
:
'all'
})
GEN
.
workLayer
({
name
:
drl_layer
,
display_number
:
2
,
clear_before
:
'yes'
})
GEN
.
selectByFilter
({
feat_types
:
"line"
})
if
(
GEN
.
getSelectCount
()
>
1
)
{
GEN
.
selClearFeature
();
var
feats
=
GEN
.
getFeatures
({
job
:
job
,
step
:
step
,
layer
:
drl_layer
,
options
:
"feat_index"
,
units
:
"mm"
}).
filter
(
function
(
v
){
return
v
.
type
==
"line"
})
feats
.
forEach
(
function
(
item
){
GEN
.
selClearFeature
();
var
index
=
item
.
index
;
// 选择index
GEN
.
selLayerFeat
({
layer
:
drl_layer
,
index
:
index
,
operation
:
"select"
})
var
tmp_layer
=
drl_layer
+
"_tmp"
if
(
GEN
.
isLayerExists
({
job
:
job
,
layer
:
tmp_layer
})){
GEN
.
deleteLayer
({
job
:
job
,
layer
:
tmp_layer
})
}
GEN
.
selMoveOther
({
target_layer
:
tmp_layer
,
invert
:
'no'
,
dx
:
0
,
dy
:
0
,
size
:
0
})
GEN
.
workLayer
({
name
:
tmp_layer
,
display_number
:
2
,
clear_before
:
'yes'
})
// 参考选择辅助层 include 的移动走
GEN
.
selRefFeat
({
layers
:
drl_layer
,
use
:
'filter'
,
mode
:
"cover"
})
if
(
GEN
.
getSelectCount
()
>
0
)
{
GEN
.
selMoveOther
({
target_layer
:
drl_layer
+
"_inner_slot"
,
invert
:
'no'
,
dx
:
0
,
dy
:
0
,
size
:
0
})
flag
=
drl_layer
+
"_inner_slot"
}
else
{
GEN
.
selMoveOther
({
target_layer
:
drl_layer
,
invert
:
'no'
,
dx
:
0
,
dy
:
0
,
size
:
0
})
}
if
(
GEN
.
isLayerExists
({
job
:
job
,
layer
:
tmp_layer
})){
GEN
.
deleteLayer
({
job
:
job
,
layer
:
tmp_layer
})
}
GEN
.
selClearFeature
();
GEN
.
workLayer
({
name
:
drl_layer
,
display_number
:
2
,
clear_before
:
'yes'
})
})
}
return
flag
}
\ No newline at end of file
ats/topcam/ATS_AIM_data_format.js
View file @
861f24fb
...
...
@@ -399,7 +399,7 @@ try {
global
.
_ERRORMAG
=
"Failed to create profile"
;
script_info
({
progress
:
55
})
var
all_layer
=
Object
.
keys
(
tmp_matrix
);
var
all_layer
=
Object
.
keys
(
GEN
.
getMatrix
({
job
:
job
})
);
// 没有outline层
// 判断有没有profile
var
tmp_step
=
GEN
.
getStepList
({
job
:
job
})[
0
]
...
...
@@ -431,7 +431,15 @@ try {
}
else
{
createOutline
({
job
:
job
,
step
:
tmp_step
,
profileRule
:
profileRule
})
}
}
else
{
createOutline
({
job
:
job
,
step
:
tmp_step
,
profileRule
:
profileRule
})
// var hasFab = false;
// all_layer.forEach(function(v){
// if(/fab/.test(v)){hasFab = true}
// })
// if(hasFab){
// throw "创建profile失败,请手动创建好profile后仅执行分析步骤"
// } else {
createOutline
({
job
:
job
,
step
:
tmp_step
,
profileRule
:
profileRule
})
// }
}
}
else
if
(
/^wistron$/ig
.
test
(
par
.
customer
))
{
var
contours
=
all_layer
.
filter
(
function
(
layer
){
return
/contour/
.
test
(
layer
)})
...
...
@@ -454,19 +462,44 @@ try {
createOutline
({
job
:
job
,
step
:
tmp_step
,
profileRule
:
profileRule
})
}
}
else
if
(
/^vivo$/ig
.
test
(
par
.
customer
))
{
var
drilldrawings
=
all_layer
.
filter
(
function
(
v
){
return
/^drilldrawing
\d
/
.
test
(
v
)})
var
drilldrawinglayer
;
if
(
drilldrawings
.
length
>
0
)
{
drilldrawings
=
drilldrawings
.
map
(
function
(
v
){
GEN
.
workLayer
({
name
:
v
,
display_number
:
2
,
clear_before
:
'yes'
})
GEN
.
selAllFeat
();
var
count
=
Number
(
GEN
.
getSelectCount
());
if
(
count
==
0
)
{
count
=
9999999
}
GEN
.
selClearFeature
()
return
{
name
:
v
,
count
:
count
}
})
drilldrawings
.
sort
(
function
(
a
,
b
){
return
a
.
count
-
b
.
count
})
drilldrawinglayer
=
drilldrawings
[
0
].
name
}
// 判断有没有line层
if
(
all_layer
.
indexOf
(
"line"
)
>=
0
){
GEN
.
workLayer
({
name
:
"line"
,
display_number
:
2
,
clear_before
:
'yes'
})
GEN
.
selAllFeat
()
if
(
GEN
.
getSelectCount
()
>
0
)
{
GEN
.
COM
(
"sel_create_profile,create_profile_with_holes=no"
)
}
}
else
if
(
drilldrawinglayer
){
GEN
.
workLayer
({
name
:
drilldrawinglayer
,
display_number
:
2
,
clear_before
:
'yes'
})
GEN
.
selAllFeat
()
if
(
GEN
.
getSelectCount
()
>
0
)
{
createOutline
({
job
:
job
,
step
:
tmp_step
,
profileRule
:[
"^"
+
drilldrawinglayer
+
"$"
]})
}
else
{
createOutline
({
job
:
job
,
step
:
tmp_step
,
profileRule
:
profileRule
})
}
}
else
if
(
all_layer
.
indexOf
(
"array"
)
>=
0
)
{
GEN
.
workLayer
({
name
:
"array"
,
display_number
:
2
,
clear_before
:
'yes'
})
GEN
.
selAllFeat
()
if
(
GEN
.
getSelectCount
()
>
0
)
{
//
GEN.COM("sel_create_profile,create_profile_with_holes=no");
//
if(!hasProfle({job:job, step:tmp_step})){
GEN
.
COM
(
"sel_create_profile,create_profile_with_holes=no"
);
if
(
!
hasProfle
({
job
:
job
,
step
:
tmp_step
})){
createOutline
({
job
:
job
,
step
:
tmp_step
,
profileRule
:[
"^array$"
]})
//
}
}
}
else
{
createOutline
({
job
:
job
,
step
:
tmp_step
,
profileRule
:
profileRule
})
}
}
else
if
(
all_layer
.
indexOf
(
"top"
)
>=
0
)
{
...
...
@@ -775,8 +808,8 @@ function sortLayer(props){ // 排序方法 {job:要排序的料号, rule: {要
}
sortNames.forEach(function(v,i,arr){
if(i !== 0){
GEN.matrixMoveRow({ job:job,layer:v.name,after:arr[i-1].name })
}
GEN.matrixMoveRow({ job:job,layer:v.name,after:arr[i-1].name })
}
if(!/^comp_
\
+_/.test(v.name)){
GEN.matrixLayerAttr(_.assign({job:job,layer:v.name},v.attr));
}
...
...
@@ -1108,10 +1141,12 @@ function createOutline(props){
selCopyLayer({job:job,layer:l})
GEN.workLayer({name:l,display_number:2,clear_before:"
yes
"})
GEN.selClearFeature()
GEN.saveJob({job:job})
if(GEN.GEN_TYPE == "
genesis
"){
GEN.selCreateProfile()
} else {
GEN.COM("
profile_limits
,
layers
=
"+l+"
,
type
=
lyrfilter
,
margin
=
0
")
GEN.COM("
sel_create_profile
,
create_profile_with_holes
=
no
")
// GEN.COM("
profile_limits
,
layers
=
"+l+"
,
type
=
lyrfilter
,
margin
=
0
")
}
GEN.selectByFilter({profile:"
in
"})
if(GEN.getSelectCount()> 0){GEN.selDelete()}
...
...
ats/topcam/ATS_AIM_data_input.js
View file @
861f24fb
...
...
@@ -219,8 +219,9 @@ try {
})
});
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
){
...
...
@@ -259,7 +260,8 @@ try {
}
})
var
step_all
=
[];
// 分析arr_job 和 pcs_job
// 分析arr_job 和 pcs_job;
jobs
=
jobs
.
filter
(
function
(
v
){
return
GEN
.
isJobExists
({
job
:
v
.
name
})});
jobs
.
forEach
(
function
(
item
){
var
jobname
=
item
.
name
GEN
.
openJob
({
job
:
jobname
});
...
...
@@ -281,14 +283,14 @@ try {
})
}
})
})
})
;
var
pcs_job_name_tmp
=
step_all
[
0
].
jobname
step_all
=
step_all
.
filter
(
function
(
item
){
return
item
.
jobname
!=
pcs_job_name_tmp
})
var
pcs_job
=
jobs
.
filter
(
function
(
item
){
return
item
.
name
==
pcs_job_name_tmp
})[
0
]
})[
0
]
;
importJob
({
name
:
job
,
db
:
custCfg
.
db
,
path
:
pcs_job
.
path
},
config
.
delSameJob
)
GEN
.
openJob
({
job
:
job
});
step_all
.
forEach
(
function
(
item
){
...
...
@@ -347,7 +349,7 @@ try {
var
gerberInfo
=
jobInfo
.
data
.
map
(
function
(
item
){
var
gerberCfg
=
JSON
.
parse
(
JSON
.
stringify
(
item
.
format
));
var
file
=
item
.
file
gerberCfg
.
layer
=
file
.
name
.
toLowerCase
().
split
(
" "
).
join
(
"-"
)
gerberCfg
.
layer
=
file
.
name
.
toLowerCase
().
split
(
" "
).
join
(
"-"
)
.
replace
(
/
[
()
]
/ig
,
"_"
)
gerberCfg
.
path
=
file
.
path
gerberCfg
.
format
=
item
.
type
gerberCfg
.
job
=
job
...
...
ats/topcam/config_ats.js
View file @
861f24fb
...
...
@@ -448,8 +448,6 @@
}
],
"tl_name"
:
[
{
"orig_name"
:
[
"^comp_+_top$"
],
"tl_name"
:
"comp_+_top"
},
{
"orig_name"
:
[
"^comp_+_bot$"
],
"tl_name"
:
"comp_+_bot"
},
{
"orig_name"
:
[
"top_enig"
,
"top-enig"
,
"enig_top"
],
"tl_name"
:
"enig_top"
},
{
"orig_name"
:
[
"bot_enig"
,
"bot-enig"
,
"enig_bot"
],
"tl_name"
:
"enig_bot"
},
{
"orig_name"
:
[
"top_(?:solder)paste"
,
"^spt(?:
\\
.gbr)?$"
,
"^past_top$"
],
"tl_name"
:
"past_top"
},
...
...
@@ -597,27 +595,27 @@
}
],
"tl_name"
:
[
{
"orig_name"
:
[
"^comp_+_top$"
],
"tl_name"
:
"comp_+_top"
},
{
"orig_name"
:
[
"^comp_+_bot$"
],
"tl_name"
:
"comp_+_bot"
},
{
"orig_name"
:
[
"^pm_top"
,
"spcs
\\
.gbr$|paste.pri|pripaste|solderpaste_top"
,
"ppst
\\
.art|spt
\\
.art"
,
"assy[_-]?top
\\
.art"
,
"past_top"
,
"paste_top|spt"
],
"tl_name"
:
"past_top"
},
{
"orig_name"
:
[
"^pm_bot"
,
"spps
\\
.gbr$|paste.sec|secpaste|solderpaste_bottom"
,
"spst
\\
.art|spb
\\
.art"
,
"assy[_-]?bott?o?m?
\\
.art"
,
"past_bot"
,
"paste_bot|spb"
],
"tl_name"
:
"past_botm"
},
{
"orig_name"
:
[
"silk.pri"
,
"pleg
\\
.art|sst
\\
.art"
,
"^ss_top|sscs
\\
.gbr$"
,
"silk_top|sst"
],
"tl_name"
:
"silk_top"
},
{
"orig_name"
:
[
"silk.sec"
,
"sleg
\\
.art|ssb
\\
.art"
,
"^ss_bot|ssps
\\
.gbr$"
,
"silk_bot|ssb"
],
"tl_name"
:
"silk_bot"
},
{
"orig_name"
:
[
"^tm
\\
.art$|
\\
.st$|
\\
.tsm$|soldermask_top"
,
"mask.top
\\
.art|smt
\\
.art"
,
"mask.pri
\\
.art|smcs
\\
.gbr$"
,
"psm
\\
.art"
,
"sm_top|^smt"
],
"tl_name"
:
"sm_top"
},
{
"orig_name"
:
[
"^bm
\\
.art$|
\\
.sb$|
\\
.bsm$|soldermask_bottom"
,
"mask.bot
\\
.art|smb
\\
.art"
,
"mask.sec
\\
.art|smps
\\
.gbr$"
,
"ssm
\\
.art"
,
"sm_bot|^smb"
],
"tl_name"
:
"sm_botm"
},
{
"orig_name"
:
[
"^(?:(?!assy|enig|pm|past|ss|silk|sm|soldermask
).)+_top
\
.art$"
,
"^top$"
,
"^top
.art$"
],
"tl_name"
:
"top"
},
{
"orig_name"
:
[
"^(?:(?!assy|enig|pm|past|ss|silk|sm|soldermask
).)+_bottom
\
.art$"
,
"^bot
\\
.art$"
,
"^bottom$"
,
"^bottom
\\
.art$"
],
"tl_name"
:
"bottom"
},
{
"orig_name"
:
[
"^(?:(?!assy|enig|pm|past|ss|silk|sm|soldermask
|via|plug).)+_top
\
.art$"
,
"^surface$"
,
"^top$"
,
"^top.art$|^pri
\\
.art$"
],
"tl_name"
:
"top"
},
{
"orig_name"
:
[
"^(?:(?!assy|enig|pm|past|ss|silk|sm|soldermask
|via|plug).)+_bottom
\
.art$"
,
"^base$"
,
"^bot
\\
.art$"
,
"^bottom$"
,
"^bottom
\\
.art$|^sec
\\
.art$"
],
"tl_name"
:
"bottom"
},
{
"orig_name"
:
[
"int(
\\
d+)
\\
.art"
],
"tl_name"
:
"l_($1+1)"
},
{
"orig_name"
:
[
"_top_lay(
\\
d+)"
],
"tl_name"
:
"d_1-($1)"
},
{
"orig_name"
:
[
"_lay(
\\
d+)_bot"
],
"tl_name"
:
"d_($1)-($1+1)"
},
{
"orig_name"
:
[
"_lay(
\\
d+)_lay(
\\
d+)"
,
"_l?(
\\
d+)_l?(
\\
d+)$"
,
"
\\
.ncd(
\\
d)-(
\\
d)$"
,
"
\\
.d(
\\
d+)-(
\\
d+)$"
,
"-(
\\
d+)-(
\\
d+)
\\
.drl$"
,
"(
\\
d+)-(
\\
d+)-laser
\\
.drl$"
,
"d(
\\
d+)-(
\\
d+)"
],
"tl_name"
:
"d_($1)-($2)"
},
{
"orig_name"
:
[
"lay-(
\\
d+)
\\
.art$"
,
"^(?:signal|plane|layer)_(
\\
d+)$"
,
"^l(
\\
d+)$"
,
"_l(
\\
d+)-.{3}
\\
.art$"
,
"lay(
\\
d+)
\\
.art$"
,
"l(
\\
d+).*
\\
.gbr$"
,
"^0?(
\\
d+)[
\\
D].*
\\
.art$"
,
"
\\
.p(
\\
d+)p?$"
,
"
\\
.l(
\\
d+)$"
,
"^l(
\\
d+).*
\\
.art$"
,
"^l(
\\
d+)
\\
.art$"
,
"^0(
\\
d+).*ccp_ms"
,
"^s(
\\
d+)
\\
.art"
,
"laye?r?(
\\
d+)"
,
"layer_(
\\
d+)"
],
"tl_name"
:
"l_($1)"
},
{
"orig_name"
:
[
"(
\\
d+)-(
\\
d+)-((?:(?!laser)[a-zA-Z])+)
\\
.drl$"
,
"
\\
.d(
\\
d+)-(
\\
d+)((?:(?!laser)[a-zA-Z])+)$"
],
"tl_name"
:
"d($1)-($2)-($3)"
},
{
"orig_name"
:
[
"_l?(
\\
d+)_l?(
\\
d+)$"
,
"
\\
.ncd(
\\
d)-(
\\
d)$"
,
"
\\
.d(
\\
d+)-(
\\
d+)$"
,
"-(
\\
d+)-(
\\
d+)
\\
.drl$"
,
"(
\\
d+)-(
\\
d+)-laser
\\
.drl$"
,
"d(
\\
d+)-(
\\
d+)"
],
"tl_name"
:
"d_($1)-($2)"
},
{
"orig_name"
:
[
"^nth_layer$"
,
"^drill$"
,
"
\\
.ncdthru$"
],
"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"
:
[
"^ro
\\
.art$"
,
"^contour
\\
.gdo$"
,
"
\\
.R1$"
,
"outline"
],
"tl_name"
:
"outline"
},
{
"orig_name"
:
[
"
^pst
\\
.art$"
,
"
top-enig"
,
"enig_top"
],
"tl_name"
:
"enig_top"
},
{
"orig_name"
:
[
"
^sst
\\
.art$"
,
"
bot-enig"
,
"enig_bot"
],
"tl_name"
:
"enig_bot"
},
{
"orig_name"
:
[
"top-enig"
,
"enig_top"
],
"tl_name"
:
"enig_top"
},
{
"orig_name"
:
[
"bot-enig"
,
"enig_bot"
],
"tl_name"
:
"enig_bot"
},
{
"orig_name"
:
[
"_top_l(
\\
d+)"
],
"tl_name"
:
"d_1-($1)"
},
{
"orig_name"
:
[
"_l(
\\
d+)_bottom"
],
"tl_name"
:
"d_($1)-($1+1)"
}
],
...
...
@@ -827,8 +825,6 @@
}
],
"tl_name"
:
[
{
"orig_name"
:
[
"^comp_+_top$"
],
"tl_name"
:
"comp_+_top"
},
{
"orig_name"
:
[
"^comp_+_bot$"
],
"tl_name"
:
"comp_+_bot"
},
{
"orig_name"
:
[
"^spt$|^pmt
\\
.art$"
,
"
\\
.pma$|
\\
.spa$"
,
"paste.?top|soldPasteTop|pastemask.?top"
,
"past_top"
],
"tl_name"
:
"past_top"
},
{
"orig_name"
:
[
"^spb$|^pmb
\\
.art$"
,
"
\\
.pmb$|
\\
.spb$"
,
"paste.?bot|soldPasteBot|pastemask.?bot"
,
"past_botm"
],
"tl_name"
:
"past_botm"
},
{
"orig_name"
:
[
"sst|tsilk|silktop"
,
"^sst
\\
.art$"
,
"
\\
.ssa$"
,
"silkscrntop|silkscreentop"
,
"silk.top|silk-top"
],
"tl_name"
:
"silk_top"
},
...
...
@@ -901,8 +897,6 @@
}
],
"tl_name"
:
[
{
"orig_name"
:
[
"^comp_+_top$"
],
"tl_name"
:
"comp_+_top"
},
{
"orig_name"
:
[
"^comp_+_bot$"
],
"tl_name"
:
"comp_+_bot"
},
{
"orig_name"
:
[
"osp-top
\\
.pho"
,
"solderpastetop"
,
"past_top"
],
"tl_name"
:
"past_top"
},
{
"orig_name"
:
[
"osp-bottom
\\
.pho"
,
"solderpastebottom"
,
"past_botm"
],
"tl_name"
:
"past_botm"
},
{
"orig_name"
:
[
"pleg
\\
.art"
,
"^ss_top"
,
"silk_top"
],
"tl_name"
:
"silk_top"
},
...
...
@@ -975,8 +969,6 @@
}
],
"tl_name"
:
[
{
"orig_name"
:
[
"^comp_+_top$"
],
"tl_name"
:
"comp_+_top"
},
{
"orig_name"
:
[
"^comp_+_bot$"
],
"tl_name"
:
"comp_+_bot"
},
{
"orig_name"
:
[
"pasttop
\\
.art"
,
"past_top"
],
"tl_name"
:
"past_top"
},
{
"orig_name"
:
[
"pastbotm
\\
.art"
,
"past_bot"
],
"tl_name"
:
"past_botm"
},
{
"orig_name"
:
[
"^silktop
\\
.art$"
,
"silk_top"
],
"tl_name"
:
"silk_top"
},
...
...
@@ -1089,7 +1081,6 @@
}
},
"data_format"
:
[
{
"tl_name"
:
"comp_
\\
+_top"
,
"new_name"
:
"comp_+_top"
,
"attr"
:{}},
{
"tl_name"
:
"enig_top"
,
"new_name"
:
"enig_top"
,
"attr"
:{
"context"
:
"board"
,
"type"
:
"document"
}},
{
"tl_name"
:
"past_top"
,
"new_name"
:
"past_top"
,
"attr"
:{
"context"
:
"board"
,
"type"
:
"solder_paste"
}},
{
"tl_name"
:
"silk_top"
,
"new_name"
:
"silk_top"
,
"attr"
:{
"context"
:
"board"
,
"type"
:
"silk_screen"
}},
...
...
@@ -1101,7 +1092,6 @@
{
"tl_name"
:
"silk_bot"
,
"new_name"
:
"silk_bot"
,
"attr"
:{
"context"
:
"board"
,
"type"
:
"silk_screen"
}},
{
"tl_name"
:
"past_botm"
,
"new_name"
:
"past_botm"
,
"attr"
:{
"context"
:
"board"
,
"type"
:
"solder_paste"
}},
{
"tl_name"
:
"enig_bot"
,
"new_name"
:
"enig_bot"
,
"attr"
:{
"context"
:
"board"
,
"type"
:
"document"
}},
{
"tl_name"
:
"comp_
\\
+_bot"
,
"new_name"
:
"comp_+_bot"
,
"attr"
:{}},
{
"tl_name"
:
"d_(
\\
d+)-(
\\
d+)"
,
"new_name"
:
"ftdrill($1)-($2)l"
,
"attr"
:{
"context"
:
"board"
,
"type"
:
"drill"
}},
{
"tl_name"
:
"d(
\\
d+)-(
\\
d+)-(.*)"
,
"new_name"
:
"ftdrill($1)-($2)-($3)"
,
"attr"
:{
"context"
:
"board"
,
"type"
:
"drill"
}},
{
"tl_name"
:
"drill"
,
"new_name"
:
"ftdrill"
,
"attr"
:{
"context"
:
"board"
,
"type"
:
"drill"
}},
...
...
public_script/scotttest.js
View file @
861f24fb
/*
NAME:
DESCRIPTION:
检查外层是否有异常
;
DESCRIPTION: ;
PARAMETER:
[
{
...
...
@@ -9,6 +9,88 @@ PARAMETER:
type : 'LineEdit',
property : {tool_tip : '目标step,默认是orig'},
},
{
name : 'outline',
title : 'outline',
type : 'LineEdit',
property : {tool_tip : '目标outline,默认是ol'},
},
{
name : 'units',
title : '单位',
type : 'RadioBox',
property : {
size_policy:'Expanding,Fixed',
item_list:[
{name:'inch',text:'INCH'},
{name:'mm',text:'MM'},
],
tool_tip:'工作单位,未设定,默认为INCH'
},
pack : {row:1,column:1},
},
{
name : 'cover_layer_suffix',
title : '文字套层后缀',
type : 'LineEdit',
property : {tool_tip : ''},
},
{
name : 'cover_size',
title : '文字套层套值',
type : 'LineEdit',
property : {tool_tip : ''},
},
{
name : 'ss_to_sm',
title : '文字距离阻焊',
type : 'LineEdit',
property : {tool_tip : ''},
},
{
name : 'ss_to_smd',
title : '文字距离SMD',
type : 'LineEdit',
property : {tool_tip : ''},
},
{
name : 'ss_to_bga',
title : '文字距离bga',
type : 'LineEdit',
property : {tool_tip : ''},
},
{
name : 'silk_suffix',
title : '分离的文字层后缀',
type : 'LineEdit',
property : {tool_tip : ''},
},
{
name : 'text_height',
title : '文字最大高度',
type : 'LineEdit',
property : {tool_tip : ''},
},
{
name : 'bk_suffix',
title : '备份层后缀',
type : 'LineEdit',
property : {tool_tip : ''},
},
{
name : 'select_lyr',
title : '选择层别',
type : 'RadioBox',
property : {
size_policy:'Expanding,Fixed',
item_list:[
{name:'yes',text:'Yes'},
{name:'no',text:'No'},
],
tool_tip:'未设定,默认为Yes'
},
pack : {row:1,column:1},
},
{
name : 'auto_save',
title : '自动保存',
...
...
@@ -30,7 +112,7 @@ PARAMETER:
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>
...
...
@@ -42,128 +124,1331 @@ PARAMETER:
*/
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
console
.
log
(
"=============================
=>
template"
);
console
.
log
(
"=============================
:
template"
);
// 引入模块 包
var
$
=
require
(
'topcam.scriptfunc'
).
argv
();
var
fs
=
require
(
'fs'
);
var
_
=
require
(
'lodash'
);
require
(
"topsin.genmath"
)
var
genMath
=
new
GenMath
();
var
mode
=
$
.
ikm
?
"topcam"
:
"aimdfm"
;
var
IKM
=
$
.
ikm
;
if
(
IKM
==
undefined
)
{
IKM
=
require
(
'topcam.ikm6'
)(
$
)
}
var
GEN
=
$
.
gen
;
var
GUI
=
$
.
gui
||
{}
;
var
GUI
=
require
(
'topsin.gengui'
).
newGui
(
require
(
'topsin.gengui'
).
__dirname
)
;
var
Job
=
$
.
job
||
$
.
job_name
;
var
JobId
=
$
.
job_id
;
var
db
=
$
.
db
||
IKM
.
db
var
PAR
=
{}
if
(
$
.
par
)
{
PAR
=
$
.
par
}
else
if
(
$
.
hasOwnProperty
(
'script_parameter'
)){
PAR
=
JSON
.
parse
(
$
.
script_parameter
);
}
if
(
$
.
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
=
{
units
:
"mm"
,
ss_to_sm
:
10
,
// 文字距离阻焊
ss_to_smd
:
10
,
// 文字距离SMD
ss_to_bga
:
10
,
// 文字距离bga
cover_size
:
0
,
text_height
:
1
,
// 文字最大高度
bk_suffix
:
"_bk"
,
// 备份层后缀
silk_suffix
:
"_font"
,
// 分离的文字层后缀
cover_layer_suffix
:
"_cover"
,
tol
:
1
,
select_lyr
:
"no"
,
step
:
"orig"
,
auto_save
:
"No"
,
outline
:
"ol"
}
for
(
var
key
in
default_par
){
if
(
!
par
.
hasOwnProperty
(
key
)
||
par
[
key
]
==
""
){
par
[
key
]
=
default_par
[
key
]
}}
var
job
=
Job
;
var
outline
=
par
.
outline
var
gui
=
new
NewGUI
(
GUI
);
if
(
!
par
.
outline_size
){
par
.
outline_size
=
par
.
units
==
'inch'
?
7.87
:
200
;
}
try
{
var
par
=
PAR
;
var
default_par
=
{
step
:
"edit"
,
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
(
_
.
isEmpty
(
job
)){
throw
"参数job不存在"
}
else
{
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"
});
}
if
(
mode
==
"aimdfm"
){
if
(
GEN
.
checkInout
({
job
:
job
,
mode
:
"test"
})
!=
0
){
throw
"the job check"
}
else
{
GEN
.
checkInout
({
job
:
job
,
mode
:
"out"
})
}
}
var
outLayers
=
getOutSideLayer
({
job
:
job
})
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
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
=
ssFrameSeparate
({
workstep
:
workstep
})
// 分离文字和文字框
if
(
err
)
{
throw
err
}
GEN
.
PAUSE
(
"ssFrameSeparate end; please check"
)
var
err
=
slBoxOptimize
({
workstep
:
workstep
})
// 文字框优化
if
(
err
)
{
throw
err
}
var
err
=
slOptimize
({
workstep
:
workstep
})
// 文字优化
if
(
err
)
{
throw
err
}
GEN
.
PAUSE
(
"slOptimize end; please check"
)
})
// 保存
if
(
/yes/ig
.
test
(
par
.
auto_save
)){
GEN
.
checkInout
({
job
:
job
,
mode
:
"out"
})
// 结束保存料号 关闭料号
GEN
.
saveJob
({
job
:
job
});
GEN
.
checkInout
({
job
:
job
,
mode
:
"in"
})
GEN
.
closeJob
({
job
:
job
})
}
else
{
GEN
.
checkInout
({
job
:
job
,
mode
:
"in"
})
}
if
(
/yes/ig
.
test
(
par
.
auto_save
)){
GEN
.
checkInout
({
job
:
job
,
mode
:
"out"
});
GEN
.
saveJob
({
job
:
job
});
GEN
.
checkInout
({
job
:
job
,
mode
:
"in"
});
GEN
.
closeJob
({
job
:
job
});}
else
{
GEN
.
checkInout
({
job
:
job
,
mode
:
"in"
})}
if
(
mode
===
"aimdfm"
)
{
$
.
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
"
)
}]
});
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"
}
}
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"
;
}
function
getOutSideLayer
(
props
){
var
job
=
props
.
job
// 创建套层
function
createCoverLayer
(
props
){
// 1. step过滤
var
workstep
=
props
.
workstep
;
// 2.过滤工作层
var
work_layer
=
getLayer
({
layer_type
:
"silk_screen"
,
context
:
"board"
})
if
(
/yes/ig
.
test
(
par
.
select_lyr
)){
var
matrix
=
GEN
.
getMatrix
({
job
:
job
});
var
layers
=
Object
.
keys
(
matrix
).
map
(
function
(
key
){
var
tmp
=
{};
tmp
[
key
]
=
key
;
return
tmp
})
work_layer
=
gui
.
selectMultiple
({
title
:
"请先择工作层"
,
list
:
layers
,
defaultvalue
:
work_layer
,
columns
:
4
,
gen
:
GEN
})
}
if
(
work_layer
.
length
==
0
)
{
return
"没有先择layer"
}
// 其他参数
var
info
=
gui
.
showForm
({
title
:
'请手动匹配以下信息'
,
showcheck
:
1
,
gen
:
GEN
,
defaultsize
:[
200
,
100
],
ui
:
{
type
:
'ScrollArea'
,
property
:
{
widget_resizable
:
true
,
frame_shape
:
'NoFrame'
,
align
:
'Top'
},
child
:
{
type
:
'VBoxLayout'
,
property
:
{
margin
:
2
,
spacing
:
5
,
align
:
'Top'
},
pack
:
{
stretch
:
0
},
child
:[{
type
:
"FormGridLayout"
,
property
:
{
columns
:
1
,
label_alignment
:
'Top | Right'
,
margin
:
10
,
spacing
:
20
},
pack
:
{
stretch
:
0
},
child
:[{
name
:
'ss_to_sm'
,
pack
:
{
label
:
'文字距离阻焊(单边)'
},
type
:
'LineEdit'
,
units
:
par
.
units
==
'inch'
?
'mil'
:
'um'
,
setter
:
function
(
obj
){
obj
.
setText
()
},
property
:
{
enabled
:
true
,
value
:
par
.
ss_to_sm
}
},
{
name
:
'ss_to_smd'
,
pack
:
{
label
:
'文字距离SMD(单边)'
},
type
:
'LineEdit'
,
setter
:
function
(
obj
){
obj
.
setText
()
},
units
:
par
.
units
==
'inch'
?
'mil'
:
'um'
,
property
:
{
value
:
par
.
ss_to_smd
,
enabled
:
true
}
},
{
name
:
'ss_to_bga'
,
pack
:
{
label
:
'文字距离BGA(单边)'
},
setter
:
function
(
obj
){
obj
.
setText
()
},
type
:
'LineEdit'
,
value
:
par
.
ss_to_bga
,
units
:
par
.
units
==
'inch'
?
'mil'
:
'um'
,
property
:
{
value
:
par
.
ss_to_smd
,
enabled
:
true
}
},
{
type
:
"stretch"
}]
}]
}
},
buttons
:[{
stock
:
"ok"
,
sensitive
:
true
,
command
:
function
(
data
)
{
}
},
{
stock
:
"cancel"
,
sensitive
:
true
,
command
:
function
(
ddata
)
{
}
},
{
stock
:
"help"
,
sensitive
:
true
,
command
:
function
(
data
)
{
}
}]
});
if
(
!
info
){
throw
"未填写参数"
}
info
=
JSON
.
parse
(
JSON
.
stringify
(
info
))
var
matrix
=
GEN
.
getMatrix
({
job
:
job
})
workstep
.
forEach
(
function
(
step
){
GEN
.
openStep
({
job
:
job
,
name
:
step
});
GEN
.
clearLayers
();
GEN
.
affectedLayer
({
mode
:
'all'
,
affected
:
'no'
});
GEN
.
units
({
type
:
par
.
units
}
);
GEN
.
zoomHome
();
work_layer
.
forEach
(
function
(
layer
){
var
cover_lyr
=
layer
+
par
.
cover_layer_suffix
;
var
sm
,
outer
;
if
(
GEN
.
isLayerExists
({
job
:
job
,
layer
:
cover_lyr
})
)
{
GEN
.
deleteLayer
({
job
:
job
,
layer
:[
cover_lyr
]})
}
if
(
matrix
[
layer
].
side
==
'top'
)
{
sm
=
getLayer
({
layer_type
:
"solder_mask"
,
context
:
"board"
,
side
:
"top"
})[
0
];
outer
=
getLayer
({
layer_type
:
"signal"
,
context
:
"board"
,
side
:
"top"
})[
0
];
GEN
.
createLayer
({
job
:
job
,
layer
:
cover_lyr
,
context
:
'board'
,
type
:
'document'
,
before
:
layer
,
delete_exists
:
'yes'
});
}
else
{
sm
=
getLayer
({
layer_type
:
"solder_mask"
,
context
:
"board"
,
side
:
"bottom"
})[
0
];
outer
=
getLayer
({
layer_type
:
"signal"
,
context
:
"board"
,
side
:
"bottom"
})[
0
];
GEN
.
createLayer
({
job
:
job
,
layer
:
cover_lyr
,
context
:
'board'
,
type
:
'document'
,
before
:
layer
,
delete_exists
:
'yes'
});
}
if
(
GEN
.
isLayerExists
({
job
:
job
,
layer
:
sm
})
)
{
GEN
.
affectedLayer
({
affected
:
'yes'
,
layer
:[
sm
],
clear_before
:
'yes'
});
GEN
.
selectByFilter
({
polarity
:
'positive'
,
profile
:
'all'
});
GEN
.
selCopyOther
({
dest
:
'layer_name'
,
target_layer
:
cover_lyr
,
invert
:
'no'
,
size
:
2
*
info
.
ss_to_sm
});
}
if
(
GEN
.
isLayerExists
({
job
:
job
,
layer
:
outer
})
)
{
GEN
.
affectedLayer
({
affected
:
'yes'
,
layer
:[
outer
],
clear_before
:
'yes'
});
GEN
.
selectByFilter
({
attribute
:[
'.smd'
],
profile
:
'all'
});
if
(
GEN
.
getSelectCount
()
>
0
){
GEN
.
selCopyOther
({
dest
:
'layer_name'
,
target_layer
:
cover_lyr
,
invert
:
'no'
,
size
:
2
*
info
.
ss_to_smd
});}
GEN
.
selectByFilter
({
attribute
:[
'.bga'
],
profile
:
'all'
,});
if
(
GEN
.
getSelectCount
()
>
0
){
GEN
.
selCopyOther
({
dest
:
'layer_name'
,
target_layer
:
cover_lyr
,
invert
:
'no'
,
size
:
2
*
info
.
ss_to_bga
});}
}
if
(
GEN
.
isLayerExists
({
job
:
job
,
layer
:
outline
})
)
{
var
outline_tmp
=
outline
+
'_tmp_tl'
;
GEN
.
copyLayer
({
source_job
:
job
,
source_step
:
step
,
source_layer
:
outline
,
dest_layer
:
outline_tmp
,
mode
:
'replace'
,
invert
:
'no'
})
;
GEN
.
affectedLayer
({
affected
:
'yes'
,
layer
:[
outline_tmp
],
clear_before
:
'yes'
});
GEN
.
selectByFilter
({
feat_types
:
'line
\
;arc'
,
polarity
:
'positive'
,
profile
:
'all'
});
if
(
GEN
.
getSelectCount
()
>
0
){
GEN
.
selChangeSym
({
symbol
:
'r'
+
par
.
outline_size
})
}
GEN
.
copyLayer
({
source_job
:
job
,
source_step
:
step
,
source_layer
:
outline_tmp
,
dest_layer
:
cover_lyr
,
mode
:
'append'
,
invert
:
'no'
})
GEN
.
deleteLayer
({
job
:
job
,
layer
:[
outline_tmp
],
step
:
step
});
}
})
})
GEN
.
affectedLayer
({
affected
:
'no'
,
mode
:
'all'
})
GEN
.
clearLayers
()
}
// 字符 和 文字框分开
function
ssFrameSeparate
(
props
)
{
// 1. step过滤
var
workstep
=
props
.
workstep
;
// 2.过滤工作层
var
work_layers
=
getLayer
({
layer_type
:
"silk_screen"
,
context
:
"board"
})
if
(
/yes/ig
.
test
(
par
.
select_lyr
)){
var
matrix
=
GEN
.
getMatrix
({
job
:
job
});
var
layers
=
Object
.
keys
(
matrix
).
map
(
function
(
key
){
var
tmp
=
{};
tmp
[
key
]
=
key
;
return
tmp
})
work_layers
=
gui
.
selectMultiple
({
defaultsize
:[
200
,
100
],
title
:
"请先择工作层"
,
list
:
layers
,
defaultvalue
:
work_layers
,
columns
:
4
,
gen
:
GEN
})
}
if
(
work_layers
.
length
==
0
)
{
return
"没有先择layer"
}
var
info
=
gui
.
showForm
({
title
:
'请手动匹配以下信息'
,
showcheck
:
1
,
gen
:
GEN
,
defaultsize
:[
500
,
250
],
ui
:
{
type
:
'ScrollArea'
,
property
:
{
widget_resizable
:
true
,
frame_shape
:
'NoFrame'
,
align
:
'Top'
},
child
:
{
type
:
'VBoxLayout'
,
property
:
{
margin
:
2
,
spacing
:
5
,
align
:
'Top'
},
pack
:
{
stretch
:
0
},
child
:[{
type
:
"FormGridLayout"
,
property
:
{
columns
:
1
,
label_alignment
:
'Top | Right'
,
margin
:
10
,
spacing
:
20
},
pack
:
{
stretch
:
0
},
child
:[{
name
:
'text_height'
,
pack
:
{
label
:
'文字最大高度'
},
type
:
'LineEdit'
,
setter
:
function
(
obj
){
obj
.
setText
()
},
property
:
{
value
:
par
.
text_height
*
1000
,
enabled
:
true
},
units
:
par
.
units
==
'inch'
?
'mil'
:
'um'
},{
name
:
'type'
,
pack
:
{
label
:
'类型'
},
type
:
'RadioBox'
,
property
:
{
enabled
:
true
,
item_list
:[{
name
:
'separate'
,
text
:
'字框分离'
},{
name
:
"change"
,
text
:
"字框切换"
}]}
},
{
type
:
"stretch"
}]
}]
}
},
buttons
:[{
stock
:
"ok"
,
sensitive
:
true
,
command
:
function
(
data
)
{
}
},
{
stock
:
"cancel"
,
sensitive
:
true
,
command
:
function
(
ddata
)
{
}
},
{
stock
:
"help"
,
sensitive
:
true
,
command
:
function
(
data
)
{
}
}]
});
if
(
!
info
){
throw
"未填写参数"
}
info
=
JSON
.
parse
(
JSON
.
stringify
(
info
));
if
(
info
.
type
==
""
){
info
.
type
=
"separate"
}
var
matrix
=
GEN
.
getMatrix
({
job
:
job
})
workstep
.
forEach
(
function
(
step
){
GEN
.
openStep
({
job
:
job
,
name
:
step
});
GEN
.
clearLayers
();
GEN
.
affectedLayer
({
mode
:
'all'
,
affected
:
'no'
}
);
GEN
.
units
({
type
:
par
.
units
});
GEN
.
zoomHome
();
var
layer_count
=
GEN
.
getLayerCount
({
job
:
job
})
// IKM.get_jobinfo({jobid: JobId, jobinfo: "layer_count"})
GEN
.
COM
(
'disp_off'
);
if
(
info
[
"type"
]
==
'separate'
)
{
work_layers
.
forEach
(
function
(
layer
){
// 备份文字层
var
bk
=
layer
+
par
.
bk_suffix
;
GEN
.
copyLayer
({
source_job
:
job
,
source_step
:
step
,
source_layer
:
layer
,
dest_layer
:
bk
,
mode
:
'replace'
,
invert
:
'no'
})
// 分离出的文字层
var
ss_text
=
layer
+
par
.
silk_suffix
;
if
(
matrix
[
layer
][
"side"
]
==
'top'
)
{
GEN
.
createLayer
({
job
:
job
,
layer
:
ss_text
,
context
:
'board'
,
type
:
'document'
,
before
:
layer
,
delete_exists
:
'yes'
});
}
else
{
GEN
.
createLayer
({
job
:
job
,
layer
:
ss_text
,
context
:
'board'
,
type
:
'document'
,
after
:
layer
,
delete_exists
:
'yes'
});
}
// 开始分离文字
GEN
.
affectedLayer
({
affected
:
'yes'
,
layer
:
layer
,
clear_before
:
'yes'
});
GEN
.
COM
(
"filter_reset,filter_name=popup"
);
GEN
.
selectByFilter
({
feat_types
:
'line
\
;arc'
,
polarity
:
'positive'
,
profile
:
'all'
});
if
(
GEN
.
getSelectCount
()
>
0
){
var
ss_line_arc
=
layer
+
'_line_arc_tl_script'
;
selCopyOther
({
layer
:
ss_line_arc
,
delExist
:
true
})
GEN
.
affectedLayer
({
affected
:
'yes'
,
layer
:
ss_line_arc
,
clear_before
:
'yes'
});
GEN
.
selChangeSym
({
symbol
:
'r0.2'
});
GEN
.
COM
(
"filter_reset,filter_name=popup"
);
GEN
.
selectByFilter
({
feat_types
:
'line'
,
polarity
:
'positive'
,
profile
:
'all'
});
//将直线固定角度分离去除
var
ss_line
=
layer
+
'_line_tl_script'
;
if
(
GEN
.
getSelectCount
()
>
0
){
selCopyOther
({
layer
:
ss_line
,
delExist
:
true
})
GEN
.
affectedLayer
({
affected
:
'yes'
,
layer
:
ss_line
,
clear_before
:
'yes'
});
var
angle
=
[];
var
tol
=
0.2
;
if
(
GEN
.
GEN_TYPE
==
'genesis'
){
angle
=
[
-
180
,
-
135
,
-
90
,
-
45
,
0
,
45
,
90
,
135
];
}
else
{
angle
=
[
0
,
45
,
90
,
135
,
180
,
225
,
270
,
315
];
}
angle
.
forEach
(
function
(
angl
){
if
(
GEN
.
GEN_TYPE
==
'genesis'
){
var
min_angle
=
(
angl
-
tol
<
-
180
)
?
-
180
:
(
angl
-
tol
);
var
max_angle
=
(
angl
+
tol
>
180
)
?
180
:
(
angl
+
tol
);
GEN
.
COM
(
'filter_set'
,{
filter_name
:
'popup'
,
update_popup
:
'yes'
,
slot
:
'line'
,
slot_by
:
'angle'
,
min_angle
:
min_angle
,
max_angle
:
max_angle
});
}
else
{
GEN
.
COM
(
'set_filter_angle'
,{
direction
:
'ccw'
,
max_angle
:
angl
+
tol
,
min_angle
:
angl
-
tol
,
slot
:
'lines'
});
GEN
.
COM
(
"adv_filter_set,ccw_rotations=,filter_name=popup,mirror=any,bound_box=no,active=yes,srf_values=no,srf_area=no,limit_box=no"
);
}
GEN
.
COM
(
"filter_area_strt"
);
GEN
.
COM
(
"filter_area_end,filter_name=popup,operation=select"
);
})
if
(
GEN
.
getSelectCount
()
>
0
){
GEN
.
selDelete
()}
}
if
(
GEN
.
isLayerExists
({
job
:
job
,
layer
:
ss_line
})){
// 利用制作的套层
var
cover_lyr
=
layer
+
par
.
cover_layer_suffix
;
GEN
.
affectedLayer
({
affected
:
'yes'
,
layer
:[
cover_lyr
],
clear_before
:
'yes'
});
GEN
.
COM
(
"filter_reset,filter_name=popup"
);
GEN
.
COM
(
"filter_set,filter_name=popup,update_popup=no,include_syms=r*"
);
GEN
.
COM
(
"filter_set,filter_name=popup,update_popup=no,exclude_syms=rect*"
);
GEN
.
COM
(
"filter_area_strt"
);
GEN
.
COM
(
"filter_area_end,filter_name=popup,layer=,operation=select,inside_area=no,intersect_area=no,area_type=none"
);
GEN
.
COM
(
"filter_reset,filter_name=popup"
);
GEN
.
COM
(
"sel_reverse"
);
var
cover_lyr_2
=
cover_lyr
+
'_tmp_tl'
;
if
(
GEN
.
getSelectCount
()
>
0
){
GEN
.
createLayer
({
job
:
job
,
layer
:
cover_lyr_2
,
delete_exists
:
'yes'
});
GEN
.
selCopyOther
({
target_layer
:
cover_lyr_2
,
invert
:
'no'
});
}
GEN
.
affectedLayer
({
affected
:
'yes'
,
layer
:[
ss_line_arc
],
clear_before
:
'yes'
});
GEN
.
selContourize
();
if
(
GEN
.
GEN_TYPE
==
'incam'
){
GEN
.
COM
(
"reset_filter_criteria,filter_name=,criteria=all"
);
}
else
{
GEN
.
COM
(
"filter_atr_reset,filter_name=ref_select"
);
}
GEN
.
COM
(
"sel_ref_feat,pads_as=shape,mode=touch,exclude_syms=,include_syms=,use=filter,f_types=line
\
;pad
\
;surface
\
;arc
\
;text,polarity=positive
\
;negative,layers="
+
ss_line
);
var
layer_tmp1
=
layer
+
'_tmp1_tl'
;
if
(
GEN
.
getSelectCount
()
>
0
){
GEN
.
createLayer
({
job
:
job
,
layer
:
layer_tmp1
,
delete_exists
:
'yes'
});
GEN
.
selMoveOther
({
target_layer
:
layer_tmp1
,
invert
:
'no'
});
}
if
(
GEN
.
GEN_TYPE
==
'incam'
){
GEN
.
COM
(
"reset_filter_criteria,filter_name=,criteria=all"
);
}
else
{
GEN
.
COM
(
"filter_atr_reset,filter_name=ref_select"
);
}
GEN
.
COM
(
"sel_ref_feat,pads_as=shape,mode=touch,exclude_syms=,include_syms=,use=filter,f_types=line
\
;pad
\
;surface
\
;arc
\
;text,polarity=positive
\
;negative,layers="
+
cover_lyr_2
);
var
layer_tmp2
=
layer
+
'_tmp2_tl'
;
if
(
GEN
.
getSelectCount
()
>
0
){
GEN
.
createLayer
({
job
:
job
,
layer
:
layer_tmp2
,
delete_exists
:
'yes'
});
GEN
.
selCopyOther
({
target_layer
:
layer_tmp2
,
invert
:
'no'
});
}
GEN
.
COM
(
"sel_clean_surface,max_fold_len=0,clean_size="
+
info
.
text_height
+
",clean_mode=x_and_y,accuracy=0"
);
if
(
GEN
.
isLayerExists
({
job
:
job
,
layer
:
"layer_tmp2"
}))
{
GEN
.
affectedLayer
({
affected
:
'yes'
,
layer
:[
layer_tmp2
],
clear_before
:
'yes'
});
if
(
GEN
.
GEN_TYPE
==
'incam'
){
GEN
.
COM
(
"reset_filter_criteria,filter_name=,criteria=all"
);
}
else
{
GEN
.
COM
(
"filter_atr_reset,filter_name=ref_select"
);
}
GEN
.
COM
(
"sel_ref_feat,pads_as=shape,mode=disjoint,exclude_syms=,include_syms=,use=filter,f_types=line
\
;pad
\
;surface
\
;arc
\
;text,polarity=positive
\
;negative,layers="
+
ss_line_arc
);
if
(
GEN
.
getSelectCount
()
>
0
){
GEN
.
selMoveOther
({
target_layer
:
layer_tmp1
,
invert
:
'no'
});
}
}
if
(
GEN
.
isLayerExists
({
job
:
job
,
layer
:
layer_tmp1
}))
{
GEN
.
affectedLayer
({
affected
:
'yes'
,
layer
:[
layer_tmp1
],
clear_before
:
'yes'
});
if
(
GEN
.
GEN_TYPE
==
'incam'
){
GEN
.
COM
(
"reset_filter_criteria,filter_name=,criteria=all"
);
}
else
{
GEN
.
COM
(
"filter_atr_reset,filter_name=ref_select"
);
}
GEN
.
COM
(
"sel_ref_feat,pads_as=shape,mode=touch,exclude_syms=,include_syms=,use=filter,f_types=line
\
;pad
\
;surface
\
;arc
\
;text,polarity=negative,layers="
+
layer
);
if
(
GEN
.
getSelectCount
()
>
0
){
GEN
.
selDelete
()
};
GEN
.
affectedLayer
({
affected
:
'yes'
,
layer
:[
layer
],
clear_before
:
'yes'
});
if
(
GEN
.
GEN_TYPE
==
'incam'
){
GEN
.
COM
(
"reset_filter_criteria,filter_name=,criteria=all"
);
}
else
{
GEN
.
COM
(
"filter_atr_reset,filter_name=ref_select"
);
}
GEN
.
COM
(
"sel_ref_feat,pads_as=shape,mode=touch,exclude_syms=,include_syms=,use=filter,f_types=line
\
;pad
\
;surface
\
;arc
\
;text,polarity=positive
\
;negative,layers="
+
layer_tmp1
);
if
(
GEN
.
getSelectCount
()
>
0
){
GEN
.
selMoveOther
({
target_layer
:
ss_text
,
invert
:
'no'
});
}
}
// 将文字属性挑选
GEN
.
COM
(
"filter_reset,filter_name=popup"
);
GEN
.
selectByFilter
({
feat_types
:
'text'
}
);
if
(
GEN
.
getSelectCount
()
>
0
){
GEN
.
selMoveOther
({
target_layer
:
ss_text
,
invert
:
'no'
});
}
delLayer
([
ss_line_arc
,
ss_line
,
cover_lyr_2
,
layer_tmp1
,
layer_tmp2
]);
}
}
})
}
GEN
.
COM
(
"disp_on"
)
var
ref_layers
=
work_layers
.
filter
(
function
(
layer
){
return
GEN
.
isLayerExists
({
job
:
job
,
layer
:
layer
+
par
.
silk_suffix
})
}).
map
(
function
(
layer
){
return
{
work_layer
:
layer
,
ref_layer
:
layer
+
par
.
silk_suffix
}
})
if
(
ref_layers
.
length
>
0
)
{
ref_layers
.
forEach
(
function
(
layerInfo
){
GEN
.
affectedLayer
({
affected
:
'no'
,
mode
:
'all'
})
GEN
.
clearLayers
()
var
work_layer
=
layerInfo
.
work_layer
;
var
ref_layer
=
layerInfo
.
ref_layer
;
IKM
.
msg
(
work_layer
+
"层字框分离"
);
GEN
.
workLayer
({
name
:
work_layer
,
display_number
:
1
,
clear_before
:
'yes'
});
if
(
correct
(
work_layer
)){
var
tmp
=
work_layer
;
work_layer
=
ref_layer
,
ref_layer
=
tmp
;
}
GEN
.
displayLayer
({
name
:
ref_layer
,
number
:
2
});
var
flag
=
true
;
IKM
.
msg
(
"请选择需移动的文字或者的文字框,不需制作了请【左键框选空白处】"
)
while
(
flag
){
var
tmp_con
=
GEN
.
MOUSE
({
type
:
'r'
,
text
:
"Please Select"
});
GEN
.
COM
(
"filter_area_strt"
)
GEN
.
COM
(
"filter_area_xy,x="
+
tmp_con
.
x1
+
",y="
+
tmp_con
.
y1
)
GEN
.
COM
(
"filter_area_xy,x="
+
tmp_con
.
x2
+
",y="
+
tmp_con
.
y2
)
GEN
.
COM
(
"filter_area_end,layer=,filter_name=popup,operation=select,area_type=rectangle,inside_area=yes,intersect_area=no"
)
if
(
GEN
.
getSelectCount
()
>
0
){
if
(
correct
(
work_layer
)){
var
tmp
=
work_layer
;
work_layer
=
ref_layer
,
ref_layer
=
tmp
;
}
GEN
.
selSubstitute
({
tol
:
1
,
mode
:
'select'
});
GEN
.
selMoveOther
({
target_layer
:
ref_layer
,
invert
:
'no'
});
}
else
{
flag
=
false
;
}
}
})
}
})
}
// 文字框按阻焊扩大
function
slBoxOptimize
(
props
){
// 1. step过滤
var
workstep
=
props
.
workstep
;
// 2.过滤工作层
var
work_layers
=
getLayer
({
layer_type
:
"silk_screen"
,
context
:
"board"
})
if
(
/yes/ig
.
test
(
par
.
select_lyr
)){
var
matrix
=
GEN
.
getMatrix
({
job
:
job
});
var
layers
=
Object
.
keys
(
matrix
).
map
(
function
(
key
){
var
tmp
=
{};
tmp
[
key
]
=
key
;
return
tmp
})
work_layers
=
gui
.
selectMultiple
({
defaultsize
:[
200
,
100
],
title
:
"请先择工作层"
,
list
:
layers
,
defaultvalue
:
work_layers
,
columns
:
4
,
gen
:
GEN
})
}
if
(
work_layers
.
length
==
0
)
{
return
"没有先择layer"
}
var
matrix
=
GEN
.
getMatrix
({
job
:
job
})
var
outLayers
=
[];
for
(
var
key
in
matrix
)
{
var
info
=
matrix
[
key
]
if
(
info
.
context
==
"board"
&&
info
.
layer_type
==
"signal"
&&
/top|bot/
.
test
(
info
.
side
)
){
outLayers
.
push
({
name
:
key
,
side
:
info
.
side
,
info
:
info
workstep
.
forEach
(
function
(
step
){
var
units
=
par
.
units
;
GEN
.
openStep
({
job
:
job
,
name
:
step
});
GEN
.
units
({
type
:
units
});
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
.
zoomHome
();
var
ref_layers
=
work_layers
.
filter
(
function
(
layer
){
return
GEN
.
isLayerExists
({
job
:
job
,
layer
:
layer
+
par
.
cover_layer_suffix
})
}).
map
(
function
(
layer
){
return
{
work_layer
:
layer
,
ref_layer
:
layer
+
par
.
cover_layer_suffix
}
})
if
(
ref_layers
.
length
>
0
)
{
ref_layers
.
forEach
(
function
(
layerInfo
){
// {"work_layer":"gto","ref_layer":"gto_cover"}
GEN
.
affectedLayer
({
affected
:
'no'
,
mode
:
'all'
})
GEN
.
clearLayers
()
var
work_layer
=
layerInfo
.
work_layer
;
var
ref_layer
=
layerInfo
.
ref_layer
;
var
tmp1
=
'tl_script_tmp1'
,
tmp2
=
"tl_script_tmp2"
;
delLayer
([
tmp1
,
tmp2
]);
// 放大
var
ref_pad
=
"tmp_ref_pad"
;
delLayer
([
ref_pad
]);
GEN
.
createLayer
({
job
:
job
,
layer
:
ref_pad
,
context
:
'misc'
,
type
:
'document'
});
var
flag
=
true
;
IKM
.
msg
(
work_layer
+
"层:请选择需放大的文字框,不需制作了请【左键框选空白处】"
)
while
(
flag
){
GEN
.
workLayer
({
name
:
work_layer
,
display_number
:
1
,
clear_before
:
'yes'
});
GEN
.
displayLayer
({
name
:
ref_layer
,
number
:
2
});
var
tmp_con
=
GEN
.
MOUSE
({
type
:
'r'
,
text
:
"Please Select"
});
GEN
.
workLayer
({
name
:
work_layer
,
display_number
:
1
,
clear_before
:
'yes'
});
GEN
.
COM
(
"filter_area_strt"
)
GEN
.
COM
(
"filter_area_xy,x="
+
tmp_con
.
x1
+
",y="
+
tmp_con
.
y1
)
GEN
.
COM
(
"filter_area_xy,x="
+
tmp_con
.
x2
+
",y="
+
tmp_con
.
y2
)
GEN
.
COM
(
"filter_area_end,layer=,filter_name=popup,operation=select,area_type=rectangle,inside_area=yes,intersect_area=no"
)
if
(
GEN
.
getSelectCount
()
>
0
){
selCopyOther
({
layer
:
tmp1
})
// 判断特殊倾斜情况
var
layer_feature
=
GEN
.
getFeatures
({
job
:
job
,
step
:
step
,
layer
:
tmp1
})
// [{"type":"line","xs":"2.6998077","ys":"3.321854","xe":"2.6998077","ye":"3.4104367","symbol":"r7","polarity":"positive","attributes":[]},{"type":"line","xs":"2.6998077","ys":"3.321854","xe":"2.8912643","ye":"3.321854","symbol":"r7","polarity":"positive","attributes":[]},{"type":"line","xs":"2.6998077","ys":"3.4104367","xe":"2.8912643","ye":"3.4104367","symbol":"r7","polarity":"positive","attributes":[]},{"type":"line","xs":"2.8912643","ys":"3.321854","xe":"2.8912643","ye":"3.4104367","symbol":"r7","polarity":"positive","attributes":[]}]
// 1.算出最长边的角度
var
angle
=
getAngle
(
layer_feature
)
if
(
angle
%
90
==
0
)
{
angle
=
0
}
if
(
angle
<
0
){
angle
=
90
+
angle
}
// 求中心点
GEN
.
workLayer
({
name
:
ref_layer
,
display_number
:
1
,
clear_before
:
'yes'
});
var
layer_limits_tmp1
=
GEN
.
getLayerLimits
({
job
:
job
,
step
:
step
,
layer
:
tmp1
,
units
:
units
});
GEN
.
selectByFilter
({
area_rect
:{
x1
:
layer_limits_tmp1
.
xmin
-
0.01
,
y1
:
layer_limits_tmp1
.
ymin
-
0.01
,
x2
:
layer_limits_tmp1
.
xmax
+
0.01
,
y2
:
layer_limits_tmp1
.
ymax
+
0.01
}});
selCopyOther
({
layer
:
"tmp_center"
})
var
layer_limits_tmp
=
GEN
.
getLayerLimits
({
job
:
job
,
step
:
step
,
layer
:
"tmp_center"
,
units
:
units
});
layer_limits_tmp
.
xc
=
layer_limits_tmp
.
xmin
-
0
+
layer_limits_tmp
.
xsize
/
2
;
layer_limits_tmp
.
yc
=
layer_limits_tmp
.
ymin
-
0
+
layer_limits_tmp
.
ysize
/
2
;
delLayer
(
"tmp_center"
)
GEN
.
clearLayers
()
GEN
.
affectedLayer
({
affected
:
'no'
,
mode
:
'all'
})
GEN
.
affectedLayer
({
affected
:
'yes'
,
layer
:[
work_layer
,
tmp1
]})
GEN
.
COM
(
"filter_area_strt"
)
GEN
.
COM
(
"filter_area_xy,x="
+
tmp_con
.
x1
+
",y="
+
tmp_con
.
y1
)
GEN
.
COM
(
"filter_area_xy,x="
+
tmp_con
.
x2
+
",y="
+
tmp_con
.
y2
)
GEN
.
COM
(
"filter_area_end,layer=,filter_name=popup,operation=select,area_type=rectangle,inside_area=yes,intersect_area=no"
)
// 更具角度将其旋转
GEN
.
selTransform
({
mode
:
'anchor'
,
oper
:
"rotate"
,
x_anchor
:
layer_limits_tmp
.
xc
,
y_anchor
:
layer_limits_tmp
.
yc
,
angle
:
angle
})
GEN
.
affectedLayer
({
affected
:
'no'
,
mode
:
'all'
})
GEN
.
workLayer
({
name
:
ref_layer
,
display_number
:
1
,
clear_before
:
'yes'
});
GEN
.
selectByFilter
({
area_rect
:{
x1
:
layer_limits_tmp1
.
xmin
-
0.01
,
y1
:
layer_limits_tmp1
.
ymin
-
0.01
,
x2
:
layer_limits_tmp1
.
xmax
+
0.01
,
y2
:
layer_limits_tmp1
.
ymax
+
0.01
}});
GEN
.
selTransform
({
mode
:
'anchor'
,
oper
:
"rotate"
,
x_anchor
:
layer_limits_tmp
.
xc
,
y_anchor
:
layer_limits_tmp
.
yc
,
angle
:
angle
})
GEN
.
copyLayer
({
source_job
:
job
,
source_step
:
step
,
source_layer
:
tmp1
,
dest_layer
:
tmp2
,
mode
:
'replace'
,
invert
:
'no'
});
var
text_tmp
=
'tl_tmp_text'
;
GEN
.
copyLayer
({
source_job
:
job
,
source_step
:
step
,
source_layer
:
tmp1
,
dest_layer
:
text_tmp
,
mode
:
'replace'
,
invert
:
'no'
});
var
layer_limits
=
GEN
.
getLayerLimits
({
job
:
job
,
step
:
step
,
layer
:
text_tmp
,
units
:
units
});
layer_limits
.
xc
=
layer_limits
.
xmin
-
0
+
layer_limits
.
xsize
/
2
;
layer_limits
.
yc
=
layer_limits
.
ymin
-
0
+
layer_limits
.
ysize
/
2
;
var
scalex
=
1
,
scaley
=
1
;
GEN
.
affectedLayer
({
affected
:
'yes'
,
layer
:[
ref_layer
],
clear_before
:
'yes'
});
GEN
.
selectByFilter
({
area_rect
:{
x1
:
layer_limits
.
xmin
-
0.01
,
y1
:
layer_limits
.
ymin
-
0.01
,
x2
:
layer_limits
.
xmax
+
0.01
,
y2
:
layer_limits
.
ymax
+
0.01
}});
if
(
GEN
.
getSelectCount
()
>
0
){
GEN
.
selCopyOther
({
target_layer
:
ref_pad
,
invert
:
'no'
});
var
layer_limits_pad
=
GEN
.
getLayerLimits
({
job
:
job
,
step
:
step
,
layer
:
ref_pad
,
units
:
units
});
var
feature
=
GEN
.
getFeatures
({
job
:
job
,
step
:
step
,
layer
:
tmp1
,
units
:
units
});
var
line_width
=
feature
[
0
].
symbol
.
slice
(
1
)
/
1000
;
var
tmp_ps
=
0.004
;
if
(
units
==
"mm"
){
tmp_ps
=
tmp_ps
*
25.4
}
// {"layer_limits_pad":{"xmin":"68.6901125","ymin":"84.4900925","xmax":"73.310115","ymax":"86.5100925",
// "xsize":4.620002499999998,"ysize":2.019999999999996},"line_width":0.1778,
// "layer_limits":{"xmin":"68.486215","ymin":"84.2861925","xmax":"73.527","ymax":"86.714",
// "xsize":5.040785,"ysize":2.4278075,"xc":71.0066075,"yc":85.50009625}}
scalex
=
(
Number
(
layer_limits_pad
.
xsize
)
+
line_width
*
2
+
tmp_ps
)
/
(
layer_limits
.
xsize
);
if
(
scalex
<
1
)
{
scalex
=
1
}
scaley
=
(
Number
(
layer_limits_pad
.
ysize
)
+
line_width
*
2
+
tmp_ps
)
/
(
layer_limits
.
ysize
);
if
(
scaley
<
1
)
{
scaley
=
1
}
}
delLayer
(
text_tmp
)
GEN
.
affectedLayer
({
affected
:
'yes'
,
layer
:[
tmp1
],
clear_before
:
'yes'
});
GEN
.
selTransform
({
mode
:
'anchor'
,
oper
:
'scale'
,
x_anchor
:
layer_limits_tmp
.
xc
,
y_anchor
:
layer_limits_tmp
.
yc
,
x_scale
:
scalex
,
y_scale
:
scaley
})
// {"mode":"anchor","oper":"scale","x_anchor":71.0066075,"y_anchor":85.50009625,"x_scale":1,"y_scale":1}
// 检查是否含单根线
// var tmp = 'tl-'+tmp1+'tmp1++';
// var _tmp2 = 'tl-'+tmp1+'tmp2++';
// var tmp3 = 'tl-'+tmp1+'-alone';
// var cale_x = scalex; // ?
// var cale_y = scaley; // ?
// GEN.createLayer({job:job,layer:tmp,context:'misc',type:'document',delete_exists:'yes'});
// GEN.createLayer({job:job,layer:tmp3,context:'misc',type:'document',delete_exists:'yes'});
// GEN.selCopyOther({target_layer:tmp,invert:'no'});
// GEN.affectedLayer({affected:'yes',mode:'single',layer:tmp,clear_before:'yes'});
// GEN.selContourize();
// GEN.DO_INFO("-t layer -e "+job+"/"+step+"/"+tmp+" -d FEAT_HIST");
// if (GEN.INFO_RESULT.gFEAT_HISTsurf > 0) {
// for(var i=1;i <= GEN.INFO_RESULT.gFEAT_HISTsurf;i++){
// GEN.createLayer({job:job,layer:_tmp2,context:'misc',type:'document',delete_exists:'yes'});
// GEN.affectedLayer({affected:'yes',mode:'single',layer:tmp,clear_before:'yes'});
// GEN.COM('sel_layer_feat',{operation:'select',layer:tmp,index:i});
// GEN.selCopyOther({target_layer:_tmp2,invert:'no'});
// GEN.affectedLayer({affected:'yes',mode:'single',layer:_tmp2,clear_before:'yes'});
// GEN.COM('sel_surf2outline',{width:1});
// GEN.COM('filter_reset',{filter_name:'popup'});
// GEN.selectByFilter({feat_types:'arc',polarity:'positive',profile:'all'});
// if (GEN.getSelectCount() > 0) {GEN.selDelete() } ;
// var feat = GEN.getFeatures({job:job,step:step,layer:_tmp2});
// var hash = {};
// for(var i=0;i < feat;i++){
// for(var k = i+1;k < feat.length; k++){
// if ((feat[i].xs == feat[k].xs && feat[i].ys == feat[k].ys) ||
// (feat[i].xs == feat[k].xe && feat[i].ys == feat[k].ye) ){
// if(!hash[i+'star']){hash[i+'star'] = {}}
// hash[i+'star'][x] = feat[i].xs;
// hash[i+'star'][y] = feat[i].ys;
// }
// if ((feat[i].xe == feat[k].xs && feat[i].ye == feat[k].ys) ||
// (feat[i].xe == feat[k].xe && feat[i].ye == feat[k].ye)) {
// if(!hash[i+'end']){hash[i+'end'] = {}}
// hash[i+'end'][x] = feat[i].xe;
// hash[i+'end'][y] = feat[i].ye;
// }
// }
// }
// if (Object.keys(hash).length == 0) {
// GEN.affectedLayer({affected:'yes',mode:'single',layer:tmp1,clear_before:'yes'});
// GEN.selRefFeat({layers:_tmp2,use:'filter',mode:'touch'});
// if ( GEN.getSelectCount() > 0 ){
// GEN.COM('sel_move_other',{target_layer:tmp3,invert:'no',dx:0,dy:0,size:0,x_anchor:0,y_anchor:0,rotation:0,mirror:'none'});
// var change_scal_x = (1 / cale_x).toFixed(3) - 0;
// var change_scal_y = (1 / cale_y).toFixed(3) - 0;
// GEN.affectedLayer({affected:'yes',mode:'single',layer:tmp3,clear_before:'yes'});
// GEN.selTransform({mode:'axis',oper:'scale',x_anchor:0,y_anchor:0,x_scale:change_scal_x,y_scale:change_scal_y});
// // {"mode":"axis","oper":"scale","x_anchor":0,"y_anchor":0,"x_scale":1,"y_scale":1}
// GEN.COM('sel_move_other',{target_layer:tmp1,invert:'no',dx:0,dy:0,size:0,x_anchor:0,y_anchor:0,rotation:0,mirror:'none'});
// GEN.deleteLayer({job:job,layer:tmp3,step:step});
// }
// }
// }
// GEN.deleteLayer({job:job,layer:_tmp2,step:step});
// GEN.deleteLayer({job:job,layer:tmp,step:step});
// }else{
// GEN.deleteLayer({job:job,layer:tmp,step:step});
// if (GEN.isLayerEmpty({job:job,step:step,layer:tmp3})) {
// GEN.deleteLayer({job:job,layer:tmp3,step:step});
// }
// }
// 转回去
GEN
.
clearLayers
()
GEN
.
affectedLayer
({
affected
:
'yes'
,
layer
:[
work_layer
,
tmp1
,
tmp2
],
clear_before
:
"yes"
})
GEN
.
COM
(
"filter_area_strt"
)
GEN
.
COM
(
"filter_area_xy,x="
+
tmp_con
.
x1
+
",y="
+
tmp_con
.
y1
)
GEN
.
COM
(
"filter_area_xy,x="
+
tmp_con
.
x2
+
",y="
+
tmp_con
.
y2
)
GEN
.
COM
(
"filter_area_end,layer=,filter_name=popup,operation=select,area_type=rectangle,inside_area=yes,intersect_area=no"
)
GEN
.
selTransform
({
mode
:
'anchor'
,
oper
:
"rotate"
,
x_anchor
:
layer_limits_tmp
.
xc
,
y_anchor
:
layer_limits_tmp
.
yc
,
angle
:
360
-
angle
})
GEN
.
affectedLayer
({
affected
:
'no'
,
mode
:
'all'
})
GEN
.
workLayer
({
name
:
ref_layer
,
display_number
:
1
,
clear_before
:
'yes'
});
if
(
GEN
.
isLayerExists
({
job
:
job
,
step
:
step
,
layer
:
ref_pad
})){
GEN
.
affectedLayer
({
affected
:
'yes'
,
layer
:
ref_pad
})}
GEN
.
selectByFilter
({
area_rect
:{
x1
:
layer_limits_tmp1
.
xmin
-
0.01
,
y1
:
layer_limits_tmp1
.
ymin
-
0.01
,
x2
:
layer_limits_tmp1
.
xmax
+
0.01
,
y2
:
layer_limits_tmp1
.
ymax
+
0.01
}});
GEN
.
selTransform
({
mode
:
'anchor'
,
oper
:
"rotate"
,
x_anchor
:
layer_limits_tmp
.
xc
,
y_anchor
:
layer_limits_tmp
.
yc
,
angle
:
360
-
angle
})
GEN
.
workLayer
({
name
:
tmp1
,
display_number
:
1
,
clear_before
:
'yes'
});
GEN
.
displayLayer
({
name
:
work_layer
,
number
:
2
});
if
(
!
GEN
.
isLayerEmpty
({
job
:
job
,
step
:
step
,
layer
:
ref_pad
})){
GEN
.
displayLayer
({
name
:
ref_layer
,
number
:
3
})}
GEN
.
COM
(
'disp_on'
);
if
(
GEN
.
isLayerExists
({
job
:
job
,
step
:
step
,
layer
:
ref_pad
})){
GEN
.
deleteLayer
({
job
:
job
,
layer
:
ref_pad
})}
var
ans
=
GEN
.
PAUSE
(
'Please Check...'
);
if
(
!
/ok/ig
.
test
(
ans
)){
throw
"cancel"
}
GEN
.
COM
(
'disp_off'
);
var
tmp_symbol
=
'tl_script_tmp'
;
GEN
.
workLayer
({
name
:
tmp1
,
display_number
:
1
,
clear_before
:
'yes'
});
GEN
.
COM
(
'sel_all_feat'
);
GEN
.
COM
(
"sel_create_sym,symbol="
+
tmp_symbol
+
",x_datum=0,y_datum=0,delete=no,fill_dx=0.1,fill_dy=0.1,attach_atr=no,retain_atr=no"
);
GEN
.
workLayer
({
name
:
work_layer
,
display_number
:
1
,
clear_before
:
'yes'
});
GEN
.
selRefFeat
({
layers
:
tmp2
,
use
:
'filter'
,
mode
:
'cover'
});
GEN
.
COM
(
"sel_substitute,mode=substitute,symbol="
+
tmp_symbol
+
",tol="
+
par
.
tol
+
",x_datum=0,y_datum=0,dcode=0"
);
GEN
.
selectByFilter
({
include_syms
:
tmp_symbol
});
if
(
GEN
.
getSelectCount
()
>
0
){
GEN
.
selBreak
()};
GEN
.
COM
(
'disp_on'
);
GEN
.
COM
(
'truncate_layer'
,
{
layer
:
tmp1
});
GEN
.
COM
(
'truncate_layer'
,
{
layer
:
tmp2
});
GEN
.
COM
(
'disp_on'
);
GEN
.
COM
(
'sel_clear_feat'
);
GEN
.
units
({
type
:
units
});
}
else
{
flag
=
false
;
}
}
})
}
})
if
(
GEN
.
isLayerExists
({
job
:
job
,
layer
:
"tmp_ref_pad"
})){
GEN
.
deleteLayer
({
job
:
job
,
layer
:[
"tmp_ref_pad"
]})}
}
// 文字放大
function
slOptimize
(
props
)
{
var
info1
=
gui
.
showForm
({
title
:
'请手动匹配以下信息'
,
showcheck
:
1
,
gen
:
GEN
,
defaultsize
:[
200
,
100
],
ui
:
{
type
:
'ScrollArea'
,
property
:
{
widget_resizable
:
true
,
frame_shape
:
'NoFrame'
,
align
:
'Top'
},
child
:
{
type
:
'VBoxLayout'
,
property
:
{
margin
:
2
,
spacing
:
5
,
align
:
'Top'
},
pack
:
{
stretch
:
0
},
child
:[{
type
:
"FormGridLayout"
,
property
:
{
columns
:
1
,
label_alignment
:
'Top | Right'
,
margin
:
10
,
spacing
:
20
},
pack
:
{
stretch
:
0
},
child
:[{
name
:
'font_symbol'
,
pack
:
{
label
:
'文字symbol'
},
type
:
'LineEdit'
,
setter
:
function
(
obj
){
obj
.
setText
()
},
units
:
'um'
,
property
:
{
enabled
:
true
,
value
:
"200"
}
},
{
name
:
'x_scale'
,
pack
:
{
label
:
'文字距离x方向放大倍数'
},
type
:
'LineEdit'
,
setter
:
function
(
obj
){
obj
.
setText
()
},
property
:
{
value
:
1
,
enabled
:
true
}
},
{
name
:
'y_scale'
,
pack
:
{
label
:
'文字距离y方向放大倍数'
},
setter
:
function
(
obj
){
obj
.
setText
()
},
type
:
'LineEdit'
,
property
:
{
value
:
1.2
,
enabled
:
true
}
},
{
type
:
"stretch"
}]
}]
}
},
buttons
:[{
stock
:
"ok"
,
sensitive
:
true
,
command
:
function
(
data
)
{
}
},
{
stock
:
"cancel"
,
sensitive
:
true
,
command
:
function
(
ddata
)
{
}
},
{
stock
:
"help"
,
sensitive
:
true
,
command
:
function
(
data
)
{
}
}]
});
if
(
!
info1
){
throw
"未填写参数"
}
info1
=
JSON
.
parse
(
JSON
.
stringify
(
info1
))
var
x_scale1
=
info1
.
x_scale
;
var
y_scale1
=
info1
.
y_scale
;
// 1. step过滤
var
workstep
=
props
.
workstep
;
// 2.过滤工作层
var
work_layers
=
getLayer
({
layer_type
:
"silk_screen"
,
context
:
"board"
})
if
(
/yes/ig
.
test
(
par
.
select_lyr
)){
var
matrix
=
GEN
.
getMatrix
({
job
:
job
});
var
layers
=
Object
.
keys
(
matrix
).
map
(
function
(
key
){
var
tmp
=
{};
tmp
[
key
]
=
key
;
return
tmp
})
work_layers
=
gui
.
selectMultiple
({
defaultsize
:[
200
,
100
],
title
:
"请先择工作层"
,
list
:
layers
,
defaultvalue
:
work_layers
,
columns
:
4
,
gen
:
GEN
})
}
return
outLayers
if
(
work_layers
.
length
==
0
)
{
return
"没有先择layer"
}
var
matrix
=
GEN
.
getMatrix
({
job
:
job
})
workstep
.
forEach
(
function
(
step
)
{
GEN
.
openStep
({
job
:
job
,
name
:
step
})
GEN
.
units
({
type
:
par
.
units
})
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
.
zoomHome
();
work_layers
.
forEach
(
function
(
layer
){
var
font_layer
=
layer
+
par
.
silk_suffix
;
GEN
.
workLayer
({
name
:
font_layer
,
display_number
:
2
,
clear_before
:
'yes'
})
GEN
.
selClearFeature
()
GEN
.
selectByFilter
({
feat_types
:
"text"
})
if
(
GEN
.
getSelectCount
()
>
0
)
{
GEN
.
COM
(
"sel_break_level,attr_mode=merge"
)
}
GEN
.
COM
(
"filter_set,filter_name=popup,update_popup=no,feat_types=line
\
;arc"
)
GEN
.
COM
(
"filter_area_strt"
)
GEN
.
COM
(
"filter_area_end,layer=,filter_name=popup,operation=select,area_type=none,inside_area=no,intersect_area=no"
)
GEN
.
COM
(
"filter_reset,filter_name=popup"
)
GEN
.
selReverse
()
if
(
GEN
.
getSelectCount
()
>
0
)
{
GEN
.
selMoveOther
({
target_layer
:
layer
,
invert
:
'no'
,
dx
:
0
,
dy
:
0
,
size
:
0
})
}
GEN
.
selChangeSym
({
symbol
:
"r"
+
info1
.
font_symbol
})
var
tmp1
=
font_layer
+
"_1"
;
var
tmp2
=
font_layer
+
"_2"
;
var
tmp3
=
font_layer
+
"_3"
;
var
bk
=
font_layer
+
"_bk"
;
var
bk2
=
font_layer
+
"_ok"
;
[
tmp1
,
tmp2
,
tmp3
,
bk
,
bk2
].
forEach
(
function
(
v
){
if
(
GEN
.
isLayerExists
({
job
:
job
,
layer
:
v
})){
GEN
.
deleteLayer
({
job
:
job
,
layer
:[
v
]})}
})
// GEN.copyLayer({source_job:job,source_step:step,source_layer:font_layer,dest_layer:tmp1, mode:"replace"})
GEN
.
copyLayer
({
source_job
:
job
,
source_step
:
step
,
source_layer
:
font_layer
,
dest_layer
:
tmp3
,
mode
:
"replace"
})
GEN
.
copyLayer
({
source_job
:
job
,
source_step
:
step
,
source_layer
:
font_layer
,
dest_layer
:
bk2
,
mode
:
"replace"
})
// GEN.copyLayer({source_job:job,source_step:step,source_layer:font_layer,dest_layer:bk, mode:"replace"})
GEN
.
affectedLayer
({
affected
:
'no'
,
mode
:
'all'
})
GEN
.
selClearFeature
()
// GEN.workLayer({name:tmp1,display_number:2,clear_before:'yes'})
// GEN.selChangeSym({symbol:"r0.1"})
// 利用tmp3 快速定位
GEN
.
workLayer
({
name
:
tmp3
,
display_number
:
2
,
clear_before
:
'yes'
})
GEN
.
units
({
type
:
"mm"
})
GEN
.
selChangeSym
({
symbol
:
"r1000"
})
// 转铜皮 获取每一个铜皮的limits信息
GEN
.
selContourize
()
var
fast_features
=
GEN
.
getFeatures
({
job
:
job
,
step
:
step
,
layer
:
tmp3
,
options
:
"feat_index"
,
surface
:
1
,
units
:
"mm"
})
fast_features
=
featsToLimits
(
fast_features
)
fast_features
.
forEach
(
function
(
item
){
if
(
item
.
limit
.
xsize
>
item
.
limit
.
ysize
)
{
item
.
x_scale
=
x_scale1
item
.
y_scale
=
y_scale1
}
else
{
item
.
y_scale
=
x_scale1
item
.
x_scale
=
y_scale1
}
})
fast_features
.
forEach
(
function
(
item
){
GEN
.
workLayer
({
name
:
bk2
,
display_number
:
2
,
clear_before
:
'yes'
})
GEN
.
COM
(
"filter_area_strt"
)
GEN
.
COM
(
"filter_area_xy,x="
+
item
.
limit
.
xmin
+
",y="
+
item
.
limit
.
ymin
)
GEN
.
COM
(
"filter_area_xy,x="
+
item
.
limit
.
xmax
+
",y="
+
item
.
limit
.
ymax
)
GEN
.
COM
(
"filter_area_end,layer=,filter_name=popup,operation=select,area_type=rectangle,inside_area=yes,intersect_area=yes"
)
if
(
GEN
.
getSelectCount
()
>
0
)
{
GEN
.
selTransform
({
mode
:
'anchor'
,
oper
:
'scale'
,
x_anchor
:
item
.
limit
.
xc
,
y_anchor
:
item
.
limit
.
yc
,
x_scale
:
item
.
x_scale
,
y_scale
:
item
.
y_scale
})
}
})
var
flag
=
true
;
IKM
.
msg
(
font_layer
+
"层:请选择需放大的文字,不需制作了请【左键框选空白处】"
)
while
(
flag
){
var
bk2_tmp
=
bk2
+
"_tmp"
GEN
.
workLayer
({
name
:
font_layer
,
display_number
:
1
,
clear_before
:
'yes'
});
var
tmp_con
=
GEN
.
MOUSE
({
type
:
'r'
,
text
:
"Please Select"
});
var
info
=
gui
.
showForm
({
title
:
'请手动匹配以下信息'
,
showcheck
:
1
,
gen
:
GEN
,
defaultsize
:[
200
,
100
],
ui
:
{
type
:
'ScrollArea'
,
property
:
{
widget_resizable
:
true
,
frame_shape
:
'NoFrame'
,
align
:
'Top'
},
child
:
{
type
:
'VBoxLayout'
,
property
:
{
margin
:
2
,
spacing
:
5
,
align
:
'Top'
},
pack
:
{
stretch
:
0
},
child
:[{
type
:
"FormGridLayout"
,
property
:
{
columns
:
1
,
label_alignment
:
'Top | Right'
,
margin
:
10
,
spacing
:
20
},
pack
:
{
stretch
:
0
},
child
:[{
name
:
'font_symbol'
,
pack
:
{
label
:
'文字symbol'
},
type
:
'LineEdit'
,
setter
:
function
(
obj
){
obj
.
setText
()
},
units
:
'um'
,
property
:
{
enabled
:
true
,
value
:
"200"
}
},
{
name
:
'x_scale'
,
pack
:
{
label
:
'文字距离x方向放大倍数'
},
type
:
'LineEdit'
,
setter
:
function
(
obj
){
obj
.
setText
()
},
property
:
{
value
:
1
,
enabled
:
true
}
},
{
name
:
'y_scale'
,
pack
:
{
label
:
'文字距离y方向放大倍数'
},
setter
:
function
(
obj
){
obj
.
setText
()
},
type
:
'LineEdit'
,
property
:
{
value
:
1.2
,
enabled
:
true
}
},
{
type
:
"stretch"
}]
}]
}
},
buttons
:[{
stock
:
"ok"
,
sensitive
:
true
,
command
:
function
(
data
)
{
}
},
{
stock
:
"cancel"
,
sensitive
:
true
,
command
:
function
(
ddata
)
{
}
},
{
stock
:
"help"
,
sensitive
:
true
,
command
:
function
(
data
)
{
}
}]
});
if
(
!
info
){
throw
"未填写参数"
}
info
=
JSON
.
parse
(
JSON
.
stringify
(
info
))
var
x_scale
=
info
.
x_scale
;
var
y_scale
=
info
.
y_scale
;
GEN
.
workLayer
({
name
:
font_layer
,
display_number
:
1
,
clear_before
:
'yes'
});
GEN
.
COM
(
"filter_area_strt"
)
GEN
.
COM
(
"filter_area_xy,x="
+
tmp_con
.
x1
+
",y="
+
tmp_con
.
y1
)
GEN
.
COM
(
"filter_area_xy,x="
+
tmp_con
.
x2
+
",y="
+
tmp_con
.
y2
)
GEN
.
COM
(
"filter_area_end,layer=,filter_name=popup,operation=select,area_type=rectangle,inside_area=yes,intersect_area=no"
)
if
(
GEN
.
getSelectCount
()
>
0
){
var
tmp_layer
=
font_layer
+
"_tmp"
;
selCopyOther
({
delExist
:
true
,
layer
:
tmp_layer
})
GEN
.
workLayer
({
name
:
tmp_layer
,
display_number
:
1
,
clear_before
:
'yes'
});
GEN
.
selAllFeat
()
selCopyOther
({
delExist
:
true
,
layer
:
bk2_tmp
})
GEN
.
workLayer
({
name
:
bk2
,
display_number
:
1
,
clear_before
:
'yes'
});
GEN
.
COM
(
"filter_area_strt"
)
GEN
.
COM
(
"filter_area_xy,x="
+
tmp_con
.
x1
+
",y="
+
tmp_con
.
y1
)
GEN
.
COM
(
"filter_area_xy,x="
+
tmp_con
.
x2
+
",y="
+
tmp_con
.
y2
)
GEN
.
COM
(
"filter_area_end,layer=,filter_name=popup,operation=select,area_type=rectangle,inside_area=yes,intersect_area=no"
)
if
(
GEN
.
getSelectCount
()
>
0
)
{
GEN
.
selDelete
()}
GEN
.
workLayer
({
name
:
tmp_layer
,
display_number
:
1
,
clear_before
:
'yes'
});
var
limits
=
GEN
.
getLayerLimits
({
job
:
job
,
step
:
step
,
layer
:
tmp_layer
,
units
:
"mm"
})
for
(
var
key
in
limits
)
{
limits
[
key
]
=
limits
[
key
]
-
0
;
}
limits
.
xc
=
limits
.
xmin
+
limits
.
xsize
/
2
limits
.
yc
=
limits
.
ymin
+
limits
.
ysize
/
2
// 获取里面有几个字母 每一个字母的limits信息
GEN
.
selChangeSym
({
symbol
:
"r1"
})
GEN
.
selContourize
()
var
feas
=
GEN
.
getFeatures
({
job
:
job
,
step
:
step
,
layer
:
tmp_layer
,
options
:
"feat_index"
,
units
:
"mm"
})
if
(
feas
.
length
==
1
)
{
GEN
.
workLayer
({
name
:
bk2_tmp
,
display_number
:
2
,
clear_before
:
'yes'
});
GEN
.
selTransform
({
mode
:
'anchor'
,
oper
:
'scale'
,
x_anchor
:
limits
.
xc
,
y_anchor
:
limits
.
yc
,
x_scale
:
x_scale
,
y_scale
:
y_scale
})
GEN
.
selMoveOther
({
target_layer
:
bk2
,
invert
:
'no'
,
dx
:
0
,
dy
:
0
,
size
:
0
})
}
else
if
(
feas
.
length
>
1
)
{
var
limits_info
=
[];
feas
.
forEach
(
function
(
item
)
{
var
index
=
item
.
index
;
GEN
.
selLayerFeat
({
layer
:
tmp_layer
,
index
:
index
,
operation
:
"select"
});
if
(
GEN
.
getSelectCount
()
>
0
)
{
var
tmp_l
=
GEN
.
getLayerLimits
({
job
:
job
,
step
:
step
,
layer
:
tmp_layer
,
units
:
"mm"
,
options
:
"select"
})
for
(
var
key
in
tmp_l
)
{
tmp_l
[
key
]
=
tmp_l
[
key
]
-
0
;
}
tmp_l
.
xc
=
tmp_l
.
xmin
+
tmp_l
.
xsize
/
2
tmp_l
.
yc
=
tmp_l
.
ymin
+
tmp_l
.
ysize
/
2
limits_info
.
push
({
index
:
index
,
limits
:
tmp_l
})
GEN
.
selClearFeature
()
}
})
var
rodata
=
[]
limits_info
.
forEach
(
function
(
item
,
i
)
{
if
(
limits_info
[
i
+
1
]){
rodata
.
push
(
getRodate
({
xs
:
item
.
limits
.
xc
,
ys
:
item
.
limits
.
yc
,
xe
:
limits_info
[
i
+
1
].
limits
.
xc
,
ye
:
limits_info
[
i
+
1
].
limits
.
yc
}))
}
})
var
angle
=
rodata
.
reduce
(
function
(
a
,
b
)
{
return
a
+
b
})
/
rodata
.
length
;
if
(
Math
.
abs
(
angle
)
<
10
)
{
angle
=
0
}
GEN
.
workLayer
({
name
:
bk2_tmp
,
display_number
:
2
,
clear_before
:
'yes'
});
GEN
.
selTransform
({
mode
:
'anchor'
,
oper
:
"rotate"
,
x_anchor
:
limits
.
xc
,
y_anchor
:
limits
.
yc
,
angle
:
angle
})
// 按照中心放大
var
limits2
=
GEN
.
getLayerLimits
({
job
:
job
,
step
:
step
,
layer
:
tmp_layer
,
units
:
"mm"
})
for
(
var
key
in
limits
)
{
limits2
[
key
]
=
limits2
[
key
]
-
0
;
}
limits2
.
xc
=
limits2
.
xmin
+
limits2
.
xsize
/
2
limits2
.
yc
=
limits2
.
ymin
+
limits2
.
ysize
/
2
if
(
limits2
.
xsize
>
limits2
.
ysize
)
{
limits2
.
x_scale
=
x_scale
limits2
.
y_scale
=
y_scale
}
else
{
limits2
.
y_scale
=
x_scale
limits2
.
x_scale
=
y_scale
}
GEN
.
selTransform
({
mode
:
'anchor'
,
oper
:
'scale'
,
x_anchor
:
limits2
.
xc
,
y_anchor
:
limits2
.
yc
,
x_scale
:
limits2
.
x_scale
,
y_scale
:
limits2
.
y_scale
})
GEN
.
selTransform
({
mode
:
'anchor'
,
oper
:
"rotate"
,
x_anchor
:
limits
.
xc
,
y_anchor
:
limits
.
yc
,
angle
:
360
-
angle
})
GEN
.
selMoveOther
({
target_layer
:
bk2
,
invert
:
'no'
,
dx
:
0
,
dy
:
0
,
size
:
0
})
}
GEN
.
deleteLayer
({
job
:
job
,
layer
:[
tmp_layer
]})
}
else
{
flag
=
false
}
if
(
GEN
.
isLayerExists
({
job
:
job
,
layer
:
bk2_tmp
}))
{
GEN
.
deleteLayer
({
job
:
job
,
layer
:[
bk2_tmp
]})
}
}
// 将ok的移动到文字层
GEN
.
workLayer
({
name
:
font_layer
,
display_number
:
2
,
clear_before
:
'yes'
});
GEN
.
selDelete
();
GEN
.
workLayer
({
name
:
bk2
,
display_number
:
2
,
clear_before
:
'yes'
});
GEN
.
selMoveOther
({
target_layer
:
font_layer
,
invert
:
'no'
,
dx
:
0
,
dy
:
0
,
size
:
0
});
GEN
.
workLayer
({
name
:
font_layer
,
display_number
:
2
,
clear_before
:
'yes'
});
GEN
.
selMoveOther
({
target_layer
:
layer
,
invert
:
'no'
,
dx
:
0
,
dy
:
0
,
size
:
0
});
[
tmp1
,
tmp2
,
tmp3
,
bk
,
bk2
,
"_ok"
,
"_fail"
,
font_layer
].
forEach
(
function
(
v
){
if
(
GEN
.
isLayerExists
({
job
:
job
,
layer
:
v
})){
GEN
.
deleteLayer
({
job
:
job
,
layer
:[
v
]})}
});
var
cover_lyr
=
layer
+
par
.
cover_layer_suffix
;
if
(
GEN
.
isLayerExists
({
job
:
job
,
layer
:
cover_lyr
})){
GEN
.
workLayer
({
name
:
cover_lyr
,
display_number
:
2
,
clear_before
:
'yes'
});
GEN
.
selMoveOther
({
target_layer
:
layer
,
invert
:
"yes"
,
dx
:
0
,
dy
:
0
,
size
:
par
.
cover_size
});
}
})
})
}
function
selCopyOther
(
props
){
// {layer , invent, dx, dy , size}
if
(
GEN
.
getSelectCount
()
>
0
){
if
(
!
props
||
!
props
.
layer
){
return
}
if
(
props
.
delExist
){
if
(
GEN
.
isLayerExists
({
job
:
job
,
layer
:
props
.
layer
})){
GEN
.
deleteLayer
({
job
:
job
,
layer
:[
props
.
layer
]})}}
GEN
.
selCopyOther
({
dest
:
'layer_name'
,
target_layer
:
props
.
layer
,
invert
:
props
.
invert
||
'no'
,
dx
:
props
.
dx
||
0
,
dy
:
props
.
dy
||
0
,
size
:
props
.
size
||
0
})
}
}
function
getLayer
(
props
){
if
(
!
props
){
return
}
if
(
!
props
.
context
){
props
.
context
=
"board"
}
var
matrix
=
GEN
.
getMatrix
({
job
:
job
})
return
Object
.
keys
(
matrix
).
reduce
(
function
(
a
,
b
){
var
info
=
matrix
[
b
];
var
ret
=
true
;
for
(
var
key
in
props
)
{
if
(
!
Array
.
isArray
(
props
[
key
])){
props
[
key
]
=
[
props
[
key
]]}
if
(
info
[
key
]
&&
props
[
key
].
indexOf
(
info
[
key
])
<
0
){
ret
=
false
}
}
if
(
ret
){
a
.
push
(
props
.
res
==
"info"
?
info
:
b
)
}
return
a
},[])
}
function
NewGUI
(
gui
)
{
this
.
msgBox
=
function
(
props
){
// title type content button
props
=
props
||
{}
return
gui
.
msgBox
(
props
.
title
||
"title"
,
props
.
type
||
"info"
,
props
.
content
||
"content"
,
props
.
button
||
[
"ok"
,
"cancel"
]);
}
this
.
selectFromTreeview
=
gui
.
selectFromTreeview
this
.
confirm
=
function
(
props
)
{
props
=
props
||
{}
return
gui
.
confirm
(
props
.
content
||
"content"
,
props
.
button
||
[
"yes"
,
"no"
],
props
.
type
||
"question"
);
}
this
.
selectFile
=
function
(
props
){
// "choose something", "*", true, "file", "/home/abby/fast_io"
props
=
props
||
{}
return
gui
.
selectFile
(
props
.
title
||
"choose something"
,
props
.
filter
||
"*"
,
props
.
multiple
||
false
,
"file"
,
""
);
}
this
.
selectSingle
=
function
(
props
)
{
props
=
props
||
{}
return
gui
.
selectSingle
({
"title"
:
props
.
title
||
"select"
,
"list"
:
props
.
list
||
[],
"default"
:
props
[
"default"
]
||
""
,
"columns"
:
props
.
columns
||
2
,
"gen"
:
props
.
gen
||
GEN
});
}
this
.
selectMultiple
=
function
(
props
)
{
props
=
props
||
{}
return
gui
.
selectMultiple
({
"title"
:
props
.
title
||
"select"
,
"list"
:
props
.
list
||
[],
"defaultvalue"
:
props
[
"defaultvalue"
]
||
[
""
],
"defaultsize"
:
props
[
"defaultsize"
]
||
[
200
,
100
],
"columns"
:
props
.
columns
||
2
,
"gen"
:
props
.
gen
||
GEN
});
}
this
.
selectFromTable
=
gui
.
selectFromTable
this
.
snapScreen
=
gui
.
snapScreen
this
.
imageViewer
=
gui
.
imageViewer
this
.
inputBox
=
gui
.
inputBox
this
.
showForm
=
gui
.
showForm
this
.
selectLayer
=
function
(
props
){
props
=
props
||
{}
return
gui
.
selectLayer
({
title
:
props
.
title
||
"请选择层"
,
filter
:
props
.
filter
||
".*"
,
// regular expression
selectmode
:
props
.
selectmode
||
"multiple"
,
// single, multiple
context
:
props
.
context
||
"all"
,
// all, board, misc
layertype
:
props
.
layertype
||
"signal"
,
// default type of layertypelist
defaultsize
:
props
.
defaultsize
||
[
600
,
400
],
// window size
layermatrix
:
props
.
layermatrix
||
props
.
matrix
,
layertypelist
:
props
.
layertypelist
||
[
{
name
:
"all"
,
display_name
:
"all"
,
filter
:
function
(
x
)
{
return
x
}},
{
name
:
"signal"
,
display_name
:
"signal"
,
filter
:
function
(
x
)
{
return
x
[
"layer_type"
]
===
"signal"
;
}},
{
name
:
"power_ground"
,
display_name
:
"power_ground"
,
filter
:
function
(
x
)
{
return
x
[
"layer_type"
]
===
"power_ground"
;
}},
{
name
:
"mixed"
,
display_name
:
"mixed"
,
filter
:
function
(
x
)
{
return
x
[
"layer_type"
]
===
"mixed"
;
}},
{
name
:
"solder_mask"
,
display_name
:
"solder_mask"
,
filter
:
function
(
x
)
{
return
x
[
"layer_type"
]
===
"solder_mask"
;
}},
{
name
:
"silk_screen"
,
display_name
:
"silk_screen"
,
filter
:
function
(
x
)
{
return
x
[
"layer_type"
]
===
"silk_screen"
;
}},
{
name
:
"solder_paste"
,
display_name
:
"solder_paste"
,
filter
:
function
(
x
)
{
return
x
[
"layer_type"
]
===
"solder_paste"
;
}},
{
name
:
"drill"
,
display_name
:
"drill"
,
filter
:
function
(
x
)
{
return
x
[
"layer_type"
]
===
"drill"
;
}},
{
name
:
"rout"
,
display_name
:
"rout"
,
filter
:
function
(
x
)
{
return
x
[
"layer_type"
]
===
"rout"
;
}},
{
name
:
"document"
,
display_name
:
"document"
,
filter
:
function
(
x
)
{
return
x
[
"layer_type"
]
===
"document"
;
}}
],
gen
:
props
.
GEN
||
GEN
})
}
this
.
lockUnlockLayer
=
function
(
props
){
props
=
props
||
{}
var
tmp
=
{}
if
(
props
.
matrix
)
{
for
(
var
key
in
props
.
matrix
)
{
var
item
=
props
.
matrix
[
key
]
tmp
[
key
]
=
{
row
:
item
.
row
,
name
:
item
.
name
}
}
}
return
gui
.
lockUnlockLayer
({
title
:
props
.
title
||
"lockUnlockLayer"
,
layermatrix
:
props
.
layermatrix
||
tmp
})
}
this
.
passwordBox
=
function
(
props
){
props
=
props
||
{}
return
gui
.
passwordBox
({
title
:
props
.
title
||
"password"
,
password
:
props
.
password
||
"1212"
})
}
this
.
selectJobLayer
=
function
(
props
)
{
props
=
props
||
{}
return
gui
.
selectJobLayer
({
layertypelist
:
props
.
layertypelist
||
[
{
name
:
"all"
,
display_name
:
"all"
,
filter
:
function
(
x
)
{
return
x
}},
{
name
:
"signal"
,
display_name
:
"signal"
,
filter
:
function
(
x
)
{
return
x
[
"layer_type"
]
===
"signal"
;
}},
{
name
:
"power_ground"
,
display_name
:
"power_ground"
,
filter
:
function
(
x
)
{
return
x
[
"layer_type"
]
===
"power_ground"
;
}},
{
name
:
"mixed"
,
display_name
:
"mixed"
,
filter
:
function
(
x
)
{
return
x
[
"layer_type"
]
===
"mixed"
;
}},
{
name
:
"solder_mask"
,
display_name
:
"solder_mask"
,
filter
:
function
(
x
)
{
return
x
[
"layer_type"
]
===
"solder_mask"
;
}},
{
name
:
"silk_screen"
,
display_name
:
"silk_screen"
,
filter
:
function
(
x
)
{
return
x
[
"layer_type"
]
===
"silk_screen"
;
}},
{
name
:
"solder_paste"
,
display_name
:
"solder_paste"
,
filter
:
function
(
x
)
{
return
x
[
"layer_type"
]
===
"solder_paste"
;
}},
{
name
:
"drill"
,
display_name
:
"drill"
,
filter
:
function
(
x
)
{
return
x
[
"layer_type"
]
===
"drill"
;
}},
{
name
:
"rout"
,
display_name
:
"rout"
,
filter
:
function
(
x
)
{
return
x
[
"layer_type"
]
===
"rout"
;
}},
{
name
:
"document"
,
display_name
:
"document"
,
filter
:
function
(
x
)
{
return
x
[
"layer_type"
]
===
"document"
;
}}
],
//defaultlayertype: "ha",
joblist
:
props
.
joblist
||
[],
defaultJob
:
props
.
defaultJob
||
[],
// select by default
steplist
:
props
.
steplist
||
[],
// defaultstep: "step3",
showstep
:
props
.
showstep
||
true
,
selectmode
:
props
.
selectmode
||
"multiple"
,
// single/multiple
layermatrix
:
props
.
layermatrix
||
{
},
defaultlayer
:
props
.
defaultlayer
||
[]
})
}
}
function
getWorkStep
(
props
){
var
steplists
=
GEN
.
getStepList
({
job
:
job
});
if
(
steplists
.
length
==
0
){
return
"该料号没有step"
}
var
steps_tmp
=
steplists
.
filter
(
function
(
name
){
var
reg
=
new
RegExp
(
par
.
step
,
"ig"
)
return
reg
.
test
(
name
)
})
if
(
steplists
.
length
==
0
){
return
"根据脚本参数过滤出来的step不存在,请检查资料或者脚本参数配置!"
}
var
workstep
=
gui
.
selectMultiple
({
title
:
"请先择工作step"
,
size
:[
200
,
100
],
defaultsize
:[
200
,
100
],
list
:
steplists
.
map
(
function
(
v
){
var
tmp
=
{};
tmp
[
v
]
=
v
;
return
tmp
}),
defaultvalue
:
steps_tmp
,
columns
:
1
,
gen
:
GEN
})
if
(
workstep
.
length
==
0
)
{
return
"没有先择step"
}
return
workstep
}
function
delLayer
(
layer
){
if
(
!
Array
.
isArray
(
layer
)){
layer
=
[
layer
]
}
layer
=
layer
.
filter
(
function
(
v
){
return
GEN
.
isLayerExists
({
job
:
job
,
layer
:
v
})})
if
(
layer
.
length
){
GEN
.
deleteLayer
({
job
:
job
,
layer
:
layer
})
}
}
function
correct
(
work_layer
){
var
tmp
=
GEN
.
getWorkLayer
();
return
tmp
!==
work_layer
;
}
function
getAngle
(
features
){
// 获取最长边的角度
features
.
sort
(
function
(
a
,
b
){
a
.
length
=
getLineLength
(
a
);
b
.
length
=
getLineLength
(
b
);
return
a
.
length
-
b
.
length
})
return
getRodate
(
features
[
features
.
length
-
1
])
}
function
getLineLength
(
line
){
if
(
line
.
type
!=
"line"
){
return
0
}
return
Math
.
sqrt
((
line
.
xe
-
line
.
xs
)
*
(
line
.
xe
-
line
.
xs
)
+
(
line
.
ye
-
line
.
ys
)
*
(
line
.
ye
-
line
.
ys
))
}
function
getRodate
(
props
){
var
xs
=
props
.
xs
;
var
ys
=
props
.
ys
;
var
xe
=
props
.
xe
;
var
ye
=
props
.
ye
;
var
y
=
ye
-
ys
;
var
x
=
xe
-
xs
;
var
r
=
Math
.
atan
(
y
/
x
)
return
r
*
180
/
Math
.
PI
}
function
sameDirection
(
xory
,
type
,
res
,
indexes
)
{
for
(
var
key
in
xory
)
{
var
current
=
-
1
;
var
data
=
xory
[
key
];
data
.
sort
(
function
(
a
,
b
){
return
a
[
type
]
-
b
[
type
]})
data
.
forEach
(
function
(
item
,
i
){
if
(
i
>
current
){
var
ret
=
[
item
];
current
=
searchFont
(
item
,
data
,
i
,
ret
,
type
)
if
(
ret
.
length
>
1
)
{
ret
.
forEach
(
function
(
item
)
{
indexes
=
indexes
.
filter
(
function
(
item2
){
return
item2
.
index
!=
item
.
index
})
})
res
.
push
(
ret
.
reduce
(
function
(
a
,
b
){
if
(
Number
(
b
.
limit
.
xmin
)
<
Number
(
a
.
xmin
)){
a
.
xmin
=
b
.
limit
.
xmin
}
if
(
Number
(
b
.
limit
.
ymin
)
<
Number
(
a
.
ymin
)){
a
.
ymin
=
b
.
limit
.
ymin
}
if
(
Number
(
b
.
limit
.
xmax
)
>
Number
(
a
.
xmax
)){
a
.
xmax
=
b
.
limit
.
xmax
}
if
(
Number
(
b
.
limit
.
ymax
)
>
Number
(
a
.
ymax
)){
a
.
ymax
=
b
.
limit
.
ymax
}
return
a
},{
xmin
:
item
.
limit
.
xmin
,
ymin
:
item
.
limit
.
ymin
,
xmax
:
item
.
limit
.
xmax
,
ymax
:
item
.
limit
.
ymax
}))
}
}
})
}
return
indexes
}
function
searchFont
(
l
,
arr
,
i
,
ret
,
type
){
if
(
arr
[
i
+
1
]){
var
len
=
Math
.
abs
(
l
[
type
]
-
arr
[
i
+
1
][
type
])
if
(
len
<=
1.5
){
ret
.
push
(
arr
[
i
+
1
])
return
searchFont
(
arr
[
i
+
1
],
arr
,
i
+
1
,
ret
,
type
)
}
else
{
return
i
}
}
return
i
+
1
}
function
turnFix
(
data
)
{
return
parseFloat
(
data
).
toFixed
(
1
)
}
function
surfaceAnalysis
(
props
){
props
.
limit
.
xmin
=
props
.
limit
.
xmin
-
0
;
props
.
limit
.
ymin
=
props
.
limit
.
ymin
-
0
;
props
.
limit
.
xmax
=
props
.
limit
.
xmax
-
0
;
props
.
limit
.
ymax
=
props
.
limit
.
ymax
-
0
;
props
.
limit
.
xsize
=
props
.
limit
.
xsize
-
0
;
props
.
limit
.
ysize
=
props
.
limit
.
ysize
-
0
;
props
.
xc
=
props
.
limit
.
xsize
/
2
+
props
.
limit
.
xmin
props
.
yc
=
props
.
limit
.
ysize
/
2
+
props
.
limit
.
ymin
}
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
item
.
limit
=
res
}
})
return
feats
}
\ No newline at end of file
public_script/
文字优化
.js
→
public_script/
ss_op
.js
View file @
861f24fb
...
...
@@ -35,6 +35,12 @@ PARAMETER:
type : 'LineEdit',
property : {tool_tip : ''},
},
{
name : 'cover_size',
title : '文字套层套值',
type : 'LineEdit',
property : {tool_tip : ''},
},
{
name : 'ss_to_sm',
title : '文字距离阻焊',
...
...
@@ -129,7 +135,7 @@ var mode = $.ikm ? "topcam" : "aimdfm";
var
IKM
=
$
.
ikm
;
if
(
IKM
==
undefined
)
{
IKM
=
require
(
'topcam.ikm6'
)(
$
)
}
var
GEN
=
$
.
gen
;
var
GUI
=
$
.
gui
||
{}
;
var
GUI
=
require
(
'topsin.gengui'
).
newGui
(
require
(
'topsin.gengui'
).
__dirname
)
;
var
Job
=
$
.
job
||
$
.
job_name
;
var
JobId
=
$
.
job_id
;
var
db
=
$
.
db
||
IKM
.
db
...
...
@@ -152,13 +158,14 @@ var default_par = {
ss_to_sm
:
10
,
// 文字距离阻焊
ss_to_smd
:
10
,
// 文字距离SMD
ss_to_bga
:
10
,
// 文字距离bga
cover_size
:
0
,
text_height
:
1
,
// 文字最大高度
bk_suffix
:
"_bk"
,
// 备份层后缀
silk_suffix
:
"_font"
,
// 分离的文字层后缀
cover_layer_suffix
:
"_cover"
,
tol
:
1
,
select_lyr
:
"no"
,
step
:
"
unit
"
,
step
:
"
orig
"
,
auto_save
:
"No"
,
outline
:
"ol"
}
...
...
@@ -186,8 +193,8 @@ try {
if
(
err
)
{
throw
err
}
GEN
.
PAUSE
(
"ssFrameSeparate end; please check"
)
//
var err = slBoxOptimize({workstep:workstep}) // 文字框优化
//
if (err) {throw err}
var
err
=
slBoxOptimize
({
workstep
:
workstep
})
// 文字框优化
if
(
err
)
{
throw
err
}
var
err
=
slOptimize
({
workstep
:
workstep
})
// 文字优化
if
(
err
)
{
throw
err
}
...
...
@@ -272,7 +279,22 @@ function createCoverLayer (props){
}]
}]
}
}
},
buttons
:[{
stock
:
"ok"
,
sensitive
:
true
,
command
:
function
(
data
)
{
}
},
{
stock
:
"cancel"
,
sensitive
:
true
,
command
:
function
(
ddata
)
{
}
},
{
stock
:
"help"
,
sensitive
:
true
,
command
:
function
(
data
)
{
}
}]
});
if
(
!
info
){
throw
"未填写参数"
}
info
=
JSON
.
parse
(
JSON
.
stringify
(
info
))
...
...
@@ -372,7 +394,22 @@ function ssFrameSeparate (props) {
}]
}]
}
}
},
buttons
:[{
stock
:
"ok"
,
sensitive
:
true
,
command
:
function
(
data
)
{
}
},
{
stock
:
"cancel"
,
sensitive
:
true
,
command
:
function
(
ddata
)
{
}
},
{
stock
:
"help"
,
sensitive
:
true
,
command
:
function
(
data
)
{
}
}]
});
if
(
!
info
){
throw
"未填写参数"
}
info
=
JSON
.
parse
(
JSON
.
stringify
(
info
));
...
...
@@ -589,6 +626,8 @@ function slBoxOptimize(props){
ref_layer
:
layer
+
par
.
cover_layer_suffix
}
})
if
(
ref_layers
.
length
>
0
)
{
ref_layers
.
forEach
(
function
(
layerInfo
){
// {"work_layer":"gto","ref_layer":"gto_cover"}
GEN
.
affectedLayer
({
affected
:
'no'
,
mode
:
'all'
})
...
...
@@ -607,6 +646,7 @@ function slBoxOptimize(props){
GEN
.
workLayer
({
name
:
work_layer
,
display_number
:
1
,
clear_before
:
'yes'
});
GEN
.
displayLayer
({
name
:
ref_layer
,
number
:
2
});
var
tmp_con
=
GEN
.
MOUSE
({
type
:
'r'
,
text
:
"Please Select"
});
GEN
.
workLayer
({
name
:
work_layer
,
display_number
:
1
,
clear_before
:
'yes'
});
GEN
.
COM
(
"filter_area_strt"
)
GEN
.
COM
(
"filter_area_xy,x="
+
tmp_con
.
x1
+
",y="
+
tmp_con
.
y1
)
GEN
.
COM
(
"filter_area_xy,x="
+
tmp_con
.
x2
+
",y="
+
tmp_con
.
y2
)
...
...
@@ -794,7 +834,7 @@ function slBoxOptimize(props){
// 文字放大
function
slOptimize
(
props
)
{
var
info
=
gui
.
showForm
({
var
info
1
=
gui
.
showForm
({
title
:
'请手动匹配以下信息'
,
showcheck
:
1
,
gen
:
GEN
,
defaultsize
:[
200
,
100
],
...
...
@@ -836,12 +876,27 @@ function slOptimize(props) {
}]
}]
}
}
},
buttons
:[{
stock
:
"ok"
,
sensitive
:
true
,
command
:
function
(
data
)
{
}
},
{
stock
:
"cancel"
,
sensitive
:
true
,
command
:
function
(
ddata
)
{
}
},
{
stock
:
"help"
,
sensitive
:
true
,
command
:
function
(
data
)
{
}
}]
});
if
(
!
info
){
throw
"未填写参数"
}
info
=
JSON
.
parse
(
JSON
.
stringify
(
info
))
var
x_scale
=
info
.
x_scale
;
var
y_scale
=
info
.
y_scale
;
if
(
!
info
1
){
throw
"未填写参数"
}
info
1
=
JSON
.
parse
(
JSON
.
stringify
(
info1
))
var
x_scale
1
=
info1
.
x_scale
;
var
y_scale
1
=
info1
.
y_scale
;
// 1. step过滤
var
workstep
=
props
.
workstep
;
// 2.过滤工作层
...
...
@@ -865,9 +920,25 @@ function slOptimize(props) {
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
.
zoomHome
();
work_layers
.
forEach
(
function
(
layer
){
GEN
.
workLayer
({
name
:
layer
,
display_number
:
2
,
clear_before
:
'yes'
})
GEN
.
selChangeSym
({
symbol
:
"r"
+
info
.
font_symbol
})
var
font_layer
=
layer
+
par
.
silk_suffix
;
GEN
.
workLayer
({
name
:
font_layer
,
display_number
:
2
,
clear_before
:
'yes'
})
GEN
.
selClearFeature
()
GEN
.
selectByFilter
({
feat_types
:
"text"
})
if
(
GEN
.
getSelectCount
()
>
0
)
{
GEN
.
COM
(
"sel_break_level,attr_mode=merge"
)
}
GEN
.
COM
(
"filter_set,filter_name=popup,update_popup=no,feat_types=line
\
;arc"
)
GEN
.
COM
(
"filter_area_strt"
)
GEN
.
COM
(
"filter_area_end,layer=,filter_name=popup,operation=select,area_type=none,inside_area=no,intersect_area=no"
)
GEN
.
COM
(
"filter_reset,filter_name=popup"
)
GEN
.
selReverse
()
if
(
GEN
.
getSelectCount
()
>
0
)
{
GEN
.
selMoveOther
({
target_layer
:
layer
,
invert
:
'no'
,
dx
:
0
,
dy
:
0
,
size
:
0
})
}
GEN
.
selChangeSym
({
symbol
:
"r"
+
info1
.
font_symbol
})
var
tmp1
=
font_layer
+
"_1"
;
var
tmp2
=
font_layer
+
"_2"
;
var
tmp3
=
font_layer
+
"_3"
;
...
...
@@ -895,11 +966,11 @@ function slOptimize(props) {
fast_features
=
featsToLimits
(
fast_features
)
fast_features
.
forEach
(
function
(
item
){
if
(
item
.
limit
.
xsize
>
item
.
limit
.
ysize
)
{
item
.
x_scale
=
x_scale
item
.
y_scale
=
y_scale
item
.
x_scale
=
x_scale
1
item
.
y_scale
=
y_scale
1
}
else
{
item
.
y_scale
=
x_scale
item
.
x_scale
=
y_scale
item
.
y_scale
=
x_scale
1
item
.
x_scale
=
y_scale
1
}
})
fast_features
.
forEach
(
function
(
item
){
...
...
@@ -913,103 +984,6 @@ function slOptimize(props) {
}
})
// GEN.units({type:par.units})
// GEN.workLayer({name:tmp1,display_number:2,clear_before:'yes'})
// GEN.copyLayer({source_job:job,source_step:step,source_layer:tmp1,dest_layer:tmp2, mode:"replace"})
// GEN.COM("sel_contourize,accuracy=0,break_to_islands=yes,clean_hole_size=0,clean_hole_mode=x_and_y")
// GEN.affectedLayer({affected:'no',mode:'all'})
// GEN.clearLayers()
// var features = GEN.getFeatures({job:job,step:step,layer:tmp1,options:"feat_index"})
// var indexes = []
// features.forEach(function(item){
// GEN.workLayer({name:tmp1,display_number:2,clear_before:'yes'})
// var index = item.index;
// // 选中index 将它复制到tmp3 获取信息
// GEN.selLayerFeat({layer:tmp1, index:index,operation:"select"})
// if(GEN.getSelectCount() > 0){
// item.limit = GEN.getLayerLimits({job:job,step:step,layer:tmp1,units:'mm', options:"select"})
// }
// })
// var xs = {};
// var ys = {};
// features.forEach(function(item){
// surfaceAnalysis(item)
// indexes.push({
// index:item.index,
// xmin : item.limit.xmin,
// ymin : item.limit.ymin,
// xmax : item.limit.xmax,
// ymax : item.limit.ymax,
// xc:item.xc,
// yc:item.yc
// })
// if(!ys[turnFix(item.yc)]){ys[turnFix(item.yc)] = []}
// ys[turnFix(item.yc)].push(item)
// if(!xs[turnFix(item.xc)]){xs[turnFix(item.xc)] = []}
// xs[turnFix(item.xc)].push(item)
// })
// var limitinfo = []
// indexes = sameDirection(ys, "xc", limitinfo, indexes)
// indexes = sameDirection(xs, "yc", limitinfo, indexes)
// if(GEN.isLayerExists({job:job,layer:"_ok"})){GEN.deleteLayer({job:job,layer:["_ok"]})}
// if(GEN.isLayerExists({job:job,layer:"_fail"})){GEN.deleteLayer({job:job,layer:["_fail"]})}
// GEN.createLayer({job:job,layer:'_ok',conext:'misc',type:'document'})
// GEN.createLayer({job:job,layer:'_fail',conext:'misc',type:'document'})
// limitinfo.forEach(function(item){
// GEN.workLayer({name:bk,display_number:2,clear_before:'yes'})
// GEN.COM("filter_area_strt")
// GEN.COM("filter_area_xy,x="+item.xmin+",y=" + item.ymin)
// GEN.COM("filter_area_xy,x="+item.xmax+",y=" + item.ymax)
// GEN.COM("filter_area_end,layer=,filter_name=popup,operation=select,area_type=rectangle,inside_area=yes,intersect_area=yes")
// if(GEN.getSelectCount() > 0 ) {
// GEN.selMoveOther({target_layer:'transform_temp',invert:'no',dx:0,dy:0,size:0})
// GEN.workLayer({name:"transform_temp",display_number:2,clear_before:'yes'})
// GEN.selTransform({mode:'anchor',oper:'scale',
// x_anchor: item.xmin + Math.abs(item.xmax - item.xmin) / 2,
// y_anchor: item.ymin + Math.abs(item.ymax - item.ymin) / 2,
// x_scale:1.2,y_scale:1.2})
// // 与成功层touch 有碰移动到失败层 没碰移动到成功层
// GEN.selRefFeat({layers:"_ok",use:"filter",mode:"touch"})
// if(GEN.getSelectCount() > 0) {
// GEN.selClearFeature()
// GEN.selMoveOther({target_layer:'_fail',invert:'no',dx:0,dy:0,size:0})
// } else {
// GEN.selMoveOther({target_layer:'_ok',invert:'no',dx:0,dy:0,size:0})
// }
// }
// })
// indexes.forEach(function(item){
// var xc = item.xc;
// var yc = item.yc;
// GEN.workLayer({name:bk,display_number:2,clear_before:'yes'})
// GEN.COM("filter_area_strt")
// GEN.COM("filter_area_xy,x="+item.xmin+",y=" + item.ymin)
// GEN.COM("filter_area_xy,x="+item.xmax+",y=" + item.ymax)
// GEN.COM("filter_area_end,layer=,filter_name=popup,operation=select,area_type=rectangle,inside_area=yes,intersect_area=yes")
// if(GEN.getSelectCount() > 0 ) {
// GEN.selMoveOther({target_layer:'transform_temp',invert:'no',dx:0,dy:0,size:0})
// GEN.workLayer({name:"transform_temp",display_number:2,clear_before:'yes'})
// GEN.selTransform({mode:'anchor',oper:'scale',x_anchor: xc,y_anchor: yc,
// x_scale:1.2,y_scale:1.2})
// // 与成功层touch 有碰移动到失败层 没碰移动到成功层
// GEN.selRefFeat({layers:"_ok",use:"filter",mode:"touch"})
// if(GEN.getSelectCount() > 0) {
// GEN.selClearFeature()
// GEN.selMoveOther({target_layer:'_fail',invert:'no',dx:0,dy:0,size:0})
// } else {
// GEN.selMoveOther({target_layer:'_ok',invert:'no',dx:0,dy:0,size:0})
// }
// }
// })
// GEN.workLayer({name:bk,display_number:2,clear_before:'yes'})
// GEN.selAllFeat()
// if(GEN.getSelectCount() > 0) { GEN.selMoveOther({target_layer:'_fail',invert:'no',dx:0,dy:0,size:0}) }
// 框选
var
flag
=
true
;
IKM
.
msg
(
font_layer
+
"层:请选择需放大的文字,不需制作了请【左键框选空白处】"
)
while
(
flag
){
...
...
@@ -1059,7 +1033,22 @@ function slOptimize(props) {
}]
}]
}
}
},
buttons
:[{
stock
:
"ok"
,
sensitive
:
true
,
command
:
function
(
data
)
{
}
},
{
stock
:
"cancel"
,
sensitive
:
true
,
command
:
function
(
ddata
)
{
}
},
{
stock
:
"help"
,
sensitive
:
true
,
command
:
function
(
data
)
{
}
}]
});
if
(
!
info
){
throw
"未填写参数"
}
info
=
JSON
.
parse
(
JSON
.
stringify
(
info
))
...
...
@@ -1158,13 +1147,22 @@ function slOptimize(props) {
}
// 将ok的移动到文字层
GEN
.
workLayer
({
name
:
font_layer
,
display_number
:
2
,
clear_before
:
'yes'
})
GEN
.
selDelete
()
GEN
.
workLayer
({
name
:
bk2
,
display_number
:
2
,
clear_before
:
'yes'
})
GEN
.
selMoveOther
({
target_layer
:
font_layer
,
invert
:
'no'
,
dx
:
0
,
dy
:
0
,
size
:
0
})
[
tmp1
,
tmp2
,
tmp3
,
bk
,
bk2
,
"_ok"
,
"_fail"
].
forEach
(
function
(
v
){
GEN
.
workLayer
({
name
:
font_layer
,
display_number
:
2
,
clear_before
:
'yes'
});
GEN
.
selDelete
();
GEN
.
workLayer
({
name
:
bk2
,
display_number
:
2
,
clear_before
:
'yes'
});
GEN
.
selMoveOther
({
target_layer
:
font_layer
,
invert
:
'no'
,
dx
:
0
,
dy
:
0
,
size
:
0
});
GEN
.
workLayer
({
name
:
font_layer
,
display_number
:
2
,
clear_before
:
'yes'
});
GEN
.
selMoveOther
({
target_layer
:
layer
,
invert
:
'no'
,
dx
:
0
,
dy
:
0
,
size
:
0
});
[
tmp1
,
tmp2
,
tmp3
,
bk
,
bk2
,
"_ok"
,
"_fail"
,
font_layer
].
forEach
(
function
(
v
){
if
(
GEN
.
isLayerExists
({
job
:
job
,
layer
:
v
})){
GEN
.
deleteLayer
({
job
:
job
,
layer
:[
v
]})}
})
});
var
cover_lyr
=
layer
+
par
.
cover_layer_suffix
;
if
(
GEN
.
isLayerExists
({
job
:
job
,
layer
:
cover_lyr
})){
GEN
.
workLayer
({
name
:
cover_lyr
,
display_number
:
2
,
clear_before
:
'yes'
});
GEN
.
selMoveOther
({
target_layer
:
layer
,
invert
:
"yes"
,
dx
:
0
,
dy
:
0
,
size
:
par
.
cover_size
});
}
})
})
}
...
...
template.js
View file @
861f24fb
...
...
@@ -24,7 +24,7 @@ PARAMETER:
]
VERSION_HISTORY:
V1.00 202
0-09-01
Scott Sun
V1.00 202
1-02-19
Scott Sun
1.新版本
HELP:
...
...
@@ -51,7 +51,6 @@ var mode = $.ikm ? "topcam" : "aimdfm";
var
IKM
=
$
.
ikm
;
if
(
IKM
==
undefined
)
{
IKM
=
require
(
'topcam.ikm6'
)(
$
)
}
var
GEN
=
$
.
gen
;
var
GUI
=
$
.
gui
||
{};
var
Job
=
$
.
job
||
$
.
job_name
;
var
JobId
=
$
.
job_id
;
var
db
=
$
.
db
||
IKM
.
db
...
...
@@ -70,7 +69,7 @@ var Status = 'ok';
var
resultData
=
[];
var
par
=
PAR
;
var
default_par
=
{
step
:
"
cad
"
,
step
:
"
orig
"
,
auto_save
:
"No"
,
units
:
"mm"
}
...
...
@@ -82,18 +81,8 @@ try {
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"
})
}
}
GEN
.
openStep
({
job
:
job
,
name
:
"cad"
})
var
matrix
=
GEN
.
getMatrix
({
job
:
job
})
exportInfo
(
"getMatrix"
);
// 获取matrix
GEN
.
INFO
({
entity_type
:
'matrix'
,
entity_path
:
job
+
'/matrix'
,
data_type
:
'row'
,
parameters
:
'name'
});
exportInfo
({
matrix
:
Object
.
keys
(
matrix
),
infores
:
GEN
.
INFO_RESULT
});
console
.
log
(
"=================test=============="
);
// 保存
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"
)
{
...
...
@@ -112,7 +101,3 @@ try {
resultData
.
push
({
type
:
"error"
,
title
:
"脚本执行出错!"
,
detail
:
[{
desc
:
_
.
toString
(
e
)}]});
return
(
mode
===
"aimdfm"
)
?
{
status
:
Status
,
result_data
:
resultData
}
:
"Error"
;
}
function
exportInfo
(
info
){
fs
.
writeFile
(
"/home/toplinker/samba/Test_Scott/tmp"
,
_
.
toString
(
info
))
}
\ No newline at end of file
驱动/script_javascript_driver.jsc
deleted
100644 → 0
View file @
09227f67
File deleted
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