Autor
|
Thema: GeoSet auflisten (2452 mal gelesen)
|
Joseph.Metzler Mitglied
Beiträge: 53 Registriert: 16.03.2004 V5-6R2014
|
erstellt am: 25. Aug. 2015 14:26 <-- editieren / zitieren --> Unities abgeben:
Hallo, ein Frage zum Inhalt eines GeoSets. Ich kann zwar über HybridBody.HybridBodies und HybridBody.HybridShape feststellen was in der ersten Ebene eines GeoSets vorhanden ist, aber wie kann ich die Reihenfolge der Elemente, so wie sie im CATIA-Baum dargestellt wird, feststellen ? Vielen Dank schon mal Joseph Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joehz Moderator Freiberuflicher Konstrukteur
Beiträge: 1057 Registriert: 25.11.2006 Win7 Pro 64 + Ubuntu + Irix6.5.20 Dell Precision M6600 i7-2960XM 2.7GHz 16GB NVidia Quadro M5010 Catia V5R19 VB6Pro.SP6/VBA 6.5.1053
|
erstellt am: 25. Aug. 2015 14:51 <-- editieren / zitieren --> Unities abgeben: Nur für Joseph.Metzler
Hallo Namensvetter, wie fit bist Du mit der Api? Denkbare Vorgehensweise in PseudoCode: - Set aktivieren - StartCommand 'Reorder Children' - über Api Kinder aus Liste auslesen - bei verschachtelten Sets rekursiv Tschau, Joe ------------------ The problem with the world is that the intelligent people are full of doubts, while the stupid ones are full of confidence. ~Charles Bukowski Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Joseph.Metzler Mitglied
Beiträge: 53 Registriert: 16.03.2004 V5-6R2014
|
erstellt am: 25. Aug. 2015 15:20 <-- editieren / zitieren --> Unities abgeben:
Hallo Joe, vielen Dank für die schnelle Antwort. OK, so richtig Ahnung was die API anbelangt habe ich nicht. Ehrlicherweise wirft dein Pseudocode bei mir mehr Fragen auf als das er klärt. Soweit ich aber verstanden habe, bekomme ich die Liste der Kinder dadurch das ich das Fenster von "ReorderChildren" auslese, es gibt also keine Methode / Function welche auf HybridBody anzuwenden ist, um die Liste zu erhalten. Könntest Du mit zu "StartCommand ReoderChildren" und "über API Kinder aus Liste auslesen" noch ein bisschen auf die Sprünge helfen. Kann ich dazu in der Automation.chm oder sonst wo was finden ? Thx Joseph 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: 25. Aug. 2015 15:39 <-- editieren / zitieren --> Unities abgeben: Nur für Joseph.Metzler
Servus Leider geht dass was du vor hast nicht über die Catia-API (V5Autiomation.chm), sonder du musst auf die Windows-API ausweichen. Das ist ein komplexer (besonders wenn man damit noch nie gearbeitet hat). Gruß Bernd PS: Ein Beispiel zum Arbeitet mit der Windows-API findest du auf catia.cad.de (Joe kann dir bestimmt genaueres dazu sagen) ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joehz Moderator Freiberuflicher Konstrukteur
Beiträge: 1057 Registriert: 25.11.2006 Win7 Pro 64 + Ubuntu + Irix6.5.20 Dell Precision M6600 i7-2960XM 2.7GHz 16GB NVidia Quadro M5010 Catia V5R19 VB6Pro.SP6/VBA 6.5.1053
|
erstellt am: 25. Aug. 2015 19:47 <-- editieren / zitieren --> Unities abgeben: Nur für Joseph.Metzler
|
joehz Moderator Freiberuflicher Konstrukteur
Beiträge: 1057 Registriert: 25.11.2006 Win7 Pro 64 + Ubuntu + Irix6.5.20 Dell Precision M6600 i7-2960XM 2.7GHz 16GB NVidia Quadro M5010 Catia V5R19 VB6Pro.SP6/VBA 6.5.1053
|
erstellt am: 25. Aug. 2015 20:09 <-- editieren / zitieren --> Unities abgeben: Nur für Joseph.Metzler
|
Joseph.Metzler Mitglied
Beiträge: 53 Registriert: 16.03.2004 V5-6R2014
|
erstellt am: 26. Aug. 2015 07:34 <-- editieren / zitieren --> Unities abgeben:
Hallo Joe, Bernd, erst mal vielen Dank für die Links und Hinweise. Hilft mir sicher weiter, da hab ich was zum rumprobieren. Rekursion etc. bekomme ich selber gebacken. Ansonsten weiß ich jetzt ja wenn ich fragen kann Nochmals vielen Dank Joseph
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joehz Moderator Freiberuflicher Konstrukteur
Beiträge: 1057 Registriert: 25.11.2006 Win7 Pro 64 + Ubuntu + Irix6.5.20 Dell Precision M6600 i7-2960XM 2.7GHz 16GB NVidia Quadro M5010 Catia V5R19 VB6Pro.SP6/VBA 6.5.1053
|
erstellt am: 26. Aug. 2015 15:18 <-- editieren / zitieren --> Unities abgeben: Nur für Joseph.Metzler
Hallo Leut', offenbar war ich gestern doch sehr in Eile. Ich hab noch ein paar Leichen aus dem Quell-Code entfernt und die Kommentare vervollständigt. Ausserdem hab ich den Ausschnitt von Spy angehängt. Enjoy, Joe ------------------ The problem with the world is that the intelligent people are full of doubts, while the stupid ones are full of confidence. ~Charles Bukowski Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Joseph.Metzler Mitglied
Beiträge: 53 Registriert: 16.03.2004 V5-6R2014
|
erstellt am: 31. Aug. 2015 16:16 <-- editieren / zitieren --> Unities abgeben:
Hallo, Dank der Beispielcodes, bekomme ich jetzt eine Namensliste der Elemente eines GeoSets. Über HybridBody.Hybridbodies, bzw. HybridBody.HybridShapes, bekomme ich auch eine Objektliste des GeoSets. Mittels GetItem("ModelElement") kriege ich auch die eindeutigen Namen der Objekte. In meinem Beispiel-GeoSet A (siehe Anhang), befinden sich 4 Elemente, jeweils mit dem Namen B. Was ich mit den bisher gesammelten Informationen nicht hinbekomme, ist eine eindeutige Zuordnung. z.B. erstes Element aus der Namensliste "B" ist ein HybridBody mit ModelElement-Name "Open_Body.12", oder drittes Element aus der Namensliste "B" ist ein HybridShape mit ModelElement-Name "Point.3" Sehe ich gerade den Wald vor lauter Bäumen nicht ? Gruß Joseph BTW: Das das Beispiel wenig bis gar nichts mit der Praxis zu tun ist mir schon klar. 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: 31. Aug. 2015 17:29 <-- editieren / zitieren --> Unities abgeben: Nur für Joseph.Metzler
Servus Ich hab da noch eine Idee. Du könntest das GeoSet selektieren und darin alle Elemente suchen. Zur Unterscheidung ob Elemente direkt zum GeoSet gehören (und nicht tiefer liegen) könntest du die Strings aus "GetNameToUseInRelation" auswerten. (Auswertung des Pfads fehlt im Code) Code: Sub CATMain()Dim partDocument1 As Document Set partDocument1 = CATIA.ActiveDocument Dim selection1 As Selection Set selection1 = partDocument1.Selection selection1.Search "Type=*,sel" dim part1 as Part Set part1 = partDocument1.Part dim parameters1 as parameters Set parameters1 = part1.Parameters dim Element as variant for i = 1 to selection1.count set Element = selection1.item(i).value msgbox Element.name & " : " & TypeName(Element) & " : " & Parameters1.GetNameToUseInRelation(Element) next End Sub
Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joehz Moderator Freiberuflicher Konstrukteur
Beiträge: 1057 Registriert: 25.11.2006 Win7 Pro 64 + Ubuntu + Irix6.5.20 Dell Precision M6600 i7-2960XM 2.7GHz 16GB NVidia Quadro M5010 Catia V5R19 VB6Pro.SP6/VBA 6.5.1053
|
erstellt am: 31. Aug. 2015 19:43 <-- editieren / zitieren --> Unities abgeben: Nur für Joseph.Metzler
Hallo Joseph, wer allen GeoSets den gleichen Namen gibt, hat auch nicht verdient, dass er sie anschliessend unterscheiden kann. :-)
Zitat:
Das das Beispiel wenig bis gar nichts mit der Praxis zu tun ist mir schon klar.
Das ist unsauber formuliert. Richtig: Das Thema hat nix mit der Praxis zu tun. Du schuldest uns noch eine Erklärung, zu was das ganze gut sein soll. Ausserdem: - die Elemente die Du per WinApi ausliest kommen in der richtigen Reihenfolge - wenn Du jetzt ein UDT anlegst, etwa:
Code:
Type HYBRIDBODY_TYPE iPos as integer 'laufende Nummer strName as string 'Name iLevel as integer 'Level strPath as string 'Pfad, zusammengesetzt aus den Level-Pfaden strParent as string 'Elternelement bHasChildren as boolean 'Flag, ob Kinderelemente existieren vType as Variant 'Elementtyp ... '... End Type
kannst Du beim auslesen die jeweiligen Felder ausfüllen, ähnlich wie bei einem TreeView-Control. Oder Du baust die Baumstruktur gleich mit einer Treeview nach. Nur so als Idee. Tschau, Joe ------------------ The problem with the world is that the intelligent people are full of doubts, while the stupid ones are full of confidence. ~Charles Bukowski Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Joseph.Metzler Mitglied
Beiträge: 53 Registriert: 16.03.2004 V5-6R2014
|
erstellt am: 01. Sep. 2015 09:11 <-- editieren / zitieren --> Unities abgeben:
Hallo, stimmt wenn die Liste per WinAPI ausgelesen wird, kommen die Namen in der richtigen Reihenfolge. So weit ich verstanden habe aber nur die Namen des Elements, nicht die Elemente selber. Daher weiß ich momentan nicht wie ich, bei einem nicht eindeutigen Namen, das richtige Element in einem einstufigen GeoSet identifizieren kann. Ich wollte eigentlich in der Lage sein ein GeoSet umzusortieren, u.a. abhängig vom Elementtyp und Position innerhalb des GeoSets Mein Beispiel-GeoSet ist sicher in der Praxis sträflicher Unsinn, aber shit happens. Gruß Joseph Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joehz Moderator Freiberuflicher Konstrukteur
Beiträge: 1057 Registriert: 25.11.2006 Win7 Pro 64 + Ubuntu + Irix6.5.20 Dell Precision M6600 i7-2960XM 2.7GHz 16GB NVidia Quadro M5010 Catia V5R19 VB6Pro.SP6/VBA 6.5.1053
|
erstellt am: 01. Sep. 2015 13:42 <-- editieren / zitieren --> Unities abgeben: Nur für Joseph.Metzler
Hallo Joseph, Zitat: Ich wollte eigentlich in der Lage sein ein GeoSet umzusortieren, u.a. abhängig vom Elementtyp und Position innerhalb des GeoSets
Warum sollte das nicht gehen? Lass eine Suche mit dem Namen laufen. Anschliessend frägst für jedes gefundene Element den Typ ab. Wenn der passt, sortieren. Um Deinem nächsten Einwand vorzubeugen: Falls innerhalb desselben Sets zwei Elemente gleichen Typs denselben Namen besitzen, so war das dem Anwender offenbar egal. Dann kann's Dir auch egal sein. Zitat: shit happens
No, it doesn't. Das System - die Catia - vergibt Namen für Drahtgeometrie innerhalb eines Sets nicht doppelt. Das macht der vor dem Rechner. Dazu braucht's eine hoffentlich intelligente absichtliche Handlung des Anwenders. Bei den Sets kann's zu vom System vergebenen doppelten Namen kommen. Dazu siehe oben. Ich kann mir zwei Fälle vorstellen bei denen ich ein Set nachträglich sortieren würde. - Skelett-Modell, Set=Planes: Ich hab die Angewohnheit Planes nach ihrem Wert umzubenennen. Nachdem die Ebenen gewöhlich nicht in alphabetischer Reihenfolge auftreten, muss ich nachträglich sortieren. - Sets innerhalb von Sets: Bei grösseren Flächenbauteilen mit vielen Sets. Aber gewöhnlich ist die entstehungsgeschichtliche Reihenfolge für's Verständnis besser. Die Reihenfolge der Drahtelemente innerhalb der Sets ist gewöhnlich egal. Das letzte Element (oft: Join=Ergebnis des Sets) ist gewöhnlich das mit dem weiter gearbeitet wird. Das benenn' ich dann auch um. Deshalb nochmal die Frage: Wozu das ganze? Tschau, Joe ------------------ The problem with the world is that the intelligent people are full of doubts, while the stupid ones are full of confidence. ~Charles Bukowski Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |