TSNLib  Functionality

Contents

Curve/Point

IwCurve::GlobalPointSolve

  • minimization - IW_SO_MINIMIZE - find points on curve closest to point
  • maximization - IW_SO_MAXIMIZE - find points on curve farthest from point
  • normalization - IW_SO_NORMALIZE - find points on curve where tangent is perpendicular to vector to the point
  • intersection - IW_SO_INTERSECT - find where points intersect a curve
  • at distance - IW_SO_AT_DISTANCE - find point on curve at given distance from point
  • signed directed minimize - IW_SO_SIGNED_DIRECTED_MINIMIZE - projected operation to find where a point touches the curve when being moved along a given vector
  • directed minimization - IW_SO_DIRECTED_MINIMIZE - find points on curve of the minimal projected distance between the point and curve along a given vector which is parallel to the projection plane
  • directed maximization - IW_SO_DIRECTED_MAXIMIZE - find points on curve of the maximum projected distance between the point and curve along  given vector which is parallel to the projection plane
  • projected minimization - IW_SO_PROJECTED_MINIMIZE - find points on curve minimum projected distance between the point and curve
  • projected maximization - IW_SO_PROJECTED_MAXIMIZE - find points on curve of the maximum projected distance between the point and curve

IwCurve::GlobalPropertyAnalysis

  • find inflection points, intersection of plane or cylinder, silhouette points, maximum and minimum first derivatives on the curve, angle to plane
  • see documentation on IwCurvePropertyType for additional curve properties

Curve/Curve

IwCurve::GlobalCurveSolve

  • minimization - IW_SO_MINIMIZE - find points where distance between two curves is minimal
  • maximization - IW_SO_MAXIMIZE - find points where distance between two curves is maximal
  • normalization - IW_SO_NORMALIZE - find points on two curves where the tangents are perpendicular to the vector between the curves
  • at distance - IW_SO_AT_DISTANCE - find points on the two curves at given distance and same angle between them
  • signed directed minimize - IW_SO_SIGNED_DIRECTED_MINIMIZE - projected operation to find first point two curves touch when being moved along a given vector
  • directed minimization - IW_SO_DIRECTED_MINIMIZE - find points of the minimal projected distance between two curves along a given vector which is parallel to the projection plane
  • directed maximization - IW_SO_DIRECTED_MAXIMIZE - find points of the maximum projected distance between two curves along  given vector which is parallel to the projection plane
  • projected tangency - IW_SO_PROJECTED_TANGENCY - find points where projections of curves become tangent
  • signed angle minimization - IW_SO_SIGNED_ANGLE_MINIMIZE - find first points where projections of curves touch when being rotated about point
  • projected minimization - IW_SO_PROJECTED_MINIMIZE - find points minimum distance between projections of two curves
  • projected maximization - IW_SO_PROJECTED_MAXIMIZE - find points maximum distance between projections of two curves
  • projected intersection - IW_SO_PROJECTED_INTERSECT - find points where projected curves intersect

IwCurve::GlobalCurveIntersect - curve/curve intersection - including coincidence, tangency and grazing conditions

IwCurve::GlobalCurveSelfIntersect - curve self intersection - including coincidence, tangency and grazing conditions

Trimmed Surface(s)/Point

IwTopologySolver::BrepPointSolve

  • minimization - IW_SO_MINIMIZE - find points on the trimmed surface(s) closest to the point
  • maximization - IW_SO_MAXIMIZE - find points on the trimmed surface(s) farthest from the point
  • normalization - IW_SO_NORMALIZE - find points on the trimmed surface(s) where normal is parallel to vector to the point
  • intersection -  IW_SO_INTERSECT - find points where the point intersects the trimmed surface(s) to with a given tolerance
  • projected minimization - IW_SO_PROJECTED_MINIMIZE - find points where projection of the point and the trimmed surface(s) are minimized
  • projected maximization - IW_SO_PROJECTED_MAXIMIZE - find points where projection of the point and the trimmed surface(s) are maximized
  • rayfiring - IW_SO_RAYFIRE - find first point(s) where ray intersects the trimmed surface(s)

