【実務・中級編】【モデル検証の自動化】MassPropertyから重心・体積・表面積を自動取得してExcelに集計する – SolidWorks VBA解析バイブル

スポンサーリンク

SolidWorks APIの真髄:MassPropertyを制し、モデル検証を「一瞬」で終わらせる技術

SolidWorks APIを扱うエンジニアの多くが陥る罠がある。それは「オブジェクトをただ呼び出すだけ」のコードだ。APIの仕様書をなぞるだけのコードは、モデルが複雑化した瞬間にメモリーリークや予期せぬクラッシュを引き起こす。

今回は、設計品質を担保するための「質量特性抽出」を題材に、実務で戦える堅牢なアーキテクチャを伝授する。

1. なぜ「そのコード」ではダメなのか

多くの初心者が書くコードは、`ModelDoc2` から直接値を読み取ろうとする。これは間違いではないが、設計としては脆い。

  • 再計算の保証がない: モデルのフィーチャーが抑制されていたり、再構築が必要な状態であれば、取得する値は「前回の保存時」のものになる。
  • 単位系の罠: SolidWorks内部の単位(SI単位系)と、Excel側で求められる単位(mm, kgなど)の変換を疎かにすると、致命的な計算ミスを招く。
  • ライフサイクルの管理不足: `MassProperty` オブジェクトを適切に開放しなければ、大量のモデルをループ処理する際にメモリーを食いつぶす。

現場で信頼されるツールを作るなら、「再構築の強制」→「単位変換の抽象化」→「確実にオブジェクトを破棄する」。この3ステップが必須だ。

2. 堅牢な質量特性抽出コード

以下に、実務でそのまま運用可能なプロフェッショナル・コードを示す。`swMassProp` オブジェクトを適切に管理し、エラーハンドリングを組み込んでいる。

Option Explicit

‘ 必要な定数の定義
Private Const SW_UNIT_MM As Long = 0
Private Const SW_UNIT_KG As Long = 0

Sub ExportMassPropertiesToExcel()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swMassProp As SldWorks.MassProperty
Dim vCenter As Variant

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

‘ 1. モデルが開かれているか確認
If swModel Is Nothing Then
MsgBox “ドキュメントが開かれていません。”, vbCritical
Exit Sub
End If

‘ 2. 再構築の強制(常に最新の値を保証する)
swModel.ForceRebuild3 False

‘ 3. MassPropertyオブジェクトの作成
Set swMassProp = swModel.Extension.CreateMassProperty

‘ 4. 単位設定(明示的にMKSを指定するのが鉄則)
swMassProp.UseSystemUnits = False

‘ 5. データ取得
vCenter = swMassProp.CenterOfMass

‘ — 以下、Excelへの出力処理のイメージ —
Debug.Print “重心 X: ” & vCenter(0) 1000 & ” mm”
Debug.Print “重心 Y: ” & vCenter(1) 1000 & ” mm”
Debug.Print “重心 Z: ” & vCenter(2) 1000 & ” mm”
Debug.Print “体積: ” & swMassProp.Volume 1000000000# & ” mm^3″
Debug.Print “表面積: ” & swMassProp.SurfaceArea 1000000# & ” mm^2″

‘ 6. メモリー開放の重要性
Set swMassProp = Nothing

MsgBox “抽出完了”, vbInformation
End Sub

3. 実務で勝つための「設計の勘所」

① 単位系をコードにハードコードしない

上記のコードでは、` 1000` などのマジックナンバーで単位変換を行っているが、これはあくまで簡易版だ。本来は、`swModel.Extension.GetUserPreferenceDouble` を使い、ドキュメントごとの単位設定を動的に取得するのが、真に堅牢なエンジニアの流儀である。

② ファイル連携の作法

Excelへの出力を行う際、`CreateObject(“Excel.Application”)` を多用してはいけない。すでに開かれているExcelインスタンスがある場合はそれを取得し、ない場合のみ新規作成する。さらに、処理終了後には `Nothing` を代入するだけでなく、`Quit` メソッドを呼び出すことも忘れてはならない。

③ エラーハンドリングの徹底

「モデルに面がない」「質量が計算できない複雑な曲面」が存在する場合、APIはエラーを吐く。

On Error GoTo ErrorHandler
‘ — 処理 —
Exit Sub

ErrorHandler:
MsgBox “致命的なエラー: ” & Err.Description
Set swMassProp = Nothing

このブロックを入れないコードは、生産現場では「未完成品」として扱われるべきだ。

結び:自動化は「信頼」をコードにする作業

SolidWorksの自動化は、単なる作業の代行ではない。設計者の意図をシステムに翻訳し、誤判定を排除する「品質の門番」を作る作業だ。

今回紹介した MassProperty の抽出は、自動化の入り口に過ぎない。しかし、この「正しいオブジェクトのライフサイクル管理」を身につけたあなたは、より高度なアセンブリ構成の解析や、PDM連携といった難題にも必ず立ち向かえるようになる。

さあ、退屈な手作業をコードに置き換え、より創造的な設計の時間を取り戻そう。何かわからないことがあれば、またこの門を叩くといい。

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