各画層には独自の色を割り当てることができます。画層の色は 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