| |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für CATIA & Co. | | |  | KISTERS 3DViewStation: Neuer Strukturvergleich ab sofort verfügbar, eine Pressemitteilung
|
Autor
|
Thema: Elternbody finden (117 / mal gelesen)
|
roccat Mitglied Konstrukteur
 
 Beiträge: 175 Registriert: 19.02.2010 WinXP/Win7 Office XP/2007 Catia V5 R16-R19, VB6.0, VBA, BASCOM-AVR VB .Net 2010
|
erstellt am: 26. Mrz. 2025 09:46 <-- editieren / zitieren --> Unities abgeben:         
Hallo, ich habe folgendes Problem und würde mich über ein paar Hinweise freuen. Ein Benutzer soll über einer "UserSelection" ein Bauteil im 3D selektieren. Die Selektion lässt nur Bodies zu. Wenn der User das Bauteil selektiert, wird nur der entsprechende Unterbody selektiert. Ich bräuchte aber den Elternbody, also das gesamte Bauteil. Kann man die UserSelection so definieren das gleich der Elternbody selektiert wird oder wie komme ich von dem selektierten Unterbody zum Elternbody? Vielen Dank für Eure Hilfe. Code:
Option Explicit Sub SelectTest() Dim MyDoc As Document Dim MySelection 'As Selection Dim InputObjectType(0) Dim Status As String Dim MyBody As Body Set MyDoc = CATIA.ActiveDocument Set MySelection = MyDoc.Selection MySelection.Clear 'Selektieren InputObjectType(0) = "Body" Status = MySelection.SelectElement2(InputObjectType, "************ Bauteil selektieren ************ (ESC=Cancel)", False) If (Status = "Cancel") Or MySelection.Count = 0 Then MySelection.Clear Else Set MyBody = MySelection.Item2(1).Value End If End Sub
------------------ Wenn das die Lösung sein soll, will ich mein Problem zurück !! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
       
 Beiträge: 12045 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 26. Mrz. 2025 10:15 <-- editieren / zitieren --> Unities abgeben:          Nur für roccat
Servus AFAIK geht das nur über einen Umwege zB: - per InBooleanOperation prüfen ob der selektierte Körper "root" ist
- wenn nicht alle boolesche Operationen suchen
- alle boolesche Operationen prüfen ob/wo der selektierte Körper darin verwendet wird
Gruß Bernd EDIT: ggf geht noch aus dem Körper eine Referenz zu ermitteln und den DisplayName dieser zu analysieren ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
roccat Mitglied Konstrukteur
 
 Beiträge: 175 Registriert: 19.02.2010 WinXP/Win7 Office XP/2007 Catia V5 R16-R19, VB6.0, VBA, BASCOM-AVR VB .Net 2010
|
erstellt am: 26. Mrz. 2025 10:28 <-- editieren / zitieren --> Unities abgeben:         
Hallo Bernd, danke für die Antwort. Ok so ähnlich hatte ich's grad vor: -prüfen ob Body Root ist -wenn nicht, alle Bodies die nicht in boolescher Operation sind zu durchlaufen und nach dem Body suchen. Dachte das geht einfacher. Danke Bernd, ich versuch's mal. mfG Mario ------------------ Wenn das die Lösung sein soll, will ich mein Problem zurück !! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
roccat Mitglied Konstrukteur
 
 Beiträge: 175 Registriert: 19.02.2010 WinXP/Win7 Office XP/2007 Catia V5 R16-R19, VB6.0, VBA, BASCOM-AVR VB .Net 2010
|
erstellt am: 26. Mrz. 2025 14:33 <-- editieren / zitieren --> Unities abgeben:         
Hallo, ich hab es jetzt so gelöst das ich die Bodies rekursiv durchsuche. Danke Bernd, für deinen Hinweis. mfG Mario Code:
Option ExplicitSub SelectTest() Dim MyDoc As Document Dim MySelection 'As Selection Dim InputObjectType(0) Dim Status As String Dim MyBody As Body Dim MyRootBody As Body Dim MyBodies As Bodies
'Allgemeines Set MyDoc = CATIA.ActiveDocument Set MySelection = MyDoc.Selection MySelection.Clear 'Selektieren InputObjectType(0) = "Body" Status = MySelection.SelectElement2(InputObjectType, "************ Bauteil selektieren ************ (ESC=Cancel)", False) If (Status = "Cancel") Or MySelection.Count = 0 Then MySelection.Clear Else Set MyBody = MySelection.Item2(1).Value Set MyBodies = MyBody.Parent 'Schleife über alle Bodies For Each MyRootBody In MyBodies 'Nur RootBodies bearbeiten If MyRootBody.InBooleanOperation = False Then 'Prüfen ob Body gefunden wurde If FindBody(MyBody, MyRootBody) = True Then Debug.Print "RootBody ist: " & MyRootBody.Name Exit For End If End If Next End If End Sub Function FindBody(ByVal MyBody As Body, ByVal MyParentBody As Body) As Boolean Dim MyShapes As Shapes Dim MyShape As Shape 'Prüfung ob Bodies gleich sind If MyBody Is MyParentBody Then FindBody = True Exit Function End If 'Schleife über alle Shapes Set MyShapes = MyParentBody.Shapes For Each MyShape In MyShapes 'nur Boolesche Operationen bearbeiten If TypeName(MyShape) = "Assemble" Or TypeName(MyShape) = "Add" Or TypeName(MyShape) = "Remove" Or TypeName(MyShape) = "Intersect" Then 'Funktion für Unterbody rekursiv aufrufen Set MyParentBody = MyShape.Body If FindBody(MyBody, MyParentBody) = True Then FindBody = True Exit For End If End If Next
End Function
------------------ Wenn das die Lösung sein soll, will ich mein Problem zurück !! [Diese Nachricht wurde von roccat am 26. Mrz. 2025 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |