Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in / Register
Toggle navigation
A
ats_cam_script
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
ats_cam_script
Commits
d9a6c1ce
Commit
d9a6c1ce
authored
Aug 05, 2022
by
Scott Sun
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
s
parent
fcb3acbc
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
123 additions
and
34 deletions
+123
-34
ATS_rout_optimize_connect.js
rout/ATS_rout_optimize_connect.js
+50
-14
ATS_rout_redundant_line_removal.js
rout/ATS_rout_redundant_line_removal.js
+73
-20
No files found.
rout/ATS_rout_optimize_connect.js
View file @
d9a6c1ce
...
@@ -162,22 +162,51 @@ try {
...
@@ -162,22 +162,51 @@ try {
return
feat
.
type
==
"line"
||
feat
.
type
==
"arc"
return
feat
.
type
==
"line"
||
feat
.
type
==
"arc"
})
})
var
ret
=
[];
var
ret
=
[];
var
indexObj
=
{}
var
keys
=
{}
feats
.
forEach
(
function
(
feat
)
{
var
x
=
feat
.
xs
+
(
feat
.
xe
-
feat
.
xs
)
/
2
var
y
=
feat
.
ys
+
(
feat
.
ye
-
feat
.
ys
)
/
2
keys
[
x
+
"_"
+
y
]
=
true
})
feats
.
forEach
(
function
(
feat1
,
i
)
{
feats
.
forEach
(
function
(
feat1
,
i
)
{
for
(
var
i2
=
i
+
1
;
i2
<
feats
.
length
;
i2
++
)
{
for
(
var
i2
=
i
+
1
;
i2
<
feats
.
length
;
i2
++
)
{
var
feat2
=
feats
[
i2
]
var
feat2
=
feats
[
i2
]
if
(
feat2
)
{
if
(
feat2
&&
lineLength
(
feat1
)
>
0.2
&&
lineLength
(
feat2
)
>
0.2
)
{
var
len1
=
p2p
({
x1
:
feat1
.
xs
,
y1
:
feat1
.
ys
,
x2
:
feat2
.
xs
,
y2
:
feat2
.
ys
})
var
len1
=
p2p
({
x1
:
feat1
.
xs
,
y1
:
feat1
.
ys
,
x2
:
feat2
.
xs
,
y2
:
feat2
.
ys
})
var
len2
=
p2p
({
x1
:
feat1
.
xs
,
y1
:
feat1
.
ys
,
x2
:
feat2
.
xe
,
y2
:
feat2
.
ye
})
var
len2
=
p2p
({
x1
:
feat1
.
xs
,
y1
:
feat1
.
ys
,
x2
:
feat2
.
xe
,
y2
:
feat2
.
ye
})
var
len3
=
p2p
({
x1
:
feat1
.
xe
,
y1
:
feat1
.
ye
,
x2
:
feat2
.
xs
,
y2
:
feat2
.
ys
})
var
len3
=
p2p
({
x1
:
feat1
.
xe
,
y1
:
feat1
.
ye
,
x2
:
feat2
.
xs
,
y2
:
feat2
.
ys
})
var
len4
=
p2p
({
x1
:
feat1
.
xe
,
y1
:
feat1
.
ye
,
x2
:
feat2
.
xe
,
y2
:
feat2
.
ye
})
var
len4
=
p2p
({
x1
:
feat1
.
xe
,
y1
:
feat1
.
ye
,
x2
:
feat2
.
xe
,
y2
:
feat2
.
ye
})
if
(
FlagTolerance
(
len1
)
||
FlagTolerance
(
len2
)
||
FlagTolerance
(
len3
)
||
FlagTolerance
(
len4
))
{
if
(
FlagTolerance
(
len1
)
||
FlagTolerance
(
len2
)
||
FlagTolerance
(
len3
)
||
FlagTolerance
(
len4
))
{
var
flag
=
true
var
midx
;
var
midy
;
if
(
FlagTolerance
(
len1
))
{
midx
=
feat1
.
xs
+
(
feat2
.
xs
-
feat1
.
xs
)
/
2
midy
=
feat1
.
ys
+
(
feat2
.
ys
-
feat1
.
ys
)
/
2
}
else
if
(
FlagTolerance
(
len2
))
{
midx
=
feat1
.
xs
+
(
feat2
.
xe
-
feat1
.
xs
)
/
2
midy
=
feat1
.
ys
+
(
feat2
.
ye
-
feat1
.
ys
)
/
2
}
else
if
(
FlagTolerance
(
len3
))
{
midx
=
feat1
.
xe
+
(
feat2
.
xs
-
feat1
.
xe
)
/
2
midy
=
feat1
.
ye
+
(
feat2
.
ys
-
feat1
.
ye
)
/
2
}
else
if
(
FlagTolerance
(
len4
))
{
midx
=
feat1
.
xe
+
(
feat2
.
xe
-
feat1
.
xe
)
/
2
midy
=
feat1
.
ye
+
(
feat2
.
ye
-
feat1
.
ye
)
/
2
}
var
key
=
midx
+
"_"
+
midy
if
(
!
indexObj
[
feat1
.
index
]
&&
!
indexObj
[
feat2
.
index
]
&&
flag
&&
!
keys
[
key
])
{
indexObj
[
feat1
.
index
]
=
true
indexObj
[
feat2
.
index
]
=
true
ret
.
push
({
ret
.
push
({
feat1
:
feat1
,
feat1
:
feat1
,
feat2
:
feat2
feat2
:
feat2
,
})
})
}
}
}
}
}
}
}
})
})
if
(
ret
.
length
>
0
)
{
if
(
ret
.
length
>
0
)
{
...
@@ -186,22 +215,25 @@ try {
...
@@ -186,22 +215,25 @@ try {
ret
.
forEach
(
function
(
item
)
{
ret
.
forEach
(
function
(
item
)
{
var
feat1
=
item
.
feat1
var
feat1
=
item
.
feat1
var
feat2
=
item
.
feat2
var
feat2
=
item
.
feat2
var
flag
=
fals
e
;
var
flag
=
tru
e
;
if
(
feat1
.
type
==
"arc"
||
feat2
.
type
==
"arc"
)
{
//
if(feat1.type == "arc" || feat2.type == "arc") {
flag
=
true
//
flag = true
}
else
if
(
Math
.
abs
((
feat1
.
xe
-
feat1
.
xs
)
/
(
feat1
.
ye
-
feat1
.
ye
)
-
(
feat2
.
xe
-
feat2
.
xs
)
/
(
feat2
.
ye
-
feat2
.
ye
))
<=
0.001
)
{
//
} else if (Math.abs((feat1.xe - feat1.xs)/(feat1.ye-feat1.ye) - (feat2.xe - feat2.xs)/(feat2.ye-feat2.ye)) <= 0.001) {
flag
=
true
//
flag = true
}
//
}
if
(
flag
)
{
if
(
flag
)
{
GEN
.
selLayerFeat
({
layer
:
layer
,
index
:
feat1
.
index
,
operation
:
"select"
})
GEN
.
selLayerFeat
({
layer
:
layer
,
index
:
feat1
.
index
,
operation
:
"select"
})
GEN
.
selLayerFeat
({
layer
:
layer
,
index
:
feat2
.
index
,
operation
:
"select"
})
GEN
.
selLayerFeat
({
layer
:
layer
,
index
:
feat2
.
index
,
operation
:
"select"
})
if
(
GEN
.
getSelectCount
()
==
2
)
{
if
(
GEN
.
getSelectCount
()
==
2
)
{
GEN
.
COM
(
"sel_design2rout,det_tol="
+
data
.
tolerance
+
",con_tol="
+
data
.
tolerance
+
",rad_tol=10"
)
// GEN.PAUSE(0)
// GEN.COM("sel_design2rout,det_tol="+data.tolerance+",con_tol="+data.tolerance+",rad_tol=10")
// GEN.PAUSE(1)
}
}
GEN
.
selClearFeature
()
//
GEN.selClearFeature()
}
}
})
})
GEN
.
PAUSE
(
0
)
}
}
})
})
...
@@ -213,7 +245,7 @@ try {
...
@@ -213,7 +245,7 @@ try {
function
FlagTolerance
(
len
)
{
function
FlagTolerance
(
len
)
{
return
len
>
=
0.001
&&
len
<=
data
.
tolerance
/
1000
return
len
>
0
&&
len
<=
data
.
tolerance
/
1000
}
}
// 保存料号
// 保存料号
...
@@ -256,6 +288,10 @@ try {
...
@@ -256,6 +288,10 @@ try {
return
mode
===
"aimdfm"
?
{
status
:
Status
,
result_data
:
resultData
}
:
"Error"
;
return
mode
===
"aimdfm"
?
{
status
:
Status
,
result_data
:
resultData
}
:
"Error"
;
}
}
function
lineLength
(
line
)
{
return
Math
.
sqrt
((
line
.
xe
-
line
.
xs
)
*
(
line
.
xe
-
line
.
xs
)
+
(
line
.
ye
-
line
.
ys
)
*
(
line
.
ye
-
line
.
ys
))
}
/**
/**
* 获取层别
* 获取层别
* @param {Object} 过滤选项
* @param {Object} 过滤选项
...
...
rout/ATS_rout_redundant_line_removal.js
View file @
d9a6c1ce
...
@@ -9,12 +9,6 @@ PARAMETER:
...
@@ -9,12 +9,6 @@ PARAMETER:
type : 'LineEdit',
type : 'LineEdit',
property : {tool_tip : '目标step,默认是orig'}
property : {tool_tip : '目标step,默认是orig'}
},
},
{
name : 'workLayers',
title : 'workLayers',
type : 'LineEdit',
property : {tool_tip : '工作层'}
},
{
{
name : 'auto_save',
name : 'auto_save',
title : '自动保存',
title : '自动保存',
...
@@ -78,7 +72,7 @@ var par = PAR; // 接收参数
...
@@ -78,7 +72,7 @@ var par = PAR; // 接收参数
var
default_par
=
{
// 设置默认参数
var
default_par
=
{
// 设置默认参数
step
:
"cad"
,
step
:
"cad"
,
auto_save
:
"No"
,
auto_save
:
"No"
,
workLayers
:
"out"
,
workLayers
:
"
r
out"
,
units
:
"mm"
units
:
"mm"
};
};
for
(
var
key
in
default_par
)
{
for
(
var
key
in
default_par
)
{
...
@@ -111,13 +105,14 @@ try {
...
@@ -111,13 +105,14 @@ try {
throw
"未找到"
+
par
.
step
throw
"未找到"
+
par
.
step
}
}
var
workLayers
=
par
.
workLayers
.
split
(
";"
)
// var workLayers = par.workLayers.split(";")
workLayers
=
workLayers
.
filter
(
function
(
l
){
return
GEN
.
isLayerExists
({
job
:
job
,
layer
:
l
})})
// workLayers = workLayers.filter(function(l){return GEN.isLayerExists({job:job, layer:l})})
if
(
workLayers
.
length
==
0
)
{
// if(workLayers.length == 0) {
throw
"没有找到工作层"
// throw "没有找到工作层"
}
// }
var
workLayers
=
getWorkLayer
()
if
(
workLayers
&&
workLayers
.
length
>
0
)
{}
else
{
throw
"没有找到工作层"
}
var
func
=
'function(props){return GUI.showForm({
\
var
func
=
'function(props){return GUI.showForm({
\
title: "去除重复线",
\
title: "去除重复线",
\
size: "400x220",
\
size: "400x220",
\
...
@@ -151,12 +146,13 @@ try {
...
@@ -151,12 +146,13 @@ try {
}]
\
}]
\
}]
\
}]
\
},
\
},
\
values: { min_line: 0, max_line: 508,margin:0 },
\
values: { min_line: 0, max_line: 508,margin:
-1
0 },
\
}) }'
;
}) }'
;
workLayers
=
workLayers
.
map
(
function
(
item
)
{
return
item
.
name
});
var
data
=
IKM
.
command
(
func
,
{},
1
).
data
;
var
data
=
IKM
.
command
(
func
,
{},
1
).
data
;
if
(
data
.
hasOwnProperty
(
"margin"
)
&&
data
.
hasOwnProperty
(
"max_line"
)
&&
data
.
hasOwnProperty
(
"min_line"
))
{
if
(
data
.
margin
&&
data
.
max_line
&&
data
.
min_line
)
{
stepList
.
forEach
(
function
(
step
)
{
stepList
.
forEach
(
function
(
step
)
{
GEN
.
openStep
({
job
:
job
,
name
:
step
});
GEN
.
openStep
({
job
:
job
,
name
:
step
});
GEN
.
clearLayers
();
//清除层显示
GEN
.
clearLayers
();
//清除层显示
...
@@ -167,11 +163,14 @@ try {
...
@@ -167,11 +163,14 @@ try {
GEN
.
selClearFeature
()
GEN
.
selClearFeature
()
GEN
.
affectedLayer
({
affected
:
"yes"
,
layer
:
workLayers
})
GEN
.
affectedLayer
({
affected
:
"yes"
,
layer
:
workLayers
})
GEN
.
COM
(
"chklist_single,action=valor_dfm_nflr,show=yes"
)
GEN
.
COM
(
"chklist_single,action=valor_dfm_nflr,show=yes"
)
GEN
.
COM
(
"chklist_cupd,chklist=valor_dfm_nflr,nact=1,params=((pp_layer=.affected)(pp_min_line="
+
data
.
min_line
+
")(pp_max_line="
+
data
.
max_line
+
")(pp_margin="
+
data
.
margin
+
")(pp_remove_item=Line
\
;Arc)(pp_delete=Covered)(pp_work=Features)(pp_remove_mark=Remove)),mode=regular"
)
GEN
.
COM
(
"chklist_cupd,chklist=valor_dfm_nflr,nact=1,params=((pp_layer=.affected)(pp_min_line="
+
data
.
min_line
+
")(pp_max_line="
+
data
.
max_line
+
")(pp_margin="
+
data
.
margin
+
")(pp_remove_item=Line
\
;Arc)(pp_delete=Covered)(pp_work=Features)(pp_remove_mark=Remove)),mode=regular"
)
GEN
.
COM
(
"chklist_run,chklist=valor_dfm_nflr,nact=1,area=profile"
)
GEN
.
COM
(
"chklist_run,chklist=valor_dfm_nflr,nact=1,area=global"
)
// GEN.COM("chklist_close,chklist=valor_dfm_nflr,mode=hide")
GEN
.
COM
(
"chklist_single,action=valor_dfm_nflr,show=yes"
)
GEN
.
COM
(
"chklist_cupd,chklist=valor_dfm_nflr,nact=1,params=((pp_layer=.affected)(pp_min_line="
+
data
.
min_line
+
")(pp_max_line="
+
data
.
max_line
+
")(pp_margin="
+
data
.
margin
+
")(pp_remove_item=Line
\
;Arc)(pp_delete=Duplicated)(pp_work=Features)(pp_remove_mark=Remove)),mode=regular"
)
GEN
.
COM
(
"chklist_run,chklist=valor_dfm_nflr,nact=1,area=global"
)
GEN
.
COM
(
"chklist_close,chklist=valor_dfm_nflr,mode=hide"
)
// workLayers.forEach(function (layer) {
// workLayers.forEach(function (layer) {
// check_connect_line_and_connnect({layer:layer,step:step})
// check_connect_line_and_connnect({layer:layer,step:step})
...
@@ -473,3 +472,57 @@ function check_connect_line_and_connnect(props){
...
@@ -473,3 +472,57 @@ function check_connect_line_and_connnect(props){
IKM
.
msg
(
props
.
layer
+
"层连接位修复完成请仔细检查!"
)
IKM
.
msg
(
props
.
layer
+
"层连接位修复完成请仔细检查!"
)
GEN
.
PAUSE
(
'Please Check!'
);
GEN
.
PAUSE
(
'Please Check!'
);
}
}
function
getWorkLayer
()
{
var
matrix
=
GEN
.
getMatrix
({
job
:
job
});
return
GUI
.
selectLayer
({
title
:
"请选择层"
,
//filter: ".*", // regular expression
selectmode
:
"multiple"
,
// single, multiple
context
:
"all"
,
// all, board, misc
layertype
:
par
.
workLayers
,
// default type of layertypelist
defaultsize
:
[
600
,
400
],
// window size
layermatrix
:
matrix
,
layertypelist
:
[{
name
:
"all"
,
display_name
:
"All"
,
filter
:
function
filter
(
x
)
{
return
true
;
}
},
{
name
:
"outer"
,
display_name
:
"Outer"
,
filter
:
function
filter
(
x
)
{
return
x
.
layer_type
==
"signal"
&&
/top|bot/
.
test
(
x
.
side
);
}
},
{
name
:
"inner"
,
display_name
:
"Inner"
,
filter
:
function
filter
(
x
)
{
return
(
/signal|power_ground/
.
test
(
x
.
layer_type
)
&&
/inner/
.
test
(
x
.
side
)
);
}
},
{
name
:
"solder_mask"
,
display_name
:
"Solder Mask"
,
filter
:
function
filter
(
x
)
{
return
(
/solder_mask/
.
test
(
x
.
layer_type
)
);
}
},
{
name
:
"silk_screen"
,
display_name
:
"Silk Screen"
,
filter
:
function
filter
(
x
)
{
return
(
/silk_screen/
.
test
(
x
.
layer_type
)
);
}
},
{
name
:
"rout"
,
display_name
:
"Rout"
,
filter
:
function
filter
(
x
)
{
return
(
/rout/
.
test
(
x
.
layer_type
)
||
/outline/
.
test
(
x
.
name
));
}
}],
gen
:
GEN
});
}
\ No newline at end of file
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