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
9a209ab7
Commit
9a209ab7
authored
Apr 10, 2020
by
Scott Sun
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
asd
parent
a81035d3
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
310 additions
and
0 deletions
+310
-0
ATS_AIM_layer_rename_副本.js
test/ATS_AIM_layer_rename_副本.js
+310
-0
No files found.
test/ATS_AIM_layer_rename_副本.js
0 → 100644
View file @
9a209ab7
/*
NAME:
DESCRIPTION: matrix改名和排序
PARAMETER:
[
{
name : 'step_filter',
title : 'Step过滤',
type : 'LineEdit',
property : {tool_tip : '过滤step信息'}
},
{
name : 'rename_rule',
title : '改名规则',
type : 'TextEdit',
property : {tool_tip : '支持正则匹配'},
setter:function(obj,value,self){
obj.setPlainText(value);
},
getter:function(obj,self){
return obj.plainText
}
},
{
name : 'sort_rule',
title : '排序规则',
type : 'TextEdit',
property : {tool_tip : '支持正则匹配'},
setter:function(obj,value,self){
obj.setPlainText(value);
},
getter:function(obj,self){
return obj.plainText
}
},
{
name : 'auto_save',
title : '自动保存',
type : 'RadioBox',
property : {
item_list:[
{name:'yes',text:'YES'},
{name:'no',text:'NO'},
],
tool_tip:'是否自动保存料号开关'
}
}
]
VERSION_HISTORY:
V1.00 2020 3-30 Scott
HELP:
<html><body bgcolor="#DDECFE">
<font size="3" color="#003DB2"><p>功能简介</p></font>
<p> matrix改名和排序</p>
<br>
<font size="3" color="#003DB2"><p>参数配置</p></font>
<p> matrix改名和排序规则 </p>
<font size="3" color="#003DB2"><p>注意事项</p></font>
<p> ● 无 </p>
<br>
</body></html>
*/
// 引入模块 包
var
$
=
require
(
'topcam.scriptfunc'
).
argv
();
var
fs
=
require
(
'fs'
);
var
_
=
require
(
'lodash'
);
var
IKM
=
$
.
ikm
;
var
GEN
=
$
.
gen
;
var
GUI
=
$
.
gui
;
var
Job
=
$
.
job
;
try
{
var
config
=
{
rename
:
{
rule1
:
[
{
orig_name
:
'd_top_.+(
\\
d+)'
,
new_name
:
'd1-(1)'
},
{
orig_name
:
'd_.+(
\\
d+)_bottom'
,
new_name
:
'd(1)-(last)'
},
{
orig_name
:
'd_.+(
\\
d+)_.+(
\\
d+)'
,
new_name
:
'd(1)-(2)'
}
]
},
sort
:
[
{
name
:
'comp_+_top'
,
context
:
'board'
,
type
:
'components'
,
polarity
:
'positive'
},
{
name
:
'sst'
,
context
:
'board'
,
type
:
'solder_paste'
,
polarity
:
'positive'
},
{
name
:
'spt'
,
context
:
'board'
,
type
:
'solder_paste'
,
polarity
:
'positive'
},
{
name
:
'smt'
,
context
:
'board'
,
type
:
'solder_mask'
,
polarity
:
'positive'
},
{
name
:
'top'
,
context
:
'board'
,
type
:
'signal'
,
polarity
:
'positive'
},
{
name
:
'isl(
\\
d+)'
,
context
:
'board'
,
type
:
'signal'
,
polarity
:
'positive'
},
{
name
:
'bottom'
,
context
:
'board'
,
type
:
'signal'
,
polarity
:
'positive'
},
{
name
:
'smb'
,
context
:
'board'
,
type
:
'solder_mask'
,
polarity
:
'positive'
},
{
name
:
'spb'
,
context
:
'board'
,
type
:
'solder_paste'
,
polarity
:
'positive'
},
{
name
:
'ssb'
,
context
:
'board'
,
type
:
'solder_paste'
,
polarity
:
'positive'
},
{
name
:
'comp_+_bot'
,
context
:
'board'
,
type
:
'components'
,
polarity
:
'positive'
},
{
name
:
'd(
\\
d+)-
\\
d+'
,
context
:
'board'
,
type
:
'drill'
,
polarity
:
'positive'
},
{
name
:
'drill'
,
context
:
'board'
,
type
:
'drill'
,
polarity
:
'positive'
},
{
name
:
'rout'
,
context
:
'board'
,
type
:
'rout'
,
polarity
:
'positive'
}
],
setDrill
:
'yes'
,
auto_save
:
'yes'
}
var
job
=
"1"
if
(
!
GEN
.
isJobExists
({
job
:
job
})){
throw
"job "
+
job
+
" is not exist"
}
if
(
!
GEN
.
isJobOpen
({
job
:
job
})){
GEN
.
openJob
({
job
:
job
})}
if
(
GEN
.
checkInout
({
job
:
job
,
mode
:
"test"
})
!=
0
){
throw
"the job check"
}
GEN
.
checkInout
({
job
:
job
,
mode
:
"out"
});
if
(
config
.
rename
){
reName
({
job
:
job
,
rule
:
config
.
rename
})
}
if
(
config
.
sort
.
length
){
sortLayer
({
job
:
job
,
rule
:
config
.
sort
});
// 排序
}
if
(
/^yes$/
.
test
(
config
.
setDrill
)){
setDrill
({
job
:
job
});
// 设置钻孔
}
// finally
if
(
/^yes$/ig
.
test
(
config
.
auto_save
))
{
GEN
.
saveJob
({
job
:
job
});
}
GEN
.
checkInout
({
job
:
job
,
mode
:
"in"
});
GEN
.
closeJob
({
job
:
job
})
return
'Done'
;
}
catch
(
error
)
{
GUI
.
msg
(
error
);
return
'Error'
;
}
function
reName
(
props
)
{
// 改名 par{job:要改名的料号, rule: {要改名的规则}
var
job
=
props
.
job
if
(
Array
.
isArray
(
props
.
rule
)){
props
.
rule
=
{
rule
:
props
.
rule
}
}
var
matrix
=
GEN
.
getMatrix
({
job
:
job
});
// 获取matrix
var
matrixNames
=
Object
.
keys
(
matrix
)
// 获取数组 matrix的name
var
signalCount
=
matrixNames
.
reduce
(
function
(
a
,
b
){
if
(
matrix
[
b
].
context
==
"board"
&&
matrix
[
b
].
layer_type
==
"signal"
){
a
++
}
return
a
},
0
)
var
reNameList
=
[];
// 记录匹配程度最高的改名结果
Object
.
keys
(
props
.
rule
).
forEach
(
function
(
key
){
var
rule
=
props
.
rule
[
key
];
var
renames
=
getRenameCount
(
matrixNames
,
rule
,
signalCount
);
// 根据规则 和 matrixNames 的到更改名称数据
if
(
renames
.
length
>
reNameList
.
length
){
// 找到匹配规则最多的
reNameList
=
renames
;
}
})
// 更改层名
reNameList
.
forEach
(
function
(
v
){
if
(
v
.
orig_name
!==
v
.
new_name
){
GEN
.
renameLayer
({
job
:
job
,
layer
:
v
.
orig_name
,
new_name
:
v
.
new_name
})
}
});
}
function
getRenameCount
(
names
,
rule
,
signalCount
){
// 返回改名匹配结果
var
res
=
names
.
reduce
(
function
(
res
,
name
){
rule
.
map
(
function
(
rule
){
if
(
rule
.
orig_name
===
name
){
res
.
push
({
orig_name
:
name
,
new_name
:
rule
.
new_name
});
}
else
if
(
eval
(
"/^"
+
rule
.
orig_name
+
"$/ig.test(name)"
))
{
if
(
/
\(
.*
\)
/ig
.
test
(
rule
.
orig_name
)){
var
exec
=
eval
(
"/"
+
rule
.
orig_name
+
"/ig.exec(name)"
).
slice
(
1
)
var
new_name
=
rule
.
new_name
;
var
index
=
0
;
exec
.
forEach
(
function
(
v
,
i
){
if
(
/
(
after
)
/
.
test
(
new_name
)){
new_name
=
new_name
.
replace
(
"(after)"
,
Number
(
v
)
+
1
);
}
if
(
/
(
last
)
/
.
test
(
new_name
)){
new_name
=
new_name
.
replace
(
"(last)"
,
signalCount
);
}
new_name
=
new_name
.
replace
(
"("
+
(
i
+
1
)
+
")"
,
v
);
if
(
rule
.
tp
&&
/
\d
+/
.
test
(
v
)){
if
(
v
==
1
){
new_name
=
"top"
}
index
=
v
>
index
?
v
:
index
}
})
if
(
rule
.
tp
){
res
.
push
({
orig_name
:
name
,
new_name
:
new_name
,
index
:
index
});
}
else
{
res
.
push
({
orig_name
:
name
,
new_name
:
new_name
});
}
}
else
{
res
.
push
({
orig_name
:
name
,
new_name
:
rule
.
new_name
});
}
}
})
return
res
},
[])
var
tpIndex
=
{
i
:
-
1
,
value
:
0
};
res
.
forEach
(
function
(
v
,
i
){
if
(
v
.
index
&&
v
.
index
>
tpIndex
.
value
){
tpIndex
.
i
=
i
tpIndex
.
value
=
v
.
index
}
})
if
(
tpIndex
.
i
>=
0
){
res
[
tpIndex
.
i
].
new_name
=
"bottom"
}
return
res
}
function
sortLayer
(
props
){
// 排序方法 {job:要排序的料号, rule: {要改名的规则}
var
job
=
props
.
job
var
matrix
=
GEN
.
getMatrix
({
job
:
job
});
var
matriName
=
Object
.
keys
(
matrix
).
sort
(
function
(
a
,
b
){
return
matrix
[
a
].
row
-
matrix
[
b
].
row
})
var
matrixFirst
=
matriName
[
0
];
// 记录matrix中第一位
var
sortNames
=
[];
var
miscName
=
matriName
.
filter
(
function
(
name
){
// 找出需要排序的名称列表
var
flag
=
true
;
props
.
rule
.
forEach
(
function
(
item
,
i
){
var
evalReg
=
"/^"
+
item
.
name
+
"$/ig.test(name)"
;
if
(
name
==
item
.
name
||
eval
(
evalReg
)){
flag
=
false
;
if
(
name
===
item
.
name
){
var
_item
=
JSON
.
parse
(
JSON
.
stringify
(
item
));
_item
.
value
=
i
;
sortNames
.
push
(
_item
);
}
else
{
var
_item
=
JSON
.
parse
(
JSON
.
stringify
(
item
));
_item
.
value
=
i
;
var
str
=
"/^"
+
item
.
name
+
"$/ig.exec(name)"
_item
.
value2
=
eval
(
str
)[
1
]
-
0
;
_item
.
name
=
name
;
sortNames
.
push
(
_item
);
}
}
});
return
flag
;
})
miscName
.
forEach
(
function
(
n
){
if
(
matrix
[
n
].
context
==
'board'
){
GEN
.
matrixLayerAttr
({
job
:
job
,
layer
:
n
,
context
:
'misc'
})
}
})
sortNames
=
sortNames
.
sort
(
function
(
a
,
b
){
return
a
.
value
-
b
.
value
||
a
.
value2
-
b
.
value2
})
// 排序
if
(
sortNames
.
length
){
if
(
sortNames
[
0
].
name
!==
matrixFirst
)
{
// 如果第一位和matrix中第一位不同,先把第一位插入到最前面
GEN
.
matrixMoveRow
({
job
:
job
,
layer
:
sortNames
[
0
].
name
,
before
:
matrixFirst
})
}
sortNames
.
forEach
(
function
(
v
,
i
,
arr
){
var
layer
=
matrix
[
v
.
name
];
if
(
i
!==
0
){
GEN
.
matrixMoveRow
({
job
:
job
,
layer
:
v
.
name
,
after
:
arr
[
i
-
1
].
name
})
}
if
(
v
.
context
!==
layer
.
context
||
v
.
type
!==
layer
.
layer_type
||
v
.
polarity
!==
layer
.
polarity
){
GEN
.
matrixLayerAttr
({
job
:
job
,
layer
:
v
.
name
,
context
:
v
.
context
,
type
:
v
.
type
,
polarity
:
v
.
polarity
});
}
})
}
}
function
setDrill
(){
// 设置钻孔
var
martrix
=
GEN
.
getMatrix
({
job
:
job
});
// 获取所有的钻孔层
var
drillLayer
=
Object
.
keys
(
martrix
).
filter
(
function
(
v
){
return
martrix
[
v
].
layer_type
==
"drill"
&&
martrix
[
v
].
context
==
"board"
})
// 获取所有single层
var
signalLayer
=
Object
.
keys
(
martrix
).
sort
(
function
(
a
,
b
){
return
Number
(
martrix
[
a
].
row
)
-
Number
(
martrix
[
b
].
row
)}).
filter
(
function
(
v
){
return
martrix
[
v
].
layer_type
==
"signal"
&&
martrix
[
v
].
context
==
"board"
})
var
layerCount
=
GEN
.
getLayerCount
({
job
:
job
})
// findSignal 根据传入的数字找到对应的signal层 如 1 => top ; 2 => layer_2
function
findSignal
(
num
){
var
res
=
signalLayer
.
filter
(
function
(
v
){
var
vnum
=
0
;
if
(
/
\d
/
.
test
(
v
)){
var
tmp
=
/
(\d
+
)
/ig
.
exec
(
v
);
vnum
=
tmp
?
Number
(
tmp
[
1
])
:
0
;
}
return
num
===
vnum
})
return
res
[
0
];
}
function
doDrill
(
drills
){
// 分析钻孔层
return
drills
.
map
(
function
(
v
){
if
(
v
==
"drill"
){
return
{
start
:
signalLayer
[
0
],
end
:
signalLayer
[
signalLayer
.
length
-
1
],
layer
:
v
}
}
else
{
var
tmp
=
/
(\d
+
)
.
(\d
+
)
/ig
.
exec
(
v
);
if
(
tmp
){
var
start
=
Number
(
tmp
[
1
])
===
1
?
'top'
:
findSignal
(
Number
(
tmp
[
1
]));
var
end
=
Number
(
tmp
[
2
])
===
layerCount
?
'bottom'
:
findSignal
(
Number
(
tmp
[
2
]));
return
{
start
:
start
,
end
:
end
,
layer
:
v
}
}
else
{
return
0
;
}
}
})
}
var
drillSetList
=
doDrill
(
drillLayer
);
// 分析得到钻孔设置结果
drillSetList
=
drillSetList
.
filter
(
function
(
v
){
return
v
!==
0
})
drillSetList
.
forEach
(
function
(
v
){
GEN
.
matrixLayerDrill
({
job
:
job
,
layer
:
v
.
layer
,
start
:
v
.
start
,
end
:
v
.
end
})
})
}
\ 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