【入門編】【初心者向け】アクティブ図面への三面図(正面図・平面図・側面図)一括自動配置マクロ – SolidWorks VBA解析バイブル

スポンサーリンク

こんにちは!SolidWorks自動化の世界へようこそ。
チーフアーキテクトの私です。

毎日のように図面を開き、同じ部品から「正面図」「平面図」「側面図」を一つひとつ手作業で配置していませんか?「マクロの記録」ボタンを押してコードを覗いてみたものの、難解な呪文のようなメソッドが並んでいて挫折してしまった……そんな経験はありませんか?

大丈夫。ここをクリアすれば、SolidWorks VBAの基本はバッチリです。
今回は、実務で最もよく使う「アクティブ図面への三面図一括自動配置」をテーマに、コードの本質を優しく、かつ深く解説していきます。

マクロの記録という「借り物の力」を卒業し、自分の手でCADを自在に操るエンジニアへの第一歩を、一緒に踏み出しましょう!

—

1. なぜ「三面図の自動配置」で躓くのか?

初心者の多くが、マクロの記録機能を使って生成されたコードを見て絶望します。
そこには、次のような大量のセレクションコードや、意味不明な数字(座標)が並んでいるからです。

‘ マクロの記録が吐き出す典型的な「重くて脆い」コードのイメージ
boolstatus = Part.Extension.SelectByID2(“Part1.sldprt”, “BODY”, 0, 0, 0, False, 0, Nothing, 0)
‘ 何をやっているか分からない複雑な引数のメソッド群…

マクロの記録は「人間が行ったマウス操作の軌跡」をそのまま録音しているだけなので、モデルの名前が変わったり、画面のズーム具合が変わったりしただけで、簡単にエラーを起こします。

私たちが目指すべきは、「今開いている3Dモデルのパスをスマートに取得し、APIに的確な指示を出して、一瞬でビューを生成する」という、プロフェッショナルなコードです。

—

2. 使用する最強のAPI:`CreateDrawViewFromModelView3`

今回主役となるのは、図面ドキュメント(`DrawingDoc`)オブジェクトが持つ、以下のメソッドです。

> `DrawingDoc.CreateDrawViewFromModelView3 ( ModelName, ViewName, XCoord, YCoord )`

  • ModelName: 配置したい3Dモデル(部品・アセンブリ)のフルパス
  • ViewName: モデル内のどの向きのビューか(” Front”(正面), “Top”(平面), “Right”(側面)など)
  • XCoord / YCoord: シート上の配置座標(メートル単位!)

このメソッドの最大の特徴は、「わざわざ画面上でモデルを選択(Select)しなくても、パスを指定するだけでダイレクトにビューを生成できる」という点です。これにより、コードの安定性が劇的に向上します。

—

3. 実装コード:三面図一括自動配置マクロ

それでは、実務でそのままコピペして使える完全版のVBAコードを公開します。
VBAエディタ(Alt + F11)を開き、標準モジュールに貼り付けて実行してみてください。

Option Explicit

Sub AutoPlaceThreeViews()
‘ ==========================================
‘ 【初心者向け】三面図一括自動配置マクロ
‘ ==========================================
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swDraw As SldWorks.DrawingDoc

Dim modelPath As String
Dim boolstatus As Boolean

‘ 1. アプリケーションとアクティブドキュメントの取得
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc

‘ 安全装置:今開いているのが「図面(Drawing)」かどうかをチェック
If swModel Is Nothing Then
MsgBox “ドキュメントが開かれていません。”, vbCritical
Exit Sub
End If

If swModel.GetType() <> swDocDRAWING Then
MsgBox “このマクロは「図面ドキュメント」上で実行してください。”, vbExclamation
Exit Sub
End If

Set swDraw = swModel

‘ 2. 配置したい3Dモデルのパスを指定する
‘ ※実務ではファイルダイアログ等で動的に取得しますが、今回は分かりやすく固定パスの例とします
‘ ご自身の環境にある適当な部品・アセンブリのフルパスに書き換えてください。
modelPath = “C:\MyFolder\SamplePart.sldprt”

