AnsweredAssumed Answered

Macro to output a separate drawing for all part configurations

Question asked by Mikko Laine on Mar 5, 2020



we have few models that need separate drawings for all the different model configurations. For just few of them it's not a problem but few models have over 150 different configurations and generating them all by hand is waste of resources...


I found this macro Drawings by configuration macro  that will go trough the given drawing and save a new drawing with the given configuration active. This works quite nicely. Problem is the output filename, if the part and first drawing names are "1234-001 - Test piece.sldprt" and "1234-001 - Test piece.slddrw" it will output the new drawing as "1234-001 - Test piece - Sheet1 - Configuration name.slddrw".


I've tried to modify that macro as follows to get the drawing numbers. This works nice if the DwgNo property is already in the drawing properties but how to get it read the DwgNo from the Configuration Specific properties of the part? The drawing template calls DwgNo as $PRPSHEET from the part and it updates correctly.

'Created by Artem Taturevych (Intercad, Australia)
'Disclaimer: The API examples are provided as is and should be used as reference only.
'You may redistribute it and/or modify it on the condition that this header is retained.
'In no event shall Intercad be liable for any types of damages whatsoever
'(including without limitation, damages from the loss of use, data, profits, or business)
'arising out of the uses of this information, applications, or services.

Const OUTPUT_FOLDER = "C:\Out\"

Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swCustPropMgr As SldWorks.CustomPropertyManager
Dim Piirustusnumero As String
Dim swDraw As SldWorks.DrawingDoc

Sub main()

Set swApp = Application.SldWorks

Set swModel = swApp.ActiveDoc

Set swDraw = swModel

Dim i As Integer

Dim vConfs As Variant

Dim swView As SldWorks.View

Set swView = swDraw.GetFirstView().GetNextView
Dim swRefModel As SldWorks.ModelDoc2
Set swRefModel = swView.ReferencedDocument

vConfs = swRefModel.GetConfigurationNames

For i = 0 To UBound(vConfs)

Dim confName As String
confName = vConfs(i)
GetDwgNo confName
Set swModel = swApp.ActiveDoc
ProcessViews confName
swModel.ForceRebuild3 False
swModel.Extension.SaveAs OUTPUT_FOLDER + DwgNo + " - " + confName + ".slddrw", swSaveAsVersion_e.swSaveAsCurrentVersion, swSaveAsOptions_e.swSaveAsOptions_Copy, Nothing, 0, 0


MsgBox "Completed"

End Sub

Sub ProcessViews(confName As String)

Dim i As Integer

Dim vSheets As Variant
vSheets = swDraw.GetViews

For i = 0 To UBound(vSheets)

Dim j As Integer
Dim vViews As Variant

vViews = vSheets(i)

For j = 0 To UBound(vViews)
Dim swView As SldWorks.View
Set swView = vViews(j)
swView.ReferencedConfiguration = confName


End Sub

Sub GetDwgNo(confName As String)

Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc

Set swCustPropMgr = swModel.Extension.CustomPropertyManager("")

Dim valOut As String
Dim evalValOut As String
swCustPropMgr.Get3 "DwgNo", False, valOut, evalValOut
DwgNo = evalValOut

End Sub