【入門編】【形状検証・検査】IMeasure.GetTotalSurfaceAreaとMassPropertiesによる設計変更後の重心・表面積の自動モニタリング – SolidWorks VBA解析バイブル

スポンサーリンク

SolidWorks自動化の極意:設計検証をコードで自動化する「重心・表面積モニタリング」のすゝめ

こんにちは。現場で泥臭く、しかしスマートにSolidWorksを操るための自動化エンジニアです。

「マクロの記録」ボタンを押して生成された、冗長で意味不明なコードの羅列に絶望したことはありませんか? SolidWorks VBAの本質は、APIという「SolidWorksの脳」に直接指令を送ることにあります。

今回は、設計変更のたびに手作業で質量特性を確認しているあなたへ、「形状変更直後に重心と表面積を自動チェックする」という、実務直結型の自動化ソリューションを伝授します。これさえ理解すれば、あなたはもう「手作業の奴隷」ではありません。

1. なぜ「MassProperties」を扱うのか?

SolidWorksのGUI上で「質量特性」ウィンドウを開くのは、実は非常にコストのかかる作業です。コードでこれを行う真の目的は、「数値の抽出」を自動化し、設計の合否判定を瞬時に行うことにあります。

私たちが扱うべき二つの柱

1. `IMeasure`: 表面積や体積を取得するためのツール。
2. `IMassProperty`: 重心(COG)や重量を計算するための強力なオブジェクト。

この二つを使いこなすことが、設計検証自動化の第一歩です。

2. 設計検証マクロの実装コード

このコードは、現在開いているパーツドキュメントの「表面積」と「重心」を計算し、あらかじめ設定した許容範囲を超えていないかチェックするものです。

Option Explicit

Sub VerifyDesignProperties()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swPart As SldWorks.PartDoc
Dim swMassProp As SldWorks.MassProperty

‘ SolidWorksに接続
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc

‘ パーツ以外が開かれている場合は終了
If swModel Is Nothing Or swModel.GetType <> swDocPART Then
MsgBox “パーツドキュメントを開いてください。”
Exit Sub
End If

‘ 質量特性オブジェクトの生成
Set swMassProp = swModel.Extension.CreateMassProperty

‘ 再計算を実行(これがないと古いデータのまま判定される罠に陥ります)
swMassProp.UseSystemUnits = True

‘ — 検証ロジック —
Dim surfaceArea As Double
Dim centerOfMass As Variant

surfaceArea = swMassProp.SurfaceArea
centerOfMass = swMassProp.CenterOfMass

‘ 許容範囲の定義(例:表面積が50000mm^2以下であること)
Const LIMIT_AREA As Double = 50000

If surfaceArea > LIMIT_AREA Then
MsgBox “警告: 表面積が許容値を超えています!” & vbCrLf & _
“現在値: ” & Round(surfaceArea, 2) & ” mm^2″, vbCritical
Else
MsgBox “検証成功: 設計値は許容範囲内です。” & vbInformation
End If
End Sub

3. 初学者が必ず陥る「3つの罠」

コードを書いていて「なぜか数値が更新されない」「エラーになる」と悩んだら、ここをチェックしてください。これが伝説的なエンジニアへの登竜門です。

① 「再計算(Rebuild)」の欠如

SolidWorksは、ジオメトリが変更されても、すぐに質量特性を再計算するわけではありません。コード内で `swModel.EditRebuild3` を呼び出すか、`swMassProp.Update` を適切に行う癖をつけましょう。

② 単位系の取り扱い

APIは基本的に「メートル法(メートル・キログラム・秒)」で値を返します。GUIでミリメートルを見ていると、数値が1000倍や1,000,000倍(面積の場合)違って見えます。`UseSystemUnits = True` を使うか、自分で単位変換する準備を忘れないでください。

③ 選択セットの罠

`MassProperty` オブジェクトは、デフォルトでは「モデル全体」を計算しますが、特定のボディを選択して計算することも可能です。将来的にマルチボディパーツを扱う場合は、`swMassProp.AddBodies` メソッドを調べてみてください。

4. エンジニアとしてのステップアップ

このマクロを「ボタンを押す」ところから、「モデル保存時に自動実行する(イベント駆動)」へと昇華させてみてください。

  • イベント駆動の活用: `SldWorks.ModelDoc2` のイベント機能を使えば、「保存ボタンを押した瞬間」や「フィーチャが更新された瞬間」にこの検証ロジックを走らせることが可能です。

「設計変更したら、勝手にチェックが走る」。これこそが、現代のエンジニアが目指すべき『設計の質を高めるための自動化』です。

最後に:コードはあなたの「分身」です

最初はエラーの連続かもしれません。しかし、APIを叩き、SolidWorksの内部構造を理解するプロセスは、あなたのエンジニアとしての視座を確実に一段引き上げます。

「面倒な作業はコードに任せる。自分は、コードが弾き出したデータを基に、より創造的な設計判断を行う」。そんな働き方を、今日から始めてみませんか?

もし実装で詰まったら、いつでもまたこのブログへ戻ってきてください。あなたの挑戦を、私はいつでも応援していますよ。

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