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::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::ConstNeighborKey3
Definition: octree_poisson.h:223
pcl::poisson::OctNode::ConstNeighborKey3::neighbors
ConstNeighbors3 * neighbors
Definition: octree_poisson.h:225
pcl::poisson::OctNode::ConstNeighborKey3::set
void set(int depth)
Definition: octree_poisson.hpp:1545
pcl::poisson::OctNode::ConstNeighborKey3::getNeighbors
ConstNeighbors3 & getNeighbors(const OctNode *node)
pcl::poisson::OctNode::ConstNeighborKey3::~ConstNeighborKey3
~ConstNeighborKey3(void)
Definition: octree_poisson.hpp:1539
pcl::poisson::OctNode::ConstNeighborKey3::getNeighbors
ConstNeighbors3 & getNeighbors(const OctNode *node, int minDepth)
pcl::poisson::OctNode::ConstNeighborKey3::ConstNeighborKey3
ConstNeighborKey3(void)
Definition: octree_poisson.hpp:1536
pcl::poisson::OctNode::ConstNeighborKey5
Definition: octree_poisson.h:263
pcl::poisson::OctNode::ConstNeighborKey5::~ConstNeighborKey5
~ConstNeighborKey5(void)
Definition: octree_poisson.hpp:1710
pcl::poisson::OctNode::ConstNeighborKey5::ConstNeighborKey5
ConstNeighborKey5(void)
Definition: octree_poisson.hpp:1696
pcl::poisson::OctNode::ConstNeighborKey5::set
void set(int depth)
Definition: octree_poisson.hpp:1727
pcl::poisson::OctNode::ConstNeighborKey5::neighbors
ConstNeighbors5 * neighbors
Definition: octree_poisson.h:266
pcl::poisson::OctNode::ConstNeighborKey5::getNeighbors
ConstNeighbors5 & getNeighbors(const OctNode *node)
Definition: octree_poisson.hpp:1899
pcl::poisson::OctNode::ConstNeighbors3
Definition: octree_poisson.h:216
pcl::poisson::OctNode::ConstNeighbors3::neighbors
const OctNode * neighbors[3][3][3]
Definition: octree_poisson.h:218
pcl::poisson::OctNode::ConstNeighbors3::ConstNeighbors3
ConstNeighbors3(void)
Definition: octree_poisson.hpp:1528
pcl::poisson::OctNode::ConstNeighbors3::clear
void clear(void)
Definition: octree_poisson.hpp:1531
pcl::poisson::OctNode::ConstNeighbors5
Definition: octree_poisson.h:242
pcl::poisson::OctNode::ConstNeighbors5::neighbors
const OctNode * neighbors[5][5][5]
Definition: octree_poisson.h:244
pcl::poisson::OctNode::ConstNeighbors5::ConstNeighbors5
ConstNeighbors5(void)
Definition: octree_poisson.hpp:1674
pcl::poisson::OctNode::ConstNeighbors5::clear
void clear(void)
Definition: octree_poisson.hpp:1683
pcl::poisson::OctNode::NeighborKey3
Definition: octree_poisson.h:201
pcl::poisson::OctNode::NeighborKey3::~NeighborKey3
~NeighborKey3(void)
Definition: octree_poisson.hpp:1143
pcl::poisson::OctNode::NeighborKey3::neighbors
Neighbors3 * neighbors
Definition: octree_poisson.h:203
pcl::poisson::OctNode::NeighborKey3::getNeighbors
Neighbors3 & getNeighbors(OctNode *root, Point3D< Real > p, int d)
pcl::poisson::OctNode::NeighborKey3::set
void set(int depth)
Definition: octree_poisson.hpp:1150
pcl::poisson::OctNode::NeighborKey3::getNeighbors
Neighbors3 & getNeighbors(OctNode *node)
pcl::poisson::OctNode::NeighborKey3::NeighborKey3
NeighborKey3(void)
Definition: octree_poisson.hpp:1140
pcl::poisson::OctNode::NeighborKey3::setNeighbors
Neighbors3 & setNeighbors(OctNode *root, Point3D< Real > p, int d)
pcl::poisson::OctNode::NeighborKey3::setNeighbors
Neighbors3 & setNeighbors(OctNode *node)
pcl::poisson::OctNode::NeighborKey3::setNeighbors
Neighbors3 & setNeighbors(OctNode *node, bool flags[3][3][3])
pcl::poisson::OctNode::NeighborKey5
Definition: octree_poisson.h:250
pcl::poisson::OctNode::NeighborKey5::neighbors
Neighbors5 * neighbors
Definition: octree_poisson.h:253
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:1854
pcl::poisson::OctNode::NeighborKey5::~NeighborKey5
~NeighborKey5(void)
Definition: octree_poisson.hpp:1703
pcl::poisson::OctNode::NeighborKey5::set
void set(int depth)
Definition: octree_poisson.hpp:1717
pcl::poisson::OctNode::NeighborKey5::getNeighbors
Neighbors5 & getNeighbors(OctNode *node)
Definition: octree_poisson.hpp:1737
pcl::poisson::OctNode::NeighborKey5::NeighborKey5
NeighborKey5(void)
Definition: octree_poisson.hpp:1689
pcl::poisson::OctNode::Neighbors3
Definition: octree_poisson.h:194
pcl::poisson::OctNode::Neighbors3::Neighbors3
Neighbors3(void)
Definition: octree_poisson.hpp:1132
pcl::poisson::OctNode::Neighbors3::clear
void clear(void)
Definition: octree_poisson.hpp:1135
pcl::poisson::OctNode::Neighbors3::neighbors
OctNode * neighbors[3][3][3]
Definition: octree_poisson.h:196
pcl::poisson::OctNode::Neighbors5
Definition: octree_poisson.h:235
pcl::poisson::OctNode::Neighbors5::neighbors
OctNode * neighbors[5][5][5]
Definition: octree_poisson.h:237
pcl::poisson::OctNode::Neighbors5::clear
void clear(void)
Definition: octree_poisson.hpp:1677
pcl::poisson::OctNode::Neighbors5::Neighbors5
Neighbors5(void)
Definition: octree_poisson.hpp:1672
pcl::poisson::OctNode
Definition: octree_poisson.h:49
pcl::poisson::OctNode::d
short d
Definition: octree_poisson.h:94
pcl::poisson::OctNode::maxDepthLeaves
int maxDepthLeaves(int maxDepth) const
Definition: octree_poisson.hpp:214
pcl::poisson::OctNode::OffsetShift1
static const int OffsetShift1
Definition: octree_poisson.h:85
pcl::poisson::OctNode::depthAndOffset
void depthAndOffset(int &depth, int offset[DIMENSION]) const
Definition: octree_poisson.hpp:129
pcl::poisson::OctNode::maxDepth
int maxDepth(void) const
Definition: octree_poisson.hpp:181
pcl::poisson::OctNode::ProcessNodeAdjacentNodes
static void ProcessNodeAdjacentNodes(int dx, int dy, int dz, OctNode *node1, int radius1, OctNode *node2, int radius2, int width2, NodeAdjacencyFunction *F, int processCurrent=1)
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:404
pcl::poisson::OctNode::ProcessMaxDepthNodeAdjacentNodes
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)
pcl::poisson::OctNode::OffsetShift2
static const int OffsetShift2
Definition: octree_poisson.h:85
pcl::poisson::OctNode::CompareBackwardDepths
static int CompareBackwardDepths(const void *v1, const void *v2)
Definition: octree_poisson.hpp:876
pcl::poisson::OctNode::CompareForwardDepths
static int CompareForwardDepths(const void *v1, const void *v2)
Definition: octree_poisson.hpp:819
pcl::poisson::OctNode::prevBranch
const OctNode * prevBranch(const OctNode *current) const
Definition: octree_poisson.hpp:247
pcl::poisson::OctNode::write
int write(const char *fileName) const
Definition: octree_poisson.hpp:1941
pcl::poisson::OctNode::OffsetMask
static const int OffsetMask
Definition: octree_poisson.h:86
pcl::poisson::OctNode::leaves
int leaves(void) const
Definition: octree_poisson.hpp:204
pcl::poisson::OctNode::processNodeNodes
void processNodeNodes(OctNode *node, NodeAdjacencyFunction *F, int processCurrent=1)
Definition: octree_poisson.hpp:321
pcl::poisson::OctNode::isInside
bool isInside(Point3D< Real > p) const
Definition: octree_poisson.hpp:160
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::DepthAndOffset
static void DepthAndOffset(const long long &index, int &depth, int offset[DIMENSION])
Definition: octree_poisson.hpp:139
pcl::poisson::OctNode::ProcessFixedDepthNodeAdjacentNodes
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)
pcl::poisson::OctNode::CenterAndWidth
static void CenterAndWidth(const long long &index, Point3D< Real > &center, Real &width)
Definition: octree_poisson.hpp:170
pcl::poisson::OctNode::internalAllocator
static Allocator< OctNode > internalAllocator
Definition: octree_poisson.h:88
pcl::poisson::OctNode::processNodeEdges
void processNodeEdges(OctNode *node, NodeAdjacencyFunction *F, int eIndex, int processCurrent=1)
Definition: octree_poisson.hpp:339
pcl::poisson::OctNode::depth
int depth(void) const
Definition: octree_poisson.hpp:137
pcl::poisson::OctNode::ProcessTerminatingNodeAdjacentNodes
static void ProcessTerminatingNodeAdjacentNodes(int dx, int dy, int dz, OctNode *node1, int radius1, OctNode *node2, int radius2, int width2, TerminatingNodeAdjacencyFunction *F, int processCurrent=1)
pcl::poisson::OctNode::read
int read(const char *fileName)
Definition: octree_poisson.hpp:1957
pcl::poisson::OctNode::Depth
static int Depth(const long long &index)
Definition: octree_poisson.hpp:147
pcl::poisson::OctNode::CompareForwardPointerDepths
static int CompareForwardPointerDepths(const void *v1, const void *v2)
Definition: octree_poisson.hpp:859
pcl::poisson::OctNode::getNearestLeaf
OctNode * getNearestLeaf(const Point3D< Real > &p)
Definition: octree_poisson.hpp:721
pcl::poisson::OctNode::nodes
int nodes(void) const
Definition: octree_poisson.hpp:194
pcl::poisson::OctNode::CornerIndex
static int CornerIndex(const Point3D< Real > &center, const Point3D< Real > &p)
Definition: octree_poisson.hpp:794
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:886
pcl::poisson::OctNode::edgeNeighbor
OctNode * edgeNeighbor(int edgeIndex, int forceChildren=0)
Definition: octree_poisson.hpp:939
pcl::poisson::OctNode::OffsetShift
static const int OffsetShift
Definition: octree_poisson.h:85
pcl::poisson::OctNode::nextBranch
const OctNode * nextBranch(const OctNode *current) const
Definition: octree_poisson.hpp:232
pcl::poisson::OctNode::OctNode
OctNode(void)
Definition: octree_poisson.hpp:68
pcl::poisson::OctNode::off
short off[DIMENSION]
Definition: octree_poisson.h:94
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:453
pcl::poisson::OctNode::setFullDepth
void setFullDepth(int maxDepth)
Definition: octree_poisson.hpp:80
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:428
pcl::poisson::OctNode::operator=
OctNode & operator=(const OctNode< NodeData2, Real > &node)
pcl::poisson::OctNode::nextNode
const OctNode * nextNode(const OctNode *currentNode=NULL) const
Definition: octree_poisson.hpp:289
pcl::poisson::OctNode::cornerNeighbor
OctNode * cornerNeighbor(int cornerIndex, int forceChildren=0)
Definition: octree_poisson.hpp:1076
pcl::poisson::OctNode::ProcessPointAdjacentNodes
static void ProcessPointAdjacentNodes(int dx, int dy, int dz, OctNode *node2, int radius2, int width2, PointAdjacencyFunction *F, int processCurrent=1)
pcl::poisson::OctNode::width
int width(int maxDepth) const
Definition: octree_poisson.hpp:1981
pcl::poisson::OctNode::printLeaves
void printLeaves(void) const
pcl::poisson::OctNode::~OctNode
~OctNode(void)
Definition: octree_poisson.hpp:74
pcl::poisson::OctNode::processNodeFaces
void processNodeFaces(OctNode *node, NodeAdjacencyFunction *F, int fIndex, int processCurrent=1)
Definition: octree_poisson.hpp:328
pcl::poisson::OctNode::CommonEdge
static int CommonEdge(const OctNode *node1, int eIndex1, const OctNode *node2, int eIndex2)
Definition: octree_poisson.hpp:759
pcl::poisson::OctNode::SetAllocator
static void SetAllocator(int blockSize)
Definition: octree_poisson.hpp:54
pcl::poisson::OctNode::root
const OctNode * root(void) const
Definition: octree_poisson.hpp:225
pcl::poisson::OctNode::CompareByDepthAndZIndex
static int CompareByDepthAndZIndex(const void *v1, const void *v2)
Definition: octree_poisson.hpp:844
pcl::poisson::OctNode::centerAndWidth
void centerAndWidth(Point3D< Real > &center, Real &width) const
Definition: octree_poisson.hpp:149
pcl::poisson::OctNode::centerIndex
void centerIndex(int maxDepth, int index[DIMENSION]) const
Definition: octree_poisson.hpp:1987
pcl::poisson::OctNode::nextLeaf
const OctNode * nextLeaf(const OctNode *currentLeaf=NULL) const
Definition: octree_poisson.hpp:263
pcl::poisson::OctNode::parent
OctNode * parent
Definition: octree_poisson.h:92
pcl::poisson::OctNode::CompareByDepthAndXYZ
static int CompareByDepthAndXYZ(const void *v1, const void *v2)
Definition: octree_poisson.hpp:824
pcl::poisson::OctNode::children
OctNode * children
Definition: octree_poisson.h:93
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::CompareBackwardPointerDepths
static int CompareBackwardPointerDepths(const void *v1, const void *v2)
Definition: octree_poisson.hpp:881
pcl::poisson::OctNode::OffsetShift3
static const int OffsetShift3
Definition: octree_poisson.h:85
pcl::poisson::OctNode::UseAllocator
static int UseAllocator(void)
Definition: octree_poisson.hpp:65
pcl::poisson::OctNode::Index
static void Index(int depth, const int offset[3], short &d, short off[DIMENSION])
Definition: octree_poisson.hpp:121
pcl::poisson::OctNode::nodeData
NodeData nodeData
Definition: octree_poisson.h:95
pcl::poisson::OctNode::printRange
void printRange(void) const
Definition: octree_poisson.hpp:305
pcl::poisson::OctNode::DepthShift
static const int DepthShift
Definition: octree_poisson.h:85
pcl::poisson::OctNode::DepthMask
static const int DepthMask
Definition: octree_poisson.h:86
pcl::poisson::OctNode::faceNeighbor
OctNode * faceNeighbor(int faceIndex, int forceChildren=0)
Definition: octree_poisson.hpp:905
pcl::poisson::OctNode::processNodeCorners
void processNodeCorners(OctNode *node, NodeAdjacencyFunction *F, int cIndex, int processCurrent=1)
Definition: octree_poisson.hpp:350
pcl::poisson::OctNode::initChildren
int initChildren(void)
Definition: octree_poisson.hpp:89
pcl::poisson::Real
float Real
Definition: multi_grid_octree_data.h:85
pcl
Definition: convolution.h:46
pcl::poisson::Point3D
Definition: geometry.h:51