This example shows how to create a polygon face mesh.
'-------------------------------------------------------------- ' 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 polygon face mesh is created and zoomed to fit. ' 2. All polygon mesh face 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()
'Polygon face mesh parameters Dim verticesCount As Integer verticesCount = 8
Dim coordinatesArray() As Variant coordinatesArray = Array(2#, 2#, 0#, 2#, 6#, 0#, _ 6#, 6#, 0#, 6#, 2#, 0#, 2#, 2#, _ 2#, 2#, 6#, 2#, 6#, 6#, 2#, 6#, 2#, 2#)
Dim faceVerticesCountArray() As Variant faceVerticesCountArray = Array(4, 4, 4, 4, 4, 4)
Dim faceVerticesArray() As Variant faceVerticesArray = Array(1, 2, 3, 4, 5, 6, 7, 8, _ 1, 5, 8, 4, 2, 6, 7, 3, 3, 7, 8, _ 4, 1, 2, 6, 5)
Dim coordinatesDoubleArray() As Double Dim i As Long Dim arraySize As Long arraySize = UBound(coordinatesArray) ReDim coordinatesDoubleArray(arraySize) For i = 0 To arraySize coordinatesDoubleArray(i) = coordinatesArray(i) Next i
Dim faceVerticesCountLongArray() As Long arraySize = UBound(faceVerticesCountArray) ReDim faceVerticesCountLongArray(arraySize) For i = 0 To arraySize faceVerticesCountLongArray(i) = faceVerticesCountArray(i) Next i
Dim faceVerticesLongArray() As Long arraySize = UBound(faceVerticesArray) ReDim faceVerticesLongArray(arraySize) For i = 0 To arraySize faceVerticesLongArray(i) = faceVerticesArray(i) Next i
'Add polygon face mesh Dim dsPolyFaceMesh As DraftSight.PolyFaceMesh Set dsPolyFaceMesh = dsSketchMgr.InsertPolyFaceMesh(verticesCount, coordinatesDoubleArray, faceVerticesCountLongArray, faceVerticesLongArray)
If Not dsPolyFaceMesh Is Nothing Then 'Zoom to fit dsApp.Zoom dsZoomRange_e.dsZoomRange_Fit, Nothing, Nothing
'Print Polygon face mesh properties PrintParameters dsPolyFaceMesh Else MsgBox ("Polygon face mesh entity was not added to the current drawing.") End If
End Sub
Sub PrintParameters(ByVal dsPolyFaceMesh As DraftSight.PolyFaceMesh) Debug.Print ("Polygon face mesh parameters...")
'Print common entity parameters Debug.Print ("Handle = " & dsPolyFaceMesh.Handle) Debug.Print ("Color = " & dsPolyFaceMesh.Color.GetNamedColor()) Debug.Print ("Erased = " & dsPolyFaceMesh.Erased) Debug.Print ("Layer = " & dsPolyFaceMesh.Layer) Debug.Print ("LineScale = " & dsPolyFaceMesh.LineScale) Debug.Print ("LineStyle = " & dsPolyFaceMesh.LineStyle) Debug.Print ("LineWeight = " & dsPolyFaceMesh.LineWeight) Debug.Print ("Visible = " & dsPolyFaceMesh.Visible)
Dim x1 As Double, y1 As Double, z1 As Double Dim x2 As Double, y2 As Double, z2 As Double dsPolyFaceMesh.GetBoundingBox x1, y1, z1, x2, y2, z2 Debug.Print ("BoundingBox: " & x1 & ", " & y1 & ", " & z1 & ", " & x2 & ", " & y2 & ", " & z2)
'Print polygon face mesh faces Dim countFaces As Long countFaces = dsPolyFaceMesh.GetFacesCount Debug.Print ("Count of faces = " & countFaces) Dim faceIndex As Long For faceIndex = 0 To dsPolyFaceMesh.GetFacesCount() - 1 Dim corner1Vertex As Long, corner2Vertex As Long, corner3Vertex As Long, corner4Vertex As Long dsPolyFaceMesh.GetFace faceIndex, corner1Vertex, corner2Vertex, corner3Vertex, corner4Vertex Debug.Print ("Face(0) : (1),(2),(3),(4) " & faceIndex & " : " & corner1Vertex & ", " & corner2Vertex & ", " & corner3Vertex & ", " & corner4Vertex)
Next
'Print polygon face mesh vertices Dim countVertices As Long countVertices = dsPolyFaceMesh.GetVerticesCount Debug.Print ("Count of vertices = " & countVertices) Dim vertexIndex As Long For vertexIndex = 0 To dsPolyFaceMesh.GetVerticesCount() - 1 Dim x As Double, y As Double, z As Double dsPolyFaceMesh.GetVertexCoordinate vertexIndex, x, y, z Debug.Print ("Vertex (0) : (1),(2),(3) " & vertexIndex & " : " & x & ", " & y & ", " & z) Next
End Sub