【入門編】【初心者向け】AutoCAD VBAの「カラーインデックス(ACI)」と「TrueColor」の使い分け:AcadAcCmColorオブジェクトの基本 – AutoCAD VBA解析バイブル

スポンサーリンク

こんにちは!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ライフを!

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