來日本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