SolidWorks VBAで「合致」を自動化せよ!マクロの記録を超えた先にある世界
こんにちは。SolidWorksの自動化の世界へようこそ。
「マクロの記録」ボタンを押して、手作業をなぞるだけの作業はもう卒業しましょう。今日は、アセンブリの設計において避けては通れない「合致(Mate)」を、プログラムの力で自在に操るための第一歩を伝授します。
この記事を読み終える頃には、あなたは「マウスでクリックして合致を探す」という非効率な時間から解放され、コードを走らせるだけで数百の部品を組み上げるエンジニアの入り口に立っているはずです。
—
なぜ「AddMate5」なのか?
SolidWorks APIには多くのMate関連メソッドが存在しますが、初心者が最も直感的かつ強力に扱えるのが `AddMate5` です。これを使えば、「同軸」や「一致」といった基本的な合致を、プログラムから正確かつ高速に定義できます。
まずは、最も頻繁に使う「同軸」と「一致」の基本パターンをマスターしましょう。
—
現場で即戦力!合致自動化コード
このコードは、現在開いているアセンブリ上で、「選択された2つのエンティティ」に対して自動で同軸合致をかけるプログラムです。
Option Explicit
Sub AutoMate_Coincident_Example()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swAssy As SldWorks.AssemblyDoc
Dim swMateFeature As SldWorks.Feature
‘ SolidWorksに接続
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
‘ アセンブリであることを確認
If swModel Is Nothing Or swModel.GetType <> swDocASSEMBLY Then
MsgBox “アセンブリを開いてから実行してください。”
Exit Sub
End If
Set swAssy = swModel
‘ 【重要】AddMate5の引数
‘ 1. MateType: 0=同軸, 1=一致, 2=平行, 3=垂直, 4=角度, 5=距離
‘ 2. Alignment: 0=自動, 1=整列, 2=反転
‘ 3. Distance: 距離合致の場合の数値(今回は0)
‘ 4. Flip: 反転フラグ
Dim mateType As Long: mateType = 0 ‘ 0 = 同軸 (Concentric)
Dim alignment As Long: alignment = 0
Dim dist As Double: dist = 0
Dim flip As Boolean: flip = False
‘ 選択されている2つのオブジェクトに対して合致を追加
Set swMateFeature = swAssy.AddMate5(mateType, alignment, False, dist, 0, 0, 0, 0, 0, 0, 0, False, False, False, 0)
‘ モデルを再構築して合致を反映
swModel.EditRebuild3
MsgBox “合致を追加しました!”
End Sub
—
コードを理解するための3つのポイント
1. `swAssy.AddMate5` の正体
このメソッドは、SolidWorksの「合致」コマンドを裏側で直接実行する関数です。引数が非常に多いですが、恐れることはありません。今回のように、先に2つの面や軸を選択しておけば、多くの引数を「0」や「False」にしておくだけで十分に機能します。
2. 「選択」はプログラムの基本
SolidWorks APIにおいて「何を対象にするか」を伝える最も簡単な方法は、「事前にユーザーが選択しておくこと」です。コードの実行前に、同軸にしたい2つの円筒面をマウスで選択してからマクロを実行してみてください。
3. 実行後の「Rebuild」を忘れない
VBAで合致を追加しても、画面上の表示が即座に更新されないことがあります。`swModel.EditRebuild3` を呼び出すことで、SolidWorksに「今の変更を計算して画面に反映せよ」と命令を出しています。この「再構築」の意識を持つことが、安定したマクロを書くコツです。
—
初心者が陥りやすい罠と解決策
「合致が追加されない!」という時は?
- 選択漏れ: `AddMate5` は、アクティブなドキュメントで「何かが選択されている状態」を期待しています。選択が0個または1個しかない場合、エラーにはなりませんが、合致も作成されません。
- 型が違う: 同軸合致は「円筒面」や「軸」に対して行います。平面を選択して同軸を実行しようとすると、SolidWorksは混乱します。プログラムを組む際は、対象となるエンティティのタイプを `SelectionManager` で取得してバリデーション(検証)するのが上級者への道です。
—
次のステップへ
今回のコードは「現在選択しているもの」を対象にしましたが、中級者になると「部品名を指定して、自動で座標を探し、合致させる」という自動化が可能になります。
まずは、このコードをコピー&ペーストして、自分の手元で動かしてみてください。「自分の書いた命令で、CADが動く」。この感動こそが、業務自動化エンジニアとしての第一歩です。
何か分からないことがあれば、いつでも聞いてください。SolidWorksの深淵を一緒に冒険しましょう。応援しています!
