00001 /* 00008 * LEGAL: COPYRIGHT (C) 2007 JIM E. BROOKS 00009 * THIS SOURCE CODE IS RELEASED UNDER THE TERMS 00010 * OF THE GNU GENERAL PUBLIC LICENSE VERSION 2 (GPL 2). 00011 *****************************************************************************/ 00012 00013 #ifndef ENG_GRAPH_HH 00014 #define ENG_GRAPH_HH 1 00015 00016 #include "eng_node.hh" 00017 #include "eng_node_clones.hh" 00018 #include "eng_graph_traversal.hh" 00019 00020 namespace eng { 00021 00027 class Graph : public Shared // call Graph::Fork() to share a Graph 00028 { 00029 //.............................................................................. 00030 // Graph (ctor, dtor): 00031 public: Graph( void ); // constructs an empty Graph 00032 public: CLASS_METHOD shptr<Graph> MakeMinimalGraph( void ); // make a minimal-but-usable Graph 00033 public: CLASS_METHOD SharedPtr<Graph> MakeMinimalGraph( SharedPtr<Matrix> matrix ); 00034 private: Graph( const Graph& src ); 00035 public: ~Graph(); 00036 private: void RecursiveDetach( Node::Ptr node ); 00037 00038 //.............................................................................. 00039 // Graph (public interface): 00040 public: void AttachRootNode( Node::Ptr rootNode ); 00041 public: Node::Ptr GetRootNode( void ); 00042 public: SharedPtr<Graph> Fork( void ); 00043 public: void CloneNode( Node::Ptr node ); // Turns this Graph's Node into a private copy (clone). 00044 public: void Traverse( Visitor& visitor ); 00045 public: void Draw( SharedPtr<Object> object ); 00046 public: void SetLod( const ObjectLod objectLod ); 00047 public: bool IfMinimal( void ) { return mMinimal; } 00048 public: bool IfCloneNode( const Node& node ) const { return mNodeClones.IfClone( node ); } 00049 00050 //.............................................................................. 00051 // Graph (friends, private methods): 00052 friend class Node; 00053 friend class GraphMaker; 00054 friend class VisitorCloner; 00055 00056 //.............................................................................. 00057 // Graph (data members): 00058 private: Node::Ptr mRootNode; 00059 private: NodeClones mNodeClones; 00060 private: bool mMinimal; 00061 00062 //.............................................................................. 00063 // Graph (debug): 00064 #if DEBUG 00065 public: CLASS_VAR bool msDrawWorldBoxVolume; 00066 public: bool Check( void ); 00067 public: // final member 00068 #endif 00069 }; 00070 00071 } // namespace eng 00072 00073 #endif // ENG_GRAPH_HH
Palomino 3D Engine documents generated by doxygen 1.5.3 on Fri Nov 23 11:26:08 2007