


SMLib™ SMLib™ Our flagship product built upon TSNLib™ provides fully functional nonmanifold topological structure and solid modeling functionality including the ability to perform NURBS boolean operations, fillets, etc.
TSNLib™ TSNLib™ Built on top of GSNLib supporting trimmed surface representations.
GSNLib™ GSNLib™ A basic curve and surface NURBS library. GSNLib™ provides a useful interface to NLib while adding value as well. Includes curve/curve and surface/surface intersection and polygon modeling.
NLib™ NLib™ A comprehensive BSpline NURBs library fully supporting curves, surfaces, and volumes with an extensive set of shape query and construction tools.
VSLib™ VSLib™ Provides deformable modeling as part of a library using the constrained optimization techniques of the calculus of variations. The library supports several very different geometric operations.
SDLib™ SDLib™ Subdivision surface source code library that creates and modifies complex shapes with hierarchical CatmullClark surfaces.
PolyMLib™ PolyMLib™ Polygonal based geometric modeling to repair, optimize, review and edit triangle mesh models. Analyze surface properties, repair and optimize surface meshes.
Data Translators Data Translators NURBS based geometry translators to interface between Nlib™, GSNLib™, TSNLib™, SMLib™ and IGES, STEP, SAT, VDAFS, OpenNURBS, and Parasolid XT.








GSNLib™  The General Surface Library 

The General Surface Library (GSNLib™) is a C++, objectoriented, software toolkit that provides a set of objects and corresponding methods to create, edit, query, and analyze NURBS curve and surface representations. All of NLib™, the basic NURBS geometry kernel, is contained in GSNLib™. Representations include points, vectors, curves, and surfaces. Trimmed surfaces and solids are included in TSNLib™ and SMLib™. The geometry representations supported by GSNLib™ are commonly used in the development of 2D and 3D applications in CAD, Simulation, Graphics, Web Development, Animation, Game Development, Medical Modeling, Optics and more. 
Key Features 


• C++ Interface  Source code, C++ interface to all of NLib including class representations for lines, curves, composite curves, and surfaces.
• Basics  Creation, modification, evaluation, analysis, and intersection of curves and surfaces.
• Offset  Curve and surface offset
• 2D and 3D  Dropping and lifting curves onto surfaces.
• Performance and Reliability  Structures and algorithms for superior reliability and/or performance.
• Intersection  Classification operations performed to user specified tolerances.
• Solvers  Minimization/ Maximization/Normalization solvers from point/curve/surface to point/curve/surface.
• Memory  Various memory management options including stack based, heap based, and pool based.
• Error Management  A unified error management system.


Summary of Functions 

• Curve (IwCurve):
• Constructors allow input of either a PDES STEP compatible NURBS data or a pointer to an NLib "CURVE" data structure.
• Point and derivative evaluation.
• Evaluation of geometric properties.
• Offset curve.
• Bounding box calculation.
• Creation of a mirror curve.
• Creation of a curve by projection to a plane.
• Transformation with optional scaling.
• High precision curve length computation.
• Test for closure, periodicity and degeneracy.
• Tessellation using both chord height and angular tolerances.
• Find intersections with a plane.
• Find inflection points.
• Find minimum/maximum magnitude of 1st derivative and radius of curvature.
• Find 1st derivative or radius of curvature of a given magnitude.
• Find points where tangent is parallel to X, Y, and/or Z axis.
• Find points where tangent is parallel to a given vector.
• Find silhouette points with either parallel or perspective projection.
• Various analysis of curve properties.
• Composite Curve (IwCompositeCurve):
• Creation of composite curves from an unordered set of curves.
• Offset of a composite curve with filleting or extension and trimming.
• Simultaneous offset of multiple loops (i.e. face with holes).
• Creation of a single NURBS curve from a composite.
• BSpline Curve (IwBSplineCurve):
• Construction/editing/query using STEP format or NLib data structures.
• Continuity calculation, removal of extra knots, conversion to 2D.
• Creation by joining connected curve segments.
• Creation of circle, ellipse, line segment, degenerate curve.
• Creation of mirror curve.
• Editing the end points.
• Extraction of analytical information for lines and arcs.
• Offsetting.
• Surface (IwSurface):
• Point and derivative evaluation, evaluation of geometric properties.
• Normal evaluation, evaluation of a normal section.
• High precision surface area computation.
• Dropping 3D vectors into parameter space.
• Closed and periodic testing, singularity testing, validation.
• Transformation, mirror.
• Creation of silhouette curves.
• BSpline Surface (IwBSplineSurface):
• Construction using STEP format or GeomWare's Nlib data structures.
• Continuity calculation.
• Query of canonical data.
• Creation of planar section curves.
• Creation of parallel projection curves.
• Curve/Curve Intersection:
• Handles coincidence, tangency, near tangency, and grazing conditions.
• Projected curve/curve intersection.
• Detection of self intersection.
• Curve/Surface Intersection:
• Handles coincidence, tangency, near tangency, and grazing conditions.
• Advanced Surface/Surface Intersection (IwSurface::GlobalSurfaceIntersect):
• Global intersection which finds all intersection curves and points.
• Ability to extract intersection curves along surface tangencies  surface normals are parallel along the intersection curve.
• Adds the ability to process curves where singularities occur  point where surface normal are parallel and intersection curves pass through the point.
• Adds the ability to produce zero length or NULL curves  point where surfaces touch at a single point but do not intersect near that point.
• Detection of self intersection.
• Dropping Curves:
• Create the 2D parameter space curve(s) corresponding to a 3D curve which lies on or near a surface.
• Restricted to surfaces with at least C1 continuity.
• Advanced dropping which allows C0 continuity surfaces.
• Curve/Point  Local and global versions:
• Minimization  find point(s) on curve closest to the point.
• Maximization  find point(s) on curve farthest from the point.
• Normalization  find point(s) on curve where tangent is perpendicular to vector to the point.
• Atdistance  find point on curve at given distance from point.
• Intersection  find parametric value(s) on curve corresponding to the point.
• Projected minimization and maximization  as projected to a plane.
• Directed minimization and maximization  along a vector as projected to a plane.
• Curve/Curve  Local and global versions:
• Minimization  find points on the two curves where the distance between them is minimal.
• Maximization  find points on the two curves where the distance between them is maximal.
• Normalization  find points on the curves where the tangents are perpendicular to the vector between the curves.
• At distance  find points on the two curves which have a given distance between them and have the same angle to the vector between them.
• Projected solvers  intersection, minimization, maximization, directed minimization, signed directed minimization, angle to plane, angle between, signed pivot angle between.
• 3D directed minimization  collision detection  find first contact point moving along a 3D vector.
• Surface/Point  Local and global version of the following:
• Minimization  find point(s) on surface closest to point.
• Maximization  find point(s) on surface farthest from the point.
• Normalization  find point(s) on surface where normal is parallel to vector to point.
• Intersection  find parametric value(s) on surface corresponding to the point.
• 3D directed minimization  collision detection  find first contact point moving along a 3D vector.
• Surface/Curve  Local and global version of the following:
• Minimization  finds where distance between curve and surface is minimal.
• Maximization  finds where distance between curve and surface is maximal.
• Normalization  finds where vector between entities is parallel to surface normal and perpendicular to the curve tangent.
• 3D intersection  find parametric value(s) on surface corresponding to the pointor.
• Surface/Surface  Local and global version of the following:
• Minimization  find where distance between surfaces is minimal.
• Maximization  find where distance between surfaces is maximal.
• Normalization  finds where vector between surfaces is parallel to surface normals.
• 3D directed minimization  collision detection  find first contact point moving along a 3D vector.
• Surface Silhouette Curve Creation (IwSurfaceSilhouette):
• Implementation in context of the Curve Tracing Framework.
• Able to detect all silhouette curves on a surface.
• Able to detect silhouettes which correspond to isoparametric curves.
• Able to detect silhouettes which pass through the poles of the surface.
• Surface Curve Tracing Abstract Class (IwSurfaceTracer):
• Provides an objectoriented framework which enables implementation of additional curve extraction utilities through subclassing and implementation of virtual methods.

Performance and Reliability 

GSNLib utilizes extensible, object oriented structure design, tolerance based, numerical algorithms, and a proprietary caching algorithm to maximize performance without compromising reliability. The user can control the size vs. performance tradeoff by adjusting the cache size of the surface or curve. The cache maintains a treebased Bezier decomposition of the curve or surface. Caching the decomposition greatly improves performance avoiding unnecessary calculations.

Intersection, Classification, and Tolerances 

Key to the robustness of GSNLib's curve and surface solvers and intersectors is the ability for the algorithms to handle special geometric situations by taking into account a user specified tolerance. GSNLib has made a concentrated effort to handle at least the following situations:
• Coincidence  where a desired solution corresponds to a range of values as opposed to a single value.
• Tangency  where two objects touch at a single point but do not cross over each other.
• Proximal  where two objects are within the proximity (less than the user specified tolerance) of each other but do not actually intersect.
• Grazing  where two objects intersect at two points which are very close to each other.
• Ambiguous  where more than one valid solution exists to a problem which typically has only a single solution.

GSNLib Objects: 

GSNLib is a curve and surface library of tools. Understanding the class/object heirarchy utilized to represent geometric information is essential to effectively use GSNLib.
• Curve classes: IwCurve, IwBSplineCurve, IwCompositeCurve, IwConic, IwHermiteCurve, IwIsoCurve, IwOffsetCurve, IwProjectedCurve, IwLine, IwEllipse, IwCircle, IwHyperbola, IwParabola, IwCrvOnSurf.
• Surface classes: IwSurface, IwBSplineSurface, IwPlane, IwCylinder, IwCone, IwSphere, IwTorus, IwCutterSurface, IwSurfOfRevolution, IwSurfOfExtrusion, IwCurveBoundedSurface, IwOffsetSurface, IwSTEPSurface.
• Geometric Utility Classes: IwVector2d, IwVector3d, IwAxis2Placement (a local coordinate system reference frame), IwMatrix, IwPolynomial, IwPseudoBox (nonaxis aligned bounding box), IwPolarBox, IwExtent1d, IwExtent2d, IwExtent3d, IwExtentNd, IwPeriodicExtent1d.
• Numerical Utility Classes: IwIntegrator, IwLocalSolve1d, IwLocalSolveNd, IwGlobalSolver, IwCurveCache, IwSurfaceCache, IwCacheMgr, IwMemBlockMgr.
• Container Classes: IwTArray, IwMapPtrToPtr, IwSolutionArray.
• Misc Classes: IwPointSet, IwSurfaceDropCurve, IwSurfaceSilhouette, IwAttribute, IwAssertArray.

Back To Top 


