【入門編】【ライブラリ機能】ModelDocExtension.GetLibraryFeatureDataを用いた社内標準フィーチャパラメータの動的書き換え – SolidWorks VBA解析バイブル

スポンサーリンク

SolidWorks APIの真髄:デザインライブラリを「コードで操る」極意

こんにちは。SolidWorksの自動化の世界へようこそ。
「マクロの記録」ボタンを押して生成された、冗長で脆いコードに悩まされていませんか?

今日お話しするのは、「デザインライブラリから配置した標準フィーチャを、プログラムで自在に書き換える」という、中級者への登竜門にして、自動化エンジニアの嗜みとも言える手法です。

多くのエンジニアが「配置まではできるが、その後の寸法変更がうまくいかない」という壁にぶつかります。今日はその壁を、`GetLibraryFeatureData` という魔法のメソッドを使って鮮やかに飛び越えてみましょう。

なぜ「マクロの記録」では限界があるのか?

マクロの記録は、あくまで「ユーザーの操作手順」をなぞるだけです。しかし、標準フィーチャ(Library Feature)は内部的に特殊な構造を持っています。

単に `Select` して寸法値を変更しようとしても、SolidWorksは「どの設定(Configuration)の、どのパラメータか」を見失うことが多々あります。我々が目指すべきは、フィーチャの裏側にある「データ構造」を直接叩くアプローチです。

1. 核心となるオブジェクト:LibraryFeatureData

ライブラリフィーチャを操作するには、以下のステップが不可欠です。

1. 対象フィーチャを取得する (`Feature` オブジェクト)
2. そのフィーチャの「定義(Definition)」を取り出す (`LibraryFeatureData`)
3. 定義内のパラメータを書き換える
4. 変更を適用する (`ModifyDefinition`)

このサイクルを理解すれば、あなたのマクロは「記録再生機」から「設計エンジン」へと進化します。

実践コード:ライブラリフィーチャを動的に書き換える

以下のコードは、選択したライブラリフィーチャの寸法値を、コードから強制的に上書きするテンプレートです。

Sub UpdateLibraryFeatureParam()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swFeat As SldWorks.Feature
Dim swLibData As SldWorks.LibraryFeatureData

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

‘ 1. 現在選択しているフィーチャを取得
Set swFeat = swModel.SelectionManager.GetSelectedObject6(1, -1)

‘ 2. フィーチャがライブラリフィーチャかどうかチェック
If swFeat.GetTypeName2 = “LibraryFeature” Then

‘ 3. ライブラリフィーチャの定義データにアクセス
Set swLibData = swFeat.GetDefinition

‘ 4. パラメータの編集モードへ
swLibData.AccessSelections swModel, Nothing

‘ — ここが重要:パラメータの書き換え —
‘ ライブラリフィーチャの駆動寸法は “Dimensions” 配列として管理されます
Dim vDims As Variant
vDims = swLibData.GetDimensions

‘ 例:1番目の寸法を 50mm に変更
‘ ※実際には寸法名とインデックスの対応を確認してください
swLibData.SetDimensionValue vDims(0), 0.05 ‘ メートル単位系に注意

‘ 5. 変更を確定して再構築
swFeat.ModifyDefinition swLibData, swModel, Nothing

swModel.EditRebuild3
Debug.Print “フィーチャの更新が完了しました。”

Else
MsgBox “ライブラリフィーチャを選択してください。”
End If
End Sub

このコードの「賢い」ポイント

  • `AccessSelections` の重要性: これを忘れると、SolidWorksは「フィーチャを編集モード」に入れず、変更が拒絶されます。
  • 単位系への配慮: SolidWorks APIの内部数値は常に「メートル法(m)」です。50mmを指定したい場合は `0.05` と書くのが鉄則です。
  • `ModifyDefinition`: 変更をコミットするこのメソッドこそが、自動化の安定性を決める心臓部です。

陥りやすい罠:ここさえ気をつければ大丈夫

1. フィーチャタイプが違う: `GetTypeName2` でチェックを入れないと、異なるフィーチャ(押し出し等)に対してこのコードを実行した瞬間にエラーで止まります。必ず `If` 文で型を確認しましょう。
2. 再構築の忘れ: 値を書き換えただけでは、画面上の表示は変わりません。`EditRebuild3` を呼ぶことで、SolidWorksのジオメトリエンジンを強制的に再計算させます。
3. インデックスの不一致: ライブラリフィーチャの寸法順序は、作成時のスケッチ構成に依存します。もし意図しない寸法が変わる場合は、`swLibData.GetDimensionNames` で名前を取得し、名前ベースで検索するロジックに拡張してください。

さあ、次はあなたの番です

今回紹介した `LibraryFeatureData` を使いこなせるようになると、社内の標準加工(溝、切り欠き、ボルト穴など)の配置が劇的に速くなります。

「マクロの記録」という殻を破り、オブジェクトの構造を理解する。これが、伝説のエンジニアへの第一歩です。
まずは、手元の簡単なライブラリフィーチャで実験してみてください。もし壁にぶつかったら、それはあなたがより深いAPIの領域へ足を踏み入れている証拠です。

応援していますよ。あなたの自動化の旅が、素晴らしい成果を生むことを願っています。

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