Save as using VB
Save as using VB
(OP)
Ok, I am trying to save out some solidworks drawing sheets with the maping on using VB. I can get the file to save out as the sheet name but the mapping never happens (aka: everything is on the same layer). Does anyone spot something in my code that is preventing this?
Public Enum swSaveAsVersion_e
swSaveAsCurrentVersion = 0 ' default
swSaveAsFormatProE = 2 ' save SolidWorks part as Pro/E format .prt/.asm extension (not as SolidWorks.prt/.asm)
End Enum
Public Enum swSaveAsOptions_e
swSaveAsOptions_Silent = &H1 ' Save document silently or not
swSaveAsOptions_Copy = &H2 ' Save document as a copy or not
swSaveAsOptions_SaveReferenced = &H4 ' Save referenced documents or not (drawings and parts only)
End Enum
Public Enum swFileSaveError_e
swGenericSaveError = &H1
swReadOnlySaveError = &H2
swFileNameEmpty = &H4 ' The filename cannot be empty
swFileNameContainsAtSign = &H8 ' The filename cannot contain an the at-sign character (@)
swFileLockError = &H10
swFileSaveFormatNotAvailable = &H20 ' The Save As file type is not valid
swFileSaveAsDoNotOverwrite = &H80 ' The user chose not to overwrite an existing file
swFileSaveAsInvalidFileExtension = &H100 ' The file extension differs from the SolidWorks document type
End Enum
Public Enum swFileSaveWarning_e
swFileSaveWarning_RebuildError = &H1 ' The file was saved with a rebuild error
End Enum
Public Enum swDxfFormat_e
swDxfFormat_R12 = 0
swDxfFormat_R13 = 1
swDxfFormat_R14 = 2
swDxfFormat_R2000 = 3
End Enum
Public Enum swArrowDirection_e
swINSIDE = 0
swOUTSIDE = 1
swSMART = 2
End Enum
Public Enum swUserPreferenceToggle_e
swDxfMapping = 8
swDXFDontShowMap = 21
End Enum
Public Enum swUserPreferenceIntegerValue_e
swDxfVersion = 0
swDxfOutputFonts = 1
swDxfMappingFileIndex = 2
swDxfOutputLineStyles = 135
swDxfOutputNoScale = 136
End Enum
Public Enum swUserPreferenceDoubleValue_e
swDxfOutputScaleFactor = 79
End Enum
Public Enum swUserPreferenceStringListValue_e
swDxfMappingFiles = 0
End Enum
Sub main()
Dim swApp As Object
Dim swModel As Object
Dim swDraw As Object
Dim vSheetName As Variant
Dim nErrors As Long
Dim nWarnings As Long
Dim nRetval As Long
Dim bShowMap As Boolean
Dim nNumSheet As Long
Dim i As Long
Dim bRet As Boolean
Set swApp = CreateObject("sldworks.application")
Set swModel = swApp.ActiveDoc
Set swDraw = swModel
' Current settings
Debug.Print "DxfMapping = " & swApp.GetUserPreferenceToggle(swDxfMapping)
Debug.Print "DXFDontShowMap = " & swApp.GetUserPreferenceToggle(swDXFDontShowMap)
Debug.Print "DxfVersion = " & swApp.GetUserPreferenceIntegerValue(swDxfVersion)
Debug.Print "DxfOutputFonts = " & swApp.GetUserPreferenceIntegerValue(swDxfOutputFonts)
Debug.Print "DxfMappingFileIndex = " & swApp.GetUserPreferenceIntegerValue(swDxfMappingFileIndex)
Debug.Print "DxfOutputLineStyles = " & swApp.GetUserPreferenceIntegerValue(swDxfOutputLineStyles)
Debug.Print "DxfOutputNoScale = " & swApp.GetUserPreferenceIntegerValue(swDxfOutputNoScale)
Debug.Print "DxfOutputScaleFactor = " & swApp.GetUserPreferenceDoubleValue(swDxfOutputScaleFactor)
Debug.Print "DxfMappingFiles = " & swApp.GetUserPreferenceStringListValue(swDxfMappingFiles)
Debug.Print ""
' Turn off showing of map
swApp.SetUserPreferenceToggle swDXFDontShowMap, False
vSheetName = swDraw.GetSheetNames
For i = 0 To UBound(vSheetName)
bRet = swDraw.ActivateSheet(vSheetName(i))
bRet = swModel.SaveAs4(vSheetName(i) & ".dxf", swSaveAsCurrentVersion, swSaveAsOptions_Silent, nErrors, nWarnings)
Debug.Assert bRet
Next i
' Switch back to first sheet
bRet = swDraw.ActivateSheet(vSheetName(0))
' Restore old setting
swApp.SetUserPreferenceToggle swDXFDontShowMap, bShowMap
End Sub
Public Enum swSaveAsVersion_e
swSaveAsCurrentVersion = 0 ' default
swSaveAsFormatProE = 2 ' save SolidWorks part as Pro/E format .prt/.asm extension (not as SolidWorks.prt/.asm)
End Enum
Public Enum swSaveAsOptions_e
swSaveAsOptions_Silent = &H1 ' Save document silently or not
swSaveAsOptions_Copy = &H2 ' Save document as a copy or not
swSaveAsOptions_SaveReferenced = &H4 ' Save referenced documents or not (drawings and parts only)
End Enum
Public Enum swFileSaveError_e
swGenericSaveError = &H1
swReadOnlySaveError = &H2
swFileNameEmpty = &H4 ' The filename cannot be empty
swFileNameContainsAtSign = &H8 ' The filename cannot contain an the at-sign character (@)
swFileLockError = &H10
swFileSaveFormatNotAvailable = &H20 ' The Save As file type is not valid
swFileSaveAsDoNotOverwrite = &H80 ' The user chose not to overwrite an existing file
swFileSaveAsInvalidFileExtension = &H100 ' The file extension differs from the SolidWorks document type
End Enum
Public Enum swFileSaveWarning_e
swFileSaveWarning_RebuildError = &H1 ' The file was saved with a rebuild error
End Enum
Public Enum swDxfFormat_e
swDxfFormat_R12 = 0
swDxfFormat_R13 = 1
swDxfFormat_R14 = 2
swDxfFormat_R2000 = 3
End Enum
Public Enum swArrowDirection_e
swINSIDE = 0
swOUTSIDE = 1
swSMART = 2
End Enum
Public Enum swUserPreferenceToggle_e
swDxfMapping = 8
swDXFDontShowMap = 21
End Enum
Public Enum swUserPreferenceIntegerValue_e
swDxfVersion = 0
swDxfOutputFonts = 1
swDxfMappingFileIndex = 2
swDxfOutputLineStyles = 135
swDxfOutputNoScale = 136
End Enum
Public Enum swUserPreferenceDoubleValue_e
swDxfOutputScaleFactor = 79
End Enum
Public Enum swUserPreferenceStringListValue_e
swDxfMappingFiles = 0
End Enum
Sub main()
Dim swApp As Object
Dim swModel As Object
Dim swDraw As Object
Dim vSheetName As Variant
Dim nErrors As Long
Dim nWarnings As Long
Dim nRetval As Long
Dim bShowMap As Boolean
Dim nNumSheet As Long
Dim i As Long
Dim bRet As Boolean
Set swApp = CreateObject("sldworks.application")
Set swModel = swApp.ActiveDoc
Set swDraw = swModel
' Current settings
Debug.Print "DxfMapping = " & swApp.GetUserPreferenceToggle(swDxfMapping)
Debug.Print "DXFDontShowMap = " & swApp.GetUserPreferenceToggle(swDXFDontShowMap)
Debug.Print "DxfVersion = " & swApp.GetUserPreferenceIntegerValue(swDxfVersion)
Debug.Print "DxfOutputFonts = " & swApp.GetUserPreferenceIntegerValue(swDxfOutputFonts)
Debug.Print "DxfMappingFileIndex = " & swApp.GetUserPreferenceIntegerValue(swDxfMappingFileIndex)
Debug.Print "DxfOutputLineStyles = " & swApp.GetUserPreferenceIntegerValue(swDxfOutputLineStyles)
Debug.Print "DxfOutputNoScale = " & swApp.GetUserPreferenceIntegerValue(swDxfOutputNoScale)
Debug.Print "DxfOutputScaleFactor = " & swApp.GetUserPreferenceDoubleValue(swDxfOutputScaleFactor)
Debug.Print "DxfMappingFiles = " & swApp.GetUserPreferenceStringListValue(swDxfMappingFiles)
Debug.Print ""
' Turn off showing of map
swApp.SetUserPreferenceToggle swDXFDontShowMap, False
vSheetName = swDraw.GetSheetNames
For i = 0 To UBound(vSheetName)
bRet = swDraw.ActivateSheet(vSheetName(i))
bRet = swModel.SaveAs4(vSheetName(i) & ".dxf", swSaveAsCurrentVersion, swSaveAsOptions_Silent, nErrors, nWarnings)
Debug.Assert bRet
Next i
' Switch back to first sheet
bRet = swDraw.ActivateSheet(vSheetName(0))
' Restore old setting
swApp.SetUserPreferenceToggle swDXFDontShowMap, bShowMap
End Sub






