| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS | | | | AMB 2024 |
Autor
|
Thema: DXF-Export bestimmter (1711 mal gelesen)
|
Xenomorph Mitglied Produktdesigner
Beiträge: 3 Registriert: 26.11.2009
|
erstellt am: 11. Dez. 2012 08:36 <-- editieren / zitieren --> Unities abgeben:
Hallo liebe Gemeinde Ich habe folgendes Problem: Ich möchte bestimmte Zeichnungsblätter oder Blätter mit einer bestimmten Benennung als DXF-Datei speichern. Kann mir einer einen Typ geben, ob dieses Thema schon irgendwo behandelt wurde oder wie ich das am Besten hinbekomme. Ich habe ein Makro am Start, welches alle Seiten einer 2D-Ableitung ausgibt. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Pete Riley Mitglied Student
Beiträge: 171 Registriert: 30.09.2012 "ZUSE I.36", 8 BIT, 32 Lämpchen, Service-Ölkännchen "ESSO-Super", Software: AO auf Kuhlmann-Parallelogramm-Plattform ** CSWP 04/2011 ** ** CSWE 08/2011 **
|
erstellt am: 21. Dez. 2012 23:49 <-- editieren / zitieren --> Unities abgeben: Nur für Xenomorph
|
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: 22. Dez. 2012 14:02 <-- editieren / zitieren --> Unities abgeben: Nur für Xenomorph
Hallo Xenomorph, und ein herzliches Willkommen im SolidWorks Brett auf CAD.de Ein fertiges Makro dafür hab ich jetzt nicht gesucht, aber hier im Brett und hoffentlich auch bei dir geht es ja mehr um Hilfe zur Selbsthilfe - fertige Makros im produktiven Umfeld estellt zu bekommen ist in der Regel eine kostenpflichtige Sache Du hast also schon ein Makro, dass Zeichnungsblätter als DXF speichern kann. Irgendwoher muss in diesem Makro ja der Name gebildet werden, hast du dir das mal angeschaut, wie das gemacht wird? Wenn du nur bestimmte Blätter als DXF speichern willst ist es nur nötig vorher den Blattnamen zu ermitteln und mit dem Filter zu vergleichen, die du exportieren möchtest (oder eben nicht). Wie weit bist du denn mit den Anpassungen in deinem Makro bzw. wo hängst du? Weißt du nicht, wie du "an die Blattnamen kommst? Das würde mit Sheet::GetName gehen - in der API Hilfe gibt es einBeispiel namens Get Sheet Numbers and Names Example (VBA)", vielleicht schaust du dir das auch mal an. Vielleicht kommst du mit diesen Denkanstößen schon weiter, ansonsten bitte beschreiben wo es hakt und warum du da nicht weiterkommst. Ciao, Stefan ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Xenomorph Mitglied Produktdesigner
Beiträge: 3 Registriert: 26.11.2009
|
erstellt am: 02. Jan. 2013 08:12 <-- editieren / zitieren --> Unities abgeben:
Hallo Stefan, erst einmal wünsche ich allen ein gesundes Jahr 2013! Ich habe mir das Makro von Deiner HP heruntergeladen und es so angepaßt, dass die Blätter in ein festgelegtes Verzeichnis (C:\Data\CAD\DXF_SWX_tmp) gepackt werden. Das war ja auch nicht weiter schwer. Ich möchte aber, dass nur die Blätter mit einer bestimmten Kennung, wie z.B. "Blatt 3 (DXF)" gespeichert werden. Da ich aber noch ein Neuling in Sachen Makroprogrammierung bis übersteigt das ein wenig meinen Horizont 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: 02. Jan. 2013 09:17 <-- editieren / zitieren --> Unities abgeben: Nur für Xenomorph
Hallo Xenomorph, Zitat: Original erstellt von Xenomorph: Ich möchte aber, dass nur die Blätter mit einer bestimmten Kennung, wie z.B. "Blatt 3 (DXF)" gespeichert werden. Da ich aber noch ein Neuling in Sachen Makroprogrammierung bis übersteigt das ein wenig meinen Horizont
Hm, da solltest du dich ein wenig mit den Grundlagen der Programmierung beschäftigen ... Ich hab dir den Code mal so geändert, dass du als Beispiel sehen kannst, wie du z.B. alls Blätter mit der Kennung "NC-" im Namen nicht als DXF speicherst; das solltest du dann entsprechend so ummodeln, wie du es brauchst. Code:
' ********************************************************************** ' * Makro erzeugt aus dem aktiven Zeichnungsdokument für alle Blätter ' * eine DXF Datei im Verzeichnis der Zeichnung. Es werden alle Blätter ' * unter dem Namen kombiniert mit dem Blattnamen abgespeichert. ' * ' * 05.04.2001 Stefan Berlitz (stefan.berlitz@solidworks.cad.de) ' * http://solidworks.cad.de ' * http://swtools.cad.de ' **********************************************************************Dim SwApp As Object Dim DrawingDoc As Object Dim Sheet As Object Dim Titel As String Dim Datei As String Dim temp As String Dim pfad As String Dim msgtxt As String Dim i As Long Dim AnzahlBl As Long Dim SheetName As String Const swDocDRAWING = 3 Sub main() Set SwApp = CreateObject("SldWorks.Application") Set DrawingDoc = SwApp.ActiveDoc If (DrawingDoc.GetType <> swDocDRAWING) Then ' wenn keine Zeichnung aktiv wird das Makro wieder beendet MsgBox "Nur für Zeichnungen geeignet" Exit Sub End If ' die Anzahl der Blätter holen, und dann in der Schleife eines nach ' dem anderen Abspeichern. Dazu ein Handle auf das aktuelle Blatt holen AnzahlBl = DrawingDoc.GetSheetCount Set Sheet = DrawingDoc.GetCurrentSheet ' damit die DXF anschließend im Verzeichnis der Zeichnung gespeichert werden ' muss der Pfad ermittelt werden. Ansonsten werden die DXFs im Verzeichnis ' des Makro gespeichert. Wenn man ein Sammelverzeichnis hat kann man das ' natürlich auch einfach direkt angeben ' temp = DrawingDoc.GetPathName temp = "C:\Data\CAD\DXF_SWX_tmp\" pfad = temp ' da wir nur den Pfad brauchen alles andere abtrennen ' For i = Len(temp) To 1 Step -1 ' If Mid$(temp, i, 1) = "\" Then ' pfad = Left(temp, i) ' Exit For ' End If ' Next i ' wenn mehr als ein Blatt da ist könnte es sein, dass wir nicht auf ' Blatt 1 sind. In einem Makro müssen wir jetzt einen Trick machen, um ' auf das erste Blatt zurückzukommen. ' Dazu immer wieder ein Blatt zurückspringen und dabei den Blattnamen ' vergleichen; wenn der gleich bleibt haben wir das erste Blatt erreicht. SheetName = Sheet.GetName For i = 1 To AnzahlBl - 1 DrawingDoc.SheetPrevious Set Sheet = DrawingDoc.GetCurrentSheet If (SheetName = Sheet.GetName) Then Exit For End If SheetName = Sheet.GetName Next i ' jetzt sind wir garantiert auf dem ersten Blatt und können jetzt eins ' nach dem anderen Abspeichern msgtxt = "" For i = 1 To AnzahlBl ' nur den Dokumentnamen holen (der in der Titelzeile von SolidWorks ' angezeigt wird) Titel = DrawingDoc.GetTitle ' und die Endung mit dem .slddrw abschneiden, wenn vorhanden If (InStr(Titel, ".sld") > 0) Then Datei = Left(Titel, InStr(Titel, ".sld") - 1) Else Datei = Titel End If ' *** hier steht jetzt in Datei der Name *** If InStr(1, Datei, "NC-") > 0 Then ' dann Blatt1 auslassen MsgBox "Blatt mit NC- im Namen ausgelassen" Else ' *** ' wir wollen alle Blätter als DXF mit den eingestellten Optionen abspeichern ' hier könnte auch z.B. einfach durch Umbenennen der Endung das Blatt als ' DWG (".dwg") oder TIFF (".tif") gespeichert werden. dabei werden aber ' jeweils die aktuellen Exportparameter benutzt, also würden z.B. alle ' TIFFs in derselben Größe abgespeichert. Datei = pfad & Datei & ".dxf" ' dann erfolgt das Speichern, die Parameter sind: ' DrawingDoc.SaveAs2 ( newName, unused, saveAsCopy, silent ) ' wenn alles geklappt hat, wird eine 0 zurückgeliefert, ansonsten ein ' Wert ungleich 0 If (DrawingDoc.SaveAs2(Datei, 0, True, False)) Then MsgBox "FEHLER BEIM SPEICHERN VON " & Datei & Chr$(10) & Chr$(13) msgtxt = msgtxt & "*** FEHLER bei: " & Datei & Chr$(10) & Chr$(13) Else msgtxt = msgtxt & "erfolgreich gespeichert: " & Datei & Chr$(10) & Chr$(13) End If End If ' und wenn noch Blätter kommen dieses aktivieren If AnzahlBl > i Then DrawingDoc.SheetNext End If Next i ' und noch die Zusammenfassung übers Speichern ausgeben MsgBox msgtxt End Sub
Ich weiß, dass es nicht genau das ist, was du haben möchtest, das ist aber Absicht - ich hoffe, du verstehst auf diese Weise wie es funktioniert, dass du es selbst abwandeln kannst und dadurch ein größeres Veständnis für die Programmierung aufbringst. Wenn du es einfach nur gemacht haben willst gilt natürlich auch hier derAufruf wie bei vielen meiner Makros auf freiwilliger Basis, deine örtliche Tafel wird es dir danken Ciao, Stefan ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|