#include <eng_node_visitor.hh>

Public Member Functions | |
| Visitor (Graph &graph, Node::Ptr root) | |
| Visitor (Graph &graph) | |
| virtual | ~Visitor () |
| virtual void | Visit (Node &node) |
| virtual void | Visit (LodNode &node) |
| virtual void | Visit (PartitionNode &node) |
| virtual void | Visit (TransformNode &node) |
| virtual void | Visit (VertexsNode &node) |
| virtual void | Visit (NormalsNode &node) |
| virtual void | Visit (ModesNode &node) |
| virtual void | Visit (MaterialNode &node) |
| virtual void | Visit (TextureNode &node) |
| virtual void | Visit (ColorsNode &node) |
| virtual void | Visit (PolygonNode &node) |
| virtual void | Visit (PolygonNode_TriColor1 &node) |
| virtual void | Visit (PolygonNode_TriColor3 &node) |
| virtual void | Visit (PolygonNode_QuadColor1 &node) |
| virtual void | Visit (PolygonNode_QuadColor4 &node) |
| virtual void | Visit (PolygonNode_Tex &node) |
| virtual void | Visit (PolygonNode_TexTriColor1 &node) |
| virtual void | Visit (PolygonNode_TexTriColor3 &node) |
| virtual void | Visit (PolygonNode_TexQuadColor1 &node) |
| virtual void | Visit (PolygonNode_TexQuadColor4 &node) |
| virtual void | Visit (SpecialNode &node) |
| Node::Ptr | GetRootNode (void) const |
| virtual | operator bool () const |
| Can stop Graph::Traverse() by becoming false. | |
| void | Stop (void) |
| virtual void | Begin (GraphTraversal::Ptr traversal) |
| allows Visitor::Visit() to push "departure nodes" during traversal | |
| virtual void | End (void) |
| Visitor::End() is called after traversal ended. | |
Protected Member Functions | |
| void | SetRootNode (Node::Ptr root) |
Protected Attributes | |
| Graph & | mGraph |
| Node::Ptr | mRoot |
| bool | mStop |
/// In parallel to the set of node classes, the Visitor class has
/// a set of Visit() methods which correlate to each class of node.
/// Each node class has an Accept(Visitor&) method.
/// A function to traverse the Graph passes the Visitor
/// to every node's Accept() method. In turn, every node
/// calls and passes itself to the Visitor's Visit() method
/// that corresponds to the node's class.
/// The Visitor design pattern doesn't necessarily require
/// tediously defining a Visitor::Visit() method for every Node class
/// If specific action is needed for a specific Node class,
/// then Visitor::Visit(Node&) can be the default method.
///
/// Visit() will be called by Accept() of the corresponding Node class.
/// By default, each Visit is a NOP (not abstract), to facilitate
/// deriving a Visitor that only has a special action for a specific Node class.
/// NullNode::Visit() was omitted since it should never be visited.
///
/// [generalized]
///
/// class Node
/// {
/// virtual void Accept( Visitor& visitor ) = 0;
/// };
///
/// class TransformNode : public Node
/// {
/// void Accept( Visitor& visitor ) { visitor.Visit( *this ); }
/// };
///
/// class NodeVisitor
/// {
/// virtual void Visit( TransformNode& node ) { }
/// virtual void Visit( TextureNode& node) { }
/// [..]
/// };
///
/// void Graph::Traverse( Visitor& visitor )
/// {
/// NodeIterator nodeIter;
/// for ( nodeIter = mNodes.begin(); nodeIter != mNodes.end(); ++nodeIter )
/// {
/// nodeIter->Accept( visitor );
/// if ( not visitor ) break; // Visitor can stop traversal
/// }
/// }
///
/// Visitors that retain a reference to a Node:
/// --------------------------------------------
/// A Visitor that retains a reference to a Node after traversal
/// should use the reference-counted Node::Ptr or risk dangling.
/// Although Visitor::Visit(Node&) isn't passed a Node::Ptr,
/// Node is a Shared object which can be converted to a Node::Ptr
/// by assigning its raw pointer to a Node::Ptr variable
/// (which is how every Node::Ptr was created).
///
/// class VisitorSearch
/// {
/// void Visit( Node& node )
/// {
/// if ( node == sought ) mMatch = &node;
/// }
/// private:
/// Node::Ptr mMatch;
/// };
///
/// Visitor derivatives that visit node derivatives:
/// ------------------------------------------------
/// The trick is to use static_cast to cast the base Visitor to the derived Visitor,
/// in order for the compiler to select the derived Visit() method over the base one.
///
/// class Visitor
/// {
/// class SpecialNode
/// {
/// };
/// };
///
/// class VisitorDerived : public Visitor
/// {
/// class DerivedSpecialNode : public SpecialNode
/// {
/// void Accept( Visitor& visitor )
/// {
/// static_cast<DerivedVisitor&>(visitor).Visit( *this );
/// ^^^^^^^^^^^ solution
/// };
/// };
/// };
///
/// | eng::Visitor::Visitor | ( | Graph & | graph | ) |
| virtual eng::Visitor::~Visitor | ( | ) | [inline, virtual] |
| virtual void eng::Visitor::Visit | ( | Node & | node | ) | [inline, virtual] |
| virtual void eng::Visitor::Visit | ( | LodNode & | node | ) | [inline, virtual] |
Reimplemented in eng::VisitorLod.
| virtual void eng::Visitor::Visit | ( | PartitionNode & | node | ) | [inline, virtual] |
Reimplemented in mod_base::VisitorClonePartitionNodes.
| virtual void eng::Visitor::Visit | ( | TransformNode & | node | ) | [inline, virtual] |
Reimplemented in eng::VisitorDraw, eng::VisitorGetFirstTransformNode, and eng::Object::VisitorComputeVolume.
| virtual void eng::Visitor::Visit | ( | VertexsNode & | node | ) | [inline, virtual] |
Reimplemented in eng::VisitorDraw, and eng::Object::VisitorComputeVolume.
| virtual void eng::Visitor::Visit | ( | NormalsNode & | node | ) | [inline, virtual] |
Reimplemented in eng::VisitorDraw, and eng::VisitorSetRecomputeNormals.
| virtual void eng::Visitor::Visit | ( | ModesNode & | node | ) | [inline, virtual] |
Reimplemented in eng::VisitorDraw, and mod_sim::VisitorChangeFlameColor.
| virtual void eng::Visitor::Visit | ( | MaterialNode & | node | ) | [inline, virtual] |
Reimplemented in eng::VisitorDraw.
| virtual void eng::Visitor::Visit | ( | TextureNode & | node | ) | [inline, virtual] |
Reimplemented in eng::VisitorDraw.
| virtual void eng::Visitor::Visit | ( | ColorsNode & | node | ) | [inline, virtual] |
Reimplemented in eng::VisitorDraw, and mod_sim::VisitorChangeFlameColor.
| virtual void eng::Visitor::Visit | ( | PolygonNode & | node | ) | [inline, virtual] |
Reimplemented in eng::VisitorDraw, and eng::VisitorComputeNormals.
| void eng::Visitor::Visit | ( | PolygonNode_TriColor1 & | node | ) | [virtual] |
For convenience, by default, Visit() of PolygonNode derivatives call Visit(PolygonNode&).
Reimplemented in eng::VisitorDraw.
| void eng::Visitor::Visit | ( | PolygonNode_TriColor3 & | node | ) | [virtual] |
Reimplemented in eng::VisitorDraw.
| void eng::Visitor::Visit | ( | PolygonNode_QuadColor1 & | node | ) | [virtual] |
Reimplemented in eng::VisitorDraw.
| void eng::Visitor::Visit | ( | PolygonNode_QuadColor4 & | node | ) | [virtual] |
Reimplemented in eng::VisitorDraw.
| void eng::Visitor::Visit | ( | PolygonNode_Tex & | node | ) | [virtual] |
Reimplemented in eng::VisitorDraw.
| void eng::Visitor::Visit | ( | PolygonNode_TexTriColor1 & | node | ) | [virtual] |
Reimplemented in eng::VisitorDraw.
| void eng::Visitor::Visit | ( | PolygonNode_TexTriColor3 & | node | ) | [virtual] |
Reimplemented in eng::VisitorDraw.
| void eng::Visitor::Visit | ( | PolygonNode_TexQuadColor1 & | node | ) | [virtual] |
Reimplemented in eng::VisitorDraw.
| void eng::Visitor::Visit | ( | PolygonNode_TexQuadColor4 & | node | ) | [virtual] |
Reimplemented in eng::VisitorDraw.
| virtual void eng::Visitor::Visit | ( | SpecialNode & | node | ) | [inline, virtual] |
Reimplemented in eng::VisitorDraw.
| Node::Ptr eng::Visitor::GetRootNode | ( | void | ) | const [inline] |
| virtual eng::Visitor::operator bool | ( | ) | const [inline, virtual] |
Can stop Graph::Traverse() by becoming false.
| void eng::Visitor::Stop | ( | void | ) | [inline] |
| virtual void eng::Visitor::Begin | ( | GraphTraversal::Ptr | traversal | ) | [inline, virtual] |
allows Visitor::Visit() to push "departure nodes" during traversal
| virtual void eng::Visitor::End | ( | void | ) | [inline, virtual] |
Visitor::End() is called after traversal ended.
Reimplemented in eng::VisitorDraw, eng::VisitorComputeNormals, and eng::Object::VisitorComputeVolume.
| void eng::Visitor::SetRootNode | ( | Node::Ptr | root | ) | [inline, protected] |
Graph& eng::Visitor::mGraph [protected] |
Node::Ptr eng::Visitor::mRoot [protected] |
bool eng::Visitor::mStop [protected] |
Palomino 3D Engine documents generated by doxygen 1.5.3 on Fri Nov 23 11:26:24 2007