| |
| KISTERS 3DViewStation: 3D-Heatmaps für aussagekräftige Machbarkeitsanalysen, eine Pressemitteilung
|
Autor
|
Thema: Bodys als einzelne STL-Parts abspeichern (2288 mal gelesen)
|
xlex Mitglied
Beiträge: 1 Registriert: 25.10.2013
|
erstellt am: 25. Okt. 2013 17:10 <-- editieren / zitieren --> Unities abgeben:
Hallo, im Forum habe ich schon einige Inspiration für die Lösung meines Problems gefunden. Nun scheitert es - glaube ich - eher an Basics Die Problemstellung ist folgende: Ich habe einzelne CAT-Parts (so ca. 400) bzw. ein mit Bedingungen zusammengebautes CAT-Product. Für den einfach Import in Blender und die anschließende Verarbeitung, benötige ich jedoch am absoluten KoSy positionierte CAT-Parts bzw. STL-Dateien. Über einige Umwege bin ich jetzt auf folgende Lösung gekommen: - das CATProduct auf ein CATPart reduzieren(ohne alle Parts auf einen Body zusammenzuführen) - die dadurch entstandenen Bodies einzeln in neue Parts kopieren - die Parts als STL-Dateien exportieren Bestimmt nicht die eleganteste Methode, ist aber für meine Zwecke zielführend und kommt ohne irgendwelche Drittprogramme aus. So viel zum Hintergrund - dafür habe ich folgenden "Code" geschrieben: Code: Language="VBSCRIPT"'Schleife über alle Bodies '-------------------------------------- Sub CATMain() Set partDocument1 = CATIA.ActiveDocument Set part1 = partDocument1.Part Set bodies1 = part1.Bodies for n=1 to bodies1.Count-0 Set bodyn = bodies1.Item(n+0) 'Body auswaehlen, neues Part erzeugen und als STL speichern '--------------------------------------------- Set partDocument1 = CATIA.ActiveDocument Set selection1 = partDocument1.Selection selection1.Clear Set part1 = partDocument1.Part Set bodies1 = part1.Bodies selection1.Add bodyn selection1.Copy Set documents1 = CATIA.Documents Set partDocument2 = documents1.Add("Part") Set partDocument2 = CATIA.ActiveDocument Set selection2 = partDocument2.Selection selection2.Clear Set part2 = partDocument2.Part Set bodies2 = part2.Bodies Set body2 = bodies2.Item("Hauptkörper") selection2.Add body2 selection2.Paste Set partDocument2 = CATIA.ActiveDocument partDocument2.ExportData "C:\Users\Alexander\Desktop\STL\Part2.stl", "stl"
'Neues CAT-Part schließen '-------------------------------------------------- Set specsAndGeomWindow1 = CATIA.ActiveWindow specsAndGeomWindow1.Close Set partDocument1 = CATIA.ActiveDocument partDocument1.Close
next End Sub
Die ersten beiden Schritte erfüllt das Makro - mittlerweile - problemlos. Das Problem besteht noch im Abspeichern des neu erzeugten Parts, ich würde es gerne nach dem ursprünglichen CAT-Part bzw. dem daraus erzeugten Body benennen (Code: bodyn). Im Moment werden allerdings alle neu erzeugten Parts als Part2 abgespeichert, da ich leider nicht in der Lage bin den "partDocument2.ExportData "C:\Users\Alexander\Desktop\STL\Part2.stl", "stl""-Befehl entsprechend umzuändern. Habe schon einiges versucht, z.B. *.stl oder auch ganz andere Bausteine. Dabei bin ich allerdings leider grandios gescheitert. Vielleicht kann mir ja da jemand weiterhelfen. Sollte ja nicht das größte Problem sein. Vielen Dank schon einmal Mit freundlichen Grüßen Alex Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Thomas Harmening Ehrenmitglied V.I.P. h.c. Arbeiter ツ
Beiträge: 2897 Registriert: 06.07.2001 NX 10 Win 7
|
erstellt am: 25. Okt. 2013 17:38 <-- editieren / zitieren --> Unities abgeben: Nur für xlex
mach mal ein Watch auf die Variable bodyn, dann kommst du auch an den Namen, diesen kannst du dann verwenden um dein Stl vernünftig zu benennen Code:
selection1.Add bodyn Benennung = bodyn.name selection1.Copy [...] Set partDocument2 = CATIA.ActiveDocument partDocument2.ExportData "C:\Users\Alexander\Desktop\STL\" & Benennung & ".stl", "stl"
Edit: oki, Bernd hat es schöner - aber da fehlen glaube ich noch 2 " ;-) [Diese Nachricht wurde von Thomas Harmening am 25. Okt. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 25. Okt. 2013 17:40 <-- editieren / zitieren --> Unities abgeben: Nur für xlex
Servus Willkommen im Forum. Bitte Systeminfo ausfüllen. ggf hätte man dein Makro viel einfach aufbauen können (ungetestet): im Product die Parts einzeln alleine einblenden und dann Exportieren. Zu deinem Problem: Du kannst dir den Pfad zusammensetzen: Code: dim sPfad as String sPfad = "C:\Users\Alexander\Desktop\" & bodyn.name & ".stl" partDocument2.ExportData sPfad, "stl"
Gruß Bernd EDIT: Code korrigiert @Thomas: kann ich mir die beiden " bei dir ausleihen *grins* ------------------ Warum einfach, wenn es auch kompliziert geht. [Diese Nachricht wurde von bgrittmann am 25. Okt. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Henesli60 Mitglied Konstrukteur Betriebsmittelbau
Beiträge: 8 Registriert: 11.11.2017
|
erstellt am: 29. Okt. 2023 20:33 <-- editieren / zitieren --> Unities abgeben: Nur für xlex
Etwa so? Multi-Body CATIA-Part to STL+STP Code: Sub CATMain() 'Multi-Body CATIA-Part to STL+STP '********************************* 'Voraussetzung für den korrekten Ablauf Catiav5 Macro 'Sprache: VBScript 'V5 Level V5R21 'Autor: H. Studer '******************************** ' erst alle Bodies ausblenden 'dann den ersten Body einblenden, 'diesen als stl mit dem Namen des Body als STL speichern 'diesen ausblenden 'den nächsten Body einblenden 'diesn auch speichern....usw. 'Meldung ausgeben "alle Bodys wurden gespeichert 'alle Bodys wieder einblenden Dim Version, makroname, iErr Version = "0.1" makroname = "Multi-Body CATIA-Part to STL+STP" 'On Error Resume Next
'Meldung an den Anwender Schritte für korrekte Anwendung*********** 'Zeilenumbruch durch '&CHR(13) MsgBox "Export CATIA-Part Multi-Body zu STL+STP" & Chr(13) & "Speichert in Verzeichnis D:\CAD_Daten\Export_STL-STEP", vbInformation, makroname + " " + Version 'Ende Meldung***************************************************** 'Makro Hauptteil**************************** 'V5 wird direkt durch CATIA angesprochen 'z.B. CATIA.ActiveDocument Dim test As String test = CATIA.Application.FullName '********************************************************************************************** 'Schleife über alle Bodies '-------------------------------------- Dim partDocument1 Dim part1 Dim bodies1 Dim bodyn Dim n Set partDocument1 = CATIA.ActiveDocument Set part1 = partDocument1.Part Set bodies1 = part1.Bodies For n = 1 To bodies1.Count - 0 Set bodyn = bodies1.Item(n + 0) 'Body auswaehlen, neues Part erzeugen und als STL speichern '--------------------------------------------- Dim selection1 Dim Benennung Dim documents1 Dim documents2 Dim partDocument2 Dim selection2 Dim part2 Dim bodies2 Dim body2 Dim visPropertySet1 'Dim bodies1 Set partDocument1 = CATIA.ActiveDocument Set selection1 = partDocument1.Selection selection1.Clear Set part1 = partDocument1.Part Set bodies1 = part1.Bodies selection1.Add bodyn 'alle Bodies ausblenden****************** '*************************************************** Set visPropertySet1 = selection1.VisProperties selection1.Add bodyn Set visPropertySet1 = visPropertySet1.Parent visPropertySet1.SetShow 1 selection1.Clear Next '**************************************** ' Bodies nacheinander einblenden Speichern STL und wieder ausblenden '****Funktioniert noch nicht******************************** Set bodies1 = part1.Bodies For n = 1 To bodies1.Count - 0 Set bodyn = bodies1.Item(n + 0) Set visPropertySet1 = selection1.VisProperties selection1.Add bodyn Set visPropertySet1 = visPropertySet1.Parent Set partDocument2 = CATIA.ActiveDocument visPropertySet1.SetShow 0 Benennung = bodyn.Name Set partDocument2 = CATIA.ActiveDocument partDocument1.ExportData "D:\CAD_Daten\Export_STL-STEP\" & Benennung & ".stl", "stl" partDocument1.ExportData "D:\CAD_Daten\Export_STL-STEP\" & Benennung & ".stp", "stp" selection1.Add bodyn Set visPropertySet1 = visPropertySet1.Parent visPropertySet1.SetShow 1 selection1.Clear Next '**************************************** 'Makro Hauptteil ende *****************
'Fehler Ausgabe*********************** iErr = Err.Number If (iErr <> 0) Then MsgBox (Err.Description) Exit Sub End If 'Ende Fehlerbehandlung*************************** 'Abschlussmeldung an Anwender MsgBox "Makro ist beendet", vbInformation, makroname + " " + Version End Sub
Probiert es mal aus und gebt bitte Rückmeldung. ------------------ Langsamer gehts immer, zu schnell wirds schlimmer! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lionel Hutz Mitglied
Beiträge: 451 Registriert: 26.03.2014 CATIA V5 R26
|
erstellt am: 30. Okt. 2023 07:50 <-- editieren / zitieren --> Unities abgeben: Nur für xlex
Zitat: Original erstellt von Henesli60: Etwa so?
Ich verstehe deine Frage nicht. Etwa so? ;) Aber zu deinem Code: Das ganze Dim-Gedöns sollte geschenen sein, bevor deine Schleife beginnt. Sonst wird in jedem Durchlauf unnötigerweise neu deklariert. Und alle Variablen, die du per Set belegst, sollten auch vor der Schleife abgefrühstückt werden, es sei denn, du möchtest sie mit jedem Zyklus verändern (wie z.B. bei Set bodyn = bodies1.Item(n + 0)). Das stört auch alles beim Lesen des Codes. Folgende Vereinfachung des Codes schlage ich noch vor:
Code: partDocument1.ExportData "D:\CAD_Daten\Export_STL-STEP\" & Benennung & ".stl", "stl" partDocument1.ExportData "D:\CAD_Daten\Export_STL-STEP\" & Benennung & ".stp", "stp"
Catia kann die Dateiendung selbstständig vergeben. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Henesli60 Mitglied Konstrukteur Betriebsmittelbau
Beiträge: 8 Registriert: 11.11.2017
|
erstellt am: 30. Okt. 2023 09:01 <-- editieren / zitieren --> Unities abgeben: Nur für xlex
Hallo Lionel Hutz, die meisten meiner Kollegen hätten den ersten Satz gelesen und den Rest überlesen, bzw. nicht aufgenommen. Danke, dass Du Dir die Zeit genommen hast den Code durch zu lesen und konstruktive Kritik an zu bringen. Deinen Vorschlag, muss ich prüfen. Hab ohne VBA, jeweils bei meinem System, die Dateiendung löschen oder von Hand eintragen müssen. Das hat mich wohl dazu verleitet. oh nein das war im Original code von xlex. Wie der Code ja offensichtlich macht, die Funktion war Fokus. Alles andere ging aussen vor. Ich hoffe ich konnte einen funktionierenden Code aus den Schnipsel zusammen zu würfeln. Deshalb ja auch die Frage. ------------------ Langsamer gehts immer, zu schnell wirds schlimmer! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lionel Hutz Mitglied
Beiträge: 451 Registriert: 26.03.2014 CATIA V5 R26
|
erstellt am: 30. Okt. 2023 10:47 <-- editieren / zitieren --> Unities abgeben: Nur für xlex
|
husu Mitglied Konstrukteur
Beiträge: 17 Registriert: 17.09.2001
|
erstellt am: 30. Okt. 2023 15:31 <-- editieren / zitieren --> Unities abgeben: Nur für xlex
Für mich Funktioniert er! Für den 3D Druck muss ich STL Daten abspeichern mit dem Namen des Bodys. Die STP sind zu meiner Sicherheit, weil ich die Daten weder ansehen noch in Catia öffnen kann. Kein Recht zu Installation eines Viewer, noch nötige Lizenzen in Catia. ------------------ Konstuktion Betriebsmittel Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |