こんにちは!AutoCAD VBAの世界へようこそ。
マクロの記録から一歩踏み出し、「自分の手で図面を自在にコントロールしたい」と願うあなたにとって、今日は記念すべき一日になりますよ。
ここをクリアすれば、AutoCAD VBAのオブジェクトモデルの基本はバッチリです!自信を持って進んでいきましょう。
今回は、図面の見た目を決定づける「色(カラー)」の指定方法にスポットを当てます。
AutoCADの歴史ある「カラーインデックス(ACI)」と、現代的な「TrueColor(RGB指定)」の決定的な違いを理解し、コードからスマートに操る極意を授けましょう。
—
1. AutoCADにおける「色」の二大巨頭を知る
AutoCADで図形(エンティティ)や画層(レイヤー)に色を付けるとき、私たちは主に次の2つの方法を使います。
1. カラーインデックス (ACI: AutoCAD Color Index)
- 1から255までの番号で色を管理する、昔ながらの方法です。(例: 1=赤, 2=黄, 3=緑…)
- 処理が軽いが、表現力は255色に限定されます。
2. TrueColor (RGB指定)
- 赤(R)、緑(G)、青(B)をそれぞれ0〜255の数値で指定し、1,600万色以上の無限の色彩を表現する方法です。
- コーポレートカラーや、写真のようなグラデーションを再現したい現代の図面には欠かせません。
VBAで前者のACIを扱うのは簡単ですが、後者のTrueColorを扱うには、専用のオブジェクト「`AcadAcCmColor`」を召喚する必要があるのです。ここが初学者が最初に躓きやすいポイントですが、今日の記事を読めばもう怖くありません。
—
2. 伝統の技:カラーインデックス(ACI)の基本
まずは基本の「き」、カラーインデックスからおさらいしましょう。
オブジェクトの `.Color` プロパティに、`acRed` などの定数や、直接 `1` などの数値を代入するだけなので非常にシンプルです。
【サンプルコード1】オブジェクトにカラーインデックスを設定する
Sub SetColorIndexSample()
Dim acadDoc As AcadDocument
Set acadDoc = ThisDrawing.Application.ActiveDocument
Dim acadLine As AcadLine
Dim startPoint(0 To 2) As Double
Dim endPoint(0 To 2) As Double
‘ 線の始点と終点を定義
startPoint(0) = 0#: startPoint(1) = 0#: startPoint(2) = 0#
endPoint(0) = 100#: endPoint(1) = 100#: endPoint(2) = 0#
‘ モデル空間に線を作成
Set acadLine = acadDoc.ModelSpace.AddLine(startPoint, endPoint)
‘ 【ここがポイント】カラーインデックスで「赤 (ACAD_RED = 1)」を指定
acadLine.Color = acRed
‘ 画面を更新
acadDoc.Regen acAllViewports
MsgBox “カラーインデックスで赤色の線を引きました!”, vbInformation
End Sub
どうですか?これならマクロの延長線上で理解しやすいですよね。
—
3. 本丸登場!TrueColorを操る `AcadAcCmColor` オブジェクト
では、本題のTrueColorです。
「微妙なパステルカラーを使いたい」「指定のRGB値(例: R=255, G=128, B=0 のオレンジ色)で描画したい」という場合は、インデックス番号では太刀打ちできません。
ここで登場するのが、`AcadAcCmColor`(AutoCAD Color Model Color)オブジェクトです。
このオブジェクトを作り、RGB値をセットしてから、図形や画層に「バトンタッチ」するという手順を踏みます。
【サンプルコード2】TrueColorを使って自由な色で線を描く
Sub SetTrueColorSample()
Dim acadDoc As AcadDocument
Set acadDoc = ThisDrawing.Application.ActiveDocument
Dim acadLine As AcadLine
Dim startPoint(0 To 2) As Double
Dim endPoint(0 To 2) As Double
startPoint(0) = 0#: startPoint(1) = 50#: startPoint(2) = 0#
endPoint(0) = 100#: endPoint(1) = 150#: endPoint(2) = 0#
Set acadLine = acadDoc.ModelSpace.AddLine(startPoint, endPoint)
‘ 1. AcadAcCmColor オブジェクトをメモリ上に生成する
Dim trueColorObj As AcadAcCmColor
Set trueColorObj = New AcadAcCmColor
‘ 2. RGB値をセットする(例:鮮やかなオレンジ色 R:255, G:128, B:0)
trueColorObj.SetRGB 255, 128, 0
‘ 3. オブジェクトの .TrueColor プロパティに丸ごと渡す
acadLine.TrueColor = trueColorObj
acadDoc.Regen acAllViewports
MsgBox “TrueColor (RGB:255, 128, 0) で線を引きました!”, vbInformation
End Sub
コードの心臓部を解説!
- `Set trueColorObj = New AcadAcCmColor`
これがメモリ確保(インスタンス化)の構文です。AutoCAD VBAでは、こうした専用の補助オブジェクトを `New` キーワードで呼び出すケースが多々あります。
- `trueColorObj.SetRGB 255, 128, 0`
赤・緑・青の成分をそれぞれ 0〜255 の整数でぶつけます。これで色の調合は完了です。
- `acadLine.TrueColor = trueColorObj`
最後に、図形側のプロパティにカラーオブジェクトそのものを代入します。ポインタの概念に近いですが、ここでは「色を包んだカプセルを渡している」イメージを持てばOKです。
—
4. 応用編:画層(Layer)にTrueColorを適用する
実務では、個々のオブジェクトに色をハードコーディングするよりも、「画層(レイヤー)」単位でTrueColorをコントロールすることの方が圧倒的に多いはずです。
画層の色変更も、まったく同じ `AcadAcCmColor` オブジェクトを使って行うことができます。
【サンプルコード3】新規画層を作成し、TrueColorを設定する
Sub CreateLayerWithTrueColor()
Dim acadDoc As AcadDocument
Set acadDoc = ThisDrawing.Application.ActiveDocument
Dim targetLayer As AcadLayer
Dim layerName As String
layerName = “【VBA作成】特別画層”
‘ エラーハンドリングを簡略化するため、存在チェックをしつつ画層を作成
On Error Resume Next
Set targetLayer = acadDoc.Layers.Add(layerName)
On Error GoTo 0
If targetLayer Is Nothing Then
Set targetLayer = acadDoc.Layers.Item(layerName)
End If
‘ TrueColorオブジェクトを準備
Dim customColor As AcadAcCmColor
Set customColor = New AcadAcCmColor
‘ 落ち着いたブルー(R:30, G:144, B:255 / ドジャーブルー風)を指定
customColor.SetRGB 30, 144, 255
‘ 画層の TrueColor に設定
targetLayer.TrueColor = customColor
MsgBox “画層「” & layerName & “」にTrueColorを設定しました!”, vbInformation
End Sub
—
5. 現場でありがちな「落とし穴」とエラー対策
最後に、プログラミング初心者が陥りがちな罠と、その回避策をシェアしておきます。
⚠️ 注意点1: `New` するのを忘れて「オブジェクト変数が設定されていません」エラー
`Dim trueColorObj As AcadAcCmColor` と書いただけでは、ただの「入れ物の宣言」に過ぎません。中身(実体)がない状態で `.SetRGB` を呼び出すと、有名な実行エラー 91が発生します。
必ず `Set trueColorObj = New AcadAcCmColor` を忘れないようにしましょう。
⚠️ 注意点2: RGBの値は 0 〜 255 の範囲内か?
当たり前ですが、`-10` や `300` などの範囲外の値を `SetRGB` に渡すと、AutoCADが機嫌を損ねてエラーを吐きます。ユーザー入力値などを使う場合は、必ず `If` 文などで `0 <= val <= 255` のバリデーション(入力値検証)を挟むのがプロのエンジニアの作法です。 ---
おわりに
お疲れ様でした!
今回は「カラーインデックス」と、無限の彩度を誇る「TrueColor (`AcadAcCmColor`)」の使い分けについて徹底解説しました。
- 255色までの定番を手軽に扱いたいなら `.Color = acRed` などのインデックス。
- 企業規定の色や細やかなグラデーション表現にこだわりたいなら `AcadAcCmColor` を `New` して `.SetRGB`。
この使い分けが頭に入っていれば、あなたのAutoCAD VBAスキルは確実に次のステージへと進んでいます。
図面の自動化・ビジュアルの制御がもっと楽しくなるはずです。
それでは、次回の極限の知見もお楽しみに!快適なVBAライフを!
