31 Replies Latest reply on May 21, 2014 12:38 PM by Lee CS Young

    Using Draftsight to generate a PDF for EPDM Workflow transition of a .DWG file

    Pete Yodis

      I have seen some posts regarding automatic PDF file creation of DWG files using AutoCAD.  I am wondering if Draftsight can be used with EPDM to automatically have a PDF created upon drawing approval, just like the canned task for SolidWorks functions.  We are early in our setup of an EPDM vault and I would like DWG drawing files and SLDDRW drawing files to go through the same automated eletronic sign-off and PDF creation process.  I really don't want users to follow another workflow for DWG files where they would have to generate a PDF manually and check in and create a reference to the DWG file. 

       

      Has anyone had any success in what I am interested in doing?  It seems like this would be a natural fit for SolidWorks and EPDM eventually.

       

      Pete

        • Re: Using Draftsight to generate a PDF for EPDM Workflow transition of a .DWG file
          Michael Dekoning

          Yes, this can be done just like it can with AutoCAD. However, you have to have DraftSight with the Premium Pack in order to have access to the API to automate the PDF creation process.

          • Re: Using Draftsight to generate a PDF for EPDM Workflow transition of a .DWG file
            Jeff Sweeney

            What are you looking for that the out of the box convert task cannot do? The convert task will make a PDF from a DWG.

                • Re: Using Draftsight to generate a PDF for EPDM Workflow transition of a .DWG file
                  Pete Yodis

                  I just tried it on an A size portrait DWG file... Here is the result.

                   

                  Capture.JPG

                   

                  The PDF gets created, but on some default template in SolidWorks...  Not sure if there is enough there to get the settings right for this to happen in SolidWorks... I also see that an error file gets created in the vault... not happy about that...  I don't know how this would properly handle A, B, C, and D size prints.

                   

                   

                    • Re: Using Draftsight to generate a PDF for EPDM Workflow transition of a .DWG file
                      Jeff Sweeney

                      Have you modified the macro that runs inside of the convert task in some way? The routine should simply open the file and do a SaveAs. Nothing out of the box should be adding a titleblock.

                        • Re: Using Draftsight to generate a PDF for EPDM Workflow transition of a .DWG file
                          Pete Yodis

                          Here is the script of the canned task-add in that we used.  I don't beleive we modified it at all...

                           

                           

                          Dim swApp As Object

                          Dim swModel As SldWorks.ModelDoc2

                          Dim swDrawing As SldWorks.DrawingDoc

                          Dim swAssembly As SldWorks.AssemblyDoc

                          Dim swExtension As SldWorks.ModelDocExtension

                          Dim swConfMgr As SldWorks.ConfigurationManager

                          Dim swPDFExport As SldWorks.ExportPdfData

                          Dim swDocSpecification As SldWorks.DocumentSpecification

                          Dim FileSystemObj as Object

                          Dim errors As Long

                          Dim warnings As Long

                          #If VBA7 Then

                          Private Declare PtrSafe Function SHCreateDirectoryEx Lib "shell32" Alias "SHCreateDirectoryExA" (ByVal hwnd As Long, ByVal pszPath As String, ByVal psa As Any) As Long

                          Private Declare PtrSafe Function PathIsRelative Lib "shlwapi.dll" Alias "PathIsRelativeA" (ByVal pszPath As String) As Long

                          #Else

                          Private Declare Function SHCreateDirectoryEx Lib "shell32" Alias "SHCreateDirectoryExA" (ByVal hwnd As Long, ByVal pszPath As String, ByVal psa As Any) As Long

                          Private Declare Function PathIsRelative Lib "shlwapi.dll" Alias "PathIsRelativeA" (ByVal pszPath As String) As Long

                          #End If

                          Function PathAppend(path, more) As String

                          If Not Right(path, 1) = "\" Then

                          path = path & "\"

                          End If

                          If Left(more, 1) = "\" Then

                          more = Mid(more, 2)

                          End If

                          PathAppend = path & more

                          End Function

                          Sub Log(message)

                          Dim errorLogFolder As String

                          Dim errorLogPath As String

                          ' Determine error log output path

                          errorLogFolder = "[ErrorLogPath]"

                           

                          ' Trim \ from the start

                          If Left(errorLogFolder, 1) = "\" Then

                          errorLogFolder = Mid(errorLogFolder, 2)

                          End If

                          ' Build full root

                          If PathIsRelative( errorLogFolder ) = 1 Then

                          errorLogPath = PathAppend("<VaultPath>", errorLogFolder)

                          Else

                          errorLogPath = errorLogFolder

                          End If

                           

                          ' Create directory if not exists

                          SHCreateDirectoryEx ByVal 0&, errorLogPath, ByVal 0&

                          errorLogPath = PathAppend(errorLogPath, "<TaskInstanceGuid>.log")

                          ' Write error to output file

                          Open errorLogPath For Append As #1

                          Print #1, message

                          Close #1

                          End Sub

                          Sub CreatePath(path)

                          ' Create directory if not exists

                          If SHCreateDirectoryEx(ByVal 0&, path, ByVal 0&) = 0 Then

                          ' Create temp file

                          Open path & "~$holder" For Append As #1

                          Close #1

                          End If

                          End Sub

                          Sub KillHolder(path)

                          On Error Goto Ignore

                          If FileSystemObj.FileExists(path & "~$holder") Then

                          Kill path & "~$holder"

                          End If

                          Ignore:

                          End Sub

                          Function GetExtension(docType, fileFormat)

                          first = InStr(1, fileFormat, "(")

                          last = InStr(first, fileFormat, ")")

                          extensions = Mid(fileFormat, first + 1, last - first - 1)

                           

                          If InStr(1, extensions, ";") > 0 Then

                          Dim all As Variant

                          all = Split(extensions, ";")

                           

                          If UBound(all) >= docType - 1 Then

                          ext = all(docType - 1)

                          Else

                          ext = "*." ' Nothing

                          End If

                          Else

                          ext = extensions

                          End If

                           

                          GetExtension = Mid(Trim(ext), 2)

                          End Function

                          Sub SetConversionOptions(ext)

                          ' PDF options

                          If LCase(ext) = ".pdf" Then

                          swApp.SetUserPreferenceToggle swPDFExportInColor, [PdfInColor]

                          swApp.SetUserPreferenceToggle swPDFExportEmbedFonts, [PdfEmbedFonts]

                          swApp.SetUserPreferenceToggle swPDFExportHighQuality, [PdfHighQuality]

                          swApp.SetUserPreferenceToggle swPDFExportPrintHeaderFooter, [PdfPrintHeaderFooter]

                          swApp.SetUserPreferenceToggle swPDFExportUseCurrentPrintLineWeights, [PdfUsePrinterLineWeights]

                          ' IGES

                          ElseIf LCase(ext) = ".igs" Then

                          swApp.SetUserPreferenceToggle swIGESExportSolidAndSurface, [IgesExportSolidSurface]

                          swApp.SetUserPreferenceIntegerValue swIGESRepresentation, [IgesRepresentation]

                          swApp.SetUserPreferenceToggle swIGESExportAsWireframe, [IgesExportWireframe]

                          swApp.SetUserPreferenceIntegerValue swIGESCurveRepresentation, [IgesCurveRepresentation]

                          swApp.SetUserPreferenceIntegerValue swIGESSystem, [IgesSystem]

                          swApp.SetUserPreferenceToggle swIGESExportFreeCurves, [IgesExportFreeCurves]

                          swApp.SetUserPreferenceToggle swIGESExportSketchEntities, [IgesExportSketchEntities]

                          swApp.SetUserPreferenceToggle swIGESHighTrimCurveAccuracy, [IgesHighCurveAccuracy]

                          swApp.SetUserPreferenceToggle swIGESComponentsIntoOneFile, [IgesComponentsIntoOneFile]

                          swApp.SetUserPreferenceToggle swIGESFlattenAssemHierarchy, [IgesFlattenAssemblyHierarchy]

                          ' ACIS

                          ElseIf LCase(ext) = ".sat" Then

                          swApp.SetUserPreferenceIntegerValue swAcisOutputGeometryPreference, [AcisGeometry]

                          swApp.SetUserPreferenceIntegerValue swOutputVersion, [AcisVersion]

                          swApp.SetUserPreferenceIntegerValue swAcisOutputUnits, [AcisOutputAsUnit]

                          ' STEP

                          ElseIf LCase(ext) = ".step" Then

                          swApp.SetUserPreferenceIntegerValue swAcisOutputGeometryPreference, [StepGeometry]

                          swApp.SetUserPreferenceIntegerValue swStepAP, [StepVersion]

                          ' Parasolid

                          ElseIf LCase(ext) = ".x_t" Or LCase(ext) = ".x_b" Then

                          swApp.SetUserPreferenceIntegerValue swParasolidOutputVersion, [ParasolidVersion]

                          swApp.SetUserPreferenceToggle swXTAssemSaveFormat, [ParasolidFlattenHierarchy]

                          ' VRML

                          ElseIf LCase(ext) = ".wrl" Then

                          swApp.SetUserPreferenceIntegerValue swExportVrmlUnits, [VrmlOutputAsUnit]

                          swApp.SetUserPreferenceToggle swExportVrmlAllComponentsInSingleFile, [VrmlSaveAssemblyAsOneFile]

                          ' STL

                          ElseIf LCase(ext) = ".stl" Then

                          swApp.SetUserPreferenceToggle swSTLBinaryFormat, [StlOutputAs]

                          swApp.SetUserPreferenceIntegerValue swExportStlUnits, [StlOutputAsUnit]

                          swApp.SetUserPreferenceIntegerValue swSTLQuality, [StlQuality]

                          swApp.SetUserPreferenceToggle swSTLDontTranslateToPositive, [StlDontTranslatePositive]

                          swApp.SetUserPreferenceToggle swSTLComponentsIntoOneFile, [StlComponentsIntoOneFile]

                          swApp.SetUserPreferenceToggle swSTLCheckForInterference, [StlCheckForInterferences]

                          ' TIF or PSD

                          ElseIf LCase(ext) = ".tif" Or LCase(ext) = ".psd" Then

                          swApp.SetUserPreferenceIntegerValue swTiffImageType, [TifImageType]

                          swApp.SetUserPreferenceIntegerValue swTiffCompressionScheme, [TifCompressionScheme]

                          ' eDrawings

                          ElseIf LCase(ext) = ".eprt" Or LCase(ext) = ".easm" Or LCase(ext) = ".edrw" Then

                          swApp.SetUserPreferenceToggle swEDrawingsOkayToMeasure, [EdrwOkayToMeasure]

                          swApp.SetUserPreferenceToggle swEDrawingsExportSTLOkay, [EdrwAllowExportOfSTL]

                          swApp.SetUserPreferenceToggle swEDrawingsSaveShadedDataInDrawings, [EdrwSaveShadedData]

                          swApp.SetUserPreferenceToggle swEDrawingsSaveBOM, [EdrwSaveBOM]

                          swApp.SetUserPreferenceToggle swEDrawingsSaveAnimationOkay, [EdrwSaveMotionStudies]

                          swApp.SetUserPreferenceToggle swEDrawingsSaveAnimationToAllConfigs, [EdrwSaveMotionStudiesToAllConfs]

                          swApp.SetUserPreferenceToggle swEDrawingsSaveAnimationRecalculate, [EdrwRecalcMotionStudies]

                          End If

                          End Sub

                          Function GetFullFileName(convFileName, conf, i, itemCount)

                          ' Configuration name may include backslash. Remove it since otherwise saving will

                          ' fail due a missing directory

                          conf = Replace(conf, "\", "")

                          conf = Replace(conf, "/", "")

                           

                          finalFileName = Replace(convFileName, "<Configuration>", conf)

                           

                          ' If no configuration

                          If finalFileName = convFileName And itemCount > 0 Then

                          finalFileName = Left(convFileName, InStrRev(convFileName, ".") - 1) & "_" & i & Mid(convFileName, InStrRev(convFileName, "."))

                          End If

                           

                          ' Remove illegal characters from filename

                          finalFileName = Replace(finalFileName, "<", "")

                          finalFileName = Replace(finalFileName, ">", "")

                          finalFileName = Left(finalFileName, 2) + Replace(finalFileName, ":", "", 3) ' Don't start from begin since drive has :

                          finalFileName = Replace(finalFileName, "*", "")

                          finalFileName = Replace(finalFileName, "?", "")

                          finalFileName = Replace(finalFileName, """", "")

                          finalFileName = Replace(finalFileName, "|", "")

                           

                          GetFullFileName = finalFileName

                          End Function

                          Sub Convert(docFileName)

                           

                          ' Constants for some SolidWorks error/warning returns that may be encountered during a convert operation.

                          Const swerr_InvalidFileExtension = 256 ' the file extension differs from the SW document type.

                          Const swerr_SaveAsNotSupported = 4096 ' the options selected for this convert aren't supported, output may be incomplete.

                          Const swwarn_MissingOLEObjects = 512 ' the document contains OLE objects and must be opened and converted in SolidWorks.

                          ' Determine type of SolidWorks file based on file extension

                          If LCase(Right(docFileName, 7)) = ".sldprt" Or LCase(Right(docFileName, 4)) = ".prt" Then

                          docType = swDocPART

                          ElseIf LCase(Right(docFileName, 7)) = ".sldasm" Or LCase(Right(docFileName, 4)) = ".asm" Then

                          docType = swDocASSEMBLY

                          ElseIf LCase(Right(docFileName, 7)) = ".slddrw" Or LCase(Right(docFileName, 4)) = ".drw" Then

                          docType = swDocDRAWING

                          Else

                          docType = swDocNONE

                          If bIsSupportedExtension(Mid(docFileName, InStrRev(docFileName, ".") + 1)) = False Then

                          Log "The file extension '" & Mid(docFileName, InStrRev(docFileName, ".") + 1) & "' is not supported."

                          Exit Sub

                          End If

                          End If

                           

                          ' Open document

                          If docType = swDocNONE Then

                          Set swModel = swApp.LoadFile4(docFileName, "", Nothing, errors)

                          docType = swModel.GetType

                          Else

                          Set swDocSpecification = swApp.GetOpenDocSpec(docFileName)

                          swDocSpecification.DocumentType = docType

                          swDocSpecification.ReadOnly = True

                          swDocSpecification.Silent = True

                          swDocSpecification.ConfigurationName = ""

                          swDocSpecification.DisplayState = ""

                          Set swModel = swApp.OpenDoc7(swDocSpecification)

                          errors = swDocSpecification.Error

                          ' Set swModel = swApp.OpenDoc6(docFileName, docType, swOpenDocOptions_Silent Or swOpenDocOptions_ReadOnly, "", errors, warnings)

                          End If

                           

                          If errors = swFutureVersion Then

                          Log "Document '" & docFileName & "' is future version."

                          Exit Sub

                          End If

                          ' Load failed?

                          If swModel Is Nothing Then

                          Log "Method call ModelDoc2::OpenDoc7 for document '" & docFileName & "' failed. Error code " & errors & " returned."

                          Exit Sub

                          End If

                           

                          If Val(Left(swApp.RevisionNumber, 2)) >= 18 Then

                          swApp.Frame.KeepInVisible = True

                          End If

                          swApp.ActivateDoc2 docFileName, True, errors

                          modelPath = swModel.GetPathName()

                          If modelPath = "" Then

                          modelPath = docFileName

                          End If

                          modelFileName = Mid(modelPath, InStrRev(modelPath, "\") + 1)

                          modelFileName = Left(modelFileName, InStrRev(modelFileName, ".") - 1)

                          modelExtension = Mid(modelPath, InStrRev(modelPath, ".") + 1)

                          ' Build destination filenames

                          convFileName = "[OutputPath]"

                           

                          Dim convFileName2 As String

                          convFileName2 = "[OutputPath2]"

                          Dim convFilePath2 As String

                          Dim convFileNameTemp2 As String

                           

                          Dim bSecondOutput As Boolean

                          bSecondOutput = False

                          If (Len(convFileName2) > 0) Then

                          bSecondOutput = True

                          End If

                           

                          ext = GetExtension(docType, "[FileFormat]")

                           

                          convFileName = Replace(convFileName, "<Filename>", modelFileName)

                          convFileName = Replace(convFileName, "<Extension>", modelExtension)

                          convFilePath = Left(convFileName, InStrRev(convFileName, "\"))

                          CreatePath convFilePath

                          convFileName = convFileName & ext

                           

                          If bSecondOutput = True Then

                          convFileName2 = Replace(convFileName2, "<Filename>", modelFileName)

                          convFileName2 = Replace(convFileName2, "<Extension>", modelExtension)

                          convFilePath2 = Left(convFileName2, InStrRev(convFileName2, "\"))

                          CreatePath convFilePath2

                          convFileName2 = convFileName2 & ext

                          End If

                           

                          ' Set conversion options

                          SetConversionOptions ext

                           

                          Set swExtension = swModel.Extension

                           

                          If docType = swDocDRAWING Then

                          Dim vSheetNames As Variant

                          Set swDrawing = swModel

                           

                          ' All sheets?

                          If ([OutputSheets] And 2) = 2 Then

                          vSheetNames = swDrawing.GetSheetNames

                          ' Last active sheet?

                          ElseIf ([OutputSheets] And 4) = 4 Then

                          ReDim vSheetNames(0 to 0) As Variant

                          vSheetNames(0) = swDrawing.GetCurrentSheet.GetName()

                          ' Named sheet

                          ElseIf ([OutputSheets] And 8) = 8 Then

                          Dim vSheetNamesTemp As Variant

                          vSheetNamesTemp = swDrawing.GetSheetNames

                          removed = 0

                           

                          For i = 0 To UBound(vSheetNamesTemp)

                          vSheetNamesTemp(i-removed) = vSheetNamesTemp(i)

                          sheetName = vSheetNamesTemp(i)

                           

                          If Not sheetName Like "[NamedSheet]" Then

                          removed = removed + 1

                          EndIf

                          Next i

                           

                          If (UBound(vSheetNamesTemp) - removed) >= 0 Then

                          ReDim Preserve vSheetNamesTemp(0 To (UBound(vSheetNamesTemp) - removed))

                          vSheetNames = vSheetNamesTemp

                          End If

                          End If

                          If Not IsEmpty(vSheetNames) Then

                          ' Save sheets one per file

                          If ([FileSheets] And 4) = 4 Then

                          For i = 0 To UBound(vSheetNames)

                          Dim varSheetName As Variant

                          swDrawing.ActivateSheet vSheetNames(i)

                          convFileNameTemp = GetFullFileName(convFileName, vSheetNames(i), i, UBound(vSheetNames))

                          If LCase(ext) = ".pdf" Then

                          Set swPDFExport = swApp.GetExportFileData(1)

                          varSheetName = vSheetNames(i)

                          swPDFExport.SetSheets swExportData_ExportSpecifiedSheets, varSheetName

                          ElseIf LCase(ext) = ".edrw" Then

                          swApp.SetUserPreferenceIntegerValue swEdrawingsSaveAsSelectionOption, swEdrawingSaveActive

                          End If

                          ' Convert the document

                          Success = swExtension.SaveAs(convFileNameTemp, swSaveAsCurrentVersion, swSaveAsOptions_Silent, swPDFExport, errors, warnings)

                           

                          ' Save failed?

                          If Success = False Then

                          If errors = swerr_InvalidFileExtension Then

                          Log "The file '" & docFileName & "' and sheet '" & vSheetNames(i) & "' can't be converted to the file extension '" & ext & "'."

                          Else

                          Log "Method call ModelDocExtension::SaveAs for document '" & convFileNameTemp & "' and sheet '" & vSheetNames(i) & "' failed. Error code " & errors & " returned."

                          If (((errors And swerr_SaveAsNotSupported) <> 0) And ((warnings And swwarn_MissingOLEObjects) <> 0)) Then

                          Log "This document contains OLE objects. Such objects can't be converted outside of SolidWorks. Please open the document and perform the conversion from SolidWorks."

                          End If

                          End if

                          End If

                           

                          If bSecondOutput = True Then

                          convFileNameTemp2 = GetFullFileName(convFileName2, vSheetNames(i), i, UBound(vSheetNames))

                          Success = swExtension.SaveAs(convFileNameTemp2, swSaveAsCurrentVersion, swSaveAsOptions_Silent, swPDFExport, errors, warnings)

                          ' Save failed?

                          If Success = False Then

                          If errors = swerr_InvalidFileExtension Then

                          Log "The file '" & docFileName & "' and sheet '" & vSheetNames(i) & "' can't be converted to the file extension '" & ext & "'."

                          Else

                          Log "Method call ModelDocExtension::SaveAs for document '" & convFileNameTemp2 & "' and sheet '" & vSheetNames(i) & "' failed. Error code " & errors & " returned."

                          If (((errors And swerr_SaveAsNotSupported) <> 0) And ((warnings And swwarn_MissingOLEObjects) <> 0)) Then

                          Log "This document contains OLE objects. Such objects can't be converted outside of SolidWorks. Please open the document and perform the conversion from SolidWorks."

                          End If

                          End if

                          End If

                          End If

                          Next i

                          ' Save PDF sheets to one file

                          ElseIf ([FileSheets] And 2) = 2 Then

                           

                          If LCase(ext) = ".pdf" Then

                          Set swPDFExport = swApp.GetExportFileData(swExportPdfData)

                          swPDFExport.SetSheets swExportData_ExportSpecifiedSheets, vSheetNames

                          ElseIf LCase(ext) = ".edrw" Then

                          If ([OutputSheets] And 2) = 2 Then ' All sheets?

                          swApp.SetUserPreferenceIntegerValue swEdrawingsSaveAsSelectionOption, swEdrawingSaveAll

                          ElseIf ([OutputSheets] And 4) = 4 Then ' Last active sheet?

                          swApp.SetUserPreferenceIntegerValue swEdrawingsSaveAsSelectionOption, swEdrawingSaveActive

                          ElseIf ([OutputSheets] And 8) = 8 Then ' Named sheet

                          swApp.SetUserPreferenceIntegerValue swEdrawingsSaveAsSelectionOption, swEdrawingSaveSelected

                          selectedSheets = Join(vSheetNames, vbLf)

                          swApp.SetUserPreferenceStringListValue swEmodelSelectionList, Trim(selectedSheets)

                          End If

                          End If

                           

                          convFileNameTemp = GetFullFileName(convFileName, "All", 0, 0)

                           

                          ' Convert the document

                          Success = swExtension.SaveAs(convFileNameTemp, swSaveAsCurrentVersion, swSaveAsOptions_Silent, swPDFExport, errors, warnings)

                           

                          ' Save failed?

                          If Success = False Then

                          Log "Method call ModelDocExtension::SaveAs for document '" & convFileNameTemp & "' failed. Error code " & errors & " returned."

                          End If

                           

                          If bSecondOutput = True Then

                          convFileNameTemp2 = GetFullFileName(convFileName2, "All", 0, 0)

                          Success = swExtension.SaveAs(convFileNameTemp2, swSaveAsCurrentVersion, swSaveAsOptions_Silent, swPDFExport, errors, warnings)

                          ' Save failed?

                          If Success = False Then

                          Log "Method call ModelDocExtension::SaveAs for document '" & convFileNameTemp2 & "' failed. Error code " & errors & " returned."

                          End If

                          End If

                          End If

                          Else

                          Log "Document '" & docFileName & "' didn't contain any sheets named '[NamedSheet]'."

                          End If

                          Else

                          Dim vConfNames As Variant

                          Set swConfMgr = swModel.ConfigurationManager

                           

                          ' All configurations?

                          If ([OutputConfs] And 2) = 2 Then

                          vConfNames = swModel.GetConfigurationNames

                          ' Last active conf?

                          ElseIf ([OutputConfs] And 4) = 4 Then

                          ReDim vConfNames(0 to 0) As Variant

                          vConfNames(0) = swConfMgr.ActiveConfiguration.Name

                          ' Named confs

                          ElseIf ([OutputConfs] And 8) = 8 Then

                          Dim vConfNamesTemp As Variant

                          vConfNamesTemp = swModel.GetConfigurationNames

                          removed = 0

                           

                          For i = 0 To UBound(vConfNamesTemp)

                          vConfNamesTemp(i-removed) = vConfNamesTemp(i)

                          confName = vConfNamesTemp(i)

                           

                          If Not confName Like "[NamedConf]" Then

                          removed = removed + 1

                          EndIf

                          Next i

                           

                          If (UBound(vConfNamesTemp) - removed) >= 0 Then

                          ReDim Preserve vConfNamesTemp(0 To (UBound(vConfNamesTemp) - removed))

                          vConfNames = vConfNamesTemp

                          End If

                          End If

                           

                          If Not IsEmpty(vConfNames) Then

                          If ([FileConfs] And 4) = 4 Then

                          ' Save configurations

                          For i = 0 To UBound(vConfNames)

                          swModel.ShowConfiguration vConfNames(i)

                          convFileNameTemp = GetFullFileName(convFileName, vConfNames(i), i, UBound(vConfNames))

                          ' Convert the document

                          Success = swExtension.SaveAs(convFileNameTemp, swSaveAsCurrentVersion, swSaveAsOptions_Silent, Nothing, errors, warnings)

                           

                          ' Save failed?

                          If Success = False Then

                          If errors = swerr_InvalidFileExtension Then

                          Log "The file '" & docFileName & "' and configuration '" & vConfNames(i) & "' can't be converted to the file extension '" & ext & "'."

                          Else

                          Log "Method call ModelDocExtension::SaveAs for document '" & convFileNameTemp & "' and configuration '" & vConfNames(i) & "' failed. Error code " & errors & " returned."

                          If (((errors And swerr_SaveAsNotSupported) <> 0) And ((warnings And swwarn_MissingOLEObjects) <> 0)) Then

                          Log "This document contains OLE objects. Such objects can't be converted outside of SolidWorks. Please open the document and perform the conversion from SolidWorks."

                          End If

                          End If

                          End If

                           

                          If bSecondOutput = True Then

                          convFileNameTemp2 = GetFullFileName(convFileName2, vConfNames(i), i, UBound(vConfNames))

                          Success = swExtension.SaveAs(convFileNameTemp2, swSaveAsCurrentVersion, swSaveAsOptions_Silent, Nothing, errors, warnings)

                          ' Save failed?

                          If Success = False Then

                          If errors = swerr_InvalidFileExtension Then

                          Log "The file '" & docFileName & "' and configuration '" & vConfNames(i) & "' can't be converted to the file extension '" & ext & "'."

                          Else

                          Log "Method call ModelDocExtension::SaveAs for document '" & convFileNameTemp2 & "' and configuration '" & vConfNames(i) & "' failed. Error code " & errors & " returned."

                          Log "warnings1 = " & warnings

                          If (((errors And swerr_SaveAsNotSupported) <> 0) And ((warnings And swwarn_MissingOLEObjects) <> 0)) Then

                          Log "This document contains OLE objects. Such objects can't be converted outside of SolidWorks. Please open the document and perform the conversion from SolidWorks."

                          End If

                          End If

                          End If

                          End If

                          Next i

                          ElseIf ([FileConfs] And 2) = 2 Then

                          If LCase(ext) = ".eprt" Or LCase(ext) = ".easm" Then

                          If ([OutputConfs] And 2) = 2 Then ' All confs?

                          swApp.SetUserPreferenceIntegerValue swEdrawingsSaveAsSelectionOption, swEdrawingSaveAll

                          ElseIf ([OutputConfs] And 4) = 4 Then ' Last active conf?

                          swApp.SetUserPreferenceIntegerValue swEdrawingsSaveAsSelectionOption, swEdrawingSaveActive

                          ElseIf ([OutputConfs] And 8) = 8 Then ' Named confs

                          swApp.SetUserPreferenceIntegerValue swEdrawingsSaveAsSelectionOption, swEdrawingSaveSelected

                          selectedConfs = Join(vConfNames, vbLf)

                          swApp.SetUserPreferenceStringListValue swEmodelSelectionList, Trim(selectedConfs)

                          End If

                          End If

                           

                          convFileNameTemp = GetFullFileName(convFileName, "All", 0, 0)

                           

                          ' Convert the document

                          Success = swExtension.SaveAs(convFileNameTemp, swSaveAsCurrentVersion, swSaveAsOptions_Silent, Nothing, errors, warnings)

                           

                          ' Save failed?

                          If Success = False Then

                          Log "Method call ModelDocExtension::SaveAs for document '" & convFileNameTemp & "' failed. Error code " & errors & " returned."

                          End If

                           

                          If bSecondOutput = True Then

                          convFileNameTemp2 = GetFullFileName(convFileName2, "All", 0, 0)

                          Success = swExtension.SaveAs(convFileNameTemp2, swSaveAsCurrentVersion, swSaveAsOptions_Silent, Nothing, errors, warnings)

                          ' Save failed?

                          If Success = False Then

                          Log "Method call ModelDocExtension::SaveAs for document '" & convFileNameTemp2 & "' failed. Error code " & errors & " returned."

                          End If

                          End If

                          End If

                          Else

                          Log "Document '" & docFileName & "' didn't contain any configurations named '[NamedConf]'."

                          End If

                          End If

                           

                          KillHolder convFilePath

                          KillHolder convFilePath2

                           

                          ' Process virtual components

                          If docType = swDocASSEMBLY Then

                          Dim vComponents As Variant

                          Set swAssembly = swModel

                           

                          vComponents = swAssembly.GetComponents(True)

                           

                          If Not IsEmpty(vComponents) Then

                          For i = 0 To UBound(vComponents)

                          Dim swComponent As SldWorks.Component2

                          Set swComponent = vComponents(i)

                           

                          If swComponent.IsVirtual Then

                          Convert swComponent.GetPathName()

                          End If

                          Next i

                          End If

                          End If

                          ' Close document

                          swApp.QuitDoc swModel.GetTitle

                          End Sub

                          Function bIsSupportedExtension(oExtension) As Boolean

                           

                          oExtension = LCase( oExtension )

                           

                          If oExtension = "prt" Then

                          bIsSupportedExtension = True

                          ElseIf oExtension = "asm" Then

                          bIsSupportedExtension = True

                          ElseIf oExtension = "drw" Then

                          bIsSupportedExtension = True

                          ElseIf oExtension = "dxf" Then

                          bIsSupportedExtension = True

                          ElseIf oExtension = "dwg" Then

                          bIsSupportedExtension = True

                          ElseIf oExtension = "psd" Then

                          bIsSupportedExtension = True

                          ElseIf oExtension = "ai" Then

                          bIsSupportedExtension = True

                          ElseIf oExtension = "lfp" Then

                          bIsSupportedExtension = True

                          ElseIf oExtension = "sldlfp" Then

                          bIsSupportedExtension = True

                          ElseIf oExtension = "prtdot" Then

                          bIsSupportedExtension = True

                          ElseIf oExtension = "asmdot" Then

                          bIsSupportedExtension = True

                          ElseIf oExtension = "drwdot" Then

                          bIsSupportedExtension = True

                          ElseIf oExtension = "x_t" Then

                          bIsSupportedExtension = True

                          ElseIf oExtension = "x_b" Then

                          bIsSupportedExtension = True

                          ElseIf oExtension = "xmt_txt" Then

                          bIsSupportedExtension = True

                          ElseIf oExtension = "xmt_bin" Then

                          bIsSupportedExtension = True

                          ElseIf oExtension = "igs" Then

                          bIsSupportedExtension = True

                          ElseIf oExtension = "iges" Then

                          bIsSupportedExtension = True

                          ElseIf oExtension = "step" Then

                          bIsSupportedExtension = True

                          ElseIf oExtension = "stp" Then

                          bIsSupportedExtension = True

                          ElseIf oExtension = "sat" Then

                          bIsSupportedExtension = True

                          ElseIf oExtension = "vda" Then

                          bIsSupportedExtension = True

                          ElseIf oExtension = "wrl" Then

                          bIsSupportedExtension = True

                          ElseIf oExtension = "stl" Then

                          bIsSupportedExtension = True

                          ElseIf oExtension = "cgr" Then

                          bIsSupportedExtension = True

                          ElseIf oExtension = "wrl" Then

                          bIsSupportedExtension = True

                          ElseIf oExtension = "xpr" Then

                          bIsSupportedExtension = True

                          ElseIf oExtension = "xas" Then

                          bIsSupportedExtension = True

                          ElseIf oExtension = "ipt" Then

                          bIsSupportedExtension = True

                          ElseIf oExtension = "iam" Then

                          bIsSupportedExtension = True

                          ElseIf oExtension = "par" Then

                          bIsSupportedExtension = True

                          ElseIf oExtension = "psm" Then

                          bIsSupportedExtension = True

                          ElseIf oExtension = "ckd" Then

                          bIsSupportedExtension = True

                          ElseIf oExtension = "emn" Then

                          bIsSupportedExtension = True

                          ElseIf oExtension = "brd" Then

                          bIsSupportedExtension = True

                          ElseIf oExtension = "bdf" Then

                          bIsSupportedExtension = True

                          ElseIf oExtension = "idb" Then

                          bIsSupportedExtension = True

                          ElseIf oExtension = "3dm" Then

                          bIsSupportedExtension = True

                          Else

                          bIsSupportedExtension = False

                          End If

                           

                          End Function

                          Sub main()

                           

                          On Error GoTo Fail:

                          Set FileSystemObj = CreateObject("Scripting.FileSystemObject")

                          docFileName = "<Filepath>"

                           

                          ' Get SW interface object

                          Set swApp = Application.SldWorks

                          swApp.Visible=True

                          Convert docFileName

                           

                          Exit Sub

                           

                          Fail:

                          Log "Error while converting file '" & docFileName & "': " & vbCrLf & _

                          "An unexpected error occurred while executing the generated script. Script syntax error?" & vbCrLf & _

                          "Error number: " & Err.Number & vbCrLf & _

                          "Error description: '" & Err.Description & "'" & vbCrLf

                           

                          End Sub

                  • Re: Using Draftsight to generate a PDF for EPDM Workflow transition of a .DWG file
                    Scott Feldman

                    Hi Pete,

                    Did you ever figure out a way to automatically create the PDF from Draftsight.  We recently implemented EPDM and we are trying to do the same thing.

                     

                    Thank you

                    Scott