Assign Color to a Layer
 
 
 

Each layer can have its own color assigned to it. Colors for a layer are identified by the Color object which is part of the Colors namespace. This object can hold an RGB value, ACI number (an integer from 1 to 255), or a color book color.

To assign a color to a layer, use the Color property.

NoteObjects such as lines and circles support two different properties to control their current color. The Color property is used to assign an RGB value, ACI number, or a color book color, while the ColorIndex property only supports ACI numbers.

If you use the ACI color 0 or ByBlock, AutoCAD draws new objects in the default color (white or black, depending on your configuration) until they are grouped into a block. When the block is inserted, the objects in the block inherit the current property setting.

If you use the ACI color 256 or ByLayer, new objects inherit the color of the layer upon which they are drawn.

Set the color of a layer

The following example creates three new layers and each is assigned a different color using each of the three color methods.

VB.NET

Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.Colors
 
<CommandMethod("SetLayerColor")> _
Public Sub SetLayerColor()
  '' Get the current document and database
  Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
  Dim acCurDb As Database = acDoc.Database
 
  '' Start a transaction
  Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()
 
      '' Open the Layer table for read
      Dim acLyrTbl As LayerTable
      acLyrTbl = acTrans.GetObject(acCurDb.LayerTableId, _
                                   OpenMode.ForRead)
 
      '' Define an array of layer names
      Dim sLayerNames(2) As String
      sLayerNames(0) = "ACIRed"
      sLayerNames(1) = "TrueBlue"
      sLayerNames(2) = "ColorBookYellow"
 
      '' Define an array of colors for the layers
      Dim acColors(2) As Color
      acColors(0) = Color.FromColorIndex(ColorMethod.ByAci, 1)
      acColors(1) = Color.FromRgb(23, 54, 232)
      acColors(2) = Color.FromNames("PANTONE Yellow 0131 C", _
                                    "PANTONE(R) pastel coated")
 
      Dim nCnt As Integer = 0
 
      '' Add or change each layer in the drawing
      For Each sLayerName As String In sLayerNames
          Dim acLyrTblRec As LayerTableRecord
 
          If acLyrTbl.Has(sLayerName) = False Then
              acLyrTblRec = New LayerTableRecord()
 
              '' Assign the layer a name
              acLyrTblRec.Name = sLayerName
 
              '' Upgrade the Layer table for write
              If acLyrTbl.IsWriteEnabled = False Then acLyrTbl.UpgradeOpen()
 
              '' Append the new layer to the Layer table and the transaction
              acLyrTbl.Add(acLyrTblRec)
              acTrans.AddNewlyCreatedDBObject(acLyrTblRec, True)
          Else
              '' Open the layer if it already exists for write
              acLyrTblRec = acTrans.GetObject(acLyrTbl(sLayerName), _
                                              OpenMode.ForWrite)
          End If
 
          '' Set the color of the layer
          acLyrTblRec.Color = acColors(nCnt)
 
          nCnt = nCnt + 1
      Next
 
      '' Save the changes and dispose of the transaction
      acTrans.Commit()
  End Using
End Sub

C#

using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Colors;
 
[CommandMethod("SetLayerColor")]
public static void SetLayerColor()
{
  // Get the current document and database
  Document acDoc = Application.DocumentManager.MdiActiveDocument;
  Database acCurDb = acDoc.Database;
 
  // Start a transaction
  using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
  {
      // Open the Layer table for read
      LayerTable acLyrTbl;
      acLyrTbl = acTrans.GetObject(acCurDb.LayerTableId,
                                   OpenMode.ForRead) as LayerTable;
 
      // Define an array of layer names
      string[] sLayerNames = new string[3];
      sLayerNames[0] = "ACIRed";
      sLayerNames[1] = "TrueBlue";
      sLayerNames[2] = "ColorBookYellow";
 
      // Define an array of colors for the layers
      Color[] acColors = new Color[3];
      acColors[0] = Color.FromColorIndex(ColorMethod.ByAci, 1);
      acColors[1] = Color.FromRgb(23, 54, 232);
      acColors[2] = Color.FromNames("PANTONE Yellow 0131 C",
                                    "PANTONE(R) pastel coated");
 
      int nCnt = 0;
 
      // Add or change each layer in the drawing
      foreach (string sLayerName in sLayerNames)
      {
          LayerTableRecord acLyrTblRec;
 
          if (acLyrTbl.Has(sLayerName) == false)
          {
              acLyrTblRec = new LayerTableRecord();
 
              // Assign the layer a name
              acLyrTblRec.Name = sLayerName;
 
              // Upgrade the Layer table for write
              if (acLyrTbl.IsWriteEnabled == false) acLyrTbl.UpgradeOpen();
 
              // Append the new layer to the Layer table and the transaction
              acLyrTbl.Add(acLyrTblRec);
              acTrans.AddNewlyCreatedDBObject(acLyrTblRec, true);
          }
          else
          {
              // Open the layer if it already exists for write
              acLyrTblRec = acTrans.GetObject(acLyrTbl[sLayerName],
                                              OpenMode.ForWrite) as LayerTableRecord;
          }
 
          // Set the color of the layer
          acLyrTblRec.Color = acColors[nCnt];
 
          nCnt = nCnt + 1;
      }
 
      // Save the changes and dispose of the transaction
      acTrans.Commit();
  }
}
VBA/ActiveX Code Reference