Autor
|
Thema: Parts werden nicht ordnungsgemäß geschlossen (2608 mal gelesen)
|
geekv5 Mitglied Konstrukteur
Beiträge: 214 Registriert: 13.07.2011 Notebook<P>MSI GX660R Intel Core i5 460M 8GB DDR3 1GB Mobility HD5870 80GB Intel X25-M Postville 250GB HDD<P>Desktop<P>AMD Phenom II X4 965 1GB HD4890@ FirePro V8700 8GB DDR3-1600 2,5TB HDD<P>Belinea 2485 S1W 24" MVA
|
erstellt am: 08. Mrz. 2012 11:51 <-- editieren / zitieren --> Unities abgeben:
Mahlzeit! Schreibe gerade an einem umfangreicheren Makro und habe noch eine Stelle die mir Kopfschmerzen bereitet. Ich erstelle aus einem Produkt ein AllCATPart und exportiere dieses als z.B. "igs". Problem eins ist, dass nach Erzeugung des AllCATParts auf einmal zwei Dokumente mehr im Produkt vorhanden sind. Problem Nummer zwei ist, dass mein Versuch das AllCATPart zu schließen, scheitert, es sind noch genauso viele Dokumente geöffnet.. Hier mal ein Minimalbeispiel: Code:
Sub CATMain()Set documents1 = CATIA.Documents Set productDocument1 = documents1.Add("Product") Set product1 = productDocument1.Product Set Prod2Part = product1.GetItem("DECProductToPart") MsgBox documents1.Count Prod2Part.Run sError = Prod2Part.GetError Set AllCATPart = Prod2Part.GetResult MsgBox documents1.Count AllCATPart.ExportData "D:\Neuer Ordner\test.igs", "igs" AllCATPart.Close MsgBox documents1.Count End Sub
Habe mich an einem Workaround versucht, die Liste der geöffneten Dokumente zu speichern und diese dann nach dem Export mit den geöffneten Dokumenten zu vergleichen, um schließlich die Differenz zu schließen, hat aber nicht so ganz geklappt und ist sicherlich auch nicht DIE Lösung.. Gruß 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: 08. Mrz. 2012 15:47 <-- editieren / zitieren --> Unities abgeben: Nur für geekv5
habe das Skript mal getestet , bei mir macht es das was es soll am Schluss kommt zwar eine Fehlermeldung (Sicherung von *.igs ist Fehlgeschlagen) dennoch wird das *igs korrekt gespeichert ------------------ Sei Schlau bleib Dumm !!?!! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
geekv5 Mitglied Konstrukteur
Beiträge: 214 Registriert: 13.07.2011 Notebook<P>MSI GX660R Intel Core i5 460M 8GB DDR3 1GB Mobility HD5870 80GB Intel X25-M Postville 250GB HDD<P>Desktop<P>AMD Phenom II X4 965 1GB HD4890@ FirePro V8700 8GB DDR3-1600 2,5TB HDD<P>Belinea 2485 S1W 24" MVA
|
erstellt am: 08. Mrz. 2012 17:41 <-- editieren / zitieren --> Unities abgeben:
|
RSchulz Moderator² Head of CAD, Content & Collaboration / IT-Manager
Beiträge: 5541 Registriert: 12.04.2007 @Work Lenovo P510 Xeon E5-1630v4 64GB DDR4 Quadro P2000 256GB PCIe SSD 512GB SSD SmarTeam V5-6 R2016 Sp04 CATIA V5-6 R2016 Sp05 E3.Series V2019 Altium Designer/Concord 19 Win 10 Pro x64
|
erstellt am: 09. Mrz. 2012 10:04 <-- editieren / zitieren --> Unities abgeben: Nur für geekv5
|
RSchulz Moderator² Head of CAD, Content & Collaboration / IT-Manager
Beiträge: 5541 Registriert: 12.04.2007 @Work Lenovo P510 Xeon E5-1630v4 64GB DDR4 Quadro P2000 256GB PCIe SSD 512GB SSD SmarTeam V5-6 R2016 Sp04 CATIA V5-6 R2016 Sp05 E3.Series V2019 Altium Designer/Concord 19 Win 10 Pro x64
|
erstellt am: 09. Mrz. 2012 11:40 <-- editieren / zitieren --> Unities abgeben: Nur für geekv5
Hallo, also ich habe es so versucht... Code:
Sub CATMain()Dim Documents1 As Documents Dim ProductDocument1 As Document Dim Product1 As Product Dim Prod2Part As DECProductToPart Dim sError As String Dim AllCATPart As PartDocument Dim oCount As Integer Dim nCount As Integer Set Documents1 = CATIA.Documents oCount = Documents1.Count Set ProductDocument1 = CATIA.ActiveDocument Set Product1 = ProductDocument1.Product Set Prod2Part = Product1.GetItem("DECProductToPart") CATIA.DisplayFileAlerts = False MsgBox Documents1.Count Prod2Part.Run sError = Prod2Part.GetError MsgBox Documents1.Count Set Prod2Part = Nothing Set Product1 = Nothing nCount = Documents1.Count Set AllCATPart = Documents1.Item(nCount) MsgBox Documents1.Count AllCATPart.ExportData "D:\test\test.igs", "igs" For i = 1 To nCount - oCount Documents1.Item(oCount + 1).Close Next CATIA.DisplayFileAlerts = True MsgBox Documents1.Count End Sub
...und bekomme das Temppart, welches von der Prozedur DECProductToPart angelegt wird geschlossen. Das abgeleitete CATAllPart lässt sich aber einfach nicht schließen! Keine Chance! Selbst wenn du alle anderen Dokumente vorher geschlossen hast, um vll. Abhängigkeiten zu beseitigen wie auch immer, bleibt das CATAllPart im Hintergrund geöffnet bzw. im Speicher geladen. Einzige Möglichkeit, die ich sehe ist, mit der StartCommand-Prozedur zu arbeiten oder eben das geladene Part zu ignorieren. Achso BTW du kannst die Meldungen mit "CATIA.DisplayFileAlerts = False" deaktivieren. Vergiss nur nicht diese am Ende wieder zu aktivieren. ------------------ MFG Rick Schulz Nettiquette (CAD.de) - Was ist die Systeminfo? - Wie man Fragen richtig stellt. - Unities Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
RSchulz Moderator² Head of CAD, Content & Collaboration / IT-Manager
Beiträge: 5541 Registriert: 12.04.2007 @Work Lenovo P510 Xeon E5-1630v4 64GB DDR4 Quadro P2000 256GB PCIe SSD 512GB SSD SmarTeam V5-6 R2016 Sp04 CATIA V5-6 R2016 Sp05 E3.Series V2019 Altium Designer/Concord 19 Win 10 Pro x64
|
erstellt am: 09. Mrz. 2012 11:57 <-- editieren / zitieren --> Unities abgeben: Nur für geekv5
|
geekv5 Mitglied Konstrukteur
Beiträge: 214 Registriert: 13.07.2011 Notebook<P>MSI GX660R Intel Core i5 460M 8GB DDR3 1GB Mobility HD5870 80GB Intel X25-M Postville 250GB HDD<P>Desktop<P>AMD Phenom II X4 965 1GB HD4890@ FirePro V8700 8GB DDR3-1600 2,5TB HDD<P>Belinea 2485 S1W 24" MVA
|
erstellt am: 09. Mrz. 2012 12:02 <-- editieren / zitieren --> Unities abgeben:
Hey Rick, das ist ja mies, aber immerhin habe ich jetzt einen Ansatz um weiter zu kommen.. Dass es im Speicher bleibt ist keine gute Lösung für mich, da der Speicher irgendwann sicher rappelvoll ist, wenn ich eine Reihe Exporte abarbeite.. Dann bleibt wohl nur noch Startcommand, wo bei ich da ja noch auf OK klicken muss, wo ich wieder bei der Windows API wäre Auf jeden Fall vielen Dank! =) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
geekv5 Mitglied Konstrukteur
Beiträge: 214 Registriert: 13.07.2011 Notebook<P>MSI GX660R Intel Core i5 460M 8GB DDR3 1GB Mobility HD5870 80GB Intel X25-M Postville 250GB HDD<P>Desktop<P>AMD Phenom II X4 965 1GB HD4890@ FirePro V8700 8GB DDR3-1600 2,5TB HDD<P>Belinea 2485 S1W 24" MVA
|
erstellt am: 20. Mrz. 2012 17:49 <-- editieren / zitieren --> Unities abgeben:
Hallo! Habe das Problem jetzt mit dem Startcommand erfolgreich lösen können, allerdings (noch) mit einer Einschränkung: Wenn ich ein Part in Bearbeitung (blau) gesetzt habe, findet er das Startcommand natürlich nicht, da es im Part Design nicht verfügbar ist.. Jetzt würde ich gerne das oberste Produkt im aktiven Dokument blau setzen lassen, habe auch schon mehrere Möglichkeiten probiert, leider ohne Erfolg: 1. Es passiert nichts, bin mir aber auch nicht sicher ob das der richtige Befehl für mein Anliegen ist..
Code:
Set productdocument1 = CATIA.ActiveDocument Set product1 = productdocument1.Productproduct1.ActivateDefaultShape
2. Es tut sich auch nichts.. Habe natürlich vorher eine Selektion vorgenommen.. Vielleicht brauche ich den deutschen String? Code:
CATIA.StartCommand "Activate Terminal Node"
3. Er öffnet ungewollt leere Produkte.. Code:
CATIA.StartWorkbench ("Assembly")
Schönen Feierabend! Nachtrag: Wusste doch, dass ich das schonmal irgendwo gelesen hatte, hier die Lösung: Code:
Set WshShell = CreateObject("WScript.Shell") WshShell.AppActivate ("CATIA V5") WshShell.SendKeys "c:" & "FrmActivate" & Chr(13), True
Wobei es nur funktioniert, wenn ich es aus CATIA heraus starte, sonst schreibt er "c:FrmActivate" in den Makro Code.. Kann es sein, dass Zeile 2 nicht das macht, was sie soll oder gehört der VBA Editor auch zu "CATIA V5"? [Diese Nachricht wurde von geekv5 am 21. Mrz. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
geekv5 Mitglied Konstrukteur
Beiträge: 214 Registriert: 13.07.2011 Notebook<P>MSI GX660R Intel Core i5 460M 8GB DDR3 1GB Mobility HD5870 80GB Intel X25-M Postville 250GB HDD<P>Desktop<P>AMD Phenom II X4 965 1GB HD4890@ FirePro V8700 8GB DDR3-1600 2,5TB HDD<P>Belinea 2485 S1W 24" MVA
|
erstellt am: 21. Mrz. 2012 10:41 <-- editieren / zitieren --> Unities abgeben:
Leider ergeben sich immer neue Probleme, habe mal einen Minimalcode zusammengebastelt, wenn die MsgBox auskommentiert wird, funktioniert es, sonst nicht.. Habe schon diverse Sleep und DoEvents gestreut, hat aber nichts geholfen.. Code:
Sub CATMain()Set selection1 = CATIA.ActiveDocument.Selection selection1.Clear selection1.Add CATIA.ActiveDocument.Product SendKeys "c:FrmActivate" & "{ENTER}", True MsgBox "test" End Sub
Danke schonmal Edit: OK habs jetzt doch mit dem Wechsel ins Assembly gelöst, prüfe jetzt vorher ob ein Part in Bearbeitung ist und wenn ja schalte ich um ins Assembly.. Hatte vorher das Problem, dass er ein neues Produkt geöffnet hat, wenn ich schon im Assembly war.. Wäre allerdings trotzdem interessant, wie (oder ob) das mit dem Sendkeys ordentlich funktioniert.. [Diese Nachricht wurde von geekv5 am 21. Mrz. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |