Autor
|
Thema: FindObjectByName - was macht das anders ? (2232 mal gelesen)
|
Criollo Mitglied
Beiträge: 42 Registriert: 07.11.2008
|
erstellt am: 16. Nov. 2011 09:05 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe folgendes Problem. Von einem Punkt (mypoint) den ich auf einer Ebene (Point on Plane) erstellt habe, möchte ich den Referenzpunkt (Origin) auslesen, und ggf. umreferenzieren. Suche ich das mypoint-Object über das Geoset, und die darin enthaltenen HybridShapes, finde ich es ohne Probleme. Ich kann auch den Namen des Punktes selbst ausgeben lassen. Aber den Namen des Referenzpunktes kann ich nicht ausgeben lassen. (Fehler dass diese Methode nicht unterstützt wird.) Suche ich das Object-mypoint, nun jedoch mit der Methode "FindObjectByName("P") so kann ich den Referenzpunkt ausgeben lassen. Scheinbar macht es einen Unterschied wie das Objekt angesprochen wird. Leider drückt das "FindObjectByName" aber ziemlich auf die Performance, insbesondere wenn es sich um viele zu suchende Objekte handelt. Anbei noch ein Beispielcode: 1. Ohne "FindObjectByName" --> dann läuft die letzte MessageBox auf einen Fehler Set mypart = PN For each hs in mypart.HybridBodies.Item(1).HybridShapes If hs.name = "P" then Set mypoint = hs Exit For end if Next msgbox mypoint.Name msgbox mypoint.Point.DisplayName End Sub 2. Mit "FindObjectByName" --> dann läuft alles sauber durch Set mypart = PN For each hs in mypart.HybridBodies.Item(1).HybridShapes If hs.name = "P" then Set mypoint = hs Exit For end if Next Set mypoint = mypart.FindObjectByName ("P") msgbox mypoint.Name msgbox mypoint.Point.DisplayName End Sub Vielleicht kann mir hierzu jemand weiterhelfen. Danke und Gruss aus dem Süden Crio Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HoBLila Mitglied Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx
Beiträge: 1118 Registriert: 29.05.2008 DELL PRECISION T3500 Intel(R) Xeon(R) CPU W3540 @ 2.93GHz 12285 MB RAM NVIDIA Quadro FX 1800 Microsoft Windows 7 Enterprise Service Pack 1 CATIA V5 R19 SP09 HF69 VB6.5 CAA RADE CDC
|
erstellt am: 16. Nov. 2011 12:54 <-- editieren / zitieren --> Unities abgeben: Nur für Criollo
Hallo Criollo, bitte Systeminfo ausfüllen, sonst habe ich es wirklich schwer. Dann bitte alle Methodenaufrufe mit vorangestelltem Call versuchen. Dann bitte versuchen alle Objekte so eindeutig wie möglich zu deklatieren. Dann bitte versuchen alle Objekte, bei denen ein Parameter übergeben wird und vor allem auch wenn einer zurückgegeben wird, beim Methodenaufruf, als Object definieren. Dann bitte die Zeile angeben in der der Fehler aufritt, das ist hier viel zu wage beschrieben. ------------------ Mit freundlichen Grüßen, Henry Schneider alias Lila Es gibt einen ewigen Wettkampf zwischen der Natur und den Ingenieuren: Die Ingenieure versuchen, immer idioten-sicherere Systeme zu bauen, die Natur versucht, immer bessere Idioten zu bauen Xing Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Criollo Mitglied
Beiträge: 42 Registriert: 07.11.2008
|
erstellt am: 16. Nov. 2011 13:05 <-- editieren / zitieren --> Unities abgeben:
Hi HoBLila, ich arbeite mit CATIA V5 R19 HF57 - vom Kunden vorgegeben. Es handelt sich um ein Skript, welches ich mit der Funktion "Makro mit Argumenten" ins CATIA Modell einbinden möchte. Methodenaufrufe sind in meinem Beispielcode keine drin - deswegen auch kein "Call". Der Beispielcode tickt nach folgendem Schema: 1. Punktobjekt in GeoSet suchen. 2. Name des Punktes ausgeben 3. Name des Referenzpunktes ausgeben. Die Problematik liegt in der Art des Suchens. Suche ich mit "FindObjectByName", kann ich den Referenzpunkt abgreifen. Suche ich dagegen über die HybridShapes im GeoSet, kann ich vom gefundenen Objekt den Referenzpunkt nicht abgreifen. Viele Grüsse Crio 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: 16. Nov. 2011 13:18 <-- editieren / zitieren --> Unities abgeben: Nur für Criollo
Servus Wenn du unter CATScript/VBA arbeitest reicht es wenn du "mypoint As HybridShapePointOnPlane" setzt. (Um auf "FindObjectByName" verzichten). Ich empfehle dir, Variablen immer zu deklarieren Gruß Bernd PS: Bitte Systeminfo ausfüllen ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Criollo Mitglied
Beiträge: 42 Registriert: 07.11.2008
|
erstellt am: 16. Nov. 2011 13:34 <-- editieren / zitieren --> Unities abgeben:
Hi bgrittmann, das deklarieren der Objektvariablen bringt an dieser Stelle leider keine Besserung. Der Fehler tritt nach wie vor auf. Es handelt sich wie gesagt bei dem Skript um die KWA-Funktionalität "Makro mit Argumenten". Gruss Crio 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: 17. Nov. 2011 07:07 <-- editieren / zitieren --> Unities abgeben: Nur für Criollo
Hallo, bei mir funktionieren beide Varianten des Aufrufs des Punktes (in CATScript und VB6) ohne Fehler. Und darüber hinaus auch ohne jede Art von Deklaration. "FindObjectByName" liefert garantiert kein anders Objekt als der Aufruf über ....Part.HybridBodies.Item(x).HybridShapes.Item(y) Gruß
------------------ tomtom1972 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: 17. Nov. 2011 07:19 <-- editieren / zitieren --> Unities abgeben: Nur für Criollo
Servus Tom Ich bin bis jetzt davon ausgegangen, dass "FindObjectByName" das erste Objekt (egal welcher Typ) mit dem entsprechenden Namen zurückliefert. Also wenn mehrerer Elemente gleich heißen (in unterschiedlichen GeoSets oder auch unterschiedlichen Strukturtiefen), welches Element wird zurückgegeben? Deshalb würde ich eher auf diese Funktion verzichten Oder verstehe ich die Funktion falsch? Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. 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: 18. Nov. 2011 13:04 <-- editieren / zitieren --> Unities abgeben: Nur für Criollo
Hallo, nein, das verstehst du meines Erachtens nach völlig richtig. Mit meiner Antwort wollte ich lediglich zum Ausdruck bringen, das der direkte Aufruft über das ...Item exakt das gleiche Objekt liefert wie "FindObjectByName" (jetzt mal vorausgesetzt, das es Aufgrund eines unikalen Namens identifizierbar ist); ein Objektvergleich in Vb über "Is" liefert also ein true. Ansonsten stimme ich dir zu: ich würde auch nicht mit "FindObjectByName" arbeiten. Genauso wie ich Selektionen meide. Gruß ------------------ tomtom1972 [Diese Nachricht wurde von tomtom1972 am 18. Nov. 2011 editiert.] [Diese Nachricht wurde von tomtom1972 am 18. Nov. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |