SolidWorks自動化の真髄:数式マネージャをコードで操り、「生きているモデル」を作る
こんにちは。現場で泥臭い自動化と格闘し、時に洗練されたコードで設計者の時間を救うのが私の仕事です。
今日は、SolidWorks自動化の「中級者への登竜門」とも言える「EquationMgr(数式マネージャ)」の操作についてお話しします。
多くの人がマクロの記録で「形状を作る」ところまでは辿り着きます。しかし、本当のプロは形状を作る前に「設計のルール」をコードで流し込みます。「修正のたびにモデルが崩れる」という悩みは、数式を正しく定義することで完全に過去のものとなります。
さあ、設計変更に負けない「賢いパーツ」をプログラムで構築する旅に出かけましょう。
—
なぜ、手動ではなく「コード」で数式を埋め込むのか?
手動で「数式マネージャ」を開いて、一つひとつ「D1@Boss-Extrude1 = …”」と入力していませんか?
もしパーツが100種類あったら? もし仕様変更で数式がガラリと変わったら?
コードで数式を制御する最大のメリットは、「設計意図の標準化」です。プログラムが数式を埋め込むことで、どんなに複雑なモデルでも、誰が作っても常に同じルールで駆動する「堅牢なモデル」が瞬時に出来上がります。
—
EquationMgrを掌握する:基本のコード構成
SolidWorksで数式を操作するための心臓部は、`PartDoc`オブジェクトの `GetEquationMgr` メソッドです。まずはこのインターフェースを呼び出すところから全てが始まります。
Sub AddDynamicEquation()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swEqMgr As SldWorks.EquationMgr
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
‘ 1. モデルから数式マネージャのハンドルを取得
Set swEqMgr = swModel.GetEquationMgr
‘ 2. 数式を追加する(引数:インデックス, 数式文字列, 外部設定フラグ)
‘ インデックスに-1を指定すると、リストの末尾に追加されます
Dim eqIndex As Integer
eqIndex = swEqMgr.AddEquation(-1, “””D1@Boss-Extrude1″” = “”Width”” 2″)
‘ 3. モデルを再構築して反映させる
swModel.EditRebuild3
MsgBox “数式の埋め込みが完了しました!”
End Sub
ここがポイント:コードの意味を解剖する
- `GetEquationMgr`: パーツ全体を統括する「数式管理台帳」へのアクセス権を得るイメージです。
- `AddEquation(-1, …)`: なぜ `-1` なのか? これは「一番後ろに追加する」というお決まりの作法です。特定の行を指定する必要がない限り、常に `-1` を使うのが安全なコーディングです。
- 文字列の扱い: `”D1@Boss-Extrude1″` のように、ダブルクォーテーションの中にさらにダブルクォーテーションを重ねる必要があります。これがVBAの文字列定義のルールです。
—
よくある落とし穴:初心者が必ずハマる「3つの壁」
開発現場でよく目にするエラーと、その回避策を伝授します。
1. 寸法名が一致しない問題
`D1@Boss-Extrude1` という名前は、フィーチャ名を変えると変わってしまうことがあります。
【対策】:フィーチャ名をプログラムで固定するか、数式を入れる前に必ずその寸法が存在するかを確認するバリデーション(検証)処理を入れましょう。
2. グローバル変数の未定義
数式の中で `”Width”` という変数を使っていますが、これは事前に「グローバル変数」として登録しておく必要があります。存在しない変数を数式に組み込むと、モデルがエラー(赤色)になります。
【対策】:数式の追加前に、必要なグローバル変数が定義されているか確認し、なければ先に作成するロジックを組み込みましょう。
3. 再構築(Rebuild)の忘れ
数式を追加しただけでは、画面上のモデルは動きません。`swModel.EditRebuild3` を呼び出すまでがワンセットです。ここを忘れると、「数式は入っているのに反映されない!」という怪奇現象に悩みます。
—
次のステップ:条件分岐で「設計ルール」を変える
ここまでできれば、後は応用です。例えば、`If` 文を使って条件によって数式を切り替えることができます。
‘ 簡略化した条件分岐の例
If materialType = “Steel” Then
swEqMgr.AddEquation(-1, “””D1@Boss-Extrude1″” = 50″)
Else
swEqMgr.AddEquation(-1, “””D1@Boss-Extrude1″” = 100″)
End If
このように、「設計条件を入力すれば、勝手に最適な数式が組まれる」という仕組みが作れれば、あなたはもうSolidWorks APIの中級エンジニアです。
—
最後に:自動化は「設計者のための武器」である
VBAを覚えることは、単なる事務作業の効率化ではありません。あなたが書いたコードが、設計者の思考を補完し、エラーを未然に防ぐ「設計の羅針盤」になるのです。
まずはこのコードをコピーして、ご自身のパーツで試してみてください。手動で数式を入力していたあの面倒な時間が、一瞬でゼロになる快感を味わえるはずです。
もしコードで詰まったら、いつでも戻ってきてください。現場のエンジニアとして、いつでもあなたの挑戦をサポートします。頑張ってくださいね!
