Hide Table of Contents

Get Hatch and Hatch Boundary Loop Data Example (VB.NET)

This example shows how to get Hatch and Hatch boundary loop data.

 

'--------------------------------------------------------------
' Preconditions:
' 1. Create a VB.NET Windows console project.
' 2. Copy and paste this project into the VB.NET IDE.
' 3. Add a reference to:
'    install_dir\APISDK\tlb\DraftSight.Interop.dsAutomation.dll.
' 4. Add references to System and System.Windows.Forms.
' 5. Start DraftSight, construct a Circle, Rectangle, Spline, or
'    Ellipse, and apply a Hatch to the entity.
' 6. Open the Immediate window.
' 7. Start debugging the project.
'
' Postconditions:
' 1.
When the prompt appears in the DraftSight command window to
'    select an entity, select the entity with the Hatch.

' 2. The selected entity's Hatch and Hatch boundary loop data is printed  
'    to the Immediate Window.
'----------------------------------------------------------------


Imports System.Collections.Generic
Imports System.Text
Imports DraftSight.Interop.dsAutomation
Imports System.Runtime.InteropServices
Imports System.Windows.Forms
Imports System.Diagnostics

Module Module1

    
Dim dsApp As DraftSight.Interop.dsAutomation.Application

    
Sub Main()
        
'Connect to DraftSight application
        dsApp = GetObject(, "DraftSight.Application")


        
'Get active document
        Dim dsDoc As Document = dsApp.GetActiveDocument()
        
If dsDoc Is Nothing Then
            MessageBox.Show("There are no open documents in DraftSight.")
            
Return
        End If

       
dsApp.AbortRunningCommand(); ' abort any command currently running in DraftSight to avoid nested commands

        'Get Selection Manager
        Dim dsSelectionMgr As SelectionManager = dsDoc.GetSelectionManager()

        
'Get selection filter
        Dim dsSelectionFilter As SelectionFilter = dsSelectionMgr.GetSelectionFilter()

        
'Clear selection filter
        dsSelectionFilter.Clear()

        
'Add hatch entity to the selection filter
        dsSelectionFilter.AddEntityType(dsObjectType_e.dsHatchType)

        
'Activate selection filter
        dsSelectionFilter.Active = True

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

        
'Prompt user to select a Hatch entity
        'and get whether selected entity is a Hatch entity
        Dim singleSelection As Boolean = True
        Dim prompt As String = "Please select a Hatch entity."
        Dim errorMessage As String = "Selected entity is not a Hatch entity."
        If dsCommandMessage.PromptForSelection(singleSelection, prompt, errorMessage) Then
            'Get selected entity
            Dim index As Integer = 0
            
Dim entityType As dsObjectType_e
            
Dim selectedEntity As Object = dsSelectionMgr.GetSelectedObject(dsSelectionSetType_e.dsSelectionSetType_Previous, index, entityType)

            
If dsObjectType_e.dsHatchType <> entityType Then
                MessageBox.Show(entityType & " was selected, but should be Hatch entity.")
            
Else
                Dim dsHatch As Hatch = TryCast(selectedEntity, Hatch)
                PrintHatchParameters(dsHatch)
            
End If
        End If
    End Sub

    Sub PrintHatchParameters(ByVal dsHatch As Hatch)
        Debug.Print(Environment.NewLine &
"Hatch parameters:")

        Debug.Print(
"Color = " & dsHatch.Color.GetNamedColor())
        Debug.Print(
"LineScale = " & Convert.ToString(dsHatch.LineScale))
        Debug.Print(
"LineStyle = " & Convert.ToString(dsHatch.LineStyle))
        Debug.Print(
"LineWeight = " & Convert.ToString(dsHatch.LineWeight))
        Debug.Print(
"Layer = " & Convert.ToString(dsHatch.Layer))
        Debug.Print(
"Visible = " & Convert.ToString(dsHatch.Visible))
        Debug.Print(
"Erased = " & Convert.ToString(dsHatch.Erased))
        Debug.Print(
"Handle = " & Convert.ToString(dsHatch.Handle))

        
Dim x1 As Double, y1 As Double, z1 As Double
        Dim x2 As Double, y2 As Double, z2 As Double
        dsHatch.GetBoundingBox(x1, y1, z1, x2, y2, z2)
        Debug.Print(
String.Format("BoundingBox: ({0},{1},{2}) and ({3},{4},{5})", x1, y1, z1, x2, y2, _
         z2))

        
'Iterate through Hatch boundary loops
        Dim loopsCount As Integer = dsHatch.GetBoundaryLoopsCount()
        Debug.Print(
"Count of loops = " & loopsCount)
        
