• Pole and Seam Handling - The ability to represent and robustly process trimmed surfaces which contain poles or singularities (vanishing partial derivatives) and seams (edge which delineates the start/end of a closed surface).

• Adjustable Tolerances - The ability to adjust the tolerance of a trimmed surface. This enables TSNLib to robustly process trimmed surfaces produced by a variety of different systems.

• Tolerant Modeling - Applies the use of tolerances to compensate for "gaps" found in the input data generated by different modeling systems. Because TSNLib utilizes tolerant modeling, it actually considers the face as a uniformly thick slab around the geometry of the surface. The thickness of the slab is defined by the tolerance of the face. An edge is considered a tube in space that surrounds the curve. The radius of the tube is defined by the tolerance of the edge. A vertex is considered a sphere in space about the point. The radius of the sphere is defined by the tolerance of the vertex.

• Polygonal Modeling - TSNLib includes a general polygonal modeler including many common features such as booleans, tessellation, decimation, and STL, SLA file output.

a highly optimized and precise trimmed surface based ray firing that is able to compute up to 30,000 ray/surface intersections per second. Ray firing is valuable for display and for optical analysis and many other applications.

• Sweep faces, edges, and vertices to the same dimension or to a higher dimension.
• The sweep of a face to the same dimension produces a copy of the face at the terminal position. The sweep of a face to a higher dimension produces a solid volume between the original face and the terminal position face.
• The sweep of an edge to the same dimension produces a copy of the edge at the terminal position. The sweep of an edge to a higher dimension produces a face between the original edge and the terminal position edge.
• The sweep of a vertex to the same dimension produces a copy of the vertex at the terminal position. The sweep of a vertex to a higher dimension produces an edge between the original vertex and the terminal position vertex.
• The Non-Manifold Sweeping is designed as an object-oriented framework. Application developers can easily create new geometric sweeps by implementing a new subclass that produces the geometry for the sweep operation while the framework builds the topology for the sweep.

• Surface-based Filleting and Blending:

• Creation of constant radius fillets between two trimmed surfaces.
• Creation of a blend surface between two curves on the same or different surfaces.
• Blending of 3, 4 or more tangential corner surfaces.
• Optional trimming of input surfaces to create a smooth set of 3 surfaces.

• Query Topological/Geometric/Property Information:

• Retrieval of topological adjacency relationships between faces, loops, edges, and vertices.
• Retrieval of all faces, edges, or vertices in a trimmed surface.
• Retrieval of geometric information (point, 2D and 3D curve, surface) corresponding to topological elements (vertex, edge, face).
• Retrieval of the bounding box of a trimmed surface.
• Retrieval of trim boundary with loop and orientation information.
• Compute mass properties such as area, volume, centroid, etc. Faces can be assigned different thickness attributes to give them volumetric properties. Edges can be assigned cross sectional area attributes to give them volumetric properties.

• Intersection of a curve and a trimmed surface.
• Intersection of a point and a trimmed surface - dropping a model space point to the trimmed surface.
• Intersection of two trimmed surfaces.
• Topological intersection and insertion of intersection topology.

• Errors and Validity: Various tools to check validity of topology and geometry.

• Attributes:

• Ability to define new attributes as a subclass of existing IwAttribute class that inherits one of two standard behavior types (copy attribute when doing a copy/split or reference same attribute when doing a copy/split).
• Ability to save attributes to a the file using inherited read/write methods.
• The ability to maintain attribute information even when application defining the attribute is not present utilizing a IwGenericAttribute class.

• Polygon Modeling:

• Polygon Boolean Tools Union, Intersection, and Difference.• Polygon Decimation (reduction) that simplifies complex polygon meshes to optimize them for display or other applications.• Polygonal Ray Firing, Measurement, Interference Detection, and Sectioning.• Tessellation• Given one or more of the following parameters: Chord Height Tolerance, Angular Tolerance, Maximum Aspect Ratio, Maximum Polygon Edge Length, Minimum UV Polygon Edge Length.• Using proprietary algorithms to refine the tessellation only where required to produce a valid set of triangles.• Object Oriented Curve and Surface Subdivision Classes to allow user modification of tessellation criteria during the tessellation process. For example, in a graphical application the user could adjust tessellation criteria based on distance from an "Eye Point" of the geometry being subdivided. This customizability feature enables the Tessellation Library to easily be adapted to different applications.• Output as a topological data structure which contains a connected set of polygons with 3D points, UV points and surface normals.• Output to 3D points and surface normals via user call back functions.• Output of Triangles, Quadrilaterals, and Triangle Strips.• Output Stereo Lithography (STL)files and ProEngineer SLP files.

