AlFaceNode
 
 
 

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