【SolidWorks VBA】干渉箇所を可視化せよ!衝突位置に3Dマーカーを自動配置する極意
こんにちは。SolidWorksの自動化の世界へようこそ。
「マクロの記録」ボタンを押して、生成されたコードの解読に疲れていませんか?
今日は、その一段上のステージへ案内します。単に自動化するだけでなく、「設計者が直感的にミスを認識できる仕組み」を作る。これこそが、業務自動化エンジニアとしての腕の見せ所です。
今回は、「干渉チェックの結果をパースし、衝突位置に3Dマーカーを自動配置する」という、現場で即戦力となるテクニックを伝授します。
—
1. なぜ「干渉チェック」の自動化が必要なのか?
大規模なアセンブリになると、手動の干渉チェックでは見落としが発生します。また、レポートを出力しても、どの座標で衝突しているかを目視で探すのは時間の無駄です。
今回実装するコードの狙いは明確です。
「干渉箇所をプログラムで検出し、その座標に『真っ赤な球体』を生成して、一目で設計ミスを特定させる」こと。これにより、修正工数を劇的に減らします。
—
2. 開発の全体像(ロジックの設計)
今回のロジックは以下の4ステップで構成されます。
1. InterferenceDetectionManagerの取得: APIを叩いて干渉を計算。
2. 結果のパース: 衝突している2つのパーツと、その衝突中心座標を取得。
3. マーカーパーツの挿入: 座標を基準にダミーパーツ(球体)をアセンブリ内に配置。
4. クリーンアップ: 処理が終わったら適切にメモリを解放。
—
3. 実装コード:干渉自動可視化マクロ
このコードを標準モジュールに貼り付けてください。
Option Explicit
‘ 伝説的なコードへの入り口
Sub CreateInterferenceMarkers()
Dim swApp As SldWorks.SldWorks
Dim swAssy As SldWorks.AssemblyDoc
Dim swIntMgr As SldWorks.InterferenceDetectionMgr
Dim vInterferences As Variant
Dim i As Integer
Set swApp = Application.SldWorks
Set swAssy = swApp.ActiveDoc
‘ 1. 干渉チェックマネージャの初期化
Set swIntMgr = swAssy.InterferenceDetectionManager
swIntMgr.CreateInterferenceGroup = False
‘ 2. 干渉計算の実行
vInterferences = swIntMgr.GetInterferences
If IsEmpty(vInterferences) Then
MsgBox “素晴らしい!干渉箇所は見つかりませんでした。”
Exit Sub
End If
‘ 3. 干渉箇所をループ処理
For i = 0 To UBound(vInterferences)
Dim swInterference As SldWorks.Interference
Set swInterference = vInterferences(i)
‘ 干渉重心座標を取得
Dim vPoint As Variant
vPoint = swInterference.Centroid
‘ 4. マーカー配置関数を呼び出し
InsertMarkerPart swAssy, vPoint(0), vPoint(1), vPoint(2)
Next i
MsgBox “全干渉箇所にマーカーを配置しました。”
End Sub
‘ 座標にダミーパーツ(球体)を配置するヘルパー関数
Sub InsertMarkerPart(assy As SldWorks.AssemblyDoc, x As Double, y As Double, z As Double)
‘ ※事前に準備した「Marker.SLDPRT」を挿入する処理を想定
Dim swComp As SldWorks.Component2
Set swComp = assy.AddComponent(“C:\Lib\Marker.SLDPRT”, x, y, z)
‘ ここでマテ(合致)をかけずに固定座標で浮かせると視覚的に分かりやすい
swComp.FixComponent
End Sub
—
4. 陥りやすい罠とプロの心得
① 「型」へのこだわり
VBAの初心者は`Variant`型を乱用しがちです。しかし、APIが返すデータは構造が複雑です。`SldWorks.Interference`型のように、明確なオブジェクト型で受け取ることで、インテリセンス(入力補完)が効くようになり、タイプミスによるバグを激減させられます。
② メモリ管理の重要性
`Set swApp = Nothing` を書くのを忘れていませんか?
SolidWorksのAPIは強力ですが、オブジェクトの参照を放置するとSolidWorks自体が不安定になります。処理が終わったら必ずオブジェクトを解放する習慣をつけましょう。
③ 座標系への理解
`swInterference.Centroid` で返される座標は「アセンブリ原点」からの相対座標です。もしパーツ内部のローカル座標と混同すると、マーカーがとんでもない場所に飛んでいきます。常に「今、どの座標系を扱っているか」を意識してください。
—
5. 次のステップへ
このマクロを使いこなせれば、あなたはもう「マクロの記録」に頼るだけのユーザーではありません。
さらに洗練させるなら:
- 色分け機能: 干渉の深さ(Volume)によってマーカーの色を変える(赤=深刻、黄=許容範囲)。
- ログ出力: 干渉箇所をCSVに書き出し、設計レビューの議事録を自動生成する。
SolidWorks VBAは、単なる自動化ツールではなく、「設計の質を担保する強力なパートナー」です。ぜひ、このコードを改造して、あなただけの最強の設計環境を構築してください。
応援しています。困ったときは、またここへ戻ってきてくださいね。
