Skip to main content

Macro to suspend graphics update using SOLIDWORKS API

This macro demonstrates how to suspend graphics update while performing operations with feature tree and models (including opening of new documents) using SOLIDWORKS API.

Macro copies the bodies from the external part into the newly created derived configuration of the active part document.

Set the source part path (the part to copy bodies from) via SRC_PART constant

Const SRC_PART As String = "C:\Sample.sldprt"

Try both options to see the difference by changing the SUPPRESS_UPDATES constant

Const SUPPRESS_UPDATES As Boolean = True 'True to suppress updates, False to show the updates (default behavior)

Macro performs the following steps

  • Opens the model with bodies to copy
  • Copies all the bodies into the memory
  • Closes the model
  • Creates new derived configuration in the original model
  • Inserts copied bodies
  • Suppresses the created features in all configurations except of this one
  • Activates the original configuration

If SUPPRESS_UPDATES option is set to true all of the operations will be hidden and only active state of the model will be shown on screen (i.e. model opening, feature insertion etc. will be invisible)

Const SUPPRESS_UPDATES As Boolean = True

Const SRC_PART As String = "C:\Sample.sldprt"

Dim swApp As SldWorks.SldWorks

Sub main()

Set swApp = Application.SldWorks

Dim swModel As SldWorks.ModelDoc2

Set swModel = swApp.ActiveDoc

If TypeOf swModel Is SldWorks.PartDoc Then

On Error GoTo End_

If SUPPRESS_UPDATES Then
SuppressUpdates swModel, True
End If

Dim activeConfName As String
activeConfName = swModel.ConfigurationManager.ActiveConfiguration.Name

Dim vBodies As Variant
vBodies = GetBodies(SRC_PART)

swModel.ConfigurationManager.AddConfiguration2 activeConfName & "_Merged", "", "", swConfigurationOptions2_e.swConfigOption_LinkToParent, activeConfName, "", True

Dim i As Integer

For i = 0 To UBound(vBodies)
Dim swBody As SldWorks.Body2
Set swBody = vBodies(i)
Dim swFeat As SldWorks.Feature
Set swFeat = swModel.CreateFeatureFromBody3(swBody, False, swCreateFeatureBodyOpts_e.swCreateFeatureBodySimplify)
swFeat.SetSuppression2 swFeatureSuppressionAction_e.swUnSuppressFeature, swInConfigurationOpts_e.swThisConfiguration, Empty
Next

swModel.ShowConfiguration2 activeConfName

End_: 'restore the flag otherwise all files will be opened invisible

If SUPPRESS_UPDATES Then
SuppressUpdates swModel, False
End If

Else
MsgBox "Please open part document"
End If

End Sub

Sub SuppressUpdates(model As SldWorks.ModelDoc2, suppress As Boolean)

Dim enable As Boolean
enable = Not suppress

Dim swView As SldWorks.ModelView
Set swView = model.ActiveView

swView.EnableGraphicsUpdate = enable

model.FeatureManager.EnableFeatureTree = enable
model.FeatureManager.EnableFeatureTreeWindow = enable

swApp.DocumentVisible enable, swDocumentTypes_e.swDocPART
swApp.DocumentVisible enable, swDocumentTypes_e.swDocASSEMBLY
swApp.DocumentVisible enable, swDocumentTypes_e.swDocDRAWING

End Sub

Function GetBodies(path As String) As Variant

Dim swPart As SldWorks.PartDoc
Set swPart = swApp.OpenDoc6(path, swDocumentTypes_e.swDocPART, _
swOpenDocOptions_e.swOpenDocOptions_Silent + swOpenDocOptions_e.swOpenDocOptions_ReadOnly, "", 0, 0)

Dim vBodies As Variant
vBodies = swPart.GetBodies2(swBodyType_e.swSolidBody, True)

If Not IsEmpty(vBodies) Then
Dim i As Integer
For i = 0 To UBound(vBodies)
Dim swBody As SldWorks.Body2
Set swBody = vBodies(i)
Set vBodies(i) = swBody.Copy
Next
End If

swApp.CloseDoc swPart.GetTitle()

GetBodies = vBodies

End Function