【入門編】【干渉チェックの自動レポート化】IAssemblyDoc.FeatureInterference2の結果をExcelの表形式とキャプチャ画像付きで出力 – SolidWorks VBA解析バイブル

スポンサーリンク

【SolidWorks APIの極致】干渉チェックの完全自動レポート化術

こんにちは。現場で泥臭く、かつスマートに自動化を推し進める諸君。
マクロの記録ボタンを押して「動いたからヨシ!」と満足するのは今日で終わりにしよう。

大規模アセンブリの干渉チェックを人力でやるなど、我々の時間をドブに捨てるようなものだ。今回は、SolidWorks APIの深淵に触れ、「干渉チェックを自動実行し、結果をExcelに美しく出力する」という現場で即戦力となるアーキテクチャを伝授する。

1. 概念の核心:なぜ「ModelDoc2」を理解すべきか

SolidWorks APIを操る上で、`SldWorks`(アプリケーション本体)と`ModelDoc2`(開いているファイル)の関係を理解していない者が多すぎる。

  • SldWorks: 司令塔。SolidWorksという巨大なシステム全体を管理する。
  • ModelDoc2: 現場の作業員。現在開いている部品やアセンブリそのもの。

干渉チェックを行うには、`ModelDoc2`を`AssemblyDoc`という「アセンブリ専用の特殊な型」にキャスト(変換)する必要がある。これが最初にして最大の関門だ。

2. 【実装コード】干渉を検出し、Excelへ転送する

このコードは、現在開いているアセンブリの干渉を検出し、Excelのシートへ「干渉部品名」「侵入体積」「画面キャプチャ」を叩き込むものだ。

‘ 必要な参照設定: Microsoft Excel XX.X Object Library
Sub AutoInterferenceReport()
Dim swApp As SldWorks.SldWorks
Dim swAssy As SldWorks.AssemblyDoc
Dim swModel As SldWorks.ModelDoc2
Dim swIntMgr As SldWorks.InterferenceDetectionMgr
Dim vInterferences As Variant

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

If swModel.GetType <> swDocASSEMBLY Then
MsgBox “アセンブリを開いてください”
Exit Sub
End If

Set swAssy = swModel

‘ 干渉チェックのセットアップ
Set swIntMgr = swAssy.InterferenceDetectionMgr
swIntMgr.CreateInterferenceDetectionSettings

‘ 干渉計算実行
vInterferences = swIntMgr.GetInterferences

‘ Excel操作(※事前にExcelインスタンスを起動しておくこと)
Dim xlApp As Object: Set xlApp = GetObject(, “Excel.Application”)
Dim ws As Object: Set ws = xlApp.ActiveSheet

Dim i As Integer
For i = 0 To UBound(vInterferences)
Dim interference As SldWorks.Interference
Set interference = vInterferences(i)

‘ 1. 名前と体積の出力
ws.Cells(i + 2, 1).Value = interference.Comp1.Name2 & ” と ” & interference.Comp2.Name2
ws.Cells(i + 2, 2).Value = interference.Volume

‘ 2. 干渉箇所のキャプチャ(ここが重要!)
‘ 該当箇所にズームして画像保存→Excelへ貼り付けというフローが必要
‘ ※簡略化のため、ここではズーム処理のヒントを記載
swModel.ShowNamedView2 “Isometric”, -1
swModel.ViewZoomToSelection
swModel.SaveAs2 “C:\Temp\int_” & i & “.jpg”, 0, False, False
ws.Pictures.Insert(“C:\Temp\int_” & i & “.jpg”).Select
Next i

MsgBox “レポート生成完了!”
End Sub

3. 現場で陥りやすい「3つの罠」

初学者が必ず突き当たる壁がこれだ。覚えておいてくれ。

① 型の不一致(Type Mismatch)

`swModel` を `AssemblyDoc` にセットする際、開いているのが部品(Part)だとエラーになる。必ず `swModel.GetType` で判定するガード節を入れること。これが堅牢なコードの第一歩だ。

② 画像保存のタイミング

`SaveAs2` は非常に強力だが、SolidWorksの画面更新(グラフィックの再描画)が追いつかないうちに実行すると、真っ黒な画像が撮れることがある。必要に応じて `DoEvents` や `Sleep` 関数で、描画完了を待つ「間」を作ることが重要だ。

③ インターフェースの解放

大規模アセンブリを扱う際、オブジェクトを `Nothing` に戻さないとメモリリークの原因になる。コードの最後には必ず `Set swAssy = Nothing` を記述する癖をつけよう。これができるか否かで、エンジニアとしての格が変わる。

4. 次のステップへ

このツールを完成させれば、君はもう「マクロを記録する人」ではない。「SolidWorksの挙動をプログラムで制御するアーキテクト」だ。

次は、これを「干渉があったら即座に色を変えてハイライトする」機能や、「干渉体積が一定以上のものだけを抽出する」フィルター機能に拡張してみるといい。APIの世界は奥深い。だが、一つひとつ積み上げれば、君の設計環境は劇的に進化するはずだ。

困ったことがあれば、またいつでも聞いてくれ。設計の現場から、エンジニアの未来を切り拓こう。

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