アセンブリの深淵を可視化せよ:干渉箇所への3Dマーカー自動配置アーキテクチャ
SolidWorks APIを操るエンジニア諸君。設計者が「干渉チェック」のレポートを眺めながら、画面の奥深くにある衝突部位をマウスで必死に探す姿を、いつまで放置するつもりだ?
干渉チェックAPI(`IAssemblyDoc::AddInterference`)が返すデータは、ただの数値の羅列ではない。それは設計上の「腫瘍」そのものだ。本稿では、この膨大な干渉データを抽出し、空間座標をパースして、衝突地点に自動的に3Dマーカー(ダミーパーツ)を生成する、堅牢かつ高速な自動化アーキテクチャの真髄を伝授する。
—
1. 勘所:干渉検出APIの「メモリの罠」とライフサイクル管理
VBAでアセンブリを扱う際、最も陥りやすい罠が「IInterferenceオブジェクトの残留」だ。干渉チェックの結果はCOMオブジェクトとしてメモリ上に保持されるが、これをループ処理で適切に解放しないと、アセンブリが肥大化し、SolidWorks自体がメモリリークでクラッシュする。
究極のメモリ管理術
- 明示的な解放: `Set obj = Nothing` をループの末尾で必ず実行せよ。
- コレクションの利用: `IInterference`のリストを取得する際、Variant型の配列で一括取得し、必要最小限のデータのみを抽出してCOMの接続を即座に切断する。
—
2. 衝突地点を空間に刻む:実装コードの核心
以下のコードは、`IAssemblyDoc::GetInterference`から取得した干渉データから重心点(`Centroid`)を割り出し、そこに球体マーカーを生成するプロセッサの核となる。
‘ 伝説のアーキテクトによる干渉マーカー生成ロジック
Public Sub PlaceInterferenceMarkers(swApp As SldWorks.SldWorks, swAssy As SldWorks.AssemblyDoc)
Dim swModel As SldWorks.ModelDoc2
Set swModel = swAssy
‘ 干渉チェックの実行
Dim swInterference As SldWorks.Interference
Dim vInterferences As Variant
vInterferences = swAssy.GetInterferences
If IsEmpty(vInterferences) Then Exit Sub
Dim i As Long
For i = LBound(vInterferences) To UBound(vInterferences)
Set swInterference = vInterferences(i)
‘ 干渉部位の重心を取得
Dim vPoint As Variant
vPoint = swInterference.Centroid ‘ 衝突の中心座標(X, Y, Z)
‘ マーカーパーツ(ダミー)を生成・挿入
CreateMarkerPart swApp, swAssy, vPoint
‘ 循環参照を防ぐための明示的解放
Set swInterference = Nothing
Next i
swModel.ForceRebuild3 False
End Sub
Private Sub CreateMarkerPart(swApp As SldWorks.SldWorks, swAssy As SldWorks.AssemblyDoc, vPoint As Variant)
‘ 外部ファイル(マーカー用球体)を挿入し、座標を固定する
Dim swComp As SldWorks.Component2
Set swComp = swAssy.AddComponent(“C:\Lib\Marker_Ball.sldprt”, vPoint(0), vPoint(1), vPoint(2))
‘ 物理的な合致よりも、座標指定による「配置」の方が高速かつ安定する
‘ パフォーマンス重視のため、外部参照は最小限に抑える
End Sub
—
3. レガシー環境とWindows APIの静かなる協調
大規模アセンブリを扱う際、SolidWorksのUIスレッドをブロックしないことが重要だ。特に干渉チェックが長時間に及ぶ場合、Windows APIの `Sleep` 関数や `DoEvents` を適切に配置し、Windowsメッセージキューを制御せよ。
また、複雑なアセンブリでは `GetInterferences` 実行時に `swModel.EditSuppress2` を併用し、検査対象外のサブアセンブリを一時的に軽量化(サプレス)することで、解析時間を劇的に短縮できる。これこそが、数千パーツを超える現場で生き残るための「最適化の美学」だ。
—
4. チーフアーキテクトからの提言
このシステムは、単に「マーカーを置く」だけのものではない。
- 設計履歴のトレース: マーカーに干渉情報をカスタムプロパティとして埋め込めば、後から「なぜこの干渉が無視されたのか」を追跡できる監査ログとなる。
- システム連携: 取得した座標をJSON形式で書き出し、後続の製造シミュレーションや、Webベースのダッシュボードへ流し込むための「ゲートウェイ」としても機能する。
VBAはレガシーと言われるが、APIの深層を理解した者が書くコードは、PythonやC#をも凌駕する「現場直結の速さ」を持つ。コードはただ動けばいいのではない。アセンブリの静寂を切り裂き、設計者の盲点を突くために存在せよ。
諸君の環境で、このアーキテクチャが設計の未来を照らすことを期待する。
