# Add Temporary Entities to Block Definition Example (VB.NET)

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

    '--------------------------------------------------------------
    ' Preconditions:
    ' 1. Create a VB.NET Windows console project.
    ' 2. Copy and paste this example into the VB.NET 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.
    '----------------------------------------------------------------

    Imports System
    Imports DraftSight.Interop.dsAutomation
    Imports System.Runtime.InteropServices
    Imports System.Windows.Forms

    Module Module1

        Sub Main()

            Dim dsApp As DraftSight.Interop.dsAutomation.Application

            'Connect to DraftSight application
            dsApp = GetObject(, "DraftSight.Application")

            If dsApp Is Nothing Then
                Return
            End If

            'Abort any command currently running in DraftSight
            'to avoid nested commands
            dsApp.AbortRunningCommand()

            'Get active document
            Dim dsDoc As Document = dsApp.GetActiveDocument()
            If dsDoc Is Nothing Then
                MessageBox.Show("There are no open documents in DraftSight.")
                Return
            End If

            Dim dsModel As Model
            Dim dsSketchMgr As SketchManager
            dsModel = dsDoc.GetModel()
            dsSketchMgr = dsModel.GetSketchManager()

            'Create Block definition with one element, a Circle
            Dim dsCircle As Circle = dsSketchMgr.InsertCircle(0, 0, 0, 5)
            Dim dsEntities As DispatchWrapper() = New DispatchWrapper(0) {}
            Dim dsEntityTypes As Integer() = New Integer(0) {}
            dsEntities(0) = New DispatchWrapper(dsCircle)
            dsEntityTypes(0) = CInt(dsObjectType_e.dsCircleType)
            Dim dsBlkDef As BlockDefinition = 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, Nothing, Nothing)

            '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
            Dim dsTempCircle1 As Circle = dsSketchMgr.InsertCircle(0, 0, 0, 5)
            Dim dsTempCircle2 As Circle = dsSketchMgr.InsertCircle(0, 0, 0, 5)

            'Turn temporary entity mode off
            dsApp.TemporaryEntityMode = False

            'Modify Circles, which you cannot see
            Dim PointOnCurveX As Double = 0.0
            Dim PointOnCurveY As Double = 0.0
            Dim PointOnCurveZ As Double = 0.0
            dsCircle.GetClosestPointOn(2.5, 2.5, 0, PointOnCurveX, PointOnCurveY, PointOnCurveZ)
            dsTempCircle1.SetCenter(PointOnCurveX, PointOnCurveY, PointOnCurveZ)

            dsTempCircle1.GetClosestPointOn(PointOnCurveX + 2.5, PointOnCurveY + 2.5, PointOnCurveZ, PointOnCurveX, PointOnCurveY, PointOnCurveZ)
            dsTempCircle2.SetCenter(PointOnCurveX, PointOnCurveY, PointOnCurveZ)

            'Zoom to fit
            dsApp.Zoom(dsZoomRange_e.dsZoomRange_Fit, Nothing, Nothing)

            '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, Nothing, Nothing)

        End Sub

    End Module