Renaming permanent and virtual components using SOLIDWORKS API
IComponent2::Name2 SOLIDWORKS API property provides get and set accessors for reading and changing the component name respectively.
This function returns different names structures when setting or getting. That means if it is required to rename component using its original name (i.e. add suffix or prefix) value returned from get-accessor needs to be altered.
When get accessor is called full name of the component is returned, while set accessor only requires short name.
Full name of the component consists of
- Component Name
- Component Index (specified after - symbol in full name)
- Context name for virtual component (specified after ^ symbol in the full name)
- Parent assembly full name (specified before / symbol in the full name)
The names of the components in the structure above will be returned as the following (the colors in the picture match the parts in names)
Assem2-1 Root component
Assem2-1/Part1-1 Component in sub-assembly
Assem2-1/Part2^Assem2-1 virtual component in sub-assembly
Example below renames any selected component (root level, component in sub-assembly and virtual) using SOLIDWORKS API by adding the suffix to its name.
Const SUFFIX As String = "_Renamed" Dim swApp As SldWorks.SldWorks Sub main() Set swApp = Application.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim swSelMgr As SldWorks.SelectionMgr Set swModel = swApp.ActiveDoc If Not swModel Is Nothing Then Set swSelMgr = swModel.SelectionManager Dim swComp As SldWorks.Component2 Set swComp = swSelMgr.GetSelectedObject6(1, -1) If Not swComp Is Nothing Then Dim compName As String compName = swComp.Name2 If Not swComp.GetParent() Is Nothing Then 'if not root remove the sub-assemblies name compName = Right(compName, Len(compName) - InStrRev(compName, "/")) End If If swComp.IsVirtual() Then 'if virtual remove the context assembly name compName = Left(compName, InStr(compName, "^") - 1) Else 'remove the index name compName = Left(compName, InStrRev(compName, "-") - 1) End If Dim newCompName As String newCompName = compName & SUFFIX swComp.Name2 = newCompName Else MsgBox "Please select component to rename" End If Else MsgBox "Please open assembly document" End If End Sub