SolidWorks APIの真髄:`InsertLibraryFeature`で実現する「設計の標準化」と自動化の極意
設計現場において、「同じようなポケット形状やボスを毎回手動で配置する」という作業は、単なる時間の浪費ではありません。それは設計ミスを誘発する温床であり、設計の属人化を加速させる悪習です。
私はこれまで数多くの自動化ツールを設計してきましたが、「ライブラリフィーチャ(.sldlfp)の自動配置」こそ、エンジニアの創造性を守るための最も重要な防衛線だと確信しています。
本稿では、`ModelDocExtension.InsertLibraryFeature`を使いこなし、堅牢で保守性の高い自動インサートエンジンを構築するための「戦術」を伝授します。
—
1. なぜ「手動操作の記録」では破綻するのか
多くの初心者は、SolidWorksの「マクロの記録」からコードを生成しようとします。しかし、生成されたコードを見てください。配置先の「面」や「エッジ」を名前で固定(ハードコーディング)していませんか?
‘ 悪い例:名前で選択するコード(設計変更で即死する)
boolstatus = Part.Extension.SelectByID2(“面<1>“, “FACE”, 0, 0, 0, …)
このアプローチは、モデルの履歴が変わった瞬間に崩壊します。我々が目指すべきは、「座標系(Coordinate System)」や「スケッチ点」を起点とした、トポロジーに依存しない動的配置です。
—
2. 堅牢なインサートエンジンを設計する3つの鉄則
1. 絶対パスの管理: ライブラリファイル(.sldlfp)へのパスはハードコードせず、設定ファイル(INIまたはJSON)から読み込む。これにより、サーバー移転時もコードの修正が不要になります。
2. エラーハンドリングの徹底: APIは「配置先が見つからない」という状況で平然とクラッシュします。`SelectByRay`や`SelectByID2`の結果を必ずBooleanで判定し、失敗時はログを残して処理を中断してください。
3. 再構築の抑制: 複数のフィーチャを配置する際、毎回`Rebuild`を呼ぶのは重罪です。最後に一度だけ実行し、パフォーマンスを最大化させます。
—
3. 実践:プロダクションコード例
以下は、指定したライブラリファイルをアクティブな面(または座標系)に配置する汎用モジュールです。
Option Explicit
‘ ライブラリフィーチャ配置の核心エンジン
Public Sub InsertStandardPocket(ByVal swApp As SldWorks.SldWorks, _
ByVal libPath As String, _
ByVal targetFace As SldWorks.Face2)
Dim swModel As SldWorks.ModelDoc2
Set swModel = swApp.ActiveDoc
If swModel Is Nothing Then Exit Sub
‘ 1. 配置先を選択状態にする
targetFace.Select2 False, Nothing
‘ 2. ライブラリフィーチャの挿入
‘ 引数:パス, 挿入場所(ここでは選択セットを使用)
Dim feat As SldWorks.Feature
Set feat = swModel.Extension.InsertLibraryFeature(libPath)
If feat Is Nothing Then
Err.Raise vbObjectError + 1001, “AutoEngine”, “ライブラリフィーチャの配置に失敗しました。”
End If
‘ 3. 設定値の調整(必要であればFeatureのプロパティをAPIで操作)
‘ feat.GetDefinition …
swModel.EditRebuild3
End Sub
このコードの「賢い使い方」
配置位置を厳密に制御したい場合、ライブラリ部品(.sldlfp)側にあらかじめ「配置用スケッチ点」を含めておき、配置後に`SketchManager`を通じてその点を空間座標へとスナップさせるのがプロのやり方です。
—
4. 運用上の注意点とデータベース連携
この自動化を社内インフラとして展開する場合、以下の点に注意してください。
- PDMとの整合性: PDM環境下では、ライブラリファイルの読み取り権限が重要です。ローカルキャッシュに依存せず、常に最新のマスターを参照させる仕組みを構築してください。
- バージョンの互換性: ライブラリファイルは、作成したSolidWorksバージョンより古い環境では開けません。共通ライブラリは常に「最も古いサポートバージョン」で保存しておくのが、全社展開におけるトラブル回避の鍵です。
—
最後に:自動化は「設計の意志」をコードにすること
`InsertLibraryFeature`を使った自動化は、単なる作業の短縮ではありません。「この形状はこの基準で配置すべきである」という設計思想を、会社全体に強制する(標準化する)行為です。
VBAは、あなたの思考を形にするための強力な武器です。今回提供したコードをベースに、自社の設計ルールを組み込み、「ボタン一つで完璧な形状が生成される」環境を作り上げてください。
もし、さらに高度な「幾何学的制約(拘束条件)を考慮した自動配置」や「Excelからのパラメータ流し込み」に興味があるなら、次のステップとして「IModelDocExtension::SelectByRayを使ったクリック位置へのインテリジェント配置」を実装することをお勧めします。
さあ、退屈な手作業に終止符を打ちましょう。あなたのコードが、設計時間を「付加価値の高い時間」へと変えることを期待しています。
