eng_graph.hh

Go to the documentation of this file.
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