# Insert SimpleNote Example (VBA)

This example shows how to insert and change a SimpleNote in a drawing document.

    '--------------------------------------------------------------
    ' 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.
    ' 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. A message box pops up when a SimpleNote is
    '    inserted in the drawing.
    ' 2. The selection filter is set to select SimpleNotes only and
    '    is activated.
    ' 3. The SimpleNote is selected and its text changed. Examine
    '    the drawing to verify.
    '----------------------------------------------------------------

    Option Explicit

    Sub main()
        Dim dsApp As DraftSight.Application
        Dim dsDoc As DraftSight.Document
        Dim dsModel As DraftSight.Model
        Dim dsSketchManager As DraftSight.SketchManager
        Dim dsSimpleNote As DraftSight.SimpleNote
        Dim startX, startY, startZ As Double
        Dim noteValue As String
        Dim angle, height As Double

        'Connect to DraftSight
        Set dsApp = GetObject(, "DraftSight.Application")
        'Abort any command currently running in DraftSight
        'to avoid nested commands
        dsApp.AbortRunningCommand

        'Get active document
        Set dsDoc = dsApp.GetActiveDocument()
        If Not dsDoc Is Nothing Then

            'Get model space
            Set dsModel = dsDoc.GetModel()

            'Get Sketch Manager
            Set dsSketchManager = dsModel.GetSketchManager()

           'SimpleNote parameters (angle value should be passed in radians)
            startX = 0#
            startY = 0#
            startZ = 0#
            noteValue = "First sample text"
            angle = 3.14159265358979 / 4 '45 degrees in radians
            height = 1#

            'Add a SimpleNote
            Set dsSimpleNote = dsSketchManager.InsertSimpleNote(startX, startY, startZ, height, angle, noteValue)

            If Not dsSimpleNote Is Nothing Then
                MsgBox "A SimpleNote was added to drawing."
            End If

        Else

            MsgBox "There are no open documents in DraftSight."

        End If

        'Change SimpleNote text
        ChangeSimpleNotesText dsDoc, dsSketchManager

    End Sub

        Sub ChangeSimpleNotesText(ByVal dsDoc As DraftSight.Document, ByVal dsSketchManager As DraftSight.SketchManager)

            'Get Selection Manager
            Dim dsSelectionMgr As DraftSight.SelectionManager
            Set dsSelectionMgr = dsDoc.GetSelectionManager()

            'Get selection filter
            Dim dsSelectionFilter As DraftSight.SelectionFilter
            Set dsSelectionFilter = dsSelectionMgr.GetSelectionFilter()

            'Clear selection filter
            dsSelectionFilter.Clear

            'Add filter to get only SimpleNotes
            dsSelectionFilter.AddEntityType (dsObjectType_e.dsSimpleNoteType)

            'Activate selection filter
            dsSelectionFilter.Active = True

            'Get all Layer names
            Dim layerNames As Variant
            layerNames = GetLayers(dsDoc)

            Dim entityTypes As Variant
            Dim entityObjects As Variant
            Dim entityItem As Variant

            'Get SimpleNote entities
            dsSketchManager.GetEntities dsSelectionFilter, layerNames, entityTypes, entityObjects

            Const newNoteValue As String = "New sample text"

            If Not IsArray(entityObjects) Then
                Debug.Print ("   Document does not have any SimpleNotes.")
                Debug.Print (" ")
            Else
                Debug.Print ("   Document has SimpleNotes.")
                'Iterate through SimpleNotes
                For Each entityItem In entityObjects
                    'Cast to SimpleNote
                    Dim dsSimpleNote As DraftSight.SimpleNote
                    Set dsSimpleNote = entityItem
                    'Get SimpleNote
                    Dim simpleNoteText As String
                    simpleNoteText = dsSimpleNote.Contents
                    'Set new SimpleNote text
                    dsSimpleNote.Contents = newNoteValue

                Next
                Debug.Print (" ")
            End If

        End Sub

        Public Function GetLayers(ByVal dsDoc As Document) As String()
            'Get Layer Manager
            Dim dsLayerManager As DraftSight.LayerManager
            Set dsLayerManager = dsDoc.GetLayerManager
            Dim dsLayers() As Object

    	'Get Layers
            dsLayers = dsLayerManager.GetLayers()
            Dim dslayerNames() As String
            Dim nbrLayers As Long
            nbrLayers = UBound(dsLayers)
            ReDim dslayerNames(nbrLayers)

            Dim index As Long
            For index = 0 To nbrLayers
                Dim dsLayer As DraftSight.Layer
                Set dsLayer = dsLayers(index)
                dslayerNames(index) = dsLayer.Name
            Next

            GetLayers = dslayerNames

        End Function