Get Faces Associated with Feature Example (VBA)
This example shows how to get the faces associated with a feature.
'-----------------------------------------------
'
' Problem:
' In
SolidWorks, a face is the result of evaluating
' a
feature. A face can be owned by several features.
' IFeature::GetFaces
returns all faces owned by this
' feature.
This is different from faces highlighted in
' user-interface
when feature is selected. The user-interface
' filters
out multiple feature faces. This filter is
' for
display purposes only.
'
' An
application must use IFace::GetFeature
' to
filter out multiple feature faces. This method
' returns
only the oldest feature from face; that is, the
' first
owning feature in the FeatureManager design tree.
'
' This
example shows how to eliminate multiple
' feature
faces.
'
' Preconditions:
' (1)
Part is open.
' (2)
Feature is selected in the FeatureManager design tree.
'
' Postconditions: Faces of the feature are colored blue.
' The
faces are the same faces as if the
' feature
was selected through the user-interface.
'
'-----------------------------------------------
Option Explicit
Sub main()
Dim
swApp As
SldWorks.SldWorks
Dim
swModel As
SldWorks.ModelDoc2
Dim
swSelMgr As
SldWorks.SelectionMgr
Dim
swSelData As
SldWorks.SelectData
Dim
swFeat As
SldWorks.feature
Dim
swFaceFeat As
SldWorks.feature
Dim
vFaceArr As
Variant
Dim
vFace As
Variant
Dim
vFeatColor As
Variant
Dim
swFace As
SldWorks.face2
Dim
swEnt As
SldWorks.entity
Dim
i As
Long
Dim
bRet As
Boolean
Set
swApp = Application.SldWorks
Set
swModel = swApp.ActiveDoc
Set
swSelMgr = swModel.SelectionManager
Set
swFeat = swSelMgr.GetSelectedObject5(1)
Set
swSelData = swSelMgr.CreateSelectData
Debug.Print
"Feature = " + swFeat.Name
+ " [" + swFeat.GetTypeName
+ "]"
Debug.Print
" Face
count = " & swFeat.GetFaceCount
swModel.ClearSelection2
True
vFeatColor
= swModel.MaterialPropertyValues
vFeatColor(0)
= 0 'R
vFeatColor(1)
= 0 'G
vFeatColor(2)
= 1 'B
vFaceArr
= swFeat.GetFaces: If IsEmpty(vFaceArr)
Then Exit Sub
For
Each vFace In vFaceArr
Set
swFace = vFace
Set
swEnt = swFace
Set
swFaceFeat = swFace.GetFeature
'
Check to see if face is owned by multiple features
If
swFaceFeat Is swFeat Then
bRet
= swEnt.Select4(True, swSelData):
Debug.Assert bRet
swFace.MaterialPropertyValues = vFeatColor
Else
Debug.Print
" Other
feature = " & swFaceFeat.Name
+ " [" + swFaceFeat.GetTypeName
+ "]"
End
If
Next
End Sub
'----------------------------------------