SolidWorks APIの深淵:HoleWizardDefで「穴ウィザード」を完全掌握する
諸君、SolidWorksの自動化において「穴ウィザード」ほど開発者を絶望させる機能はない。多くのエンジニアが`FeatureManager.InsertHoleWizard`のパラメータの多さに辟易し、結局「とりあえずマクロ記録して、生成されたハードコーディングされた数値をそのまま使う」という、保守性の欠片もないコードを量産している。
いいか、現場で生き残るコードを書きたければ、「マクロ記録はゴミである」という事実から目を背けるな。あれはAPIの動的な挙動を無視した、ただの「過去の残骸」だ。今日は、`HoleWizardFeatureData2`オブジェクトを正しく構築し、JIS規格を完全制御する「プロフェッショナルな実装」を伝授する。
—
1. なぜ「手抜き」がバグを生むのか
穴ウィザードのパラメータ設定で初心者が陥る罠は、「規格(Standard)とタイプ(Type)の依存関係」を無視することだ。
例えば、「M10」を定義しても、その前に「JIS」という規格が正しく選択されていなければ、バックグラウンドでデフォルト値への強制リセットが走り、設計意図とは異なる穴が生成される。
堅牢なコードの要諦は以下の3点だ。
1. FeatureDataの明示的な初期化: `CreateDefinition`で生成したオブジェクトを確実に型定義する。
2. 依存関係の解決: 規格→タイプ→サイズの順序を厳守する。
3. カプセル化: 穴の仕様をクラス化し、再利用可能なパーツとして切り出す。
—
2. 実装:HoleWizardDefを用いた完全制御コード
以下は、実務でそのまま使える、JIS規格に基づいた「深さ指定付きねじ穴」と「座ぐり加工」の生成クラスの雛形だ。これをコピペして、君のツールに組み込んでくれ。
‘ 必要な参照設定: SolidWorks 20xx Type Library
‘ この関数は、選択された面に対してJIS規格のねじ穴を生成する
Public Sub CreateJISHole(swApp As SldWorks.SldWorks, swModel As SldWorks.ModelDoc2)
Dim swFeatMgr As SldWorks.FeatureManager
Dim swHoleData As SldWorks.HoleWizardFeatureData2
Set swFeatMgr = swModel.FeatureManager
‘ 1. 定義オブジェクトの生成
Set swHoleData = swFeatMgr.CreateDefinition(swFtrType_HoleWizard)
‘ 2. 規格の設定 (JIS) – IDは定数で管理せよ
swHoleData.Standard = swHoleWizardStandard_JIS
swHoleData.HoleType = swHoleWizardHoleType_Counterbore ‘ 座ぐり
‘ 3. ねじ・サイズ指定 (M10)
swHoleData.FastenerType = swHoleWizardFastenerType_MetricTap
swHoleData.Size = “M10”
‘ 4. 終端条件と寸法設定
swHoleData.EndCondition = swEndCondition_Blind
swHoleData.Depth = 0.02 ‘ 20mm
‘ 5. 座ぐり寸法 (座ぐり径11mm, 座ぐり深さ5mm)
swHoleData.CounterBoreDiameter = 0.011
swHoleData.CounterBoreDepth = 0.005
‘ 6. フィーチャ生成
swFeatMgr.InsertFeature swHoleData
End Sub
—
3. プロダクション環境における「3つの鉄則」
① 単位系(Unit)の罠を排除せよ
SolidWorks APIは、内部的に常に「メートル法(m, kg, s)」で計算を行う。コード内で `0.02` と書けば20mmを意味する。もし君がミリ単位で計算したいなら、常に `mmToM = 0.001` といった定数を用意し、数値には必ず乗算するクセをつけろ。生の値は将来のバグの温床だ。
② データベース連携の最適化
もし君がExcelやAccessから穴径を読み込んで穴ウィザードを生成する場合、「文字列の完全一致」を信じるな。`Size` プロパティは規格によって文字列の表記が微妙に異なる。データベース側で「InternalKey(内部キー)」と「DisplayLabel(表示名)」を分離管理し、APIには内部キーのみを渡す設計にすること。
③ エラーハンドリングの徹底
`InsertFeature` は、面の法線が反転していたり、選択面が正しくない場合に平気で実行時エラーを吐く。
‘ 推奨する実装
Dim swFeat As SldWorks.Feature
Set swFeat = swFeatMgr.InsertFeature(swHoleData)
If swFeat Is Nothing Then
Err.Raise vbObjectError + 1001, “HoleWizard”, “穴の生成に失敗しました。パラメータを確認してください。”
End If
このように、生成結果をオブジェクトとして受け取り、`Nothing` チェックを行うのが「自動化エンジニア」としての最低限の流儀だ。
—
最後に:エンジニアへ告ぐ
SolidWorksの自動化とは、単にマウス操作を置き換えることではない。「設計の意図をプログラムに翻訳すること」だ。
穴ウィザードのパラメータを制御できるということは、製品の標準化をコードレベルで強制できるということと同義である。
この知識を武器に、君の設計現場から「手動によるヒューマンエラー」を完全に駆逐してくれ。もしさらに高度な「コンフィギュレーションごとの穴制御」が必要なら、また聞いてくれ。深淵の先まで案内しよう。
