Insert Shapes Example (VBA)

This example shows how to load a shape file and insert the shapes in the loaded shape file into a drawing.

'--------------------------------------------------------------
' 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. Start debugging the project.
'
' Postconditions:
' 1. Gets the Shape Manager.
' 2. Loads a shape file.
' 3. Gets the shapes in the loaded shape file.
' 4. Inserts the shapes, with an obliquing angle of 30, in the drawing.
' 5. Examine the drawing.
'----------------------------------------------------------------
Option Explicit
    Sub Main()
        Dim dsApp As DraftSight.Application
        '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 Document
        Set dsDoc = dsApp.GetActiveDocument()
        If dsDoc Is Nothing Then
            MsgBox ("There are no open documents in DraftSight.")
            Return
        End If
        'Get the Shape Manager
        Dim dsShapeMgr As ShapeManager
        Set dsShapeMgr = dsDoc.GetShapeManager()
        'Load shape file LTypeShp.shx
        Dim shapeFileName As String
        shapeFileName = "C:\Program Files\Dassault Systemes\DraftSight\Fonts\LTypeShp.shx"
        dsShapeMgr.Load (shapeFileName)
        'Get shapes
        Dim shapesStrList As Variant
        shapesStrList = dsShapeMgr.GetAvailableShapes()
        Dim shapesCount As Long
        shapesCount = UBound(shapesStrList)
        'Get Sketch Manager
        Dim dsModel As DraftSight.Model
        Dim dsSketchMgr As DraftSight.SketchManager
        Set dsModel = dsDoc.GetModel
        Set dsSketchMgr = dsModel.GetSketchManager()
        'Insert shapes
        Dim PositionX As Double
        PositionX = 0#
        Dim PositionY As Double
        PositionY = 0#
        Dim PositionZ As Double
        PositionZ = 0#
        Dim i As Long
        For i = 0 To shapesCount - 1
            Dim dsShape As DraftSight.Shape
            Set dsShape = dsSketchMgr.InsertShape(shapesStrList(i), PositionX, PositionY, PositionZ, 1, 0#)
            'Change obliquing property
            Dim angle As Double
            angle = 3.14159265358979 
            dsShape.Obliquing = (30 * angle) / 180
            Dim X1 As Double, Y1 As Double, Z1 As Double, X2 As Double, Y2 As Double, Z2 As Double
            dsShape.GetBoundingBox X1, Y1, Z1, X2, Y2, Z2
            PositionX = PositionX + (X2 - X1) + 5            
        Next        
    End Sub