Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  dbWorks
  dxf-Export mittels SaveAs

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  dxf-Export mittels SaveAs (1905 mal gelesen)
ckoring
Mitglied
Ingenieur


Sehen Sie sich das Profil von ckoring an!   Senden Sie eine Private Message an ckoring  Schreiben Sie einen Gästebucheintrag für ckoring

Beiträge: 227
Registriert: 09.06.2009

Fujitsu CELSIUS M740
Intel Xeon E5-1620v4
32 GB RAM
Nvidia Quadro P4000
Windows 10 Pro
SolidWorks 2017 SP4.1
DBWorks R16 SP1.7

erstellt am: 29. Mrz. 2012 10:00    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


dbw_dxf-export1.png


dbw_dxf-export2.png

 
Hallo,

ich habe mal wieder ein ein Problem mit DBWorks, wo ich nicht weiterkommen und hoffe das mir jemand einen Tipp geben kann.

Zum Thema: Wir haben im Kontextmenü (\LST\AnyType, nur für Zeichnungen per .uivbs) ein Skript eingebunden welches Zeichnungen in dxf-Dateinen konvertiert. Das Ganze funktioniert wie gewünscht mit einer kleinen Einschränkung! Zum Export wird die SWX-Funktion SaveAs3(NewName,SaveAsVersion,Options) benutzt, diese verwendet die beim letzten Export genutzten dxf-Export-Optionen. D.h es kann nicht sichergestellt werden, dass die dxf-Dateien mit den richtigen Einstellungen erstellt wurden.

Daher möchte ich das Skript um das Setzten der Optionen ergänzen. Leider unterstützt die veraltete Methode SaveAs3() dies nicht, es werde immer die letztmals verwendeten Optionen benutzt. Die aktuelle Methode zum Speichern ist SaveAsSaveAs(Name,Version,Options,ExportData,Errors,Warnings) diese nutzt einen anderen Unterbau (IModelDocExtension) und andere Parameter, ist daher nicht 1:1 kompatibel. Ich habe den Funktionsumfang erfolgreich in ein Solidworks-Makro implementiert:

Code:
Sub main()
   
    ' nur im SWX-Makro
    Set DBWApp = Application.SldWorks
    exportedFileName = "C:\Users\ck\Documents\tmp\dxf\test.dxf"
   
    '<--- 28.03.2012 - Festlegen der Export-Optionen ergänzt
    Dim saveas_errors As Long
    Dim saveas_warnings As Long
    Set ActiveDoc = DBWApp.ActiveDoc
    Set swModel = DBWApp.ActiveDoc
    Set swModelDocExt = swModel.Extension
    saveas_errors = 0
    saveas_warnings = 0
   
    'swDxfMultiSheetOption[ 0=swDxfActiveSheetOnly 1=swDxfSeparateSheets 2=swDxfMultiSheet ]
    DBWApp.SetUserPreferenceIntegerValue swDxfMultiSheetOption, 2
    'swDxfVersion[ 0=swDxfFormat_R12 1=swDxfFormat_R13 2=swDxfFormat_R14 3=swDxfFormat_R2000 4=swDxfFormat_R2004 5=swDxfFormat_R2007 6=swDxfFormat_R2010 ]
    DBWApp.SetUserPreferenceIntegerValue swDxfVersion, 3
   
    MsgBox "swModelDocExt.SaveAs" & vbLf & vbTab & exportedFileName & vbLf & vbTab & "0=swSaveAsCurrentVersion" & vbLf & vbTab _
    & "1=swSaveAsOptions_Silent" & vbLf & vbTab & "Nothing" & vbLf & vbTab & "saveas_errors=" & saveas_errors & vbLf & vbTab & "saveas_warnings=" & saveas_warnings
   
    swModelDocExt.SaveAs exportedFileName, 0, 1, Nothing, saveas_errors, saveas_warnings
    'ok = swModelDocExt.SaveAs(exportedFileName, 0, 1, Nothing, errors, warnings)
    '--->

End Sub


