Create Aligned Linear and Ordinate Dimensions Example (VBA)

This example shows how to create aligned linear and ordinate Dimensions for a closed PolyLine and Circles. A Leader and a geometric tolerance are also created.

'-------------------------------------------------------------
' 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:
'    install_dir\bin\dsAutomation.dll
' 4. Start DraftSight and open a document.
' 5. Run the macro.
'
' Postconditions:
' 1. A closed PolyLine and four Circles are constructed.
' 2. Aligned linear and ordinate Dimensions are created.
'------------------------------------------------------------
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
        '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 model space
        Dim dsModel As DraftSight.Model
        Set dsModel = dsDoc.GetModel()
        'Get sketch manager
        Dim dsSketchMgr As DraftSight.SketchManager
        Set dsSketchMgr = dsModel.GetSketchManager()
        'Construct a closed PolyLine
        Dim coordinates(7) As Double
        coordinates(0) = 2
        coordinates(1) = 2
        coordinates(2) = 8
        coordinates(3) = 2
        coordinates(4) = 8
        coordinates(5) = 8
        coordinates(6) = 2
        coordinates(7) = 8
        Dim closed As Boolean
        closed = True
        Dim dsPolyline As DraftSight.PolyLine
        Set dsPolyline = dsSketchMgr.InsertPolyline2D(coordinates, closed)
        'Construct four Circles
        Dim centerX As Double
        centerX = 3.5
        Dim centerY As Double
        centerY = 3.5
        Dim centerZ As Double
        centerZ = 0#
        Dim radius As Double
        radius = 0.7
        Dim dsFirstCircle As DraftSight.Circle
        Set dsFirstCircle = dsSketchMgr.InsertCircle(centerX, centerY, centerZ, radius)
        centerX = 6.5
        Dim dsSecondCircle As DraftSight.Circle
        Set dsSecondCircle = dsSketchMgr.InsertCircle(centerX, centerY, centerZ, radius)
        centerX = 6.5
        centerY = 6.5
        Dim dsThirdCircle As DraftSight.Circle
        Set dsThirdCircle = dsSketchMgr.InsertCircle(centerX, centerY, centerZ, radius)
        centerX = 3.5
        Dim dsFourthCircle As DraftSight.Circle
        Set dsFourthCircle = dsSketchMgr.InsertCircle(centerX, centerY, centerZ, radius)
        'Add aligned linear Dimensions
        Dim extLine1Point(2) As Double
        extLine1Point(0) = 2
        extLine1Point(1) = 2
        extLine1Point(2) = 0
        Dim extLine2Point(2) As Double
        extLine2Point(0) = 8
        extLine2Point(1) = 2
        extLine2Point(2) = 0
        Dim dimLinePoint(2) As Double
        dimLinePoint(0) = 5
        dimLinePoint(1) = 1
        dimLinePoint(2) = 0
        Dim dimensionTextOverride As String
        dimensionTextOverride = ""
        Dim dsFirstAlignedDim As DraftSight.AlignedDimension
        Set dsFirstAlignedDim = dsSketchMgr.InsertAlignedDimension(extLine1Point, extLine2Point, dimLinePoint, dimensionTextOverride)
        extLine1Point(0) = 8
        extLine1Point(1) = 2
        extLine2Point(0) = 8
        extLine2Point(1) = 8
        dimLinePoint(0) = 9
        dimLinePoint(1) = 5
        Dim dsSecondAlignedDim As DraftSight.AlignedDimension
        Set dsSecondAlignedDim = dsSketchMgr.InsertAlignedDimension(extLine1Point, extLine2Point, dimLinePoint, dimensionTextOverride)
        'Add ordinate Dimensions
        Dim measure As dsOrdinateDimensionMeasure_e
        measure = dsOrdinateDimensionMeasure_e.dsOrdinateDimensionMeasure_UseYAxis
        Dim datumPosition(2) As Double
        datumPosition(0) = 2
        datumPosition(1) = 2
        datumPosition(2) = 0
        Dim dimPosition(2) As Double
        dimPosition(0) = 1
        dimPosition(1) = 2
        dimPosition(2) = 0
        Dim dsFirstOrdinateDim As DraftSight.OrdinateDimension
        Set dsFirstOrdinateDim = dsSketchMgr.InsertOrdinateDimension(datumPosition, dimPosition, dimensionTextOverride, measure)
        datumPosition(1) = 8
        dimPosition(1) = 8
        Dim dsSecondOrdinateDim As DraftSight.OrdinateDimension
        Set dsSecondOrdinateDim = dsSketchMgr.InsertOrdinateDimension(datumPosition, dimPosition, dimensionTextOverride, measure)
        'Add Leader
        Dim leaderCoordinates(5) As Double
        leaderCoordinates(0) = 6.5
        leaderCoordinates(1) = 7.2
        leaderCoordinates(2) = 0
        leaderCoordinates(3) = 7.7
        leaderCoordinates(4) = 8.6
        leaderCoordinates(5) = 0
        Dim noteWidth As Double
        noteWidth = 1#
        Dim noteText As String
        noteText = "4X"
        Dim dsLeader As DraftSight.Leader
        Set dsLeader = dsSketchMgr.InsertLeader(leaderCoordinates, noteWidth, noteText)
        'Add a geometric tolerance
        Dim tolerancePosition(2) As Double
        tolerancePosition(0) = 8.2
        tolerancePosition(1) = 8.6
        tolerancePosition(2) = 0
        Dim textString As String
        textString = "{\Fgdt;j}%%v{\Fgdt;n}0.7{\Fgdt;m}"
        Dim dsTolerance As DraftSight.Tolerance
        Set dsTolerance = dsSketchMgr.InsertTolerance(tolerancePosition, textString)
        'Zoom to fit
        dsApp.Zoom dsZoomRange_e.dsZoomRange_Fit, Nothing, Nothing
    End Sub