Modify configuration parameters for components using SOLIDWORKS API
{ width=350 }
This example demonstrates how to use parameters (similar to design table parameters) to suppress all components in every configuration except of the active one using SOLIDWORKS API. It is not required to activate configuration or select any components to use the macro.
Multiple components can be modified in a batch mode to improve performance.
Dim swApp As SldWorks.SldWorks
Sub main()
Set swApp = Application.SldWorks
Dim swAssy As SldWorks.AssemblyDoc
Set swAssy = swApp.ActiveDoc
If Not swAssy Is Nothing Then
Dim vConfNames As Variant
vConfNames = GetOtherConfigurations(swAssy)
If Not IsEmpty(vConfNames) Then
Dim vComps As Variant
vComps = swAssy.GetComponents(True)
Dim i As Integer
Dim paramNames() As String
Dim paramValues() As String
ReDim paramNames(UBound(vComps))
ReDim paramValues(UBound(vComps))
For i = 0 To UBound(vComps)
Dim swComp As SldWorks.Component2
Set swComp = vComps(i)
Dim instId As Integer
Dim compName As String
compName = swComp.Name2
instId = CInt(Right(compName, Len(compName) - InStrRev(compName, "-")))
compName = Left(compName, InStrRev(compName, "-") - 1)
paramNames(i) = "$STATE@" & compName & "<" & instId & ">"
paramValues(i) = "S"
Next
For i = 0 To UBound(vConfNames)
Dim swConfMgr As SldWorks.ConfigurationManager
Set swConfMgr = swAssy.ConfigurationManager
If False = swConfMgr.SetConfigurationParams(CStr(vConfNames(i)), (paramNames), (paramValues)) Then
MsgBox "Failed to set configuration parameters for " & CStr(vConfNames(i))
End If
Next
Else
MsgBox "There is no other configurations in the assembly"
End If
Else
MsgBox "Please open assembly"
End If
End Sub
Function GetOtherConfigurations(model As SldWorks.ModelDoc2) As Variant
Dim vAllConfs As Variant
vAllConfs = model.GetConfigurationNames()
If UBound(vAllConfs) > 0 Then
Dim confs() As String
ReDim confs(UBound(vAllConfs) - 1)
Dim curIndex As Integer
curIndex = 0
Dim activeConf As String
activeConf = model.ConfigurationManager.ActiveConfiguration.Name
Dim i As Integer
For i = 0 To UBound(vAllConfs)
If LCase(vAllConfs(i)) <> LCase(activeConf) Then
confs(curIndex) = vAllConfs(i)
curIndex = curIndex + 1
End If
Next
GetOtherConfigurations = confs
Else
GetOtherConfigurations = Empty
End If
End Function