Assign a Linetype to a Layer
 
 
 

When you are defining layers, linetypes provide another way to convey visual information. A linetype is a repeating pattern of dashes, dots, and blank spaces you can use to distinguish the purpose of one line from another.

The linetype name and definition describe the particular dash-dot sequence, the relative lengths of dashes and blank spaces, and the characteristics of any included text or shapes.

Use the Linetype property to assign a linetype to a layer. This property takes the name of the linetype as input.

NoteBefore a linetype can be assigned to a layer it must be defined in the drawing first. For information on working with linetypes, see Work with Linetypes.

Set the linetype for a layer

The following example creates a new layer named "ABC" and assigns it the "Center" linetype.

VB.NET

Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.DatabaseServices
 
<CommandMethod("SetLayerLinetype")> _
Public Sub SetLayerLinetype()
  '' 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"
      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
          acLyrTbl.UpgradeOpen()
 
          '' Append the new layer to the Layer table and the transaction
          acLyrTbl.Add(acLyrTblRec)
          acTrans.AddNewlyCreatedDBObject(acLyrTblRec, True)
      Else
          acLyrTblRec = acTrans.GetObject(acLyrTbl(sLayerName), _
                                          OpenMode.ForRead)
      End If
 
      '' Open the Layer table for read
      Dim acLinTbl As LinetypeTable
      acLinTbl = acTrans.GetObject(acCurDb.LinetypeTableId, _
                                   OpenMode.ForRead)
 
      If acLinTbl.Has("Center") = True Then
          '' Upgrade the Layer Table Record for write
          acLyrTblRec.UpgradeOpen()
 
          '' Set the linetype for the layer
          acLyrTblRec.LinetypeObjectId = acLinTbl("Center")
      End If
 
      '' 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;
 
[CommandMethod("SetLayerLinetype")]
public static void SetLayerLinetype()
{
  // 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";
      LayerTableRecord acLyrTblRec;
 
      if (acLyrTbl.Has(sLayerName) == false)
      {
          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);
      }
      else
      {
          acLyrTblRec = acTrans.GetObject(acLyrTbl[sLayerName],
                                          OpenMode.ForRead) as LayerTableRecord;
      }
 
      // Open the Layer table for read
      LinetypeTable acLinTbl;
      acLinTbl = acTrans.GetObject(acCurDb.LinetypeTableId,
                                   OpenMode.ForRead) as LinetypeTable;
 
      if (acLinTbl.Has("Center") == true)
      {
          // Upgrade the Layer Table Record for write
          acLyrTblRec.UpgradeOpen();
 
          // Set the linetype for the layer
          acLyrTblRec.LinetypeObjectId = acLinTbl["Center"];
      }
 
      // Save the changes and dispose of the transaction
      acTrans.Commit();
  }
}
VBA/ActiveX Code Reference