# Create and Transform Mathematical Elliptical Arc Example (C#)

This example shows how to create and transform a mathematical elliptical Arc.

    //--------------------------------------------------------------
    // Preconditions:
    // 1. Create a C# Windows console project.
    // 2. Copy and paste this code into the C# project.
    // 3. Add a reference to
    //    install_dir\APISDK\tlb\DraftSight.Interop.dsAutomation.dll.
    // 4. Add a reference to System.Windows.Forms.
    // 5. Open the Immediate window.
    // 6. Start DraftSight.
    // 7. Press F5.
    //
    // Postconditions:
    // 1. Connects to DraftSight.
    // 2. Gets the active document.
    // 3. Creates a mathematical elliptical Arc.
    // 4. Gets various mathematical elliptical Arc values.
    // 5. Gets the intersection points of the mathematical elliptical Arc
    //    with a mathematical linear object and plane.
    // 6. Sets various values to use to transform the
    //    mathematical elliptical Arc.
    // 7. Applies a mathematical transformation to the
    //    mathematical elliptical Arc.
    // 8. Examine the Immediate window.
    //---------------------------------------------------------------
    using System;
    using DraftSight.Interop.dsAutomation;
    using System.Runtime.InteropServices;
    using System.Windows.Forms;
    using System.Diagnostics;

    namespace MathEllipArcCSharp
    {
        class Program
        {

            static void Main()
            {
                DraftSight.Interop.dsAutomation.Application dsApp;

                //Connects to DraftSight application
                dsApp = (DraftSight.Interop.dsAutomation.Application)Marshal.GetActiveObject("DraftSight.Application");

                if (null == dsApp)
                {
                    return;
                }

                //Gets active document
                Document dsDoc = dsApp.GetActiveDocument();
                if (null == dsDoc)
                {
                    MessageBox.Show("There are no open documents in DraftSight.");
                    return;
                }

                //Aborts any command currently running in DraftSight
                //to avoid nested commands
                dsApp.AbortRunningCommand();

                //Creates a mathematical elliptical Arc
                MathUtility dsMathUtility = dsApp.GetMathUtility();

                MathPoint Center = dsMathUtility.CreatePoint(3.0, 7.0, 0.0);
                MathVector minorAxis = dsMathUtility.CreateVector(1.0, 1.0, 0.0);
                MathVector majorAxis = dsMathUtility.CreateVector(3.0, 1.0, 0.0);
                double majorRadius = 3.0;
                double minorRadius = 2.0;
                double startAngle = 2.1;
                double endAngle = 1.0;

                MathEllipArc dsMathEllipArc = dsMathUtility.CreateEllipArc(Center, majorAxis, minorAxis, majorRadius, minorRadius, startAngle, endAngle);
                if (dsMathEllipArc != null)
                {
                    Debug.Print("Mathematical elliptical Arc created.");
                }
                else
                {
                    Debug.Print("Mathematical elliptical Arc not created.");
                }

                //Gets length of mathematical elliptical Arc
                double mathEllipArcLength = dsMathEllipArc.GetLength();

                //Gets normal of mathematical elliptical Arc
                MathVector dsNormal = dsMathEllipArc.GetNormal();

                //Gets major and minor axes of mathematical elliptical Arc
                MathVector dsMajorAxis = dsMathEllipArc.GetMajorAxis();
                MathVector dsMinorAxis = dsMathEllipArc.GetMinorAxis();

                //Gets plane of mathematical elliptical Arc
                MathPlane dsMathPlane = dsMathEllipArc.GetPlane();

                //Gets start point of mathematical elliptical Arc
                MathPoint dsStartPoint = dsMathEllipArc.GetStartPoint();

                //Gets intersection point of mathematical
                //elliptical Arc with a mathematical linear object
                MathLine dsLinearObject = dsMathUtility.CreateLine(1.0, 1.0, 0, 0, 10.0, 12.0, dsMathLineType_e.dsMathLineType_Infinite);
                MathPoint intersectionPoint1, intersectionPoint2;
                int result = dsMathEllipArc.IntersectWithLinearObject(dsLinearObject, out intersectionPoint1, out intersectionPoint2);
                if (result == 0 )
                {
                    Debug.Print("Mathematical elliptical Arc and linear object do not intersect.");
                }
                else
                {
                    Debug.Print("Mathematical elliptical Arc and linear object do intersect.");
                }

                //Gets intersection point of mathematical elliptical Arc with
                //a mathematical plane
                MathPlane dsPlaneObject = dsMathUtility.CreateXYPlane();
                result = dsMathEllipArc.IntersectWithPlane(dsPlaneObject, out intersectionPoint1, out intersectionPoint2);
                if (result == 0)
                {
                    Debug.Print("Mathematical elliptical Arc and plane do not intersect.");
                }
                else
                {
                    Debug.Print("Mathematical elliptical Arc and plane do intersect.");
                }

                //Changes major and minor radii
                dsMathEllipArc.MajorRadius = 4.0;
                dsMathEllipArc.MinorRadius = 3.0;

                //Sets axes of mathematical elliptical Arc
                MathVector MinorAxis = dsMathUtility.CreateVector(2.0, 2.0, 0.0);
                MathVector MajorAxis = dsMathUtility.CreateVector(3.5, 2.3, 0.0);
                dsMathEllipArc.SetAxes(MajorAxis, MinorAxis);

                //Sets start angle
                dsMathEllipArc.StartAngle = 3.0;

                //Applies a mathematical transformation to the
                //mathematical elliptical Arc
                MathPlane dsProjectionPlane = dsMathUtility.CreateYZPlane();
                MathVector dsProjectionDirection = dsMathUtility.CreateVector(1.0, 0.0, 0.0);
                MathTransform dsProjectionTransformation = dsMathUtility.CreateTransformProjection(dsProjectionPlane, dsProjectionDirection);
                dsMathEllipArc.TransformBy(dsProjectionTransformation);
                Debug.Print("Mathematical transformation applied to mathematical elliptical Arc.");
            }
        }
    }