SolidWorks自動化の真髄:LibraryFeatureDataによる「標準形状」の動的配置術
設計現場において、社内標準のポケットやボスを毎回手作業で配置しているようでは、エンジニアの時間は浪費される一方だ。SolidWorks APIにおいて、`LibraryFeatureData`を用いた自動挿入は、単なる「効率化」ではなく、設計の標準化(ガバナンス)を強制するための最強の武器となる。
今日は、APIを使い倒してきたアーキテクトの視点から、堅牢で保守性の高い「標準フィーチャ自動挿入システム」の構築論を伝授する。
—
1. なぜ「手動インサート」は非効率なのか
多くの初学者は、手作業の操作をそのまま記録してマクロ化しようとする。しかし、`LibraryFeature`を扱う際、UIの操作をそのままコードに落とし込むと、配置の参照エラーや面指定の喪失といった「不安定なビルド」を誘発する。
真の自動化に必要なのは、「ターゲット座標とベクトルをAPIへ直接渡す」という設計思想だ。
ライブラリ挿入の「黄金律」
1. 参照の抽象化: 面(Face)に依存させるのではなく、座標系(Coordinate System)を介在させる。
2. 参照配置の事前計算: `LibraryFeatureData`の設定を、挿入前にVBA側で完全に制御する。
3. エラーハンドリング: 配置失敗時の巻き戻し(Undo)とログ出力をセットにする。
—
2. 実装の核心:LibraryFeatureDataの制御
`LibraryFeatureData`は、ライブラリファイル(.sldlfp)を読み込み、その中の「配置参照」をプログラム的に満たすためのコンテナである。
以下のコードは、指定したライブラリフィーチャを、ターゲットとなる座標系に対して正確にインサートする、プロダクションレベルの汎用関数だ。
‘ ——————————————————————
‘ @brief 標準ライブラリフィーチャを挿入する関数
‘ @param swModel SolidWorksモデルオブジェクト
‘ @param libPath .sldlfpファイルのフルパス
‘ @param targetFace 挿入対象となる平面
‘ @param coords (x, y, z) の挿入位置配列
‘ ——————————————————————
Public Sub InsertStandardFeature(swModel As ModelDoc2, libPath As String, targetFace As Object, coords As Variant)
Dim swFeatMgr As FeatureManager
Dim swLibData As LibraryFeatureData
Dim swFeat As Feature
Set swFeatMgr = swModel.FeatureManager
‘ 1. LibraryFeatureDataの作成
Set swLibData = swFeatMgr.CreateLibraryFeatureData(libPath)
‘ 2. 配置参照の紐付け(ここが重要:UI上の参照順序と合わせること)
‘ ※通常、1番目は配置面、2番目は位置決めのエッジや座標系
swLibData.AddReference targetFace
‘ 3. 挿入実行
Set swFeat = swFeatMgr.InsertLibraryFeature(swLibData)
If swFeat Is Nothing Then
Err.Raise vbObjectError + 1001, “AutoInsert”, “フィーチャの挿入に失敗しました。”
End If
‘ 4. 再構築(パフォーマンスを意識し、必要最小限の更新に留める)
swModel.EditRebuild3
End Sub
—
3. 実務で「壊れない」コードを書くための注意点
ファイルパスのデータベース化
ハードコードは悪だ。`Config.ini`や`Excel`、あるいは`JSON`ファイルにライブラリのパスを定義せよ。設計チームの環境が変わった瞬間にマクロが全滅するリスクを避けるためだ。
参照の堅牢性(Robustness)
`LibraryFeature`を挿入する際、最も多いエラーは「参照先(面やエッジ)の消失」である。
- 対策: 名前付きの「スケッチ点」や「座標系」を参照させること。これらはフィーチャの親子関係を壊しにくく、設計変更(デフィーチャリング)に対しても圧倒的に強い。
パフォーマンスの最適化
大量のポケットを配置する場合、都度`Rebuild`を走らせるのは致命的なロスだ。
- テクニック: すべての`LibraryFeatureData`を配置し終わった後に、一度だけ`ModelDocExtension::Rebuild`を呼び出すこと。これにより、SolidWorks内部のジオメトリ再計算回数を最小限に抑えられる。
—
4. アーキテクトからの提言:次のステップへ
この自動化手法を確立した後は、「条件分岐による自動選定」へと進化させよ。
例えば、穴の径や深さをCSVから読み取り、`LibraryFeatureData.GetDimension`で値を書き換えるロジックを追加すれば、標準部品のカタログ選定から配置までがワンクリックで完了する。
「設計者は、手作業ではなく、仕組みを作ることに集中すべきだ。」
VBAという言語は古いが、SolidWorks APIという強力なバックボーンを持つ限り、そのポテンシャルは計り知れない。まずはこのコードをベースに、自社の「標準」をプログラムの中に刻み込んでほしい。
もしコードが動かない、あるいは特定の形状で躓いたならば、それはAPIの限界ではなく、あなたの設計対象がまだ「言語化」できていないという証拠だ。モデルと対話し、論理を研ぎ澄ませ。それがエンジニアリングの醍醐味である。
