【入門編】【初心者向け】AutoCAD VBAで最初の自動化!線種・色・画層を自動設定する基本 – AutoCAD VBA解析バイブル

スポンサーリンク

こんにちは!AutoCADの自動化の世界へようこそ。
マクロの記録機能の限界にぶつかり、「もっとスマートに、確実図面を描きたい」と一歩を踏み出したあなたへ。

実務でAutoCAD VBAを使うようになると、真っ先に直面する壁があります。それは、「図形を描くだけでなく、画層(レイヤー)、色、線種をプログラム側で完全にコントロールする」ということです。

手動で設定を変え忘れて、後から「全部ゼロ画層で描いちゃった……!」と絶望した経験はありませんか?
大丈夫。この記事を読み終える頃には、あなたの書いたVBAコードが、指定した画層や色、線種を纏った図形を寸分違わず自動生成してくれるようになります。

ここをクリアすれば、AutoCAD VBAの基本はバッチリですよ。さあ、一緒に本質をマスターしていきましょう!

1. AutoCAD VBAの基本構造:DocumentとModelSpaceを理解する

AutoCAD VBAのコードを書くとき、私たちは常に「今、どの図面の、どこに向かって描いているのか」を意識する必要があります。これをオブジェクトモデルの階層構造で捉えてみましょう。

  • `AcadApplication` : AutoCADそのもの(最上位の親)
  • `AcadDocument` : 現在開いている「図面ファイル」
  • `ModelSpace` : 図面の中にある「作図空間(モデル空間)」

何か線や円を描くときは、決まって「現在の図面のモデル空間(ModelSpace)に対して、命令を追加する」というアプローチを取ります。これが基本中の基本です。

2. 【実践】線種・色・画層を自動設定して線を描くマクロ

百聞は一見に如かず。まずは、VBAエディタを開いて実際に動くコードを見てみましょう。
以下のコードは、「特定の画層が存在しなければ作り、色と線種を設定した上で、そこに線を1本引く」という実務に直結する一連の流れを自動化したものです。

Sub DrawLineWithSettings()
Dim acadDoc As AcadDocument
Dim lineObj As AcadLine
Dim startPoint(0 to 2) As Double
Dim endPoint(0 to 2) As Double

Dim targetLayer As AcadLayer
Dim targetColor As AcadAcCmColor

‘ 1. 現在アクティブな図面を取得
Set acadDoc = ThisDrawing

‘ ——————————–指南:画層(レイヤー)の準備 ——————————–
‘ すでに同名の画層があればそれを取得し、なければ新しく作成する
On Error Resume Next
Set targetLayer = acadDoc.Layers.Add(“MY_AUTOMATION_LAYER”)
On Error GoTo 0 ‘ エラートラップを解除

‘ 画層の色を「赤(ColorIndex: 1)」に設定
targetLayer.Color = acRed

‘ 画層の線種をロードして設定(例として点線 “HIDDEN” を使用)
‘ ※事前に図面にその線種がロードされている必要があります
targetLayer.Linetype = “HIDDEN”

‘ ——————————–指南:図形の描画座標の指定 ——————————–
‘ 始点 (X=0, Y=0, Z=0)
startPoint(0) = 0#: startPoint(1) = 0#: startPoint(2) = 0#
‘ 終点 (X=100, Y=50, Z=0)
endPoint(0) = 100#: endPoint(1) = 50#: endPoint(2) = 0#

‘ モデル空間に線を作成
Set lineObj = acadDoc.ModelSpace.AddLine(startPoint, endPoint)

‘ ——————————–指南:図形自体のプロパティ設定 ——————————–
‘ 図形を先ほど作成した画層に所属させる
lineObj.Layer = “MY_AUTOMATION_LAYER”

‘ 個別に色や線種を上書きしたい場合はここで指定可能(BYLAYERにするなら設定不要)
‘ lineObj.Color = acCyan

‘ 画面を更新して変更を反映
acadDoc.Regen acAllViewports

MsgBox “設定完了!自動描画に成功しました。”, vbInformation, “AutoCAD VBA”
End Sub

3. コードの核心を分解解説!

初心者のうちにつまずきやすいポイントを3つに絞って解説します。ここを押さえると、応用力がグッと跳ね上がります。

① 画層の「存在チェックと作成」のテクニック

実務では、「すでに存在する画層を指定したらエラーになる」という問題に直面します。
上記のコードにある、

On Error Resume Next
Set targetLayer = acadDoc.Layers.Add(“MY_AUTOMATION_LAYER”)
On Error GoTo 0

という記述は、「もし画層がすでにあったらエラーが出るけれど、それを無視して既存の画層オブジェクトを変数に格納する」という、VBAにおける定番のイディオム(お決くの書き方)です。これを使うことで、何度マクロを実行してもエラーで止まらない頑健なコードになります。

② 座標は「配列(Array)」で渡す

AutoCADのAPIは、C++やCOMの血を引いているため、座標を渡すときは`Double`型の3要素配列(X, Y, Z)を使います。
`startPoint(0) = X`, `startPoint(1) = Y`, `startPoint(2) = Z` という作法は、これからどんな複雑な図形を描くときも共通のルールとなります。

③ 画層(ByLayer)と個別設定の使い分け

AutoCADの本質は「画層による一元管理」です。図形(線や円)の色や線種をコード内で個別に指定することもできますが、実務では「図形は画層(Layer)プロパティだけを指定し、色や線種は画層側に任せる(ByLayer)」のが美しい設計です。上のサンプルコードでも、線自体には色をつけず、所属する画層(`MY_AUTOMATION_LAYER`)側に赤と点線を背負わせています。

4. 初学者が必ずハマる「罠」と回避策

最後に、シニアエンジニアとして現場でよく見る「初心者がやりがちな失敗」をシェアしておきます。

  • 罠1:線種(Linetype)名のエラー
  • 原因:コード内で `”HIDDEN”` や `”CENTER”` などの線種を指定しても、その図面にその線種がロードされていない場合、容赦なく実行時エラーになります。
  • 対策:あらかじめテンプレート図面(DWT)に主要な線種を読み込ませておくか、VBA側で線種がロードされているかチェックして `acadDoc.Linetypes.Load` メソッドで読み込む処理を挟みましょう。
  • 罠2:描いたのに画面に出てこない
  • 原因:座標が現在のビューポートの外にある、または図面の再描画(Regen)が行われていない。
  • 対策:`acadDoc.Regen acAllViewports` を実行して画面を強制リフレッシュする癖をつけましょう。

まとめ

お疲れ様でした!今回は、AutoCAD VBAにおける「図面の取得」「画層の管理」「図形の属性設定」という、自動化の最もコアな部分を解説しました。

  • `ThisDrawing` で現在の図面を掴む
  • `Layers.Add` で画層を安全に管理する
  • 作成した図形の `.Layer` プロパティに画層名を割り当てる

たったこれだけの基本の組み合わせで、何千本もの線を一瞬で規程のルール通りに描き上げるシステムへと発展させることができます。

ここをクリアしたあなたなら、もうマクロの記録の呪縛からは解放されています。自信を持って、次の自動化の扉を開いてください!

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