source: GTP/trunk/Lib/Vis/Preprocessing/src/SceneGraph.cpp @ 2176

Revision 2176, 3.4 KB checked in by mattausch, 18 years ago (diff)

removed using namespace std from .h

RevLine 
[162]1//#include <boost/algorithm/string.hpp>
2
3#include <stack>
4#include "SceneGraph.h"
5#include "X3dExporter.h"
[339]6#include "Intersectable.h"
[162]7
8
[2176]9using namespace std;
10
[863]11namespace GtpVisibilityPreprocessor {
[860]12
13
[162]14bool
15SceneGraph::Export( const string filename )
16{
17  if (strstr(filename.c_str(), ".x3d")) {
18    X3dExporter exporter(filename);
19    exporter.ExportScene(mRoot);
20    return true;
21  } else {
22    cerr<<"Error: Currently unsuported export format, filename "<<filename<<endl;
23   
24  }
25 
26 
27    return false;
28 
29}
30
31
[1328]32SceneGraphNode::~SceneGraphNode()
33{
34        CLEAR_CONTAINER(mGeometry);
35        // recursivly delete all children
36        CLEAR_CONTAINER(mChildren);
37}
38
39
40/************************************************************/
41/*                 SceneGraph implementation                */
42/************************************************************/
43
44
45SceneGraph::SceneGraph():
46mRoot(NULL)
47{
48}
49
50
[1002]51SceneGraph::~SceneGraph()
52{
53        DEL_PTR(mRoot);
54}
55
56
[1328]57SceneGraphNode *SceneGraph::GetRoot()
[1002]58{
[1328]59        return mRoot;
60}
[1002]61
[1328]62
63void SceneGraph::SetRoot(SceneGraphNode *root)
64{
65        mRoot = root;
[1002]66}
67
68
[162]69int
[176]70SceneGraph::CollectObjects(ObjectContainer *instances)
[162]71{
[490]72        instances->clear();
[1328]73        int number = 0;
[162]74
[1328]75        stack<SceneGraphNode *> nodeStack;
76        nodeStack.push(mRoot);
77
78        while (!nodeStack.empty()) {
79                SceneGraphNode *node = nodeStack.top();
80                nodeStack.pop();
[1344]81               
82                ObjectContainer::const_iterator mi = node->mGeometry.begin();
[1328]83                for (; mi != node->mGeometry.end(); mi++)
84                {
85                        instances->push_back(*mi);
86                }
[1344]87       
[1328]88                SceneGraphNodeContainer::iterator ni = node->mChildren.begin();
89                for (; ni != node->mChildren.end(); ni++) {
[1344]90                        nodeStack.push(*ni);   
[1328]91                        number++;
92                }
93        }
[1344]94
[1328]95        return number;
[162]96}
[339]97
98
99int
100SceneGraph::AssignObjectIds()
101{
102  int id = 1;
103  stack<SceneGraphNode *> nodeStack;
104 
105  nodeStack.push(mRoot);
[1344]106
[339]107  while (!nodeStack.empty()) {
108    SceneGraphNode *node = nodeStack.top();
109    nodeStack.pop();
110               
[576]111    ObjectContainer::iterator mi = node->mGeometry.begin();
112    for (; mi != node->mGeometry.end(); mi++) {
[1344]113                (*mi)->SetId(id++);
[576]114        }
[339]115   
116    SceneGraphNodeContainer::iterator ni = node->mChildren.begin();
117    for (; ni != node->mChildren.end(); ni++) {
118      nodeStack.push(*ni);
119    }
120  }
[1344]121 
122  // return max id
[339]123  return id;
124}
[387]125
126void
127SceneGraph::GetStatistics(int &intersectables, int &faces) const
128{
129  stack<SceneGraphNode *> nodeStack;
130 
131  nodeStack.push(mRoot);
132  faces = 0;
133        intersectables = 0;
134  while (!nodeStack.empty()) {
135    SceneGraphNode *node = nodeStack.top();
136    nodeStack.pop();
137               
138    ObjectContainer::const_iterator mi = node->mGeometry.begin();
139    for (; mi != node->mGeometry.end(); mi++) {
140                        intersectables++;
141                        faces += (*mi)->NumberOfFaces();
142                }
143   
144    SceneGraphNodeContainer::iterator ni = node->mChildren.begin();
145    for (; ni != node->mChildren.end(); ni++) {
146      nodeStack.push(*ni);
147    }
148  }
149       
150}
[492]151
152
153void
154SceneGraphNode::UpdateBox()
155{
156  AxisAlignedBox3 box;
157 
158  box.Initialize();
159 
160  ObjectContainer::const_iterator mi = mGeometry.begin();
161  for (; mi != mGeometry.end(); mi++)
162        box.Include((*mi)->GetBox());
163 
164  SceneGraphNodeContainer::iterator ni = mChildren.begin();
165  for (; ni != mChildren.end(); ni++) {
166        (*ni)->UpdateBox();
167        box.Include((*ni)->mBox);
168  }
169 
170  mBox = box;
171}
[860]172
[1166]173
174void SceneGraph::ExportScene(const string filename)
175{
[1194]176       
[1166]177}
178
[1194]179
[1166]180void SceneGraph::LoadScene(const string filename)
181{
182        //  load binary version of mesh
183}
184
[1958]185
[860]186}
Note: See TracBrowser for help on using the repository browser.