# Create Tracker Example (VBA)

This example shows how to create a tracker and add a temporary entity to the tracker.

    '--------------------------------------------------------------
    ' Preconditions:
    ' 1. Create a VBA macro in a software product in which VBA is
    '    embedded.
    ' 2. Copy and paste this example into the Visual Basic IDE.
    '    a. In Modules, copy and paste the Main module.
    '    b. Insert a class called Class1, and paste the Class1 module.
    ' 3. Add a reference to the DraftSight type library,
    '    install_dir\bin\dsAutomation.dll.
    ' 4. Start DraftSight and open a document.
    ' 5. Run the macro.
    '
    ' Postconditions:
    ' 1. Creates a temporary Circle for the tracker.
    ' 2. Creates a tracker and adds the temporary Circle to the
    '    the tracker.
    ' 3. Examine the pointer in the drawing to verify.
    ' 4. Prompts you to click in the drawing to insert a Circle.
    ' 5. Inserts a Circle in the drawing at the point where you clicked.
    '----------------------------------------------------------------

    'Main module
    Option Explicit

    Public dsTrackerEvent As Class1

    Public dsApp As DraftSight.Application
    Public dsTempCircle As DraftSight.Circle

    Sub main()

            Dim dsModel As DraftSight.Model
            Dim dsSketchMgr As DraftSight.SketchManager

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

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

            If dsApp Is Nothing Then
                Return
            End If

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

            'Get Sketch Manager
            Set dsModel = dsDoc.GetModel()
            Set dsSketchMgr = dsModel.GetSketchManager()

            'Create temporary Circle
            dsApp.TemporaryEntityMode = True
            Set dsTempCircle = dsSketchMgr.InsertCircle(0, 0, 0, 10)
            dsApp.TemporaryEntityMode = False

            'Create tracker and add temporary Circle
            Dim dsTracker As DraftSight.Tracker
            Set dsTracker = dsApp.CreateTracker()
            dsTracker.AddTemporaryEntity dsTempCircle

            'Set up event
            Set dsTrackerEvent = New Class1
            Set dsTrackerEvent.myTracker = dsTracker

            'Prompt for point where to insert Circle
            'Before prompt, add tracker to command message
            Dim dsCmdMsg As CommandMessage
            Set dsCmdMsg = dsApp.GetCommandMessage()
            dsCmdMsg.AddTracker dsTracker

            Dim x As Double
            x = 0#
            Dim y As Double
            y = 0#
            Dim z As Double
            z = 0#

            Dim res As Boolean
            res = dsCmdMsg.PromptForPoint("Click to insert Circle", x, y, z)

            If res = True Then
                'Set the center of the Circle where user clicked
                dsTempCircle.SetCenter x, y, z
                'Add temporary Circle to drawing
                dsSketchMgr.AddTemporaryEntity dsTempCircle
            End If

            'Remove tracker from command message if no longer needed
            dsCmdMsg.RemoveTracker dsTracker

        End Sub

    'Class1 module

    Option Explicit

    Public WithEvents myTracker As DraftSight.Tracker

    Public Sub myTracker_UpdateNotify(ByVal CursorPosition As DraftSight.MathPoint)

            If CursorPosition Is Nothing Then
                Return
            End If

            Dim x As Double
            x = 0#
            Dim y As Double
            y = 0#
            Dim z As Double
            z = 0#
            CursorPosition.GetPosition x, y, z

            dsTempCircle.SetCenter x, y, z

    End Sub