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.txtDie 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 ZWobei 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
8836.import.mvba