Create Holes using Hole Wizard and Sketch Points Example (VBA)
This example shows how to create holes using the Hole Wizard and sketch
points.
'--------------------------------------------------------
'
' Problem:
' When
adding a number of Hole Wizard hole features,
' it
is often helpful to use a sketch with a number of
' sketch
points. However, when creating the holes,
'
' IFeatureManager::HoleWizard
'
' requires
selection points to be on a face and in the
' space
of the model.
'
' This
example shows how to transform a sketch point
' in
the space of a sketch to the space of the model.
'
' Preconditions:
' (1)
Part or assembly is open.
' (2)
Assembly is fully resolved.
' (3)
Sketch is selected.
' (4)
Sketch contains at least one sketch point.
'
' Postconditions: Hole Wizard hole features are inserted
at
' each
sketch point.
'
' NOTES:
' (1)
Hole creation can fail due to geometry
' conditions.
' (2)
To access:
' *
IIWizardHoleFeatureData2::Face
' *
IWizardHoleFeatureData2::Vertex
' *
IWizardHoleFeatureData2::GetEndConditionReference
' the
feature must be rolled back with a call to
' IWizardHoleFeatureData2::AccessSelections
' because
these are geometric entities and
' can
be consumed by subsequent features.
' (3)
All of the parameters of the feature are output to the
' debug
window for review.
Option Explicit
Public Enum swWzdGeneralHoleTypes_e
swWzdCounterBore
= 0
swWzdCounterSink
= 1
swWzdHole
= 2
swWzdPipeTap
= 3
swWzdTap
= 4
swWzdLegacy
= 5
End Enum
' If additional hole types are added to the hole wizard
dialog,
' this is incremented
Public Enum swWzdHoleTypes_e
swSimple
= 0
swTapered
= 1
swCounterBored
= 2
swCounterSunk
= 3
swCounterDrilled
= 4
swSimpleDrilled
= 5
swTaperedDrilled
= 6
swCounterBoredDrilled
= 7
swCounterSunkDrilled
= 8
swCounterDrilledDrilled
= 9
swCounterBoreBlind
= 10
swCounterBoreBlindCounterSinkMiddle
= 11
swCounterBoreBlindCounterSinkTop
= 12
swCounterBoreBlindCounterSinkTopmiddle
= 13
swCounterBoreThru
= 14
swCounterBoreThruCounterSinkBottom
= 15
swCounterBoreThruCounterSinkMiddle
= 16
swCounterBoreThruCounterSinkMiddleBottom
= 17
swCounterBoreThruCounterSinkTop
= 18
swCounterBoreThruCounterSinkTopBottom
= 19
swCounterBoreThruCounterSinkTopMiddle
= 20
swCounterBoreThruCounterSinkTopMiddleBottom
= 21
swHoleBlind
= 22
swHoleBlindCounterSinkTop
= 23
swCounterSinkBlind
= 24
swHoleThru
= 25
swHoleThruCounterSinkBottom
= 26
swHoleThruCounterSinkTop
= 27
swHoleThruCounterSinkTopBottom
= 28
swCounterSinkThru
= 29
swCounterSinkThruCounterSinkBottom
= 30
swTapBlind
= 31
swTapBlindCounterSinkTop
= 32
swTapThru
= 33
swTapThruCounterSinkBottom
= 34
swTapThruCounterSinkTop
= 35
swTapThruCounterSinkTopBottom
= 36
swPipeTapBlind
= 37
swPipeTapBlindCounterSinkTop
= 38
swPipeTapThru
= 39
swPipeTapThruCounterSinkBottom
= 40
swPipeTapThruCounterSinkTop
= 41
swPipeTapThruCounterSinkTopBottom
= 42
swCounterSinkBlindWithoutHeadClearance
= 43
swCounterSinkThruWithoutHeadClearance
= 44
swCounterSinkThruCounterSinkBottomWithoutHeadClearance
= 45
swTapBlindCosmeticThread
= 46
swTapBlindCosmeticThreadCounterSinkTop
= 47
swTapThruCosmeticThread
= 48
swTapThruCosmeticThreadCounterSinkTop
= 49
swTapThruCosmeticThreadCounterSinkBottom
= 50
swTapThruCosmeticThreadCounterSinkTopBottom
= 51
swTapThruThreadThru
= 52
swTapThruThreadThruCounterSinkTop
= 53
swTapThruThreadThruCounterSinkBottom
= 54
swTapThruThreadThruCountersinkTopBottom
= 55
End Enum
' Update
this when you add new hole types
Public Enum swWzdHoleStandards_e
swStandardAnsiInch
= 0
swStandardAnsiMetric
= 1
swStandardBSI
= 2
swStandardDME
= 3
swStandardDIN
= 4
swStandardHascoMetric
= 5
swStandardHelicoilInch
= 6
swStandardHelicoilMetric
= 7
swStandardISO
= 8
swStandardJIS
= 9
swStandardPCS
= 10
swStandardProgressive
= 11
swStandardSuperior
= 12
End Enum
Public Enum swWzdHoleStandardFastenerTypes_e
swStandardAnsiInchBinding
= 0
swStandardAnsiInchButton
= 1
swStandardAnsiInchFillister
= 2
swStandardAnsiInchHexBolt
= 3
swStandardAnsiInchHexBoltFinished
= 4
swStandardAnsiInchHexBoltHeavy
= 5
swStandardAnsiInchHexScrew
= 6
swStandardAnsiInchHexWasherScrew
= 7
swStandardAnsiInchPan
= 8
swStandardAnsiInchSocketCapScrew
= 9
swStandardAnsiInchSocketShoulderScrew
= 10
swStandardAnsiInchSquare
= 11
swStandardAnsiInchTruss
= 12
swStandardAnsiInchFlatSocket82
= 13
swStandardAnsiInchFlatHead100
= 14
swStandardAnsiInchFlatHead82
= 15
swStandardAnsiInchOval
= 16
swStandardAnsiInchHcoilTapDrills
= 17
swStandardAnsiInchAllDrillSizes
= 18
swStandardAnsiInchFractionalDrillSizes
= 19
swStandardAnsiInchLetterDrillSizes
= 20
swStandardAnsiInchPipeTapDrills
= 21
swStandardAnsiInchScrewClearances
= 22
swStandardAnsiInchTapDrills
= 23
swStandardAnsiInchNumberDrillSizes
= 24
swStandardAnsiInchTaperedPipeTap
= 25
swStandardAnsiInchBottomingTappedHole
= 26
swStandardAnsiInchTappedHole
= 27
swStandardAnsiMetricButton
= 28
swStandardAnsiMetricHexBolt
= 29
swStandardAnsiMetricHexCapScrew
= 30
swStandardAnsiMetricHexScrewFormed
= 31
swStandardAnsiMetricPan
= 32
swStandardAnsiMetricSocketHeadCapScrew
= 33
swStandardAnsiMetricSocketShoulderScrew
= 34
swStandardAnsiMetricFlatSocket82
= 35
swStandardAnsiMetricFlatHead82
= 36
swStandardAnsiMetricOval
= 37
swStandardAnsiMetricHcoilTapDrills
= 38
swStandardAnsiMetricDrillSizes
= 39
swStandardAnsiMetricScrewClearances
= 40
swStandardAnsiMetricTapDrills
= 41
swStandardAnsiMetricBottomingTappedHole
= 42
swStandardAnsiMetricTappedHole
= 43
swStandardBSICheese
= 44
swStandardBSIHexBolt
= 45
swStandardBSIHexCapScrew
= 46
swStandardBSIHexMachineScrew
= 47
swStandardBSIPanHead
= 48
swStandardBSISocketCapScrew
= 49
swStandardBSIFlatSocketCap
= 50
swStandardBSIFlatHead
= 51
swStandardBSIOvalHead
= 52
swStandardBSIHcoilTapDrills
= 53
swStandardBSIDrillSizes
= 54
swStandardBSIScrewClearances
= 55
swStandardBSITapDrills
= 56
swStandardBSITappedHoleBottoming
= 57
swStandardBSITappedHole
= 58
swStandardBSITaperedPipeTap
= 59
swStandardDINHeavyHexBolt
= 60
swStandardDINHexFlangeBolt
= 61
swStandardDINCheeseHead
= 62
swStandardDINHexBolt
= 63
swStandardDINHexCapScrew
= 64
swStandardDINHexMachineScrew
= 65
swStandardDINPan
= 66
swStandardDINSocketHeadCap
= 67
swStandardDINSocketCTSKFlatHead
= 68
swStandardDINCTSKFlatHead
= 69
swStandardDINCTSKRaisedHead
= 70
swStandardDINHcoilTapDrills
= 71
swStandardDINDrillSizes
= 72
swStandardDINScrewClearances
= 73
swStandardDINTapDrills
= 74
swStandardDINTappedHoleBottoming
= 75
swStandardDINTappedHole
= 76
swStandardDINTaperedPipeTap
= 77
swStandardDMECCorePins
= 78
swStandardDMECXCorePins
= 79
swStandardDMETHXEjectorPins
= 80
swStandardDMEStandardLeaderPins
= 81
swStandardDMEReturnPins
= 82
swStandardDMESocketCapScrew
= 83
swStandardDMESupportPillarSHCS
= 84
swStandardDMESpruPullerPins
= 85
swStandardDMEStripperBolt
= 86
swStandardDMEFlatSocket82
= 87
swStandardDMEFlatHead100
= 88
swStandardDMEFlatHead82
= 89
swStandardDMEOval
= 90
swStandardDMESupportPillarClearance
= 91
swStandardDMEFractionalDrillSizes
= 92
swStandardDMEHcoilTapDrills
= 93
swStandardDMEAllDrillSizes
= 94
swStandardDMELetterDrillSizes
= 95
swStandardDMENumberDrillSizes
= 96
swStandardDMEPipeTapDrills
= 97
swStandardDMEScrewClearances
= 98
swStandardDMECCorePinClearances
= 99
swStandardDMECXCorePinClearances
= 100
swStandardDMETHXEjectorPinClearances
= 101
swStandardDMELeaderPinClearances
= 102
swStandardDMEReturnPinClearances
= 103
swStandardDMESpruPullerPinClearances
= 104
swStandardDMETapDrills
= 105
swStandardDMEBottomingTappedHole
= 106
swStandardDMETappedHole
= 107
swStandardDMETaperedPipeTap
= 108
swStandardHascoMetricCCorePins
= 109
swStandardHascoMetricGuideBushings
= 110
swStandardHascoMetricGuidePillars
= 111
swStandardHascoMetricLocatingGuideBushings
= 112
swStandardHascoMetricLocatingGuidePillars
= 113
swStandardHascoMetricSocketCapScrew
= 114
swStandardHascoMetricShoulderScrew
= 115
swStandardHascoMetricCTSKFlatHead
= 116
swStandardHascoMetricDrillSizes
= 117
swStandardHascoMetricScrewClearances
= 118
swStandardHascoMetricCorePinClearances
= 119
swStandardHascoMetricCenteringSleeve
= 120
swStandardHascoMetricEjectorRodClearances
= 121
swStandardHascoMetricBottomingTappedHole
= 122
swStandardHascoMetricTappedHole
= 123
swStandardHcoilInchInsert10Dia
= 124
swStandardHcoilInchInsert15Dia
= 125
swStandardHcoilInchInsert20Dia
= 126
swStandardHcoilInchInsert25Dia
= 127
swStandardHcoilInchInsert30Dia
= 128
swStandardHcoilMetricInsert10Dia
= 129
swStandardHcoilMetricInsert15Dia
= 130
swStandardHcoilMetricInsert20Dia
= 131
swStandardHcoilMetricInsert25Dia
= 132
swStandardHcoilMetricInsert30Dia
= 133
swStandardISOCheeseHead
= 134
swStandardISOHexBolt
= 135
swStandardISOHexCapScrew
= 136
swStandardISOHexMachineScrew
= 137
swStandardISOPan
= 138
swStandardISOSocketHeadCap
= 139
swStandardISOSocketCTSKFlatHead
= 140
swStandardISOCTSKFlatHead
= 141
swStandardISOCTSKRaisedHead
= 142
swStandardISODrillSizes
= 143
swStandardISOScrewClearances
= 144
swStandardISOTapDrills
= 145
swStandardISOTappedHoleBottoming
= 146
swStandardISOTappedHole
= 147
swStandardISOTaperedPipeTap
= 148
swStandardJISCheeseHead
= 149
swStandardJISFillisterHead
= 150
swStandardJISButton
= 151
swStandardJISHexBolt
= 152
swStandardJISHexCapScrew
= 153
swStandardJISHexMachineScrew
= 154
swStandardJISPan
= 155
swStandardJISSocketHeadCap
= 156
swStandardJISSocketShoulderScrew
= 157
swStandardJISFlatCTSKHead
= 158
swStandardJISRaisedCTSKHead
= 159
swStandardJISDrillSizes
= 160
swStandardJISScrewClearances
= 161
swStandardJISTapDrills
= 162
swStandardJISTappedHoleBottoming
= 163
swStandardJISTappedHole
= 164
swStandardJISTaperedPipeTap
= 165
swStandardPCSReturnPins
= 166
swStandardPCSCorePins
= 167
swStandardPCSEjectorPins
= 168
swStandardPCSStandardLeaderPins
= 169
swStandardPCSSocketCapScrew
= 170
swStandardPCSStripperBolt
= 171
swStandardPCSSupportPillarSHCS
= 172
swStandardPCSFlatHead100
= 173
swStandardPCSFlatHead82
= 174
swStandardPCSOval
= 175
swStandardPCSFlatSocket82
= 176
swStandardPCSHcoilTapDrills
= 177
swStandardPCSFractionalDrillSizes
= 178
swStandardPCSNumberDrillSizes
= 179
swStandardPCSPipeTapDrills
= 180
swStandardPCSScrewClearances
= 181
swStandardPCSAllDrillSizes
= 182
swStandardPCSEjectorPinClearances
= 183
swStandardPCSLetterDrillSizes
= 184
swStandardPCSSupportPillarClearances
= 185
swStandardPCSCorePinClearances
= 186
swStandardPCSLeaderPinClearances
= 187
swStandardPCSReturnPinClearances
= 188
swStandardPCSTapDrills
= 189
swStandardPCSBottomingTappedHole
= 190
swStandardPCSTappedHole
= 191
swStandardPCSTaperedPipeTap
= 192
swStandardProgressiveSocketCapScrew
= 193
swStandardProgressiveReturnPins
= 194
swStandardProgressiveCorePins
= 195
swStandardProgressiveEjectorPins
= 196
swStandardProgressiveSpruePullerPins
= 197
swStandardProgressiveSupportPillarSHCS
= 198
swStandardProgressiveStripperBolt
= 199
swStandardProgressiveStandardLeaderPins
= 200
swStandardProgressiveFlatSocket82
= 201
swStandardProgressiveOval
= 202
swStandardProgressiveFlatHead100
= 203
swStandardProgressiveFlatHead82
= 204
swStandardProgressiveHcoilTapDrills
= 205
swStandardProgressiveFractionalDrillSizes
= 206
swStandardProgressiveNumberDrillSizes
= 207
swStandardProgressivePipeTapDrills
= 208
swStandardProgressiveScrewClearances
= 209
swStandardProgressiveAllDrillSizes
= 210
swStandardProgressiveEjectorPinClearances
= 211
swStandardProgressiveLetterDrillSizes
= 212
swStandardProgressiveSupportPillarClearances
= 213
swStandardProgressiveCorePinClearances
= 214
swStandardProgressiveLeaderPinClearances
= 215
swStandardProgressiveSpruePullerPinClearances
= 216
swStandardProgressiveReturnPinClearances
= 217
swStandardProgressiveTapDrills
= 218
swStandardProgressiveTappedHole
= 219
swStandardProgressiveBottomingTappedHole
= 220
swStandardProgressiveTaperedPipeTap
= 221
swStandardSuperiorReturnPins
= 222
swStandardSuperiorEjectorPins
= 223
swStandardSuperiorSpruePullerPins
= 224
swStandardSuperiorSupportPillarSHCS
= 225
swStandardSuperiorStripperBolt
= 226
swStandardSuperiorSocketCapScrew
= 227
swStandardSuperiorStandardLeaderPins
= 228
swStandardSuperiorFlatHead100
= 229
swStandardSuperiorFlatHead82
= 230
swStandardSuperiorOval
= 231
swStandardSuperiorFlatSocket82
= 232
swStandardSuperiorHcoilTapDrills
= 233
swStandardSuperiorFractionalDrillSizes
= 234
swStandardSuperiorNumberDrillSizes
= 235
swStandardSuperiorPipeTapDrills
= 236
swStandardSuperiorScrewClearances
= 237
swStandardSuperiorAllDrillSizes
= 238
swStandardSuperiorEjectorPinClearances
= 239
swStandardSuperiorLetterDrillSizes
= 240
swStandardSuperiorSupportPillarClearances
= 241
swStandardSuperiorLeaderPinClearances
= 242
swStandardSuperiorSpruePullerPinClearances
= 243
swStandardSuperiorReturnPinClearances
= 244
swStandardSuperiorTapDrills
= 245
swStandardSuperiorTappedHole
= 246
swStandardSuperiorBottomingTappedHole
= 247
swStandardSuperiorTaperedPipeTap
= 248
End Enum
Public Enum swWzdHoleCounterSinkHeadClearanceTypes_e
swHeadClearanceIncreasedCsink
= 0
swHeadClearanceAddToCbore
= 1
End Enum
Public Enum swWzdHoleHcoilTapTypes_e
swTapTypePlug
= 0
swTapTypeBottom
= 1
End Enum
Public Enum swWzdHoleScrewClearanceTypes_e
swScrewClearanceClose
= 0
swScrewClearanceNormal
= 1
swScrewClearanceLoose
= 2
End Enum
Public Enum swWzdHoleCosmeticThreadTypes_e
swCosmeticThreadNone
= 0
swCosmeticThreadWithCallout
= 1
swCosmeticThreadWithoutCallout
= 2
End Enum
Public Enum swWzdHoleThreadEndCondition_e
swEndThreadTypeBLIND
= 0
swEndThreadTypeTHROUGH_ALL
= 1
swEndThreadTypeTHROUGH_NEXT
= 2
End Enum
Public Enum swEndConditions_e
swEndCondBlind
= 0
swEndCondThroughAll
= 1
swEndCondThroughNext
= 2
swEndCondUpToVertex
= 3
swEndCondUpToSurface
= 4
swEndCondOffsetFromSurface
= 5
swEndCondMidPlane
= 6
swEndCondUpToBody
= 7
End Enum
Function CreateHoleWizardFeature _
( _
swApp
As SldWorks.SldWorks, _
swModel
As SldWorks.ModelDoc2 _
) As Boolean
Dim
swFeatMgr As
SldWorks.FeatureManager
Dim
swFeat As
SldWorks.feature
Dim
swWizHole As
SldWorks.WizardHoleFeatureData2
Set
swFeatMgr = swModel.FeatureManager
Set
swFeat = swFeatMgr.HoleWizard
_
(
_
swWzdCounterBore,
_
swStandardISO,
_
swStandardISOHexCapScrew,
_
"M6",
_
swEndThreadTypeBLIND,
_
0.0066,
_
0.02,
_
0.014547,
_
0.004,
_
0#,
_
1#,
_
2.059488517353,
_
0#,
_
0#,
_
0#,
_
0#,
_
0#,
_
0#,
_
0#
_
)
'
Hole creation can fail due to geometry conditions
If
swFeat Is Nothing Then
CreateHoleWizardFeature
= False
Exit
Function
End
If
Set
swWizHole = swFeat.GetDefinition
Debug.Print
"Feature = " + swFeat.Name
Debug.Print
" Type
=
" & swWizHole.Type
Debug.Print
""
Debug.Print
" CosmeticThreadType
=
" & swWizHole.CosmeticThreadType
Debug.Print
" CounterBoreDepth
=
" & swWizHole.CounterBoreDepth
* 1000# & " mm"
Debug.Print
" CounterBoreDiameter
=
" & swWizHole.CounterBoreDiameter
* 1000# & " mm"
Debug.Print
" CounterDrillAngle
=
" & swWizHole.CounterDrillAngle
* 57.3 & " deg"
Debug.Print
" CounterDrillDepth
=
" & swWizHole.CounterDrillDepth
* 1000# & " mm"
Debug.Print
" CounterDrillDiameter
=
" & swWizHole.CounterDrillDiameter
* 1000# & " mm"
Debug.Print
" CounterSinkAngle
=
" & swWizHole.CounterSinkAngle
* 57.3 & " deg"
Debug.Print
" CounterSinkDiameter
=
" & swWizHole.CounterSinkDiameter
* 1000# & " mm"
Debug.Print
" Depth
=
" & swWizHole.Depth *
1000# & " mm"
Debug.Print
" Diameter
=
" & swWizHole.Diameter
* 1000# & " mm"
Debug.Print
" DrillAngle
=
" & swWizHole.DrillAngle
* 57.3 & " deg"
Debug.Print
" EndCondition
=
" & swWizHole.EndCondition
'Debug.Print
" Face
=
" & swWizHole.face
Debug.Print
" FarCounterSinkAngle
=
" & swWizHole.FarCounterSinkAngle
* 57.3 & " deg"
Debug.Print
" FarCounterSinkDiameter
=
" & swWizHole.FarCounterSinkDiameter
* 1000# & " mm"
Debug.Print
" FastenerSize
=
" & swWizHole.FastenerSize
Debug.Print
" FastenerType
=
" & swWizHole.FastenerType2
'Debug.Print
" GetEndConditionReference
=
" & swWizHole.GetEndConditionReference
Debug.Print
" HeadClearance
=
" & swWizHole.HeadClearance
* 1000# & " mm"
Debug.Print
" HeadClearanceType
=
" & swWizHole.HeadClearanceType
Debug.Print
" HoleDepth
=
" & swWizHole.HoleDepth
* 1000# & " mm"
Debug.Print
" HoleDiameter
=
" & swWizHole.HoleDiameter
* 1000# & " mm"
Debug.Print
" MajorDiameter
=
" & swWizHole.MajorDiameter
* 1000# & " mm"
Debug.Print
" MidCounterSinkAngle
=
" & swWizHole.MidCounterSinkAngle
* 57.3 & " deg"
Debug.Print
" MidCounterSinkDiameter
=
" & swWizHole.MidCounterSinkDiameter
* 1000# & " mm"
Debug.Print
" MinorDiameter
=
" & swWizHole.MinorDiameter
* 1000# & " mm"
Debug.Print
" NearCounterSinkAngle
=
" & swWizHole.NearCounterSinkAngle
* 57.3 & " deg"
Debug.Print
" NearCounterSinkDiameter
=
" & swWizHole.NearCounterSinkDiameter
* 1000# & " mm"
Debug.Print
" Standard
=
" & swWizHole.Standard2
Debug.Print
" TapDrillDepth
=
" & swWizHole.TapDrillDepth
* 1000# & " mm"
Debug.Print
" TapDrillDiameter
=
" & swWizHole.TapDrillDiameter
* 1000# & " mm"
Debug.Print
" ThreadAngle
=
" & swWizHole.ThreadAngle
* 57.3 & " deg"
Debug.Print
" ThreadDepth
=
" & swWizHole.ThreadDepth
* 1000# & " mm"
Debug.Print
" ThreadDiameter
=
" & swWizHole.ThreadDiameter
* 1000# & " mm"
Debug.Print
" ThruHoleDepth
=
" & swWizHole.ThruHoleDepth
* 1000# & " mm"
Debug.Print
" ThruHoleDiameter
=
" & swWizHole.ThruHoleDiameter
* 1000# & " mm"
Debug.Print
" ThruTapDrillDepth
=
" & swWizHole.ThruTapDrillDepth
* 1000# & " mm"
Debug.Print
" ThruTapDrillDiameter
=
" & swWizHole.ThruTapDrillDiameter
* 1000# & " mm"
Debug.Print
" Type
=
" & swWizHole.Type
CreateHoleWizardFeature
= True
End Function
Sub main()
Dim
swApp As
SldWorks.SldWorks
Dim
swMathUtil As
SldWorks.MathUtility
Dim
swModel As
SldWorks.ModelDoc2
Dim
swSelMgr As
SldWorks.SelectionMgr
Dim
swFeat As
SldWorks.feature
Dim
swSketch As
SldWorks.Sketch
Dim
vSketchPtArr As
Variant
Dim
vSketchPt As
Variant
Dim
swSketchPt As
SldWorks.SketchPoint
Dim
swSketchXform As
SldWorks.MathTransform
Dim
nPtData(2) As
Double
Dim
vPtArr As
Variant
Dim
swPt As
SldWorks.MathPoint
Dim
bRet As
Boolean
Set
swApp = Application.SldWorks
Set
swMathUtil = swApp.GetMathUtility
Set
swModel = swApp.ActiveDoc
Set
swSelMgr = swModel.SelectionManager
Set
swFeat = swSelMgr.GetSelectedObject5(1)
Set
swSketch = swFeat.GetSpecificFeature2
Set
swSketchXform = swSketch.ModelToSketchTransform
Set
swSketchXform = swSketchXform.Inverse
vSketchPtArr
= swSketch.GetSketchPoints
For
Each vSketchPt In vSketchPtArr
Set
swSketchPt = vSketchPt
nPtData(0)
= swSketchPt.X
nPtData(1)
= swSketchPt.Y
nPtData(2)
= swSketchPt.Z
vPtArr
= nPtData
Set
swPt = swMathUtil.CreatePoint(vPtArr)
Set
swPt = swPt.MultiplyTransform(swSketchXform)
bRet
= swModel.SelectByID2("",
"FACE", swPt.ArrayData(0), swPt.ArrayData(1), swPt.ArrayData(2))
Debug.Assert
bRet
'
Do not assert because hole creation can fail due to
'
geometry conditions
bRet
= CreateHoleWizardFeature(swApp, swModel)
Next
End Sub