source: GTP/trunk/Lib/Vis/Preprocessing/src/SceneGraph.h @ 2621

Revision 2621, 2.4 KB checked in by mattausch, 16 years ago (diff)
Line 
1#ifndef _SceneGraph_H__
2#define _SceneGraph_H__
3
4#include <string>
5#include "Containers.h"
6#include "AxisAlignedBox3.h"
7#include "Matrix4x4.h"
8
9namespace GtpVisibilityPreprocessor {
10
11class SceneGraphLeafIntersectable;
12class CKTB;
13
14
15/** Basic scene graph node, we are interested only in bounding boxes and topology
16    of the scene graph
17*/
18class SceneGraphNode
19{
20public:
21
22        virtual ~SceneGraphNode();
23        virtual bool IsLeaf() const = 0;
24
25        virtual void UpdateBox() = 0;
26
27        virtual AxisAlignedBox3 GetBox() const { return mBox; }
28
29protected:
30
31        AxisAlignedBox3 mBox;
32};
33 
34
35
36/** Scene graph interior node.
37*/
38class SceneGraphInterior: public SceneGraphNode
39{
40public:
41        virtual bool IsLeaf() const { return false; }
42        virtual void UpdateBox();
43
44        ~SceneGraphInterior();
45
46//protected:
47
48        SceneGraphNodeContainer mChildren;
49};
50
51
52/** Scene graph leaf node.
53*/
54class SceneGraphLeaf: public SceneGraphNode
55{
56public:
57
58        SceneGraphLeaf();
59        SceneGraphLeaf(bool isDynamic);
60        ~SceneGraphLeaf();
61       
62        void LoadTransform(const Matrix4x4 &m);
63
64        void GetTransform(Matrix4x4 &m) const;
65
66        virtual AxisAlignedBox3 GetBox() const;
67
68        virtual void ApplyTransform(const Matrix4x4 &trafo);
69        virtual bool IsDynamic() const { return mIsDynamic;}
70        virtual bool IsLeaf() const { return true; }
71        virtual void UpdateBox();
72
73#if DYNAMIC_OBJECTS_HACK
74        void RebuildKtbTree();
75        SceneGraphLeafIntersectable *GetIntersectable() { return mIntersectable; }
76#endif
77
78        /// used as actual pvs entry
79        ObjectContainer mGeometry;
80
81protected:
82
83#if DYNAMIC_OBJECTS_HACK
84       
85        SceneGraphLeafIntersectable *mIntersectable;
86        CKTB *mKtbTree;
87
88#endif
89
90        bool mIsDynamic;
91        Matrix4x4 mTrafo;
92};
93
94
95
96/** Scene graph class
97*/
98class SceneGraph
99{
100
101public:
102
103        SceneGraph();
104        ~SceneGraph();
105       
106        bool Export(const std::string filename);
107 
108        int CollectObjects(ObjectContainer &instances);
109 
110        int AssignObjectIds();
111 
112        void GetStatistics(int &intersectables, int &faces) const;
113
114        AxisAlignedBox3 GetBox() const { return mRoot->GetBox(); }
115        /** Exports binary version of the scene.
116        */
117        void ExportScene(const std::string filename);
118        /** Loads binary version of the scene.
119        */
120        void LoadScene(const std::string filename);
121
122        SceneGraphInterior *GetRoot();
123
124        //void SetRoot(SceneGraphNode *sgNnode);
125        void SetRoot(SceneGraphInterior *sgNnode);
126
127        void AddChild(SceneGraphNode *node);
128
129        int GetSize() const;
130
131protected:
132
133         SceneGraphInterior *mRoot;
134};
135
136
137}
138
139#endif
Note: See TracBrowser for help on using the repository browser.