【入門編】【実務中級】アセンブリ内の配置間隔が不規則な同一パーツ群を指定したピッチルールに従って美しく等間隔に自動整列 – SolidWorks VBA解析バイブル

スポンサーリンク

SolidWorks VBAで「整列」を自動化せよ:散らかったアセンブリを劇的に美しく整える極意

こんにちは。現場で泥臭く、かつエレガントにSolidWorksを操るエンジニアの皆さん。

「マクロの記録」ボタンを押して、生成された無駄なコードの多さに絶望したことはありませんか? SolidWorks APIの世界は、単なる操作の自動記録ではありません。それは、「SolidWorksという巨大なデータベースを、自分の意図通りに記述・操作する」という、極めてクリエイティブな作業です。

今回は、現場でよくある「適当に配置されたブラケットやクリップを、ピッチルールに従って美しく等間隔に整列させる」という自動化タスクを題材に、VBAの真髄を伝授します。

—

1. なぜ「手動」ではなく「コード」なのか?

数百個のブラケットを手動でドラッグし、合致(Mate)を一つずつ修正する……そんな作業は今日で終わりにしましょう。

プログラミングによる整列のメリットは、単に「速い」ことではありません。「計算された座標に数学的に配置できる」という点です。人間がマウスで行う作業には必ず誤差が生じますが、APIで制御すれば、ミクロン単位で完璧なレイアウトが確定します。これが「プロの仕事」です。

—

2. 核心:パーツの座標を制御する「MathTransform」

SolidWorksの座標系は、`MathTransform` というオブジェクトで管理されています。アセンブリ内のパーツを動かすには、この行列計算を理解する必要があります。

しかし、難しく考える必要はありません。今回は、最も直感的でミスが少ない「Component.Transform2」を使った座標更新のテクニックを解説します。

実装コード:指定ピッチでコンポーネントを整列させる

このコードは、選択した複数のコンポーネントを、指定した「基準軸」に沿って、「指定ピッチ」で再配置するものです。

Option Explicit

‘ 選択したパーツを指定間隔(mm)でX方向に整列させるマクロ
Sub AlignComponentsByPitch()
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

Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swSelMgr = swModel.SelectionManager
Set swMathUtil = swApp.GetMathUtility

Dim i As Integer
Dim pitch As Double: pitch = 50.0 ‘ ここでピッチを設定(mm)
Dim currentX As Double: currentX = 0

‘ 選択したコンポーネントをループ処理
For i = 1 To swSelMgr.GetSelectedObjectCount2(0)
Set swComp = swSelMgr.GetSelectedObjectsComponent4(i, 0)

‘ 現在の配置情報を取得
Dim currentTransform As SldWorks.MathTransform
Set currentTransform = swComp.Transform2

‘ 新しい座標(X軸方向のみ移動)を作成するデータ配列
Dim data(15) As Double
data(0) = 1: data(1) = 0: data(2) = 0 ‘ 回転行列(そのまま)
data(3) = 0: data(4) = 1: data(5) = 0
data(6) = 0: data(7) = 0: data(8) = 1
data(9) = currentX / 1000 ‘ X座標をメートル単位で設定
data(10) = 0: data(11) = 0 ‘ Y, Zは固定
data(12) = 1 ‘ スケール

Set swTransform = swMathUtil.CreateTransform(data)

‘ 座標を適用
swComp.Transform2 = swTransform

‘ 次のパーツのために位置を更新
currentX = currentX + pitch
Next i

swModel.GraphicsRedraw2 ‘ 画面を再描画
MsgBox “整列完了!”, vbInformation
End Sub

—

3. ここをクリアすれば一人前!陥りやすい罠

このコードを動かす際、以下のポイントに注意してください。これが理解できれば、あなたは中級者の壁を確実に突破しています。

  • 単位は「メートル」である: SolidWorks APIの内部計算は、設定に関わらず常に「メートル」です。50mmを移動させたいなら `0.05` と記述する必要があります。ここを間違えると、パーツが遥か彼方に飛んでいきます。
  • MathTransformのライフサイクル: `Transform2` プロパティを代入することで座標が動きますが、これはあくまで「配置」の変更です。もし「合致(Mate)」が拘束されている場合、エラーになるか、合致が外れます。
  • 解決策: 厳密に運用するなら、事前に `Mate` を削除(または抑制)してから整列し、最後に再度合致を追加するロジックを組むのがプロの定石です。
  • 選択順序の罠: `SelectionManager` はユーザーがクリックした順に認識されます。意図した順序で並べたい場合は、事前にツリーで名前順に並び替えるか、名前をパースしてソートする工程を挟むと完璧です。

—

4. さあ、次のステージへ

今回のコードは、整列の「第一歩」に過ぎません。ここからさらに応用を効かせるなら:

1. 「ユーザーフォーム」を作ってピッチを自由に入力できるようにする。
2. 「基準となる平面や線」をクリックさせ、そのベクトルに沿って整列させる。
3. 配置後に自動で「距離合致」を作成し、位置を固定する。

ここまでできれば、あなたの業務効率は、同僚の10倍、いや100倍になるはずです。

SolidWorks VBAは、あなたの「面倒くさい」を「知的財産」に変える魔法の杖です。恐れずに、どんどんコードを書き換えて、自分だけの最強のツールを作り上げてください。

何か詰まったら、いつでも聞いてください。設計者のためのプログラミング道、一緒に極めていきましょう。

タイトルとURLをコピーしました