SolidWorks自動化の真髄:DrawViewFromModelFileNameで図面生成を「コード」で支配する
自動化を志すエンジニア諸君、ようこそ。
多くの初心者が「マクロの記録」から入り、生成されたスパゲッティコードに絶望して挫折する。だが、君たちが今から踏み込むのはその先だ。
SolidWorks APIを扱うということは、単にコマンドを並べることではない。「SldWorksアプリケーションとModelDoc2の生命周期(ライフサイクル)を設計する」ということだ。特に図面(Drawing)生成は、モデルの参照関係やメモリ管理が不完全だと、即座に「メモリ不足」や「ファイル破損」を引き起こす。
今日は、最も基本的でありながら、現場で最も酷使される`DrawViewFromModelFileName`を使った図面自動配置の「正しい作法」を伝授する。
—
1. なぜ「手作業」から脱却すべきなのか
図面枠へのビュー配置を人間にやらせると、「尺度のミス」「配置位置のズレ」「図枠の紐付け忘れ」というヒューマンエラーが必ず発生する。
自動化の目的は、単なる作業短縮ではない。「再現性の担保」だ。コードに落とし込むことで、誰が実行しても同じ品質、同じ位置にビューが配置される。これがエンジニアリングの基本である。
—
2. 堅牢なコード設計のための「3つの鉄則」
コードを書く前に、以下の原則を胸に刻んでほしい。
1. 完全修飾名(Fully Qualified Name)を使え: ファイルパスは必ず絶対パスで指定せよ。相対パスは「カレントディレクトリ」に依存する。これはバグの温床だ。
2. アクティブドキュメントを信用するな: `swApp.ActiveDoc`に頼るな。戻り値として返されるオブジェクト変数を適切に管理せよ。
3. クリーンアップの徹底: 生成したオブジェクトはメモリを食う。不要になった時点で適切にハンドリングし、メモリリークを防ぐ。
—
3. 実践コード:プロダクションレベルの図面自動配置
このコードは、指定した3Dモデルから図面を新規作成し、正面図と等角投影図(アイソメ)を配置するテンプレートだ。
Option Explicit
‘ 伝説のアーキテクトによる堅牢な図面生成モジュール
Public Sub CreateDrawingFromModel()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swDraw As SldWorks.DrawingDoc
Dim modelPath As String
Dim drawPath As String
Set swApp = Application.SldWorks
‘ 1. 対象ファイルのパスを定義(実務ではDBやフォームから取得せよ)
modelPath = “C:\Projects\SamplePart.sldprt”
drawPath = “C:\Projects\SamplePart.slddrw”
‘ 2. テンプレート指定(空の図面テンプレートを必須とする)
Set swDraw = swApp.NewDocument(“C:\ProgramData\SolidWorks\templates\Drawing.drwdot”, 0, 0, 0)
If swDraw Is Nothing Then
MsgBox “図面の作成に失敗しました。”
Exit Sub
End If
‘ 3. モデルからビューを作成
‘ DrawViewFromModelFileName(ファイルパス, 向き, X座標, Y座標, 尺度)
‘ 向き: 1=正面, 7=等角投影
‘ 正面図を配置 (X:0.1m, Y:0.2m)
swDraw.CreateDrawViewFromModelView3 modelPath, “Front”, 0.1, 0.2, 0
‘ 等角投影図を配置 (X:0.3m, Y:0.2m)
swDraw.CreateDrawViewFromModelView3 modelPath, “Isometric”, 0.3, 0.2, 0
‘ 4. 保存とクリーンアップ
swDraw.SaveAs2 drawPath, 0, False, False
Set swDraw = Nothing
Set swApp = Nothing
MsgBox “図面生成完了。”
End Sub
—
4. プロの視点:ここが「差」が出るポイント
なぜ `CreateDrawViewFromModelView3` なのか
VBAには似たようなメソッドが乱立している。しかし、後ろに数字がついているもの(`…3`など)を選べ。これらは旧来のAPIよりも引数が整理され、より深い制御(ビューの向きや尺度の詳細設定)が可能になっているからだ。
ファイルパスの「落とし穴」
`modelPath` にネットワークパスを指定する場合、SolidWorksがパスを認識できないことがある。必ず `Dir(modelPath)` でファイルが存在するか事前チェックするガード節を入れるのが、プロの流儀だ。
データベース連携のヒント
もし君がPDM(SolidWorks PDM)環境にいるなら、このコードをそのまま走らせてはいけない。PDMチェックアウトのプロセスを挟む必要がある。APIから `IEdmFile5` インターフェースを呼び出し、`LockFile` メソッドを実行する処理を前段に組み込むことで、初めて「業務自動化」として成立する。
—
5. 最後に:エンジニアへの提言
このマクロを動かしただけで満足してはいけない。次にやるべきは「エラーハンドリングの徹底」だ。
モデルが存在しない時、図面テンプレートが開けない時、SolidWorksが裏でフリーズしている時。そうした「想定外の事象」をすべて `On Error GoTo` で制御し、ログを出力するシステムにして初めて、君のコードは「プロダクションコード」と呼ばれる。
自動化とは、一度作って終わりではない。設計者の意図をコードに焼き付け、組織の生産性を底上げする「資産」を作る行為なのだ。
さあ、エディタを開け。君のコードで、設計現場の風景を変えてこい。
