SolidWorks VBAの真髄:HoleWizardDefで「穴ウィザード」を完全掌握する
こんにちは。SolidWorksの自動化の世界へようこそ。
普段、手作業でポチポチと穴ウィザードを設定していませんか?もしそうなら、今日でそのルーチンワークとは決別しましょう。
今回は、SolidWorks APIの中でも特に難解と言われる「穴ウィザード(Hole Wizard)」を、`HoleWizardDef`データ構造体を使って完全に制御する術を伝授します。マクロの記録では決して生成できない、プロフェッショナルなコードの書き方を一緒に学びましょう。
—
1. なぜ「HoleWizardDef」なのか?
マクロの記録を使うと、穴ウィザードの操作は膨大なパラメータの羅列として記録されます。しかし、それらは特定の環境に依存しすぎており、汎用性がありません。
`HoleWizardDef`を使う理由はただ一つ。「SolidWorksの穴ウィザードという巨大なブラックボックスを、コードから直接パラメータとして叩き込むため」です。これを使うことで、規格(JIS)、サイズ(M8など)、深さ、座ぐりを、論理的に制御できるようになります。
—
2. 実践コード:深さ指定付きねじ穴と座ぐりの生成
それでは、実際にM8のねじ穴を深さ指定で作成するコードを見てみましょう。
Option Explicit
Sub CreateSmartHole()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swFeature As SldWorks.Feature
Dim swHoleDef As SldWorks.HoleWizardFeatureData
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
‘ 1. 穴ウィザード定義用オブジェクトを初期化
Set swHoleDef = swModel.FeatureManager.CreateDefinition(swFtrType_HoleWiz)
‘ 2. 穴のタイプを設定(ねじ穴:swWizHoleType_TappedHole)
swHoleDef.HoleType = swWizHoleType_TappedHole
‘ 3. 標準規格の設定(JIS規格)
swHoleDef.Standard = swStandard_JIS
‘ 4. ねじサイズと深さの設定
‘ 注意:パラメータ名はSolidWorksの内部仕様に依存するため、文字列で指定します
swHoleDef.Type = “タップ穴”
swHoleDef.Size = “M8”
swHoleDef.EndCondition = swEndCond_Blind ‘ 深さ指定(止まり穴)
swHoleDef.Depth = 0.025 ‘ 25mm (メートル単位なので注意!)
‘ 5. 座ぐり(Counterbore)の有効化
‘ ここをTrueにすると、ねじ穴に座ぐり加工が追加されます
swHoleDef.CounterBoreEnable = True
swHoleDef.CounterBoreDiameter = 0.014 ‘ 座ぐり径 14mm
swHoleDef.CounterBoreDepth = 0.008 ‘ 座ぐり深さ 8mm
‘ 6. 最後にフィーチャとして生成
Set swFeature = swModel.FeatureManager.CreateFeature(swHoleDef)
MsgBox “穴ウィザードの生成が完了しました!”
End Sub
—
3. コードの心臓部を読み解く(ここが重要!)
単位は必ず「メートル」
SolidWorks APIの数値指定は、モデルの単位設定に関わらず「メートル法」が原則です。コード内で `0.025` と書いているのは 25mm を意味します。ここを間違えると、とんでもない巨大な穴が開いてしまいます。
`CreateDefinition` の役割
このメソッドは、まだ形を持たない「穴の設定データ」をメモリ上に生成する儀式です。いきなりフィーチャを作るのではなく、まずは「設定データ」を作り、それを `FeatureManager` に渡す。この2段階の手順こそが、APIを操る設計者の作法です。
—
4. 陥りやすい「エラーの罠」と対策
初心者が必ずぶつかる壁が2つあります。
1. 「スケッチの選択忘れ」: 穴ウィザードは、面上に点(スケッチ点)が存在しないと生成できません。コードを実行する前に、あらかじめスケッチで位置を決めておくか、`swModel.SketchManager.InsertPoint` で自動配置する処理を事前に入れておく必要があります。
2. 「規格文字列の不一致」: `swHoleDef.Size = “M8″` の部分は、お使いのSolidWorksの言語設定によって文字列が微妙に異なる場合があります。もしエラーが出るなら、一度手動で穴ウィザードを開き、プロパティマネージャーに表示されている文字列を正確にコピーして試してください。
—
最後に:ここをクリアすれば、あなたはもう脱初心者
今回紹介した `HoleWizardDef` を使いこなせるようになれば、既存の設計図面から穴情報を抽出し、自動で加工プログラム用の穴を生成するような「高度な自動化」も夢ではありません。
SolidWorks APIは、最初は難しく見えるかもしれません。しかし、オブジェクトのライフサイクル(定義→設定→生成)を理解すれば、これほど強力な武器はありません。
ぜひ、あなたの手元のパーツファイルでこのコードを走らせてみてください。「プログラムが自動で穴を開ける」という体験は、何度経験してもエンジニアとしての高揚感を感じさせてくれますよ。
何か不明点があれば、いつでも聞いてくださいね。あなたのエンジニアライフを全力でバックアップします!