For index As Integer = 0 To loopsCount - 1
            Debug.Print(
"Loop(" & index & "):")

            
'Get Hatch boundary loop
            Dim dsHatchBoundaryLoop As DraftSight.Interop.dsAutomation.HatchBoundaryLoop = dsHatch.GetHatchBoundaryLoop(index)

            Debug.Print(
"Type = " + Convert.ToString(dsHatchBoundaryLoop.Type))
            Debug.Print(
"IsPolyline = " + Convert.ToString(dsHatchBoundaryLoop.IsPolyLine))

            
If dsHatchBoundaryLoop.IsPolyLine Then
                'Get 2D PolyLine boundary loop data
                GetPolyLineBoundaryLoopData(dsHatchBoundaryLoop)
            
Else
                'Get edges count
                Dim edgesCount As Integer = dsHatchBoundaryLoop.GetEdgesCount()
                Debug.Print(
"Edges count = " & edgesCount)
                
For edgeIndex As Integer = 0 To edgesCount - 1
                    
Dim edgeType As dsHatchEdgeType_e = dsHatchBoundaryLoop.GetEdgeType(edgeIndex)
                    Debug.Print(
"Edge type = " & edgeType)

                    
Select Case edgeType
                        
Case dsHatchEdgeType_e.dsHatchEdgeType_Line
                            
If True Then
                                'Get Line edge data
                                GetLineEdgeData(dsHatchBoundaryLoop, edgeIndex)

                                
Exit Select
                            End If
                        Case dsHatchEdgeType_e.dsHatchEdgeType_CircleArc
                            
If True Then
                                'Get Circle edge data
                                GetArcEdgeData(dsHatchBoundaryLoop, edgeIndex)

                                
Exit Select
                            End If
                        Case dsHatchEdgeType_e.dsHatchEdgeType_EllipseArc
                            
If True Then
                                'Get Ellipse edge data
                                GetEllipseEdgeData(dsHatchBoundaryLoop, edgeIndex)

                                
Exit Select
                            End If
                        Case dsHatchEdgeType_e.dsHatchEdgeType_Spline
                            
If True Then
                                'Get Spline edge data
                                GetSplineEdgeData(dsHatchBoundaryLoop, edgeIndex)

                                
Exit Select
                            End If
                    End Select
                Next
            End If
        Next
    End Sub

    Sub GetSplineEdgeData(ByVal dsHatchBoundaryLoop As HatchBoundaryLoop, ByVal edgeIndex As Integer)
        
Dim degree As Integer
        Dim rational As Boolean
        Dim periodic As Boolean
        Dim knotValues As Object
        Dim controlPoints As Object
        dsHatchBoundaryLoop.GetSplineEdgeData(edgeIndex, degree, rational, periodic, knotValues, controlPoints)
        Debug.Print(
"Spline edge data:")
        Debug.Print(
"   Degree = " & degree)
        Debug.Print(
"   Rational = " & rational)
        Debug.Print(
"   Periodic = " & periodic)

        
If knotValues IsNot Nothing Then
            Dim knotValuesDblArray As Double() = DirectCast(knotValues, Double())
            
If knotValuesDblArray IsNot Nothing Then
                For index As Integer = 0 To knotValuesDblArray.Length - 1
                    Debug.Print(
"   Knot(" & index & "):" & knotValuesDblArray(index))
                
Next
            End If
        End If

        If controlPoints IsNot Nothing Then
            Dim controlPointsDblArray As Double() = DirectCast(controlPoints, Double())
            
If controlPointsDblArray IsNot Nothing Then
                Dim controlPointIndex As Integer = 0
                
For index As Integer = 0 To controlPointsDblArray.Length - 1 Step 2
                    Debug.Print(
String.Format("   Control point({0}): ({1},{2})", controlPointIndex, controlPointsDblArray(index), controlPointsDblArray(index + 1)))

                    controlPointIndex += 1
                
Next
            End If
        End If
    End Sub

    Sub GetEllipseEdgeData(ByVal dsHatchBoundaryLoop As HatchBoundaryLoop, ByVal edgeIndex As Integer)
        
Dim centerX As Double
        Dim centerY As Double
        Dim majorAxisX As Double
        Dim majorAxisY As Double
        Dim minorAxisLengthRatio As Double
        Dim startAngle As Double
        Dim endAngle As Double
        Dim isCounterclockwiseFlag As Boolean
        dsHatchBoundaryLoop.GetEllipseEdgeData(edgeIndex, centerX, centerY, majorAxisX, majorAxisY, minorAxisLengthRatio, _
         startAngle, endAngle, isCounterclockwiseFlag)
        Debug.Print(
"Ellipse edge data:")
        Debug.Print(
"   Center X = " & centerX)
        Debug.Print(
"   Center Y = " & centerY)
        Debug.Print(
"   Major axis X = " & majorAxisX)
        Debug.Print(
"   Major axis Y = " & majorAxisY)
        Debug.Print(
"   Minor axis length ratio = " & minorAxisLengthRatio)
        Debug.Print(
"   Start angle = " & startAngle)
        Debug.Print(
"   End angle = " & endAngle)
        Debug.Print(
"   Is counter-clockwise = " & isCounterclockwiseFlag)
    
End Sub

    Sub GetArcEdgeData(ByVal dsHatchBoundaryLoop As HatchBoundaryLoop, ByVal edgeIndex As Integer)
        
Dim centerX As Double
        Dim centerY As Double
        Dim radius As Double
        Dim startAngle As Double
        Dim endAngle As Double
        Dim isCounterclockwiseFlag As Boolean
        dsHatchBoundaryLoop.GetArcEdgeData(edgeIndex, centerX, centerY, radius, startAngle, endAngle, _
         isCounterclockwiseFlag)
        Debug.Print(
"Arc edge data:")
        Debug.Print(
"   Center X = " & centerX)
        Debug.Print(
"   Center Y = " & centerY)
        Debug.Print(
"   Radius = " & radius)
        Debug.Print(
"   Start angle = " & startAngle)
        Debug.Print(
"   End angle = " & endAngle)
        Debug.Print(
"   Is counter-clockwise = " & isCounterclockwiseFlag)
    
End Sub

    Sub GetLineEdgeData(ByVal dsHatchBoundaryLoop As HatchBoundaryLoop, ByVal edgeIndex As Integer)
        
Dim startPointX As Double
        Dim startPointY As Double
        Dim endPointX As Double
        Dim endPointY As Double
        dsHatchBoundaryLoop.GetLineEdgeData(edgeIndex, startPointX, startPointY, endPointX, endPointY)
        Debug.Print(
"Line edge data:")
        Debug.Print(
"   Start point X = " & startPointX)
        Debug.Print(
"   Start Point Y = " & startPointY)
        Debug.Print(
"   End point X = " & endPointX)
        Debug.Print(
"   End point Y = " & endPointY)
    
End Sub

    Sub GetPolyLineBoundaryLoopData(ByVal dsHatchBoundaryLoop As HatchBoundaryLoop)
        
Dim hasBulge As Boolean
        Dim isClosed As Boolean
        Dim coordinates As Object
        Dim bulges As Object
        dsHatchBoundaryLoop.GetPolyLineBoundaryLoopData(hasBulge, isClosed, coordinates, bulges)

        Debug.Print(
"2D PolyLine boundary loop data:")
        Debug.Print(
"   Has bulge = " & hasBulge)
        Debug.Print(
"   Is closed = " & isClosed)
        
If coordinates IsNot Nothing Then
            Dim coordinatesDblArray As Double() = DirectCast(coordinates, Double())
            
If coordinatesDblArray IsNot Nothing Then
                Dim vertexIndex As Integer = 0
                
For coordinateIndex As Integer = 0 To coordinatesDblArray.Length - 1 Step 2
                    Debug.Print(
String.Format("   Coordinate({0}): ({1},{2},{3})", System.Math.Max(System.Threading.Interlocked.Increment(vertexIndex), vertexIndex - 1), coordinatesDblArray(coordinateIndex), coordinatesDblArray(coordinateIndex + 1)))
                
Next
            End If
        End If

        If hasBulge AndAlso bulges IsNot Nothing Then
            Dim bulgesDblArray As Double() = DirectCast(bulges, Double())
            
If bulgesDblArray IsNot Nothing Then
                For bulgeIndex As Integer = 0 To bulgesDblArray.Length - 1
                    Debug.Print(
"   Bulge(" & bulgeIndex & "):" & bulgesDblArray(bulgeIndex))
                
Next
            End If
        End If
    End Sub

End
Module
 



Provide feedback on this topic

SOLIDWORKS welcomes your feedback concerning the presentation, accuracy, and thoroughness of the documentation. Use the form below to send your comments and suggestions about this topic directly to our documentation team. The documentation team cannot answer technical support questions. Click here for information about technical support.

* Required

 
*Email:  
Subject:   Feedback on Help Topics
Page:   Get Hatch and Hatch Boundary Loop Data Example (VB.NET)
*Comment:  
*   I acknowledge I have read and I hereby accept the privacy policy under which my Personal Data will be used by Dassault Systèmes

Print Topic

Select the scope of content to print:

x

We have detected you are using a browser version older than Internet Explorer 7. For optimized display, we suggest upgrading your browser to Internet Explorer 7 or newer.

 Never show this message again
x

Web Help Content Version: API Help (English only) 2019 SP05

To disable Web help from within SOLIDWORKS and use local help instead, click Help > Use SOLIDWORKS Web Help.

To report problems encountered with the Web help interface and search, contact your local support representative. To provide feedback on individual help topics, use the “Feedback on this topic” link on the individual topic page.