The Trimmed Surface Library (TSNLib) provides a comprehensive suite of tools for construction, modification, sewing, and evaluation of trimmed surfaces, solids, and open shells. TSNLib utilizes topological elements (faces, loops, edges, vertices, etc.) traditionally associated with solid modelers to represent trimmed surfaces. TSNLib, therefore supports open shells and solids with a manifold or non-manifold topology. Trimmed Surfaces are constructed from NURBS surfaces trimmed by model space (3D) and/or parameter space (2D) NURBS curves. The NURBS representation for the surfaces and trimming curves provides a compact, highly accurate and efficient representation for 3D models. TSNLib also includes all NLib features.
• Given a parametrically bounded B-Spline (NURBS) surface.
• Given a B-Spline surface and 2D parameter space B-Spline curves (automatic generation of 3D curves).
• Given a B-Spline surface and 3D model space B-Spline curves (automatic generation of 2D curves).
• Given both 2D parameter space and 3D model space B-Spline curves.
• Creation of individual topological elements (vertices, edges, faces) using "Euler like" topological operators.
• Creation of solids or open shells by sewing trimmed surfaces with matching edges.
• Creation of solids or open shells via. topology table structures.
• Primitive Creation: box, sphere, cylinder, cone, torus, surface of extrusion, and surface of revolution.
• Ray Firing: 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.
• Curve Generators:
• Planar Sectioning: generation of model space and parameter space curves corresponding to intersection of infinite plane with the trimmed surface.
• Parallel Projection:
generation of model space and parameter space curves corresponding to the parallel projection of a curve onto a surface.
• Generation of iso-parameteric (cross hatch) curves.
• Silhouette curves
• 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.
• Hidden Line/Curve Removal of solids and open shells.
• Classification Operations (Inside/Outside/On boundary classification):
• Classification of parameter space points relative to the trim boundary.
• Classification of parameter space or model space curves
relative to the trim boundary.
• Classification of points as inside/outside/on a solid.
• Measurement Utilities (Minimization, Maximization, Normalization, Projected Minimization, Projected Maximization, Directed Minimization, Projected Angle Between, Linear Collision Detection):
• Between point and trimmed surface/solid/shell, e.g.
• Between curve and trimmed surface/solid/shell.
• Between two trimmed surfaces/solids/shells, e.g.
• Advanced Trimming Tools:
• Detect and fix loop orientation.
• Detect and fix loop order.
• Detect and fix outer and inner loops.
• Detect and fix loops that cross seams.
• Trimmed Surface Interfaces:
• Output to the NLib trimmed surface tessellator.
• Output to the Crack-Free trimmed surface tessellator.
• Output to OpenGL display interface.
• Output to OpenGL through the NURBS based Curve/Surface/Trimmed Surface interface and through IntegrityWare's POPLib tessellator.
• Input and output to IGES, STEP, SAT, VDAFS via translators.
• Boolean 2D: Union, Intersection, and Difference of planar faces
• Mirror of a Solid or Open Shell.
• Errors and Validity: Various tools to check validity of topology and geometry.
• 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.
• 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 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.