穴ウィザードをプログラムで操る:HoleWizardDefで実現する「自動設計」への扉
こんにちは。SolidWorksの自動化の世界へようこそ。
普段、穴ウィザードを手動でポチポチと設定していませんか?もしあなたが「マクロの記録」ボタンを押しただけでは穴ウィザードが記録されない事実に絶望したことがあるなら、今日がその脱却の記念日です。
穴ウィザードはSolidWorksの中でも非常に「癖が強い」オブジェクトですが、`HoleWizardDef`データ構造体をマスターすれば、数千個の穴だって一瞬で、しかも正確に配置できるようになります。
今日は、その核心部分を一緒に紐解いていきましょう。
—
1. なぜ「マクロの記録」では穴ウィザードが生成されないのか?
まず、重要な事実をお伝えします。SolidWorksの穴ウィザードは「フィーチャ」として非常に複雑なパラメータ群(規格、サイズ、ねじ深さ、座ぐり等)を保持しています。これらは単なる座標の記録ではなく、データベースへのクエリに近い性質を持っています。
プログラムでこれを生成するには、「設計意図」をAPIに直接叩き込む必要があります。それが今回紹介する `FeatureManager.CreateHoleWizardMethod` です。
—
2. 【核心】HoleWizardDefデータ構造体の構築
穴ウィザードを生成する際、私たちは `WizardHoleFeatureData2` オブジェクトを操作します。これを構築する手順は、以下の3ステップです。
1. 穴のタイプを指定する(ISO規格のねじ穴など)
2. 寸法パラメータを定義する(M6、深さなど)
3. 位置を指定する(スケッチ点を使用)
実践コード:M6のISOねじ穴を配置する
以下のコードをVBAエディタに貼り付けてみてください。
Sub CreateISOHole()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swFeatMgr As SldWorks.FeatureManager
Dim swHoleDef As SldWorks.WizardHoleFeatureData2
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swFeatMgr = swModel.FeatureManager
‘ 1. 穴ウィザード用データ構造体の作成
Set swHoleDef = swFeatMgr.CreateDefinition(swFeatureNameID_e.swFtrTypeHoleWzd)
‘ 2. 規格の設定(ここではISO規格のネジ穴を指定)
‘ 注意:このIDはSolidWorksの内部データベースに準拠します
swHoleDef.HoleType = swWzdHoleType_e.swWzdCounterbore ‘ 今回は例として座ぐりを使用
swHoleDef.Standard = swWzdStandard_e.swStandardISO
swHoleDef.FastenerType = swWzdFastenerType_e.swStandardISO_SktHeadScrew
‘ 3. 寸法の設定(M6の場合のパラメータ例)
swHoleDef.Size = “M6”
swHoleDef.EndCondition = swEndConditions_e.swEndCondBlind
swHoleDef.Depth = 0.02 ‘ 20mm
‘ 4. フィーチャの生成
‘ ※あらかじめ平面を選択し、スケッチで点(穴位置)を作成しておく必要があります
swFeatMgr.InsertHoleWzd swHoleDef
End Sub
—
3. 初学者が必ずハマる「3つの落とし穴」
このコードを書く際、多くの人が以下の場所で躓きます。これを知っておくだけで、あなたのデバッグ時間は半分になります。
① スケッチ点の先行作成
穴ウィザードは「点」がないと成立しません。コード内でいきなり `InsertHoleWzd` を呼ぶのではなく、「平面を選択 → スケッチモードへ移行 → 点をプロット → スケッチ終了」というプロセスをプログラム的に踏む必要があります。
② 文字列パラメータの不一致
`swHoleDef.Size = “M6″` の部分は、SolidWorksの言語設定やデータベースの表記と完全に一致させる必要があります。もしエラーが出る場合は、手動で穴ウィザードを開き、プロパティマネージャーに表示されている文字列をそのままコピーしてコードに貼り付けてください。
③ インターフェースの不整合
`CreateDefinition` で作成したオブジェクトは、正しいタイプキャストが必要です。もし `WizardHoleFeatureData2` へのキャストがうまくいかない場合は、`swModel.FeatureManager.CreateDefinition(swFtrTypeHoleWzd)` の戻り値が正しく取得できているか、`Debug.Print` で確認しましょう。
—
4. 伝説のエンジニアからのアドバイス
穴ウィザードの自動化は、単なる作業の効率化ではありません。「標準化」です。
手動で穴を開けると、どうしても人によってねじ深さや公差設定にバラつきが出ます。しかし、プログラムで生成すれば、全製品で全く同じ品質の「ねじの掛かり」を保証できます。
まずは、一つのパーツに「M5のタップ穴を一つ開ける」という小さな目標から始めてみてください。それができれば、あとはループ処理(For Eachなど)を組み合わせて、100個の穴を瞬時に開けることだって可能です。
ここをクリアすれば、あなたはもう「マクロを記録する人」ではありません。「SolidWorksを設計する人」です。
さあ、エディタを開いて、あなたの設計をコードで書き換えましょう!何か分からないことがあれば、いつでもまた聞きに来てくださいね。応援しています。
