【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の世界は奥深い。だが、一つひとつ積み上げれば、君の設計環境は劇的に進化するはずだ。
困ったことがあれば、またいつでも聞いてくれ。設計の現場から、エンジニアの未来を切り拓こう。
