# Functions

### Curve/Point

SmCurve::GlobalPointSolve

- minimization - SM_SO_MINIMIZE - find points on curve closest to point
- maximization - SM_SO_MAXIMIZE - find points on curve farthest from point
- normalization - SM_SO_NORMALIZE - find points on curve where tangent is perpendicular to vector to the point
- intersection - SM_SO_INTERSECT - find where points intersect a curve
- at distance - SM_SO_AT_DISTANCE - find point on curve at given distance from point
- signed directed minimize - SM_SO_SIGNED_DIRECTED_MINIMIZE - projected operation to find where a point touches the curve when being moved along a given vector
- directed minimization - SM_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 - SM_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 - SM_SO_PROJECTED_MINIMIZE - find points on curve minimum projected distance between the point and curve
- projected maximization - SM_SO_PROJECTED_MAXIMIZE - find points on curve of the maximum projected distance between the point and curve

SmCurve::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 SmCurvePropertyType for additional curve properties

### Curve/Curve

SmCurve::GlobalCurveSolve

- minimization - SM_SO_MINIMIZE - find points where distance between two curves is minimal
- maximization - SM_SO_MAXIMIZE - find points where distance between two curves is maximal
- normalization - SM_SO_NORMALIZE - find points on two curves where the tangents are perpendicular to the vector between the curves
- at distance - SM_SO_AT_DISTANCE - find points on the two curves at given distance and same angle between them
- signed directed minimize - SM_SO_SIGNED_DIRECTED_MINIMIZE - projected operation to find first point two curves touch when being moved along a given vector
- directed minimization - SM_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 - SM_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 - SM_SO_PROJECTED_TANGENCY - find points where projections of curves become tangent
- signed angle minimization - SM_SO_SIGNED_ANGLE_MINIMIZE - find first points where projections of curves touch when being rotated about point
- projected minimization - SM_SO_PROJECTED_MINIMIZE - find points minimum distance between projections of two curves
- projected maximization - SM_SO_PROJECTED_MAXIMIZE - find points maximum distance between projections of two curves
- projected intersection - SM_SO_PROJECTED_INTERSECT - find points where projected curves intersect

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

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

### Trimmed Surface(s)/Point

SmTopologySolver::BrepPointSolve

- minimization - SM_SO_MINIMIZE - find points on the trimmed surface(s) closest to the point
- maximization - SM_SO_MAXIMIZE - find points on the trimmed surface(s) farthest from the point
- normalization - SM_SO_NORMALIZE - find points on the trimmed surface(s) where normal is parallel to vector to the point
- intersection - SM_SO_INTERSECT - find points where the point intersects the trimmed surface(s) to with a given tolerance
- projected minimization - SM_SO_PROJECTED_MINIMIZE - find points where projection of the point and the trimmed surface(s) are minimized
- projected maximization - SM_SO_PROJECTED_MAXIMIZE - find points where projection of the point and the trimmed surface(s) are maximized
- rayfiring - SM_SO_RAYFIRE - find first point(s) where ray intersects the trimmed surface(s)

### Trimmed Surface/Curve

SmTopologySolver::BrepCurveSolve

- minimization - SM_SO_MINIMIZE - find points on the trimmed surface(s) closest to the curve
- maximization - SM_SO_MAXIMIZE - find points on the trimmed surface(s) farthest from the curve
- normalization - SM_SO_NORMALIZE - find points on the trimmed surface(s) where normal is parallel to vector to the curve
- intersection - SM_SO_INTERSECT - find points where the curve intersects the trimmed surface(s) to with a given tolerance
- projected minimization - SM_SO_PROJECTED_MINIMIZE - find points where projection of the curve and the trimmed surface(s) are minimized
- projected maximization - SM_SO_PROJECTED_MAXIMIZE - find points where projection of the curve and the trimmed surface(s) are maximized

### Trimmed Surface/Trimmed Surface

SmTopologySolver::BrepBrepSolve

- minimization - SM_SO_MINIMIZE - find closest points between the two sets of trimmed surfaces
- maximization - SM_SO_MAXIMIZE - find farthest points between the two sets of trimmed surfaces
- normalization - SM_SO_NORMALIZE - find normal points between the two sets of trimmed surfaces
- intersection SM_SO_INTERSECT - find points where the two sets of trimmed surfaces intersect to with a given tolerance
- projected minimization - SM_SO_PROJECTED_MINIMIZE - find points where projection of the two sets of trimmed surfaces are minimized
- projected maximization - SM_SO_PROJECTED_MAXIMIZE - find points where projection of the two sets of trimmed surfaces are maximized

### Surface Silhouette Curves

SmBSplineSurface::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 SmSurface::DropCurve
- Parallel projection of a curve onto a surface resulting in both the 3-D and 2-D space curves. Use SmBSplineSurface::CreateParallelProjectionCurves
- Projection with trimming of curve to surface boundary and internal discontinuties. Use SmSurface::DropAndTrimCurve

### Topological/Geometrical Query Operations

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

### Numerical Utility Classes

- integration - SmIntegrator
- one-dimensional Newton based local solver algorithm - SmLocalSolve1d
- n-dimensional Newton based local solver algorithm - SmLocalSolveNd

### Miscellaneous Classes

- curve cache decomposition into Bezier segments - SmCurveCache
- surface cache decomposition into bi-Bezier segments - SmSurfaceCache
- cache manager - SmCacheMgr
- fixed sized memory allocation manager - SmMemBlockMgr
- utility representation of an iso-parametric curve on surface - SmCrvOnSurf

### SMLib Plus Classes

- SmPrimitiveCreation - class and methods for creating solid primitives and performing 2D Boolean operations.
- SmTopologySweep - class and methods for doing topological portion of Non-Manifold Sweeping.
- SmSweepGeometryCreation - abstract method for geometric portion of sweeping operations.
- SmTranslationalSweepGeomtry, SmRotationalSweepGeometry

- SmTrimmingTools - tools to help convert between different trimming formats including unordered loops, unoriented loops, loops that cross seams.