Hallo,
in R14 (und mit VB 6.0) klappts mit .SelectElement2 und folgendem Code. (Da die Methode SelectElement2 ebenfalls in R12 existiert, gehe ich davon aus, das es hier auch klappt.)
Dim InputObjectType(0)
Dim Status
Dim oSelection
Set oSelection = CATIA.ActiveDocument.Selection
InputObjectType(0) = "Face" '---nur Fläche auswählbar
Status = oSelection.SelectElement2(InputObjectType, "Select", False) '--- UserSel
If (Status <> "Normal") Then '-------Auswahl i.O?
MsgBox "Abort" '--- nein
End
Else '------- ...wenn ja, dann...
Set oSelectedElement = oSelection.Item(1).Value
oSelection.Clear
oSelection.EndSelectElement
End If
Über den DisplayNamen von oSelectedElement lässt sich der Name des zugehörigen Konstruktions-Elements auslesen (in diesem Fall ein Pad). Funktioniert immer, wenn es sich um ein BRep handelt (also wie im Bsp. die Teilefläche eines Würfels), da die Nomenklatur des BReps immer gleich ist. (Funktioniert auch für Pockets, Shafts ….)
aString = Split (oSelectedElement.DisplayName,”Face: (Brp: (“)
(das Leerzeichen zwischen dem : und dem ( hinter Face und Brp bitte weglassen, ich habe sie zugefügt, da es sonst hier im Text Smilies gibt)
aSearchedPad = Split (aString(1),”;”)
sSearchedPadName = aSearchedPad(0)
Mit folgender Schleife lässt sich dann der Name des zugehörigen Körpers auslesen:
For Each Body In CATIA.ActiveDocument.Part.Bodies
Set oBody = CATIA.ActiveDocument.Part.Bodies
For Each Item In oBody
Set oShapes = Item
For Each oItem In oShapes.Shapes
If oItem.Name = Then
GoTo Sprungmarke_ExitFor
End If
Next
Next
Next
Sprungmarke_ExitFor:
MsgBox oItem.Parent.Parent.Name '------ Name des zugehörigen Bodies
Da die Benennung der Elemente innerhalb eines Parts normalerweise unikal ist (also nur einmal vorkommt), dürfte die Zuordnung über den Namen kein Problem bereiten.
Zumindest der Sprungbefehl funktioniert nur in VB, im CATScript muss die Schleife anders verlassen werden (mit If ... Then-Abfragen). Ob die For..Each Schleifen im CATScript funktionieren, weiss ich nicht. Aber auch diese lassen sich (wenn auch umständlicher) mit z.B. For i = 1 to CATIA.ActiveDocument.Part.Bodies.Count .... programmieren.
Hoffe es hilft, Gruss
TomTom1972
------------------
tomtom1972
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP