Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  CATIA V5 Programmierung
  Elternbody finden

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
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


Sehen Sie sich das Profil von roccat an!   Senden Sie eine Private Message an roccat  Schreiben Sie einen Gästebucheintrag für roccat

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


Body_Selektierung.JPG

 
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


Sehen Sie sich das Profil von bgrittmann an!   Senden Sie eine Private Message an bgrittmann  Schreiben Sie einen Gästebucheintrag für bgrittmann

Beiträge: 12045
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 26. Mrz. 2025 10:15    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für roccat 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von roccat an!   Senden Sie eine Private Message an roccat  Schreiben Sie einen Gästebucheintrag für roccat

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von roccat an!   Senden Sie eine Private Message an roccat  Schreiben Sie einen Gästebucheintrag für roccat

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo,

ich hab es jetzt so gelöst das ich die Bodies rekursiv durchsuche.

Danke Bernd, für deinen Hinweis.

mfG
Mario

Code:

Option Explicit

Sub 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 >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2025 CAD.de | Impressum | Datenschutz