各画層には独自の色を割り当てることができます。画層の色は Colors 名前空間の一部である Color オブジェクトで指定します。このオブジェクトは、RGB 値、ACI 番号(1 から 255 の整数)、またはカラー ブックの色を保持することができます。
色を画層に割り当てるには、Color プロパティを使用します。
ACI の色 0 または ByBlock を使用すると、AutoCAD は新しいオブジェクトを作成する際、ブロックにグループ化されるまで既定の色(設定に応じて白また黒)を使用します。ブロックを挿入すると、ブロック内のオブジェクトは現在のプロパティ設定を継承します。
ACI の色 256 または ByLayer を使用する場合、新しいオブジェクトは作成される下の画層の色を継承します。
次の例では、3 つの新しい画層を作成し、3 つの色のメソッドを使用してそれぞれに異なる色を割り当てます。
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
If acLyrTbl.Has(sLayerName) = False Then
Using acLyrTblRec As LayerTableRecord = 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)
'' Set the color of the layer
acLyrTblRec.Color = acColors(nCnt)
End Using
Else
'' Open the layer if it already exists for write
Dim acLyrTblRec As LayerTableRecord = acTrans.GetObject(acLyrTbl(sLayerName), _
OpenMode.ForWrite)
'' Set the color of the layer
acLyrTblRec.Color = acColors(nCnt)
End If
nCnt = nCnt + 1
Next
'' Save the changes and dispose of the transaction
acTrans.Commit()
End Using
End Sub
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)
{
if (acLyrTbl.Has(sLayerName) == false)
{
using (LayerTableRecord 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);
// Set the color of the layer
acLyrTblRec.Color = acColors[nCnt];
}
}
else
{
// Open the layer if it already exists for write
LayerTableRecord 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();
}
}
Sub SetLayerColor()
Dim layerObj As AcadLayer
' Define an array of layer names
Dim sLayerNames(2) As String
sLayerNames(0) = "ACIRed"
sLayerNames(1) = "TrueBlue"
sLayerNames(2) = "ColorBookYelow"
' Define an array of colors
Dim colorObj(2) As New AcadAcCmColor
colorObj(0).ColorMethod = acColorMethodByACI
colorObj(0).ColorIndex = acRed
Call colorObj(1).SetRGB(23, 54, 232)
Call colorObj(2).SetColorBookColor("PANTONE(R) pastel coated", _
"PANTONE Yellow 0131 C")
Dim nCnt As Integer
' Step through each layer name and create a new layer
For Each sLayerName In sLayerNames
Set layerObj = ThisDrawing.Layers.Add(sLayerName)
layerObj.TrueColor = colorObj(nCnt)
nCnt = nCnt + 1
Next
End Sub