Autor
|
Thema: Dokumentnamen aus assembly (1152 mal gelesen)
|
HeinHein Mitglied Dipl Ing Maschinenbau
Beiträge: 44 Registriert: 16.02.2012 cgr und models Namen ermitteln
|
erstellt am: 18. Jun. 2013 14:57 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich versuche verzweifelt aus einem Assembly die Dokumentnamen der enthaltenen Subassemblies und CATParts zu ermitteln. Bisher klappt bei mir nur for x =1 to CATIA.Documents.Count filename=CATIA.Documents.Item(x).Name next Mit CATIA.Documents werden aber alle geoeffneten Catia Dokumente angesprochen und genau das will ich nicht. Wer kann mir helfen? Gruss HeinHein ------------------ HeinHein 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: 18. Jun. 2013 17:52 <-- editieren / zitieren --> Unities abgeben: Nur für HeinHein
Servus Bitte Systeminfo ausfüllen. Dafür musst du die Products deines Products, und dessen Unterbaugruppen abarbeiten (siehe zb hier). Dabei über .ReferenceProduct.Parent das Dokument auslesen (Achtung bei mehrfach verbauten Teilen wird dir auch mehrfach das Document ausgegeben). Oder, falls Lizenz vorhanden, kannst du auch SendTo (siehe zB. hier) die Dokumente direkt auslesen. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HeinHein Mitglied Dipl Ing Maschinenbau
Beiträge: 44 Registriert: 16.02.2012 cgr und models Namen ermitteln
|
erstellt am: 18. Jun. 2013 18:09 <-- editieren / zitieren --> Unities abgeben:
|
HeinHein Mitglied Dipl Ing Maschinenbau
Beiträge: 44 Registriert: 16.02.2012 cgr und models Namen ermitteln
|
erstellt am: 03. Jul. 2013 22:14 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich versuche über eine rekursive Funktion alle Namen und Speicherorte eines Assemblys zu ermitteln. Das klappt auch für CATParts und CATProducts. Wenn ich aber eine CGR-Datei im Assembly habe ignoriert meine Funktion das einfach. So wie ich die Sache verstehe ist doch das einzig entscheidende, ob das Funktionsargument vom NameTyp Product ist. Wenn nicht müsste ich doch über GetMasterRepresentationPathName den Dateinamen erhalten oder Kann mir jemand mal die Schwachstelle in meiner Funktion zeigen?
PS: Bitte nicht über meine Kommentare im Code wundern. Bin noch auf Anfaengerniveau. Gruss Hein Code: getDocumentsOfAssy m_objActiveDocument.ProductFunction getDocumentsOfAssy(currProduct) dim f_fileNameSingleName 'file name without path = key dim f_a 'loop '++++++ Treading of parent ++++++++++++++++++++++++++++ If TypeName(currProduct) = "Product" Then 'get file name and full path f_fileNameSingleName=currProduct.ReferenceProduct.Parent.Name addRegisterDocumentOfAssy f_fileNameSingleName' key Else MsgBox "Test no product -> name: " & currProduct.GetMasterShapeRepresentationPathName End If'TypeName(currProduct.Products.Item(f_a)) = "Product" '++++++ Treading of children ++++++++++++++++++++++++++++ for f_a = 1 to currProduct.Products.Count If TypeName(currProduct.Products.Item(f_a)) = "Product" Then 'get file name and its full path f_fileNameSingleName=currProduct.Products.Item(f_a).ReferenceProduct.Parent.Name addRegisterDocumentOfAssy f_fileNameSingleName' key 'Rekursion call getDocumentsOfAssy(currProduct.Products.Item(f_a).Products.Item(f_a))'Rekursion Else MsgBox "Test no product -> name: " & currProduct.Products.Item(f_a).GetMasterShapeRepresentationPathName End If'TypeName(currProduct.Products.Item(f_a)) = "Product" Next'for f_a=1 to currProduct.Products.Count End Function'getDocumentsOfAssy
------------------ HeinHein 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: 03. Jul. 2013 23:00 <-- editieren / zitieren --> Unities abgeben: Nur für HeinHein
Servus Bitte Systeminfo ergänzen. Was mir auffällt: du rufts die Rekursion auf, ohne zu prüfen, ob ein Product (das kann auch ein Part sein) auch wirklich Unter-Products hat (zB If oProduct.Poroducts.count > 0 then) Um ein cgr von ein Part/Product zu unterscheiden kannst du folgenden Code verwenden: Code: For Each oProduct In RootProduct.Products If oProduct.ReferenceProduct.Parent Is RootProduct.Parent Then 'bei ein cgr ist das Parent des Referenzdocments der Instanz gleich der Root-ProdcutDocument StrPath = oProduct.GetMasterShapeRepresentationPathName Else StrPath = oProduct.ReferenceProduct.Parent.FullName End If Next
Ich bin mir aber nicht sicher was, jetzt bei einer Komponente passiert.Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HeinHein Mitglied Dipl Ing Maschinenbau
Beiträge: 44 Registriert: 16.02.2012 cgr und models Namen ermitteln
|
erstellt am: 04. Jul. 2013 07:30 <-- editieren / zitieren --> Unities abgeben:
Hallo Bernd, V5 R16 BS: Windows XP vielen dank für den Hinweis. Nach meinem Verständnis erfolgt die Prüfung hinsichtlich Unterprodukts, insofern, da die Rekursion nur innerhalb der Schleife "for f_a = 1 to currProduct.Products.Count" erfolgt. Habe ich da einen Denkfehler? Gruss Hein
------------------ HeinHein 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: 04. Jul. 2013 08:02 <-- editieren / zitieren --> Unities abgeben: Nur für HeinHein
Servus Du arbeitest mit der Schelife über currProduct.Products alle Unterprodukte (also Einzelteile und Unterbaugruppen), allerdings rufst du die Funktion "getDocumentsOfAssy" auch bei Einzelteilen auf (currProduct.Products.Item liefert auch bei Einzelteilen ein Product zurück). Schau dir das mal mit einer kleinen Testbaugruppe im Watchfenster an. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |