# Create PolygonMesh Example (VBA)

This example shows how to create a PolygonMesh.

    '--------------------------------------------------------------
    ' 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. Open the Immediate window.
    ' 5. Start DraftSight and open a drawing document.
    ' 6. Run the macro.
    '
    ' Postconditions:
    ' 1. A PolygonMesh is created and zoomed to fit.
    ' 2. All PolygonMesh parameters are printed to the Immediate
    '    window.
    '------------------------------------------------------------

    Option Explicit

        Sub Main()

            'Connect to DraftSight application
            Dim dsApp As 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.")
                End
            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()

            'PolygonMesh parameters
            Dim coordinatesArray() As Variant
            coordinatesArray = Array(0#, 0#, -4#, -1.53073372946036, 0#, -3.69551813004515, _
             -2.82842712474619, 0#, -2.82842712474619, -3.69551813004515, 0#, -1.53073372946036, _
             -4#, 0#, 0#, 0#, 0#, -4#, _
             -0.76536686473018, -1.32565429614237, -3.69551813004515, -1.4142135623731, -2.44948974278318, -2.82842712474619, _
             -1.84775906502257, -3.20041258076506, -1.53073372946036, -2#, -3.46410161513776, 0#, _
             0#, 0#, -4#, 0.765366864730179, -1.32565429614237, -3.69551813004515, _
             1.41421356237309, -2.44948974278318, -2.82842712474619, 1.84775906502257, -3.20041258076506, -1.53073372946036, _
             2#, -3.46410161513776, 0#, 0#, 0#, -4#, _
             1.53073372946036, 0#, -3.69551813004515, 2.82842712474619, 0#, -2.82842712474619, _
             3.69551813004515, 0#, -1.53073372946036, 4#, 0#, 0#, _
             0#, 0#, -4#, 0.76536686473018, 1.32565429614237, -3.69551813004515, _
             1.4142135623731, 2.44948974278318, -2.82842712474619, 1.84775906502257, 3.20041258076506, -1.53073372946036, _
             2#, 3.46410161513775, 0#, 0#, 0#, -4#, _
             -0.765366864730179, 1.32565429614237, -3.69551813004515, -1.41421356237309, 2.44948974278318, -2.82842712474619, _
             -1.84775906502257, 3.20041258076506, -1.53073372946036, -2#, 3.46410161513776, 0#)

            Dim mVertexCount As Long
            mVertexCount = 6

            Dim nVertexCount As Long
            nVertexCount = 5

            Dim coordinatesDoubleArray() As Double
    	Dim nbrArrayElements As Long
            nbrArrayElements = (mVertexCount * nVertexCount) * 3
            ReDim coordinatesDoubleArray(nbrArrayElements - 1)

            Dim i As Long
            For i = 0 To (nbrArrayElements - 1)
                coordinatesDoubleArray(i) = coordinatesArray(i)
            Next i

            'Add PolygonMesh
            Dim dsPolygonMesh As DraftSight.PolygonMesh
            Set dsPolygonMesh = dsSketchMgr.InsertPolygonMesh(mVertexCount, nVertexCount, coordinatesDoubleArray)

            'Make PolygonMesh continuous from the last row to the first row
            dsPolygonMesh.MClosed = True

            'Zoom to fit
            dsApp.Zoom dsZoomRange_e.dsZoomRange_Fit, Nothing, Nothing

            'Print PolygonMesh properties
            PrintParameters dsPolygonMesh
        End Sub

        Sub PrintParameters(ByVal dsPolygonMesh As DraftSight.PolygonMesh)
            Debug.Print ("Polygon mesh parameters...")

            'Print common entity parameters
            Debug.Print ("Handle = " & dsPolygonMesh.Handle)
            Debug.Print ("Color = " & dsPolygonMesh.Color.GetNamedColor())
            Debug.Print ("Erased = " & dsPolygonMesh.Erased)
            Debug.Print ("Layer = " & dsPolygonMesh.Layer)
            Debug.Print ("LineScale = " & dsPolygonMesh.LineScale)
            Debug.Print ("LineStyle = " & dsPolygonMesh.LineStyle)
            Debug.Print ("LineWeight = " & dsPolygonMesh.LineWeight)
            Debug.Print ("Visible = " & dsPolygonMesh.Visible)

            Dim x1 As Double, y1 As Double, z1 As Double
            Dim x2 As Double, y2 As Double, z2 As Double
            dsPolygonMesh.GetBoundingBox x1, y1, z1, x2, y2, z2
            Debug.Print ("BoundingBox: " & x1 & ", " & y1 & ", " & z1 & ", " & x2 & ", " & y2 & ", " & z2)

            'Print PolygonMesh parameters
            Debug.Print ("FitSmooth = " & dsPolygonMesh.FitSmooth)
            Debug.Print ("NDensity = " & dsPolygonMesh.NDensity)
            Debug.Print ("MDensity = " & dsPolygonMesh.MDensity)
            Debug.Print ("NClosed = " & dsPolygonMesh.NClosed)
            Debug.Print ("MClosed = " & dsPolygonMesh.MClosed)
            Debug.Print ("MVertexCount = " & dsPolygonMesh.GetMVertexCount())
            Debug.Print ("NVertexCount = " & dsPolygonMesh.GetNVertexCount())

            'Print PolygonMesh coordinates
            Debug.Print ("Coordinates of polygon mesh vertices:")
            Dim vertexIndex As Long
            For vertexIndex = 0 To dsPolygonMesh.GetVerticesCount() - 1
                Dim x As Double, y As Double, z As Double
                dsPolygonMesh.GetVertexCoordinate vertexIndex, x, y, z

                Debug.Print ("Vertex " & vertexIndex & ": (1),(2),(3): " & x & ", " & y & ", " & z)
                Next
        End Sub