Autor
|
Thema: .SaveAs von komplettem Produkt (1560 mal gelesen)
|
mycon Mitglied
Beiträge: 58 Registriert: 14.02.2011 Catia V5R19
|
erstellt am: 03. Jun. 2011 21:49 <-- editieren / zitieren --> Unities abgeben:
Hi, ich versuch mich gerade an einem Makro in .NET, das ein komplettes .CATProduct mit allem was darin ist in ein neues leeres Verzeichnis zu speichern mit der .SaveAs Methode. Dazu habe ich jetzt in einer ListView für jede im Produkt vorkommende Datei eine Auflistung gemacht. Dort ist u.a. die PartNumber und der derzeitige Dateiname aufgelistet. In der Liste ist jedes Part/Product nur 1x vorhanden, auch wenn es mehrfach verbaut ist. Dann gehe ich mit einer For each schleife durch die Liste, weise das Document mit Blabla = Catia.Documents.Item("Part1.CATPart") zu, wobei Part1.CATPart natürlich aus der Listview kommt, was auch ein Produkt sein kann. Das ganze 2x, zuerst für alles was typename(blabla) <> "ProductDocument" ist, danach alle Produkte. Allerdings kommen dann nur die Parts ins neue Verzeichnis, selbst die nicht komplett, es fehlen teilweise welche. Von den Produkten, selbst vom Hauptprodukt, ist keine Spur. Schaue ich nach dem "Export" in das SaveManagement von Catia, stehen aber alle Pfade korrekt drin, nur die die nicht im neuen Ordner sind stehen noch auf "Modified". Beim Export sagt er im Direktfenster nach jedem .SaveAs Eine Ausnahme (erste Chance) des Typs "System.Runtime.InteropServices.COMException" ist in Microsoft.VisualBasic.dll aufgetreten. Aber die Datei speichert er dennoch (für Parts zumindest meistens) Weiss jemand Rat? Und ist es eigentlich egal in welcher Reihenfolge ich die Unterprodukte speicher? [Diese Nachricht wurde von mycon am 03. Jun. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
tberger Mitglied Application Manager CATIA V5 / V6
Beiträge: 1385 Registriert: 13.01.2007 WIN 7 64bit V5R21SP3HF49 3DX/V6 R2016x
|
erstellt am: 04. Jun. 2011 09:30 <-- editieren / zitieren --> Unities abgeben: Nur für mycon
Hallo mycon, wenn du verlinkte Parts hast (mit CCP bzw. Kontextlink) und die nicht in deiner Baugruppe, aber im Speicher sind (sichtbar in der Baugruppenverwaltung), dann kannst du diese mit deiner Baum-Schleifen-Methode nicht sichern. Du könntest, sofern du "nur" die eine Baugruppe geladen hast dann auch über die Collection "Ducuments" über alle Document - Objekte durchgehen und diese wie du auch beschrieben hast je nachdem ob Part oder Product sichern. Ich hatte das mal aufgebaut und in zwei Laufrunden zuerst die Parts, dann die Baugruppen gesichert (da sonst wieder die Baugruppen "modified" sind). Dabei musste ich feststellen, dass die verlinkten Parts dann wieder "modified" waren. Dieses kann nur mit einem gleichzeitigen Save gelöst werden (war zumindest mein damaliger Ansatz). Dazu gibt es z.B. das etwas verpöhnte aber doch erfolgreiche StartCommand("Save All").
------------------ Grüße aus dem Thurgau Thomas +++++++++++++++++++++++++++++++++ CATIA - eine Laune der Natur ... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mycon Mitglied
Beiträge: 58 Registriert: 14.02.2011 Catia V5R19
|
erstellt am: 04. Jun. 2011 13:01 <-- editieren / zitieren --> Unities abgeben:
|
mycon Mitglied
Beiträge: 58 Registriert: 14.02.2011 Catia V5R19
|
erstellt am: 05. Jun. 2011 10:24 <-- editieren / zitieren --> Unities abgeben:
Ok, ich habe es jetzt zum funktionieren gebracht. Ganz glücklich bin ich mit der Methode allerdings nicht. Catia scheint hier etwas instabil zu sein. Wenn ich mit einer Schleife durch alle Produkte gehe, dann erkennt er auch Parts als Products an und sichert es auch teilweise als .CatProduct ab in kombination mit einer Fehlermeldung im Direktfenster von VS. Das lässt sich nur umgehen, indem ich es nicht speichere, sobald ein Fehler auftrat. Das gleiche Problem habe ich dann am ende um alle auf "Modified" stehende Dokumente zu sichern. Statt der StartCommand Methode geh ich nochmal mit einer 3. Schleife durch, das unterdrückt die Frage "Wollen Sie x Dokumente sichern?" und ist auch Sprachunabhängig. Leider kommt es auch hier zu kuriosen Fehlern, daher muss ich das so machen: Code: Err.Clear() For Each itm In LV_Elements.Items CatX = Catia.Documents.Item(itm.SubItems.Item(2).Text) 'itm = "Blupp.CATPart" If Err.Number = 0 Then If Not CatX.saved Then CatX.Save() End If End If Err.Clear() Next
Alles in allem funktioniert es so, bin nur nicht ganz glücklich darüber das ich so unsauber arbeiten muss. Falls jemand einen Tipp hat wie man es besser lösen kann, wäre toll
Edit: Ich habe gerade festgestellt das im Produkt verbaute .cgr's nicht mit gespeichert werden. Die sind nichtmal im SaveManagement aufgelistet. Gibt es einen Weg von denen den richtigen Dateiname auszulesen? Wenn im auf das cgr in den Properties schaue, steht dort nur das Mutterprodukt.CATProduct als Dateiname, ich brauche aber den richtigen Namen wie z.b. Blabla.cgr Das gleiche Problem habe ich bei .model's Kennt jemand eine Lösung?
[Diese Nachricht wurde von mycon am 05. Jun. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Starbirth Mitglied Konstrukteur
Beiträge: 119 Registriert: 22.10.2009
|
erstellt am: 06. Jun. 2011 12:38 <-- editieren / zitieren --> Unities abgeben: Nur für mycon
Hallo mycon, brauchst du die Funktion unbedingt als Makro? Wenn dem nicht so sein sollte, wollte ich kurz erwähnt haben, dass es eine CATIA eigene Funktion gibt die sehr genau das macht was du in deinem ersten Beitrag beschreibst. Nennt sich im englischen "Send to... Directory". im Deutschen also etwa "An Ordner Senden/Senden an... Ordner". Du findest die Funktion unter "File"/"Datei". Wenn du die Funktion auswählst erhältst du im oberen Fenster eine Liste aller Daten die kopiert werden können (wenn du ein Produkt geöffnet hast, sind das alle Daten die in dem Produkt enthalten sind), diese übernimmst du mit einem Klick auf den Doppelpfeil komplett in die untere Liste. ganz unten wähltst du noch den Zielortner aus und los gehts. Auch CGRs sollten so mitgenommen werden, ebenso eventuell verlinkte Konstruktioonstabellen etc. Evtl. hilft das ja schon. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|