SolidWorks APIの深淵:アセンブリ機構を自在に操る「合致トグル」設計術
設計現場において、アセンブリの「検証」は最も時間を食う作業の一つだ。特定の合致(Mate)が機構の動きをロックし、手動で抑制(Suppress)と解除(Unsuppress)を繰り返す……そんな不毛なルーチンワークに、いつまで貴重な工数を費やすつもりか。
今回は、APIを熟知した者だけが辿り着ける、「アセンブリの合致状態をワンタッチで切り替える」ための堅牢なアーキテクチャを伝授する。
—
1. なぜ「手作業」が設計の敵なのか
アセンブリを動かしたい時に、フィーチャーマネージャツリーから合致を探し出し、右クリックで抑制する。この作業は単なる時間の浪費ではない。「どの合致を抑制すべきか」という設計意図の属人化を招く。
我々エンジニアが目指すべきは、特定の「名前」を持つ合致を、プログラムがコンテキストに応じて自律的に制御する仕組みだ。これにより、検証用と本番用の設定を瞬時に切り替える「デジタル・ツインの試行」が可能となる。
2. 堅牢な設計のための3つの鉄則
コードを書く前に、以下の原則を胸に刻んでほしい。
- 名前による識別(Naming Convention): 合致に名前を付けないのは、型番のない部品を使うのと同じだ。命名規則を厳格化せよ。
- エラーハンドリングの徹底: 合致が存在しない、あるいは既に目的の状態にある場合にコードを止めてはならない。
- 再描画の抑制: 大規模アセンブリでAPIを叩く際、`ModelDoc2.ForceRebuild3`を連発すれば、SolidWorksは容易にフリーズする。必要最小限の更新に留めよ。
—
3. 実践:合致トグル・オートメーション
以下のコードは、指定した名前の合致を検索し、その状態を反転させるプロフェッショナル仕様のスクリプトだ。
‘ SolidWorks API: 合致トグル・エンジン
‘ 特定のキーワードを含む合致を検索し、状態を反転させる
Public Sub ToggleMateState(targetName As String)
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swAssy As SldWorks.AssemblyDoc
Dim swFeat As SldWorks.Feature
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
If swModel Is Nothing Or swModel.GetType <> swDocASSEMBLY Then
MsgBox “アセンブリを開いてください。”, vbCritical
Exit Sub
End If
Set swAssy = swModel
Set swFeat = swModel.FirstFeature
‘ 特徴ツリーを走査
Do While Not swFeat Is Nothing
If swFeat.GetTypeName2 = “Mate” Then
‘ 合致名にキーワードが含まれているか判定
If InStr(1, swFeat.Name, targetName, vbTextCompare) > 0 Then
‘ 状態を取得し、反転させる(Suppress <-> Unsuppress)
If swFeat.IsSuppressed Then
swFeat.SetSuppression2 swFeatureUnsuppressed_Self
Else
swFeat.SetSuppression2 swFeatureSuppressed_Self
End If
End If
End If
Set swFeat = swFeat.GetNextFeature
Loop
‘ 最後に再構築を行い、機構の動きを確定させる
swModel.EditRebuild3
End Sub
コード解説
1. `GetNextFeature`の走査: アセンブリ内の全フィーチャーを再帰的ではなく、線形に走査する。これは最も安定し、かつ高速な手法だ。
2. `InStr`による柔軟なマッチング: 完全一致ではなくキーワード検索にすることで、「Limit_Angle_01」「Limit_Angle_02」といった連番の合致を一括で制御可能にしている。
3. `SetSuppression2`の適正利用: インスタンスに対して直接指示を出すことで、無駄な再計算を防いでいる。
—
4. プロダクション環境への実装アドバイス
このマクロを現場で運用する際は、以下の点に注意せよ。
- UIの分離: このコードを単体で動かすのではなく、ユーザーフォームを作成し、チェックボックスと連動させることを推奨する。
- ログ出力: 抑制した合致のリストをテキストやExcelに書き出す機能を付与すれば、検証結果のトレーサビリティが劇的に向上する。
- パフォーマンス対策: 非常に巨大なアセンブリの場合、合致の検索処理を`FeatureManager`のフィルタリングAPIに置き換えることで、さらに高速化が可能だ。
結びに:エンジニアの武器は自分自身で磨け
自動化とは、単に楽をすることではない。「人間が考えるべき設計そのもの」に集中するための時間を、コードによって捻出することだ。
このマクロを導入し、合致のストレスから解放された時、君は初めて設計者としての本来の思考を取り戻すはずだ。さあ、次はどの無駄な作業を自動化するか? 答えは君の設計現場に転がっている。
