Create, Modify, and Copy Dimension Styles
 
 
 

A new dimension style is created by creating an instance of a DimStyleTableRecord object and then adding it to the DimStyleTable with the Add method. Before the dimension style is added to the table, set the name of the new style with the Name property.

You can also copy an existing style or a style with overrides. Use the CopyFrom method to copy a dimension style from a source object to a dimension style. The source object can be another DimStyleTableRecord object, a Dimension, Tolerance, or Leader object, or even a Database object. If you copy the style settings from another dimension style, the current style is duplicated exactly. If you copy the style settings from aDimension, Tolerance, or Leader object, the current settings, including any object overrides, are copied to the style. If you copy the current style of a Database object, the dimension style plus any drawing overrides are copied to the new style.

Copy dimension styles and overrides

This example creates three new dimension styles and copies the current settings from the current Database, a given dimension style, and a given dimension to each new dimension style respectively. By following the appropriate setup before running this example, you will find that different dimension styles have been created.

  1. Create a new drawing and make it the active drawing.
  2. Create a linear dimension in the new drawing. This dimension should be the only object in the drawing.
  3. Change the color of the dimension line to yellow.
  4. Change the DIMCLRD system variable to 5 (blue).
  5. Run the following example:

VB.NET

Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.Geometry
 
<CommandMethod("CopyDimStyles")> _
Public Sub CopyDimStyles()
  '' Get the current 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 Block table for read
      Dim acBlkTbl As BlockTable
      acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, _
                                   OpenMode.ForRead)
 
      '' Open the Block table record Model space for read
      Dim acBlkTblRec As BlockTableRecord
      acBlkTblRec = acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), _
                                      OpenMode.ForRead)
 
      Dim acObj As Object = Nothing
      For Each acObjId As ObjectId In acBlkTblRec
          '' Get the first object in Model space
          acObj = acTrans.GetObject(acObjId, _
                                    OpenMode.ForRead)
 
          Exit For
      Next
 
      '' Open the DimStyle table for read
      Dim acDimStyleTbl As DimStyleTable
      acDimStyleTbl = acTrans.GetObject(acCurDb.DimStyleTableId, _
                                        OpenMode.ForRead)
 
      Dim strDimStyleNames(2) As String
      strDimStyleNames(0) = "Style 1 copied from a dim"
      strDimStyleNames(1) = "Style 2 copied from Style 1"
      strDimStyleNames(2) = "Style 3 copied from the running drawing values"
 
      Dim nCnt As Integer = 0
 
      '' Keep a reference of the first dimension style for later
      Dim acDimStyleTblRec1 As DimStyleTableRecord = Nothing
 
      '' Iterate the array of dimension style names
      For Each strDimStyleName As String In strDimStyleNames
          Dim acDimStyleTblRec As DimStyleTableRecord
          Dim acDimStyleTblRecCopy As DimStyleTableRecord = Nothing
 
          '' Check to see if the dimension style exists or not
          If acDimStyleTbl.Has(strDimStyleName) = False Then
              If acDimStyleTbl.IsWriteEnabled = False ThenacDimStyleTbl.UpgradeOpen()
 
              acDimStyleTblRec = New DimStyleTableRecord()
              acDimStyleTblRec.Name = strDimStyleName
 
              acDimStyleTbl.Add(acDimStyleTblRec)
              acTrans.AddNewlyCreatedDBObject(acDimStyleTblRec, True)
          Else
              acDimStyleTblRec = acTrans.GetObject(acDimStyleTbl(strDimStyleName), _
                                                   OpenMode.ForWrite)
          End If
 
          '' Determine how the new dimension style is populated
          Select Case nCnt
              '' Assign the values of the dimension object to the new dimension style
              Case 0
                  Try
                      '' Cast the object to a Dimension
                      Dim acDim As RotatedDimension = acObj
 
                      '' Copy the dimension style data from the dimension and
                      '' set the name of the dimension style as the copied settings
                      '' are unnamed.
                      acDimStyleTblRecCopy = acDim.GetDimstyleData()
                      acDimStyleTblRec1 = acDimStyleTblRec
                  Catch
                      '' Object was not a dimension
                  End Try
 
                  '' Assign the values of the dimension style to the new dimension style
              Case 1
                  acDimStyleTblRecCopy = acDimStyleTblRec1
 
                  '' Assign the values of the current drawing to the dimension style
              Case 2
                  acDimStyleTblRecCopy = acCurDb.GetDimstyleData()
          End Select
 
          '' Copy the dimension settings and set the name of the dimension style
          acDimStyleTblRec.CopyFrom(acDimStyleTblRecCopy)
          acDimStyleTblRec.Name = strDimStyleName
 
          '' Dispose of the copied dimension style
          acDimStyleTblRecCopy.Dispose()
 
          nCnt = nCnt + 1
      Next
 
      '' Commit 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;
 
[CommandMethod("CopyDimStyles")]
public static void CopyDimStyles()
{
  // Get the current database
  Document acDoc = Application.DocumentManager.MdiActiveDocument;
  Database acCurDb = acDoc.Database;
 
  // Start a transaction
  using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
  {
      // 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 read
      BlockTableRecord acBlkTblRec;
      acBlkTblRec = acTrans.GetObject(acBlkTbl[BlockTableRecord.ModelSpace],
                                      OpenMode.ForRead) as BlockTableRecord;
 
      object acObj = null;
      foreach (ObjectId acObjId in acBlkTblRec)
      {
          // Get the first object in Model space
          acObj = acTrans.GetObject(acObjId,
                                    OpenMode.ForRead);
 
          break;
      }
 
      // Open the DimStyle table for read
      DimStyleTable acDimStyleTbl;
      acDimStyleTbl = acTrans.GetObject(acCurDb.DimStyleTableId,
                                        OpenMode.ForRead) as DimStyleTable;
 
      string[] strDimStyleNames = new string[3];
      strDimStyleNames[0] = "Style 1 copied from a dim";
      strDimStyleNames[1] = "Style 2 copied from Style 1";
      strDimStyleNames[2] = "Style 3 copied from the running drawing values";
 
      int nCnt = 0;
 
      // Keep a reference of the first dimension style for later
      DimStyleTableRecord acDimStyleTblRec1 = null;
 
      // Iterate the array of dimension style names
      foreach (string strDimStyleName in strDimStyleNames)
      {
          DimStyleTableRecord acDimStyleTblRec;
          DimStyleTableRecord acDimStyleTblRecCopy = null;
 
          // Check to see if the dimension style exists or not
          if (acDimStyleTbl.Has(strDimStyleName) == false)
          {
              if (acDimStyleTbl.IsWriteEnabled == false) acDimStyleTbl.UpgradeOpen();
 
              acDimStyleTblRec = new DimStyleTableRecord();
              acDimStyleTblRec.Name = strDimStyleName;
 
              acDimStyleTbl.Add(acDimStyleTblRec);
              acTrans.AddNewlyCreatedDBObject(acDimStyleTblRec, true);
          }
          else
          {
              acDimStyleTblRec = acTrans.GetObject(acDimStyleTbl[strDimStyleName],
                                                   OpenMode.ForWrite) as DimStyleTableRecord;
          }
 
          // Determine how the new dimension style is populated
          switch ((int)nCnt)
          {
              // Assign the values of the dimension object to the new dimension style
              case 0:
                  try
                  {
                      // Cast the object to a Dimension
                      Dimension acDim = acObj as Dimension;
 
                      // Copy the dimension style data from the dimension and
                      // set the name of the dimension style as the copied settings
                      // are unnamed.
                      acDimStyleTblRecCopy = acDim.GetDimstyleData();
                      acDimStyleTblRec1 = acDimStyleTblRec;
                  }
                  catch
                  {
                      // Object was not a dimension
                  }
 
                  break;
              // Assign the values of the dimension style to the new dimension style
              case 1:
                  acDimStyleTblRecCopy = acDimStyleTblRec1;
                  break;
              // Assign the values of the current drawing to the dimension style
              case 2:
                  acDimStyleTblRecCopy = acCurDb.GetDimstyleData();
                  break;
          }
 
          // Copy the dimension settings and set the name of the dimension style
          acDimStyleTblRec.CopyFrom(acDimStyleTblRecCopy);
          acDimStyleTblRec.Name = strDimStyleName;
 
          // Dispose of the copied dimension style
          acDimStyleTblRecCopy.Dispose();
 
          nCnt = nCnt + 1;
      }
 
      // Commit the changes and dispose of the transaction
      acTrans.Commit();
  }
}
VBA/ActiveX Code Reference

Open the Dimension Style Manager using the DIMSTYLE command. You should now have three dimension styles listed. Style 1 should have a yellow dimension line. Style 2 should be the same as Style 1. Style 3 should have a blue dimension line.