# Attach Block Definition Annotation to Leader Example (VB.NET)

This example shows how to attach a Block definition annotation to a Leader.

    '--------------------------------------------------------------
    ' Preconditions:
    ' 1. Create a VB.NET 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. Start DraftSight and open a document.
    ' 5. Click Start Debugging.
    '
    ' Postconditions:
    ' 1. A message box pops up when the Block definition,
    '    named MyBlockAnnotation, is created.
    ' 2. Click OK to close the message box.
    ' 3. A Leader is created and MyBlockAnnotation is
    '    is attached to the Leader.
    ' 4. The drawing zooms to fit.
    ' 5. Examine the drawing.
    '----------------------------------------------------------------
    Imports DraftSight.Interop.dsAutomation
    Imports System
    Imports System.Runtime.InteropServices

    Module Module1

        Sub Main()
            Dim dsApp As Application
            Dim dsDoc As Document = Nothing
            Dim dsModel As Model = Nothing
            Dim dsSketchManager As SketchManager = Nothing

            'Connect to DraftSight
            dsApp = DirectCast(Marshal.GetActiveObject("DraftSight.Application"), DraftSight.Interop.dsAutomation.Application)
            'Get active document
            dsDoc = dsApp.GetActiveDocument()
            If (dsDoc IsNot Nothing) Then
                'Get model space
                dsModel = dsDoc.GetModel()

                'Get Sketch Manager
                dsSketchManager = dsModel.GetSketchManager()

                'First Line's parameters
                Dim startX As Double = 1.0
                Dim startY As Double = 1.0
                Dim startZ As Double = 0.0
                Dim endX As Double = 6.0
                Dim endY As Double = 1.0
                Dim endZ As Double = 0.0

                'Construct a Line
                Dim dsLine As Line = (dsSketchManager.InsertLine(startX, startY, startZ, endX, endY, endZ))

                'Second Line's parameters
                Dim start2X As Double = 2.0
                Dim start2Y As Double = 2.0
                Dim start2Z As Double = 0.0
                Dim end2X As Double = 2.0
                Dim end2Y As Double = 20.0
                Dim end2Z As Double = 0.0

                'Construct another Line
                Dim dsLine2 As Line = (dsSketchManager.InsertLine(start2X, start2Y, start2Z, end2X, end2Y, end2Z))

                Dim typesArray As Integer() = New Integer() {21, 21}
                Dim linesArray As Line() = New Line() {dsLine, dsLine2}

                Dim dsBlockDef As BlockDefinition = dsDoc.CreateBlockDefinition("MyBlockAnnotation", "Block annotation to attach to Leader", 0, 0, 0, typesArray, _
                 linesArray, dsBlockDefinitionEntities_e.dsBlockDefinitionEntities_ConvertToBlock)
                MsgBox("Name of Block definition: " + dsBlockDef.GetName())

                'Add Leader
                Dim leaderCoordinates As Double() = New Double() {6.5, 7.2, 0, 7.7, 8.6, 0}
                Dim noteWidth As Double = 1.0
                Dim noteText As String = "L1 "
                Dim dsLeader As Leader = dsSketchManager.InsertLeader(leaderCoordinates, noteWidth, noteText)

                'Attach Block definition to Leader,
                'which creates a Block instance
                Dim dsMathUtility As MathUtility = dsApp.GetMathUtility()
                Dim dsMathPoint As MathPoint = dsMathUtility.CreatePoint(20, 20, 25)
                dsLeader.SetBlockAnnotation("MyBlockAnnotation", dsMathPoint)

                dsApp.Zoom(dsZoomRange_e.dsZoomRange_Fit, Nothing, Nothing)
            End If
        End Sub
    End Module