【SolidWorks VBA極意】アセンブリを「整列」させよ。手作業を根絶する配置自動化の極意
こんにちは。SolidWorksの深淵を覗き込み、APIの海を渡り歩いてきた者です。
皆さんは、アセンブリ内でクリップやクランプを並べる際、マウスでドラッグして「なんとなく」配置していませんか? 修正のたびにズレる配置、後からやってくる設計変更。「整然としたアセンブリ」を維持するのは、職人芸ではなく「計算されたロジック」です。
今日は、マクロの記録という「雛鳥の巣」を飛び出し、座標計算によってパーツを等ピッチで再整列させる、実務直結の自動化術を伝授します。
—
1. なぜ「手作業」から卒業すべきなのか
SolidWorksのAPIには、単に「置く」命令だけでなく、「数学的に拘束する」力があります。手作業で配置すると、誤差が蓄積し、モデルが重くなり、見た目も美しくありません。
今回目指すのは、「基準軸と開始点を与えれば、あとはコードが全パーツを等間隔に整列させる」という仕組みです。
陥りやすい罠:座標系を理解せよ
初心者の多くが、`Component.Select2`で無理やり移動させようとして挫折します。しかし、真のエンジニアは`MathTransform`(行列変換)を操ります。アセンブリの座標系と、各部品のローカル座標系の関係を理解すること。これが、SolidWorks VBAを掌握するための最初の一歩です。
—
2. 実装ロジック:等ピッチ再整列のアルゴリズム
今回は、「選択した複数の部品を、指定した基準軸に沿って等間隔に並べる」マクロを作成します。
必要なステップ
1. 選択セットの取得: ユーザーが配置したい部品を事前に選択しておく。
2. 基準軸の特定: どの方向に並べるか(例:X軸方向)。
3. 座標計算: `(配置間隔) × (インデックス)` で目的のX座標を算出。
4. 行列変換の適用: `ModelDoc2.Extension.SetUserPreference`ではなく、`Component2.SetTransform`を用いて一気に配置する。
—
3. 実践コード:クランプ整列マクロ
以下のコードは、選択した複数の部品をX軸方向に「50mm間隔」で再配置する実用コードです。
Option Explicit
‘ 選択したパーツをX軸方向に等ピッチで再整列させる
Sub AlignComponentsEvenly()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swSelMgr As SldWorks.SelectionMgr
Dim swComp As SldWorks.Component2
Dim swMathUtil As SldWorks.MathUtility
Dim swTransform As SldWorks.MathTransform
Dim i As Integer
Dim pitch As Double: pitch = 0.05 ‘ 50mm間隔
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swSelMgr = swModel.SelectionManager
Set swMathUtil = swApp.GetMathUtility
‘ 選択した個数を取得
Dim count As Integer: count = swSelMgr.GetSelectedObjectCount2(-1)
For i = 0 To count – 1
‘ 選択されているコンポーネントを取得
Set swComp = swSelMgr.GetSelectedObjectsComponent4(i + 1, -1)
‘ 現在の配置(行列)を取得
Set swTransform = swComp.Transform2
‘ 新しい座標を計算し、行列を更新(ここではX座標のみを更新する例)
‘ ※実際には現在の回転行列を維持したまま、位置ベクトルのみを書き換えます
Dim pos(2) As Double
pos(0) = i pitch ‘ X軸方向に並べる
pos(1) = 0 ‘ Y軸固定
pos(2) = 0 ‘ Z軸固定
Dim newTransform As SldWorks.MathTransform
Set newTransform = swMathUtil.CreateTransform(pos, swTransform.Rotation, swTransform.Scale, 0)
‘ 部品を配置(ここで魔法が起きる)
swComp.SetTransform newTransform
Next i
swModel.GraphicsRedraw2
MsgBox “整列完了!美しいモデルが完成しました。”
End Sub
—
4. 知っておくべき「極限の知見」
① `GraphicsRedraw2` は最後に
コード内で何度も再描画させないでください。パフォーマンスが劇的に低下します。全て計算が終わった後に一度だけ更新をかける。これがプロの作法です。
② 変換行列の重要性
`SetTransform` は最強のメソッドです。これを使えば、合致(Mate)をいちいち削除して再作成する必要はありません。合致を維持したまま、親となるアセンブリの座標系に対して強制的に座標を書き換えることが可能です。
③ エラーハンドリングは魂
もし選択したものが「部品」でなかったら? コードは一瞬でクラッシュします。`swSelMgr.GetSelectedObjectType3` を使って、必ず「部品(Component)」であることを検証してから処理を進めるのが、安定した自動化システムの条件です。
—
最後に:自動化は「設計への愛」です
「こんな作業、マクロでやれば一瞬なのに…」。そう思った瞬間が、あなたのエンジニアとしての進化の始まりです。
最初は数行のコードを写すだけでも構いません。しかし、そのコードがアセンブリ内の部品を意のままに動かす光景を見たとき、あなたはSolidWorksの本当の力を手に入れたことになります。
次は、これを発展させて「カーブに沿って等配置する」ロジックに挑戦してみましょうか。道に迷ったら、またここへ来てください。いつでも極意を授けますよ。
さあ、退屈な作業をコードに置き換え、より高次元な設計業務へ飛び込みましょう。
