【実務・中級編】【図面自動化の第一歩】DrawViewFromModelFileNameでモデルから図面ビューを自動配置する – SolidWorks VBA解析バイブル

スポンサーリンク

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` で制御し、ログを出力するシステムにして初めて、君のコードは「プロダクションコード」と呼ばれる。

自動化とは、一度作って終わりではない。設計者の意図をコードに焼き付け、組織の生産性を底上げする「資産」を作る行為なのだ。

さあ、エディタを開け。君のコードで、設計現場の風景を変えてこい。

タイトルとURLをコピーしました