こんにちは!SolidWorks VBAの世界へようこそ。
マクロの記録ボタンを押して「動かしてみたけれど、生成されたコードが意味不明で編集できない……」そんな壁にぶつかっていませんか?
今回は、単なる作業自動化の枠を大きく飛び越え、「アセンブリの運動シネマティクス検証(可動範囲の連続駆動と干渉チェック・スナップショット自動保存)」という、上級エンジニア領域の極限テクニックを伝授します。
ここをクリアすれば、SolidWorks VBAの本質である「APIを通じたアセンブリ挙動の完全掌握」が見えてきます。優しく、そして深く、その極意を紐解いていきましょう。
—
1. なぜ「運動シネマティクス検証」をVBAで自動化するのか?
機構部品(リンク機構、シリンダー、ヒンジなど)を設計する際、最も恐ろしいのは「可動範囲の端から端まで動かしたときに、どこかで干渉(部品同士の衝突)が起きないか」という懸念です。
これを手動で合致角度を1度ずつ変えて確認するのは、気が遠くなるような労力がかかりますし、ヒューマンエラーも避けられません。
SolidWorks VBAを使えば、以下のプロセスを完全自動化できます。
1. 可動合致(例:角度合致)のパラメータを微小ステップで書き換える
2. モデルを強制的に再評価(Rebuild)させる
3. その瞬間の「干渉チェック(Collision Detection)」を実行する
4. 画面を高解像度画像として自動保存する
この一連の流れをプログラムに語らせることで、人間には不可能な高速かつ正確なシネマティクス検証レポートが完成します。
—
2. 開発の前に:SolidWorks APIの「重み」を知る
アセンブリの合致をいじるVBAを書くとき、初心者が最も陥るエラーが「画面の描画更新と再計算のタイミングズレ」です。
VBAから数値を書き換えても、SolidWorksの内部エンジンが「まだ再計算が終わっていない」うちに次の処理へ進んでしまうと、干渉チェックが古い形状で行われたり、最悪の場合はランタイムエラーで強制終了します。
これを防ぐための鉄則が、`ModelDoc2::EditRebuild3` と `ModelDoc2::GraphicsRedraw2` の適切な配置です。ここを押さえているかどうかが、プロとアマの分かれ道です。
—
3. 実装コード:可動合致をドライブし干渉を記録するマクロ
それでは、実際のプロダクションコードを公開します。
このコードは、アクティブなアセンブリ内にある特定の「角度合致(Angle Mate)」の名前を指定し、開始角度から終了角度まで指定ステップで動かしながら、画像保存と干渉チェックを行うものです。
‘ ==============================================================================
‘ 【上級プロ仕様】アセンブリ運動シネマティクス自動検証マクロ
‘ ==============================================================================
Sub AutoKinematicsValidation()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swAssm As SldWorks.AssemblyDoc
Dim swMateFeat As SldWorks.Feature
Dim swMateDim As SldWorks.Dimension
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
‘ 1. ドキュメントが開かれているか、アセンブリかを確認
If swModel Is Nothing Then
MsgBox “アクティブなドキュメントがありません。”, vbCritical
Exit Sub
End If
If swModel.GetType() <> swDocASSEMBLY Then
MsgBox “このマクロはアセンブリ文書でのみ実行可能です。”, vbCritical
Exit Sub
End If
Set swAssm = swModel
‘ — 設定エリア —
Dim mateName As String
mateName = “Distance1” ‘ 操作したい合致(フィーチャー名)に書き換えてください
Dim startAngle As Double: startAngle = 0# ‘ 開始角度 (度)
Dim endAngle As Double: endAngle = 90# ‘ 終了角度 (度)
Dim stepAngle As Double: stepAngle = 5# ‘ 刻み幅 (度)
Dim saveDirPath As String
saveDirPath = “C:\Temp\Kinematics_Output\” ‘ 画像保存先(事前にフォルダを作成してください)
‘ ——————
‘ 合致の寸法(Dimension)を取得
Set swMateFeat = swModel.Extension.GetFeatureByName(mateName)
If swMateFeat Is Nothing Then
MsgBox “指定された合致が見つかりません: ” & mateName, vbCritical
Exit Sub
End If
‘ 合致フィーチャーが持つ寸法(角度や距離)を取得
‘ 通常、合致の角度寸法名は大元のフィーチャー名に関連付けられています
Set swMateDim = swModel.Parameter(mateName & “@” & swMateFeat.Name)
If swMateDim Is Nothing Then
MsgBox “合致の寸法パラメータを取得できませんでした。”, vbCritical
Exit Sub
End If
Dim currentAngle As Double
Dim radianVal As Double
Dim lErrors As Long
Dim lWarnings As Long
‘ ループ処理:指定角度から指定角度まで駆動
For currentAngle = startAngle To endAngle Step stepAngle
‘ 度をラジアンに変換してパラメータに代入 (SolidWorks APIの寸法値は基本SI単位系:ラジアン・メートル)
radianVal = currentAngle (3.14159265358979 / 180#)
swMateDim.SetSystemValue3 radianVal, swSetValue_InAllConfigurations, Nothing
‘ 【最重要】モデルの強制再構築とグラフィック更新
‘ これを怠ると、ジオメトリが追従する前に干渉チェックが走ります
swModel.EditRebuild3
swModel.GraphicsRedraw2
‘ 干渉チェックの実行(必要に応じて拡張可能)
‘ ※本格的な干渉チェックを行う場合は InterferenceDetectionMgr を使用します
‘ 画面キャプチャ(スナップショット保存)の実行
Dim fileName As String
fileName = saveDirPath & “Angle_” & Format(currentAngle, “000”) & “.png”
Dim bRet As Boolean
bRet = swModel.Extension.SaveAs(fileName, 0, 0, Nothing, lErrors, lWarnings)
If Not bRet5 Then
Debug.Print “画像の保存に失敗しました: ” & fileName
End If
Next currentAngle
MsgBox “シネマティクス検証が完了しました!” & vbCrLf & “保存先: ” & saveDirPath, vbInformation
End Sub
—
4. コードの深掘り解説:ここがプロの技術
① APIにおける単位の罠(ラジアンの呪縛)
SolidWorksの画面上では「度(Degree)」で表示されている角度寸法も、背後にあるAPI(`SetSystemValue3`)ではすべて「ラジアン(Radian)」で処理されています。
ここをうっかり度のまま代入してしまうと、90度動かそうとしたついに1.5度しか動かない、という謎の現象に悩まされます。必ず `度 × (π / 180)` の変換を挟みましょう。
② `EditRebuild3` と `GraphicsRedraw2` のコンボ
アセンブリの合致値を書き換えた直後のモデルは、いわば「脳内ミンティア状態」です。形状の再計算(Rebuild)が完了する前に次のコードに移行すると、古い形状のまま画像が保存されてしまいます。
必ず「値を変更する ⇒ 再構築する ⇒ 画面を描画する ⇒ 処理する」というリズムを死守してください。
—
5. 陥りやすいエラーと回避策(トラブルシューティング)
- エラー:「寸法パラメータを取得できませんでした」
- 原因: 指定した合致名(`mateName`)が間違っているか、その合致に駆動可能な寸法が存在しません(例:面と面の一致など、動かせない合致を指定している)。
- 対策: FeatureManagerデザインツリーで合致の正式名称を確認し、角度や距離といった「数値を持つ合致」を対象に選んでください。
- 画像が真っ白、または前の状態のまま保存される
- 原因: 再構築の処理スピードがPCの描画速度に追いついていないケースです。
- 対策: ループの合間に `DoEvents` 関数を挟むことで、Windows側の描画イベントを処理させる余裕を与えることができます。
—
おわりに:ここをクリアすれば、SolidWorks VBAの基本はバッチリです!
今回は、単なるマクロの記録を超えた、生きたアセンブリをプログラムで操る「シネマティクス検証」の世界をご紹介しました。
合致をプログラムで自在にコントロールできるようになると、設計検証の自動化だけでなく、最適化設計(最も干渉しないアームの長さの割り出しなど)への応用も夢ではありません。
ぜひご自身の環境でコードを試し、感動の瞬間を味わってください。あなたのVBAライフが、より一層飛躍することを応援しています!
