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の領域へ足を踏み入れている証拠です。
応援していますよ。あなたの自動化の旅が、素晴らしい成果を生むことを願っています。
