OctTree.cc

Go to the documentation of this file.
00001 #include <esg/spacesorting/OctTree.h>
00002 
00003 using namespace esg;
00004 
00005 void OctTree::_append(SceneGraphObject*, Node*)
00006 {
00007     cerr << "OctTree::_append(): Not implemented" << endl;
00008 }    
00009 
00010 SceneGraphObject* OctTree::_detach(Node* pNode)
00011 {
00012     cerr << "OctTree::_detach(): Not implemented" << endl;
00013     return NULL;
00014 }
00015 
00016 void OctTree::_build_tree(Node* pNode)
00017 {
00018     cerr << "OctTree::_build_tree(): Not implemented" << endl;
00019 }
00020 
00021 void OctTree::_rebuild_tree(Node* pNode)
00022 {
00023     cerr << "OctTree::_rebuild_tree(): Not implemented" << endl;
00024 }
00025 
00026 void OctTree::_destroy_tree(Node* pNode)
00027 {
00028     pNode->objectList.dropAll();
00029     if (pNode->isInner()) {
00030         for (register int i = 0; i < 8; i++) {
00031             _destroy_tree(pNode->children[i]);
00032             delete pNode->children[i];
00033         }
00034         delete [] pNode->children;
00035         pNode->children = NULL;
00036     }
00037 }
00038 
00039 
00040 //------- public --------
00041 
00042 OctTree::OctTree(bool delay, unsigned sideLength)
00043     : SDS(false), _sideLength(sideLength)
00044 {
00045     if (delay) {
00046         cerr << "OctTree::OctTree(): Delay of build is not implemented." << endl;
00047         cerr << "                    Switching to online insertion." << endl;
00048     }
00049 }
00050 
00051 SDS* OctTree::clone() const
00052 {
00053     OctTree* ret = new OctTree();
00054     ret->_duplicate_attributes(*this);
00055     return ret;
00056 }
00057 
00058 Iterator* OctTree::createIterator()
00059 {
00060     return (Iterator*) new IteratorOctTree(this);
00061 }
00062 
00063 InspectorSDS* BVH::createInspector(unsigned level)
00064 {
00065     return new InspectorOctTree(this, level);
00066 }
00067 
00068 int OctTree::append(SceneGraphObject* obj)
00069 {
00070     if (!obj) return 0;
00071 
00072     if (!obj->tangible()) {
00073         _intangibleChildren.append(obj);
00074         return 1;
00075     }
00076 
00077     if (_delayBuild) _root.objectList.append(obj);
00078     else _append(obj, &_root);
00079 
00080     return 1;
00081 }
00082 
00083 SceneGraphObject* OctTree::detach(SceneGraphObject::OID oid)
00084 {
00085     return _detach(oid, &_root);
00086 }
00087 
00088 bool OctTree::update()
00089 {
00090     if (_delayBuild) return false;
00091     _rebuild_tree(&_root);
00092     return true;
00093 }
00094 
00095 bool OctTree::build()
00096 {
00097     if (!_delayBuild)  return false;
00098     if (_root.empty()) return false;
00099     _build_tree(&_root);
00100     _delayBuild = false;
00101     return true;
00102 }

Generated on Wed Jun 28 12:24:31 2006 for esg by  doxygen 1.4.6