Support for intersection of objects.
#include <AlIntersect.h> class AlIntersect static statusCode intersect( AlCurve*, AlCurve*, AlList* & ); static statusCode intersect( AlCurve*, AlSurface*, AlList* & ); static statusCode intersect( AlSurface*, AlSurface*, AlIntersectSurfSurfInfo& ); static statusCode intersect( AlSurface *surface, double point[3], double planeNormal[3], AlIntersectSurfSurfInfo &ss ); static statusCode intersect( AlSurface *surface, double point[3],double planeNormal[3], double boundingBoxTol, boolean & noIntersect, boolean &intersectWithinTol, double &x, double &y, double &z ); class AlIntersectCurveCurveInfo : public AlLinkItem AlIntersectCurveCurveInfo* nextItem() const; AlIntersectCurveCurveInfo* prevItem() const; double tCurve1, tCurve2; double point[3]; class AlIntersectCurveSurfInfo : public AlLinkItem AlIntersectCurveSurfInfo* nextItem() const; AlIntersectCurveSurfInfo* prevItem() const; double t; double pointOnCurve[3]; double u,v; double pointOnSurface[3]; class AlIntersectSurfSurfInfo ~AlIntersectSurfSurfInfo(); int numberIsolatedPoints; double3* isolatedPoints; int numberIntersectionCurves; AlCurve** intersectionCurves; int numberBoundaryCurves; AlCurve** boundaryCurves;
This collection of classes provides the programmer with the ability to determine points of intersection between two curves, a curve and a surface, or two surfaces.
Each type of intersection responds with its own class of results: AlIntersectCurveCurveInfo, AlIntersectCurveSurfInfo, and AlIntersectSurfSurfInfo. The first two of these are simple AlList classes. The last one is a structure storing pointers to AlCurves and (x/y/z) points.
Returns the next item in the AlIntersectCurveCurveInfo list.
Returns the previous item in the AlIntersectCurveCurveInfo list.
Returns the next item in the AlIntersectCurveSurfInfo list.
Returns the previous item in the AlIntersectCurveSurfInfo list.
Destructor for AlIntersectSurfSurfInfo. Only deletes the isolatedPoints[] array, so that the user may choose which AlCurves to keep.
Intersects a curve with a surface. Points of intersection are returned in a AlIntersectCurveSurfInfo list, giving (x,y,z) coordinates, (u,v) parameters, and (t) parameters.
< curve - a valid AlCurve to intersect
< surface - a valid surface to intersect
> list - the points of intersection (see AlIntersectCurveSurfInfo)
sSuccess - successful intersection (not necessarily any points of intersection)
sInvalidArgument - the curve/surface was invalid
sFailure - the intersection failed
Intersects a curve with another curve. Points of intersection are returned in a AlIntersectCurveCurveInfo list, giving (x,y,z) coordinates and (t) parameters.
< curve1 - a valid AlCurve to intersect
< curve2 - a valid AlCurve to intersect
> list - the points of intersection (see AlIntersectCurveCurveInfo)
sSuccess - successful intersection (not necessarily any points of intersection)
sInvalidArgument - a curve was invalid
sFailure - the intersection failed
This method intersects a surface and an infinite plane. As in t
he other surface/surface intersection method, an AlIntersectSurfSurfInfo is returned.
< surface - the surface to intersect
< point - point on the plane of intersection
< planeNormal - normal of the plane of intersection
> ss - the points of intersection (see AlIntersectSurfSurfInfo)
sSuccess - the intersection worked( does not imply intersection)
sInvalidArgument - the surface pointer is null
sInvalidObject - the surface is an invalid wrapper
sFailure - intersection failed
This method intersects a surface and a plane. The result of surface and plane intersection are curves. This method will find the curves of intersection, sum the bounding boxes of the curves and find the mid point of the joined bounding box. This method can be used to evaluate intersection points where the surface is discontinuous. Through iteration, you can find a point where the bounding box tolerance(distance from min to max points) is less than the parameter passed in.
< surface - the surface to intersect
< point - point on the plane of intersection
/< planeNormal - normal of the plane of intersection
< boundingBoxTolerance - smallest distance between the min and max points of a bounding box required
> noIntersect - set to TRUE or FALSE depending on if the intersection was found
>intersectWithTol - set to TRUE if the intersection was in a bounding box matching the specified tolerance. Set to FALSE otherwise.
> x,y,z - the mid point of the bounding box built from the curves of intersection
sSuccess - the intersection worked
sInvalidArgument - the surface pointer is null
sInvalidObject - the surface is an invalid wrapper
sFailure - intersection failed
Intersects a surface with another surface. Points of intersection are returned in a AlIntersectSurfSurf list, giving AlCurves and (x,y,z) points.
< surface1 - a valid AlCurve to intersect
< surface2 - a valid AlCurve to intersect
> ss - the points of intersection (see AlIntersectSurfSurfInfo)
sSuccess - successful intersection (not necessarily any points of intersection)
sInsufficientMemory - not enough memory to perform intersection
sInvalidArgument - a surface was invalid
sFailure - the intersection failed