| |
| CATIA V5 Grundkurs | Einsteiger - 5 Std. 15 Min |
| |
| KISTERS 3DViewStation: Geniale 3D-Visualisierung für intuitiven HMI Einsatz, eine Pressemitteilung
|
Autor
|
Thema: Componente oder CATProduct? (3667 mal gelesen)
|
tomtom1972 Mitglied dipl ing maschinenbau
Beiträge: 608 Registriert: 22.03.2005 NVidia Quadro K4000 Intel Xeon E5-1620, 64GB RAM Windows10 64bit R30 <= CATIA V5 > =R19
|
erstellt am: 30. Okt. 2012 08:39 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich unterscheide Components und CATProducts in einer verschachtelten Struktur normalerweise über einen Vergleich des Parents und des Parent.Parents, also so: If oItem.ReferenceProduct.Parent Is oItem.Parent.Parent.ReferenceProduct.Parent Then.... (-> dann Comp oder cgr.) Funktioniert soweit seit langem hervorragend. Jetzt habe ich eine Strukutr vorliegen, in der in Componenten andere Componeneten bzw. CATProducts verbaut sind, und da funktioniert das nicht mehr. Hat jemand eine andere Idee bzw. das Problem auch schon mal gehabt? Gruß TomTom
------------------ tomtom1972 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 30. Okt. 2012 21:24 <-- editieren / zitieren --> Unities abgeben: Nur für tomtom1972
Servus TomTom Kannst du die konkrete Struktur näher beschreiben (Screenshot, Upload, ..)? Ich konnte das Problem nicht nachstellen, vermutlich ist meine Teststruktur nicht komplex genug. 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 |
tomtom1972 Mitglied dipl ing maschinenbau
Beiträge: 608 Registriert: 22.03.2005 NVidia Quadro K4000 Intel Xeon E5-1620, 64GB RAM Windows10 64bit R30 <= CATIA V5 > =R19
|
erstellt am: 01. Nov. 2012 13:36 <-- editieren / zitieren --> Unities abgeben:
Hi Bernd, danke für deine Antwort / Nachfrage. CATProduct L-------Componente L-------A.Componente L-------B.CATProduct L-------sonstwas L-------sonstwas
Es geht darum beim (rekursiven) durchlaufen der Strutur zu unterscheiden, ob Knoten A oder Knoten B eine Component oder ein CATProduct ist, aber es geht mir um eine generelle Methode: d.h. die Struktur ist ein Bsp und kann beliebig anders aussehen, also tiefer verschachtelt oder sonst was. Keiner eine Idee? Gruß ------------------ tomtom1972
P.S.: die Systeminfo hilft nix, weil ständig andere Releases/SPs/HFs und Rechner. Ich könnte nur reinschreiben CATIA V5 aber das ergibt sich von selbst, sonst wäre ich nicht in dem Forum unterwegs.
[Diese Nachricht wurde von tomtom1972 am 01. Nov. 2012 editiert.]
[Diese Nachricht wurde von tomtom1972 am 01. Nov. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DasDon Mitglied Konstruktuer
Beiträge: 169 Registriert: 25.07.2011 R18 SP2. WIN
|
erstellt am: 01. Nov. 2012 21:18 <-- editieren / zitieren --> Unities abgeben: Nur für tomtom1972
moin moin, habe keine ahnung ob es funktioniert aber probiere .GetMasterShapeRepresentationPathName auf das object. Es könnte sein das Komponenten hier einen Fehler verursachen. Dann könntest du mit ErrorHandling bestimmen ob component oder Product. Wie gesagt, ich habe es nicht probiert, aber es könnte funktionieren. Gruß, DasDon Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tomtom1972 Mitglied dipl ing maschinenbau
Beiträge: 608 Registriert: 22.03.2005 NVidia Quadro K4000 Intel Xeon E5-1620, 64GB RAM Windows10 64bit R30 <= CATIA V5 > =R19
|
erstellt am: 02. Nov. 2012 11:04 <-- editieren / zitieren --> Unities abgeben:
Hallo DasDon, danke für deine Antwort. Eine MasterShapRepresentation haben allerdings nur Dateien, die Geometrie enthalten, also cgrs, Parts .... . Im Prinzip alle die Dateien, die im CacheModus als temporäre .cgrs geladen werden. CATProducts und Components nicht. Hilft also nix. Gruß TomTom ------------------ tomtom1972 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Rainer Schulze Ehrenmitglied V.I.P. h.c. Dipl.-Ing. im Ruhestand
Beiträge: 4419 Registriert: 24.09.2012
|
erstellt am: 02. Nov. 2012 11:50 <-- editieren / zitieren --> Unities abgeben: Nur für tomtom1972
>>ist ein Bsp und kann beliebig anders aussehen Tomtom, vielleicht bin ich ja mit dem Fachjargon von Catia nicht ausreichend vertraut, aber ich habe "component" bislang immer als Einzelteil (=CATPart) verstanden. Damit wäre Dein Beispiel unzulässig - ein Einzelteil darf keine untergeordnete Struktur haben. Sehe ich das falsch? ------------------ Rainer Schulze Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 02. Nov. 2012 12:09 <-- editieren / zitieren --> Unities abgeben: Nur für tomtom1972
Servus Rainer Eine "componente" ist eine (Bau)Gruppe ohne extra Datei. Erzeugt wird diese über "Einfügen -> Neue Komponente" Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Rainer Schulze Ehrenmitglied V.I.P. h.c. Dipl.-Ing. im Ruhestand
Beiträge: 4419 Registriert: 24.09.2012
|
erstellt am: 02. Nov. 2012 12:27 <-- editieren / zitieren --> Unities abgeben: Nur für tomtom1972
|
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 02. Nov. 2012 12:57 <-- editieren / zitieren --> Unities abgeben: Nur für tomtom1972
Servus Anbei ein (zusammengebastelter) Code der auch in verschachtelten Strukturen funktioniert. Bei mir funktioniert der Vergleich der Objekt über "Is" nicht deshalb vergleiche ich den Fullname der CATProducts: Code: Sub Start()Dim RootProduct As Product Set RootProduct = CATIA.ActiveDocument.Product If RootProduct.Products.Count <> 0 Then Call Rekursiv(RootProduct) End If End Sub '***** Sub Rekursiv(RootProduct As Product) Dim oProduct As Product For Each oProduct In RootProduct.Products If oProduct.ReferenceProduct.Parent.FullName = oProduct.Parent.Parent.ReferenceProduct.Parent.FullName Then MsgBox oProduct.Name & " ist eine Componente" Else MsgBox oProduct.Name & " ist ein CATProduct" End If If oProduct.Products.Count <> 0 Then Call Rekursiv(oProduct) End If Next End Sub
Funktioniert es damit bei dir? Wie sieht dein Code aus? 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: 608 Registriert: 22.03.2005 NVidia Quadro K4000 Intel Xeon E5-1620, 64GB RAM Windows10 64bit R30 <= CATIA V5 > =R19
|
erstellt am: 02. Nov. 2012 13:27 <-- editieren / zitieren --> Unities abgeben:
|
tomtom1972 Mitglied dipl ing maschinenbau
Beiträge: 608 Registriert: 22.03.2005 NVidia Quadro K4000 Intel Xeon E5-1620, 64GB RAM Windows10 64bit R30 <= CATIA V5 > =R19
|
erstellt am: 05. Nov. 2012 06:32 <-- editieren / zitieren --> Unities abgeben:
Hallo Bernd, das ist ja der Code, den ich ganz oben in aufgeführt habe; nur ich mache den Vergleich eben über IS. Das ganze funktioniert aber wie gesagt nicht, wenn sich das Product bzw. die Componente selbst in einer Componente befinden. Das war ja die ursprüngliche Frage meinerseits ?! Gruß ------------------ tomtom1972 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 05. Nov. 2012 07:19 <-- editieren / zitieren --> Unities abgeben: Nur für tomtom1972
Servus Auf meinen Testrechner (R19) funktioniert der Code auch bei verschachtelten Strukturen. Ich hab es allerdings nur in VBA getestet. 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: 608 Registriert: 22.03.2005 NVidia Quadro K4000 Intel Xeon E5-1620, 64GB RAM Windows10 64bit R30 <= CATIA V5 > =R19
|
erstellt am: 05. Nov. 2012 09:56 <-- editieren / zitieren --> Unities abgeben:
|
DasDon Mitglied Konstruktuer
Beiträge: 169 Registriert: 25.07.2011 R18 SP2. WIN
|
erstellt am: 05. Nov. 2012 11:27 <-- editieren / zitieren --> Unities abgeben: Nur für tomtom1972
moin moin, evtl folgendes ausprobieren. Baugruppe in Desing Mode setzen. Dann für jedes Product der Baugruppe schauen ob das Dokument in CATIA offen ist. Bei einen component müsste kein Dokument geladen werden. Vielleicht geht das ja...
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tomtom1972 Mitglied dipl ing maschinenbau
Beiträge: 608 Registriert: 22.03.2005 NVidia Quadro K4000 Intel Xeon E5-1620, 64GB RAM Windows10 64bit R30 <= CATIA V5 > =R19
|
erstellt am: 05. Nov. 2012 13:01 <-- editieren / zitieren --> Unities abgeben:
|
DasDon Mitglied Konstruktuer
Beiträge: 169 Registriert: 25.07.2011 R18 SP2. WIN
|
erstellt am: 05. Nov. 2012 13:13 <-- editieren / zitieren --> Unities abgeben: Nur für tomtom1972
ja, das stimmt. z.B Anzahl der Products = 200 Anzahl der Components = 50 Anzahl der Items = Products + Components = 250 Anzahl der Documents = Products Items * Documents = 250 * 200 = 50.000 vergleiche. Das beste wäre einen Dictionary einzubauen der alle abgefragten Items speichert und diese dann mit if Exists (oder wie auch immer es heißt) zu suchen um dopellete, dreifache etc vergleiche zu unterbinden. Das andere wäre bei ItemXYZ = Document(n) die Schleife (is ItemXYZ in OPEN DOCUEMENTS) zu verlassen. Gruß, DasDon Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Randle Mitglied CAD/PLM Consultant
Beiträge: 743 Registriert: 12.04.2003 Win10 x64 CATIA V5 R18, R19, R21, R27-29
|
erstellt am: 06. Nov. 2012 09:19 <-- editieren / zitieren --> Unities abgeben: Nur für tomtom1972
Hallo, mal eine Frage wie sind eure Daten denn abgelegt? Ich bin gerade dabei ein Stücklistenmakro zu schreiben, bzw. bin damit gerade fertig. Von daher kenne ich diese Problematik. Hier stelle ich an die Anwender ganz klare Vorgaben. Alle Dokumente müssen in einem Ordner liegen und Dateiname entspricht immer der Teilenummer. Ich frage dann einfach ab, ob das Dokument unter dem Pfad des ActiveDocuments (also des Top Level Produktes) existiert. Wenn nicht behandel ich das als Komponente. Ich weiss das man diese Vorgabe nicht bei allen Kunden durchsetzen kann, aber vielleicht geht es ja bei deinem Kunden. Kein Paradies ohne Schlange. Gruß Marcus ------------------ MfG Randle ! It's not a bug, it's a feature ! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tomtom1972 Mitglied dipl ing maschinenbau
Beiträge: 608 Registriert: 22.03.2005 NVidia Quadro K4000 Intel Xeon E5-1620, 64GB RAM Windows10 64bit R30 <= CATIA V5 > =R19
|
erstellt am: 07. Nov. 2012 07:06 <-- editieren / zitieren --> Unities abgeben:
Hallo, das in etwa ist mein Problem. Nun umgekehrt. Vorgabe aus der Richtlinie ist: FileName = PartNumber = InstanceName + Punkt + Index, Nomenklatur und Ordnerstruktur (verschachtelt) sind ganz klar vorgegeben. Aber Fehler machen wir alle: dafür dann das Script. Das Script prüft die komplette Struktur und korrigiert automatisch, maßgebend ist dabei der PartNumber, d.h. FileName (und Speicherort) + InstanceName werden automatisch angepasst, weil sie einer bestimmten Logig unterliegen (in dem Fall der aus den Richtlinien für die BemiKonstrution einiger OEMs). Eventuelle Fehler in der Nomenklatur werden beseitigt (Leerzeichen, verbotene Sonderzeichen ...). Voraussetzung ist immer, das der PartNumber mehr oder weniger korrekt ist, was soweit auch seit langem gut funktioniert. An der Art und Weise an sich soll auch gar nichts geändert werden, da wir das Script auch zum Weiterkopieren und Umbenennen von kompletten Strukturen mit mehreren hundert Teilen verwenden: und spätestens dann wird mein Problem wieder auftreten, weil ich PartNumber, FileName und Speicherort + InstanceName aller Knoten der Struktur verändere. Und bei Parts / Products / WasAuchImmer, die in Componeten verbaut sind, deren Parents wiederum Componenten sind habe ich einen Fehler, dessen ich mir nie bewusst war, weil ich das Szenario vorher nie hatte. Das Problem ist auch in soweit nur theoretischer Natur, als das ich vorgeben kann, das keine Componenten in Componeten verbaut sein dürfen; da mir das selbst aber keine Ruhe lässt, suche ich eigentlich aber doch eher nach einer funktionierenden Lösung. Gruß TomTom ------------------ tomtom1972
[Diese Nachricht wurde von tomtom1972 am 07. Nov. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tomtom1972 Mitglied dipl ing maschinenbau
Beiträge: 608 Registriert: 22.03.2005 NVidia Quadro K4000 Intel Xeon E5-1620, 64GB RAM Windows10 64bit R30 <= CATIA V5 > =R19
|
erstellt am: 07. Nov. 2012 11:00 <-- editieren / zitieren --> Unities abgeben:
Hallo Bernd, natürlich funktioniert dein Code auch bei verschachtelten Strukturen; darum gehts mir ja auch überhaupt nicht. Vieleicht habe ich mich mit der Schilderung meines Problems zu kurz gefasst, als das es nachvollziehbare wäre. Deshalb nun die ausführliche Variante. Also ganz weit ausgeholt. Es geht um das aufbröseln einer Struktur beim rekursiven Durchlauf vom Root aus. Die Frage ist: was ist was und wodrin ist es verbaut, im speziellen was ist eine Componente und was ist ein CATProduct (und befindet es sich in einer Comp oder in einem Product). Das ist z.B. relevant, wenn ich den Instanz-Namen eines Knotens ändere: die Methode ist anders, wenn sich der Knoten in einer Componente oder in einem Product befindet. Dein Ansatz bzw. mein alter (von ganz oben, der ja der gleiche ist) basiert also auf dem Phänomen, das eine Componente bei der Abfrage einer Propertie des ReferenceProduct.Parent nicht den Wert des Componenten-Nodes sondern den des übergeordneten Knotens zurück gibt. (Das ist auch irgendwie logisch, da ich über das ReferenceProduct.Parent aus einer Struktur mit Instanzen in das zugehörige Dokument wechsle - und es zu einer Componente eben kein Dokument gibt.) Vergleicht man nun die zwei Eigenschaften (du den Fullname bzw. ich das Object selbst mit IS) so folgert man salopp ausgedrückt: Eigenschaft vom ReferenceProduct.Parent vom Node und Eigenschaft vom ReferenceProduct.Parent vom Parent von Node sind gleich, so ist es eine Componente. Soweit so gut. Ein Bsp mit dem ich keine Probleme habe: Product1 L Product2 L Componente3 L WasAuchimmer4 L WasAuchimmer5 Ich will wissen: Was ist der Node Componente3 (mal davon ausgehend, das ich noch nicht weiss, das es eine Componente ist). Frag ich nun den Fullname vom ReferenceProduct.Parent von Comp3 ab, so bekomme ich den vom Product2 zurück. Frag ich den Fullname vom Parent vom ReferenceProduct.Parent von Comp3 ab (also vom Prod2), so bekomme ich ebenfalls den vom Product2 zurück. Vergleiche ich die zwei, so sind sie gleich. Aus obenstehendem Phänomen resultiert nun: der Knoten Comp3 ist eine in Product2 verbaute Componente. Das Problem um das es mir hier geht tritt nun auf, wenn der Parent-Knoten von der Componente auch eine Componente ist. Also nochmal ein Bsp.: Product1 L Componente2 L Componente3 L WasAuchimmer4 L WasAuchimmer5 Ich will immer noch wissen: Was ist Componente3. Frag ich nun den Fullname vom ReferenceProduct.Parent von Comp3 ab, so bekomme ich den vom ROOT zurück (also von Prod1). (Unser o.s. Phänomen wird sozusagen über die Componenten nach oben hin weiter durchgegeben.) Frag ich den Fullname vom Parent vom ReferenceProduct.Parent von Comp3 ab (also Comp2), so bekomme ich ebenfalls den vom ROOT zurück. Vergleiche ich die zwei, so sind sie gleich, heißt also: Comp3 ist eine Komponente in Product1. Und das stimmt nicht. Ausgehend von dieser falschen Annahme treten nun Folgefehler auf. Ich hoffe mein Problem ist nun klarer, auch wenns viel zu lesen ist. Eigentlich kann das auch gar keiner richtig nachvollziehen, wenn er es nicht schon mal selber hatte: ich habe eine ganze Weile gebraucht um die Ursache meiner Folgefehler (in diesem Fall z.B. falsch umbenannte Instanz-Namen) auf das hier beschriebene Problem einzugrenzen. Gruß TomTom
------------------ tomtom1972 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DasDon Mitglied Konstruktuer
Beiträge: 169 Registriert: 25.07.2011 R18 SP2. WIN
|
erstellt am: 08. Nov. 2012 09:28 <-- editieren / zitieren --> Unities abgeben: Nur für tomtom1972
MOIN; WIE WÄRE ES WENN DU IN DEINEM TREEWALK SCHLEIFE DEN VATER übermittelst und diese dann mit .Parent vergleichst. irgendwie so... Sub CATMAIN() Treewalk CAtia.ActiveDocument.Product, catia.ActiveDocument.Product.Name END SUB Sub Treewalk (oProd, oVaterInstanceName) For each oChild in oProd.Products Treewalk oChild, oProd.Name Next IF oChild.ReferenceProduct.Parent.Name = oVaterInstanceName THEN 'Product Else 'komponente End End sub irgendwie so könnte es gehen. ist nur pseudo code. mein kopf dröhnt noch einwenig vom bier und fussball gestern... gruß, dasdon Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
DasDon Mitglied Konstruktuer
Beiträge: 169 Registriert: 25.07.2011 R18 SP2. WIN
|
erstellt am: 08. Nov. 2012 09:35 <-- editieren / zitieren --> Unities abgeben: Nur für tomtom1972
ach sch...schade. habe wat vergessen. wie gesagt, der kopf! du muss natürlich auch alle indentifizierten komponenten in einem dictionary speichern bzw. deren instance name. dann vergleichst du bei positive identifizierung von einen komponente ob der vater auch einer ist. IF oVaterInstanceName Exists in Dictionary. Dann weiß du: sohn ist component, vater ist component. enkel müssen andres behandelt werden oder wat auch immer... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tomtom1972 Mitglied dipl ing maschinenbau
Beiträge: 608 Registriert: 22.03.2005 NVidia Quadro K4000 Intel Xeon E5-1620, 64GB RAM Windows10 64bit R30 <= CATIA V5 > =R19
|
erstellt am: 08. Nov. 2012 11:06 <-- editieren / zitieren --> Unities abgeben:
|