来日本3个月,EA也差不多用习惯了。但是越来越多的元素和近千根连线也让整个画面看上去非常凌乱。手调是一辈子都不可能手调的,虽然日本人就想让我干这种杂活……于是网上寻找EA的脚本工具。
EA script支持三种语言 JavaScript,VBscript以及JS。我还是VBscript用的熟练,就一直在用。国内也没有什么论坛网站可以参考的,只能去EA官网看手册,或者官网啃英文论坛……,还有一个叫BELLEKENS的大神做了很多EA的工具。
后期也准备学一学EA Add-In 与EA Shape script 还有EA SQL,这些都会对工作有帮助。
转正题,近千根连线很头疼,我也对EA的函数感觉有点头疼,比如命名选中右击有追加固定点的选项,可是愣是找不到追加固定点的函数或者代码。在官网找了两周都没找到。以至于我没办法完成对线方向布置的想法。EA自带的布线方式太难受了,会将数根线重合在一起,根本分不清哪根是哪根。研究了两周,时间有限我能力也有限也只能写出一些基本的代码。如果有同样使用EA的大神,请给予我一些帮助,谢谢啦。下面是我写的代码。
!INC Local Scripts.EAConstants-VBScript
'
' Script Name: LineAdjust
' Author: Sora Fu
' Purpose: To automatic fix two ends of connectors and change its routing type, but script works not good.
' Date: 2018/11/14
'
sub main
dim package as EA.Package
dim element1 as EA.Element
dim connector1 as EA.Connector
SumConnNum=0
EleNumCal=0
set package = Repository.GetTreeSelectedPackage
'for each subpackage in package.Packages
'session.output(subpackage.name) 'success To find subpackage
'next
'--------------------------------------Comps Assignment-------------------------------------------
dim comps as EA.Collection
set comps = package.Elements
SumEleNum=comps.Count
' List all resources
for i = 0 to comps.Count - 1
dim currentcomp as EA.Element
set currentcomp = comps.GetAt( i )
SumConnNum=SumConnNum+currentcomp.Connectors.Count
dim subcomps as EA.Collection
set subcomps = comps.GetAt(i).Elements
SumEleNum=SumEleNum+subcomps.count
for j = 0 to subcomps.Count - 1
dim currentsubcomp as EA.Element
set currentsubcomp = subcomps.GetAt( j )
SumConnNum=SumConnNum+currentsubcomp.Connectors.Count
next
next
SumEleNum=SumEleNum-1
SumConnNum=SumConnNum/2-1
redim CompArray(SumEleNum,2) 'ElementID,SumConnNum,ConnNumCal
redim ConnArray(SumConnNum,2) 'ConnID,ConnType,ElementID
for i = 0 to comps.Count - 1
set currentcomp = comps.GetAt( i )
CompArray(EleNumCal,0)=currentcomp.ElementID
CompArray(EleNumCal,1)=0
CompArray(EleNumCal,2)=0
EleNumCal=EleNumCal+1
set subcomps = comps.GetAt(i).Elements
for j = 0 to subcomps.Count - 1
set currentsubcomp = subcomps.GetAt( j )
CompArray(EleNumCal,0)=currentsubcomp.ElementID
CompArray(EleNumCal,1)=0
CompArray(EleNumCal,2)=0
EleNumCal=EleNumCal+1
next
next
EleNumCal=0
ConnNumCal=0
'--------------------------------------Conns Assignment-------------------------------------------
for EleNumCal=0 to SumEleNum
for each connector1 in Repository.GetElementByID(CompArray(EleNumCal,0)).Connectors
'for each element1 in package.Elements
'for each connector1 in element1.Connectors
select case JudgeComplex(connector1.ConnectorID,ConnArray,SumConnNum)
case 0 ConnArray(ConnNumCal,0)=connector1.ConnectorID
ConnArray(ConnNumCal,1)=connector1.Type
ConnArray(ConnNumCal,2)=CompArray(EleNumCal,0)
ConnNumCal=ConnNumCal+1
end select
CompArray(EleNumCal,1)=CompArray(EleNumCal,1)+1
next
next
'next
'--------------------------------------Conns Assignment-------------------------------------------
EleNumCal=0
ConnNumCal=0
'--------------------------------------Diagram Excute-------------------------------------------
for each diagram1 in package.Diagrams
for each dl in diagram1.diagramlinks
for ConnNumCal= 0 to SumConnNum
if dl.ConnectorID=ConnArray(ConnNumCal,0) then
select case ConnArray(ConnNumCal,1)
case "Association"
for EleNumCal= 0 to SumEleNum
if CompArray(EleNumCal,0)=ConnArray(ConnNumCal,2) then
numPort= CompArray(EleNumCal,2)+1
SumNum = CompArray(EleNumCal,1)+1
dl.Style="LSP=" & Cint(100*numPort/SumNum) & "R ;LEP=" & Cint(100*numPort/SumNum) & "L"
'dl.Style="LSP=050R;LEP=050L" 'lock Start Point 50% position of right side of box, lock end point 50% position of left side of box
dl.LineStyle=5 '5=Tree Horizontal
'dl.LineWidth=3
'dl.LineColor=RGB(255,0,255)
dl.Update()
CompArray(EleNumCal,2)=CompArray(EleNumCal,2)+1
end if
next
end select
end if
next
next
next
end sub
main
private function JudgeComplex( a , b , k )
dim i
for i =0 to k
if a=b(i,0) then
JudgeComplex=1
exit function
end if
next
JudgeComplex=0
end function