【テクニカル・上級編】【穴ウィザード完全制覇】HoleWizardDefデータ構造体を用いた「深さ指定付きねじ穴」と「座ぐり加工」の完全プログラム生成 – SolidWorks VBA解析バイブル

スポンサーリンク

SolidWorks VBAを掌握する:HoleWizardDefによる「ねじ穴・座ぐり」の完全自動生成アーキテクチャ

SolidWorks APIにおいて、穴ウィザード(Hole Wizard)は最も「魔窟」に近い領域だ。GUIでは簡単に設定できるパラメータも、背後のデータ構造体 `HoleWizardFeatureData` を直接操作しようとすると、規格(Standard)、タイプ(Type)、サイズ(Size)の不整合によって、いとも簡単に `swFeatureHoleWizard` の生成エラーに直面する。

本稿では、レガシー環境でも堅牢に動作する、穴ウィザード自動生成の「極致」を伝授する。

—

1. 穴ウィザードのデータ構造を支配する

穴ウィザードをプログラムで生成する際、最大の罠は「データ定義の順序」にある。`HoleWizardFeatureData` インターフェースを利用する際、まず `FeatureManager.FeatureHoleWizard` を呼び出す前に、適切な `HoleWizardDef` 構造体を構築しなければならない。

特にJIS規格のような複雑な階層を持つ場合、`SetParameters` を呼び出す順序を誤ると、SolidWorks内部のプロパティマネージャ・キャッシュと整合性が取れず、不正なジオメトリが生成される。

アーキテクトの戒め:メモリリークとオブジェクト管理

VBA環境下において、`Feature` オブジェクトや `SelectionMgr` はメモリを食い荒らす。必ず `Set` した後は、処理の最後に `Nothing` を明示的に代入し、COMカウンタをデクリメントさせること。これを怠るシステムは、長時間のバッチ処理で確実にクラッシュする。

—

2. 【実装コード】ねじ穴・座ぐり生成のマスターピース

以下のコードは、JIS規格に基づく「M8 ねじ穴」および「座ぐり加工」を生成するための定石である。

‘ 伝説的な穴ウィザード生成ルーチン
Sub CreatePrecisionHoleWizard()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swFeatMgr As SldWorks.FeatureManager
Dim swHoleData As SldWorks.HoleWizardFeatureData

Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swFeatMgr = swModel.FeatureManager

‘ 1. データ定義の初期化
Set swHoleData = swFeatMgr.CreateDefinition(swFeatureHoleWizard)

‘ 2. 穴のプロパティ設定 (JIS規格: 1, ねじ穴: 1, M8: “M8”)
‘ 注意: 規格名やタイプ名はSWの言語設定に依存するため、
‘ 本番環境ではGetStandardNames等で動的に取得するのが定石
With swHoleData
.Standard = swHoleWizardStandard_JIS
.Type = swHoleWizardType_TappedHole
.Size = “M8”
.EndCondition = swEndConditionBlind
.Depth = 0.025 ‘ 25mm
.ThreadDepth = 0.020 ‘ 20mm

‘ 座ぐり加工を有効化
.CounterBoreEnable = True
.CounterBoreDiameter = 0.015
.CounterBoreDepth = 0.005
End With

‘ 3. フィーチャ生成
‘ 座標(0, 0, 0)に配置
swModel.Extension.SelectByRay Array(0, 0, 0, 0, 0, -1), Nothing, 0, 0, False, Nothing

Dim swFeat As SldWorks.Feature
Set swFeat = swFeatMgr.CreateFeature(swHoleData)

‘ 4. オブジェクトの明示的解放(メモリ最適化の極致)
Set swFeat = Nothing
Set swHoleData = Nothing
Set swFeatMgr = Nothing
Set swModel = Nothing
End Sub

—

3. シニアエンジニアが知るべき「深層の不整合」

規格名(String Literal)の呪い

上記のコードで `swHoleWizardStandard_JIS` を使用しているが、実は SolidWorks のバージョンやインストールされている言語パックによって、内部で参照される規格名文字列が微妙に異なる場合がある。
大規模システム連携を行う際は、ハードコードを避け、`swApp.GetUserPreferenceStringList` を用いて、稼働環境の規格リストを動的に解析し、インデックスで指定する設計にすべきだ。

Windows APIによる「再描画制御」の最適化

穴ウィザードのような重い演算を伴うフィーチャを連続生成する場合、`swModel.GraphicsRedraw2` や `swApp.SuppressModelErrors` を多用すると、SolidWorksの描画パイプラインがボトルネックになる。
大量の穴を打つ場合は、`swModel.FeatureManager.EnableFeatureTree = False` を使用し、更新を完全に止めた状態で生成ループを回し、最後に一括再構築(Rebuild)を行うのが、パフォーマンスの「真の最適化」である。

—

結びに:自動化の先にあるもの

穴ウィザードの自動化は、単なる定型作業の排除ではない。それは、設計の標準化という「秩序」をCADデータに強制するプロセスである。

もし君が、さらに高度なシステム(例えば、PDMからの属性取得による自動穴あけ)を構築するのであれば、APIの戻り値だけでなく、`IFeature::GetDefinition` で得られるプロキシオブジェクトのライフサイクルを厳密に管理してほしい。

自動化コードは、書かれた瞬間から「保守」という名の腐敗が始まる。だからこそ、オブジェクトを解放し、規格の揺らぎを吸収し、エラーハンドリングを徹底する。それが、SolidWorksアーキテクトとしての矜持だ。

健闘を祈る。

タイトルとURLをコピーしました