Interface
to the DAG node that gives access to faces.
Synopsis
#include <AlFaceNode.h>
class AlFaceNode : public AlCurveNode
AlFaceNode();
virtual ~AlFaceNode();
virtual AlObject* copyWrapper() const;
statusCode create( AlFace * );
virtual AlObjectType type() const;
AlFace* firstFace() const;
AlFace* firstFace(AlTM&) const;
statusCode addFace( AlFace* );
statusCode removeFace( AlFace* );
AlSurface* convertToTrimmedSurface( boolean = FALSE )const;
statusCode normal( double &, double &, double & ) const;
Description
AlFaceNode is the class
used to access faces in the DAG. Faces can be created from scratch
or read in from a wire file and accessed via the firstFace() method.
A Face is a collection of closed curves that all lie in the same
plane. An AlFaceNode points to an AlFace, which points to the next
face in the collection and so on...
Add faces to the collection
with the addFace() method and remove them with the removeFace()
method. In order to access the list of faces, you walk through the
face list with AlFace methods nextFace() and prevFace().
There are two ways to
delete an AlFaceNode. If the AlFaceNode::deleteObject() method is
called, then this node’s AlFace objects are all deleted. If this
node only has one face and its deleteObject() method is called,
then this node is deleted as well.
AlFaceNode::AlFaceNode()
Description
Constructs
an AlFaceNode wrapper object.
AlFaceNode::~AlFaceNode()
Description
Deletes
an AlFaceNode wrapper object.
AlObject* AlFaceNode::copyWrapper()
const
Description
Returns an
exact duplicate of this AlFaceNode wrapper.
statusCode AlFaceNode::create(
AlFace *face )
Description
Allocates the DAG node for the
AlFaceNode. It adds the given face as the first face of the face
node.
Arguments
< face - the first
face to belong under the AlFaceNode
Return Codes
sSuccess - the face node
was created
sInvalidArgument - ’face’
was invalid or NULL
sAlreadyCreated - the
face node was already created elsewhere
sInsufficientMemory -
out of memory
sFailure - the face node
could not be created
AlObjectType AlFaceNode::type()
const
Description
Returns
the class identifier kFaceNodeType.
AlFace* AlFaceNode::firstFace()
const
Description
Returns
the first face in the list of faces. Access the remainder of the
faces in the list with AlFace methods. This method returns NULL
if the list is empty.
AlFace* AlFaceNode::firstFace(AlTM&
tm) const
Description
Returns the first face in the list of faces.
Access the remainder of the faces in the list with AlFace methods.
This method returns NULL if the list is empty. The AlTM will be updated
with the faceNode’s TM if a face exists.
Arguments
> tm - the transformation
matrix to be updated with the faceNode’s TM
statusCode AlFaceNode::addFace(
AlFace* face )
Description
Adds a face to the end of the
list of faces. The face must not already belong to another AlFaceNode.
Arguments
< face - AlFace to
add to list of AlFaceNode’s faces
Return Codes
sSuccess - the face was
successfully added to the list of faces
sInvalidArgument - ’face’
was invalid or NULL
sInvalidObject - the
face node object was invalid
sFailure - an error occurred
statusCode AlFaceNode::removeFace(
AlFace* alFace )
Description
Removes a face from the
list of faces. This must not be the last face under the face node. When
the face is removed from under the face node, it is no longer part
of the universe that would be stored. Any animation on the CVs of
the face will be deleted, and the CVs will be removed from any clusters
or sets they are in.
Arguments
< alFace - the face
to remove from the AlFaceNode’s list of faces
Return Codes
sSuccess - the face was
removed from the list of faces
sInvalidArgument - ’alFace’
was invalid or NULL
sInvalidObject - the
face node object was invalid
sFailure - an error occurred
AlSurface * AlFaceNode::convertToTrimmedSurface(
boolean worldSpace ) const
Description
Returns
an AlSurface that represents the AlFace geometry converted to a
trimmed surface. Returns NULL if the AlFace geometry is invalid
for any reason. A trimmed surface will not be created if the AlFace
curves are non-planar or intersecting. The AlSurface created does
NOT have a parent AlSurfaceNode. The AlSurface will be constructed
in object space if worldSpace is FALSE (the default) or in world
space if worldSpace is TRUE. As well only the geometry information
will be converted. Shader information, and so on, will not be copied
over to the new surface.
statusCode AlFaceNode::normal(
double &x, double &y, double &z ) const
Description
Attempts
to calculate the overall normal of all of the face curves in this
face. If the faces are not coplanar, then sFailure will be returned.
This is an expensive function to execute.
Note that this function
is implicitly called by convertToTrimmedSurface.
Arguments
> x,y,z, - the returned
normal
Return Codes
sInvalidObject - the
facenode was invalid
sFailure - the faces
were not planar
sSuccess - the faces
were planar and the normal was returned
sInsufficientMemory