SolidWorksモーションスタディを完全掌握せよ:VBAによる「数式駆動型」アニメーション自動生成の極意
SolidWorksのUI上でちまちまとキーフレームをドラッグ&ドロップしているようでは、プロのエンジニアとは呼べない。
複雑なカム機構や、外部の数式モデル(MATLABやExcel等)で最適化された運動データ。これらをアセンブリに流し込み、一瞬で「検証可能なアニメーション」として出力する。これが、我々が目指すべき「アルゴリズム駆動の設計自動化」だ。
今回は、SolidWorks APIの中でも特にドキュメントが少なく、ブラックボックス化されがちな「MotionStudy(動作スタディ)」をVBAから直接叩く技術を伝授する。
—
1. なぜ「手動操作」がエンジニアリングのボトルネックなのか
多くの現場で、モーションの調整は「勘」に頼っている。しかし、設計の品質を担保するのは数値だ。
- 非効率な点: 手動でキーフレームを打つと、微細なタイミングのズレが解析結果のノイズになる。
- あるべき姿: 外部データ(CSVや行列)から読み込んだ回転角や変位を、API経由で「指定時間」の「指定値」として注入する。これにより、再現性と検証可能性を完璧に担保する。
—
2. 実装の要諦:MotionStudyManagerを支配する
SolidWorks APIにおいて、モーションスタディは `IMotionStudyManager` を介して制御する。注意すべきは、「スタディはアクティブな状態でないと操作を受け付けない」という制約だ。
堅牢なコード設計のための鉄則
1. エラーハンドリング: `swApp.CommandInProgress` を必ず確認すること。計算中に次のコマンドを投げればSolidWorksは即座にクラッシュする。
2. イベントの同期: キーフレーム追加後は、必ず `MotionStudy.Calculate` を呼び出し、内部状態をフラッシュさせる。
—
3. プロダクションコード:モーター回転角の動的制御
以下のコードは、指定したモーターに対して、外部配列から計算した値をキーフレームとして流し込む実用的なプロトタイプだ。
‘ 伝説的なチーフアーキテクトによるMotionStudy自動化ロジック
Public Sub SetMotorKeyframes()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swMotionMgr As SldWorks.MotionStudyManager
Dim swMotion As SldWorks.MotionStudy
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
‘ 1. スタディマネージャの取得
Set swMotionMgr = swModel.MotionStudyManager
If swMotionMgr Is Nothing Then Exit Sub
‘ 2. 特定のスタディをアクティブに(名前は環境に合わせて変更)
Set swMotion = swMotionMgr.GetMotionStudy(“MotionStudy1”)
swMotion.Activate
‘ 3. モーターのパラメータを制御
‘ 注意: ‘Motor1’という名前はFeatureManager上の名称と一致させること
Dim motorName As String: motorName = “Motor1”
Dim timePoints As Variant
Dim angleValues As Variant
‘ ここでは例として単純な正弦波データを生成
timePoints = Array(0, 1, 2, 3, 4, 5)
angleValues = Array(0, 45, 90, 45, 0, 0) ‘ 度数法
Dim i As Integer
For i = LBound(timePoints) To UBound(timePoints)
‘ キーフレームの注入 (AddKeyFrameは対象フィーチャに対し時間を指定)
‘ 引数: (Time, Value)
swMotion.AddKeyFrame motorName, timePoints(i), angleValues(i)
Next i
‘ 4. 再計算の実行(ここが抜けると反映されない)
swMotion.Calculate
Debug.Print “アニメーション生成完了: ” & Now
End Sub
—
4. 現場で生き残るための「設計の注意点」
データベース連携の罠
外部の数式モデル(ExcelやCSV)からデータを読み込む際、「単位系の不一致」は最大の敵となる。SolidWorks APIは基本的にSI単位系(メートル・ラジアン)で動作する。VBA側で度数法からラジアンへの変換を忘れないこと。
パフォーマンスの最適化
大規模アセンブリでこれを実行する場合、`ModelDocExtension.Rebuild` を多用してはならない。キーフレームを追加するたびにモデルを再構築すると、数分の処理が数時間かかる。`swMotion.Calculate` はあくまで全データの注入が終わった「最後の一回」のみに留めるのが、プロの判断だ。
保守性の担保
モーターの名前(例: `Motor1`)をコードに直書きするのは悪手だ。必ず `Configuration` ごとの設定ファイル(JSONやカスタムプロパティ)から読み出す構造にせよ。コードは「アルゴリズム」を記述する場所であり、「データ」を置く場所ではない。
—
結論:自動化は「設計への愛」である
モーションスタディの自動化は、単なる手抜きではない。それは、設計者が試行錯誤のプロセスをアルゴリズムに昇華させ、より高次元な検証を行うための武器だ。
このコードを叩き台に、君たちの現場で「何度でもやり直せる検証環境」を構築してほしい。不明点があれば、またいつでも聞くといい。エンジニアリングの真髄は、常に「効率の先」にあるのだから。
