octree_poisson.h
/*
Copyright (c) 2006, Michael Kazhdan and Matthew Bolitho
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
Redistributions of source code must retain the above copyright notice, this list of
conditions and the following disclaimer. Redistributions in binary form must reproduce
the above copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the distribution.
Neither the name of the Johns Hopkins University nor the names of its contributors
may be used to endorse or promote products derived from this software without specific
prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE.
*/
#ifndef OCT_NODE_INCLUDED
#define OCT_NODE_INCLUDED
#if defined __GNUC__
# pragma GCC system_header
#endif
#include "allocator.h"
#include "binary_node.h"
#include "marching_cubes_poisson.h"
#define DIMENSION 3
namespace pcl
{
namespace poisson
{
template< class NodeData , class Real=float >
class OctNode
{
private:
static int UseAlloc;
class AdjacencyCountFunction
{
public:
int count;
void Function( const OctNode<NodeData,Real>* node1 , const OctNode<NodeData,Real>* node2 );
};
template<class NodeAdjacencyFunction>
void __processNodeFaces(OctNode* node,NodeAdjacencyFunction* F,int cIndex1,int cIndex2,int cIndex3,int cIndex4);
template<class NodeAdjacencyFunction>
void __processNodeEdges(OctNode* node,NodeAdjacencyFunction* F,int cIndex1,int cIndex2);
template<class NodeAdjacencyFunction>
void __processNodeNodes(OctNode* node,NodeAdjacencyFunction* F);
template<class NodeAdjacencyFunction>
static void __ProcessNodeAdjacentNodes(int dx,int dy,int dz,OctNode* node1,int radius1,OctNode* node2,int radius2,int cWidth2,NodeAdjacencyFunction* F);
template<class TerminatingNodeAdjacencyFunction>
static void __ProcessTerminatingNodeAdjacentNodes(int dx,int dy,int dz,OctNode* node1,int radius1,OctNode* node2,int radius2,int cWidth2,TerminatingNodeAdjacencyFunction* F);
template<class PointAdjacencyFunction>
static void __ProcessPointAdjacentNodes(int dx,int dy,int dz,OctNode* node2,int radius2,int cWidth2,PointAdjacencyFunction* F);
template<class NodeAdjacencyFunction>
static void __ProcessFixedDepthNodeAdjacentNodes(int dx,int dy,int dz,OctNode* node1,int radius1,OctNode* node2,int radius2,int cWidth2,int depth,NodeAdjacencyFunction* F);
template<class NodeAdjacencyFunction>
static void __ProcessMaxDepthNodeAdjacentNodes(int dx,int dy,int dz,OctNode* node1,int radius1,OctNode* node2,int radius2,int cWidth2,int depth,NodeAdjacencyFunction* F);
// This is made private because the division by two has been pulled out.
static inline int Overlap(int c1,int c2,int c3,int dWidth);
inline static int ChildOverlap(int dx,int dy,int dz,int d,int cRadius2);
const OctNode* __faceNeighbor(int dir,int off) const;
const OctNode* __edgeNeighbor(int o,const int i[2],const int idx[2]) const;
OctNode* __faceNeighbor(int dir,int off,int forceChildren);
OctNode* __edgeNeighbor(int o,const int i[2],const int idx[2],int forceChildren);
public:
static const int DepthShift,OffsetShift,OffsetShift1,OffsetShift2,OffsetShift3;
static const int DepthMask,OffsetMask;
static Allocator<OctNode> internalAllocator;
static int UseAllocator(void);
static void SetAllocator(int blockSize);
OctNode* parent;
OctNode* children;
short d , off[DIMENSION];
NodeData nodeData;
OctNode(void);
~OctNode(void);
int initChildren(void);
void depthAndOffset(int& depth,int offset[DIMENSION]) const;
int depth(void) const;
static inline void DepthAndOffset(const long long& index,int& depth,int offset[DIMENSION]);
static inline void CenterAndWidth(const long long& index,Point3D<Real>& center,Real& width);
static inline int Depth(const long long& index);
static inline void Index(int depth,const int offset[3],short& d,short off[DIMENSION]);
void centerAndWidth( Point3D<Real>& center , Real& width ) const;
bool isInside( Point3D< Real > p ) const;
int leaves(void) const;
int maxDepthLeaves(int maxDepth) const;
int nodes(void) const;
int maxDepth(void) const;
const OctNode* root(void) const;
const OctNode* nextLeaf(const OctNode* currentLeaf=NULL) const;
OctNode* nextLeaf(OctNode* currentLeaf=NULL);
const OctNode* nextNode(const OctNode* currentNode=NULL) const;
OctNode* nextNode(OctNode* currentNode=NULL);
const OctNode* nextBranch(const OctNode* current) const;
OctNode* nextBranch(OctNode* current);
const OctNode* prevBranch(const OctNode* current) const;
OctNode* prevBranch(OctNode* current);
void setFullDepth(int maxDepth);
void printLeaves(void) const;
void printRange(void) const;
template<class NodeAdjacencyFunction>
void processNodeFaces(OctNode* node,NodeAdjacencyFunction* F,int fIndex,int processCurrent=1);
template<class NodeAdjacencyFunction>
void processNodeEdges(OctNode* node,NodeAdjacencyFunction* F,int eIndex,int processCurrent=1);
template<class NodeAdjacencyFunction>
void processNodeCorners(OctNode* node,NodeAdjacencyFunction* F,int cIndex,int processCurrent=1);
template<class NodeAdjacencyFunction>
void processNodeNodes(OctNode* node,NodeAdjacencyFunction* F,int processCurrent=1);
template<class NodeAdjacencyFunction>
static void ProcessNodeAdjacentNodes(int maxDepth,OctNode* node1,int width1,OctNode* node2,int width2,NodeAdjacencyFunction* F,int processCurrent=1);
template<class NodeAdjacencyFunction>
static void ProcessNodeAdjacentNodes(int dx,int dy,int dz,OctNode* node1,int radius1,OctNode* node2,int radius2,int width2,NodeAdjacencyFunction* F,int processCurrent=1);
template<class TerminatingNodeAdjacencyFunction>
static void ProcessTerminatingNodeAdjacentNodes(int maxDepth,OctNode* node1,int width1,OctNode* node2,int width2,TerminatingNodeAdjacencyFunction* F,int processCurrent=1);
template<class TerminatingNodeAdjacencyFunction>
static void ProcessTerminatingNodeAdjacentNodes(int dx,int dy,int dz,OctNode* node1,int radius1,OctNode* node2,int radius2,int width2,TerminatingNodeAdjacencyFunction* F,int processCurrent=1);
template<class PointAdjacencyFunction>
static void ProcessPointAdjacentNodes(int maxDepth,const int center1[3],OctNode* node2,int width2,PointAdjacencyFunction* F,int processCurrent=1);
template<class PointAdjacencyFunction>
static void ProcessPointAdjacentNodes(int dx,int dy,int dz,OctNode* node2,int radius2,int width2,PointAdjacencyFunction* F,int processCurrent=1);
template<class NodeAdjacencyFunction>
static void ProcessFixedDepthNodeAdjacentNodes(int maxDepth,OctNode* node1,int width1,OctNode* node2,int width2,int depth,NodeAdjacencyFunction* F,int processCurrent=1);
template<class NodeAdjacencyFunction>
static void ProcessFixedDepthNodeAdjacentNodes(int dx,int dy,int dz,OctNode* node1,int radius1,OctNode* node2,int radius2,int width2,int depth,NodeAdjacencyFunction* F,int processCurrent=1);
template<class NodeAdjacencyFunction>
static void ProcessMaxDepthNodeAdjacentNodes(int maxDepth,OctNode* node1,int width1,OctNode* node2,int width2,int depth,NodeAdjacencyFunction* F,int processCurrent=1);
template<class NodeAdjacencyFunction>
static void ProcessMaxDepthNodeAdjacentNodes(int dx,int dy,int dz,OctNode* node1,int radius1,OctNode* node2,int radius2,int width2,int depth,NodeAdjacencyFunction* F,int processCurrent=1);
static int CornerIndex(const Point3D<Real>& center,const Point3D<Real> &p);
OctNode* faceNeighbor(int faceIndex,int forceChildren=0);
const OctNode* faceNeighbor(int faceIndex) const;
OctNode* edgeNeighbor(int edgeIndex,int forceChildren=0);
const OctNode* edgeNeighbor(int edgeIndex) const;
OctNode* cornerNeighbor(int cornerIndex,int forceChildren=0);
const OctNode* cornerNeighbor(int cornerIndex) const;
OctNode* getNearestLeaf(const Point3D<Real>& p);
const OctNode* getNearestLeaf(const Point3D<Real>& p) const;
static int CommonEdge(const OctNode* node1,int eIndex1,const OctNode* node2,int eIndex2);
static int CompareForwardDepths(const void* v1,const void* v2);
static int CompareByDepthAndXYZ( const void* v1 , const void* v2 );
static int CompareByDepthAndZIndex( const void* v1 , const void* v2 );
static int CompareForwardPointerDepths(const void* v1,const void* v2);
static int CompareBackwardDepths(const void* v1,const void* v2);
static int CompareBackwardPointerDepths(const void* v1,const void* v2);
template<class NodeData2>
OctNode& operator = (const OctNode<NodeData2,Real>& node);
static inline int Overlap2(const int &depth1,const int offSet1[DIMENSION],const Real& multiplier1,const int &depth2,const int offSet2[DIMENSION],const Real& multiplier2);
int write(const char* fileName) const;
int write(FILE* fp) const;
int read(const char* fileName);
int read(FILE* fp);
class Neighbors3
{
public:
OctNode* neighbors[3][3][3];
Neighbors3( void );
void clear( void );
};
class NeighborKey3
{
public:
Neighbors3* neighbors;
NeighborKey3( void );
~NeighborKey3( void );
void set( int depth );
Neighbors3& setNeighbors( OctNode* root , Point3D< Real > p , int d );
Neighbors3& getNeighbors( OctNode* root , Point3D< Real > p , int d );
Neighbors3& setNeighbors( OctNode* node , bool flags[3][3][3] );
Neighbors3& setNeighbors( OctNode* node );
Neighbors3& getNeighbors( OctNode* node );
};
class ConstNeighbors3
{
public:
const OctNode* neighbors[3][3][3];
ConstNeighbors3( void );
void clear( void );
};
class ConstNeighborKey3
{
public:
ConstNeighbors3* neighbors;
ConstNeighborKey3(void);
~ConstNeighborKey3(void);
void set(int depth);
ConstNeighbors3& getNeighbors( const OctNode* node );
ConstNeighbors3& getNeighbors( const OctNode* node , int minDepth );
};
class Neighbors5
{
public:
OctNode* neighbors[5][5][5];
Neighbors5( void );
void clear( void );
};
class ConstNeighbors5
{
public:
const OctNode* neighbors[5][5][5];
ConstNeighbors5( void );
void clear( void );
};
class NeighborKey5
{
int _depth;
public:
Neighbors5* neighbors;
NeighborKey5( void );
~NeighborKey5( void );
void set( int depth );
Neighbors5& getNeighbors( OctNode* node );
Neighbors5& setNeighbors( OctNode* node , int xStart=0 , int xEnd=5 , int yStart=0 , int yEnd=5 , int zStart=0 , int zEnd=5 );
};
class ConstNeighborKey5
{
int _depth;
public:
ConstNeighbors5* neighbors;
ConstNeighborKey5( void );
~ConstNeighborKey5( void );
void set( int depth );
ConstNeighbors5& getNeighbors( const OctNode* node );
};
void centerIndex(int maxDepth,int index[DIMENSION]) const;
int width(int maxDepth) const;
};
}
}
#include "octree_poisson.hpp"
#endif // OCT_NODE
pcl::poisson::OctNode::initChildren
int initChildren(void)
Definition: octree_poisson.hpp:89
pcl::poisson::OctNode::setFullDepth
void setFullDepth(int maxDepth)
Definition: octree_poisson.hpp:80
pcl
This file defines compatibility wrappers for low level I/O functions.
Definition: convolution.h:45
pcl::poisson::OctNode::ConstNeighborKey5::getNeighbors
ConstNeighbors5 & getNeighbors(const OctNode *node)
Definition: octree_poisson.hpp:1823
pcl::poisson::OctNode::leaves
int leaves(void) const
Definition: octree_poisson.hpp:197
pcl::poisson::OctNode::internalAllocator
static Allocator< OctNode > internalAllocator
Definition: octree_poisson.h:88
pcl::poisson::OctNode::isInside
bool isInside(Point3D< Real > p) const
Definition: octree_poisson.hpp:156
pcl::poisson::OctNode::processNodeEdges
void processNodeEdges(OctNode *node, NodeAdjacencyFunction *F, int eIndex, int processCurrent=1)
Definition: octree_poisson.hpp:323
pcl::poisson::OctNode::~OctNode
~OctNode(void)
Definition: octree_poisson.hpp:75
pcl::poisson::OctNode::ConstNeighbors3
Definition: octree_poisson.h:215
pcl::poisson::OctNode::nodeData
NodeData nodeData
Definition: octree_poisson.h:95
pcl::poisson::OctNode::NeighborKey5::neighbors
Neighbors5 * neighbors
Definition: octree_poisson.h:253
pcl::poisson::OctNode::ConstNeighborKey5::set
void set(int depth)
Definition: octree_poisson.hpp:1654
pcl::poisson::Allocator
This templated class assists in memory allocation and is well suited for instances when it is known t...
Definition: allocator.h:50
pcl::poisson::OctNode::ProcessNodeAdjacentNodes
static void ProcessNodeAdjacentNodes(int maxDepth, OctNode *node1, int width1, OctNode *node2, int width2, NodeAdjacencyFunction *F, int processCurrent=1)
Definition: octree_poisson.hpp:383
pcl::poisson::OctNode::NeighborKey5::NeighborKey5
NeighborKey5(void)
Definition: octree_poisson.hpp:1621
pcl::poisson::OctNode::printLeaves
void printLeaves(void) const
pcl::poisson::OctNode::cornerNeighbor
OctNode * cornerNeighbor(int cornerIndex, int forceChildren=0)
Definition: octree_poisson.hpp:1024
pcl::poisson::OctNode::ProcessFixedDepthNodeAdjacentNodes
static void ProcessFixedDepthNodeAdjacentNodes(int maxDepth, OctNode *node1, int width1, OctNode *node2, int width2, int depth, NodeAdjacencyFunction *F, int processCurrent=1)
pcl::poisson::OctNode::NeighborKey3::NeighborKey3
NeighborKey3(void)
Definition: octree_poisson.hpp:1085
pcl::poisson::OctNode::Neighbors5::neighbors
OctNode * neighbors[5][5][5]
Definition: octree_poisson.h:237
pcl::poisson::OctNode::maxDepth
int maxDepth(void) const
Definition: octree_poisson.hpp:176
pcl::poisson::OctNode::root
const OctNode * root(void) const
Definition: octree_poisson.hpp:216
pcl::poisson::OctNode::Neighbors3::clear
void clear(void)
Definition: octree_poisson.hpp:1081
pcl::poisson::OctNode::children
OctNode * children
Definition: octree_poisson.h:93
pcl::poisson::Point3D
Definition: geometry.h:50
pcl::poisson::OctNode::NeighborKey3::setNeighbors
Neighbors3 & setNeighbors(OctNode *root, Point3D< Real > p, int d)
pcl::poisson::OctNode::Neighbors3::neighbors
OctNode * neighbors[3][3][3]
Definition: octree_poisson.h:196
pcl::poisson::OctNode::CompareForwardDepths
static int CompareForwardDepths(const void *v1, const void *v2)
Definition: octree_poisson.hpp:779
pcl::poisson::OctNode::Overlap2
static int Overlap2(const int &depth1, const int offSet1[DIMENSION], const Real &multiplier1, const int &depth2, const int offSet2[DIMENSION], const Real &multiplier2)
Definition: octree_poisson.hpp:841
pcl::poisson::OctNode::read
int read(const char *fileName)
Definition: octree_poisson.hpp:1880
pcl::poisson::OctNode::OffsetShift3
static const int OffsetShift3
Definition: octree_poisson.h:85
pcl::poisson::OctNode::ConstNeighbors3::clear
void clear(void)
Definition: octree_poisson.hpp:1471
pcl::poisson::OctNode::operator=
OctNode & operator=(const OctNode< NodeData2, Real > &node)
pcl::poisson::OctNode::Neighbors3
Definition: octree_poisson.h:193
pcl::poisson::OctNode::Index
static void Index(int depth, const int offset[3], short &d, short off[DIMENSION])
Definition: octree_poisson.hpp:120
pcl::poisson::OctNode::OffsetMask
static const int OffsetMask
Definition: octree_poisson.h:86
pcl::poisson::OctNode::CommonEdge
static int CommonEdge(const OctNode *node1, int eIndex1, const OctNode *node2, int eIndex2)
Definition: octree_poisson.hpp:722
pcl::poisson::OctNode::DepthMask
static const int DepthMask
Definition: octree_poisson.h:86
pcl::poisson::OctNode::edgeNeighbor
OctNode * edgeNeighbor(int edgeIndex, int forceChildren=0)
Definition: octree_poisson.hpp:891
pcl::poisson::OctNode::ConstNeighborKey5
Definition: octree_poisson.h:262
pcl::poisson::OctNode::ProcessTerminatingNodeAdjacentNodes
static void ProcessTerminatingNodeAdjacentNodes(int maxDepth, OctNode *node1, int width1, OctNode *node2, int width2, TerminatingNodeAdjacencyFunction *F, int processCurrent=1)
Definition: octree_poisson.hpp:405
pcl::poisson::OctNode::Neighbors5::Neighbors5
Neighbors5(void)
Definition: octree_poisson.hpp:1608
pcl::poisson::OctNode
Definition: octree_poisson.h:48
pcl::poisson::OctNode::nextBranch
const OctNode * nextBranch(const OctNode *current) const
Definition: octree_poisson.hpp:224
pcl::poisson::OctNode::ConstNeighbors5::ConstNeighbors5
ConstNeighbors5(void)
Definition: octree_poisson.hpp:1609
pcl::poisson::OctNode::ConstNeighborKey5::neighbors
ConstNeighbors5 * neighbors
Definition: octree_poisson.h:266
pcl::poisson::OctNode::prevBranch
const OctNode * prevBranch(const OctNode *current) const
Definition: octree_poisson.hpp:237
pcl::poisson::OctNode::OffsetShift2
static const int OffsetShift2
Definition: octree_poisson.h:85
pcl::poisson::OctNode::nextNode
const OctNode * nextNode(const OctNode *currentNode=NULL) const
Definition: octree_poisson.hpp:276
pcl::poisson::OctNode::DepthShift
static const int DepthShift
Definition: octree_poisson.h:85
pcl::poisson::OctNode::NeighborKey3
Definition: octree_poisson.h:200
pcl::poisson::OctNode::NeighborKey3::set
void set(int depth)
Definition: octree_poisson.hpp:1094
pcl::poisson::OctNode::ConstNeighborKey3::ConstNeighborKey3
ConstNeighborKey3(void)
Definition: octree_poisson.hpp:1475
pcl::poisson::OctNode::printRange
void printRange(void) const
Definition: octree_poisson.hpp:291
pcl::poisson::OctNode::width
int width(int maxDepth) const
Definition: octree_poisson.hpp:1902
pcl::poisson::OctNode::parent
OctNode * parent
Definition: octree_poisson.h:92
pcl::poisson::OctNode::ConstNeighborKey5::ConstNeighborKey5
ConstNeighborKey5(void)
Definition: octree_poisson.hpp:1627
pcl::poisson::OctNode::centerAndWidth
void centerAndWidth(Point3D< Real > &center, Real &width) const
Definition: octree_poisson.hpp:146
pcl::poisson::OctNode::ConstNeighborKey3::getNeighbors
ConstNeighbors3 & getNeighbors(const OctNode *node)
pcl::poisson::OctNode::ProcessMaxDepthNodeAdjacentNodes
static void ProcessMaxDepthNodeAdjacentNodes(int maxDepth, OctNode *node1, int width1, OctNode *node2, int width2, int depth, NodeAdjacencyFunction *F, int processCurrent=1)
pcl::poisson::OctNode::SetAllocator
static void SetAllocator(int blockSize)
Definition: octree_poisson.hpp:56
pcl::poisson::OctNode::CompareBackwardDepths
static int CompareBackwardDepths(const void *v1, const void *v2)
Definition: octree_poisson.hpp:833
pcl::poisson::OctNode::processNodeCorners
void processNodeCorners(OctNode *node, NodeAdjacencyFunction *F, int cIndex, int processCurrent=1)
Definition: octree_poisson.hpp:333
pcl::poisson::OctNode::UseAllocator
static int UseAllocator(void)
Definition: octree_poisson.hpp:66
pcl::poisson::OctNode::ConstNeighborKey3::set
void set(int depth)
Definition: octree_poisson.hpp:1483
pcl::poisson::OctNode::CompareByDepthAndZIndex
static int CompareByDepthAndZIndex(const void *v1, const void *v2)
Definition: octree_poisson.hpp:802
pcl::poisson::OctNode::CenterAndWidth
static void CenterAndWidth(const long long &index, Point3D< Real > &center, Real &width)
Definition: octree_poisson.hpp:165
pcl::poisson::OctNode::NeighborKey3::neighbors
Neighbors3 * neighbors
Definition: octree_poisson.h:203
pcl::poisson::OctNode::ConstNeighbors5
Definition: octree_poisson.h:241
pcl::poisson::OctNode::depthAndOffset
void depthAndOffset(int &depth, int offset[DIMENSION]) const
Definition: octree_poisson.hpp:128
pcl::poisson::OctNode::processNodeFaces
void processNodeFaces(OctNode *node, NodeAdjacencyFunction *F, int fIndex, int processCurrent=1)
Definition: octree_poisson.hpp:313
pcl::poisson::OctNode::getNearestLeaf
OctNode * getNearestLeaf(const Point3D< Real > &p)
Definition: octree_poisson.hpp:685
pcl::poisson::OctNode::Neighbors5::clear
void clear(void)
Definition: octree_poisson.hpp:1611
pcl::poisson::OctNode::NeighborKey3::getNeighbors
Neighbors3 & getNeighbors(OctNode *root, Point3D< Real > p, int d)
pcl::poisson::OctNode::CompareByDepthAndXYZ
static int CompareByDepthAndXYZ(const void *v1, const void *v2)
Definition: octree_poisson.hpp:783
pcl::poisson::OctNode::OffsetShift1
static const int OffsetShift1
Definition: octree_poisson.h:85
pcl::poisson::OctNode::d
short d
Definition: octree_poisson.h:94
pcl::poisson::OctNode::Neighbors3::Neighbors3
Neighbors3(void)
Definition: octree_poisson.hpp:1079
pcl::poisson::OctNode::processNodeNodes
void processNodeNodes(OctNode *node, NodeAdjacencyFunction *F, int processCurrent=1)
Definition: octree_poisson.hpp:307
pcl::poisson::OctNode::ConstNeighbors3::ConstNeighbors3
ConstNeighbors3(void)
Definition: octree_poisson.hpp:1469
pcl::poisson::OctNode::Neighbors5
Definition: octree_poisson.h:234
pcl::poisson::OctNode::ConstNeighbors3::neighbors
const OctNode * neighbors[3][3][3]
Definition: octree_poisson.h:218
pcl::poisson::OctNode::NeighborKey5::set
void set(int depth)
Definition: octree_poisson.hpp:1645
pcl::poisson::OctNode::centerIndex
void centerIndex(int maxDepth, int index[DIMENSION]) const
Definition: octree_poisson.hpp:1907
pcl::poisson::OctNode::ConstNeighborKey3
Definition: octree_poisson.h:222
pcl::poisson::OctNode::NeighborKey5::~NeighborKey5
~NeighborKey5(void)
Definition: octree_poisson.hpp:1633
pcl::poisson::OctNode::ProcessPointAdjacentNodes
static void ProcessPointAdjacentNodes(int maxDepth, const int center1[3], OctNode *node2, int width2, PointAdjacencyFunction *F, int processCurrent=1)
Definition: octree_poisson.hpp:428
pcl::poisson::OctNode::CompareForwardPointerDepths
static int CompareForwardPointerDepths(const void *v1, const void *v2)
Definition: octree_poisson.hpp:817
pcl::poisson::OctNode::ConstNeighborKey3::neighbors
ConstNeighbors3 * neighbors
Definition: octree_poisson.h:225
pcl::poisson::OctNode::maxDepthLeaves
int maxDepthLeaves(int maxDepth) const
Definition: octree_poisson.hpp:206
pcl::poisson::OctNode::NeighborKey5::getNeighbors
Neighbors5 & getNeighbors(OctNode *node)
Definition: octree_poisson.hpp:1663
pcl::poisson::OctNode::Depth
static int Depth(const long long &index)
Definition: octree_poisson.hpp:144
pcl::poisson::OctNode::NeighborKey5
Definition: octree_poisson.h:249
pcl::poisson::OctNode::ConstNeighborKey3::~ConstNeighborKey3
~ConstNeighborKey3(void)
Definition: octree_poisson.hpp:1477
pcl::poisson::OctNode::depth
int depth(void) const
Definition: octree_poisson.hpp:135
pcl::poisson::OctNode::NeighborKey3::~NeighborKey3
~NeighborKey3(void)
Definition: octree_poisson.hpp:1087
pcl::poisson::Real
float Real
Definition: multi_grid_octree_data.h:85
pcl::poisson::OctNode::off
short off[DIMENSION]
Definition: octree_poisson.h:94
pcl::poisson::OctNode::ConstNeighborKey5::~ConstNeighborKey5
~ConstNeighborKey5(void)
Definition: octree_poisson.hpp:1639
pcl::poisson::OctNode::write
int write(const char *fileName) const
Definition: octree_poisson.hpp:1866
pcl::poisson::OctNode::OffsetShift
static const int OffsetShift
Definition: octree_poisson.h:85
pcl::poisson::OctNode::nextLeaf
const OctNode * nextLeaf(const OctNode *currentLeaf=NULL) const
Definition: octree_poisson.hpp:251
pcl::poisson::OctNode::ConstNeighbors5::neighbors
const OctNode * neighbors[5][5][5]
Definition: octree_poisson.h:244
pcl::poisson::OctNode::OctNode
OctNode(void)
Definition: octree_poisson.hpp:69
pcl::poisson::OctNode::ConstNeighbors5::clear
void clear(void)
Definition: octree_poisson.hpp:1616
pcl::poisson::OctNode::nodes
int nodes(void) const
Definition: octree_poisson.hpp:188
pcl::poisson::OctNode::DepthAndOffset
static void DepthAndOffset(const long long &index, int &depth, int offset[DIMENSION])
Definition: octree_poisson.hpp:137
pcl::poisson::OctNode::NeighborKey5::setNeighbors
Neighbors5 & setNeighbors(OctNode *node, int xStart=0, int xEnd=5, int yStart=0, int yEnd=5, int zStart=0, int zEnd=5)
Definition: octree_poisson.hpp:1779
pcl::poisson::OctNode::CompareBackwardPointerDepths
static int CompareBackwardPointerDepths(const void *v1, const void *v2)
Definition: octree_poisson.hpp:837
pcl::poisson::OctNode::faceNeighbor
OctNode * faceNeighbor(int faceIndex, int forceChildren=0)
Definition: octree_poisson.hpp:858
pcl::poisson::OctNode::CornerIndex
static int CornerIndex(const Point3D< Real > &center, const Point3D< Real > &p)
Definition: octree_poisson.hpp:756