1.2、Create and Name Layers 创建并命名图层
You can create new layers and assign color and linetype properties to those layers. Each individual layer is part of the Layers table. Use the Add function to create a new layer and add it to the Layers table.
我们可以创建新图层,并给这些新图层的颜色和线型属性赋值。每个图层均为Layers表的一部分。使用Add方法创建新图层并将其添加到Layers表中。
You can assign a name to a layer when it is created. To change the name of a layer after it has been created,use the Name property. Layer names can include up to 255 characters and contain letters,digits,and the special characters dollar sign ($),hyphen (-),and underscore (_).
创建图层时可以为其命名,修改图层名称用Name属性。图层名称可以含最多255个字符,包括字母、数字以及特殊字符美元符号($)、连字符(-)、下划线(_)等。
For more information about creating layers,see “Create and Name Layers” in the AutoCAD User's Guide.
创建图层的更多内容,见AutoCAD用户指南中的“创建并命名图层”。
Create a new layer,assign it the color red,and add an object to the layer 创建一个新图层,设为红色,并添加到图层表里
The following code creates a new layer and circle object. The new layer is assigned the color red. The circle is assigned to the layer,and the color of the circle changes accordingly.
下面的代码创建一个新图层和一个圆对象,新图层的颜色设为红色。将圆指定到新图层时,圆的颜色会相应地变成红色。
VB.NET
Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.Geometry
Imports Autodesk.AutoCAD.Colors
<CommandMethod("CreateAndAssignALayer")> _
Public Sub CreateAndAssignALayer()
'' 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 = "Center"
If acLyrTbl.Has(sLayerName) = False Then
Dim acLyrTblRec As LayerTableRecord = New LayerTableRecord()
'' Assign the layer the ACI color 1 and a name
acLyrTblRec.Color = Color.FromColorIndex(ColorMethod.ByAci,1)
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)
End If
'' Open the Block table for read
Dim acBlkTbl As BlockTable
acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,_
OpenMode.ForRead)
'' Open the Block table record Model space for write
Dim acBlkTblRec As BlockTableRecord
acBlkTblRec = acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace),_
OpenMode.ForWrite)
'' Create a circle object
Dim acCirc As Circle = New Circle()
acCirc.Center = New Point3d(2,2,0)
acCirc.Radius = 1
acCirc.Layer = sLayerName
acBlkTblRec.AppendEntity(acCirc)
acTrans.AddNewlyCreatedDBObject(acCirc,True)
'' 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.Geometry;
using Autodesk.AutoCAD.Colors;
[CommandMethod("CreateAndAssignALayer")]
public static void CreateAndAssignALayer()
{
// 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 = "Center";
if (acLyrTbl.Has(sLayerName) == false)
{
LayerTableRecord acLyrTblRec = new LayerTableRecord();
// Assign the layer the AutoCADColorIndex(ACI) color 1 and a name赋予图层颜色和名称(颜色索引值1表示红色)
acLyrTblRec.Color = Color.FromColorIndex(ColorMethod.ByAci,1);
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);
}
// Open the Block table for read以读打开块表
BlockTable acBlkTbl;
acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId,
OpenMode.ForRead) as BlockTable;
// Open the Block table record Model space for write以写打开块表记录模型空间
BlockTableRecord acBlkTblRec;
acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],
OpenMode.ForWrite) as BlockTableRecord;
// Create a circle object新建一个圆
Circle acCirc = new Circle();
acCirc.Center = new Point3d(2,0);
acCirc.Radius = 1;
// 设置圆所归属的图层
acCirc.Layer = sLayerName;
acBlkTblRec.AppendEntity(acCirc);
acTrans.AddNewlyCreatedDBObject(acCirc,true);
// Save the changes and dispose of the transaction保存修改并关闭事务
acTrans.Commit();
}
}
VBA/ActiveX Code Reference
Sub CreateAssignALayer()
' Create a new layer and assign it the color red
Dim layerObj As AcadLayer
Set layerObj = ThisDrawing.Layers.Add("Center")
layerObj.color = acRed
' Create a circle
Dim circleObj As AcadCircle
Dim center(0 To 2) As Double
Dim radius As Double
center(0) = 2: center(1) = 2: center(2) = 0
radius = 1
Set circleObj = ThisDrawing.ModelSpace. _
AddCircle(center,radius)
' Place the circle on the Center layer
circleObj.Layer = "Center"
circleObj.Update
End Sub