Create Angular Dimension Example (C#)

This example shows how to create angular Dimensions using 3 points, 2 lines, and an arc.

//-------------------------------------------------------------
// 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. Angular Dimensions using 3 points, 2 lines, and an arc are created. 
// 2. Examine the Output or Immediate window.
// 3. Click Continue.
// 4. Examine the drawing.
//------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Text;
using DraftSight.Interop.dsAutomation;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace AddAngularDimension
{
    class Program
    {
        private static DraftSight.Interop.dsAutomation.Application dsApp;
        static void Main(string[] args)
        {
            //Connect to the 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 the active document
            Document dsDoc = dsApp.GetActiveDocument();
            if (null == dsDoc)
            {
                MessageBox.Show("There are no open documents in DraftSight.");
                return;
            }
            //Get the model space
            Model dsModel = dsDoc.GetModel();
            //Get the sketch manager
            SketchManager dsSketchMgr = dsModel.GetSketchManager();
            //Add an angular Dimension using three points
            AngularDimension dsAngular3PointDim = AddAngularDimensionUsing3Points(dsSketchMgr);            
            //Print the angular Dimension's properties
            PrintAngularDimProperties(dsAngular3PointDim);
            //Add an angular Dimension using two lines
            AngularDimension dsAngular2LinesDim = AddAngularDimensionUsing2Lines(dsSketchMgr);
            //Print the angular Dimension's properties
            PrintAngularDimProperties(dsAngular2LinesDim);
            //Add an angular Dimension for the arc
            AngularDimension dsAngularArcDim = AddAngularDimensionForArc(dsSketchMgr);
            //Print the angular Dimension's properties
            PrintAngularDimProperties(dsAngularArcDim);
            //Zoom to fit
            dsApp.Zoom(dsZoomRange_e.dsZoomRange_Fit, null, null);
        }
        private static AngularDimension AddAngularDimensionForArc(SketchManager dsSketchMgr)
        {
            //Draw an arc
            double centerX = 18, centerY = 2, centerZ = 0;
            double radius = 3;
            double startAngle = 0.0, endAngle = Math.PI / 2;
            CircleArc dsArc = dsSketchMgr.InsertArc(centerX, centerY, centerZ, radius, startAngle, endAngle);
            //Angular Dimension's position
            double[] dimPosition = new double[] { 20, 5, 0 };
            //Text override
            string dimTextOverride = "AngularDimArc";
            AngularDimension dsAngularDim = dsSketchMgr.InsertAngularDimensionArc(dsArc, dimPosition, dimTextOverride);
            Debug.Print(Environment.NewLine + "An angular Dimension for an arc was added.");
            return dsAngularDim;
        }
        private static AngularDimension AddAngularDimensionUsing2Lines(SketchManager dsSketchMgr)
        {
            //Draw two lines for an angular Dimension
            Line dsFirstLine = dsSketchMgr.InsertLine(7, 0, 0, 10, 3, 0);
            Line dsSecondLine = dsSketchMgr.InsertLine(12, 0, 0, 15, 2, 0);
            //Angular Dimension position
            double[] dimPosition = new double[] { 13, 4, 0 };
            //No text override - empty string
            string dimTextOverride = string.Empty;
            AngularDimension dsAngularDim = dsSketchMgr.InsertAngularDimension2Line(dsFirstLine, dsSecondLine, dimPosition, dimTextOverride);
            Debug.Print(Environment.NewLine + "An angular Dimension using two lines was added.");
            return dsAngularDim;
        }
        private static AngularDimension AddAngularDimensionUsing3Points(SketchManager dsSketchMgr)
        {
            //Angular Dimension parameters
            double[] centerPoint = new double[] { 0, 0, 0 };
            double[] angleStartPoint = new double[] { 2, 2, 0 };
            double[] angleEndPoint = new double[] { 2, 4, 0 };
            double[] dimPosition = new double[] { 5, 5, 0 };
            //No text override - empty string
            string dimTextOverride = string.Empty;
            AngularDimension dsAngular3PointDim = dsSketchMgr.InsertAngularDimension3Point(centerPoint, angleStartPoint, angleEndPoint, dimPosition, dimTextOverride);
            Debug.Print(Environment.NewLine + "An angular Dimension using three points was added.");
            return dsAngular3PointDim;
        }
        private static void PrintAngularDimProperties(AngularDimension dsAngularDim)
        {
            Debug.Print("  Angular Dimension parameters...");
            Debug.Print("    Type = " + dsAngularDim.Type.ToString());
            //Get general Dimension object, which contains common Dimension properties
            GeneralDimension dsGeneralDim = dsAngularDim.GetGeneralDimension();
            Debug.Print("    Dimension style = " + dsGeneralDim.DimensionStyle);
            Debug.Print("    Handle = " + dsGeneralDim.Handle);
            Debug.Print("    Measurement (in radians) = " + dsGeneralDim.Measurement.ToString());
            Debug.Print("    Related = " + dsGeneralDim.Related.ToString());
            Debug.Print("    Text override = " + dsGeneralDim.TextOverride);
            Debug.Print("    Text rotation = " + dsGeneralDim.TextRotation);
            //Get text position
            double x, y;
            dsGeneralDim.GetTextPosition(out x, out y);
            Debug.Print("    Text position (" + x + "," + y + ")");
            //Print specific parameters for angular Dimension
            double z;
            //Get center point
            dsAngularDim.GetCenterPoint(out x, out y, out z);
            Debug.Print("    Center point (" + x + "," + y + "," + z + ")");
            //Get arc point
            dsAngularDim.GetArcPoint(out x, out y, out z);
            Debug.Print("    Arc point (" + x + "," + y + "," + z + ")");
            //Get first line's start point
            dsAngularDim.GetLine1Point(out x, out y, out z);
            Debug.Print("    Line1's start point (" + x + "," + y + "," + z + ")");
            //Get first line end point
            dsAngularDim.GetLine1EndPoint(out x, out y, out z);
            Debug.Print("    Line1's end point (" + x + "," + y + "," + z + ")");
            //Get second line start point
            dsAngularDim.GetLine2Point(out x, out y, out z);
            Debug.Print("    Line2's start point (" + x + "," + y + "," + z + ")");
            //Get second line end point
            dsAngularDim.GetLine2EndPoint(out x, out y, out z);
            Debug.Print("    Line2's end point (" + x + "," + y + "," + z + ")");            
        }
    }
}