‘ ファイルが存在するかどうかの簡易チェック
If Dir(modelPath) = “” Then
MsgBox “指定されたモデルが見つかりません:” & vbCrLf & modelPath, vbCritical
Exit Sub
End If

‘ 3. 図面シートのビュー原点を設定(単位はメートル! 0.2m = 200mm)
‘ SolidWorksのAPIは基本的に「メートル法」で位置を計算します。
Dim posX As Double, posY As Double
Dim viewDelta As Double

‘ 基準となる正面図の位置(シートの左下あたり)
posX = 0.15 ‘ 左から150mm
posY = 0.15 ‘ 下から150mm
viewDelta = 0.12 ‘ ビュー間のオフセット(120mm間隔)

‘ 4. 各ビューの配置実行
‘ —————————————————-
‘ ① 正面図 (Front)
‘ —————————————————-
Dim swFrontView As SldWorks.View
Set swFrontView = swDraw.CreateDrawViewFromModelView3(modelPath, “Front”, posX, posY, 0)

If swFrontView Is Nothing Then
MsgBox “正面図の配置に失敗しました。”, vbCritical
Exit Sub
End If

‘ —————————————————-
‘ ② 平面図 (Top) – 正面図の真上に配置
‘ —————————————————-
Dim swTopView As SldWorks.View
Set swTopView = swDraw.CreateDrawViewFromModelView3(modelPath, “Top”, posX, posY + viewDelta, 0)

‘ —————————————————-
‘ ③ 側面図 (Right) – 正面図の右側に配置
‘ —————————————————-
Dim swRightView As SldWorks.View
Set swRightView = swDraw.CreateDrawViewFromModelView3(modelPath, “Right”, posX + viewDelta, posY, 0)

‘ 5. ビューの更新(再描画)
swModel.EditRebuild3

MsgBox “三面図の自動配置が完了しました!”, vbInformation, “自動化成功”

End Sub

—

4. コードの重要ポイントと「初心者が陥りやすい罠」

ここで、プロの視点からこのコードのキモとなるポイントと、陥りがちな罠を解説します。

罠その1:座標の単位は「メートル」である

APIに渡す座標(`posX`, `posY` 等)は、私たちが普段図面で意識する「ミリメートル(mm)」ではありません。「メートル(m)」です。
そのため、`0.15` と指定すると、それは `150mm` を意味します。ここを `150` と書いてしまうと、図面からはるか彼方の宇宙空間にビューが配置され、「何も表示されない!バグだ!」とパニックになる原因になります。必ずメートル換算を意識しましょう。

罠その2:アクティブドキュメントの型チェック(Type Guard)

コード内にあるこの記述:

If swModel.GetType() <> swDocDRAWING Then …

これは非常に重要です。もしユーザーが部品(Part)を開いた状態でこのマクロを実行した場合、`DrawingDoc`へのキャストや専用メソッドの呼び出しでランタイムエラー(オブジェクトが必要です、等)が発生します。
「今、自分がどの種類のドキュメントにいるか」をコード自身に判断させるのが、堅牢なマクロを作る第一歩です。

—

5. さらなる高みへ:実務での応用アイデア

この基本コードをマスターすれば、あなたの業務自動化の幅は一気に広がります。実務では次のような発展形にアレンジしてみましょう。

  • ファイル選択ダイアログの導入:

`modelPath` を固定文字列にするのではなく、`FileOpenDialog` を使ってユーザーに選ばせる。

  • アクティブなモデルの自動取得:

もし図面の中にすでに「最初のモデル」がアタッチされているなら、図面からモデルのファイルパスを動的に抽出して三面図を展開する。

SolidWorks VBAは、最初は難しく感じるかもしれませんが、APIのルール(言語)さえ知ってしまえば、あなたの忠実で疲れを知らない最高のパートナーになります。

ここをクリアしたあなたなら、もう「マクロの記録」に頼るだけの初心者ではありません。ぜひ今日の業務から試してみてくださいね。それでは、次回の極限知見でお会いしましょう!

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