SolidWorks APIの深淵:コンフィギュレーション制御を「無敗の自動化」に変える極意
SolidWorks API開発の現場で、初心者が最も躓き、かつ中級者が最も無頓着になりがちなのが「コンフィギュレーション(以下コンフィグ)の操作」だ。
「とりあえずActiveDocを叩いてコンフィグを切り替えれば動く」という考えは、大規模アセンブリや複雑な親子関係を持つパーツでは、確実に「意図しない寸法変化」や「再構築エラー」という爆弾を招く。
本稿では、単なるAPIのリファレンスを超えた、堅牢かつ保守性を極めたコンフィグ制御のアーキテクチャを伝授する。
—
1. なぜ「力技の切替」が失敗を呼ぶのか
多くの開発者が陥る罠は、`swModel.ShowConfiguration2` を呼び出した直後に、即座に寸法値を書き換えてしまうことだ。
SolidWorksの内部処理において、コンフィグの切り替えは「再構築(Rebuild)」を伴う非同期的なイベントに近い。切り替え直後に寸法をいじると、「まだ切り替え前のコンフィグの寸法テーブルに値を書き込んでいた」という事態が平然と発生する。
鉄則:プログラミングの黄金律
- 切替後は必ず `ForceRebuild3` を呼べ:状態の同期を強制する。
- 寸法は「名前」ではなく「Dimensionオブジェクト」で保持せよ:スケッチ内の寸法を文字列で追いかけるのは、メンテナンス性を殺す行為だ。
—
2. 【プロダクションコード】堅牢なコンフィグ制御の実装
以下に、コンフィグの追加、切替、寸法変更を安全に完結させるためのテンプレートを示す。
Option Explicit
‘ コンフィギュレーションを安全に操作するためのコントローラー
Public Sub UpdateConfigurationParameter(ByVal configName As String, ByVal dimName As String, ByVal newValue As Double)
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swConfig As SldWorks.Configuration
Dim swDim As SldWorks.Dimension
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
‘ 1. コンフィグが存在するか確認
If Not swModel.GetConfigurationNames Like “” & configName & “” Then
‘ 新規作成する場合
Set swConfig = swModel.AddConfiguration3(configName, “”, “”, swConfigurationOptions2_e.swConfigOption_Default)
Else
‘ 切替
If Not swModel.ShowConfiguration2(configName) Then
Err.Raise vbObjectError + 1, “ConfigUpdate”, “コンフィグの切り替えに失敗しました。”
End If
End If
‘ 2. 重要:切り替え後のモデル状態を強制同期
swModel.ForceRebuild3 False
‘ 3. 寸法操作:ParameterではなくDimensionオブジェクトを直接取得
Set swDim = swModel.Parameter(dimName & “@” & “スケッチ1”) ‘ 適切なフィーチャ名を指定
‘ 4. コンフィグ指定で書き込み(ここが重要)
‘ swSetValue_InThisConfiguration を必ず指定すること
swDim.SetSystemValue3 newValue, swSetValue_InThisConfiguration, Empty
‘ 5. 最終再構築
swModel.ForceRebuild3 False
Debug.Print “Success: ” & configName & ” Updated to ” & newValue
End Sub
—
3. 実務で「生き残る」ための3つの設計思想
① パラメータ駆動は「JSON/CSV」と分離せよ
コード内に数値をハードコーディングしてはならない。コンフィグの増減や寸法の変更は、必ず外部ファイル(JSONやSQLite)から読み込む設計にせよ。ビジネスロジックとデータが分離されていれば、仕様変更が「ファイルの差し替え」だけで完結する。
② `swSetValue_InThisConfiguration` を使いこなせ
寸法変更時に `swSetValue_Global` を使うと、全コンフィグが汚染される。常に `swSetValue_InThisConfiguration` を明示的に指定することで、「このコンフィグだけを変更する」という意図を明確にする。これは、後から入ったメンバーが仕様を読み解くための「仕様書代わりのコード」となる。
③ データベース連携時のトランザクション管理
コンフィグを自動生成するツールを組む場合、エラーが発生すると「中途半端に作成されたコンフィグ」が残る。これを防ぐには、エラーハンドリング(`On Error GoTo`)を活用し、異常系では `DeleteConfiguration` を実行して「生成前のクリーンな状態」に戻す処理を実装するのが、プロフェッショナルの矜持だ。
—
結論:自動化は「防衛」から始まる
VBAによるSolidWorksの自動化は、単にコードを書くことではない。「SolidWorksという巨大なブラックボックスの挙動を、いかに予測可能な範囲に収めるか」という防衛戦だ。
今回紹介した「強制再構築」と「コンフィグ指定の書き込み」の徹底は、あなたの自動化ツールを、エラー知らずの「工場の心臓部」へと進化させるはずだ。
さあ、次はどの面倒なルーチンを自動化する? 現場で起きる「なぜか動かない」という悩みは、すべてAPIの設計思想で解決できる。また次回、さらなる深淵で会おう。
