【入門編】【形状検証・検査】IMeasure.CalculateMassPropertiesによる「設計限界質量超過」の自動検出とアラートポップアップ実装 – SolidWorks VBA解析バイブル

スポンサーリンク

SolidWorks APIの真髄:設計の「重さ」をコードで監視せよ

こんにちは。SolidWorksの自動化の世界へようこそ。
「マクロの記録」ボタンを押して生成されたコードを眺めるだけの日々は、今日で卒業しましょう。

今回は、設計者が最も恐れるミスの一つである「質量超過」を、SolidWorks APIを使って自動検知するシステムを構築します。ただの計算ではありません。SolidWorksの内部エンジンである`IMeasure`を呼び出し、リアルタイムに設計限界を監視する「番人」をあなたのパーツに住まわせるのです。

なぜ「IMeasure」なのか?

SolidWorksのGUIで「質量特性」を見るのは簡単です。しかし、設計変更のたびに手動で開くのは非効率ですし、見落としも発生します。

我々エンジニアが目指すべきは「計算の自動化」と「判断の定型化」です。
`IMeasure`インターフェースは、SolidWorksの計算エンジンに直接アクセスする強力なツールです。これを使えば、モデルの体積、表面積、そして質量を瞬時に取得できます。

質量監視システムの構築ステップ

このマクロの肝は、「現在の質量を取得」→「許容値と比較」→「閾値を超えていれば警告」というシンプルなロジックを、いかに堅牢に実装するかです。

実装コード:設計限界質量アラート

以下のコードをVBAエディタにコピーしてください。これがあなたの設計を守る防波堤となります。

Option Explicit

‘ 設計限界質量(単位: kg)
Const LIMIT_MASS As Double = 5.0

Sub CheckMassProperties()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swModelDocExt As SldWorks.ModelDocExtension
Dim swMeasure As SldWorks.Measure
Dim currentMass As Double

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

‘ パーツが開かれていない場合のガード節
If swModel Is Nothing Or swModel.GetType <> swDocPART Then
MsgBox “パーツファイルを開いた状態で実行してください。”, vbCritical
Exit Sub
End If

Set swModelDocExt = swModel.Extension

‘ 測定オブジェクトの作成
Set swMeasure = swModelDocExt.CreateMeasure

‘ 計算の実行
If swMeasure.Calculate Then
currentMass = swMeasure.Mass

‘ 質量の比較とフィードバック
If currentMass > LIMIT_MASS Then
MsgBox “警告:設計限界質量を超過しました!” & vbCrLf & _
“現在値: ” & Format(currentMass, “0.000”) & ” kg” & vbCrLf & _
“限界値: ” & LIMIT_MASS & ” kg”, vbExclamation, “品質管理アラート”
Else
MsgBox “チェック完了:質量は許容範囲内です。” & vbCrLf & _
“現在値: ” & Format(currentMass, “0.000”) & ” kg”, vbInformation
End If
Else
MsgBox “質量計算に失敗しました。モデルのジオメトリを確認してください。”, vbCritical
End If
End Sub

初学者が必ず躓く「3つの落とし穴」

コードを書き写すだけでは、本当のエンジニアにはなれません。現場でよく起こるエラーの正体を知っておきましょう。

1. メモリの解放を忘れるな

VBAはオブジェクト指向の言語です。`Set`で変数に代入したオブジェクトは、使い終わったら`Set swMeasure = Nothing`のように解放する癖をつけましょう。小規模なマクロなら問題ありませんが、複雑なアセンブリでこれを怠るとメモリリークの原因になります。

2. 単位系(Unit)の罠

SolidWorksの内部計算は「メートル・キログラム・秒(MKS)」が基本です。もしあなたの設定がミリグラム単位のシステムであっても、APIはkgで値を返してくることがあります。`Format`関数を使って、ログに残す際は単位を明示する習慣をつけましょう。

3. 計算できない「ゴミ」を考慮せよ

`swMeasure.Calculate`が`False`を返すことがあります。これは、モデルが破損している場合や、面が閉じられていない(非ソリッド)場合に発生します。「計算は必ず失敗する可能性がある」という前提で、必ず`If`分岐でエラーハンドリングを行うのがプロの作法です。

さらなる高みを目指すあなたへ

このマクロを「ボタンを押して動かす」段階から脱却するには、「イベント駆動型」へのアップグレードが必要です。

SolidWorksには`PartDoc`のイベントをフックする機能があります。これを使えば、「保存ボタンを押した瞬間」や「フィーチャを修正した瞬間」に、自動的にこのチェックを走らせることも可能です。

「手動で確認する」という工程そのものを設計プロセスから排除する。これこそが、自動化エンジニアが提供できる最大の価値です。

まずはこのコードを動かし、自分の手で「設計の番人」を召喚してみてください。その先に、より知的でミスのない設計環境が待っています。応援していますよ!

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