Autor
|
Thema: Deaktivierte Elemente rekursiv auswählen (Selection) (2707 mal gelesen)
|
8user8 Mitglied
Beiträge: 36 Registriert: 30.07.2010 Catia V5R19 x64 Visual C# 2010
|
erstellt am: 15. Sep. 2010 18:14 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich bins mal wieder mit meinem nächsten Problem. Leider bin ich mit hilfe der Suche nicht so richtig fündig geworden und das ewige Try and Error nervt Also: ich möchte die Elemente meines MainBody nach deaktivierten Objekten rekursiv durchsuchen(da sie teilweise verschachtelt vorliegen) und jeweils die Kinderobjekte mit in die Selection aufnehmen. hier mal der code: Sub CATmain() Set list = CATIA.ActiveDocument.Selection list.Clear Set CATPart = CATIA.ActiveDocument.Part Set koerperset = CATPart.Bodies For i = 1 To koerperset.Count On Error Resume Next Set Feat = CATPart.MainBody.Shapes.Item(i) rekurSel Feat, list If CATPart.IsInactive(Feat) Then list.Add Feat End If Next i End Sub ------------------- Sub rekurSel(Feat, list) For k = 1 To Feat.Shape.Count Set child = Feat.Body.Item(k) list.Add child rekurSel child, list Next End Sub Bisher komm ich nur an die Elemente auf erster Ebene der Baumstruktur. das Makro springt zwar in die sub, aber durchläuft die Schleife nicht. Ich bin mir aber auch unschlüssig ob ich sie richtig definiert hab. wäre schön wenn mir dort weiter geholfen werden könnte Und ich hab keine Ahnung wie ich die Kinder-Elemente der inaktiven Objekte selektieren könnte, die sie ja unterschiedlen Typs sein können. besten Dank fürs weiter helfen und nen schönen Feierabend an die, die es noch lesen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
8user8 Mitglied
Beiträge: 36 Registriert: 30.07.2010 Catia V5R19 x64 Visual C# 2010
|
erstellt am: 15. Sep. 2010 19:17 <-- editieren / zitieren --> Unities abgeben:
zu meinem letzteren Problem: ist eine Selection anhand des Pfades möglich? das hier klappt nicht, ich kann mir nicht erklären, warum die falschen Elemente ausgewählt werden: For i = 1 To koerperset.Count On Error Resume Next Set Feat = CATPart.MainBody.Shapes.Item(i) If CATPart.IsInactive(Feat) Then list.Add Feat For k = 1 To CATPart.MainBody.Shapes.Item(Feat) Set child = CATPart.Bodies.Item(k) list.Add child Next k End If Next i eigentlich sollten mir damit je die Bodies unter den Shapes selektiert werden, dachte ich. Wenn jemand weiter weiß, ich lasse mir gerne helfen besten dank Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 15. Sep. 2010 20:04 <-- editieren / zitieren --> Unities abgeben: Nur für 8user8
|
8user8 Mitglied
Beiträge: 36 Registriert: 30.07.2010 Catia V5R19 x64 Visual C# 2010
|
erstellt am: 15. Sep. 2010 23:50 <-- editieren / zitieren --> Unities abgeben:
Servus, ein screenshot wird schwierig. Es handelt sich um boolsche Körper (Add/Remove) und darunter jeweils der Body. Die gepostete Schleife liefert mir aber nicht die richtigen bodys. oder meinst du nen Screenshot wg der rekursiven Suche? Teilweise befinden sich unter den Bodys weitere boolsche Körper. Diese und deren Unterkörper/Childs will ich dazu noch selektieren. Darauhin sollen alle gelöscht werden, aber das stellt das geringste Problem dar. Grüße Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
8user8 Mitglied
Beiträge: 36 Registriert: 30.07.2010 Catia V5R19 x64 Visual C# 2010
|
erstellt am: 16. Sep. 2010 14:28 <-- editieren / zitieren --> Unities abgeben:
|
tberger Mitglied Application Manager CATIA V5 / V6
Beiträge: 1385 Registriert: 13.01.2007 WIN 7 64bit V5R21SP3HF49 3DX/V6 R2016x
|
erstellt am: 16. Sep. 2010 14:48 <-- editieren / zitieren --> Unities abgeben: Nur für 8user8
Du könntest (nachdem du den PartBody durchgeforstet hast) eine Schleife über alle Bodies ziehen und dort abfragen, ob der jeweilige Body Bestandteil einer Boole-Operation ist (MyBody.InBooleanOperation). Wenn ja, kannst du deine Suche nach deaktiven Features darin auch laufen lassen und deine Selektion gefundener Features damit erweitern. EDIT: Fehlerteufel exorziert ------------------ Grüße aus dem Thurgau Thomas +++++++++++++++++++++++++++++++++ CATIA - eine Laune der Natur ... www.tobeplus.de tberger@tobeplus.de [Diese Nachricht wurde von tberger am 16. Sep. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
8user8 Mitglied
Beiträge: 36 Registriert: 30.07.2010 Catia V5R19 x64 Visual C# 2010
|
erstellt am: 16. Sep. 2010 15:41 <-- editieren / zitieren --> Unities abgeben:
Danke fürs Helfen. Bin grad auf die Suchanfrage "Partdesign->Partdesign Features->Activity" gestoßen. Die Suche über Selection liefert mir was ich brauche, ohne rekusiv alle Elemente durchforsten zu müssen. Deinen Tipp brauch ich trotzdem, da ich die zugehörigen Bodys auch selektieren muss. Damach ich mich mal ran... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
8user8 Mitglied
Beiträge: 36 Registriert: 30.07.2010 Catia V5R19 x64 Visual C# 2010
|
erstellt am: 16. Sep. 2010 18:19 <-- editieren / zitieren --> Unities abgeben:
Gibts eine Möglichkeit wahllos alle untergeordneten Element zu selektieren? Aber die müsste dann ja auch rekursiv laufen, hab ich festgestellt. Aber bei mir klappts nichtmal das erste Untergeordnete auszuwählen.... schönen Abend wünsch ich mal. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tberger Mitglied Application Manager CATIA V5 / V6
Beiträge: 1385 Registriert: 13.01.2007 WIN 7 64bit V5R21SP3HF49 3DX/V6 R2016x
|
erstellt am: 16. Sep. 2010 18:23 <-- editieren / zitieren --> Unities abgeben: Nur für 8user8
Du kannst in einer Suche auch angeben, wo gesucht werden soll (z.B. in einer Selektion nochmals suchen). Dir dann den Code rausschreiben wie vorhin und bist wieder ein Stück weiter Beispiel:
Set partDocument1 = CATIA.ActiveDocument
Set selection1 = partDocument1.Selection selection1.Search "CATPrtSearch.MechanicalFeature.Activity=TRUE,sel" ------------------ Grüße aus dem Thurgau Thomas +++++++++++++++++++++++++++++++++ CATIA - eine Laune der Natur ... www.tobeplus.de tberger@tobeplus.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
8user8 Mitglied
Beiträge: 36 Registriert: 30.07.2010 Catia V5R19 x64 Visual C# 2010
|
erstellt am: 17. Sep. 2010 08:06 <-- editieren / zitieren --> Unities abgeben:
Guten morgen, dieses Selection-Objekt scheint verdammt mächtig zu sein, nur schade, dass es ein wenig träge ist. danke für den Tipp mit der weiteren Suche. hab jetz einfach alle "Part Design" Elemente aus der Vorherigen Suche verwendet, damit bekommt man alle Untergeordneten Objekte. Besten Dank und nen schönen Tag wünsch ich PS: wer braucht schon noch rekursive Schleifen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |