# Get and Set Document Settings Example (C#)

This example shows how to get and set document settings.

    //--------------------------------------------------------------
    //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. Start DraftSight and open a drawing.
    // 5. Add references to System and System.Windows.Forms.
    // 6. Start debugging the project.
    //
    //Postconditions: Message boxes pop up verifying that
    //document properties are reset. Read the text in each
    //message box before clicking OK to close it.
    //----------------------------------------------------------------

    using System;
    using DraftSight.Interop.dsAutomation;
    using System.Windows.Forms;
    using System.Runtime.InteropServices;

    static class Module1
    {

        static DraftSight.Interop.dsAutomation.Application dsApp;
        static Document dsDoc;

        static string dsDocName;
        public static void Main()
        {
    		//Connect to DraftSight
            	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
    		dsDoc = dsApp.GetActiveDocument();

    		if (dsDoc != null)
                    {
    			//Get and set document settings
    			GetSetDocSettings(dsDoc);

    		}
                    else
                    {
    			MessageBox.Show("There are no open documents in DraftSight.");
    		}

        }

        public static void GetSetDocSettings(Document dsDoc)
        {
            //Set and get dimension scale property of document
            TestDimensionScale(dsDoc);

            //Set and get angle unit expression for document
            TestAngleUnitExpression(dsDoc);

            //Set and get base angle for document
            TestBaseAngle(dsDoc);

            //Set and get length unit expression for document
            TestLengthUnitExpression(dsDoc);

            //Set and get scale unit of the document
            TestScaleUnit(dsDoc);

            //Check if document is active
            if (dsDoc.IsActive())
            {
                MessageBox.Show(dsDoc.GetPathName() + " document is currently active in DraftSight.");
            }
            else
            {
                MessageBox.Show(dsDoc.GetPathName() + " document is not currently active in DraftSight.");
            }

            //Check if document is dirty
            if (dsDoc.IsDirty())
            {
                MessageBox.Show(dsDoc.GetPathName() + " document was modified since opened.");
            }
            else
            {
                MessageBox.Show(dsDoc.GetPathName() + " document was not modified since opened.");
            }

        }
        public static void TestDimensionScale(Document dsDoc)
        {
            double dimScale = 0;
            double precision = 0;

            precision = 1E-09;

            //Set IDocument.DimensionScale property
            dimScale = 0.1;
            dsDoc.DimensionScale = dimScale;

            if (Math.Abs(dimScale - dsDoc.DimensionScale) > precision)
            {
                MessageBox.Show("Failed to set dimension scale property of document to " + dimScale);
            }
        }

        public static void TestAngleUnitExpression(Document dsDoc)
        {
            dsAngleType_e newAngType = default(dsAngleType_e);
            dsAngleType_e getAngType = default(dsAngleType_e);
            dsUnitPrecision_e newUnitPrecision = default(dsUnitPrecision_e);
            dsUnitPrecision_e getUnitPrecision = default(dsUnitPrecision_e);

            //Set IDocument.SetAngleUnitExpression for document
            newAngType = dsAngleType_e.dsAngleType_Radians;
            newUnitPrecision = dsUnitPrecision_e.dsUnitPrecision_8;

            dsDoc.SetAngleUnitExpression(newAngType, newUnitPrecision);

            //Get IDocument.GetAngleUnitExpression for document
            dsDoc.GetAngleUnitExpression(out getAngType, out getUnitPrecision);

            if (getAngType == newAngType)
            {
                MessageBox.Show("Set angle type property of document to " + newAngType + ".");
            }

            if (getUnitPrecision == newUnitPrecision)
            {
                MessageBox.Show("Set unit precision property of document to " + newUnitPrecision + ".");
            }

        }
        public static void TestBaseAngle(Document dsDoc)
        {
            double newBaseAngle = 0;
            bool newClockwise = false;
            double baseAngle = 0;
            bool clockwise = false;
            double precision = 0;

            precision = 1E-09;

            //Set IDocument.SetBaseAngle property for document
            newBaseAngle = 0.0;
            newClockwise = true;

            dsDoc.SetBaseAngle(newBaseAngle, newClockwise);

            //Get IDocument.GetBaseAngle for document
            dsDoc.GetBaseAngle(out baseAngle, out clockwise);

            if (Math.Abs(newBaseAngle - baseAngle) < precision)
            {
                MessageBox.Show("Set base angle property of document to " + newBaseAngle + ".");
            }

            if (newClockwise == clockwise)
            {
                MessageBox.Show("Set clockwise property of document.");
            }

        }
        public static void TestLengthUnitExpression(Document dsDoc)
        {
            dsLengthType_e newLengthType = default(dsLengthType_e);
            dsUnitPrecision_e newUnitPrecision = default(dsUnitPrecision_e);
            dsLengthType_e lengthType = default(dsLengthType_e);
            dsUnitPrecision_e unitPrecision = default(dsUnitPrecision_e);

            //Set IDocument.SetLengthUnitExpression for document
            newLengthType = dsLengthType_e.dsLengthType_Engineering;
            newUnitPrecision = dsUnitPrecision_e.dsUnitPrecision_5;
            dsDoc.SetLengthUnitExpression(newLengthType, newUnitPrecision);

            //Get IDocument.GetLengthUnitExpression for document and
            //verify if a value is correct
            dsDoc.GetLengthUnitExpression(out lengthType, out unitPrecision);

            if (newLengthType == lengthType)
            {
                MessageBox.Show("Set length type property of document to " + newLengthType + ".");
            }

            if (newUnitPrecision == unitPrecision)
            {
                MessageBox.Show("Set unit precision property of document to " + newUnitPrecision + ".");
            }
        }

        public static void TestScaleUnit(Document dsDoc)
        {
            dsScaleUnit_e newScaleUnit = default(dsScaleUnit_e);
            dsScaleUnit_e scaleUnit = default(dsScaleUnit_e);

            //Set IDocument.ScaleUnit property for document
            newScaleUnit = dsScaleUnit_e.dsScaleUnit_Yards;
            dsDoc.ScaleUnit = newScaleUnit;

            //Get IDocument.ScaleUnit property for document and verify if a value is correct
            scaleUnit = dsDoc.ScaleUnit;

            if (scaleUnit == newScaleUnit)
            {
                MessageBox.Show("Set scale unit property of document to " + newScaleUnit + ".");
            }
        }

    }