Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Hybridbodies im SpecTree von unten nach oben durchlaufen

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
Autor Thema:  Hybridbodies im SpecTree von unten nach oben durchlaufen (1297 mal gelesen)
Bolle
Mitglied



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

Beiträge: 48
Registriert: 12.03.2003

erstellt am: 25. Jul. 2003 18:12    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 möchte von einen selektierten Punkt aus den zugehörigen Hybridbody auslesen und falls dieser Hybridbody in einem anderen steckt, dann auch diesen usw.
Ich habe mir folgendes Script überlegt:

Dim oParentObject As AnyObject
Dim oSelected As SelectedElement

oSelected = ... selektierter Punkt ('ist gegeben)
Set oParentObject  = oSelected.parent

do until typename(oParentObject) = "Part"

    msgbox "Typ: " & typename(oParentObject) & " Name: " & oParentObject.name
    Set ParentObject =  oParentObject.parent

loop

Wenn ich jetzt z.B. 3 Hybridbodys habe
OpenBody1
  |
  OpenBody2
      |
      OpenBody3
        |
        Punkt1

und starte vom Punkt1 aus, dann wird der OpenBody3 gefunden, aber als nächstes wird OpenBody1 ausgegeben.
Der Openbody2 wird immer übersprungen, dabei ist er doch parent von Openbody3 oder sehe ich das falsch ?
Kann mir jemand dsagen, wie ich sämtliche Hybridbodys der Hierarchie auslesen kann?

Gruß
Bolle

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

louis
Mitglied
Geschäftsführer


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

Beiträge: 93
Registriert: 07.05.2001

V5 R19/R2014, WIN7, Visual Basic6.0 SP6

erstellt am: 25. Jul. 2003 19: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 Nur für Bolle 10 Unities + Antwort hilfreich

Hallo,

es wundert mich, dass Du als Parent von Body 3 den Body1 angezeigt bekommst.
Normalerweise liegen ALLE HybridBodies unter Part2.HybridBodies. Die Struktur wie Du sie im Baum siehst ist NICHT gleich der Speicherstruktur.
Am besten sieht man das mit Bodies. Wenn diese mit Hinzufuegenen addiert werden, sind trotzdem alle unter Part2.Bodies zu finden.

Wo die Baumstruktur gespeichert wird weiss ich auch noch nicht - lerne aber gerne dazu.

Viele Gruesse
Louis

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

u01dz
Mitglied



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

Beiträge: 76
Registriert: 12.07.2003

V5R15GA

erstellt am: 26. Jul. 2003 07:35    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 Bolle 10 Unities + Antwort hilfreich

Hi zusammen,

wenn es sich nicht gerade um einen Bug in einem Servicepack handelt, gibt die Methode "HybridBodies" der Klassen "Part" und "HybridBody" jeweils eine Liste aller geöffneten Körper auf der ersten Hierarchieebene des Objektes aus. Geschachtelte geöffnete Körper werden nicht berücksichtigt (Buch "Effiziente Konstruktion mit Makros", S. 202 und 377).

Beispiel:

Sub CATMain()

' Struktur im CATPart:
' Hauptkörper
' Geöffneter Körper 1
'      - Geöfneter Körper 2
'      - Geöffneter Körper 3

Dim HBodiesErsterRang, HBodiesZweiterRang  As HybridBodies
Set HBodiesErsterRang = CATIA.ActiveDocument.Part.HybridBodies

MsgBox (HBodiesErsterRang.Count)
' Ergebnis ist 1

Set HBodiesZweiterRang = HBodiesErsterRang.Item(1).HybridBodies

MsgBox (HBodiesZweiterRang.Count)
' Ergebnis ist 2

End Sub

------------------
Tschüß, Dieter

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

u01dz
Mitglied



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

Beiträge: 76
Registriert: 12.07.2003

V5R15GA

erstellt am: 26. Jul. 2003 08:02    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 Bolle 10 Unities + Antwort hilfreich

... und nun die Antwort: Wie kann ich den geöffneten Körper eines Punktes bestimmen?

Ein Punkt gehört der Klasse "HybridShape" an. Ein "HybridShape" ist wiederum von der Klasse "AnyObject" abgeleitet, welche über die Eigenschaft "Parent" verfügt, um das übergeordnete Objekt des Punktes zu ermitteln ("Effiziente Konstruktion mit Makros, S. 383 und 146).

Allerdings erhält man damit das Listenobjekt "HybridShapes", dem der Punkt angehört. "HybridShapes" ist wiederum eine Eigenschaft eines geöffneten Körpers ("Effiziente Konstruktion mit Makros", S. 202). Aus diesem Grund muss die Eigenschaft Parent zweimal angewendet werden, um den geöffneten Körper zu erhalten.

Beispiel:

Sub CATMain()

' Baumstruktur:
' Hauptkörper
' Geöffneter Körper 1
'      - Geöffneter Körper 2
'            - Punkt

' Referenz des Puntkes holen ----------------------------------------
Dim Punkt as HybridShape
Set Punkt = CATIA.ActiveDocument.Part.HybridBodies.Item(1).HybridBodies.Item(1).HybridShapes.Item(1)

' Das Objekt des Punktes kann natürlich auch über Search, Selection, etc. ermittelt werden.
' Ich habe das Beispiel so gewählt, damit man es selbst nachbauen und ausprobieren kann.

' Geöffneten Körper bestimmen ----------------------------------------
Dim HBody As CATBaseDispatch
Set HBody = Punkt.Parent.Parent
MsgBox(HBody.Name)

End Sub

------------------
Tschüß, Dieter

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

u01dz
Mitglied



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

Beiträge: 76
Registriert: 12.07.2003

V5R15GA

erstellt am: 26. Jul. 2003 08:05    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 Bolle 10 Unities + Antwort hilfreich

... bezüglich der HybidBodies sollte das Ganze analog funktionieren.

------------------
Tschüß, Dieter

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Bolle
Mitglied



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

Beiträge: 48
Registriert: 12.03.2003

erstellt am: 28. Jul. 2003 16:11    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

Danke erstmal für die Beiträge.
aber das Problem besteht immer noch
...
Dim HBody As CATBaseDispatch
Set HBody = Punkt.Parent.Parent
MsgBox(HBody.Name)
...
gibt 'Geöffneter Körper 2' zurück. Soweit so gut.
Nur wenn ich Set HBody = Punkt.Parent.Parent.Parent schreibe, dann erhalte ich nicht 'Geöffneter Körper 1' sondern eine HybridBodies Collection. Und da liegt halt das Problem. Ich kann mich mit .parents nicht den Baum hinaufhangeln.

Gruß
Bolle

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Steffen Hohmann
Mitglied
 


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

Beiträge: 446
Registriert: 06.03.2002

erstellt am: 29. Jul. 2003 08:19    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 Bolle 10 Unities + Antwort hilfreich

Hallo Bolle,
Du bist auf dem richtigen Weg.

Punkt --> HybridShape
Punkt.Parent --> HybridShapes (Collection)
Punkt.Parent.Parent --> HybridBody
Punkt.Parent.Parent.Parent --> HybridBodies (Collection)
Punkt.Parent.Parent.Parent.Parent --> HybridBody
Punkt.Parent.Parent.Parent.Parent.Parent --> HybridBodies (Collection)
Punkt.Parent.Parent.Parent.Parent.Parent.Parent --> Hybridbody
Punkt.Parent.Parent.Parent.Parent.Parent.Parent.Parent --> HybridBodies (Collection)
...
...
Punkt.Parent.Parent. ...... .Parent --> Part


Wie Du siehst, mußt Du 2-mal die Parent-Methode anwenden, um zum übergeordneten Hybridbody zu gelangen.
Ob es ein HybridBody ist kan man mit TypeOf überprüfen.

    If TypeOf Punkt.Parent.Parent.usw. Is HybridBody Then


Gruss
Steffen

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Bolle
Mitglied



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

Beiträge: 48
Registriert: 12.03.2003

erstellt am: 31. Jul. 2003 12:05    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 Steffen,

wenn ich das so mache, wie du es beschrieben hast, dann bekomme ich noch den ersten (von unten) Openbody. Dannach liefert mir aber parent.parent nicht den Openbody der Ebene darüber, sondern den Openbody zwei ebenen weiter. Das ist ja das merkwürdige, das ich nicht verstehe.

Gruß
Bolle

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Bobby_Joe2001
Mitglied
Konstrukteur


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

Beiträge: 81
Registriert: 15.01.2006

erstellt am: 28. Apr. 2006 15:01    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 Bolle 10 Unities + Antwort hilfreich


geosets.jpg

 
Hallo,

hab jetzt nach knapp 3 Jahren das Problem auch 

Hat da mittlerweile einer eine Lösung?

Ich habe eine Skizze (siehe Anhang) in geschachtelten Geometrischen Sets und will alle Instanzen mit der Parent Eigenschaft durchlaufen.

Nur Catia überspringt immer ein Geometrisches Set.


Sub CATMain()

Set MyParent = CATIA.ActiveDocument.Selection.Item(1).Value

Do
 
    Set MyParent = MyParent.Parent
       
    Debug.Print MyParent.Name

Loop Until MyParent.Name = "CNEXT"


End Sub

Ich bekommen folgende Liste:

Sketches
INSTANZ_10
HybridBodies
INSTANZ_8
HybridBodies
INSTANZ_6
HybridBodies
INSTANZ_4
HybridBodies
INSTANZ_2
HybridBodies
TESTMODELL_STRUKTUR_UEBERGEBEN
TESTMODELL_STRUKTUR_UEBERGEBEN.CATPart
CNEXT

Wie kann ich jetzt aber z.B. auf das Geometrische Set "INSTANZ_9" zugreifen?

------------------
Du musst die Leute einmal richtig ärgern, dann wirst du endlich ernst genommen.
Konrad Adenauer

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CAMiCADse
Mitglied



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

Beiträge: 177
Registriert: 17.02.2006

V5,R19,SP9

erstellt am: 28. Apr. 2006 16:58    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 Bolle 10 Unities + Antwort hilfreich

Erstmal Hallo an alle!
Nachdem ich mich schon eine ganze Weile 'readonly' durchs Forum bewege, nun endlich mein erster Beitrag...

@Bobby_Joe2001
Das Problem hat mich auch schon Nerven gekostet.
Wenn Du den HybridBody auch als HybridBody deklarierst, dann funktionierts. In deinem Bsp. also folgende Zeile einfügen:

Code:
Dim MyParent As HybridBody

Warum das so ist habe ich bis jetzt auch noch nicht verstanden, aber zumindest läuft es so.

Gruß
CAMiCADse

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Bobby_Joe2001
Mitglied
Konstrukteur


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

Beiträge: 81
Registriert: 15.01.2006

erstellt am: 29. Apr. 2006 10:11    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 Bolle 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von CAMiCADse:
Erstmal Hallo an alle!
Nachdem ich mich schon eine ganze Weile 'readonly' durchs Forum bewege, nun endlich mein erster Beitrag...

@Bobby_Joe2001
Das Problem hat mich auch schon Nerven gekostet.
Wenn Du den HybridBody auch als HybridBody deklarierst, dann funktionierts. In deinem Bsp. also folgende Zeile einfügen:

Code:
Dim MyParent As HybridBody

Warum das so ist habe ich bis jetzt auch noch nicht verstanden, aber zumindest läuft es so.

Gruß
CAMiCADse


Willkommen im Board!

Das is schonmal nen guter Tip, Catia tickt echt manchmal extrem komisch.

Nur wie mach ichs in VB-Script? Ich will das auch in Makros einbauen, die unter Unix laufen sollen. Da kann ich VBA nicht nehmen.

Und in VB-Script gehen die "Dim" Anweisungen nicht und in CATScript haben sie denk ich keine Auswirkung.

------------------
Du musst die Leute einmal richtig ärgern, dann wirst du endlich ernst genommen.
Konrad Adenauer

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)2023 CAD.de | Impressum | Datenschutz