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
616dcdb3
Commit
616dcdb3
authored
4 years ago
by
Scott Sun
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
scott
parent
f4212ebf
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
332 additions
and
82 deletions
+332
-82
silkScreenOptimize.js
public_script/silkScreenOptimize.js
+324
-81
sl_box_opt.pl
public_script/字符优化/sl_box_opt.pl
+8
-1
No files found.
public_script/silkScreenOptimize.js
View file @
616dcdb3
...
@@ -147,13 +147,14 @@ var resultData = [];
...
@@ -147,13 +147,14 @@ var resultData = [];
var
par
=
PAR
;
var
par
=
PAR
;
var
default_par
=
{
var
default_par
=
{
units
:
"mm"
,
units
:
"mm"
,
cover_layer_suffix
:
"_cover"
,
ss_to_sm
:
10
,
// 文字距离阻焊
ss_to_sm
:
10
,
// 文字距离阻焊
ss_to_smd
:
10
,
// 文字距离SMD
ss_to_smd
:
10
,
// 文字距离SMD
ss_to_bga
:
10
,
// 文字距离bga
ss_to_bga
:
10
,
// 文字距离bga
text_height
:
1
,
// 文字最大高度
text_height
:
1
,
// 文字最大高度
bk_suffix
:
"_bk"
,
// 备份层后缀
bk_suffix
:
"_bk"
,
// 备份层后缀
silk_suffix
:
"_font"
,
// 分离的文字层后缀
silk_suffix
:
"_font"
,
// 分离的文字层后缀
cover_layer_suffix
:
"_cover"
,
tol
:
1
,
select_lyr
:
"no"
,
select_lyr
:
"no"
,
step
:
"unit"
,
step
:
"unit"
,
auto_save
:
"No"
,
auto_save
:
"No"
,
...
@@ -173,15 +174,17 @@ try {
...
@@ -173,15 +174,17 @@ try {
if
(
mode
==
"aimdfm"
){
if
(
GEN
.
checkInout
({
job
:
job
,
mode
:
"test"
})
!=
0
){
throw
"the job check"
}
else
{
GEN
.
checkInout
({
job
:
job
,
mode
:
"out"
})
}
}
if
(
mode
==
"aimdfm"
){
if
(
GEN
.
checkInout
({
job
:
job
,
mode
:
"test"
})
!=
0
){
throw
"the job check"
}
else
{
GEN
.
checkInout
({
job
:
job
,
mode
:
"out"
})
}
}
var
err
=
createCoverLayer
()
// 创建套层
// var err = createCoverLayer() // 创建套层
if
(
err
)
{
throw
err
}
// if (err) {throw err}
var
err
=
ssFrameSeparate
()
// 分离文字和文字框
if
(
err
)
{
throw
err
}
// var err = ssFrameSeparate() // 分离文字和文字框
// if (err) {throw err}
var
err
=
slBoxOptimize
()
// 文字框优化
if
(
err
)
{
throw
err
}
// var err = slOptimize() // 文字优化
// if (err) {throw err}
...
@@ -314,7 +317,6 @@ function createCoverLayer (props){
...
@@ -314,7 +317,6 @@ function createCoverLayer (props){
GEN
.
affectedLayer
({
affected
:
'no'
,
mode
:
'all'
})
GEN
.
affectedLayer
({
affected
:
'no'
,
mode
:
'all'
})
GEN
.
clearLayers
()
GEN
.
clearLayers
()
}
}
// 字符 和 文字框分开
// 字符 和 文字框分开
function
ssFrameSeparate
()
{
function
ssFrameSeparate
()
{
// 1. step过滤
// 1. step过滤
...
@@ -446,7 +448,6 @@ function ssFrameSeparate () {
...
@@ -446,7 +448,6 @@ function ssFrameSeparate () {
if
(
GEN
.
getSelectCount
()
>
0
){
if
(
GEN
.
getSelectCount
()
>
0
){
GEN
.
createLayer
({
job
:
job
,
layer
:
cover_lyr_2
,
delete_exists
:
'yes'
});
GEN
.
createLayer
({
job
:
job
,
layer
:
cover_lyr_2
,
delete_exists
:
'yes'
});
GEN
.
selCopyOther
({
target_layer
:
cover_lyr_2
,
invert
:
'no'
});
GEN
.
selCopyOther
({
target_layer
:
cover_lyr_2
,
invert
:
'no'
});
}
}
GEN
.
affectedLayer
({
affected
:
'yes'
,
layer
:[
ss_line_arc
],
clear_before
:
'yes'
});
GEN
.
affectedLayer
({
affected
:
'yes'
,
layer
:[
ss_line_arc
],
clear_before
:
'yes'
});
GEN
.
selContourize
();
GEN
.
selContourize
();
...
@@ -518,86 +519,300 @@ function ssFrameSeparate () {
...
@@ -518,86 +519,300 @@ function ssFrameSeparate () {
})
})
}
}
GEN
.
COM
(
"disp_on"
)
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
(){
// 1. step过滤
var
workstep
=
getWorkStep
()
if
(
!
Array
.
isArray
(
workstep
)){
throw
"工作step错误"
}
// 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
({
title
:
"请先择工作层"
,
list
:
layers
,
defaultvalue
:
work_layers
,
columns
:
4
,
gen
:
GEN
})
}
if
(
work_layers
.
length
==
0
)
{
return
"没有先择layer"
}
var
ref_layers
=
work_layers
.
filter
(
function
(
layer
){
return
GEN
.
isLayerExists
({
job
:
job
,
layer
:
layer
+
par
.
silk_suffix
})
})
var
matrix
=
GEN
.
getMatrix
({
job
:
job
})
// if(ref_layers.length > 0) {
workstep
.
forEach
(
function
(
step
){
// GEN.workLayer({name:work_layer,display_number:1,clear_before:'yes'});
var
units
=
par
.
units
;
// while (1) {
GEN
.
openStep
({
job
:
job
,
name
:
step
});
// LOOP:
GEN
.
units
({
type
:
units
});
// GEN.COM('disp_on');
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
();
// while(1){
var
ref_layers
=
work_layers
.
filter
(
function
(
layer
){
return
GEN
.
isLayerExists
({
job
:
job
,
layer
:
layer
+
par
.
cover_layer_suffix
})
}).
map
(
function
(
layer
){
// work_layer = GEN.getWorkLayer();
return
{
// last if (grep($_ eq work_layer ,@work_layers) or grep($_.$PAR->{silk_suffix} eq work_layer ,@work_layers));
work_layer
:
layer
,
// update_loading("请选择一个文字层或者文字框层设为工作层",0,position:'n');
ref_layer
:
layer
+
par
.
cover_layer_suffix
// my $ans = GEN.PAUSE('Please Set Work Layer');
}
// return 'Cancel' unless $ans eq 'OK';
})
// }
if
(
ref_layers
.
length
>
0
)
{
ref_layers
.
forEach
(
function
(
layerInfo
){
// {"work_layer":"gto","ref_layer":"gto_cover"}
// // 给出默认移动层
GEN
.
affectedLayer
({
affected
:
'no'
,
mode
:
'all'
})
// if (grep($_ eq work_layer ,@work_layers)) {
GEN
.
clearLayers
()
// ref_layer = work_layer.$PAR->{silk_suffix};
var
work_layer
=
layerInfo
.
work_layer
;
// }else if(grep($_.$PAR->{silk_suffix} eq work_layer ,@work_layers)){
var
ref_layer
=
layerInfo
.
ref_layer
;
// ref_layer = work_layer;
var
tmp1
=
'tl_script_tmp1'
,
tmp2
=
"tl_script_tmp2"
;
// ref_layer =~ s/\Q$PAR->{silk_suffix}\E$//;
delLayer
([
tmp1
,
tmp2
]);
// }
GEN
.
workLayer
({
name
:
work_layer
,
display_number
:
1
,
clear_before
:
'yes'
});
GEN
.
displayLayer
({
name
:
ref_layer
,
number
:
2
});
// if (! GEN.isLayerExists({job:job,layer:ref_layer}) ){
// 放大
// IKM.msg("没有找到对应层"+ref_layer+" ,请重新选择工作层!")
var
ref_pad
=
"tmp_ref_pad"
;
delLayer
([
ref_pad
]);
// goto LOOP;
GEN
.
createLayer
({
job
:
job
,
layer
:
ref_pad
,
context
:
'misc'
,
type
:
'document'
});
// }
// GEN.workLayer({name:work_layer,display_number:1,clear_before:'yes'});
var
flag
=
true
;
// GEN.displayLayer({name:ref_layer,number:2});
IKM
.
msg
(
"请选择需放大的文字框,不需制作了请【左键框选空白处】"
)
while
(
flag
){
// update_loading("请选择需移动的文字或者的文字框,不需制作了请【左键框选空白处】",0,position:'n');
var
tmp_con
=
GEN
.
MOUSE
({
type
:
'r'
,
text
:
"Please Select"
});
// var tmp_con = GEN.MOUSE({type:'r',text:"Please Select"});
GEN
.
workLayer
({
name
:
work_layer
,
display_number
:
1
,
clear_before
:
'yes'
});
// work_layer = GEN.getWorkLayer();
GEN
.
COM
(
"filter_area_strt"
)
// GEN.COM('disp_off');
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 (grep($_ eq work_layer ,@work_layers)) {
if
(
GEN
.
getSelectCount
()
>
0
){
// ref_layer = work_layer.$PAR->{silk_suffix};
selCopyOther
({
layer
:
tmp1
})
// }else if(grep($_.$PAR->{silk_suffix} eq work_layer ,@work_layers)){
// 判断特殊倾斜情况
// ref_layer = work_layer;
var
layer_feature
=
GEN
.
getFeatures
({
job
:
job
,
step
:
step
,
layer
:
tmp1
})
// ref_layer =~ s/\Q$PAR->{silk_suffix}\E$//;
// [{"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.算出最长边的角度
// if (! GEN.isLayerExists({job:job,layer:ref_layer}) ){
var
angle
=
getAngle
(
layer_feature
)
// IKM.msg("没有找到对应层"+ref_layer+" ,请重新选择工作层!")
if
(
angle
%
90
==
0
)
{
angle
=
0
}
// goto LOOP;
if
(
angle
<
0
){
angle
=
90
+
angle
}
// }
// 求中心点
// // GEN.workLayer(name:work_layer,display_number:1,clear_before:'yes');
GEN
.
workLayer
({
name
:
ref_layer
,
display_number
:
1
,
clear_before
:
'yes'
});
// GEN.displayLayer({name:ref_layer,number:2});
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
}});
// if ( GEN.getSelectCount() > 0 ){
selCopyOther
({
layer
:
"tmp_center"
})
// GEN.selSubstitute({tol:1,mode:'select'});
var
layer_limits_tmp
=
GEN
.
getLayerLimits
({
job
:
job
,
step
:
step
,
layer
:
"tmp_center"
,
units
:
units
});
// GEN.selMoveOther({target_layer:ref_layer,invert:'no'});
layer_limits_tmp
.
xc
=
layer_limits_tmp
.
xmin
-
0
+
layer_limits_tmp
.
xsize
/
2
;
// }else{
layer_limits_tmp
.
yc
=
layer_limits_tmp
.
ymin
-
0
+
layer_limits_tmp
.
ysize
/
2
;
// GEN.workLayer({name:work_layer,display_number:1,clear_before:'yes'});
delLayer
(
"tmp_center"
)
// GEN.selectByFilter({area_rect:tmp_con});
GEN
.
clearLayers
()
GEN
.
affectedLayer
({
affected
:
'no'
,
mode
:
'all'
})
// if ( GEN.getSelectCount() > 0 ){
GEN
.
affectedLayer
({
affected
:
'yes'
,
layer
:[
work_layer
,
tmp1
]})
// GEN.selSubstitute({tol:1,mode:'select'});
GEN
.
COM
(
"filter_area_strt"
)
// GEN.selMoveOther({target_layer:ref_layer,invert:'no'});
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
)
// else{
GEN
.
COM
(
"filter_area_end,layer=,filter_name=popup,operation=select,area_type=rectangle,inside_area=yes,intersect_area=no"
)
// GEN.COM('disp_on');
// 更具角度将其旋转
// last;
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
}});
// } else {
GEN
.
selTransform
({
mode
:
'anchor'
,
oper
:
"rotate"
,
x_anchor
:
layer_limits_tmp
.
xc
,
y_anchor
:
layer_limits_tmp
.
yc
,
angle
:
angle
})
// IKM.msg("没有找到文字框和对应的文字层,程序将退出。")
// }
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
;
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'
);
var
ans
=
GEN
.
PAUSE
(
'Please Check...'
);
if
(
!
/ok/ig
.
test
(
ans
)){
throw
"cancel"
}
GEN
.
COM
(
'disp_off'
);
var
tmp_symbol
=
'tl_script_tmp'
;
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
;
}
}
})
}
})
})
}
}
// 文字放大
function
slOptimize
()
{
// 1. step过滤
var
workstep
=
getWorkStep
()
if
(
!
Array
.
isArray
(
workstep
)){
throw
"工作step错误"
}
// 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
({
title
:
"请先择工作层"
,
list
:
layers
,
defaultvalue
:
work_layers
,
columns
:
4
,
gen
:
GEN
})
}
if
(
work_layers
.
length
==
0
)
{
return
"没有先择layer"
}
var
matrix
=
GEN
.
getMatrix
({
job
:
job
})
IKM
.
msg
(
work_layers
)
}
// 文字框按阻焊扩大
// 文字放大
function
selCopyOther
(
props
){
// {layer , invent, dx, dy , size}
function
selCopyOther
(
props
){
// {layer , invent, dx, dy , size}
...
@@ -758,6 +973,34 @@ function delLayer(layer){
...
@@ -758,6 +973,34 @@ function delLayer(layer){
}
}
layer
=
layer
.
filter
(
function
(
v
){
return
GEN
.
isLayerExists
({
job
:
job
,
layer
:
v
})})
layer
=
layer
.
filter
(
function
(
v
){
return
GEN
.
isLayerExists
({
job
:
job
,
layer
:
v
})})
if
(
layer
.
length
){
if
(
layer
.
length
){
GEN
.
deleteLayer
({
job
:
job
,
layer
:
[
layer
]
})
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
}
}
\ No newline at end of file
This diff is collapsed.
Click to expand it.
public_script/字符优化/
字框分离
.pl
→
public_script/字符优化/
sl_box_opt
.pl
View file @
616dcdb3
...
@@ -368,12 +368,19 @@ sub enlarge_slik_frame{
...
@@ -368,12 +368,19 @@ sub enlarge_slik_frame{
$scalex = 1 if $scalex < 1;
$scalex = 1 if $scalex < 1;
$scaley = ($layer_limits_pad->{ysize}+$line_width*2+0.004)/($layer_limits->{ysize});
$scaley = ($layer_limits_pad->{ysize}+$line_width*2+0.004)/($layer_limits->{ysize});
$scaley = 1 if $scaley < 1;
$scaley = 1 if $scaley < 1;
#$GUI->debug(dump($scalex,'
====
',$scaley));
$GUI->debug(dump($layer_limits_pad));
$GUI->debug(dump($line_width));
$GUI->debug(dump($layer_limits));
# layer_limits_pad : {xmax:"2.886225",xmin:"2.7043351",xsize:"0.1818899",ymax:"3.4059092",ymin:"3.3263816",ysize:"0.0795276"}
# line_width : 0.007
# layer_limits : {xc:"2.795536",xmax:"2.8947643",xmin:"2.6963077",xsize:"0.1984566",yc:"3.36614535",ymax:"3.4139367",ymin:"3.318354",ysize:"0.0955826999999996"}
# (scalex:"1.00722223397962", "====", scaley:"1.02034782444941")
}
}
#else{
#else{
# next;
# next;
#}
#}
##
##
$GEN->deleteLayer(job=>$Job,layer=>[$text_tmp]);
$GEN->deleteLayer(job=>$Job,layer=>[$text_tmp]);
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment