Code:
Sub main()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2 Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
TraverseModelFeatures swApp, swModel
End Sub
Sub TraverseModelFeatures(swApp As SldWorks.SldWorks, swModel As SldWorks.ModelDoc2)
Dim swFeat As SldWorks.Feature
Set swFeat = swModel.FirstFeature
TraverseFeatureFeatures swApp, swModel, swFeat
End Sub
Sub TraverseFeatureFeatures(swApp As SldWorks.SldWorks, swModel As SldWorks.ModelDoc2, swFeat As SldWorks.Feature)
Dim swSubFeat As SldWorks.Feature
Dim swSubSubFeat As SldWorks.Feature
Dim swSubSubSubFeat As SldWorks.Feature
Dim swSketch As SldWorks.Sketch
Dim vSketchSeg As Variant
Dim swSketchSeg As SldWorks.SketchSegment
Dim vSketchPt As Variant
Dim swSketchPt As SldWorks.SketchPoint
Dim swSelData As SldWorks.SelectData
Dim i As Long
Dim bRet As Boolean
While Not swFeat Is Nothing
If swFeat.GetTypeName = "ProfileFeature" Then
Set swSketch = swFeat.GetSpecificFeature2
swModel.EditSketch
vSketchSeg = swSketch.GetSketchSegments
For i = 0 To UBound(vSketchSeg)
Set swSketchSeg = vSketchSeg(i)
bRet = swSketchSeg.Select4(False, swSelData): Debug.Assert bRet
swModel.SketchConstraintsDelAll
swModel.SketchAddConstraints "sgFIXED"
Next i
vSketchPt = swSketch.GetSketchPoints2
For i = 0 To UBound(vSketchPt)
Set swSketchPt = vSketchPt(i)
bRet = swSketchPt.Select4(False, swSelData): Debug.Assert bRet
swModel.SketchConstraintsDelAll
swModel.SketchAddConstraints "sgFIXED"
Next i
swModel.InsertSketch2 True
End If
Set swSubFeat = swFeat.GetFirstSubFeature
While Not swSubFeat Is Nothing
If swSubFeat.GetTypeName = "ProfileFeature" Then
Set swSketch = swSubFeat.GetSpecificFeature2
swModel.EditSketch
vSketchSeg = swSketch.GetSketchSegments
For i = 0 To UBound(vSketchSeg)
Set swSketchSeg = vSketchSeg(i)
bRet = swSketchSeg.Select4(False, swSelData): Debug.Assert bRet
swModel.SketchConstraintsDelAll
swModel.SketchAddConstraints "sgFIXED"
Next i
vSketchPt = swSketch.GetSketchPoints2
For i = 0 To UBound(vSketchPt)
Set swSketchPt = vSketchPt(i)
bRet = swSketchPt.Select4(False, swSelData): Debug.Assert bRet
swModel.SketchConstraintsDelAll
swModel.SketchAddConstraints "sgFIXED"
Next i
swModel.InsertSketch2 True
End If
Set swSubSubFeat = swSubFeat.GetFirstSubFeature
While Not swSubSubFeat Is Nothing
If swSubSubFeat.GetTypeName = "ProfileFeature" Then
Set swSketch = swSubSubFeat.GetSpecificFeature2
swModel.EditSketch
vSketchSeg = swSketch.GetSketchSegments
For i = 0 To UBound(vSketchSeg)
Set swSketchSeg = vSketchSeg(i)
bRet = swSketchSeg.Select4(False, swSelData): Debug.Assert bRet
swModel.SketchConstraintsDelAll
swModel.SketchAddConstraints "sgFIXED"
Next i
vSketchPt = swSketch.GetSketchPoints2
For i = 0 To UBound(vSketchPt)
Set swSketchPt = vSketchPt(i)
bRet = swSketchPt.Select4(False, swSelData): Debug.Assert bRet
swModel.SketchConstraintsDelAll
swModel.SketchAddConstraints "sgFIXED"
Next i
swModel.InsertSketch2 True
End If
Set swSubSubFeat = swSubSubFeat.GetNextSubFeature()
Wend
Set swSubFeat = swSubFeat.GetNextSubFeature()
Wend
Set swFeat = swFeat.GetNextFeature
Wend
End Sub