序文:図面作成の自動化こそが、設計者の魂を単純作業から解放する
「図面を一枚作るたびに、テンプレートを選び、シートフォーマットを指定し、プロパティを手入力する……。君はいつまでそんな『デジタル内職』を続けるつもりだ?」
私はこれまで数多くの製造現場で、何万時間という膨大な時間がこの「初期セットアップ」という無価値なルーチンに消えていくのを見てきた。SolidWorks APIを操るということは、単にコードを書くことではない。設計者の思考を止めずに、次のクリエイティブな工程へ即座にパスを回す「情報の高速道路」を構築することだ。
今回は、その第一歩として、「部品モデルから図面を新規作成し、社内標準のシートフォーマットを寸分の狂いなく適用する」ための極限の知見を伝授する。初心者が陥りがちな「とりあえず動くコード」ではなく、実務の過酷な運用に耐えうる「堅牢な設計」をその目に焼き付けてほしい。
—
1. 概念の整理:テンプレート(.drwdot)とシートフォーマット(.slddrt)の峻別
まず、多くのエンジニアが混同している基本を正そう。ここを間違えると、君のプログラムは将来必ず「プロパティが更新されない」という壁にぶち当たる。
- 図面テンプレート (.drwdot): 図面の「器」だ。単位系、フォント、レイヤー設定、図面オプションなどを保持する。
- シートフォーマット (.slddrt): 図面の「顔」だ。枠線、表題欄、そしてモデルプロパティとのリンク情報を保持する。
「テンプレートを開くだけでいいのでは?」 という甘い考えは捨てろ。実務では、一つのテンプレートに対して、A3、A2、A1と異なるサイズのシートフォーマットを動的に切り替える必要がある。だからこそ、APIで「シートフォーマットを再ロードする」技術の習得が不可欠なのだ。
—
2. 堅牢な自動化を実現するためのアーキテクチャ
設計のポイントは以下の3点だ。
1. アクティブドキュメントの検証: 今開いているのは本当に「部品(Part)」か?アセンブリか?
2. パスの定数管理: テンプレートやフォーマットのパスをコード内に散らさない。
3. SetupSheet5の制覇: シート設定を制御する最重要メソッドを完全にコントロールする。
—
3. 実践:図面生成とフォーマット適用のプロダクションコード
以下のコードは、単なるサンプルではない。エラーハンドリングを考慮し、実務でそのままモジュールとして組み込めるレベルまで磨き上げたものだ。
‘
‘ Module: ModDrawingGenerator
‘ Description: 部品から図面を生成し、標準シートフォーマットを適用する
‘ Author: Your Name (Chief Architect)
‘
Option Explicit
‘ — 設定エリア:環境に合わせて変更せよ —
Private Const DRAWING_TEMPLATE As String = “C:\SolidWorks_Admin\Templates\Standard_A3.drwdot”
Private Const SHEET_FORMAT_PATH As String = “C:\SolidWorks_Admin\Formats\Company_Standard_A3.slddrt”
Sub CreateStandardDrawing()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swDraw As SldWorks.DrawingDoc
Dim swSheet As SldWorks.Sheet
Dim boolStatus As Boolean
Dim longStatus As Long
Dim modelPath As String
Set swApp = Application.SldWorks
‘ 1. 現在開いているモデルを確認
Set swModel = swApp.ActiveDoc
If swModel Is Nothing Then
MsgBox “対象となる部品またはアセンブリを開いてください。”, vbCritical
Exit Sub
End If
‘ モデルが保存されているかチェック(パスがないと図面とのリンクが脆弱になる)
modelPath = swModel.GetPathName
If modelPath = “” Then
MsgBox “まずモデルを保存してください。パスが確定していないモデルの図面化は推奨されません。”, vbExclamation
Exit Sub
End If
‘ 2. 新規図面ドキュメントの作成
‘ NewDocument(テンプレートパス, 用紙サイズ(0はテンプレート依存), 幅, 高さ)
Set swDraw = swApp.NewDocument(DRAWING_TEMPLATE, 0, 0, 0)
If swDraw Is Nothing Then
MsgBox “図面テンプレートのロードに失敗しました。パスを確認してください。”, vbCritical
Exit Sub
End If
‘ 3. シートフォーマットの強制適用
‘ SetupSheet5(Name, PaperSize, TemplateName, Width, Height, EmbedFlag, FormatPath, …)
‘ 既存のシートに対して、社内標準のフォーマット(.slddrt)を流し込む
Set swSheet = swDraw.GetCurrentSheet
‘ ここがキモだ:既存のフォーマットを捨て、指定したパスのフォーマットを正確にロードする
boolStatus = swDraw.SetupSheet5(swSheet.GetName, swDwgPaperA3size, swDwgTemplateCustom, 0.42, 0.297, True, SHEET_FORMAT_PATH, 0, 0, “Default”, True)
If Not boolStatus Then
MsgBox “シートフォーマットの適用に失敗しました。”, vbExclamation
Else
Debug.Print “図面生成成功: ” & modelPath
End If
‘ 4. (オプション) 最初のビューを配置する準備として、モデルをアクティブに戻す必要はない
‘ このままビュー配置ロジックへ移行可能
End Sub
—
4. コードの急所:なぜ `SetupSheet5` なのか?
初心者はよく `swApp.NewDocument` だけを使って満足する。しかし、それでは不十分だ。
`SetupSheet5` メソッドを使用している理由は、「図面枠(表題欄)のプロパティリンクを強制的に更新させるため」だ。
多くの会社では、表題欄に `$PRPSHEET:”PartNo”` といった具合に、モデルのプロパティを表示させるリンクを埋め込んでいる。API経由で図面を作った際、稀にこのリンクが壊れたり、古い情報のまま止まったりすることがある。
`SetupSheet5` で最新の `.slddrt` を明示的にリロードすることで、図面生成の瞬間にモデルのプロパティを正確に吸い上げ、完璧な表題欄を完成させることができるのだ。
—
5. プロフェッショナルへの道:さらに堅牢なシステムへ
このコードをベースに、君が次に実装すべき拡張機能を挙げておく。
1. モデルサイズによる自動分岐:
モデルのバウンディングボックス(外形サイズ)を計算し、A3かA2か、最適なシートサイズをコードに選択させる。
2. データベース連携:
`SHEET_FORMAT_PATH` をハードコードせず、社内の共有設定ファイル(XMLやINI)から読み込むようにせよ。これにより、図面枠が更新された際に、全社員のプログラミングを書き換える手間がなくなる。
3. サイレントモードの実装:
大量の図面をバッチ処理する場合、`swApp.UserControl = False` や `swModel.ShowSystemMenu = False` を検討せよ。描画を抑制することで、処理速度は劇的に向上する。
結言
図面作成の自動化は、単なる「時短」ではない。それは、「人為的ミス(図面枠の間違い、プロパティの転記ミス)を物理的に不可能にする」という、品質保証における最強の武器だ。
今回提示したコードは、その武器の「引き金」に過ぎない。この構造を理解し、君の組織のルールに合わせて磨き上げ、唯一無二の自動化エンジンを構築してほしい。
次は、図面ビューの自動配置――「どの向きで、どのスケールで置くべきか」という、さらに深いAPIの深淵で会おう。
