Get Maximum Edge and Vertex Gaps Example (C#)
// 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.
//-----------------------------------------------------------------------------------------------------------------------------------------------------
using SolidWorks.Interop.sldworks;
using SolidWorks.Interop.swconst;
using System;
using System.Diagnostics;
namespace GetMaximumEdgeandVertexGaps_CSharp.csproj
{
public
partial class SolidWorksMacro
{
public
enum swBodyType_e
{
swAllBodies
= -1,
swSolidBody
= 0,
swSheetBody
= 1,
swWireBody
= 2,
swMinimumBody
= 3,
swGeneralBody
= 4,
swEmptyBody
= 5
}
public
void Main()
{
ModelDoc2
swModel = default(ModelDoc2);
PartDoc
swPart = default(PartDoc);
object[]
vBodyArr = null;
Body2
swBody = default(Body2);
object[]
vEdgeArr = null;
Edge
swEdge = default(Edge);
object[]
vVertexArr = null;
Vertex
swVertex = default(Vertex);
FaultEntity
swFaultEnt = default(FaultEntity);
bool
bRet = false;
double
tol = 0;
Entity
swTanEnt = default(Entity);
swModel
= (ModelDoc2)swApp.ActiveDoc;
swPart
= (PartDoc)swModel;
Debug.Print("File
= " + swModel.GetPathName());
vBodyArr
= (Object[])swPart.GetBodies2((int)swBodyType_e.swAllBodies, true);
foreach
( Object vBody in vBodyArr)
{
swBody
= (Body2)vBody;
Debug.Print("
Body[" + swBody.GetType() + "] --> " + swBody.GetSelectionId());
vEdgeArr
= (Object[])swBody.GetEdges();
vVertexArr
= (Object[])swBody.GetVertices();
double
maxEdgeGap = 0;
maxEdgeGap
= 0.0;
foreach
(Object vEdge in vEdgeArr)
{
//
Find maximum edge gap which mirrors the UI functionality in Tools
> Check when Maximum edge gap
is selected
swEdge
= (Edge)vEdge;
bRet
= swEdge.IsTolerant(out tol);
if
(maxEdgeGap < tol)
{
maxEdgeGap
= tol;
}
if
((!(bRet == false)))
{
Debug.Print("Edge
is tolerant: ");
Debug.Print("
Tolerance = " + tol);
swTanEnt
= (Entity)swEdge;
bRet
= swTanEnt.Select4(true, null);
}
else
{
Debug.Print("Edge
is exact: Tolerance = " + tol);
}
swFaultEnt
= swEdge.Check;
}
Debug.Print("");
Debug.Print("Maximum
edge gap is " + maxEdgeGap);
Debug.Print("");
double
maxVertexGap = 0;
maxVertexGap
= 0.0;
foreach
(Object vVertex in vVertexArr)
{
//
Find maximum vertex gap which mirrors the UI functionality in Tools
> Check when Maximum vertex
gap is selected
swVertex
= (Vertex)vVertex;
bRet
= swVertex.IsTolerant(out tol);
if
(maxVertexGap < tol)
{
maxVertexGap
= tol;
}
if
((!(bRet == false)))
{
Debug.Print("Vertex
is tolerant: ");
Debug.Print("
Tolerance = " + tol);
swTanEnt
= (Entity)swVertex;
bRet
= swTanEnt.Select4(true, null);
}
else
{
Debug.Print("Vertex
is exact: Tolerance = " + tol);
}
}
Debug.Print("");
Debug.Print("Maximum
vertex gap is " + maxVertexGap);
Debug.Print("");
}
}
///
<summary>
///
The SldWorks swApp variable is pre-assigned for you.
///
</summary>
public
SldWorks swApp;
}
}