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 NothingThen
            '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, NothingNothing)
        End If
    End Sub
End Module