Get Maximum Edge and Vertex Gaps Example (VB.NET)
This macro returns the same data returned by the Tools
> Check dialog box when the checkboxes, Maximum edge gap
and Maximum vertex gap, are selected. This macro uses IEdge::IsTolerant
to determine whether common edges are within tolerance of one another. This macro uses IVertex::IsTolerant
to determine whether common vertexes are within tolerance of one another. This macro iterates over each edge and vertex in a part and reports the
following:
*
whether
the edge or vertex is:
a.
tolerant (distance to neighbor is greater than 5.0E-9 mm)
b.
exact (distance to neighbor is less than or equal to 5.0E-9 mm)
*
gap size
(or tolerance) in mm of each edge or vertex
*
maximum
edge gap (or tolerance) in mm for the part
*
maximum
vertex gap (or tolerance) in mm for the part
'----------------------------------------------------------------------------
'
1. Open
a part that contains gaps between common edges and/or vertexes
'
(e.g.,
<install_dir>\samples\tutorial\assemblymates\head.sldprt).
'
2. Open
an immediate window to view runtime messages.
'
3. Run
this macro.
'
4. Move
cursor across the part in the SolidWorks window.
' The
tolerant edges and vertexes are selected in each body of the part,
'
and
tolerance data for all edges and vertexes is printed in the
' Immediate
window.
'------------------------------------------------------------------------
Imports SolidWorks.Interop.sldworks
Imports SolidWorks.Interop.swconst
Imports System
Imports System.Diagnostics
Partial Class SolidWorksMacro
Public
Enum swBodyType_e
swAllBodies
= -1
swSolidBody
= 0
swSheetBody
= 1
swWireBody
= 2
swMinimumBody
= 3
swGeneralBody
= 4
swEmptyBody
= 5
End
Enum
Sub
main()
Dim
swModel As ModelDoc2
Dim
swPart As PartDoc
Dim
vBodyArr As Object
Dim
vBody As Object
Dim
swBody As Body2
Dim
vEdgeArr As Object
Dim
vEdge As Object
Dim
swEdge As Edge
Dim
vVertexArr As Object
Dim
vVertex As Object
Dim
swVertex As Vertex
Dim
swFaultEnt As FaultEntity
Dim
bRet As Boolean
Dim
tol As Double
Dim
swTanEnt As Entity
swModel
= swApp.ActiveDoc
swPart
= swModel
Debug.Print("File
= " & swModel.GetPathName)
vBodyArr
= swPart.GetBodies2(swBodyType_e.swAllBodies, True)
For
Each vBody In vBodyArr
swBody
= vBody
Debug.Print("
Body["
& swBody.GetType & "] --> " & swBody.GetSelectionId)
vEdgeArr
= swBody.GetEdges
vVertexArr
= swBody.GetVertices
Dim
maxEdgeGap As Double
maxEdgeGap
= 0.0#
For
Each vEdge In vEdgeArr
'
Find maximum edge gap which mirrors the user interface functionality in
Tools > Check when Maximum
edge gap is selected
swEdge
= vEdge
bRet
= swEdge.IsTolerant(tol)
If
maxEdgeGap < tol Then
maxEdgeGap
= tol
End
If
If
(Not (bRet = False)) Then
Debug.Print("Edge
is tolerant: ")
Debug.Print("
Tolerance
= " & tol)
swTanEnt
= swEdge
bRet
= swTanEnt.Select4(True, Nothing)
Else
Debug.Print("Edge
is exact: Tolerance
= " & tol)
End
If
swFaultEnt
= swEdge.Check
Next
vEdge
Debug.Print("")
Debug.Print("Maximum
edge gap is " & maxEdgeGap)
Debug.Print("")
Dim
maxVertexGap As Double
maxVertexGap
= 0.0#
For
Each vVertex In vVertexArr
'
Find maximum vertex gap which mirrors the user interface functionality
in Tools > Check when Maximum vertex gap is selected
swVertex
= vVertex
bRet
= swVertex.IsTolerant(tol)
If
maxVertexGap < tol Then
maxVertexGap
= tol
End
If
If
(Not (bRet = False)) Then
Debug.Print("Vertex
is tolerant: ")
Debug.Print("
Tolerance
= " & tol)
swTanEnt
= swVertex
bRet
= swTanEnt.Select4(True, Nothing)
Else
Debug.Print("Vertex
is exact: Tolerance
= " & tol)
End
If
Next
vVertex
Debug.Print("")
Debug.Print("Maximum
vertex gap is " & maxVertexGap)
Debug.Print("")
Next
vBody
End
Sub
'''
<summary>
'''
The SldWorks swApp variable is pre-assigned for you.
'''
</summary>
Public
swApp As SldWorks
End Class