Trimmed Surface/Curve

IwTopologySolver::BrepCurveSolve

  • minimization - IW_SO_MINIMIZE - find points on the trimmed surface(s) closest to the curve
  • maximization - IW_SO_MAXIMIZE - find points on the trimmed surface(s) farthest from the curve
  • normalization - IW_SO_NORMALIZE - find points on the trimmed surface(s) where normal is parallel to vector to the curve
  • intersection - IW_SO_INTERSECT - find points where the curve intersects the trimmed surface(s) to with a given tolerance
  • projected minimization - IW_SO_PROJECTED_MINIMIZE - find points where projection of the curve and the trimmed surface(s) are minimized
  • projected maximization - IW_SO_PROJECTED_MAXIMIZE - find points where projection of the curve and the trimmed surface(s) are maximized

Trimmed Surface/Trimmed Surface

IwTopologySolver::BrepBrepSolve

  • minimization - IW_SO_MINIMIZE - find closest points between the two sets of trimmed surfaces
  • maximization - IW_SO_MAXIMIZE - find farthest points between the two sets of trimmed surfaces
  • normalization - IW_SO_NORMALIZE - find normal points between the two sets of trimmed surfaces
  • intersection IW_SO_INTERSECT - find points where the two sets of trimmed surfaces intersect to with a given tolerance
  • projected minimization - IW_SO_PROJECTED_MINIMIZE - find points where projection of the two sets of trimmed surfaces are minimized
  • projected maximization - IW_SO_PROJECTED_MAXIMIZE - find points where projection of the two sets of trimmed surfaces are maximized

Surface Silhouette Curves

 IwBSplineSurface::CreateSilhouetteCurves

  • detects all silhouette curves, identifies iso-parametric curves and processes singularities

Dropping Curves

  • Create the 2-D parameter space curves corresponding to a 3-D curve which lies on or near a trimmed surface that is at least a C1 surface.  Use IwSurface::DropCurve
  • Parallel projection of a curve onto a surface resulting in both the 3-D and 2-D space curves.  Use IwBSplineSurface::CreateParallelProjectionCurves
  • Projection with trimming of curve to surface boundary and internal discontinuties. Use IwSurface::DropAndTrimCurve

Trimmed Surface Creation

  • IwBrep::CreateFaceFromSurface  from a parametrically bounded NURBS surface.
  • IwBrep::MakeFaceWithCurves from a surface and 2-D parameter space curves.
  • from a surface and 3-D model space curves. Use IwBrep::MakeFaceWithCurves
  • from a surface with both 2-D and 3-D space curves. UseIwBrep::MakeFaceWithCurves
  • Creation of topological elements (vertices, edges, faces) using "Euler like" topological operators.
       See the tutorial on Solid Creation by Topology Tables
  • Adjustment of operational tolerances to compensate for gaps.
       See as an example IwEdge::SetTolerance
  • Sewing together trimmed surfaces to create shells or solids. Use IwBrep::SewFaces.

Topological/Geometrical Query Operations

  • retrieval of topological adjacency relationships between faces IwFace) , loops (>IwLoop), edges IwEdge) and vertices>IwVertex); See as an example IwEdge::FindRadialSector
  • direct retrieval of all faces, edges or vertices in a trimmed surface.  See as an example IwFace::GetEdges
  • retrieval of geometric information (point, 2-D and 3-D curve, surface) corresponding to topological elements (vertex, edge, face).  For example: IwEdge::GetCurve;and IwFace::GetSurface
  • retrieval of the boundary box of a trimmed surface. Use IwFace::CalculateBoundingBox
  • retrieval of trim boundary with loop and orientation information. Use IwFace::GetLoops

