SolidWorks APIの深淵:ライブラリフィーチャ自動挿入で実現する「設計の標準化」極意
設計自動化の現場で、最もコストを下げ、かつ品質を安定させる手法。それは「共通部品の徹底した再利用」です。特に、社内で定義された「切り欠き」や「溝」といった加工フィーチャをAPI経由で挿入する手法は、標準化の要と言えます。
多くのエンジニアが `InsertLibraryFeature2` メソッドを触り、そして「配置がうまくいかない」「寸法が駆動できない」という壁にぶつかります。本稿では、単なるAPIのリファレンスではなく、「堅牢な自動化ツール」として実装するためのアーキテクチャを伝授します。
—
1. なぜ `InsertLibraryFeature2` は「地雷」になりやすいのか
このメソッドは強力ですが、単にパスを渡すだけでは不十分です。実務で直面する以下の課題を解決する必要があります。
- コンテキストの喪失: どの面、どの点に配置するのかという「参照」が曖昧なまま実行するとエラーを吐く。
- 寸法リンクの不一致: ライブラリ側の変数名と、挿入後のフィーチャが持つパラメータ名の乖離。
- 再計算のオーバーヘッド: 連続挿入時の再構築負荷。
これらを回避する唯一の解は、「明示的な参照の解決」と「フィーチャの即時取得」です。
—
2. 堅牢な実装のためのアーキテクチャ(VBAコード)
以下のコードは、単に挿入するだけでなく、挿入直後にフィーチャをキャプチャし、寸法を書き換えるまでを「1つのトランザクション」として処理する設計です。
‘ — 極限の自動化: ライブラリフィーチャ挿入関数 —
‘ @param swModel : 現在開いているパーツモデル
‘ @param libPath : .sldlfpファイルのフルパス
‘ @param face : 挿入対象の面(Face2オブジェクト)
‘ @param x, y : 配置基準点からのオフセット(必要に応じて)
Public Function InsertStandardFeature(swModel As SldWorks.ModelDoc2, _
libPath As String, _
face As SldWorks.Face2) As SldWorks.Feature
Dim swFeatMgr As SldWorks.FeatureManager
Set swFeatMgr = swModel.FeatureManager
‘ 1. 挿入前に参照面を選択状態にする(APIの挙動としての必須儀式)
face.Select2 False, 0
‘ 2. ライブラリフィーチャの挿入
‘ 戻り値は「LibraryFeatureData」ではなく「Feature」として取得する
Dim swFeat As SldWorks.Feature
Set swFeat = swFeatMgr.InsertLibraryFeature2(libPath)
If swFeat Is Nothing Then
Err.Raise vbObjectError + 1, , “ライブラリフィーチャの挿入に失敗しました。”
End If
‘ 3. フィーチャを更新(即時確定させる)
swModel.EditRebuild3
Set InsertStandardFeature = swFeat
End Function
‘ — フィーチャのパラメータを外部から駆動する —
Public Sub UpdateFeatureDimension(swFeat As SldWorks.Feature, dimName As String, val As Double)
Dim swLibFeat As SldWorks.LibraryFeatureData
Set swLibFeat = swFeat.GetDefinition
‘ 単位系に注意:APIは常にメートル(m)単位で計算される
swLibFeat.AccessSelections Nothing, Nothing
‘ ここで寸法値を書き換える
‘ ※事前にライブラリ側で「寸法名」を定義しておくことが重要
swFeat.Parameter(dimName).SystemValue = val
swLibFeat.ReleaseSelectionAccess
swFeat.ModifyDefinition swLibFeat, Nothing, Nothing
End Sub
—
3. 実務で「失敗しない」ための3つの鉄則
① 単位系(SI単位系)の壁を越えろ
SolidWorks APIは、内部的にメートル(m)・キログラム(kg)・秒(s)で処理されます。プロパティに数値を渡す際、ミリメートル単位で考えていると1000倍の誤差が生じます。必ず `val / 1000` する習慣をつけてください。
② .sldlfpファイルの「基準点」管理
ライブラリフィーチャは、作成時の「スケッチ原点」が配置基準になります。
- 推奨: ライブラリファイル側で、中央や端点に明確な参照点を設ける。
- 回避策: 挿入後の位置合わせが面倒な場合、ライブラリファイル自体を「配置基準に特化」させておき、挿入後に座標系で制御する。
③ エラーハンドリングは「フィーチャ単位」で
大量の加工フィーチャをループで挿入する場合、途中で一つでも失敗すると全体が停止します。
- `On Error Resume Next` で逃げるのは論外です。
- 必ず `If swFeat Is Nothing` で挿入成功を確認し、ログを出力する構造にしてください。
—
結論:自動化は「設計意図」のコード化である
この手法を導入すれば、若手設計者が「切り欠きの寸法を間違える」「位置をずらす」といった初歩的なミスは完全に撲滅できます。
「コードで設計を縛る」のではなく、「コードで設計のベストプラクティスを強制する」こと。
それが、SolidWorks APIを使いこなすアーキテクトの真の役割です。このスクリプトをベースに、皆さんの現場の標準規格をコードに落とし込んでください。次の記事では、「コンフィギュレーションごとの動的パラメータ切り替え」について深掘りします。