Das Einfügen in das DBWorks-Skript war aber nicht von Erfolg gekrönt! Ich bekomme eine Fehlermeldung wegen einer Typenunverträglichkeit in der Zeile mit dem SaveAs-Aufruf (siehe Screenshot). Ich vermute dass es am "Nothing" liegt, weis aber nicht wie ich das umgehen kann. Der Parameter ExportData ist vom Typ Object und außer beim PDF-Export mit "Nothing" zu verwenden (API sldworks.IModelDocExtension.SaveAs).

Zweite Möglichkeit wären die Variablen saveas_errors und saveas_warnings. Hier macht die Deklaration im DBWorks-Skript Probleme. Bekomme die Fehlermeldung "Anweisungsende erwartet", siehe Screenshot. Darf ich hier bei der Deklaration keinen Datentypangeben?

Hoffe mal das mir einer hier helfen kann!

cheers ckoring

[Diese Nachricht wurde von ckoring am 29. Mrz. 2012 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Michael Fröse
Mitglied
Anwendungsberater Mixed Realiy


Sehen Sie sich das Profil von Michael Fröse an!   Senden Sie eine Private Message an Michael Fröse  Schreiben Sie einen Gästebucheintrag für Michael Fröse

Beiträge: 25
Registriert: 22.04.2010

erstellt am: 29. Mrz. 2012 14:26    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für ckoring 10 Unities + Antwort hilfreich

Hallo,

du kannst ein VisualBasicforApplications(VBA) Makro nicht einfach in ein DBWorks Skript kopieren,
da die DBWorks Skripte VisualBasicSkripte(VBS) sind und VBS im Gegensatz zu VBA nur den Datentyp Variant kennt.

Aus Dim saveas_errors As Long muss also Dim saveas_errors  werden.

In deinem Codeschnipsel fehlt auch eine Routine zum öffnen und ggfls. schließen der Zeichnung, so das du eine Fehlermeldung bekommen wirst wenn du das Skript bei geschlossener Zeichnung ausführst.

Nicht zuletzt solltest du die Lösung mit dem Skript \LST\AnyType und *.uivbs überdenken, wies packt Ihr das Skript nicht in \LST\D wo Skripte die nur für Zeichnungen angezeigt werden sollen hingehören? Viele uivbs sind eine deutliche Performancebremse.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

ckoring
Mitglied
Ingenieur


Sehen Sie sich das Profil von ckoring an!   Senden Sie eine Private Message an ckoring  Schreiben Sie einen Gästebucheintrag für ckoring

Beiträge: 227
Registriert: 09.06.2009

Fujitsu CELSIUS M740
Intel Xeon E5-1620v4
32 GB RAM
Nvidia Quadro P4000
Windows 10 Pro
SolidWorks 2017 SP4.1
DBWorks R16 SP1.7

erstellt am: 29. Mrz. 2012 15:13    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hi Michael,

wo konkret die Unterschiede zwischen VBA und VBS sind war mir nicht bewußt. Wie vorgeschlagen habe ich das "As Long" entfernt. Leider war es das scheinbar noch nicht. Bekomme weiterhin die Fehlermeldung bzgl. Typenunverträglichkeit. Aber wie kann es eine Typenunverträglichkeit geben wenn eh alle Variablen vom Typ "Variant" sind?!

Hab schon gedacht es liegt daran das die Parameter "Errors und "Warnings" byRef übergeben werden. Habe im Netz aber nix gefunden das VBS das nicht unterstützt.

Code für das Öffnen und Schließen ist natürlich vorhanden und funktioniert wie gewünscht. Das ursprüngliche Skript kommt von unserem Reseller, daher die Sache mit AnyType/uivbs. Ich weiß nicht ob ich das hier so in Gänze einstellen darf, daher nur der Auschnitt:

Code:
...
Call  DBWSetOption ("OPEN_IN_VIEW_ONLY_IF_RELEASED", 0)

DBWShell( "OpenDocument " & uniqueId )

DBWSetOption "OPEN_IN_VIEW_ONLY_IF_RELEASED", 1

if (okDBW = False) then
DBWMSGBox " Fehler beim Öffnen der Datei: " & NR_FELD
exit function
End If

'<--- 28.03.2012 - Festlegen der Export-Optionen ergänzt
Dim saveas_errors
Dim saveas_warnings
Set ActiveDoc = DBWApp.ActiveDoc
Set swModel = DBWApp.ActiveDoc
Set swModelDocExt = swModel.Extension
saveas_errors = 0
saveas_warnings = 0

'swDxfMultiSheetOption[ 0=swDxfActiveSheetOnly 1=swDxfSeparateSheets 2=swDxfMultiSheet ]
DBWApp.SetUserPreferenceIntegerValue swDxfMultiSheetOption, 2
'swDxfVersion[ 0=swDxfFormat_R12 1=swDxfFormat_R13 2=swDxfFormat_R14 3=swDxfFormat_R2000 4=swDxfFormat_R2004 5=swDxfFormat_R2007 6=swDxfFormat_R2010 ]
DBWApp.SetUserPreferenceIntegerValue swDxfVersion, 3

DBWMsgbox "swModelDocExt.SaveAs" & vbLf & vbTab & exportedFileName & vbLf & vbTab & "0=swSaveAsCurrentVersion" & vbLf & vbTab _
& "1=swSaveAsOptions_Silent" & vbLf & vbTab & "Nothing" & vbLf & vbTab & "saveas_errors=" & saveas_errors & vbLf & vbTab & "saveas_warnings=" & saveas_warnings


swModelDocExt.SaveAs exportedFileName, 0, 1, Nothing, saveas_errors, saveas_warnings
'ok = swModelDocExt.SaveAs(exportedFileName, 0, 1, Nothing, errors, warnings)
'--->

set activeDoc = Nothing

call DBWShell( "SWClose" )
...


Werde wohl mal paralell unseren Reseller darauf ansetzten. Man nutzt die "Vorteile" eines Wartungsvertrages viel zu selten! 

cheers ckoring

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Michael Fröse
Mitglied
Anwendungsberater Mixed Realiy


Sehen Sie sich das Profil von Michael Fröse an!   Senden Sie eine Private Message an Michael Fröse  Schreiben Sie einen Gästebucheintrag für Michael Fröse

Beiträge: 25
Registriert: 22.04.2010

erstellt am: 29. Mrz. 2012 15:38    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für ckoring 10 Unities + Antwort hilfreich

Hallo ckoring,

in dem Skriptausschnitt gibt es noch einige Fallstricke.
Die Optionen werden immer fest gesetzt, aber hinterher nicht  auf den Ursprungswert zurückgesetzt, so das die Option nachdem das Skript gelaufen ist immer an ist.

Zitat:
Call  DBWSetOption ("OPEN_IN_VIEW_ONLY_IF_RELEASED", 0)
DBWShell( "OpenDocument " & uniqueId )
DBWSetOption "OPEN_IN_VIEW_ONLY_IF_RELEASED", 1

In dem Schnippsel kann Ich auch nicht erkennen ob z.B. die Variable swDxfVersion irgendwo initialisiert wird, die steht sonst so nicht zur Verfügung.

Zitat:
DBWApp.SetUserPreferenceIntegerValue swDxfVersion, 3

Das hier scheint mir auch doppelt gemoppelt:

Zitat:
  Set ActiveDoc = DBWApp.ActiveDoc
    Set swModel = DBWApp.ActiveDoc

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

BerndB
Mitglied
Ingenieur


Sehen Sie sich das Profil von BerndB an!   Senden Sie eine Private Message an BerndB  Schreiben Sie einen Gästebucheintrag für BerndB

Beiträge: 611
Registriert: 28.09.2001

erstellt am: 10. Apr. 2012 14:29    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für ckoring 10 Unities + Antwort hilfreich

Hallo Makromanen,

evtl. rufst du in dem Script ja das Makro auf, das bei SWXSolidWorks funktioniert?

Alle Sachen die etwas umfangreicher sind, mache ich immer so.

Kann dann viel besser das Makro testen
als im Skript herumzueiern..

Anderer Weg

Im Skript Datei öffnen
SWXSolidWorks Makro zum Speichern nutzen
Im Skript auf ergebnis der Speicherung warten
...

Oder mal mit VIsial Studio einsteigen und dort "richtig Programmieren"

Die exe oder dll läßt sich dann aus dem Skrit aufrufen

Viele Wege hier in Kombination möglich

Gruß

Bernd

------------------
Complaining about the way wheels never worked properly however often you laid them flat and pushed them.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz