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

スポンサーリンク

SolidWorks APIの真髄:MassPropertyを制し、モデル検証を「自動化」せよ

こんにちは。SolidWorksの深淵を覗き込み、手作業という名の無駄を排除し続けるアーキテクトです。

「マクロの記録」ボタンを押して得られるコードは、言わば「補助輪付きの自転車」です。あれは便利ですが、真の自動化エンジニアを目指すなら、SolidWorksが内部でどのようにオブジェクトを管理しているか、その「ライフサイクル」を知る必要があります。

今回は、設計品質を担保する上で欠かせない「MassProperty(質量特性)」の自動取得をテーマに、プロフェッショナルなVBA開発の第一歩を解説します。

1. なぜ「MassProperty」の理解が重要なのか?

設計の最終工程で、モデルの体積や重心位置をExcelに転記する作業、まだ手作業でやっていませんか?
その作業は「単純」なだけでなく、「転記ミス」という設計品質に関わるリスクを孕んでいます。

SolidWorks APIにおける `IMassProperty` オブジェクトは、モデルの幾何学情報を計算し、メモリ上に展開する役割を担います。これを使いこなせば、数秒で数百パーツのスペックをExcelへ書き出すことが可能です。

2. 【実践】MassProperty取得の実装コード

まずは、現在開いているドキュメントの質量特性を取得し、イミディエイトウィンドウに出力するコードを見てみましょう。

Option Explicit

‘ SolidWorksのメインオブジェクト
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swMassProp As SldWorks.MassProperty

Sub GetMassProperties()
‘ インスタンスの取得
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc

‘ ドキュメントが開かれているか確認
If swModel Is Nothing Then
MsgBox “モデルを開いてから実行してください。”, vbCritical
Exit Sub
End If

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

‘ 2. 計算範囲の設定(全モデルを対象)
swMassProp.UseSystemUnits = True

‘ 3. データの取得(計算実行)
‘ 戻り値がTrueなら計算成功
If swMassProp.Calculate Then
Debug.Print “— モデル検証レポート —”
Debug.Print “体積 : ” & swMassProp.Volume & ” mm^3″
Debug.Print “表面積 : ” & swMassProp.SurfaceArea & ” mm^2″
Debug.Print “質量 : ” & swMassProp.Mass & ” kg”

‘ 重心座標の取得 (配列で返ってくる点に注意)
Dim centerOfMass As Variant
centerOfMass = swMassProp.CenterOfMass
Debug.Print “重心(X,Y,Z) : ” & centerOfMass(0) & “, ” & centerOfMass(1) & “, ” & centerOfMass(2)
Else
MsgBox “質量特性の計算に失敗しました。”
End If
End Sub

3. 伝説のエンジニアが教える「陥りやすい罠」

このコードを書いていく中で、初心者が必ずぶつかる壁が2つあります。ここをクリアすれば、あなたはもう「脱・初心者」です。

罠①:配列の扱いに注意せよ

`swMassProp.CenterOfMass` は `Variant型(配列)` を返します。VBAでは配列のインデックスは `0` から始まるのが基本です。`centerOfMass(0)` がX座標、`centerOfMass(1)` がY座標……という構造を忘れないでください。

罠②:単位系(Unit)の落とし穴

`UseSystemUnits = True` を設定することで、SolidWorksの設定に依存した単位で値が取得されます。しかし、大規模なシステム開発では「常にメートル法(SI単位系)で取得する」といった統一基準が求められます。APIリファレンスを読み解き、`swMassProp.UseSystemUnits = False` とした時の単位系挙動も意識できるようになると、一段上のエンジニアになれます。

4. 次のステップ:Excel連携への架け橋

このコードを実務で使うなら、`Debug.Print` で終わらせてはいけません。

1. Excelオブジェクトを呼び出す: `CreateObject(“Excel.Application”)` を使用して、VBAからExcelを操作します。
2. ループ処理: `swApp.GetDocuments` を使って開いている全アセンブリ・パーツに対してこの処理をループさせれば、一括レポート生成ツールが完成します。

あなたへの課題

今回紹介した `CreateMassProperty` を軸にして、「アクティブなアセンブリ内の全構成部品の質量を計算し、ExcelのA列に部品名、B列に質量を書き出す」というコードに拡張してみてください。

最後に:自動化は「設計の余裕」を生む

コードを書くことは、単なるルーチンワークの削減ではありません。
「計算ミスがないか」という不安から解放され、「どうすればより良い設計ができるか」というクリエイティブな思考の時間を自分自身に与える行為なのです。

SolidWorks APIの世界は奥が深く、そして非常に論理的で美しいものです。
分からないことがあれば、またいつでも聞きに来てください。あなたの自動化の旅を、全力でサポートします。

さあ、エディタを開いて、最初のステップを踏み出しましょう!

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