RE: Save as using VB
swApp.SetUserPreferenceToggle swDxfMapping, True
before:
swApp.SetUserPreferenceToggle swDXFDontShowMap, False
I've done a lot of saveAs-macro's. But my company doesn;t use layers so I dont really have experience with it.
Bouke Brouwers
P4 2,8 2Gb RAM, Quadro FX 500
SW2005 SP2.0
RE: Save as using VB
RE: Save as using VB
RE: Save as using VB
To do this I have a drawing open.
Go to File Save As.
Change file type to .dxf or .dwg.
Click the options button if the mapping isn't already enabled and enable it (if mapping is aready enabled you can skip this step).
And hit the save button.
Because I have a map file already set up I just hit ok when the "Solidworks To DXF/DWG Mapping" screen pops up.
Then there is a file saved, with layers.
Now if I could only do this with a macro.
RE: Save as using VB
Also add:
swApp.SetUserPreferenceToggle swDxfMapping, True
To force custom mapping on.
RE: Save as using VB
RE: Save as using VB
When you do the "Save As" to DXf, are you sure that the "Custom Map to Solidworks" option box is selected, and that it's pointing to the correct location for the mapping file?
RE: Save as using VB
RE: Save as using VB
Thanks for your help. I submited a help request through Solidworks apisupport division. The problem it seems was I was using Solidworks 2005 SP0.1. Once we upgraded to Solidworks 2005 SP02 the program worked.