Interface to curves on surfaces geometry.
Synopsis
#include <AlCurveOnSurface.h>
class AlCurveOnSurface : public AlObject
AlCurveOnSurface();
virtual ~AlCurveOnSurface();
virtual statusCode deleteObject();
virtual AlObject* copyWrapper() const;
virtual AlObjectType type() const;
statusCode create( int, curveFormType, int, const double[], int, const double[][4] );
statusCode create( int, const AlCurve*[] );
statusCode curveOnSurfaceData( double[], double[][4] ) const;
statusCode realCurveOnSurfaceData( double[], double[][4] ) const;
int degree() const;
curveFormType form() const;
int numberOfSpans() const;
int numberOfKnots() const;
int numberOfControlPoints() const;
int realNumberOfKnots() const;
double knotValue( int ) const;
statusCode controlPoint( int, double[4] ) const;
statusCode setKnotValue( int, double );
statusCode setControlPoint( int, const double[4] );
boolean inTrim() const;
boolean visible() const;
statusCode setVisible( boolean ) const;
AlSurface* surface() const;
statusCode worldSpace3DCopies( int&, AlCurve **& );
statusCode unaffected3DCopies( int&, AlCurve **& );
statusCode affected3DCopies( AlTM&, int&, AlCurve **& );
AlCurveOnSurface* nextCurveOnSurface() const;
AlCurveOnSurface* prevCurveOnSurface() const;
statusCode nextCurveOnSurfaceD();
statusCode prevCurveOnSurfaceD();
statusCode persistentID( AlPersistentID *&id, int ut = 1 );
statusCode hasPersistentID( int ut = 1 );
statusCode setPersistentID( AlPersistentID &, int );
statusCode insert( double );
statusCode reverse();
statusCode blindData( int, long &, const char *& );
statusCode setBlindData( int, long, const char * );
statusCode removeBlindData( int );
Description
AlCurveOnSurface is the interface to Alias’ curve on surface data objects. Curves on surfaces are created and added to a surface by allocating an AlCurveOnSurface,
then calling the create() method, and then calling AlSurfaceNode’s addCurveOnSurface() method to add it to a surface.
Curves on surfaces can also be read in from wire file and modified with this class. Curves on surfaces will be deleted when
the surface they are attached to is deleted.
When constructing a curve on surface, you will notice that you need to specify a matrix that has dimensions [numberOfControlPoints][4].
Each point has 4 values, for u, v, zero and w. The “u” and “v” specify the point in U-V parametric space. The third component
is zero because this component is not used. The "w" component is the homogeneous value, which is usually 1.0.
See the example programs for an example.
AlCurveOnSurface::AlCurveOnSurface()
Description
Constructs an AlCurveOnSurface wrapper object.
AlCurveOnSurface::~AlCurveOnSurface()
Description
Deletes an AlCurveOnSurface wrapper object.
statusCode AlCurveOnSurface::deleteObject()
Description
Deletes the curve on surface. If it is attached to a surface, it is removed from the surface before it is deleted.
Return Codes
sSuccess - the object was deleted
sInvalidObject - the curve was invalid
AlObject *AlCurveOnSurface::copyWrapper() const
Description
Makes an exact copy of the AlCurveOnSurface wrapper.
AlObjectType AlCurveOnSurface::type() const
Description
Returns the class identifier kCurveOnSurfaceType.
statusCode AlCurveOnSurface::create(int deg,curveFormType form,int numKnots,const double knotVector[],int numControlPts,const
double controlPoint[][4] )
Description
Refer to the AlCurve::create() method for information on the meaning and usage of the parameters.
There is one additional constraint placed on this method over and above the AlCurve::create() method. The third component
of each control point must be zero, since a curve on surface is expressed only in two dimensions (which is U-V parameter space)
plus a homogeneous coordinate (usually 1.0). U and V typically range from 0 to 1.
For any control point [u v 0.0 w], "u" and "v" represent the coordinate in U-V parameter space, and "w" represents the homogeneous
coordinate.
Arguments
See the description.
Return Codes
sSuccess - the curve on Surface was created
sInvalidArgument - an invalid or NULL argument was passed
sInsufficientMemory - there was not enough memory to create it
sFailure - the curve could not created
statusCode AlCurveOnSurface::create( int nb_curves, const AlCurve *curves[] )
Description
Creates a Closed Curve On Surface from a loop of AlCurves. This loop will be re-parameterized, so that the loop will be continuous and the form will be set accordingly. If the resulting
curve is not physically closed, it is forced closed with all of the start/end points equal.
Arguments
nb_curves - number of curves
curves - array of curves
Return Codes
sInvalidArgument - an invalid or NULL argument was passed
sFailure - the AlCurveOnSurface could not be created
sSuccess - the AlCurveOnSurface was created
statusCode AlCurveOnSurface::curveOnSurfaceData(double knotVector[],double controlPoint[][4] ) const
Description
Assumes that the ’knotVector’ array is of length ’numberOfKnots()’ and the ’controlPoint’ array is of length ’are studying()’
and returns the values of the knots and control points in these arrays.
Note that in the array of control points, each control point is represented by the quadruple [u v 0.0 w], where "u" and "v"
represent the control point in U-V parameter space, the "0.0" doesn’t represent anything, and the "w" is the homogeneous coordinate.
Arguments
> knotVector - contains the knots for this curve upon return
> controlPoint - contains the control points upon return
Return Codes
sSuccess - the knotVector & controlPoint data was returned
sInvalidArgument - knotVector or controlPoint was NULL
sInvalidObject - the AlCurveOnSurface was invalid
sFailure - an error occurred
statusCode AlCurveOnSurface::realCurveOnSurfaceData( double knotVector[], double controlPoint[][4] ) const
Description
This method assumes that the ’knotVector’ array is of length ’realNumberOfKnots()’ and the ’controlPoint’ array is of length
’numberOfControlPoints()’ and returns the values of the knots and control points in these arrays.
Note that in the array of control points, each control point is represented by the quadruple [u v 0.0 w], where "u" and "v"
represent the control point in U-V parameter space, the "0.0" doesn’t represent anything, and the "w" is the homogeneous coordinate.
Arguments
> knotVector - Contains the knots for this curve upon return.
> controlPoint - Contains the control points upon return.
Return Codes
sSuccess - the knotVector & controlPoint data was returned
sInvalidArgument - knotVector or controlPoint was NULL
sInvalidObject - the AlCurveOnSurface was invalid.
sFailure - an error occurred
int AlCurveOnSurface::degree() const
Description
Returns the degree of the curve. -1 is returned if the curve is not valid.
curveFormType AlCurveOnSurface::form() const
Description
Returns the form of the curve, which is kOpen, kClosed or kPeriodic. If a curve on surface is periodic, it is tangent continuous
at the point where it is closed. (If you use the "close" menu item in the interactive Alias package, you actually make a curve periodic.) If a curve is periodic, it implies that it is closed. If a curve is kClosed,
then it just means that its endpoints are coincident. Otherwise, the curve is kOpen.
int AlCurveOnSurface::numberOfSpans() const
Description
Returns the number of spans in the curve. This method returns -1 if the curve is invalid.
int AlCurveOnSurface::numberOfKnots() const
Description
Returns the number of knots (just numberOfSpans() + 1). This method returns -1 if the curve is invalid.
int AlCurveOnSurface::realNumberOfKnots() const
Description
Returns the actual number of knots on the curve. That is number_of_spans + 2*degree - 1. A value of -1 will be returned if
this method fails.
double AlCurveOnSurface::knotValue( int index ) const
Description
Given a valid knot index, returns the value of the knot in ’knotValue’. A valid knot index is one in the range ’0’ to ’numberOfKnots()-1’.
Arguments
< index - a valid index of the knot value to return
statusCode AlCurveOnSurface::setKnotValue( int index, double knotValue )
Description
Given a valid knot index, sets the value of the knot to be ’knotValue’. A valid knot index is one in the range ’0’ to ’numberOfKnots()-1’.
Arguments
< index - a valid index of the knot value to return
< knotValue - returns the knot value of the given index
Return Codes
sSuccess - the knot value was set
sInvalidArgument - the ’index’ was not in the range 0..#knots-1
sInvalidObject - the curve was invalid
sFailure - the curve was already in a trim
int AlCurveOnSurface::numberOfControlPoints() const
Description
Returns the number of control points.
statusCode AlCurveOnSurface::controlPoint( int index, double point[4] ) const
Description
Given a valid index, returns the value of the control point in ’point’. A valid index is one in the range ’0’ to ’numberOfControlPoints()-1’.
Note the control point is represented by the quadruple [u v 0.0 w], where "u" and "v" represent the control point in U-V parameter
space, the "0.0" is unused, and the "w" is the homogeneous coordinate.
Arguments
< index - a valid index of the control point to return
> point - returns the control point at position ’index’
Return Codes
sSuccess - the control point was returned
sInvalidArgument - the index was not valid or ’point’ was NULL
sInvalidObject - the curve was invalid
sFailure - an error occurred
statusCode AlCurveOnSurface::setControlPoint( int index, const double point[4] )
Description
Given a valid index, sets the value of the control point to ’point’. A valid index is one in the range ’0’ to ’numberOfControlPoints()-1’.
Note the control point is represented by a quadruple, [u v 0.0 w] where "u" and "v" represent the control point in U-V parameter
space, the "0.0" doesn’t represent anything, and the "w" is the homogeneous coordinate.
Arguments
< index - a valid index of the control point to return
< point - the value to set the control point at position ’index’ to
Return Codes
sSuccess - the control point was set
sInvalidArgument - the index was not valid or ’point’ was NULL
sInvalidObject - the curve was invalid
sFailure - an error occurred
AlSurface* AlCurveOnSurface::surface() const
Description
Returns a pointer to the surface that this curve is on. Otherwise, returns NULL. The surface that this curve-on-surface belongs
to MUST have a surface node attached to it.
boolean AlCurveOnSurface::inTrim() const
Description
Returns TRUE if this curve on surface is being used to trim the surface it is on.
boolean AlCurveOnSurface::visible() const
Description
Returns TRUE if the curve is visible (FALSE means the curve is invisible).
statusCode AlCurveOnSurface::setVisible( boolean visible ) const
Description
Sets the visibility on the curve on surface.
Return Codes
sSuccess - The visibility is set as given.
sFailure - The geometry under the curve on surface is invalid.
AlCurveOnSurface* AlCurveOnSurface::nextCurveOnSurface() const
Description
Returns the next curve on surface in the list of curve on surfaces that are attached to a specific surface. Returns NULL if
there is no next curve on surface.
statusCode AlCurveOnSurface::nextCurveOnSurfaceD()
Description
Destructively points the wrapper to the next curve on surface in the list of curves on surfaces that are attached to a specific
surface.
Return Codes
sSuccess - the wrapper now points to the next CurveOnSurface
sInvalidObject - the curve was invalid
sFailure - there is no next CurveOnSurface
AlCurveOnSurface* AlCurveOnSurface::prevCurveOnSurface() const
Description
Returns the previous curve on surface in the list of curves on surfaces that are attached to a specific surface. Returns NULL
if there is no previous curve on surface.
statusCode AlCurveOnSurface::prevCurveOnSurfaceD()
Description
Destructively points the wrapper to the previous curve on surface in the list of curves on surfaces that are attached to a
specific surface.
Return Codes
sSuccess - the wrapper now points to the previous CurveOnSurface
sInvalidObject - the curve was invalid
sFailure - there is no previous CurveOnSurface
statusCode AlCurveOnSurface::reverse()
Description
Reverse the direction of this curve on surface.
Return Codes
sInvalidObject - the curve on surface was invalid.
sFailure - the method didn’t succeed.
sSuccess - the direction of the curve on surface was successfully reversed.
statusCode AlCurveOnSurface::insert( double param )
Description
Inserts an edit point into the curve.
Arguments
< param - parametric value of the new edit point on the curve
Return Codes
sSuccess - normal completion
sInvalidArgument - param is out of bounds
sInvalidObject - the given object was not valid
sFailure - an error occurred
statusCode AlCurveOnSurface::worldSpace3DCopies( int& count, AlCurve **&ws_curves )
Description
Returns a pointer via a reference parameter to a temporary curve that represents a world space copy of the curve on surface.
The returned curve should be deleted after use. It does not have a parent node and so is not inserted into the DAG hierarchy.
This method creates cubic world space versions of a curve on surface. As there may be more than one spline returned, a loop
of splines is returned (and should be deleted later).
Arguments
> count - the number of curves returned in the curve array
> ws_curves - the array of curves
Return Codes
sSuccess - normal completion
sInvalidObject - the given object was not valid
sFailure - an error occurred
statusCode AlCurveOnSurface::unaffected3DCopies( int& count, AlCurve **&ws_curves )
Description
Returns a pointer via a reference parameter to a temporary curve that represents a world space copy of the curve on surface.
The returned curve should be deleted after use. It does not have a parent node and so is not inserted into the DAG hierarchy.
This method creates cubic world space versions of a curve on surface. As there may be more than one spline returned, a loop
of splines is returned (and should be deleted later).
Arguments
> count - the number of curves returned in the curve array
> ws_curves - the array of curves
Return Codes
sSuccess - normal completion
sInvalidObject - the given object was not valid
sFailure - an error occurred
statusCode AlCurveOnSurface::affected3DCopies( AlTM& tm, int& count, AlCurve **&ws_curves )
Description
Returns a pointer via a reference parameter to a temporary curve that represents a world space copy of the curve on surface.
The returned curve should be deleted after use. It does not have a parent node and so is not inserted into the DAG hierarchy.
tm is the transformation matrix generated while walking the DAG. This method creates cubic world space versions of a curve
on surface. As there may be more than one spline returned, a loop of splines is returned (and should be deleted later).
Arguments
> tm - transformation matrix generated by walking the DAG
> count - the number of curves returned in the curve array
> ws_curves - the array of curves
Return Codes
sSuccess - normal completion
sInvalidObject - the given object was not valid
sFailure - an error occurred
statusCode AlCurveOnSurface::persistentID( AlPersistentID *&id, int userType )
Description
Returns a copy of the AlPersistentID associated with this curve on surface. For user type 1, persistent IDs are created if
they do not exist already. For all other user types, persistent IDs are not created if they do not exist already, and the
method fails. User types between 0 and 9999 are reserved. If you would like to reserve a block of user types please contact
us.
Arguments
> id - a copy of the AlPersistentID
< userType - user type of the persistent ID desired.
Return Codes
sSuccess - normal completion
sInvalidObject - the given object is not valid
sFailure - the ID did not exist or could not be created
statusCode AlCurveOnSurface::setPersistentID( AlPersistentID &id, int userType )
Description
Sets the values of the AlPersistentID associated with this curve on surface. This method only allows you to create persistent
IDs with user types other than 1. If the persistent ID does not exist, it will be created.
User types between 0 and 9999 are reserved. If you would like to reserve a block of user types please contact us.
Arguments
< userType - user type of the persistent ID desired
> id - a copy of the AlPersistentID
Return Codes
sSuccess - normal completion
sInvalidObject - the given object is not valid
sInvalidArgument - the given user type is not valid
sFailure - the ID did not exist or could not be created
statusCode AlCurveOnSurface::hasPersistentID( int userType )
Description
Checks to see if the Curve On Surface has a persistent ID associated with it.
Arguments
< userType - user type of the persistent ID desired
Return Codes
sSuccess - the node has a persistent ID
sFailure - the node does not have a persistent ID
sInvalidObject - the given object is not valid
statusCode AlCurveOnSurface::blindData( int userType, long& blindDataSize, const char *&blindData )
Description
Get the blind data packet of the specified type from an AlCurveOnSurface.
Return code
sInvalidObject - the surface was invalid.
sSuccess - blind data successfully retrieved.
sFailure - blind data not found.
statusCode AlCurveOnSurface::setBlindData( int userType, long blindDataSize, const char *blindData )
Description
Add the passed blind data packet to an AlCurveOnSurface.
Return code
sInvalidObject - the surface was invalid.
sSuccess - blind data successfully added.
sFailure - blind data not added
statusCode AlCurveOnSurface::removeBlindData( int user_type )
Description
Removes the block of data of the given type from the object. Note that the user is still responsible for the memory associated
with this block of data.
Arguments
< user_type - user type of the blind desired.
Return Codes
sSuccess - everything is okay
sFailure - no such blind data existed
sInvalidObject - the given object is not valid