アセンブリの「表示名」を支配せよ:SolidWorks APIで実現するツリー構造の最適化
設計現場において、「ファイル名」と「図面上の部品表(BOM)の名称」の乖離に頭を悩ませたことはないだろうか?
PDM(製品データ管理)のルールでファイル名には厳格な命名規則がある。しかし、設計の文脈上、アセンブリツリー上では「サブアセンブリAの右側」「調整用ユニット」といった、人間が直感的に理解できる名称を表示したい。
ファイル名を変更すれば参照関係(リファレンス)が崩れ、PDMの整合性も壊れる。正解は「コンポーネントの表示名をプログラムから操作する」ことだ。
今回は、SolidWorks APIを駆使して、ファイル名という物理的な紐付けを壊さずに、ツリー上の論理的な名前を動的に書き換える「極限の知見」を授ける。
—
1. なぜ「Component.Name2」に触れてはいけないのか
初心者が陥る最大の罠が、`Component.Name2` プロパティを直接いじろうとすることだ。これはアセンブリ内での一意な識別子であり、SolidWorksが内部的に管理する神聖な値だ。これに手を出せば、アセンブリの整合性は即座に崩壊する。
我々が操作すべきは、「コンポーネントの表示名(User-defined name)」である。
これは `IComponent2::Name2` ではなく、アセンブリ内のコンポーネントオブジェクトに対して「ユーザーが手動で名前を変更する」操作をAPIで代行させる手法をとる。
—
2. 堅牢な設計のための実装コード
以下のコードは、選択したコンポーネントの表示名を、指定した文字列に変更するプロシージャだ。
実装のポイント
- エラーハンドリング: コンポーネントが選択されていない場合や、読み取り専用の場合を考慮する。
- 整合性の維持: ファイルパスや内部IDには一切触れず、表示名のみをターゲットにする。
‘ —————————————————————————
‘ @brief アセンブリ内のコンポーネントの表示名を変更する関数
‘ @param swComp [IComponent2] 対象のコンポーネント
‘ @param newName [String] 変更したい名称
‘ —————————————————————————
Public Sub RenameComponentInTree(ByVal swComp As SldWorks.Component2, ByVal newName As String)
Dim swAssy As SldWorks.AssemblyDoc
Dim swModel As SldWorks.ModelDoc2
Set swModel = swComp.GetModelDoc2 ‘ 親アセンブリのコンテキストを取得
If swModel.GetType <> swDocASSEMBLY Then Exit Sub
Set swAssy = swModel
‘ 重要:コンポーネントを選択状態にしてから名前変更を行う
‘ これにより、SolidWorksのGUI操作をシミュレートする形で安全に名前を更新する
Dim bRet As Boolean
bRet = swComp.Select4(False, Nothing, False)
If bRet Then
‘ コンポーネントのツリー表示名を変更
‘ 戻り値を確認し、失敗時はログに記録する堅牢な作りを推奨
bRet = swAssy.CompConfigProperties6(0, 0, 0, 0, newName, True, “”, False, False)
If Not bRet Then
Debug.Print “エラー: コンポーネント名称の変更に失敗しました – ” & swComp.Name2
End If
End If
End Sub
—
3. 業務効率化のための「プロの設計指針」
単に名前を変えるツールを作るだけでは、一流の自動化エンジニアとは言えない。以下の3点を必ず遵守せよ。
① データベース(Excel/CSV)との連携
コンポーネント名の一覧をExcelで管理し、それを読み込んで一括リネームするバッチ処理を組むべきだ。
- キー: `Component.GetPathName`(フルパス)をキーにして、Excel上の名称と突き合わせる。
- 利点: 複数のアセンブリで共通の命名規則を強制できる。
② 履歴のトラッキング
APIで名前を変えると、誰がいつ変えたか分からなくなる。必ずログ出力機能(テキストファイルへの書き出し等)を付与し、設計の変更履歴と追跡できるようにすること。
③ 「図面」との整合性
ここで変更した表示名は、図面の「部品表(BOM)」に反映される場合がある。BOMのコンフィギュレーション設定で「コンポーネントの表示名を使用する」設定になっているか、事前に確認しておく必要がある。ここがズレると、現場の混乱を招く。
—
結論:自動化は「設計の意志」をコードに落とし込むこと
SolidWorks APIは強力だが、その分、設計者の意図を理解せずにコードを書けば、巨大な技術負債を生む。
「表示名」を変えるという小さな機能一つとっても、ファイル名との関係性、ツリー階層の可読性、そしてBOMへの影響までを見通す視点を持つこと。それが、明日からあなたの現場を劇的に変える「エンジニアの矜持」だ。
さあ、退屈な手作業から解放され、より本質的な設計業務に時間を割こうではないか。何か具体的な実装で詰まれば、またいつでも聞いてくれ。