TSNLib Objects:

TSNLib is based on a Non-Manifold Topology (NMT) structure. Understanding the class/object heirarchy utilized to represent geometric and topological information is essential to effectively use TSNLib.

• IwBrep - A Boundary Representation with a Non-Manifold Topology (NMT) structure containing the objects below.
• IwRegion - A region represents a bounded volume. There can be more than one region in an IwBrep. In addition, there is always an infinite region that represents all space not contained by the other regions. For example, a plane has only the inifinite region. A cube has the inifinite region plus the bounded region.
• IwShell - A shell can be a single IwVertex, or a connected set of wire edges (IwEdge), or a connected set of faceuses (IwFaceuse), or some combination of connected faceuses and connected wire edges.
• IwFace - A face or trimmed surface is defined by a surface (IwSurface) and is bounded by one or more loops (IwLoop). Each face must have one and only one outer loop. The UV domain of the face contained in the face object and is represented by an IwExtent2d object. The domain of the face can be smaller than the natural domain of the surface but must completely contain the parameter space curves generated by projection of the 3D curves onto the surface. Each surface may have one or more faces that reference it. In the case where there is more than one, a composite face (IwCFace) will exist to manage that relationship.
• IwLoop - A loop is a connected set of edges on a face which represent a trimming boundary. A loop can also be a single unconnected vertex on a face. A loop may or may not be closed.
• IwEdge - This topological element is represented geometrically by a curve (IwCurve). The curve may have one or more edges that reference it. In the case where there is more than one, a composite edge (IwCEdge) will exist to manage the relationship. An edge may be a wire edge (no faces), a lamina edge (only one face on one side of it), a manifold edge (either two faces or the same face used twice), or a non-manifold edge (more than two faces). An edge may be bounded by one vertex in the case of a self-loop edge or it may be bounded by two different vertices. The interval of the curve defined by the edge is represented by an IwExtent1d object.
• IwVertex - This topological element is represented geometrically by a point object (IwPoint3d). A vertex is defined as a zero manifold point in space.
• IwFaceuse - There are always two faceuses per face. Conceptually speaking, one faceuse lies on the positive normal side of the surface (upper faceuse) and the other lies on the negative normal side of the surface (lower faceuse). A faceuse is bounded by loopuses.
• IwLoopuse - There are always two loopuses per loop. A loopuse can be either a single vertex on the face or a connected set of edgeuses (IwEdgeuse) on the face. The outer loopuse of the upper faceuse goes counter-clockwise looking from the side of the surface of the positive normals. The inner loopuses of the upper faceuse go clockwise or have no orientation at all if they are not closed.
• IwEdgeuse - Edgeuses appear in pairs. There can be one pair or more per edge. In the case where the edgeuse is part of a loopuse there is one edgeuse on either loopuse. The orientation of an edgeuse is always the opposite to that of its mate. Each edgeuse has one vertexuse connected to the beginning of the edgeuse. The edgeuses on the upper faceuse may have associated trim curves. The trim curves are always IwBSplineCurve objects.
• IwVertexuse - There can be one or more vertexuses per vertex. A vertexuse primarily exists to connect edges to the vertex.
• IwPoly - Polygon related classes include: IwPolyBrep, IwPolyRegion, IwPolyShell, IwPolyFace, IwPolyLoop, IwPolyEdge, IwPolyVertex, IwPolyDecimate, IwPolySolver, IwPolygonOutputCallback, IwPoly, IwPolyIntersector, IwPolyMerge, IwPolyLocalSolver, IwPolyPlaneSolver, IwPolySLAOutput, IwPolySLPOutput.