Add Temporary Entities to Block Definition Example (C#)

This example shows how to add temporary entities to a Block definition and Block Instance.

//--------------------------------------------------------------
// 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. Creates Block definition with one element, a Circle.
// 2. Inserts Block instance.
// 3. Zooms to fit the drawing and execution stops.
// 4. Press F10 to step through the rest of the project
//    and examine the drawing after each call.
// 5. Creates temporary entities, two Circles.
// 6. Modifies temporary entities.
// 7. Adds temporary entities to Block definition and Block
//    instance.
//----------------------------------------------------------------
 
using System;
 
using DraftSight.Interop.dsAutomation;
using System.Runtime.InteropServices;
using System.Windows.Forms;
 
namespace TemporaryEntitiesCSharp
{
    class Program
    {
        public static void Main()
        {
            DraftSight.Interop.dsAutomation.Application dsApp;
 
            //Connect to DraftSight application
            dsApp = (DraftSight.Interop.dsAutomation.Application)Marshal.GetActiveObject("DraftSight.Application");
 
            if (null == dsApp)
            {
                return;
            }
            //Abort any command currently running in DraftSight
            //to avoid nested commands
            dsApp.AbortRunningCommand();
 
            //Get active document
            Document dsDoc = dsApp.GetActiveDocument();
            if (null == dsDoc)
            {
                MessageBox.Show("There are no open documents in DraftSight.");
                return;
            }
 
            SketchManager dsSketchMgr = dsDoc.GetModel().GetSketchManager();
 
            //Create Block definition with one element, a Circle
            Circle dsCircle = dsSketchMgr.InsertCircle(0, 0, 0, 5);
            DispatchWrapper[] dsEntities = new DispatchWrapper[1];
            int[] dsEntityTypes = new int[1];
            dsEntities[0] = new DispatchWrapper(dsCircle);
            dsEntityTypes[0] = (int)dsObjectType_e.dsCircleType;
            BlockDefinition dsBlkDef = dsDoc.CreateBlockDefinition("SampleBlock""Sample block definition",
                0, 0, 0, dsEntityTypes, dsEntities, dsBlockDefinitionEntities_e.dsBlockDefinitionEntities_RemoveFromDrawing);
 
            dsSketchMgr.InsertBlock2("SampleBlock", 0, 0, 0, 1, 1, 1, 0);
 
            //Zoom to fit
            dsApp.Zoom(dsZoomRange_e.dsZoomRange_Fit, nullnull);
 
            //Examine the drawing
            //to verify that a Block instance 
            //was inserted
            //Press F10 to continue
            System.Diagnostics.Debugger.Break();
 
 
            //Create temporary entities, which are not added to drawing
 
            //Turn temporary entity mode on
            dsApp.TemporaryEntityMode = true;
 
            //Create temporary Circles
            Circle dsTempCircle1 = dsSketchMgr.InsertCircle(0, 0, 0, 5);
            Circle dsTempCircle2 = dsSketchMgr.InsertCircle(0, 0, 0, 5);
 
            //Turn temporary entity mode off
            dsApp.TemporaryEntityMode = false;
 
            //Modify Circles, which you cannot see
            double PointOnCurveX = 0.0;
            double PointOnCurveY = 0.0;
            double PointOnCurveZ = 0.0;
            dsCircle.GetClosestPointOn(2.5, 2.5, 0, out PointOnCurveX, out PointOnCurveY, out PointOnCurveZ);
            dsTempCircle1.SetCenter(PointOnCurveX, PointOnCurveY, PointOnCurveZ);
 
            dsTempCircle1.GetClosestPointOn(PointOnCurveX + 2.5, PointOnCurveY + 2.5, PointOnCurveZ, out PointOnCurveX, out PointOnCurveY, out PointOnCurveZ);
            dsTempCircle2.SetCenter(PointOnCurveX, PointOnCurveY, PointOnCurveZ);
 
            //Zoom to fit
            dsApp.Zoom(dsZoomRange_e.dsZoomRange_Fit, nullnull); 

            //Add temporary Circles to Block definition 
            //Block instance updates accordingly
            dsBlkDef.AddTemporaryEntity(dsTempCircle1);
            dsBlkDef.AddTemporaryEntity(dsTempCircle2);
 
            //Zoom to fit
            dsApp.Zoom(dsZoomRange_e.dsZoomRange_Fit, nullnull);
 

        }
    }
}