Die Koordinaten einer Polylinie kannst Du in VBA über die Coordinates-Eigenschaft abrufen. Da alle Polylinientypen diese Eigenschaft besitzen, ist es egal welchen Art verwendet wird. Der Unterschied zwischen den Polylinientypen besteht darin, das eine optimierte Polylinie lediglich X und Y speichert, die 3D- und 2D-Polylinie zusätzlich den Z-Wert. Einzelne Stützpunktkoordinaten kannst Du mit der Coordinate-Eigenschaft abrufen. Hier muss dann lediglich diue Nummer des Stützpunktes und eventuell die Koordinate angegeben werden.
X = Pl.Coordinate(0)(0) 'X-Wert des ersten Stützpunktes
Y = Pl.Coordinate(0)(1) 'Y-Wert des ersten Stützpunktes
Bei 3D-Polylinien währe der Z-Wert im dritten Feld des Arrays gespeichert
Z = Pl.Coordinate(0)(2) 'X-Wert des ersten Stützpunktes
Bei 2D-Polylinien müsstest Du den Wert der Elevation-Eigenschaft als Z-Koordinate verwenden.
Nachfolgend ein kleines Beispiel, wie der ganze Fall abgehandelt werden könnte.
Public Sub ExportPolylineCoords()
Dim AcSSet As AcadSelectionSet
On Local Error Resume Next
If TypeName(SelectionSets("Auswahl")) = "Nothing" Then
SelectionSets.Add "Auswahl"
End If
Set AcSSet = SelectionSets("Auswahl")
AcSSet.Clear
AcSSet.SelectOnScreen
Open "C:\Coords.txt" For Output As #1
If AcSSet.Count > 0 Then
For X = 0 To AcSSet.Count - 1
Set Object = AcSSet.Item(X)
Select Case TypeName(Object)
Case "IAcadPolyline", "IAcad3DPolyline", "IAcadLWPolyline"
For i = 0 To GetVertexCount(Object) - 1
OutStr = Utility.RealToString(Object.Coordinate(i)(0), acDefaultUnits, 3)
OutStr = OutStr & " " & Utility.RealToString(Object.Coordinate(i)(1), acDefaultUnits, 3)
If TypeName(Object) = "IAcad3DPolyline" Then
OutStr = OutStr & " " & Utility.RealToString(Object.Coordinate(i)(2), acDefaultUnits, 3)
Else
OutStr = OutStr & " " & Utility.RealToString(Object.Elevation, acDefaultUnits, 3)
End If
Print #1, OutStr
Next
End Select
Next
End If
Close
AcSSet.Delete
End Sub
Public Function GetVertexCount(Polyline) As Integer
On Error Resume Next
Select Case TypeName(Polyline)
Case "IAcadLWPolyline"
VertList = Polyline.Coordinates
GetVertexCount = (UBound(VertList) + 1) / 2
Case "IAcadPolyline", "IAcad3DPolyline"
VertList = Polyline.Coordinates
GetVertexCount = (UBound(VertList) + 1) / 3
End Select
End Function
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP