Because Autodesk erase function for alignment positions (balloons) to first fixed selected position and this function missing me, I made a macro for this function. I put the macro here for those who wants. It is with czech notes(green).
Public Sub ZarovnaniPozic()
Dim tentoDokument As DrawingDocument
Set tentoDokument = ThisApplication.ActiveDocument
If tentoDokument.SelectSet.Count < 2
Then
MsgBox ("Předem musí být vybrané pozice. Aspoň dvě.")
End
End If
If tentoDokument.SelectSet.Item(1).Type <> kBalloonObject Then
MsgBox ("První vybraná musí být pozice.")
End
End If
Dim RoztecVertikalni
As Double
Dim RoztecHorizontalni
As Double
RoztecVertikalni = tentoDokument.SelectSet.Item(1).Style.DefaultOffset / 0.45652
'Pevná hodnota 2.3
RoztecHorizontalni = tentoDokument.SelectSet.Item(1).Style.DefaultOffset / 0.33333
'Pevná hodnota 3.15
Dim VykresovaGeometrie
As TransientGeometry
Set VykresovaGeometrie = ThisApplication.TransientGeometry
Dim PrvniPozice
As Balloon
Set PrvniPozice = tentoDokument.SelectSet.Item(1)
'První zadaná pozice - výchozí
Dim PocetPozic
As Integer
PocetPozic = 0
Dim Vybrabne
As Variant
For Each Vybrabne
In tentoDokument.SelectSet
'Filtrace pozic od jiných věcí a zjištění počtu
If Vybrabne.Type = kBalloonObject
Then
PocetPozic = PocetPozic + 1
End If
Next
Dim Smer
As Integer
Dim SeznamPozic()
As Balloon
Dim PosunutiPozice()
As Double
ReDim SeznamPozic(PocetPozic - 1)
ReDim PosunutiPozice(PocetPozic - 1)
Dim SouradnicePozice
As Point2d
Dim Posunuti
As Double
Dim a
As Double 'koeficient více pozic
Dim i
As Integer
Dim j
As Integer
i = 0
For Each Vybrabne
In tentoDokument.SelectSet
'Načtení seznamu
If Vybrabne.Type = kBalloonObject
Then
Set SeznamPozic(i) = Vybrabne
i = i + 1
End If
Next
'Zjistit orientaci horizontálně nebo vertikálně
Dim PosunutiX
As Double
Dim PosunutiY
As Double
Dim Orientace
As Boolean
Orientace =
True 'VERTIKALNĚ
PosunutiX = Abs(PrvniPozice.Position.X - SeznamPozic(PocetPozic - 1).Position.X) / RoztecHorizontalni
PosunutiY = Abs(PrvniPozice.Position.Y - SeznamPozic(PocetPozic - 1).Position.Y) / RoztecVertikalni
If PosunutiX > PosunutiY
Then
Orientace =
False 'HORIZONTALNĚ
End If
'Zjištění kam co posunout
For i = 0 To (PocetPozic - 1)
Posunuti = 0
If Orientace
Then 'VERTIKALNĚ
a = 1
If PrvniPozice.Position.Y > SeznamPozic(i).Position.Y
Then
Smer = -1 'Dolů
Else
Smer = 1 'Nahoru
End If
For j = 0 To (PocetPozic - 1)
'Zjištění kam posunout
If SeznamPozic(i).Position.Y = PrvniPozice.Position.Y
Then
Posunuti = 0
ElseIf Smer = 1
And SeznamPozic(i).Position.Y > SeznamPozic(j).Position.Y
And SeznamPozic(j).Position.Y >= PrvniPozice.Position.Y
Then 'nahoru
Posunuti = Posunuti + 1
If SeznamPozic(j).BalloonValueSets.Count > 1
And SeznamPozic(j).PlacementDirection = kBottomDirection
And j > 0
Then
Posunuti = Posunuti + a * (SeznamPozic(j).BalloonValueSets.Count - 1)
'navíc pro vícepozicovou pozici
End If
ElseIf Smer = -1
And SeznamPozic(i).Position.Y < SeznamPozic(j).Position.Y
And SeznamPozic(j).Position.Y <= PrvniPozice.Position.Y
Then 'dolu
Posunuti = Posunuti + 1
If SeznamPozic(j).BalloonValueSets.Count > 1
And SeznamPozic(j).PlacementDirection = kBottomDirection
Then
Posunuti = Posunuti + a * (SeznamPozic(j).BalloonValueSets.Count - 1)
'navíc pro vícepozicovou pozici
End If
End If
Next
If SeznamPozic(i).BalloonValueSets.Count > 1
And SeznamPozic(i).PlacementDirection = kBottomDirection
And i > 0
And Smer = 1
Then
Posunuti = Posunuti + a * (SeznamPozic(i).BalloonValueSets.Count - 1)
'navíc pro vícepozicovou pozici
End If
PosunutiPozice(i) = PrvniPozice.Position.Y + Smer * (RoztecVertikalni * Posunuti)
Else 'HORIZONTALNĚ
a = 0.7
If PrvniPozice.Position.X > SeznamPozic(i).Position.X
Then
Smer = -1
'Vlevo
Else
Smer = 1
'Vpravo
End If
For j = 0
To (PocetPozic - 1)
'Zjištění kam posunout
If SeznamPozic(i).Position.X = PrvniPozice.Position.X
Then
Posunuti = 0
ElseIf Smer = 1 And SeznamPozic(i).Position.X > SeznamPozic(j).Position.X
And SeznamPozic(j).Position.X >= PrvniPozice.Position.X
Then
Posunuti = Posunuti + 1
If SeznamPozic(j).BalloonValueSets.Count > 1
And SeznamPozic(j).PlacementDirection = kRightDirection
Then
Posunuti = Posunuti + a * (SeznamPozic(j).BalloonValueSets.Count - 1)
'navíc pro vícepozicovou pozici
End If
ElseIf Smer = -1
And SeznamPozic(i).Position.X < SeznamPozic(j).Position.X
And SeznamPozic(j).Position.X <= PrvniPozice.Position.X
Then
Posunuti = Posunuti + 1
If SeznamPozic(j).BalloonValueSets.Count > 1
And SeznamPozic(j).PlacementDirection = kLeftDirection
Then
Posunuti = Posunuti + a * (SeznamPozic(j).BalloonValueSets.Count - 1)
'navíc pro vícepozicovou pozici
End If
End If
Next
If SeznamPozic(i).BalloonValueSets.Count > 1
And i > 0
Then 'navíc pro vícepozicovou pozici
Select Case Smer
Case 1
If SeznamPozic(i).PlacementDirection = kLeftDirection
Then
Posunuti = Posunuti + a * (SeznamPozic(i).BalloonValueSets.Count - 1)
End If
Case -1
If SeznamPozic(i).PlacementDirection = kRightDirection
Then
Posunuti = Posunuti + a * (SeznamPozic(i).BalloonValueSets.Count)
End If
End Select
End If
PosunutiPozice(i) = PrvniPozice.Position.X + Smer * (RoztecHorizontalni * Posunuti)
End If
Next
'Posunutí kažné pozice
For i = 0 To (PocetPozic - 1)
If Orientace
Then
SeznamPozic(i).Position = VykresovaGeometrie.CreatePoint2d(PrvniPozice.Position.X, PosunutiPozice(i))
Else
SeznamPozic(i).Position = VykresovaGeometrie.CreatePoint2d(PosunutiPozice(i), PrvniPozice.Position.Y)
End If
Next
End Sub