Autor
|
Thema: Catvba: Allcatpart-Erstellung mit DECProductToPart (5871 mal gelesen)
|
Schabloneur Mitglied Konstrukteur, Programmierer
Beiträge: 19 Registriert: 09.04.2014 Dell Precision T3610 Win7 Pro 64bit CatiaV5 R19 SP9 H106
|
erstellt am: 09. Apr. 2014 12:05 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich erstelle in einem Modul meines VBA-Projekts Allcatparts mit dem GetItem("DECProductToPart"). Den Code dafür habe ich von hier: Product2Part Reloaded V5R18 SP2 Mal ein Beispielcode:
Code:
Private Sub B121_Click() Call Modul1.CATMain End Sub
Code:
Public oSrcDoc As Document Public oACPDoc As Document Public oProd As Product Public oACPSel Public oProd2Part As DECProductToPartSub CATMain() CatPartErstell End Sub Sub CatPartErstell()
Set oProd = CATIA.ActiveDocument.Product Set oProd2Part = oProd.GetItem("DECProductToPart") oProd2Part.Run sError = oProd2Part.GetError Set oACPDoc = oProd2Part.GetResult Set oACPSel = oACPDoc.Selection Set oPart = oACPDoc.Part '[...] End Sub
Nun spielt unsere geliebte Katja mal wieder alle Register aus und ärgert mich: Ich starte das CATMain dieses Moduls über einen Userform-Button. Eigentlich nix wildes. Aber der Code läuft nicht richtig durch. Man kann das am o.g. Code nachvollziehen, wenn man bspw. bei...
Code: Set oPart = oACPDoc.Part
...einen Haltepunkt setzt. Bei direktem Aufruf (über VBA-Editor) der Sub CatPartErstell() (oder der CATMain) erscheint die Statusbar der Catpart-Erstellung und nach dem Punkt...
Code: Set oACPDoc = oProd2Part.GetResult
...ist das Allcatpart auch vorhanden. Starte ich jedoch die Sub CatPartErstell() über die CATMain (und diese wiederrum über einen Button der Userform) stoppt der Durchlauf beim gesetzten Haltepunkt und das Allcatpart ist noch nicht vorhanden bzw. wird nicht angezeigt. Nach dem Durchlauf dieser Prozedur möchte ich dann eine weitere Prozedur starten, die mir GeoSets und Parts aus dem Allcatpart löscht. Die Prozedure CatPartErstell soll noch nicht beendet werden. (Deswegen auch das...
Code:
Set oACPSel = oACPDoc.Selection Set oPart = oACPDoc.Part'[...]
Das Vorhaben schlägt jedoch fehl, weil das Allcatpart (oACPDoc) eben noch nicht vorhanden ist!? Tja und nun die Frage aller Fragen: Was mache ich falsch? Oder ist das wiedermal ein Zusatzfeature von Catia... Für eure Hilfe im Voraus besten Dank!
VG Tilo
------------------ Dem Schabloneur ist nichts zu schwör... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HoBLila Mitglied Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx
Beiträge: 1118 Registriert: 29.05.2008 DELL PRECISION T3500 Intel(R) Xeon(R) CPU W3540 @ 2.93GHz 12285 MB RAM NVIDIA Quadro FX 1800 Microsoft Windows 7 Enterprise Service Pack 1 CATIA V5 R19 SP09 HF69 VB6.5 CAA RADE CDC
|
erstellt am: 09. Apr. 2014 12:52 <-- editieren / zitieren --> Unities abgeben: Nur für Schabloneur
Ist es ein modaler Dialog? ------------------ Mit freundlichen Grüßen, Henry Schneider alias Lila Es gibt einen ewigen Wettkampf zwischen der Natur und den Ingenieuren: Die Ingenieure versuchen, immer idioten-sicherere Systeme zu bauen, die Natur versucht, immer bessere Idioten zu bauen Xing Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Schabloneur Mitglied Konstrukteur, Programmierer
Beiträge: 19 Registriert: 09.04.2014 Dell Precision T3610 Win7 Pro 64bit CatiaV5 R19 SP9 H106
|
erstellt am: 09. Apr. 2014 12:54 <-- editieren / zitieren --> Unities abgeben:
|
HoBLila Mitglied Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx
Beiträge: 1118 Registriert: 29.05.2008 DELL PRECISION T3500 Intel(R) Xeon(R) CPU W3540 @ 2.93GHz 12285 MB RAM NVIDIA Quadro FX 1800 Microsoft Windows 7 Enterprise Service Pack 1 CATIA V5 R19 SP09 HF69 VB6.5 CAA RADE CDC
|
erstellt am: 09. Apr. 2014 13:12 <-- editieren / zitieren --> Unities abgeben: Nur für Schabloneur
Schalt das Modal mal testweise aus. Wär' zwar blöd aber Deine Beschreibung hört sich danach an, dass er im Hintergrund auf irgendwas zugreifen müsste, was Durch den Dialog blockiert ist. Edit: Rechtschreibfehler korrigiert, da meine eine Hand oft die andere überholt. Oo ------------------ Mit freundlichen Grüßen, Henry Schneider alias Lila
Es gibt einen ewigen Wettkampf zwischen der Natur und den Ingenieuren: Die Ingenieure versuchen, immer idioten-sicherere Systeme zu bauen, die Natur versucht, immer bessere Idioten zu bauen Xing [Diese Nachricht wurde von HoBLila am 10. Apr. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Schabloneur Mitglied Konstrukteur, Programmierer
Beiträge: 19 Registriert: 09.04.2014 Dell Precision T3610 Win7 Pro 64bit CatiaV5 R19 SP9 H106
|
erstellt am: 09. Apr. 2014 15:10 <-- editieren / zitieren --> Unities abgeben:
In der Tat, mit vbModeless funktioniert es richtig. Das ist aber Suboptimal. Leider kann ich die Eigenschaft ShowModal der Userform nicht nachträglich beschreiben (bis auf die normale Parameterübergabe bei Userform.Show). Gibt es irgendwie eine Möglichkeit den Bindungsstatus der Userform vor bzw. nach Modulaufruf zu ändern? Möchte die Userform nicht dauerhaft ungebunden lassen. Edit: Auch eine zwischengeschaltete Form (vbModeless), welche das entsprechende Modul startet, hilft nicht. Solange die (Haupt-)Userform gebunden ist, kann Catia den Ablauf nicht vollends durchführen. Mist! Wenn es denn nur eine Doku zum DECProductToPart geben würde... ------------------ Dem Schabloneur ist nichts zu schwör...
[Diese Nachricht wurde von Schabloneur am 09. Apr. 2014 editiert.] 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. Apr. 2014 23:24 <-- editieren / zitieren --> Unities abgeben: Nur für Schabloneur
Hallo, Würde es etwas bringen, wenn du an dieser stelle denn Fokus auf z.B auf ein CMD Fenster legst? Die Form könnte dann ja warten bis das CMD Fenster wieder geschlossen ist. In dem Code Beispiel starte ich eigentlich nur ein Fenster mit OK Butten da ich nicht weiß wie lange der User braucht um eine Vorderansicht zu generieren. Nach Bestätigung des Büttens wird der Code weiter ausgeführt Code: PfadExpl_1 = ThisWorkbook.Worksheets("Tools").Range("A2") Set oShell = CreateObject("Wscript.shell") oShell.Run PfadExpl_1 & "\MsgBox_Warten\warten-Vorderansicht.exe", 1, True ' true = warten bis Anwendung beendet ist
------------------ Sei Schlau bleib Dumm !!?!! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Schabloneur Mitglied Konstrukteur, Programmierer
Beiträge: 19 Registriert: 09.04.2014 Dell Precision T3610 Win7 Pro 64bit CatiaV5 R19 SP9 H106
|
erstellt am: 10. Apr. 2014 09:21 <-- editieren / zitieren --> Unities abgeben:
Guten Morgen. Kommando zurück! Ich bin mal wieder einem französischem Anzeigefehler aufgesessen. -.- Hintergrund ist, dass, wie eingangs erwähnt, bei der anschließenden Geoset- und Part-Selection ein Fehler auftritt: The method _NewEnum failed. Ich schob es fälschlicherweise darauf, dass mir das Allcatpart fehlt. Es ist aber ab dem Punkt...
Code: Set oACPDoc = oProd2Part.GetResult
...doch vorhanden und wird bei Modulaufruf durch eine modale Form (noch) nicht angezeigt. Das heißt also, die Selection des Allcatparts kann doch erstellt und die entsprechenden Geosets und Parts anschließend gelöscht werden. Sobald alles durchgerödelt und die Form danach beendet ist, kommt das Allcatpart wie gewünscht bearbeitet 'zum Vorschein' (bzw. wird gespeichert). Der Fehler The method _NewEnum failed. tritt auf, wenn er die Hybridsketches in den Geosets durchsuchen will. Es sind keine vorhanden, ok. Aber wenn er die Hybridbodies durchsucht und es gibt eigentlich keine, dann tritt kein Fehler auf. Ebenso bei den Hybridshapes... Naja ich ignoriere erstmal diesen Fehler mit dem üblichen On Error Resume next... Hat einer eine Idee, warum o.g. Fehler auftritt? Ok, ich danke euch trotzdem für eure Mühen.
Grüße, Tilo
PS: Die Bastellösung mit der ungebundenen (Zwischen-)Form hätte dann doch funktioniert: Man darf nur nicht den Modulaufruf in die Userform_Initialize packen, sondern muss noch eine Sub erstellen, welche das Modul (mit der Allcatparterstellung) aufruft. Und diese Sub wird durch die Userform_Initialize aufgerufen...
...soviel Rufen... ------------------ Dem Schabloneur ist nichts zu schwör... [Diese Nachricht wurde von Schabloneur am 10. Apr. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
HoBLila Mitglied Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx
Beiträge: 1118 Registriert: 29.05.2008 DELL PRECISION T3500 Intel(R) Xeon(R) CPU W3540 @ 2.93GHz 12285 MB RAM NVIDIA Quadro FX 1800 Microsoft Windows 7 Enterprise Service Pack 1 CATIA V5 R19 SP09 HF69 VB6.5 CAA RADE CDC
|
erstellt am: 10. Apr. 2014 09:26 <-- editieren / zitieren --> Unities abgeben: Nur für Schabloneur
Und wenn Du den Dialog für die Verarbeitung schließt? Also komplett alle und dann wieder genau so öffnest? Oder eine zweite CATIA-Session mit nem CATScript, das ginge auch, wäre aber super umständlich. Ich würde darüber nachdenken ob das Modal so wichtig ist es sich so schwer zu erkaufen. Sicherlich gibts Gründe dafür. ------------------ Mit freundlichen Grüßen, Henry Schneider alias Lila Es gibt einen ewigen Wettkampf zwischen der Natur und den Ingenieuren: Die Ingenieure versuchen, immer idioten-sicherere Systeme zu bauen, die Natur versucht, immer bessere Idioten zu bauen Xing Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Schabloneur Mitglied Konstrukteur, Programmierer
Beiträge: 19 Registriert: 09.04.2014 Dell Precision T3610 Win7 Pro 64bit CatiaV5 R19 SP9 H106
|
erstellt am: 10. Apr. 2014 09:47 <-- editieren / zitieren --> Unities abgeben:
Danke, ist aber nicht notwendig. Der gesammte Prozess läuft automatisch ab. Der User muss also nicht eingreifen können. Die Allcatparts werden nach Geoset- und Partlöschen gespeichert und geschlossen. Wenn ich mir das recht überlege, wäre es sogar besser, wenn gar keine neuen Fenster mit den Allcatparts aufpoppen. Schließlich blinkt der Bildschirm des Benutzers bei großen Baugruppen dann eine längere Zeit ganz furchtbar... Mal schauen, ob ich da noch was finde. ------------------ Dem Schabloneur ist nichts zu schwör... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Schabloneur Mitglied Konstrukteur, Programmierer
Beiträge: 19 Registriert: 09.04.2014 Dell Precision T3610 Win7 Pro 64bit CatiaV5 R19 SP9 H106
|
erstellt am: 29. Aug. 2014 11:47 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen! Ich schrieb damals...
Zitat: Original erstellt von Schabloneur: [...] Sobald alles durchgerödelt und die Form danach beendet ist, kommt das Allcatpart wie gewünscht bearbeitet 'zum Vorschein' (bzw. wird gespeichert). [...]
...und genau dieses Speichern bereitet mir jetzt, nach einer längeren Pause, Kopfzerbrechen. *klirr* Wie oben schon beschrieben, erstelle ich mein Allcatpart...
Code:
Set oProd = CATIA.ActiveDocument.Product Set oProd2Part = oProd.GetItem("DECProductToPart") oProd2Part.Run sError = oProd2Part.GetError Set oACPDoc = oProd2Part.GetResult Set oACPSel = oACPDoc.Selection Set oPart = oACPDoc.Part
...benenne es danach um (sACPName ist ein String)...
Code: oACPDoc.Product.PartNumber = sACPName
...und speichere es dann mit dem Name als Dateiname ab:
Code: oACPDoc.SaveAs (s_Pfad + oACPDoc.Product.Name + ".CATPart")
Problem ist, dass der erste Durchlauf einer Session tadellos funktioniert und der zweite Durchlauf auf Grund des in der Session schon vorhandenen Namens fehlschlägt (bzw. es wird nichts gespeichert). Ich habe das SaveAs schon mit verschiedenen Strings probiert...
Code:
oACPDoc.SaveAs (s_Pfad + oACPDoc.Product.Name + ".CATPart") 'oder oACPDoc.SaveAs (s_Pfad + oACPDoc.Part.Name + ".CATPart") 'oder oACPDoc.SaveAs (s_Pfad + oACPDoc.ReferenceProduct.Parent.Name + ".CATPart") 'oder oACPDoc.SaveAs (s_Pfad + oACPDoc.Product.PartName + ".CATPart")
...das Ergebnis ist aber immer dasselbe. Erst die Catia-Session zu beenden und das Allcatpart erneut erstellen zu lassen, schafft Abhilfe (suboptimal). Erschwerend kommt hinzu, dass ich das Allcatpart an zwei verschiedenen Stellen speichern muss. Müsste also zweimal SaveAs machen. Vielleicht kann ich die umbenannte Datei einfach kopieren, aber mir schwant böses... Hat jemand eine Idee? Könnte ein SaveAsNewDocument erfolgreich sein? Konnte dazu aber keinerlei Dokumentation finden. Ungespeicherte Grüße, Tilo
------------------ Dem Schabloneur ist nichts zu schwör... 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: 29. Aug. 2014 12:02 <-- editieren / zitieren --> Unities abgeben: Nur für Schabloneur
Servus Zu deinem ersten Problem: IMHO lässt sich das nicht lösen ggf eine Zähler bei Dateinamen einfügen (ggf reicht auch das auch in der Partnumber) Zum 2.: entweder zwei mal SaveAs oder per "CopyFile" des FileSystem-Objekts Gruß Bernd
------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Schabloneur Mitglied Konstrukteur, Programmierer
Beiträge: 19 Registriert: 09.04.2014 Dell Precision T3610 Win7 Pro 64bit CatiaV5 R19 SP9 H106
|
erstellt am: 29. Aug. 2014 14:24 <-- editieren / zitieren --> Unities abgeben:
Hallo Bernd, wenn ich die Prozedur (ACP-Erstellung, Umbenennung und Speicherung unter bestimmten Namen) von Hand mache, kann ich das beliebig oft innerhalb einer Session mit dem selben Namen wiederholen! Der Makrorekorder bringt zu Tage, dass Catia quasi immer eine neue Instanz macht (product1, product2 usw.) und diese dann mit SaveAs speichert. Könnte ich theoretisch auch machen bei dem Punkt...
Code: Set oACPDoc = oProd2Part.GetResult
...und benenne mein Objekt "oACPDoc" immer anders. Dazu müsste ich aber testen, ob es davon schon eine Instanz im Speicher von Catia gibt. *hmpf* Zu deiner 2. Anmerkung: Genau, bisher habe ich SaveAs zweimal ausgeführt und dabei auch noch etwas kurioses festgestellt: (Durchlauf ist immer: ACP-Erstellung, Umbenennung, 2x SaveAs)
1. Durchlauf: Pfad1 - Speicherung Pfad2 - Speicherung 2. Durchlauf: Pfad1 - Speicherung Pfad2 - keine Speicherung (!) 3. Durchlauf: Pfad1 - keine Speicherung Pfad2 - keine Speicherung (!!) PS: Der Makrorekorder verweigert die Aufzeichnung, wenn ich SaveAsNewDocument machen möchte... *ganz toll* Geheime Grüße, Tilo
Edit: Ich habe das Speicherungsproblem in ein eigenes Thema gepackt: VBA: Session... SaveAs... Sauerei... ------------------ Dem Schabloneur ist nichts zu schwör... [Diese Nachricht wurde von Schabloneur am 05. Sep. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ks-reichle Mitglied Konstrukteur
Beiträge: 33 Registriert: 06.03.2009 Catia V5-6 Release 2014 Servicepack 4 Build Number 24 Hotfix 33 Dell Precision M6800
|
erstellt am: 10. Dez. 2014 11:55 <-- editieren / zitieren --> Unities abgeben: Nur für Schabloneur
Hallo zusammen, ich habe seit heute Catia V5R24 . Nun funktioniert das Makro nicht mehr. Fehler ist hier. Set oProd2Part = oProd.GetItem("DECProductToPart") Kann mir hier jemand weiterhelfen ? Grüße Klaus
------------------ Klaus 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. Dez. 2014 11:58 <-- editieren / zitieren --> Unities abgeben: Nur für Schabloneur
|