Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  FindObject hängt sich auf

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:  FindObject hängt sich auf (495 mal gelesen)
mgheinz1001
Mitglied
Dipl.-Ing. (FH)


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

Beiträge: 109
Registriert: 17.03.2005

erstellt am: 23. Mrz. 2009 13: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

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



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

Beiträge: 1486
Registriert: 13.07.2005

erstellt am: 23. Mrz. 2009 22:18    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 mgheinz1001 10 Unities + Antwort hilfreich

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)


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

Beiträge: 109
Registriert: 17.03.2005

erstellt am: 24. Mrz. 2009 12:07    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

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



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

Beiträge: 1486
Registriert: 13.07.2005

erstellt am: 24. Mrz. 2009 21:07    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 mgheinz1001 10 Unities + Antwort hilfreich

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)


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

Beiträge: 109
Registriert: 17.03.2005

erstellt am: 25. Mrz. 2009 12:40    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

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 >>)

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