在特征树中选择的组件
此 VBA 宏获取指向装配体中所有可见(未压缩和未隐藏)组件的指针。使用 SOLIDWORKS API的多选方法选择所有组件。
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 vComps As Variant
vComps = GetVisibleComponents(swAssy, False)
'选择多个对象并返回模型中选定的对象数。
swAssy.Extension.MultiSelect2 vComps, False, Nothing
Else
MsgBox "请打开装配体Please open assembly document"
End If
End Sub
Function GetVisibleComponents(assy As SldWorks.AssemblyDoc, topLevelOnly As Boolean) As Variant
Dim swVisComps() As SldWorks.Component2
Dim isInit As Boolean
isInit = False
Dim vComps As Variant
'获取此装配体的活动配置中的所有零部件。
vComps = assy.GetComponents(topLevelOnly)
Dim i As Integer
For i = 0 To UBound(vComps)
Dim swComp As SldWorks.Component2
Set swComp = vComps(i)
'IsSuppressed判断组件是否被压缩
If False = swComp.IsSuppressed() And IsVisible(swComp) Then
If Not isInit Then
ReDim swVisComps(0) '初始化数组
isInit = True
Else
'重新定义数组,增加数组长度,Preserve 保留原来的数据
ReDim Preserve swVisComps(UBound(swVisComps) + 1)
End If
'给数组中最后一个元素赋值
Set swVisComps(UBound(swVisComps)) = swComp
End If
Next
GetVisibleComponents = swVisComps '将组件数组返回
End Function
Function IsVisible(comp As SldWorks.Component2) As Boolean
Dim swThisComp As SldWorks.Component2
Set swThisComp = comp
While Not swThisComp Is Nothing
'如果组件不可见,返回false并退出函数
If swThisComp.Visible = swComponentVisibilityState_e.swComponentHidden Then
IsVisible = False
Exit Function
End If
'判断父组件的可见性
Set swThisComp = swThisComp.GetParent
Wend
IsVisible = True
End Function
文章翻译自https://www.codestack.net/
仅供学习使用。