# Rotate and Copy Entities Example (VBA)

This example shows how to rotate and copy selected entities.

    '--------------------------------------------------------------
    ' 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 new document.
    ' 5. Construct these three entities: Circle, Spline, and Ellipse.
    ' 6. Run the macro.
    '
    ' Postconditions:
    ' 1. When the prompt appears in the DraftSight command window,
    '    select the Circle and Ellipse entities and press
    '    the Enter key. The selected entities are rotated.
    ' 2. Execution stops so that you can examine the drawing to
    '    verify that the selected entities were rotated. Click the
    '    Continue button in the IDE to continue.
    ' 3. The selected entities are copied.
    '----------------------------------------------------------------
    Option Explicit

    Dim dsApp As DraftSight.Application

    Sub main()

            '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()

            '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 Circle and Ellipse entity types to the selection filter
            Dim entityType As Variant
            Dim entityArray As Variant
            entityArray = Array(dsObjectType_e.dsCircleType, dsObjectType_e.dsEllipseArcType)

            For Each entityType In entityArray
                dsSelectionFilter.AddEntityType (entityType)
            Next

            'Activate selection filter
            dsSelectionFilter.Active = True

            'Get command message object
            Dim dsCommandMessage As CommandMessage
            Set dsCommandMessage = dsApp.GetCommandMessage

            'Clear previous selection
            dsSelectionMgr.ClearSelections (dsSelectionSetType_Previous)

            'Prompt user to select the Circle and the Ellipse
            Dim singleSelection As Boolean
            singleSelection = False
            Dim prompt As String
            prompt = "Select the Circle and Ellipse entities"
            Dim errorMessage As String
            errorMessage = "Unknown entity"

            Dim statusSelect As Boolean
            statusSelect = dsCommandMessage.PromptForSelection(singleSelection, prompt, errorMessage)

            If statusSelect Then

                'Get number of selected entities
                Dim count As Long
                count = dsSelectionMgr.GetSelectedObjectCount(dsSelectionSetType_e.dsSelectionSetType_Previous)
                If count <> 2 Then
                    Debug.Print ("You did not select the two entities. Rerun the macro and try again.")
                    End
                End If

                Dim dsEntityType As dsObjectType_e
                Dim dsEntities() As Object
                Dim dsEntityTypes() As dsObjectType_e
                ReDim dsEntities(count - 1)
                ReDim dsEntityTypes(count - 1)

                'Get selected entities
                Dim index As Long
                index = 0
                For index = 0 To (count - 1)
                    Dim selectedEntity As Object
                    Set selectedEntity = dsSelectionMgr.GetSelectedObject(dsSelectionSetType_Previous, index, dsEntityType)
                    dsEntityTypes(index) = dsEntityType
                    Set dsEntities(index) = selectedEntity
                Next

                'Rotation parameters
                Dim pivotPointX As Double
                pivotPointX = 0#
                Dim pivotPointY As Double
                pivotPointY = 0#
                Dim rotateAngle As Double
                rotateAngle = 3.14159265358979 / 4 ' In radians

                'Rotate entities
                dsSketchMgr.RotateEntities pivotPointX, pivotPointY, rotateAngle, dsEntityTypes, dsEntities

                'Stop execution
                'Examine the document
                Stop

                'Click the Continue button in the IDE

                'Copy parameters
                Dim displacementX As Double
                displacementX = 2#
                Dim displacementY As Double
                displacementY = 2#
                Dim displacementZ As Double
                displacementZ = 0#

                'Copy entities
                dsSketchMgr.CopyEntities displacementX, displacementY, displacementZ, dsEntityTypes, dsEntities

            End If

    End Sub