SolidWorks APIの「正解」:アセンブリ新規作成で“揺れ”を根絶する初期化術
SolidWorksのアセンブリ自動化における最大の敵は、プログラムのバグではなく「環境の曖昧さ」です。
「アセンブリを作ったはずが、なぜか単位系がインチになっている」「カスタムプロパティが空で、PDMと連携できない」。これらは全て、開発者が『SolidWorksのデフォルト設定』に依存してしまった結果起きる悲劇です。
今日は、伝説的な自動化エンジニアとして、「社内標準を強制し、どんな環境でも一貫したアセンブリを生成する」ための極限の初期化メソッドを伝授します。
—
1. なぜ `NewDocument` をそのまま使ってはいけないのか
多くの初心者が陥る罠は、引数を曖昧にしたままアセンブリを作成することです。
‘ 【アンチパターン】これでは環境依存の罠にハマる
Set swModel = swApp.NewDocument(defaultTemplate, 0, 0, 0)
この書き方の何が問題か? `defaultTemplate` という変数は、各ユーザーの SolidWorks のシステムオプションに依存します。担当者Aはテンプレートをカスタマイズしており、担当者Bはデフォルトのまま……これでは、作成されるアセンブリの単位系、レイヤー設定、カスタムプロパティの雛形がバラバラになります。
真のエンジニアは、テンプレートパスを「ハードコード」するか、「設定ファイルから読み込む」ことで、実行環境を完全に管理下におきます。
—
2. 実務で耐えうる堅牢なアセンブリ初期化コード
以下は、私が大規模開発プロジェクトで採用している「テンプレート強制適用型」の初期化関数です。
Option Explicit
‘ SolidWorksの定数定義(必要に応じて参照設定)
‘ 実務では型名にプレフィックスを付けるのが鉄則です
Public Sub CreateStandardAssembly()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim templatePath As String
Set swApp = Application.SldWorks
‘ 1. テンプレートパスを明示的に指定
‘ ネットワーク上の共有フォルダを指定することで、全PCでルールを統一する
templatePath = “C:\CompanyStandard\Templates\Standard_Assembly.asmdot”
‘ 2. ファイルの存在確認は必須(エラーハンドリングの基本)
If Dir(templatePath) = “” Then
MsgBox “テンプレートファイルが見つかりません: ” & templatePath, vbCritical
Exit Sub
End If
‘ 3. アセンブリの新規作成
Set swModel = swApp.NewDocument(templatePath, 0, 0, 0)
If swModel Is Nothing Then
MsgBox “アセンブリの生成に失敗しました。”, vbCritical
Exit Sub
End If
‘ 4. 初期化後のプロパティ設定(PDM連携の要)
Call InitializeCustomProperties(swModel)
swModel.Visible = True
End Sub
Private Sub InitializeCustomProperties(model As SldWorks.ModelDoc2)
‘ テンプレートから引き継げない動的なプロパティをここで注入する
‘ ここで「設計者名」や「プロジェクトID」を自動入力するのがプロの技
model.AddCustomInfo3 “”, “ProjectID”, swCustomInfoText, “PROJECT-2024-ALPHA”
model.AddCustomInfo3 “”, “Designer”, swCustomInfoText, Environ(“USERNAME”)
End Sub
—
3. なぜこのコードが「プロダクション・レベル」なのか
① テンプレートパスの外部化
コード内でパスを直接指定(または設定ファイルから読み込む)ことで、ユーザーの「システムオプション」がどうなっていようが、常に同じ設計基準でアセンブリが作成されます。
② ファイル存在チェックの徹底
自動化ツールで最も不愉快なのは、ファイルが見つからないことで実行が止まり、エラーでプログラムがクラッシュすることです。`Dir` 関数による存在確認は、開発者としての「誠実さ」を示す第一歩です。
③ プロパティの“事後注入”
テンプレートに全てを詰め込むのは限界があります。`InitializeCustomProperties` のように、作成直後に動的な情報(Windowsユーザー名やDBから取得したプロジェクトID)を書き込む設計にすることで、PDM(Product Data Management)とのデータ整合性が劇的に向上します。
—
4. 最後に:エンジニアへのアドバイス
アセンブリの自動化は、「単にファイルを作る」ことではありません。「設計のスタートラインを揃える」ことです。
単位系やプロパティの揺れをプログラムで根絶できれば、その後ろに続く「部品の自動配置」や「図面生成」といった高度な自動化プロセスにおいて、バグの発生率を限りなくゼロに近づけることができます。
まずはこの初期化術を、あなたの自動化プロジェクトの「礎」として組み込んでみてください。これができるか否かで、あなたの作るツールの「格」が決定します。
次回の記事では、この土台の上に「部品を正確な座標系に拘束して配置する」ための、より高度な合致ロジックを解説します。準備はいいですか?自動化の世界はここからが面白いですよ。
