こんにちは!SolidWorks自動化の現場で泥臭く、かつ優雅にシステムを作り続けている先輩エンジニアです。
「マクロの記録」ボタンを押して、ポチポチと図面ビューを配置していく作業……。最初はそれでも感動しますが、扱っているアセンブリが何百点、何千点という巨大な構造になり、設計変更のたびに図面を最初から作り直す羽目になったとき、こう思いませんか?
「これ、全部プログラムに一瞬でやらせたい!」と。
今回は、プログラムの力でアセンブリから図面ドキュメントを新しく起こし、正面図・投影図、そして空間の広がりが一目で伝わるISOビュー(アイソメ図)を美しく一気にレイアウトする手法を伝授します。
ここをクリアすれば、あなたも単なる「VBAの使用者」から「SolidWorksの空間を自在に支配する自動化エンジニア」の仲間入りです。一緒に本質を学んでいきましょう!
—
1. アセンブリ図面自動化の本質と「ドキュメントの壁」
SolidWorksのAPIを扱う上で、最も最初に心に刻むべき鉄則があります。それは、
「今、どのドキュメントがアクティブ(選択)になっているか」を常にプログラムが把握していなければならない、という点です。
アセンブリから図面を生成する際の流れは、人間が手動でやる手順と全く同じです。
1. 元となるアセンブリを開いておく。
2. 「図面テンプレート」を呼び出して、新しい図面シートを開く。
3. アセンブリの3D空間にあるモデルを、2Dのシート上に「ビュー」として投影する。
VBAの世界では、これをSldWorks.DrawingDocとSldWorks.ModelDoc2というオブジェクトの連携で実現します。ここを曖昧にすると「あれ、予期せぬ図面にビューが貼られたぞ!?」という大惨事(エラー)が起きます。しっかりとコードで制御していきましょう。
—
2. 実装コード:一撃で図面レイアウトを完結させるマクロ
それでは、実際の現場でそのままコピペして使える実践的なコードを公開します。
このコードは、現在アクティブになっているアセンブリを対象に、標準的なA3図面テンプレートを読み込み、正面図、右側面図、そして迫力のあるISOビューを自動配置するものです。
Option Explicit
Sub Main()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swDraw As SldWorks.DrawingDoc
Dim templatePath As String
Dim fileName As String
Dim boolstatus As Boolean
‘ 1. アプリケーションとアクティブモデルの取得
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
‘ エラーハンドリング:アセンブリが開かれているかチェック
If swModel Is Nothing Then
MsgBox “図面化するアセンブリが開かれていません。”, vbCritical, “エラー”
Exit Sub
End If
If swModel.GetType <> swDocASSEMBLY Then
MsgBox “アクティブなドキュメントがアセンブリではありません。”, vbCritical, “エラー”
Exit Sub
End If
‘ アセンブリのファイル名を取得(拡張子なし)
fileName = swModel.GetPathName
‘ 2. 図面テンプレートのパスを指定(環境に合わせてパスを変更してください)
‘ 一般的なJIS A3図面テンプレートの例
templatePath = “C:\ProgramData\SolidWorks\SolidWorks 2023\templates\Drawing.drwdot”
‘ 3. 新規図面ドキュメントの作成 (A3図面)
Set swModel = swApp.NewDocument(templatePath, 12, 0.42, 0.297)
Set swDraw = swModel
If swDraw Is Nothing Then
MsgBox “図面ドキュメントの作成に失敗しました。”, vbCritical, “エラー”
Exit Sub
End If
‘ 4. 正面図(Base View)の配置
‘ 第3角法を前提として、シートの左下あたり (X=0.1m, Y=0.15m) に配置
Dim swView As SldWorks.View
Set swView = swDraw.CreateDrawViewFromModelViewModel3(fileName, “”, 0, False, 0.1, 0.15, 0)
If swView Is Nothing Then
MsgBox “ベースビュー(正面図)の配置に失敗しました。”, vbCritical, “エラー”
Exit Sub
End If
‘ 5. 投影図(右側面図)の配置
‘ 正面図を基準にして右側 (X=0.3m, Y=0.15m) に投影
Dim swRightView As SldWorks.View
Set swRightView = swDraw.CreateProjectionViewAt3(0.3, 0.15, 0)
‘ 6. ISOビュー(アイソメ図)の配置と向きの制御
‘ 画面の右上 (X=0.32m, Y=0.25m) に配置
Dim swIsoView As SldWorks.View
Set swIsoView = swDraw.CreateDrawViewFromModelViewModel3(fileName, “Isometric”, 0, False, 0.32, 0.25, 0)
‘ ISOビューの表示スタイルを「シェイディング(着色)」に変更して見栄えを良くする
If Not swIsoView Is Nothing Then
‘ swDwgShadedWithEdges = 3 (陰影表示)
swIsoView.DisplayStyle = 3
End If
‘ 画面を再構築して美しく整える
swModel.EditRebuild3
MsgBox “アセンブリ図面の自動レイアウトが完了しました!”, vbInformation, “成功”
End Sub
—
3. コードのキモを徹底解説!プロが教える重要ポイント
上記のコードで、特に重要なAPIとテクニックを3つに絞って解説します。ここを理解すれば、あなたの応用力が劇的に跳ね上がります。
① `NewDocument` の第2引数と用紙サイズ
Set swModel = swApp.NewDocument(templatePath, 12, 0.42, 0.297)
ここで使っている `NewDocument` メソッドは、指定したテンプレートから新しい図面を開きます。最後の2つの数値 (`0.42` と `0.297`) は、図面の幅と高さ(単位はメートル)です。A3用紙の場合は横420mm、縦297mmなので、`0.42` と `0.297` を指定するのがお約束です。
② `CreateDrawViewFromModelViewModel3` によるビュー生成
モデルのファイルパスを指定し、さらに配置したい座標 `(X, Y)` をメートル単位で渡すことで、狙った場所にビューをスポーンさせることができます。
ここで面白いのが、第2引数に `”Isometric”` のようなビューの向き(標準ビュー名)を文字列で指定できる点です。
- `”Front”` (正面)
- `”Right”` (右側面)
- `”Isometric”` (アイソメ図)
これらを指定するだけで、3Dモデルの特定の方向を向いたビューを自由自在に作り出せます。
③ 表示スタイル(DisplayStyle)の魔術
図面のISOビューは、線画(ワイヤーフレーム)よりも「シェイディング(影付き)」のほうが見た目が美しく、設計レビューでも好まれます。
swIsoView.DisplayStyle = 3
この1行を入れるだけで、API側からプログラムに「このビューだけは着色表示にしなさい」と命令できます。細かなこだわりですが、こうした気配りが「使えるマクロ」の条件です。
—
4. 現場でよくある「ハマりポイント」と対策
初心者のうちは、次のようなエラーで頭を抱えることがよくあります。事前に知っておけば怖くありません。
- エラー:テンプレートのパスが見つからない
- 原因: `templatePath` に指定した文字列が、あなたのPCのSolidWorksインストール環境と一致していません。
- 対策: ご自身のPCのSolidWorks設定(オプション > システムオプション > ファイルの場所 > 図面テンプレート)を確認し、正しい `.drwdot` ファイルのパスをコードに記述してください。
- エラー:ビューが重なって表示される
- 原因: 座標指定 (`X, Y`) の値が近すぎます。
- 対策: SolidWorksの図面座標系は左下が原点 (0,0) です。シートサイズ(A3なら420x297mm)の範囲内で、各ビューのX座標・Y座標が被らないように十分なマージン(例:0.15m、0.3mなど)を計算して配置してください。
—
5. おわりに:ここをクリアすれば、基本はバッチリ!
お疲れ様でした!今回はアセンブリ図面の新規作成から、主要ビューの配置、そしてISOビューの向き・スタイルの制御までをVBAで一気通貫で行う方法を解説しました。
ここをクリアできたあなたは、単にコードを動かすだけでなく、「SolidWorksのドキュメント構造とビューの概念」をしっかりと理解できています。この技術をベースにすれば、部品表(BOM)の自動挿入や、バルーン(吹き出し)の自動付与など、さらなる高みへ進むのは時間の問題です。
日々の退屈な定型作業はマクロにすべて任せて、あなたにしかできないクリエイティブな設計業務に時間を使いましょう。
それでは、次回の高度な自動化の世界でお会いしましょう!エンジニアの皆さん、良い開発を!
