Autor
|
Thema: Strukturbaum auslesen (3135 mal gelesen)
|
V5Playaz Mitglied Dipl.-Ing (BA)
Beiträge: 447 Registriert: 12.07.2005 DELL PRECISION 390 3,25 GB RAM WIN XP PRO SP2 CATIA V5 R16-19 Delmia V5 R19 VB6, VB2008 Adobe Acrobat 9 Pro Extended
|
erstellt am: 06. Jun. 2008 16:17 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich möchte aus einem Strukturbaum die Pfade (Verzichnisse) aller vorhandenen Parts und Product auslesen und verändern. Hat jemand hierzu irgendwelche Vorlagen? Das Auslesen über eine Schleife ist nicht das Problem, sondern der Zugriff auf den Pfad der einzelnen Elemente. grüße dominik 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: 06. Jun. 2008 18:00 <-- editieren / zitieren --> Unities abgeben: Nur für V5Playaz
|
V5Playaz Mitglied Dipl.-Ing (BA)
Beiträge: 447 Registriert: 12.07.2005 DELL PRECISION 390 3,25 GB RAM WIN XP PRO SP2 CATIA V5 R16-19 Delmia V5 R19 VB6, VB2008 Adobe Acrobat 9 Pro Extended
|
erstellt am: 06. Jun. 2008 18:13 <-- editieren / zitieren --> Unities abgeben:
danke für die antwort, das gibt mir den Gesamtpfad des geöffneten Parts/Products aus. aber wie sieht es aus, wenn ich ein Product geöffnet habe, welches viele (hunderte) Parts und weitere Sub-Produkte enthält, welche in unterschiedlichen Verzeichnissen liegen. nun will ich in diesem Strukturbaum alle vorhandenen Elemente auslesen und deren Pfade ermitteln, um diese dann zu ändern. grüße dominik 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: 06. Jun. 2008 18:16 <-- editieren / zitieren --> Unities abgeben: Nur für V5Playaz
Servus Du musst eben rekursiv die Baugruppe (und Unterbaugruppe) durchgehen, den Zeiger auf das Part/Produkt setzen und den Pfad abfragen. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. 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: 06. Jun. 2008 18:47 <-- editieren / zitieren --> Unities abgeben: Nur für V5Playaz
Servus Ich hab mal ein kurzes Beispiel "zusammenkopiert" (sit ein CATScript): Code: Public Liste as StringDim Root_Baugruppe as Document '----------------------------- Sub CATMain() 'Fehlermeldungen ausschalten' 'CATIA.DisplayFileAlerts = False 'Start' Set oRoot = Catia.ActiveDocument Set oProducts = oRoot.Product.Products Set RootBaugruppe = oRoot.Product Liste = RootBaugruppe.Parent.Path & Chr(13) & Chr(10) 'Suche aufrufen' SUB_ProdScan oProducts 'Fehlermeldunge einschalten' 'CATIA.DisplayFileAlerts = True MsgBox Liste End Sub Sub SUB_ProdScan(oProducts) 'Baugruppe durchsuchen' For x = 1 To oProducts.Count Set oParentDoc = oProducts.Item(x).ReferenceProduct.Parent Liste = Liste & oParentDoc.Path & Chr(13) & Chr(10) 'Baugruppen' If oProducts.Item(x).Products.Count > 0 Then Liste = liste & oParentDoc.Path & Chr(13) & Chr(10) SUB_ProdScan oProducts.Item(x).Products End If Next End Sub
Gruß Bernd------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
V5Playaz Mitglied Dipl.-Ing (BA)
Beiträge: 447 Registriert: 12.07.2005 DELL PRECISION 390 3,25 GB RAM WIN XP PRO SP2 CATIA V5 R16-19 Delmia V5 R19 VB6, VB2008 Adobe Acrobat 9 Pro Extended
|
erstellt am: 06. Jun. 2008 19:55 <-- editieren / zitieren --> Unities abgeben:
|
Lusilnie Mitglied
Beiträge: 1486 Registriert: 13.07.2005
|
erstellt am: 07. Jun. 2008 00:23 <-- editieren / zitieren --> Unities abgeben: Nur für V5Playaz
Hallo V5Playaz, wie wäre es mit: Code: oParentDoc.SaveAs Pfad_und_Dateiname
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 |
V5Playaz Mitglied Dipl.-Ing (BA)
Beiträge: 447 Registriert: 12.07.2005 DELL PRECISION 390 3,25 GB RAM WIN XP PRO SP2 CATIA V5 R16-19 Delmia V5 R19 VB6, VB2008 Adobe Acrobat 9 Pro Extended
|
erstellt am: 09. Jun. 2008 08:28 <-- editieren / zitieren --> Unities abgeben:
ich habe es ausprobiert, so kann ich die elemente einzeln speichern. hierbei kommt für jedes element aber eine abfrage, ob ich wirklich speichern will. wenn man diese abfrage nicht umgehen kann, ist das ganze nicht wirklich automatisiert. es muss doch auch die möglichkeit geben, ein product so zu "manipulieren", dass die Pfade der einzelnen elemente lediglich geändert werden, anstatt alle neu zu speichern. denn ich kann ja zumindest schon mal den Pfad auslesen, somit müsste es doch möglichsein, diesen pfad zu ändern/überschreiben? grüße dominik Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Augustiner Mitglied Konstrukteur
Beiträge: 188 Registriert: 02.12.2005 HP Workstation Windows XP Professional Visual Studio 2005 Professional CATIA V5 R14SP5 & R17SP3
|
erstellt am: 09. Jun. 2008 08:33 <-- editieren / zitieren --> Unities abgeben: Nur für V5Playaz
Mit CATIA.DisplayFileAlerts = False kannst Du die Fehlermeldung umgehen, danach aber wieder auf true setzen. Wenn Du nur den Pfad ändern würdest, aber das Dokument nicht neu abspeicherst würde CATIA beim nächsten öffnen eines Produktes nur Fehlermeldungen hageln. Daher ist es völlig logisch das das ändern des Pfades nur in Verbindung mit saveAs möglich ist.
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: 09. Jun. 2008 08:33 <-- editieren / zitieren --> Unities abgeben: Nur für V5Playaz
Servus Schau dir mal dieses Makro an. Dabei wirde eine Baugruppe in ein anderes Verzeichnis kopiert und danach als STEP-Datei abgespeichert. Einfach deinen Gegebenheiten anpassen (Pfadabfrage, Konvertierung in STEP entfernen) und sollte funktionieren. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
V5Playaz Mitglied Dipl.-Ing (BA)
Beiträge: 447 Registriert: 12.07.2005 DELL PRECISION 390 3,25 GB RAM WIN XP PRO SP2 CATIA V5 R16-19 Delmia V5 R19 VB6, VB2008 Adobe Acrobat 9 Pro Extended
|
erstellt am: 09. Jun. 2008 09:19 <-- editieren / zitieren --> Unities abgeben:
@ Augustiner: ja, du hast recht. so funktioniert es. @ bgrittmann: bei step-dateien mag es funktionieren, aber als "sicherungsverwaltung" nicht, da die verknüpfung zu den alten Pfaden der einzelnen Elementen vorhanden bleibt. abhilfe schafft da, die RootBaugruppe als letzten schritt zu speichern, so werden alle neuen verknüfungen übernommen.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
K.Siebert Mitglied Tech Zeichner
Beiträge: 415 Registriert: 19.05.2007 Win XP Catia V5 R19 Catia V5 R24
|
erstellt am: 09. Jun. 2008 17:02 <-- editieren / zitieren --> Unities abgeben: Nur für V5Playaz
|
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 09. Jun. 2008 20:48 <-- editieren / zitieren --> Unities abgeben: Nur für V5Playaz
|
V5Playaz Mitglied Dipl.-Ing (BA)
Beiträge: 447 Registriert: 12.07.2005 DELL PRECISION 390 3,25 GB RAM WIN XP PRO SP2 CATIA V5 R16-19 Delmia V5 R19 VB6, VB2008 Adobe Acrobat 9 Pro Extended
|
erstellt am: 10. Jun. 2008 14:47 <-- editieren / zitieren --> Unities abgeben:
Ich danke euch allen erst mal für die Tips. bisher funktioniert der Vorgang, jedoch wollte ich einen Schritt weiter gehen und das jeweilige CATProduct automatisiert öffnen. Jedoch funktioniert das Makro dann nicht mehr vollständig und bricht ab. Fehler: Das Verfahren ReferenzProduct ist fehlgeschlagen Set oParentDoc = oProducts.Item(x).ReferenceProduct.Parent der bisherige Quellcode:
Language="VBSCRIPT"
Public Output_folder as String Sub CATMain() CATIA.DisplayFileAlerts = False 'Fehlermeldungen ausschalten' sInputFile = CATIA.FileSelectionBox("Product auswählen", "*.CATProduct", CatFileSelectionModeOpen) ' Dim oDoc As Document Set oDoc = CATIA.Documents.Open(sInputFile) 'Eingabefenster für Ausgabeverzeichnis' Output_folder = InputBox ("Bitte das vorhandene Ausgabeverzeichnis eingeben mit abschliessendem '\'.","Eingabe","C:\tmp\test\",500,1000) CATIA.Filesystem.CreateFolder Output_folder 'Ausgabeverzeichnis erstellen Set oRoot = Catia.ActiveDocument Set oProducts = oRoot.Product.Products 'Suche aufrufen' SUB_ProdScan oProducts 'Rootbaugruppe speichern' Set RootBaugruppe = oRoot.Product OUTPUT = Output_folder & RootBaugruppe.Name & ".CATProduct" 'RootBaugruppe.Partnumber oRoot.SaveAs(OUTPUT) oRoot.close CATIA.DisplayFileAlerts = True 'Fehlermeldunge einschalten' MsgBox "Baugruppe unter: " & Output_folder & " gespeichert!" End Sub Sub SUB_ProdScan(oProducts) 'Baugruppe durchsuchen' 'Set oRoot = Catia.ActiveDocument For x = 1 To oProducts.Count Set oParentDoc = oProducts.Item(x).ReferenceProduct.Parent 'Parts' If TypeName(oParentDoc) = "PartDocument" Then 'Parts unter Teilenummer abspeichern' Dim Teil as Product Set Teil = oParentDoc.Product 'MsgBox VbLf & oParentDoc.Name' OUTPUT = Output_folder & Teil.Name & ".CATPart" 'Teil.PartNumber oParentDoc.SaveAs(OUTPUT) End if 'Baugruppen' If oProducts.Item(x).Products.Count > 0 Then 'Baugruppen unter Teilenummer abspeichern' Dim Baugruppe as Product Set Baugruppe = oParentDoc.Product OUTPUT = Output_folder & Baugruppe.Name & ".CATProduct" 'Baugruppe.PartNumber oParentDoc.SaveAs(OUTPUT) 'für Unterbaugruppen die Suche aufrufen' SUB_ProdScan oProducts.Item(x).Products End If Next End Sub
weitere Schritte wären, einen Ordner auszuwählen und alle vorhandenen Catproducts (samt Struktur) öffnen und in Ausgabeverzeichnis speichern.
grüße dominik Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
K.Siebert Mitglied Tech Zeichner
Beiträge: 415 Registriert: 19.05.2007 Win XP Catia V5 R19 Catia V5 R24
|
erstellt am: 10. Jun. 2008 17:27 <-- editieren / zitieren --> Unities abgeben: Nur für V5Playaz
Schau dir doch mal die Skripte an unter dem Link den ich gestern Geprostet habe. Denn wenn du alles neu abspeichern willst was machst du mit den Zeichnungen und denn Schriftfeldern in denn Zeichnungen möchtest du dieses noch Manuell erledigen oder auch per Skript? Was ist wenn sich doch mal im Partnamen was ändert (z.B. Auftragsnummer ; Bemi-Nr.[VW] oder ein Hinweis der Baugruppe) und du dieses anpassen musst möchtest du dieses auch Manuell anpassen !?
------------------ Sei Schlau bleib Dumm !!?!! 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: 10. Jun. 2008 19:34 <-- editieren / zitieren --> Unities abgeben: Nur für V5Playaz
|
V5Playaz Mitglied Dipl.-Ing (BA)
Beiträge: 447 Registriert: 12.07.2005 DELL PRECISION 390 3,25 GB RAM WIN XP PRO SP2 CATIA V5 R16-19 Delmia V5 R19 VB6, VB2008 Adobe Acrobat 9 Pro Extended
|
erstellt am: 12. Jun. 2008 08:38 <-- editieren / zitieren --> Unities abgeben:
Hallo, hat leider nichts gebracht, mit der Definition als CATScript. Das Makro funktioniert, wenn man ein bereits geöffnetes Product damit bearbeitet. Das automatisierte öffnen scheitert jedoch, und somit auch der rest. am anfang hatte es mal funktioniert. ich bin mit makros eher unzufrieden, da diese nicht immer konstant laufen. ich habe es jetzt über ein Visual Basic Programm gelöst, also eine eigenständige *.exe Datei, welche auf CATIA zugreift. der Code ist überwiegend der selbe, es müssen nur alle variablen und objekte definiert werden. das programm funktioniert bei mir immer. man muss also nach der benutzung catia nicht neustarten, wie bei makros! Zudem sieht das ganze mit einer Oberfläche besser aus und wirkt auch professioneller. Fazit: für kleine, schnell zu entwickelnde Automatisierungen ist ein Makro sicher ausreichend, wenns aber größer und komplizierter wird werde ich in Zukunft den "externen" Weg gehen. eine weitere Frage hätte ich noch, wie kann ich *.cgr Dateien im Strukturbaum erkennen, um diese dann zu speichern? Bei Parts gings ja so: If TypeName(oParentDoc) = "PartDocument" Then grüße dominik Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
denyo_1 Moderator Manager
Beiträge: 2506 Registriert: 10.08.2005 HP Compaq 8710w, Intel Core Duo T7700, 2,40 Ghz, 3GB RAM, Windows XP Professionel @32bit, Quadro FX 1600M, CATIA V5 R19 SP3
|
erstellt am: 12. Jun. 2008 08:43 <-- editieren / zitieren --> Unities abgeben: Nur für V5Playaz
Hi, les doch den FullName des Teils aus und Splite ihn vor der Dateiendung. Dann kannst mit ner einfachen Abfrage das cgr-File rausfiltern Code:
Dim DocType as String DocNameRaw = oPart.FullName DocNameSemi = Split(DocNameRaw,".c") DocNameFin = DocNameSemi(1)If DocType = "gr" then .... End If
Ich denke über die Funktion TypeName gehts nämlich nicht ------------------ MFG Daniel Die KATJA ist halt doch nur ne zickige Französin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |