Code:
'-----------------------------------------
' Makro zeigt die Koordinaten von einer oder mehrerer
' zuvor selektierten Polylines in MessageBoxes an
'-----------------------------------------Sub CATMain()
'Allgemeine Variablen zum CATIA-Dokument
DIM oDoc AS Document 'Das CATIA-Dokument
Dim oSelection AS Selection 'Die aktuelle Auswahl
''Dim oPart AS Part 'Das zugehÎrige Part (MuÞ vorhanden sein!)
'Variablen fÏr die Polyline-DÏrchlÌufe
DIM oPolyLine AS HybridShapePolyline 'Polyline, die untersucht wird
DIM oPolyLineElement AS HybridShapePointCoord 'Punkt der Polylinie
DIM oRefPolyLineElement AS Reference 'Referenz auf Punkt der Polylinie
DIM oElementRadius AS Length 'Biegeradius der Polyline
DIM P_X, P_Y, P_Z AS DOUBLE 'Koordinaten eines Punktes
'Variable fÏr SchleifendurchlÌufe
DIM i, n AS LONG
Set oDoc = CATIA.ActiveDocument
' Set oPart = CATIA.ActiveDocument.Part 'DEBUG: GEHT GRAD NICHT, DA KEIN PART !
Set oSelection = oDoc.Selection
'---------------------------------------------------------
'!!! POLYLINE NACH DEM START DES MAKROS SELEKTIEREN !!!
'Dim aSel(0)
'aSel(0) = "HybridShapePolyline"
' oSelection.SelectElement2 aSel, "Polylinie auswaehlen", False
'---------------------------------------------------------
FOR n = 1 TO oSelection.Count 'Alle selektierten Polylines nacheinander durchgehen
'TBD: Sicherheitsabfrage, ob auch wirklich eine POLYLINE selektiert wurde
SET oPolyLine = oSelection.Item(n).Value 'Die n-te Polyline nehmen
MsgBox oPolyLine.Name 'DEBUG: Zeige den Namen der Polyline an (SpÌter dann -> Schreiben in Datei)
'Schleife aufbauen und Punktkoordinaten auslesen
FOR i = 1 TO oPolyLine.NumberOfElements
oPolyLine.GetElement i, oRefPolyLineElement, oElementRadius 'Das i-te
'Finde zu der Referenz das passende Objekt
'**** 'ACHTUNG: Wenn mehrere Points den selben Namen haben, wird immer der erste genommen !
SET oPolyLineElement = oPolyLine.Parent.GetItem (oRefPolyLineElement.DisplayName) 'Die Points und die Polyline hÌngen in der selben Ebene
' SET oPolyLineElement = oPart.FindObjectByName(oRefPolyLineElement.DisplayName) '!!! SETZT VORAUS, DASS DER NAME DES POINTS NUR EINMAL VORKOMMT !!!!
' Zudem muÞ in Catia dann auch ein PART sein
'Koordinaten und Biegeradius des Punktes
P_X = oPolyLineElement.X.Value
P_Y = oPolyLineElement.Y.Value
P_Z = oPolyLineElement.Z.Value
Radius = oElementRadius.Value 'Der Radius mÏsste fÏr unserem Fall immer gleich bleiben (kÎnnte aber in Catia je Biegung unterscheidlich sein)
'DEBUG: Werte anzeigen(SpÌter dann ->Schreiben in Datei)
MsgBox oPolyLineElement.Name & vbLf & "x = " & P_X & vbLf &"y = " & P_Y& vbLf &"z = "&P_Z & vbLf & "r = " & radius
NEXT
NEXT
END SUB