59 #ifndef MB_BSPTREENODE_HH
60 #define MB_BSPTREENODE_HH
64 #include <ACG/Geometry/Types/PlaneT.hh>
65 #include <ACG/Geometry/Algorithms.hh>
71 template <
class BSPTraits>
74 typedef typename BSPTraits::Handle Handle;
75 typedef typename BSPTraits::Point Point;
76 typedef typename BSPTraits::VertexHandle VertexHandle;
77 typedef std::vector<Handle> Handles;
78 typedef typename Handles::iterator HandleIter;
79 typedef typename Handles::const_iterator HandleConstIter;
80 typedef typename Point::value_type Scalar;
85 parent_(_parent), left_child_(0), right_child_(0) {}
93 if (
this == parent_->left_child_)
94 parent_->left_child_ = 0;
96 parent_->right_child_ = 0;
101 return handles_.begin();
105 return handles_.end();
108 HandleConstIter begin()
const {
109 return handles_.begin();
112 HandleConstIter end()
const {
113 return handles_.end();
116 size_t size()
const {
117 return handles_.size();
121 TreeNode *parent_, *left_child_, *right_child_;
123 Point bb_min, bb_max;
126 template<
typename MeshT >
129 if (_max_depth > 0 && (left_child_ || right_child_) )
138 Point size_ = bb_max - bb_min;
140 std::vector<VertexHandle> vhandle(8);
141 vhandle[0] = _object->add_vertex(bb_min+Point(0.0,0.0,size_[2]));
142 vhandle[1] = _object->add_vertex(bb_min+Point(size_[0],0.0,size_[2]));
143 vhandle[2] = _object->add_vertex(bb_min+Point(size_[0],size_[1],size_[2]));
144 vhandle[3] = _object->add_vertex(bb_min+Point(0.0,size_[1],size_[2]));
145 vhandle[4] = _object->add_vertex(bb_min+Point(0.0,0.0,0.0));
146 vhandle[5] = _object->add_vertex(bb_min+Point(size_[0],0.0,0.0));
147 vhandle[6] = _object->add_vertex(bb_min+Point(size_[0],size_[1],0.0));
148 vhandle[7] = _object->add_vertex(bb_min+Point(0.0,size_[1],0.0));
152 std::vector<VertexHandle> face_vhandles;
154 face_vhandles.clear();
155 face_vhandles.push_back(vhandle[0]);
156 face_vhandles.push_back(vhandle[1]);
157 face_vhandles.push_back(vhandle[2]);
158 face_vhandles.push_back(vhandle[3]);
159 _object->add_face(face_vhandles);
161 face_vhandles.clear();
162 face_vhandles.push_back(vhandle[7]);
163 face_vhandles.push_back(vhandle[6]);
164 face_vhandles.push_back(vhandle[5]);
165 face_vhandles.push_back(vhandle[4]);
166 _object->add_face(face_vhandles);
168 face_vhandles.clear();
169 face_vhandles.push_back(vhandle[1]);
170 face_vhandles.push_back(vhandle[0]);
171 face_vhandles.push_back(vhandle[4]);
172 face_vhandles.push_back(vhandle[5]);
173 _object->add_face(face_vhandles);
175 face_vhandles.clear();
176 face_vhandles.push_back(vhandle[2]);
177 face_vhandles.push_back(vhandle[1]);
178 face_vhandles.push_back(vhandle[5]);
179 face_vhandles.push_back(vhandle[6]);
180 _object->add_face(face_vhandles);
182 face_vhandles.clear();
183 face_vhandles.push_back(vhandle[3]);
184 face_vhandles.push_back(vhandle[2]);
185 face_vhandles.push_back(vhandle[6]);
186 face_vhandles.push_back(vhandle[7]);
187 _object->add_face(face_vhandles);
189 face_vhandles.clear();
190 face_vhandles.push_back(vhandle[0]);
191 face_vhandles.push_back(vhandle[3]);
192 face_vhandles.push_back(vhandle[7]);
193 face_vhandles.push_back(vhandle[4]);
194 _object->add_face(face_vhandles);
207 template<
class BSPTraits>
208 std::ostream &operator<< (std::ostream &stream, const TreeNode<BSPTraits> &node) {
209 stream <<
"[TreeNode instance. Handles: ";
211 it != it_end; ++it) {
213 if (it < it_end-1) stream <<
", ";
215 stream <<
", parent: " << node.
parent_ <<
", left_child_: " << node.left_child_
216 <<
", right_child_: " << node.right_child_ <<
", plane_: <not implemented>, bb_min: "
217 << node.bb_min <<
", bb_max: " << node.bb_max <<
", size(): " << node.size() <<
"]";
222 #endif // MB_BSPTREENODE_HH defined
void visualizeTree(MeshT *_object, int _max_depth)
This visualizes the bounding boxes.
BaseNode * parent_
pointer to parent node