Classification Operations  inside, outside, on boundary

  • Parameter space points relative to trim boundary. Use IwFace::PointClassify
  • Parameter space or model space curves relative to trim boundary. Use IwFace::Point3DClassify
  • Classification of 3D point relative to a Brep.  Use IwBrep::Point3DClassify

Trimmed Surface Interface

  • Output to Open GL through the NURBS based curve/surface/Trimmed Surface interface

Container Classes

  • pointer to pointer map - IwMapPtrToPtr
  • dynamic typed array - IwTArray
  • dynamic typed list - IwTList

Geometrical Utility Classes

  • two-dimensional vector - IwVector2d, IwPoint2d
  • three-dimensional vector - IwVector3d, IwPoint3d
  • local coordinate system or transformation - IwAxis2Placement
  • n-dimensional matrix used to solve linear equations - IwMatrix
  • polynomial equation representation - IwPolynomial
  • non-axis aligned bounding box - IwPseudoBox
  • one-dimensional interval - IwExtent1d
  • two-dimensional bounding box - IwExtent2d
  • three-dimensional bounding box - IwExtent3d
  • n-dimensional bounding box - IwExtentNd

Numerical Utility Classes

  • integration - IwIntegrator
  • one-dimensional Newton based local solver algorithm - IwLocalSolve1d
  • n-dimensional Newton based local solver algorithm - IwLocalSolveNd

Miscellaneous Classes

  • curve cache decomposition into Bezier segments - IwCurveCache
  • surface cache decomposition into bi-Bezier segments - IwSurfaceCache
  • cache manager - IwCacheMgr
  • fixed sized memory allocation manager - IwMemBlockMgr
  • utility representation of an iso-parametric curve on surface - IwCrvOnSurf

SMLib Plus Classes

  • IwPrimitiveCreation - class and methods for creating solid primitives and performing 2D Boolean operations.
  • IwTopologySweep - class and methods for doing topological portion of Non-Manifold Sweeping.
  • IwSweepGeometryCreation - abstract method for geometric portion of sweeping operations.  IwTranslationalSweepGeomtry, IwRotationalSweepGeometry - implemented subclasses of IwSweepGeometryCreation.
  • IwTrimmingTools - tools to help convert between different trimming formats including unordered loops, unoriented loops, loops that cross seams.
  • IwFilletExecutive - high level filleting object

Surface Filleting

Filleting is the insertion of a connecting surface, called the fillet surface, between two other surfaces to connect them with a specifically-shaped blend surface.  Filleting can be either surface filleting, or topology-based filleting.  Surface filleting connects two surfaces that are not necessarily connected any other way, while topology-based filleting generally replaces an edge connecting two surfaces with a blend surface.  This document describes surface filleting, which is available in TSNLib; see the SMLib Functionality Manual for a description of topology-based filleting, and for more general information about filleting in SMLib.

Surface filleting creates a fillet surface and two rail curves, which are where the new fillet surface joins the two original base surfaces.  The original base surfaces may be trimmed back to the new rail curves.  This trimming operation, along with the creation of the fillet surface and the rail curves, are all parts of the surface filleting functionality.

SMLib supports several different kinds of fillet surface shapes to enable several different styles for connecting one surface to another.  The functionality is best described in terms of SMLib's Filleting Framework.  The framework controls the three aspects of SMLib filleting: fillet radius definition, cross-section shape of the fillet surface, and behavior at the ends of fillets. 

Terminology

The following terms will be used in this document:
  • Base Surfaces: The two original surfaces that will be joined by the fillet surface.
  • Fillet Surface: A new surface that is added to connect the base surfaces during the filleting operation.
  • Rail Curves: The "long edges" of a fillet surface, which run along the two base surfaces.  The rail curves are calculated first, before the fillet surface itself.
  • Cross Section: The shape of the cross section of the fillet surface.  This is created after the rail curves are traced out, and is independent of the radius of the fillet.  Fillet surfaces typically have a circular (rolling ball) or linear (chamfer) cross sections.

Surface-Based Filleting Functionality

Fillet Solvers: Radius Definition

