Hallo Daniel,
ich habe ein ähnliches Problem und komm einfach nicht weiter.
Ich habe mit Punkten eine Polyline erstellt und möchte die Koordinatenwerte in einer Datei ausgeben.
Leider kann ich auf die Werte nicht zugreifen, vermutlich weil die Punkte als PointOnCurve deklariert sind.
Hier mein Code, vielleicht hast du/ihr eine Idee!
Vielen Dank!
Sub PolyPktAusgabe()
Dim partDocument1 As PartDocument
Set partDocument1 = CATIA.ActiveDocument
Dim selection1
Set selection1 = partDocument1.Selection
selection1.Clear
Dim part1 As Part
Set part1 = partDocument1.Part
Dim hybridBodies1 As HybridBodies
Set hybridBodies1 = part1.HybridBodies
Dim hybridBody1 As HybridBody
Set hybridBody1 = hybridBodies1.Item("Ebene_1")
Dim hybridBodies2 As HybridBodies
Set hybridBodies2 = hybridBody1.HybridBodies
Dim hybridBody2 As HybridBody
Set hybridBody2 = hybridBodies2.Item("Linien")
Dim hybridShapes1 As HybridShapes
Set hybridShapes1 = hybridBody2.HybridShapes
Dim hybridShapePolyline1 As Object
Set hybridShapePolyline1 = hybridShapes1.Item("Polyline.3")
'Ein Part muss offen sein, kein Product
'Alle Punkte in "Geometrisches Set.1" werden ausgelesen
'Nur Punkte muss es im Geo Set geben anstonsten lauft das Makro auf Fehler
'Fall es noch ander Features gibt muss man ein TypeName einbauen
'In c:\temp\output.csv werden die Coord geschrieben. Dies Datei kannst du unter Excel aufmachen
'Ich finde CSV besser, weil es einfacher ist und, weil es System unabhängig ist
ReDim acoord(2)
Set Datei = CATIA.FileSystem.CreateFile("c:\temp\output.csv", True)
Dim ostream As TextStream
Set ostream = Datei.OpenAsTextStream("ForAppending")
Dim i As Long
Dim P_X, P_Y, P_Z As Double
Dim oPolyLineElement As Object 'Objekt auf Punkt der Polylinie
Dim oRefPolyLineElement As Object 'Referenz auf Punkt der Polylinie
Dim oElementRadius As Length
Dim Koord(1 To 3) As Variant
Set oPolyLine = hybridShapePolyline1
'Danach Schleife aufbauen und Punktkoordinaten auslesen
ostream.Write ("P_X" & ";" & "P_Y" & ";" & "P_Z" & Chr(10))
For i = 1 To oPolyLine.NumberOfElements
oPolyLine.GetElement i, oRefPolyLineElement, oElementRadius
Set oPolyLineElement = part1.FindObjectByName(oRefPolyLineElement.DisplayName)
P_X = oPolyLineElement.x.Value
P_Y = oPolyLineElement.y.Value
P_Z = oPolyLineElement.z.Value
'MsgBox ("x=" & P_X & "y=" & P_Y & "z=" & P_Z)
ostream.Write (P_X & ";" & P_Y & ";" & P_Z & Chr(10))
Next i
ostream.Close
End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP