Create and Apply DimensionStyle Example (C#)
This example shows how to create, activate, and apply a new DimensionStyle.
This example also shows how to create arc length, jogged, rotated, radius, and
diameter Dimensions for circles, arcs, and a line.
//-------------------------------------------------------------
// Preconditions:
// 1. Create a C# Windows console project.
// 2. Copy and paste this example into the C# IDE.
// 3. Add a reference to:
// install_dir\APISDK\tlb\DraftSight.Interop.dsAutomation.dll
// 4. Add references to System and System.Windows.Forms.
// 5. Set a breakpoint at:
// dsApp.Zoom(dsZoomRange_e.dsZoomRange_Fit, null, null);
// 6. Start DraftSight and open a document.
// 7. Click Start Debugging.
//
// Postconditions:
// 1. A new DimensionStyle named SampleDimStyle is created and
// activated.
// 2. Arc length, jogged, rotated, radius, and diameter dimensions
// are created for circles, arcs, and a line, using the new
// DimensionStyle.
// 3. Examine the Output or Immediate window.
// 4. Click Continue.
// 5. Examine the drawing.
//------------------------------------------------------------
using System;
using DraftSight.Interop.dsAutomation;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using System.Diagnostics;
namespace AddArcLengthAndJoggedDimension
{
class Program
{
private static DraftSight.Interop.dsAutomation.Application dsApp;
static void Main(string[] args)
{
//Connect to DraftSight application
dsApp = (DraftSight.Interop.dsAutomation.Application)Marshal.GetActiveObject("DraftSight.Application");
dsApp.AbortRunningCommand(); // abort any command currently running in DraftSight to avoid nested commands
//Get active document
Document dsDoc = dsApp.GetActiveDocument();
if (null == dsDoc)
{
MessageBox.Show("There are no open documents in DraftSight.");
return;
}
//Get DimensionStyle manager
DimensionStyleManager dsDimStyleManager = dsDoc.GetDimensionStyleManager();
//Create DimensionStyle named SampleDimStyle
dsCreateObjectResult_e createDimStyleResult;
string dimStyleName = "SampleDimStyle";
DimensionStyle dsDimStyle;
dsDimStyleManager.CreateDimensionStyle(dimStyleName, out dsDimStyle, out createDimStyleResult);
if(dsCreateObjectResult_e.dsCreateObjectResult_Error == createDimStyleResult ||
dsCreateObjectResult_e.dsCreateObjectResult_AlreadyExists == createDimStyleResult ||
null == dsDimStyle)
{
MessageBox.Show("Failed to create " + dimStyleName + " DimensionStyle, or DimensionStyle already exists.");
return;
}
SetDimensionStyleSettings(dsDimStyle);
//Activate DimensionStyle
dsDimStyle.Activate();
//Get model space
Model dsModel = dsDoc.GetModel();
//Get sketch manager
SketchManager dsSketchMgr = dsModel.GetSketchManager();
//Draw arc length Dimension
DrawArcLengthDimension(dsSketchMgr);
//Draw jogged Dimension for circle and arc
DrawJoggedDimension(dsSketchMgr);
//Draw rotated Dimension
DrawRotatedDimension(dsSketchMgr);
//Draw radius Dimension for circle and arc
DrawRadialDimension(dsSketchMgr);
//Draw diameter Dimension for circle and arc
DrawDiameterDimension(dsSketchMgr);
//Zoom to fit
dsApp.Zoom(dsZoomRange_e.dsZoomRange_Fit, null, null);
}
private static void SetDimensionStyleSettings(DimensionStyle dsDimStyle)
{
//Get DimensionStyle arrows options
DimensionStyleArrowsOptions dsArrowsDimStyleOptions = dsDimStyle.GetDimensionStyleArrowsOptions();
//Set start and end arrow types
dsArrowsDimStyleOptions.SetStartArrow(dsDimensionArrowType_e.dsDimensionArrowType_ClosedBlank, string.Empty);
dsArrowsDimStyleOptions.SetEndArrow(dsDimensionArrowType_e.dsDimensionArrowType_ClosedBlank, string.Empty);
//Get DimensionStyle line options
DimensionStyleLineOptions dsLineDimStyleOptions = dsDimStyle.GetDimensionStyleLineOptions();
//Set Dimension line color
Color dsColor = dsLineDimStyleOptions.DimensionLineColor;
dsColor.SetNamedColor(dsNamedColor_e.dsNamedColor_Green);
dsLineDimStyleOptions.DimensionLineColor = dsColor;
//Set extension line color
dsColor.SetNamedColor(dsNamedColor_e.dsNamedColor_Yellow);
dsLineDimStyleOptions.ExtensionLineColor = dsColor;
//Get DimensionStyle radius and diameter Dimension options
DimensionStyleRadialDiameterDimensionOptions dsRadialAndDiameterDimStyleOptions = dsDimStyle.GetDimensionStyleRadialDiameterDimensionOptions();
//Set jog angle 45 degrees (in radians)
dsRadialAndDiameterDimStyleOptions.RadiusDimensionJogAngle = Math.PI / 4;
//Set center mark
double markSize = 0.05;
dsRadialAndDiameterDimStyleOptions.SetCenterMarkDisplay(dsDimensionCenterMarkDisplay_e.dsDimensionCenterMarkDisplay_AsMark, markSize);
//Get Dimension style text options
DimensionStyleTextOptions dsTextOptions = dsDimStyle.GetDimensionStyleTextOptions();
//Frame Dimension text
dsTextOptions.FrameDimensionText = true;
//Set text position
dsTextOptions.HorizontalPosition = dsDimensionTextHorizontalPosition_e.dsDimensionTextHorizontalPosition_Centered;
dsTextOptions.VerticalPosition = dsDimensionTextVerticalPosition_e.dsDimensionTextVerticalPosition_Centered;
//Set text alignment
dsTextOptions.Alignment = dsDimensionTextAlignment_e.dsDimensionTextAlignment_AlignWithDimensionLines;
}
private static void DrawArcLengthDimension(SketchManager dsSketchMgr)
{
//Add arc to drawing
double centerX = -8;
double centerY = 1;
double centerZ = 0;
double radius = 5;
double startAngle = Math.PI / 6;
double endAngle = Math.PI;
CircleArc dsArc = dsSketchMgr.InsertArc(centerX, centerY, centerZ, radius, startAngle, endAngle);
//Add arc length Dimension
double[] dimensionPosition = new double[] { -6, 6, 0 };
string dimensionTextOverride = string.Empty;
ArcLengthDimension dsArcLengthDim = dsSketchMgr.InsertArcLengthDimension(dsArc, dimensionPosition, dimensionTextOverride);
//Print information about arc length Dimension
PrintArcLengthDimProperties(dsArcLengthDim);
//Add a partial arc length Dimension
double[] firstPoint = new double[] { -4, 3, 0 };
double[] secondPoint = new double[] { -7, 6, 0 };
dimensionPosition[0] = -6;
dimensionPosition[1] = 7;
ArcLengthDimension dsArcLengthPartialDim = dsSketchMgr.InsertArcLengthDimensionPartial(dsArc, firstPoint, secondPoint, dimensionPosition, dimensionTextOverride);
//Print information about partial arc length Dimension
PrintArcLengthDimProperties(dsArcLengthDim);
}
private static void DrawJoggedDimension(SketchManager dsSketchMgr)
{
//Draw a circle
double centerX = -7, centerY = -5, centerZ = 0;
double radius = 3;
Circle dsCircle = dsSketchMgr.InsertCircle(centerX, centerY, centerZ, radius);
//Add jogged Dimension to circle
double[] centerPositionOverride = new double[] { -12, -8, 0 };
double[] jogLinePosition = new double[] { -11, -8, 0 };
double[] dimensionPosition = new double[] { -10, -7.5, 0 };
string dimensionTextOverride = string.Empty;
JoggedDimension dsJoggedDimForCircle = dsSketchMgr.InsertJoggedDimensionCircle(dsCircle, centerPositionOverride, jogLinePosition, dimensionPosition, dimensionTextOverride);
//Print information about jogged Dimension
PrintJoggedDimProperties(dsJoggedDimForCircle);
//Draw an arc
centerX = 2;
centerY = -6;
double arcRadius = 3;
double startAngle = 0.0;
double endAngle = Math.PI / 3;
CircleArc dsArc = dsSketchMgr.InsertArc(centerX, centerY, centerZ, arcRadius, startAngle, endAngle);
//Add jogged Dimension to arc
centerPositionOverride[0] = 7;
centerPositionOverride[1] = -3;
jogLinePosition[0] = 7;
jogLinePosition[1] = -4;
dimensionPosition[0] = 5.5;
dimensionPosition[1] = -4.5;
JoggedDimension dsJoggedDimForArc = dsSketchMgr.InsertJoggedDimensionArc(dsArc, centerPositionOverride, jogLinePosition, dimensionPosition, dimensionTextOverride);
//Print information about jogged Dimension
PrintJoggedDimProperties(dsJoggedDimForArc);
}
private static void DrawRadialDimension(SketchManager dsSketchMgr)
{
//Draw a circle
double centerX = 2, centerY = 2, centerZ = 0;
double radius = 3;
Circle dsCircle = dsSketchMgr.InsertCircle(centerX, centerY, centerZ, radius);
//Draw an arc
centerX = 10;
centerY = 2;
double arcRadius = 3;
double startAngle = 0.0;
double endAngle = Math.PI / 3;
CircleArc dsArc = dsSketchMgr.InsertArc(centerX, centerY, centerZ, arcRadius, startAngle, endAngle);
//Add radius Dimension to circle
double[] dimPosition = new double[] { 7, 6, 0 };
string dimTextOverride = string.Empty;
RadialDimension dsRadialCircleDim = dsSketchMgr.InsertRadialDimensionCircle(dsCircle, dimPosition, dimTextOverride);
//Print information about radius Dimension
PrintRadialDimProperties(dsRadialCircleDim);
//Add radius Dimension to arc
dimPosition[0] = 16;
dimPosition[1] = 3;
RadialDimension dsRadialArcDim = dsSketchMgr.InsertRadialDimensionArc(dsArc, dimPosition, dimTextOverride);
//Print information about radius Dimension
PrintRadialDimProperties(dsRadialArcDim);
}
private static void DrawDiameterDimension(SketchManager dsSketchMgr)
{
//Draw a circle
double centerX = 2, centerY = 2, centerZ = 0;
double radius = 3;
Circle dsCircle = dsSketchMgr.InsertCircle(centerX, centerY, centerZ, radius);
//Draw an arc
centerX = 10;
centerY = 2;
double arcRadius = 3;
double startAngle = 0.0;
double endAngle = Math.PI / 3;
CircleArc dsArc = dsSketchMgr.InsertArc(centerX, centerY, centerZ, arcRadius, startAngle, endAngle);
//Add diameter Dimension to circle
double[] dimPosition = new double[] { 3, 8, 0 };
//No text override - empty string
string dimTextOverride = string.Empty;
DiameterDimension dsDiameterCircleDim = dsSketchMgr.InsertDiameterDimensionCircle(dsCircle, dimPosition, dimTextOverride);
//Print information about diameter Dimension
PrintDiameterDimProperties(dsDiameterCircleDim);
//Add diameter Dimension to arc
dimPosition[0] = 14;
dimPosition[1] = 6;
DiameterDimension dsDiameterArcDim = dsSketchMgr.InsertDiameterDimensionArc(dsArc, dimPosition, dimTextOverride);
//Print information about diameter Dimension
PrintDiameterDimProperties(dsDiameterArcDim);
}
private static void DrawRotatedDimension(SketchManager dsSketchMgr)
{
//Draw line
double startX = 10;
double startY = -5;
double startZ = 0;
double endX = 14;
double endY = -5;
double endZ = 0;
Line dsLine = dsSketchMgr.InsertLine(startX, startY, startZ, endX, endY, endZ);
//Draw rotated Dimension
double[] extLine1Point = new double[] {startX, startY, startZ };
double[] extLine2Point = new double[] { endX, endY, endZ };
double[] dimensionLinePosition = new double[] { 16, -6, 0 };
string dimTextOverride = string.Empty;
//Angle 45 degrees (in radians)
double rotationAngle = Math.PI / 4;
RotatedDimension dsRotatedDim = dsSketchMgr.InsertRotatedDimension(extLine1Point, extLine2Point, dimensionLinePosition, dimTextOverride, rotationAngle);
//Print information about rotated Dimension
PrintRotatedDimProperties(dsRotatedDim);
}
private static void PrintArcLengthDimProperties(ArcLengthDimension dsArcLengthDim)
{
Debug.Print(Environment.NewLine + " Arc length Dimension parameters...");
//Get general Dimension object, which contains common Dimension properties,
//and print them
GeneralDimension dsGeneralDim = dsArcLengthDim.GetGeneralDimension();
PrintGeneralDimProperties(dsGeneralDim);
//Print specific parameters for arc length Dimension
Debug.Print(" ArcSymbolType = " + dsArcLengthDim.ArcSymbolType);
Debug.Print(" HasLeader = " + dsArcLengthDim.HasLeader);
Debug.Print(" IsPartial = " + dsArcLengthDim.IsPartial);
double x, y, z;
//Get center point
dsArcLengthDim.GetCenterPoint(out x, out y, out z);
Debug.Print(" Center point (" + x + "," + y + "," + z + ")");
//Get arc point
dsArcLengthDim.GetArcPoint(out x, out y, out z);
Debug.Print(" Arc point (" + x + "," + y + "," + z + ")");
//Get extension line 1 point
dsArcLengthDim.GetExtensionLine1Point(out x, out y, out z);
Debug.Print(" Extension line 1 point (" + x + "," + y + "," + z + ")");
//Get extension line 2 point
dsArcLengthDim.GetExtensionLine2Point(out x, out y, out z);
Debug.Print(" Extension line 2 point (" + x + "," + y + "," + z + ")");
}
private static void PrintRadialDimProperties(RadialDimension dsRadialDim)
{
Debug.Print(Environment.NewLine + " Radius Dimension parameters...");
//Get general Dimension object, which contains common Dimension properties,
//and print them
GeneralDimension dsGeneralDim = dsRadialDim.GetGeneralDimension();
PrintGeneralDimProperties(dsGeneralDim);
//Print specific parameters for radius Dimension
double x, y, z;
//Get center point
dsRadialDim.GetCenterPoint(out x, out y, out z);
Debug.Print(" Center point (" + x + "," + y + "," + z + ")");
//Get defining point
dsRadialDim.GetDefiningPoint(out x, out y, out z);
Debug.Print(" Defining point (" + x + "," + y + "," + z + ")");
//Print leader length value
Debug.Print(" Leader length = " + dsRadialDim.LeaderLength);
}
private static void PrintDiameterDimProperties(DiameterDimension dsDiameterDim)
{
Debug.Print(Environment.NewLine + " Diameter Dimension parameters...");
//Get general Dimension object, which contains common Dimension properties,
//and print them
GeneralDimension dsGeneralDim = dsDiameterDim.GetGeneralDimension();
PrintGeneralDimProperties(dsGeneralDim);
//Print specific parameters for diameter Dimension
double x, y, z;
//Get defining point
dsDiameterDim.GetDefiningPoint(out x, out y, out z);
Debug.Print(" Defining point (" + x + "," + y + "," + z + ")");
//Get far defining point
dsDiameterDim.GetFarDefiningPoint(out x, out y, out z);
Debug.Print(" Far defining point (" + x + "," + y + "," + z + ")");
//Print leader length value
Debug.Print(" Leader length = " + dsDiameterDim.LeaderLength);
}
private static void PrintJoggedDimProperties(JoggedDimension dsJoggedDim)
{
Debug.Print(Environment.NewLine + " Jogged Dimension parameters...");
//Get general Dimension object, which contains common Dimension properties,
//and print them
GeneralDimension dsGeneralDim = dsJoggedDim.GetGeneralDimension();
PrintGeneralDimProperties(dsGeneralDim);
//Print specific parameters for jogged Dimension
Debug.Print(" Jog angle = " + dsJoggedDim.JogAngle);
double x, y, z;
//Get center point
dsJoggedDim.GetCenterPoint(out x, out y, out z);
Debug.Print(" Center point (" + x + "," + y + "," + z + ")");
//Get chord point
dsJoggedDim.GetChordPoint(out x, out y, out z);
Debug.Print(" Chord point (" + x + "," + y + "," + z + ")");
//Get jog point
dsJoggedDim.GetJogPoint(out x, out y, out z);
Debug.Print(" Jog point (" + x + "," + y + "," + z + ")");
//Get override center point
dsJoggedDim.GetOverrideCenterPoint(out x, out y, out z);
Debug.Print(" Override center point (" + x + "," + y + "," + z + ")");
}
private static void PrintRotatedDimProperties(RotatedDimension dsRotatedDim)
{
Debug.Print(Environment.NewLine + " Rotated Dimension parameters...");
//Get general Dimension object, which contains common Dimension properties,
//and print them
GeneralDimension dsGeneralDim = dsRotatedDim.GetGeneralDimension();
PrintGeneralDimProperties(dsGeneralDim);
//Print specific parameters for rotated Dimension
Debug.Print(" Rotation angle = " + dsRotatedDim.Rotation);
double x, y, z;
//Get Dimension line point
dsRotatedDim.GetDimensionLinePoint(out x, out y, out z);
Debug.Print(" Dimension line point (" + x + "," + y + "," + z + ")");
//Get extension line 1 point
dsRotatedDim.GetExtensionLine1Point(out x, out y, out z);
Debug.Print(" Extension line 1 point (" + x + "," + y + "," + z + ")");
//Get extension line 2 point
dsRotatedDim.GetExtensionLine2Point(out x, out y, out z);
Debug.Print(" Extension line 2 point (" + x + "," + y + "," + z + ")");
}
private static void PrintGeneralDimProperties(GeneralDimension dsGeneralDim)
{
//Get general Dimension object, which contains common Dimension properties,
//and print them
Debug.Print(" Dimension style = " + dsGeneralDim.DimensionStyle);
Debug.Print(" Handle = " + dsGeneralDim.Handle);
Debug.Print(" Measurement = " + dsGeneralDim.Measurement.ToString());
Debug.Print(" Related = " + dsGeneralDim.Related.ToString());
Debug.Print(" Text override = " + dsGeneralDim.TextOverride);
Debug.Print(" TextRotation = " + dsGeneralDim.TextRotation);
//Get text position
double x, y;
dsGeneralDim.GetTextPosition(out x, out y);
Debug.Print(" Text position (" + x + "," + y + ")");
}
}
}