Surface-Surface filleting in TSNLib supports only constant-radius fillets.  Variable-radius fillets are not supported due to the problem of defining a radius function without an existing edge to run the fillet along.  Constant-width fillets could be added, but are not implemented at present.  TSNlib does support differential offsets however: different radius values may be specified for the two surfaces, resulting in a non-circular blend.

Fillet Surface Generators: Cross Section Shapes

The following cross-section shapes are implemented in TSNlib.  Examples of these are pictured in the Figures, below.
  • Circular cross section – Rolling-ball Fillet: produces a surface whose cross sections are either an exact rational circle, or an approximation of a circle (IwCircularCrossSectionFSG)
  • Linear cross section – Chamfer: produces a surface with a linear cross section. (IwLinearCrossSectionFSG)
Higher-continuity blend-curve sections have not currently been implemented in surface-surface filleting.  TSNLib does support two other variations on the circular cross-section shapes:
  • Mirrored: the circular cross section can be "mirrored" across the line between the rail curves.  This fillet surface is not tangent to the base surfaces.
  • Complementary: the complementary portion of the circular cross section can be used instead of the usual blend section.  This fillet surface meets the base surfaces in a cusp.

Fillet Corners

In TSNLib, this describes how the ends of the fillet surface are trimmed.  The following options are available:
  • No trimming: The fillet surface extends beyond the boundaries of the base surfaces.  It is defined on extensions of the base surfaces.
  • Minimal Trim: The fillet surface is trimmed to the first intersection with a boundary of one of the base surfaces.  This is an isoparametric trim, running straight along the cross section.
  • Maximal Trim: The fillet surface is trimmed to the farther intersection with a boundary of one of the base surfaces.  This is also an isoparametric trim.
  • Beveled Trim: The fillet surface is trimmed at the intersections with the boundaries of both base surfaces.  This trim is a straight line in the parameter space of the fillet surface, connecting the two points of intersection.
  • Tangency Trim: The fillet surface is trimmed such that its boundaries are tangent to the boundaries of the base surfaces where they intersect.

Filleting Process

The filleting process for Surface-Surface is encapsulated in a single method of IwFilletExecutive called SurfaceSurfaceFillet().  The various parameters for the fillet are passed as arguments, and the method does all of the work required to create the fillet surface.  The arguments passed are:
  • The two surfaces to be filleted.
  • The two radii for the surfaces (generally the same value).
  • A tolerance value for the offset-intersection.
  • Cross-section type: linear (chamfer), approximate circular, or exact (rational) circular.
  • Accuracy of approximate-circular cross section, expressed as a percent of radius.
  • How to trim the two ends of the fillet surface.
  • How to trim the base surfaces, along the fillet rail.
  • Whether to mirror a circular fillet.
  • Whether to use the complement of a circular fillet.
If these options are not sufficient for a specific fillet, the user could probably find what is desired by inspecting the source code of IwFilletExecutive::SurfaceSurfaceFillet(). In addition, SMLib will be happy to assist, perhaps adding optional arguments to the method, or adding functionality to surface-surface filleting.

 

Surface Filleting Figures

figure1-3.jpg (29985 bytes)

figure4-6.jpg (30234 bytes)

figure7-9.jpg (30461 bytes)

figure10-11.jpg (25713 bytes)

 

trimmed_surface_fillet.jpg (19507 bytes)

Closed Fillet of Sphere and NURBS

sphere_nurb_fillet.jpg (23479 bytes)

 


Legal Stuff

All of the software and documentation received with this release is copyrighted by Solid Modeling Solutions, Inc. You may not distribute source code or documentation for this software outside of the company and the site which owns the license. The standard license agreement allows you to freely distribute object code in any application which does not contain a programmatic interface. All software and documentation is considered proprietary information and the intellectual property of Solid Modeling Solutions, Inc. This document contains trade secret information which is deemed proprietary.

Copyright 1998-2010 Solid Modeling Solutions All rights reserved.
Information in this document is subject to change without notice.