39 #ifndef OCTREE_ITERATOR_H
40 #define OCTREE_ITERATOR_H
56 #pragma GCC system_header
68 template<
typename DataT,
typename OctreeT>
69 class OctreeIteratorBase :
public std::iterator<std::forward_iterator_tag, const OctreeNode, void,
70 const OctreeNode*, const OctreeNode&>
82 octree_ (octree_arg), currentNode_ (NULL)
91 octree_ (src.octree_), currentNode_ (src.currentNode_), currentOctreeDepth_ (src.currentOctreeDepth_), currentOctreeKey_ (
92 src.currentOctreeKey_)
102 octree_ = src.octree_;
103 currentNode_ = src.currentNode_;
104 currentOctreeDepth_ = src.currentOctreeDepth_;
105 currentOctreeKey_ = src.currentOctreeKey_;
120 currentNode_ =
static_cast<OctreeNode*
> (octree_.getRootNode ());
121 currentOctreeDepth_ = 0;
124 currentOctreeKey_.
x = currentOctreeKey_.
y = currentOctreeKey_.
z = 0;
133 return (currentOctreeKey_);
142 return (currentOctreeDepth_);
151 return (currentNode_);
196 ret = octree_.getBranchBitPattern (*currentBranch);
210 assert(this->currentNode_ );
212 octree_.getDataFromOctreeNode(this->currentNode_, data_arg);
219 getData (std::vector<DataT>& dataVector_arg)
const
221 assert(this->currentNode_);
223 octree_.getDataFromOctreeNode(this->currentNode_, dataVector_arg);
231 assert(this->currentNode_);
233 return octree_.getDataSizeFromOctreeNode(this->currentNode_);
239 virtual unsigned long
242 unsigned long id = 0;
244 if (this->currentNode_)
247 unsigned int depth = octree_.getTreeDepth ();
248 id = currentOctreeKey_.
x << (depth * 2) | currentOctreeKey_.
y << (depth * 1)
249 | currentOctreeKey_.
z << (depth * 0);
263 unsigned int currentOctreeDepth_;
275 template<
typename DataT,
typename OctreeT>
325 unsigned char currentChildIdx_;
328 std::vector<std::pair<OctreeNode*, unsigned char> > stack_;
337 template<
typename DataT,
typename OctreeT>
392 std::deque<FIFOElement> FIFO_;
402 template<
typename DataT,
typename OctreeT>
442 }
while ((this->currentNode_) && (this->currentNode_->getNodeType () !=
LEAF_NODE));
467 if (this->currentNode_ && (this->currentNode_->getNodeType () ==
LEAF_NODE))
468 ret = this->currentNode_;