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