In der Praxis gibt es verschiedenartige Anforderungen für das Einlesen von Koordinaten.
Eine Variante besteht darin, dass die Koordinaten, die in einer Textdatei als XYZ Koordinaten zur Verfügung stehen, automatisch durch eine Linie miteinander verbunden werden.
Ich möchte hier einmal einen Ansatz mit VBA vorschlagen, mit dem genau dies realisiert werden kann.
Der Einfachheit halber ist die Textdatei innerhalb des VBA Quellcodes fest verdrahtet, konkret: c:\daten\Beispieldaten_punkte.txt
Die einzelnen Koordinaten werden zusätzlich durch einen Text gekennzeichnet. Dieser Text ist im Prinzip eine hochlaufende Nummer und ist auf mindestens 3 Stellen festgelegt.
Die Position für diesen Text ist die Koordinate um (2,2) nach rechts oben versetzt.
Die Texthöhe wird so verwendet, wie es zur zeit eingestellt ist.
Die Koordinaten sollten in einer Textdatei vorliegen, jeweils 1 Koordinate pro Zeile im Format X Y Z
Wobei zwischen die Werten ein Leerzeichne sein muss.
All diese Einstellungen lassen sich natürlich abändern oder weiter automatisieren.
Den VBA Code habe ich zusätzlich als MVBA Projektdatei angehängt, hier aber einmal der Vorschlag als Text, wie man so etwas angehen könnte:
Option Explicit
Sub import()
Dim s As String
Dim p() As String
Dim counter As Long
Dim oLine As LineElement
Dim pStart As Point3d
Dim pEnd As Point3d
Dim porigin As Point3d
Dim oText As TextElement
Dim sNummer As String
ActiveSettings.TextStyle.Justification = msdTextJustificationLeftBottom ' Ausrichtung für Text (links unten)
Open "c:\daten\Beispieldaten_punkte.txt" For Input As #1
CommandState.StartDefaultCommand
ActiveSettings.LineWeight = 0
CadInputQueue.SendKeyin "place line"
Do While Not (EOF(1))
Line Input #1, s
p = Split(s, " ")
If UBound(p) - LBound(p) = 2 Then ' nur wenn xyz Koordinate gefunden wurden
counter = counter + 1 ' Zähler zum Durchnummerieren der Koordinaten
' Punkt an Koordinate setzen:
pStart = Point3dFromXYZ(Val(p(0)), Val(p(1)), Val(p(2)))
pEnd = pStart
ActiveSettings.LineWeight = 8 ' Strichstärke hochsetzen, damit die Punkte zu sehen sind
Set oLine = CreateLineElement2(Nothing, pStart, pEnd)
ActiveModelReference.AddElement oLine ' Punkt einfügen
ActiveSettings.LineWeight = 0
sNummer = CStr(counter)
If Len(sNummer) < 3 Then
sNummer = String(3 - Len(sNummer), "0") + sNummer
End If
porigin = Point3dAdd(pStart, Point3dFromXYZ(2, 2, 0)) ' Einfügepunkt für Text
Set oText = CreateTextElement1(Nothing, sNummer, porigin, Matrix3dIdentity)
ActiveModelReference.AddElement oText ' Text einfügen (Punktnummer)
CadInputQueue.SendDataPoint pStart ' nächsten Punkt für Verbindungslinie setzen
End If
Loop
CadInputQueue.SendReset
CommandState.StartDefaultCommand
Close #1
End Sub