Autor
|
Thema: FindObject hängt sich auf (495 mal gelesen)
|
mgheinz1001 Mitglied Dipl.-Ing. (FH)
Beiträge: 109 Registriert: 17.03.2005
|
erstellt am: 23. Mrz. 2009 13:19 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich möchte mit der Methode "Selection.FindObject" die Part-Instanz des Parts "objPart" finden. So gehe ich vor: Code:
call objSelection.clear Call objSelection.Add(objPart) Set obCurProduct = objSelection.FindObject("CATIAProduct") ' HIER DER HÄNGER
Das Problem: Manchmal hängt sich das Makro bei Aufruf der Methode "FindObject" auf. Leider kann ich da überhaupt kein Regelmäßigkeit erkennen. Bei den selben Inputs funktioniert es meist, manchmal aber wie beschrieben leider nicht. Das Part bekomme ich übrigens zuvor über die Selektion einer Kante. Mit dieser suche ich das Part mittels: Code:
... strSelStatus = objSelection.SelectElement2(...) ' Kante vom Anwender selektieren lassen set objPart = objSelection.FindObject("CATIAPart")
Hat jemand eine Idee, woran das liegen könnte oder wonach ich im Voraus die Inputs überprüfen muss, um den Hänger vorzubeugen? (am "Call" liegt es nicht!) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lusilnie Mitglied
Beiträge: 1486 Registriert: 13.07.2005
|
erstellt am: 23. Mrz. 2009 22:18 <-- editieren / zitieren --> Unities abgeben: Nur für mgheinz1001
Hallo mgheinz1001, ohne es zu überprüfen, behaupte ich mal, dass es eine Frage der logischen Struktur ist. Dein Script kann aus meiner Sicht nicht funktionieren, wenn Du mehr als eine Instanz Deines Parts eingesetzt hast! Warum? Du suchst über die Selektion einer Instanz eines Parts das Part selber. Das funktioniert, weil es eindeutig ist. Danach suchst Du über dieses Part das Product. Das ist nicht mehr eindeutig, da hier mehrere Instanzen innerhalb von Product und Sub-Product(s) auf das gleiche Part referenzieren können. Welches Product ist dann das RICHTIGE? Um es korrekt abzufragen, musst Du von der gewählten Instanz das übergeordnete Product wählen. Ich habe es nicht getestet, doch, aus dem Gedächtnis heraus, sollte Deine Zeile dann etwa so lauten: Code: ... strSelStatus = objSelection.SelectElement2(...) ' Kante vom Anwender selektieren lassen set objPartProduct = objSelection.FindObject("CATIAProduct") ...call objSelection.clear Call objSelection.Add(objPartProduct) Set obCurProduct = objSelection.FindObject("CATIAProduct")
mfg, Lusilnie
------------------ Alle Aussagen zu DassaultSystemes-Produkten sind sehr optimistisch, selbst diese!!! frei nach größeren Geistern Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mgheinz1001 Mitglied Dipl.-Ing. (FH)
Beiträge: 109 Registriert: 17.03.2005
|
erstellt am: 24. Mrz. 2009 12:07 <-- editieren / zitieren --> Unities abgeben:
Hi, danke für die Antwort. Aber macht das wirklich Sinn? Ich suche die Part-Instanz (der Knoten direkt überhalb des Partknotens, der automatisch erscheint und nur existiert, wenn ich ein Part in ein Product einfüge) meines Parts. Wenn ich es mache wie von dir vorgeschlagen, dann würde ich ja mit dem ersten Aufruf von "FindObject" die Part-Instanz holen (soweit OK). Jedoch verstehe ich den zweiten Aufruf nicht: Ich will doch von meiner gefundenen Part-Instanz nicht noch mal aufwärts nach einem Product oder einer Instanz suchen. Was verstehe ich falsch? Zitat: Du suchst über die Selektion einer Instanz eines Parts das Part selber
Was genau meinst du hier mit Instanz? Die Part-Instanz oder ein Geometrie-Element des Parts (letzteres ist nämlich der Fall). Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lusilnie Mitglied
Beiträge: 1486 Registriert: 13.07.2005
|
erstellt am: 24. Mrz. 2009 21:07 <-- editieren / zitieren --> Unities abgeben: Nur für mgheinz1001
Hallo mgheinz1001, ich glaube, wir hatten hier ein Verständigungsproblem. Aus Deinen ersten Post ging für mich nicht eindeutig hervor, dass Du die Part-Instanz vom selektierten Element suchst. Nun scheint mir klar, was Du willst. Somit kannst Du Dir den "zweiten Teil" meines Vorschlags schenken, da die ersten Zeilen schon das Gesuchte liefern sollten. Zu Deiner letztem Frage: Bei der Selektion eines Geometrie-Elementes eines Parts innerhalb einer Product-Struktur selektierst Du das Geometrie-Element innerhalb einer bestimmten Instanz. Also hast Du nicht nur das Geometrie-Element, sondern zwangsläufig auch die Instanz selektiert! mfg, Lusilnie
------------------ Alle Aussagen zu DassaultSystemes-Produkten sind sehr optimistisch, selbst diese!!! frei nach größeren Geistern Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mgheinz1001 Mitglied Dipl.-Ing. (FH)
Beiträge: 109 Registriert: 17.03.2005
|
erstellt am: 25. Mrz. 2009 12:40 <-- editieren / zitieren --> Unities abgeben:
Hi, also ich habe jetzt folgende Änderung gemacht: Altes Vorgehen: 1. Lasse Anwender Kante selektieren 2. Suche zugehöriges Part mit Hilfe der Kante -> FindObject("CATIAPart") 3. Suche zugehörige Part-Instanz mit Hilfe des Parts -> FindObject("CATIAProduct") HIER WIE BESCHRIEBEN ÖFTER DER HÄNGER Neues Vorgehen: 1. Lasse Anwender Kante selektieren 2. Suche zugehörige Part-Instanz mit Hilfe der Kante -> FindObject("CATIAProduct") 3. Suche zugehöriges Part mit Hilfe der Part-Instanz -> Product.ReferenceProduct.Parent.Part Bis jetzt konnte ich keinen Absturz mehr feststellen. Ich trau dem Ganzen aber trotzdem nicht so ganz, da ich immer noch "FindObject" benutze. Gibt es vielleicht noch eine andere Möglichkeit an die Part-Instanz zu gelangen ohne "FindObject" zu benutzen und ohne von dem Wurzelproduct auf oberster Baumebene aus zu suchen? Ich habe es auch schon mit "SelectedElement.LeafProduct" versucht (gemäß dem Beispiel in der API-help) - leider ohne Erfolg. Hat vielleicht jemand eine Idee? [Diese Nachricht wurde von mgheinz1001 am 25. Mrz. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|