【実務・中級編】【カスタムプロパティ連携】CustomPropertyManagerで部品情報の一括読み書きと外部DB連携の土台作り – SolidWorks VBA解析バイブル

スポンサーリンク

SolidWorks APIの真髄:CustomPropertyManagerを支配し、設計データを資産に変える

設計現場で「プロパティの手入力」ほど無駄な時間はない。図面やアセンブリのメタデータがバラバラであれば、それは単なるファイルの集積であり、情報資産ではない。

今回は、SolidWorks APIの根幹である`CustomPropertyManager`を徹底的に使いこなし、外部データベースやExcel管理台帳との同期を完遂するための「プロフェッショナルな設計思想」を伝授する。

1. なぜ「力技」でのプロパティ操作が破綻するのか

多くの初心者は、`ModelDocExtension::CustomPropertyManager`を単なる「値の出し入れ口」として扱う。しかし、ここに落とし穴がある。

  • 設定(Configuration)の罠: 部品には必ず「デフォルト設定」が存在する。モデル全体(ファイル単位)のプロパティと、特定の設定固有のプロパティを混同して書くと、PDMやBOM展開で致命的な不整合を生む。
  • 非同期書き込みの恐怖: ファイルを開いたまま外部DBと同期する際、`Save`処理を怠ればデータは揮発する。逆に、無闇な保存はタイムスタンプを更新し、PDM環境で不要なチェックアウトを誘発する。

これらを防ぐには、「オブジェクトのライフサイクル管理」「トランザクションの意識」が不可欠だ。

2. プロダクションコード:堅牢なプロパティ・インターフェース

以下は、部品設定(Configuration)を明示的に指定し、確実に値を読み書きするためのクラス設計の骨子だ。

‘ —————————————————————————
‘ SolidWorks Property Controller Class (抜粋)
‘ 役割: 特定のコンフィギュレーションに対するプロパティの安全な読み書き
‘ —————————————————————————
Public Function GetCustomProperty(swModel As SldWorks.ModelDoc2, configName As String, propName As String) As String
Dim swCustPropMgr As SldWorks.CustomPropertyManager
Dim val As String
Dim resolvedVal As String

‘ コンフィギュレーションを指定してマネージャーを取得
Set swCustPropMgr = swModel.Extension.CustomPropertyManager(configName)

‘ Get6メソッドを使用:第4引数(resolvedVal)で計算式(SW-Massなど)の結果を取得する
swCustPropMgr.Get6 propName, False, val, resolvedVal

GetCustomProperty = resolvedVal
End Function

Public Sub SetCustomProperty(swModel As SldWorks.ModelDoc2, configName As String, propName As String, value As String)
Dim swCustPropMgr As SldWorks.CustomPropertyManager
Set swCustPropMgr = swModel.Extension.CustomPropertyManager(configName)

‘ Add3は既存の場合は失敗するため、Add2(または内部的な削除・追加)で制御するのが定石
‘ ここではシンプルにAdd2で上書きする設計例
swCustPropMgr.Add2 propName, swCustomInfoType_Text, value
End Sub

ここがアーキテクトのこだわり

  • `Get6`の活用: `Get`系メソッドには複数のバリエーションがあるが、`Get6`は「解決済みの値(Resolved Value)」を直接引き出せる。重量や材質の計算値をそのまま取得できるため、わざわざ計算ロジックを自作する必要はない。
  • `configName`の明示: 空文字(””)を渡せば「ユーザー定義プロパティ」へ、コンフィギュレーション名を渡せば「設定固有プロパティ」へ確実にアクセスできる。この切り分けをコード内で曖昧にしてはならない。

3. 外部DB連携の土台:堅牢な設計指針

外部DBやExcelと同期する際、以下の3原則を守ること。

1. 「読み取り」と「書き込み」の分離:
プログラム内で一気に更新するのではなく、「モデルから読み出し(Dictへ格納)→ 内部ロジックで検証 → モデルへ反映」というプロセスを踏むこと。
2. 型変換の厳密化:
プロパティはすべて「文字列」として扱われる。DB側の数値型や日付型と同期させる際は、VBA側で必ずバリデーションを行い、不正な文字列がプロパティに混入するのを防げ。
3. エラーハンドリング:
SolidWorksは不安定な要素も孕んでいる。`On Error GoTo`で例外をキャッチし、少なくとも「どのファイルで処理が止まったか」をログに残せ。

4. 最後に:エンジニアへのメッセージ

APIを叩くことは、SolidWorksという巨大なシステムの内部を操作することだ。コードを書く前に、まず「そのプロパティはどこで管理されるべきか」というデータ構造を設計してほしい。

プロパティは、図面枠を埋めるための単なる飾りではない。それは「上流工程から下流工程への設計意図のバトン」だ。そのバトンを正確に渡すために、今回紹介した堅牢な設計をあなたのツールに組み込んでほしい。

もし「なぜ自分のコードが遅いのか」「メモリリークが起きるのか」という疑問があれば、それはAPIオブジェクトの解放漏れか、不要な再構築を繰り返している証拠だ。次回の講義では、その「パフォーマンスを極限まで引き出すためのメモリ管理」について深く切り込んでいこう。

さあ、退屈な手作業をコードで殲滅する準備はできたか?

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