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

スポンサーリンク

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

設計現場における「質量特性の転記」ほど、エンジニアの貴重な時間を浪費する無意味な作業はない。GUIをポチポチとクリックし、Excelに数値を打ち込む。この作業に費やされる年間数百時間を、我々エンジニアは自動化という名の知的なハックで排除すべきだ。

本稿では、SolidWorks APIの核心である`MassProperty`オブジェクトを扱い、メモリを浪費させず、かつ堅牢にデータを抽出する「アーキテクト級」の実装手法を伝授する。

—

1. 勘違いされたAPI設計からの脱却

多くの初心者は、`ModelDoc2`のメソッドを闇雲に呼び出す。しかし、真のエンジニアは「オブジェクトのライフサイクル」を管理する。

`GetMassProperties`は、単に数値を返すだけの関数ではない。計算負荷の高い「ジオメトリ解析」を伴う重い処理だ。これをループ内で安易に叩けば、複雑なアセンブリではメモリリークや計算エラーを引き起こす。

我々が取るべき戦略は以下の3点だ。
1. オブジェクトの明示的解放: `Nothing`代入によるガベージコレクションの誘発。
2. エラーハンドリングの徹底: 抑制状態の構成部品や、再構築が必要なモデルを検知する。
3. Early Bindingの採用: `Object`型による遅延バインディングは、パフォーマンスとデバッグの敵である。必ず参照設定で `SolidWorks 20xx Type Library` を追加せよ。

—

2. 実装:MassProperty抽出の最適解

以下のコードは、アクティブなドキュメントから質量特性を抽出し、Excelへ書き出すための堅牢なテンプレートだ。

Option Explicit

‘ 伝説的なエンジニアは、変数スコープを極限まで絞る
Public Sub ExportMassPropertiesToExcel()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swMassProp As SldWorks.MassProperty
Dim vCenter As Variant

‘ 1. SldWorksインスタンスの取得
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc

If swModel Is Nothing Then Exit Sub

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

‘ 重要: 再計算の強制。これがなければ古いデータが返る
swMassProp.UseSystemUnits = False ‘ メートル法(SI)で取得し、後で変換するのが定石

‘ 3. データの抽出
vCenter = swMassProp.CenterOfMass

‘ 4. Excelへの出力ロジック
Call WriteToExcel(swModel.GetTitle, swMassProp.Volume, swMassProp.SurfaceArea, vCenter)

‘ 5. メモリ解放の儀式
Set swMassProp = Nothing
Set swModel = Nothing
Set swApp = Nothing
End Sub

Private Sub WriteToExcel(fileName As String, vol As Double, area As Double, center As Variant)
‘ 業務自動化の鉄則:Excelアプリの生成は最小限に
Dim xlApp As Object
Set xlApp = CreateObject(“Excel.Application”)
‘ … 以下、セルへの書き込み処理を記述
‘ 注意: ここでもSet xlApp = Nothingを忘れないこと
End Sub

—

3. シニアエンジニアが知るべき「罠」

再構築(Rebuild)の呪縛

`MassProperty`は、モデルが「再構築」されていない場合、最新のジオメトリを反映しない。システムを組む際は、必ず `swModel.ForceRebuild3` を実行するか、`swModel.EditRebuild3` を呼び出し、モデルがクリーンな状態であることを保証せよ。これを行わない自動化は、単なる「誤情報の量産ツール」に過ぎない。

単位系(Units)の罠

APIが返す値は、SolidWorksのシステム設定に依存する場合がある。浮動小数点演算の精度を保つため、内部的には常にSI単位系(メートル、キログラム)で計算し、表示段階で変換するアーキテクチャを組むのが、レガシー環境でも揺るがないシステム構築の定石だ。

大規模アセンブリのパフォーマンス対策

アセンブリの全構成部品をループして集計する場合、`MassProperty`を毎回生成しては破棄する処理はオーバーヘッドが大きい。一度 `GetMassProperties` を呼び出し、必要な情報を構造体にキャッシュする等の工夫が必要になる。

—

最後に:自動化は「守り」ではない、「攻め」である

今回提示したコードは、あくまで「基礎」だ。ここから先は、あなたの環境に合わせて、`FileSystemObject`を用いたログ出力、あるいはSQL Serverへの直接書き込みへと拡張していくべきだ。

コードを書くことは、作業を自動化することと同義ではない。「エンジニアが本来向き合うべき複雑な設計課題」に集中するための時間を生み出すことこそが、我々自動化エンジニアの真の職務である。

VBAはレガシーと言われることもあるが、SolidWorksの深層にこれほど直結できる言語は他にない。このAPIを掌握し、設計現場の風景を変えてやろう。それが、伝説を作るということだ。

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