Autor
|
Thema: Part in Produktstruktur lokalisieren (1933 mal gelesen)
|
Timberwolve Mitglied
Beiträge: 233 Registriert: 21.07.2006
|
erstellt am: 16. Apr. 2007 09:30 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich bräuchte mal wieder einen kleinen Anreiz von euch. Folgende Problemstellung: 1. Ich selektiere ein "PART" in einer beliebigen Produktstruktur. 2. Nach der Selektion möchte ich feststellen in welchem Produkt (CATProduct) dieses Part angeordnet ist. Ich habe mir schon überlegt über einen rekursivscan über die Produktstruktur das entsprechende Part zu suchen. Ich denke jedoch das dies bei grossen Strukturen einfach zu lange dauern würde. Deshalb die Frage ob vielleicht jemand eine Ahnung hat, wie man das am geschicktesten lösen könnte.
Vielen Dank für eure Mühen Gruß Timber ------------------ Wenn alle Stricke reissen, nehm ich ein Drahtseil Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tomtom1972 Mitglied dipl ing maschinenbau
Beiträge: 605 Registriert: 22.03.2005 NVidia Quadro K4000 Intel Xeon E5-1620, 64GB RAM Windows10 64bit R30 <= CATIA V5 > =R19
|
erstellt am: 16. Apr. 2007 09:47 <-- editieren / zitieren --> Unities abgeben: Nur für Timberwolve
Hallo, ich weiß nicht, ob ich dein Problem richtig verstanden habe !? Wenn du ein in einer Struktur verbautes Part selektiert hast: Msgbox Catia.ActiveDocument.Selection.Item(1).Value.Parent.Parent.Parent.Name Gruß ------------------ tomtom1972 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Timberwolve Mitglied
Beiträge: 233 Registriert: 21.07.2006
|
erstellt am: 16. Apr. 2007 10:04 <-- editieren / zitieren --> Unities abgeben:
Ja du hast es richtig verstanden. ich hab nur ein kleines Problem. Ich hab für die Prüfung ne Routine gebastelt. erst habe ich es versucht als Part zu übergeben.Also kommt aus der Selektion das Object "Part" Damit hab ich mir mit ".Parent" das Dokument geholt und vom Dokument wiedderrum das "Product" mit ".Product" versuche ich dann mit ".Parent.Parent.Name" zu gehen, bekomm ich immer "CNEXT" angezeigt Mach ich das ganze mit dem Product zum selektieren, so funktioniert es. Aber warum???? Gruß Timber
------------------ Wenn alle Stricke reissen, nehm ich ein Drahtseil [Diese Nachricht wurde von Timberwolve am 16. Apr. 2007 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tomtom1972 Mitglied dipl ing maschinenbau
Beiträge: 605 Registriert: 22.03.2005 NVidia Quadro K4000 Intel Xeon E5-1620, 64GB RAM Windows10 64bit R30 <= CATIA V5 > =R19
|
erstellt am: 16. Apr. 2007 10:56 <-- editieren / zitieren --> Unities abgeben: Nur für Timberwolve
Hallo, das ist klar: Das Part, welches du auswählst, ist ein .Item der CATIA.Documents. Und das Parent.Parent... der selbigen ist die CATIA.Installation, also die CNEXT.exe Wenn du in deiner Rotine nur Parts selektieren können möchtest, musst du erst wieder von .Document (dem CATPart) auf die Instanz des selbigen (.Product) und von da aus übers .Partent.Parent.... das .CATProduct suchen. Also so: Sub CATMain() Set oSelection = Catia.ActiveDocument.Selection Dim InputObjectType(0) InputObjectType(0) = "Part" Status = oSelection.SelectElement3(InputObjectType, "", False, CATMultiSelTriggWhenUserValidatesSelection, False) '--- UserSel Set oFObj = oSelection.FindObject("CATIAProduct") Msgbox oFObj.Parent.Parent.Parent.Name End Sub Gruß ------------------ tomtom1972 [Diese Nachricht wurde von tomtom1972 am 16. Apr. 2007 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tomtom1972 Mitglied dipl ing maschinenbau
Beiträge: 605 Registriert: 22.03.2005 NVidia Quadro K4000 Intel Xeon E5-1620, 64GB RAM Windows10 64bit R30 <= CATIA V5 > =R19
|
erstellt am: 16. Apr. 2007 11:41 <-- editieren / zitieren --> Unities abgeben: Nur für Timberwolve
Noch mal Hallo, im Anhang (pdf) findest du mal zur Veranschaulichung ein paar Screenshots von VB-WatchWindow (CATIA Sturuktur). 1 Seite: Selection wenn InputObjectType(0) = "Part": Das .Parent der Selektion ist das Document, und das ist ein Item der CATIA.Documents. Von da aus kommst du über .Parent auf die Application selbst (CNext). 2 Seite: Links oben: InputObjectType(0) = "Part", aber über .FindObject wieder auf die zugehörige Instanz ist das gleiche wie (rechts unten im Bild) von oben durch den Tree gewandert (nur eben Rückwärts). Wirds klarer? Gruß ------------------ tomtom1972 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Timberwolve Mitglied
Beiträge: 233 Registriert: 21.07.2006
|
erstellt am: 16. Apr. 2007 12:02 <-- editieren / zitieren --> Unities abgeben:
Ok, jetzt ist es mir auch klar ;-) Das Mit dem FindObject hab ich aber noch net ganz verstanden. Ich selektiere mit InputObjectType(0) "Part" das gewünschte Part. Nach dem es jetzt in der Selection drin ist also Selection.Item(1).Value, ist doch eigentlich nur das Part drin, oder?? und mit FindObject findet das Script dann trotzdem das Product???? Hab an meiner jetzigen Maschine leider kein VB oder VBA :-( deshalb kann ich momentan mit dem schönen Watch-fenster nicht arbeiten. Aber bis auf FindObject hab ich alles soweit verstanden, Vielen Dank. Vielleicht kannst mir ja das FindObject noch etwas näher bringen ;-) Gruß Timber ------------------ Wenn alle Stricke reissen, nehm ich ein Drahtseil Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tomtom1972 Mitglied dipl ing maschinenbau
Beiträge: 605 Registriert: 22.03.2005 NVidia Quadro K4000 Intel Xeon E5-1620, 64GB RAM Windows10 64bit R30 <= CATIA V5 > =R19
|
erstellt am: 16. Apr. 2007 13:01 <-- editieren / zitieren --> Unities abgeben: Nur für Timberwolve
Hallo, "FindObject" ist eine Methode die zur Selection gehört. Damit kannst du Objekte ausfindig machen, zu welchen das selektierte Elemente gehört. Oder anders gesagt: Dein selektiertes Element ist immer auch Teil verschiedener anderer Objekte, die du dir mit Hilfe dieser Methode ausgeben lassen kannst. Bsp.: Teilfläche(BRep) > ist Teil einer Surface > ist Teil eines Parts > gehört zu einer Instance etc. .... Immer den Automation Typ mit dem prefix "CATIA". Also z.B.: Suchst du das Solid, dann .FindObject("CATIAShape") Suchst du den Body, dann .FindObject("CATIABody") Suchst du das Product (die Instanz), dann .FindObject("CATIAProduct") usw. Gruß [Diese Nachricht wurde von tomtom1972 am 16. Apr. 2007 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Timberwolve Mitglied
Beiträge: 233 Registriert: 21.07.2006
|
erstellt am: 17. Apr. 2007 10:45 <-- editieren / zitieren --> Unities abgeben:
Hallo nochmal, erstmal vielen Dank für deine Hilfe, die hat mich sehr weit nach vorn gebracht. Danke. Jetzt hab ich noch ne Frage, vielleicht hast du eine Idee. Wie kann ich einen Baum rekursiv nach oben scannen? Folgendes bräuchte ich für eine Analyse. Es wird ja ein Part selektiert, daraus bekomme ich dann mit FindObject das dazugehörige Product(vom Part). Jetzt möchte ich gerne bis zum ActiveDocument nach oben scannen und alle Elternkomponenten, bzw. Produktstufen in der das Part angeordnet ist aufgelistet. Mal Grafisch: Activedocument.Product | |-Unterprodukt1 | | | |-Unterprodukt2 | | | | | |-Selektiertes_Part | | | |-Unterprodukt3 | |-Unterprodukt4
Bei solch einer Struktur soll die liste folgendes ausgeben.
1. Elternprodukt = Unterprodukt2 2. Elternprodukt = Unterprodukt1 3. Elternprodukt = Activedocument.Product Hast du da vielleicht eine Idee????
Gruß Timber ------------------ Wenn alle Stricke reissen, nehm ich ein Drahtseil Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Timberwolve Mitglied
Beiträge: 233 Registriert: 21.07.2006
|
erstellt am: 17. Apr. 2007 11:00 <-- editieren / zitieren --> Unities abgeben:
Hallo habs bereits rausgefunden ;-) Hatte diesmal auch ne zündende Idee. Bin einfach mit Obj.Parent.Parent solang nach oben gegangen bis der Name der vom ActiveDocument ist ;-) Trotzdem nochmal vielen vielen Dank für deine Hilfe Gruß Timber ------------------ Wenn alle Stricke reissen, nehm ich ein Drahtseil Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |