【入門編】【初心者向け】アセンブリ挿入時の固定(Fix)とフロート(Float)をVBAから明示的に切り替えるプロパティ操作 – SolidWorks VBA解析バイブル

スポンサーリンク

SolidWorks APIの深淵へ:アセンブリの「固定」を解き放ち、自由な設計へ

こんにちは。自動化の現場で数々の泥臭い設計課題を解決してきたチーフアーキテクトです。

SolidWorksのアセンブリ自動化において、誰もが一度は直面する壁。それが「挿入した部品がなぜか動かない(固定されている)」という現象です。

マクロの記録でコードを生成すると、最初は便利に見えます。しかし、いざ複雑なアセンブリを組もうとすると、記録されたコードだけでは制御しきれない「お作法」があることに気づくはずです。今回は、アセンブリ挿入の第一歩である「固定(Fix)」と「フロート(Float)」の制御を、泥臭い手動操作から解放し、コードで完全に支配するための極意を伝授します。

—

なぜ、最初の部品は「固定」されるのか?

SolidWorksでは、アセンブリに最初に挿入された部品は、自動的に原点に「固定(Fix)」されるというルールがあります。これは設計の基準を作るために非常に重要ですが、プログラムで自動構築する際には邪魔になることが多い。

この「固定」状態をコードで解除し、自在に動かせる(フロート状態にする)術を知ることは、APIマスターへの登竜門です。

実践:固定を解除し、フロート状態にする魔法のコード

`InsertComponent4` で部品を挿入した後、そのコンポーネントの `Component2` オブジェクトを取得し、`Select2` メソッドで選択状態にしてから、`EditFix` コマンドを発行します。

以下のコードをコピーして、あなたのマクロに組み込んでみてください。

Sub FloatFirstComponent()
Dim swApp As Object
Dim swModel As Object
Dim swAssy As Object
Dim swComp As Object
Dim boolstatus As Boolean

Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc

‘ アクティブなドキュメントがアセンブリか確認
If swModel Is Nothing Or swModel.GetType <> 2 Then
MsgBox “アセンブリを開いて実行してください。”
Exit Sub
End If
Set swAssy = swModel

‘ 1. アセンブリ内の最初のコンポーネントを取得
‘ GetComponentsは配列でコンポーネントを返す
Dim vComps As Variant
vComps = swAssy.GetComponents(False)

If IsEmpty(vComps) Then Exit Sub
Set swComp = vComps(0) ‘ 最初の部品をターゲットにする

‘ 2. コンポーネントを選択状態にする
boolstatus = swComp.Select2(False, 0)

‘ 3. 「固定」を解除(フロート化)する
‘ EditFixはトグル動作:固定されていれば解除、されていなければ固定される
boolstatus = swModel.EditFix()

‘ ユーザーへのフィードバック
Debug.Print “コンポーネントの固定状態を切り替えました。”
swModel.ClearSelection2 True
End Sub

—

ここがプロの視点:陥りやすい罠と対策

1. `EditFix` はトグル操作であるという事実

`EditFix` メソッドは「固定を解除する」専用のコマンドではなく、「現在の状態を反転させる」トグル動作です。もし、既に「フロート」状態の部品に対してこのコードを実行すると、逆に「固定」されてしまいます。

対策:
もし確実に「フロート」にしたいのであれば、`swComp.IsFixed` プロパティを使って状態を確認し、固定されている時だけ `EditFix` を呼ぶという条件分岐(`If` 文)を入れるのが、堅牢なエンジニアの書き方です。

2. 選択(Select)の重要性

SolidWorks APIの多くは、「何に対して操作するのか」を明確にするため、事前に `Select` する必要があります。`swComp.Select2` を忘れると、SolidWorksは「どの部品をフロートにすればいいのか?」と迷い、エラーを返します。自動化コードでは、「操作の前に必ず選択」が鉄則です。

3. コンポーネントのライフサイクル

`GetComponents` で得られる配列の中身は、アセンブリ内のツリー順序に基づきます。もし挿入順序が不明な場合は、`swComp.Name2` や `swComp.GetPathName` で目的の部品かどうかを判定してから処理を行うようにしましょう。

—

最後に:ここをクリアすれば世界が変わる

アセンブリの自動構築は、部品を「配置する」ことよりも、「部品の自由度をどう制御するか」が本質です。

まずは、この「固定・フロートの切り替え」をマスターしてください。これができれば、次は「Mate(合致)」を使って部品同士を連結させるステップへ進めます。自動化の世界は、一度足を踏み入れると、もう手動でポチポチとマウスを動かすことには戻れなくなるはずです。

もしコードが動かない、あるいはもっとスマートな実装を知りたい場合は、いつでも聞いてください。あなたの設計効率化を、全力でサポートしますよ。

さあ、次はどんなアセンブリを自動で組み上げましょうか?

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