| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS | | | | AMB 2024 |
Autor
|
Thema: SolidWorks API (2770 mal gelesen)
|
Pastry Mitglied
Beiträge: 6 Registriert: 23.08.2010
|
erstellt am: 04. Mai. 2011 09:46 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich bin gerade dabei, eine Programmierung zum automatischen Erstellen von DXFs aus SolidWorks-Zeichnungen zu machen. Nun habe ich folgendes Problem: Es existieren Zeichnungen mit mehr als einem Blatt. Nun hat man die Exportoption, nur das ActiveSheet als DXF zu exportieren. Leider exportiert mir mein Programm immer nur das erste Blatt. Die Programmierung sieht wie folgt aus: swApp.SetUserPreferenceIntegerValue(swDxfVersion, int_swDXFVersion) swApp.SetUserPreferenceIntegerValue(swDxfOutputFonts, int_swDXFOutputFonts) swApp.SetUserPreferenceIntegerValue(swDxfOutputLineStyles, int_swDXFOutputLineStyle) swApp.SetUserPreferenceIntegerValue(swDxfOutputNoScale, int_swDXFOutputNoScale) swApp.SetUserPreferenceToggle(swDXFDontShowMap, boo_swDXFDontShowMap) swApp.SetUserPreferenceToggle(swDxfMapping, True) swApp.SetUserPreferenceIntegerValue(swDxfMultiSheetOption, int_swDXFMultiSheet) Blattanzahl = swDrw.GetSheetCount If Blattanzahl > 1 Then For i = 0 To Blattanzahl - 1 swDrw.ActivateSheet(i) Zieldateiname_komplett = Zielpfad & Zieldateiname & "_" & i.ToString & ".dxf" swModel.SaveAs4(Zieldateiname_komplett, swSaveAsCurrentVersion, swSaveAsOptions_Silent, FileError, FileWarning) HF_tb_Status.AppendText(Now & ": Datei " & Zieldateiname_komplett & " wurde gespeichert." & vbCrLf) Next Else swDrw.ActivateSheet(0) Zieldateiname_komplett = Zielpfad & Zieldateiname & ".dxf" swModel.SaveAs4(Zieldateiname_komplett, swSaveAsCurrentVersion, swSaveAsOptions_Silent, FileError, FileWarning) HF_tb_Status.AppendText(Now & ": Datei " & Zieldateiname_komplett & " wurde gespeichert." & vbCrLf) End If swDrw.ActivateSheet(0) swApp.CloseDoc(Quelldatei_mit_Pfad) swApp.ExitApp() HF_tb_Status.AppendText(Now & ": SolidWorks wurde beendet." & vbCrLf) Für die Variable int_swDXFMultiSheet übergebe ich '0'. Ich arbeite mit Windows 7 64bit und SolidWorks 2011. Hat jemand eine Idee?? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ad_man Mitglied freiberuflicher Entwicklungsing. (Fahrzeugtechnik, CSWP, CPPA))
Beiträge: 1366 Registriert: 20.12.2003 SolidWorks 2023 SP5 mit Enterprise PDM , Windows 11, Dell Precision 3660, i7-12700K, 96 GB DDR-Ram, Quadro RTX A4000
|
erstellt am: 04. Mai. 2011 10:02 <-- editieren / zitieren --> Unities abgeben: Nur für Pastry
Hallo Pastry, da du einzelne DXF-Dateien pro Blatt haben möchtest, probier doch mal swDxfSeparateSheets in deiner int_swDXFMultiSheet-Variablen. ------------------ ========== Gruß Andreas ========== Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Pastry Mitglied
Beiträge: 6 Registriert: 23.08.2010
|
erstellt am: 04. Mai. 2011 10:23 <-- editieren / zitieren --> Unities abgeben:
Hallo ad_man, danke für die schnelle Antwort. Natürlich habe ich diese Einstellung schon versucht. Leider ändert SolidWorks dann automatisch die Dateinamen der erstellten DXF-Dateien. Da die Ergebnisse alle in einem Verzeichnispool landen, aus dem ich sie kontrolliert verteilen muss, wollte ich dies vermeiden. Gruß Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StefanBerlitz Guter-Geist-Moderator IT Admin (CAx)
Beiträge: 8756 Registriert: 02.03.2000 SunZu sagt: Analysiere die Vorteile, die du aus meinem Ratschlag ziehst. Dann gliedere deine Kräfte entsprechend und mache dir außergewöhnliche Taktiken zunutze.
|
erstellt am: 04. Mai. 2011 11:17 <-- editieren / zitieren --> Unities abgeben: Nur für Pastry
Hallo Pastry, wenn ich das richtig lese versuchst du in der Schleife mit swDrw.ActivateSheet(i) ein Blatt nach dem anderen zu aktivieren, um das zu speichern. Wenn du dir den Rückgabewert anschaust wirst du vermutlich feststellen, dass du jeweils ein "False" bekommst, weil das aktivieren nicht geklappt hat, weil du eine Zahl übergibst. Infolgedessen ist immer noch das erste Blatt aktiv und du bekommst es (wieder) als DXF. Laut API Hilfe musst du aber den Namen des Blattes als String übergeben. Mit DrawingDoc::GetSheetNames kommst du an ein Safearray der Blattnamen, das solltest du abklappern und entsprechend darüber alle Blätter aktivieren. Ciao, Stefan ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Stefans SolidWorks Blog Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Pastry Mitglied
Beiträge: 6 Registriert: 23.08.2010
|
erstellt am: 04. Mai. 2011 11:31 <-- editieren / zitieren --> Unities abgeben:
Hallo Stefan, vielen Dank für den Tipp. Ich habe mein Programm nun wie folgt umgestrickt und es funktioniert: Blattanzahl = swDrw.GetSheetCount ReDim Blattname(Blattanzahl - 1) If Blattanzahl > 1 Then Blattname = swDrw.GetSheetNames For i = 0 To Blattanzahl - 1 swDrw.ActivateSheet(Blattname(i)) Zieldateiname_komplett = Zielpfad & Zieldateiname & "_" & i.ToString & ".dwg" swModel.SaveAs4(Zieldateiname_komplett, swSaveAsCurrentVersion, swSaveAsOptions_Silent, FileError, FileWarning) HF_tb_Status.AppendText(Now & ": Datei " & Zieldateiname_komplett & " wurde gespeichert." & vbCrLf) Next Else swDrw.ActivateSheet(0) Zieldateiname_komplett = Zielpfad & Zieldateiname & ".dwg" swModel.SaveAs4(Zieldateiname_komplett, swSaveAsCurrentVersion, swSaveAsOptions_Silent, FileError, FileWarning) HF_tb_Status.AppendText(Now & ": Datei " & Zieldateiname_komplett & " wurde gespeichert." & vbCrLf) End If swDrw.ActivateSheet(0) swApp.CloseDoc(Quelldatei_mit_Pfad) swApp.ExitApp() HURRA! Nochmals vielen Dank. Gruß Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|