Hallo Augustiner,
meinen Dank und 10Us an Dich. Da hatte ich schon den ganzen Tag probiert und auch beim Herrn Ziehten nachgelesen und sogar die Zeile "Linie.Point" gefunden, aber dann ging es nicht weiter. Nun ja, manchmal sieht man den Wald vor lauter Bäume nicht.
@HoBLila
Die von mir per Makro erzeugten Linien (im vorliegenden Fall 2900 vom Typ "LineNormal") brauchen wir für FEM-Berechnungen. Damit werden vereinfacht Schweißpunktverbindungen dargestellt. Um sicher zu gehen, dass keine Linien doppelt vorhanden sind, lass ich mir die Referenzelemente der erzeugten Linien nach EXCEL wieder ausgeben und lass dort nach doppelten Elementen suchen. In einem weiteren Step werde ich mir die erzeugten Punkte (auf denen die Linien aufbauen) nach EXCEL transportieren und kann dort nach fehlenden und/oder doppelten Elementen suchen.
Wenn es jemand interessiert, anbei nun eine erste Variante wie ich sie verwende (noch nicht vollständig!):
Nach Selektion eines Geosets voller Linien (alle vom Typ "LineNormal") werden der Name des Referenzpunktes, der Name der Surface auf der die Linie normal steht, die Namen der beiden Begrenzungsflächen und die Koordinaten der Linienendpunkte ausgegeben.
Sub CATMain()
' Was soll selektierbar sein
Dim sSel
Dim UserSelection
Dim EnableSelectionFor(0)
Dim oHybridbody
Dim aPoints(8)
Dim oShapes
Dim ii
Dim oSpaWB
Dim oMeas
Dim oExcel
Dim iRow, iColumn
Dim oPoint
Dim oFlaeche
Dim oBegrenz1
Dim oBegrenz2
'Excel starten---------------------------------------------------
Set gXl = CreateObject("Excel.Application")
gXl.ReferenceStyle = xlR1C1
gXl.DisplayAlerts = False
gXl.Visible = True
Set gBook = gXl.Workbooks.Add
gBook.Title = gPageName
gBook.Subject = "Structure"
Set gWksSheet = gBook.ActiveSheet
iRow = 1
iColumn = 1
gWksSheet.cells(iRow, iColumn).Value = "Benennung"
gWksSheet.cells(iRow, iColumn+1).Value = "Referenzpunkt"
gWksSheet.cells(iRow, iColumn+2).Value = "Flaeche_Normal"
gWksSheet.cells(iRow, iColumn+3).Value = "Begrenzung 1"
gWksSheet.cells(iRow, iColumn+4).Value = "Begrenzung 2"
gWksSheet.cells(iRow, iColumn+5).Value = "X1"
gWksSheet.cells(iRow, iColumn+6).Value = "Y1"
gWksSheet.cells(iRow, iColumn+7).Value = "Z1"
gWksSheet.cells(iRow, iColumn+8).Value = "X1"
gWksSheet.cells(iRow, iColumn+9).Value = "Y2"
gWksSheet.cells(iRow, iColumn+10).Value = "Z2"
iRow = iRow + 2
EnableSelectionFor(0) = "HybridBody"
' Selektion definieren und leeren --------------------------------------------------
Set sSel = CATIA.ActiveDocument.Selection
sSel.Clear
Call MsgBox("Bitte GeoSet selektieren", vbOKOnly)
UserSelection = sSel.SelectElement2(EnableSelectionFor, "Bitte das Geometrische Set auswählen, welches exportiert werden soll", False)
' Auswertung ob Selektion erfolgreich -----------------------------------------------
If UserSelection <> "Normal" Then
MsgBox "Fehler bei der Auswahl"
Exit Sub
Else
Set oHybridbody = sSel.Item(1).Value
sSel.Clear
End If
' Liste der GeoElemente des GeoSets speichern
Set oShapes = oHybridbody.HybridShapes
' Workbench zum Messen holen
Set oSpaWB = CATIA.ActiveDocument.GetWorkbench("SPAWorkbench")
' Fehlerbehandlung abschalten
On Error Resume Next
' alle Elemente im GeoSet durchlaufen
For ii = 1 To oShapes.Count
gWksSheet.cells(iRow, iColumn).Value = oShapes.Item(ii).Name
Set oPoint = oShapes.Item(ii).Point
gWksSheet.cells(iRow, iColumn+1).Value = oPoint.DisplayName
Set oFlaeche = oShapes.Item(ii).Surface
gWksSheet.cells(iRow, iColumn+2).Value = oFlaeche.DisplayName
Set oBegrenz1 = oShapes.Item(ii).FirstUptoElem
gWksSheet.cells(iRow, iColumn+3).Value = oBegrenz1.DisplayName
Set oBegrenz2 = oShapes.Item(ii).SecondUptoElem
gWksSheet.cells(iRow, iColumn+4).Value = oBegrenz2.DisplayName
'GeoElement in MessObjekt umwandeln
Set oMeas = oSpaWB.GetMeasurable(oShapes.Item(ii))
'PointsOnCurve liefert die Start- und Endpunktkoordinaten zurück
Call oMeas.GetPointsOnCurve(aPoints)
gWksSheet.cells(iRow, iColumn+5).Value = aPoints(0)
gWksSheet.cells(iRow, iColumn+6).Value = aPoints(1)
gWksSheet.cells(iRow, iColumn+7).Value = aPoints(2)
gWksSheet.cells(iRow, iColumn+8).Value = aPoints(6)
gWksSheet.cells(iRow, iColumn+9).Value = aPoints(7)
gWksSheet.cells(iRow, iColumn+10).Value = aPoints(8)
iRow = iRow + 1
Next
' Fehlerbehandlung wieder einschalten
On Error GoTo 0
MsgBox ("Fertig!")
End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP