ロックされた画層のオブジェクトは編集できませんが、画層がオンになっていてフリーズが解除されていれば、表示されています。ロックされた画層を現在の画層にすると、そこにオブジェクトを追加できます。ロックされた画層は、フリーズおよびフリーズ解除でき、画層に割り当てられた色と線種を変更することもできます。
画層をロックまたはロック解除するには、IsLocked プロパティを使用します。TRUE を入力すると、その画層はロックされます。FALSE を入力すると、その画層はロック解除されます。
次の例は、"ABC" という新しい画層を作成し、次にその画層をロックします。
Imports Autodesk.AutoCAD.Runtime Imports Autodesk.AutoCAD.ApplicationServices Imports Autodesk.AutoCAD.DatabaseServices <CommandMethod("LockLayer")> _ Public Sub LockLayer() '' 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) Dim sLayerName As String = "ABC" 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 acLyrTbl.UpgradeOpen() '' Append the new layer to the Layer table and the transaction acLyrTbl.Add(acLyrTblRec) acTrans.AddNewlyCreatedDBObject(acLyrTblRec, True) '' Lock the layer acLyrTblRec.IsLocked = True End Using Else Dim acLyrTblRec As LayerTableRecord = acTrans.GetObject(acLyrTbl(sLayerName), _ OpenMode.ForWrite) '' Lock the layer acLyrTblRec.IsLocked = True End If '' 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; [CommandMethod("LockLayer")] public static void LockLayer() { // 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; string sLayerName = "ABC"; if (acLyrTbl.Has(sLayerName) == false) { using (LayerTableRecord acLyrTblRec = new LayerTableRecord()) { // Assign the layer a name acLyrTblRec.Name = sLayerName; // Upgrade the Layer table for write acLyrTbl.UpgradeOpen(); // Append the new layer to the Layer table and the transaction acLyrTbl.Add(acLyrTblRec); acTrans.AddNewlyCreatedDBObject(acLyrTblRec, true); // Lock the layer acLyrTblRec.IsLocked = true; } } else { LayerTableRecord acLyrTblRec = acTrans.GetObject(acLyrTbl[sLayerName], OpenMode.ForWrite) as LayerTableRecord; // Lock the layer acLyrTblRec.IsLocked = true; } // Save the changes and dispose of the transaction acTrans.Commit(); } }
Sub LockLayer() ' Create a new layer called "ABC" Dim layerObj As AcadLayer Set layerObj = ThisDrawing.Layers.Add("ABC") ' Lock layer "ABC" layerObj.Lock = True End Sub