Insert Shapes Example (C#)

This example shows how to load a shape file and insert the shapes in the loaded shape file into a drawing.

//--------------------------------------------------------------
// 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. Start DraftSight and open a document.
// 6. Start debugging the project.
//
// Postconditions: 
// 1. Gets the Shape Manager.
// 2. Loads a shape file.
// 3. Gets the shapes in the loaded shape file.
// 4. Inserts the shapes, with an obliquing angle of 30, in the drawing.
// 5. Examine the drawing.
//----------------------------------------------------------------
 
using System;
using DraftSight.Interop.dsAutomation;
using System.Runtime.InteropServices;
using System.Windows.Forms;
 
 
namespace ShapeCSharp
{
    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");
 
            // Abort any command currently running in DraftSight to avoid nested commands
            dsApp.AbortRunningCommand(); 
 
            if (null == dsApp)
            {
                return;
            }
 
            //Get active document
            Document dsDoc = dsApp.GetActiveDocument();
            if (null == dsDoc)
            {
                MessageBox.Show("There are no open documents in DraftSight.");
                return;
            }
 
            //Get the Shape Manager
            ShapeManager dsShapeMgr = dsDoc.GetShapeManager();
 
            //Load shape file LTypeShp.shx
            SystemFiles dsSysFile = dsApp.GetSystemFiles();
            object[] FontsPathObj = (object[])dsSysFile.FontsPaths;
            string fontPath = "";
            if (FontsPathObj.Length > 0)
                fontPath = FontsPathObj[0].ToString();
 
            string shapeFileName = System.IO.Path.Combine(fontPath, "LTypeShp.shx");
 
            dsShapeMgr.Load(shapeFileName);
 
            //Get shapes
            object[] shapesStrList = (object[])dsShapeMgr.GetAvailableShapes();
            int shapesCount = shapesStrList.Length;
 
            //Get Sketch Manager
            SketchManager dsSketchMgr = dsDoc.GetModel().GetSketchManager();
 
            //Insert shapes
            double PositionX = 0.0, PositionY = 0.0, PositionZ = 0.0;
            for (int i = 0; i < shapesCount; ++i)
            {
                Shape dsShape = dsSketchMgr.InsertShape(shapesStrList[i].ToString(), PositionX, PositionY, PositionZ, 1, 0.0);
 
                //Change obliquing property
                dsShape.Obliquing = 30 * Math.PI / 180;
 
                double X1, Y1, Z1, X2, Y2, Z2;
                dsShape.GetBoundingBox(out X1, out Y1, out Z1, out X2, out Y2, out Z2);
 
                PositionX += (X2 - X1) + 5;
            }
        }
 
     }
}