Point Cloud Library (PCL)
1.15.1
Toggle main menu visibility
Loading...
Searching...
No Matches
pcl
surface
3rdparty
poisson4
binary_node.h
1
/*
2
Copyright (c) 2006, Michael Kazhdan and Matthew Bolitho
3
All rights reserved.
4
5
Redistribution and use in source and binary forms, with or without modification,
6
are permitted provided that the following conditions are met:
7
8
Redistributions of source code must retain the above copyright notice, this list of
9
conditions and the following disclaimer. Redistributions in binary form must reproduce
10
the above copyright notice, this list of conditions and the following disclaimer
11
in the documentation and/or other materials provided with the distribution.
12
13
Neither the name of the Johns Hopkins University nor the names of its contributors
14
may be used to endorse or promote products derived from this software without specific
15
prior written permission.
16
17
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
18
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO THE IMPLIED WARRANTIES
19
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
20
SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
21
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
22
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
23
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
25
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
26
DAMAGE.
27
*/
28
29
#ifndef BINARY_NODE_INCLUDED
30
#define BINARY_NODE_INCLUDED
31
32
#define MSVC_2010_FIX 1
33
34
namespace
pcl
35
{
36
namespace
poisson
37
{
38
template
<
class
Real>
39
class
BinaryNode
40
{
41
public
:
42
static
inline
int
CenterCount
(
int
depth ) {
return
1<<depth; }
43
static
inline
int
CornerCount
(
int
depth ) {
return
(1<<depth)+1; }
44
static
inline
int
CumulativeCenterCount
(
int
maxDepth ) {
return
(1<<(maxDepth+1))-1; }
45
static
inline
int
CumulativeCornerCount
(
int
maxDepth ) {
return
(1<<(maxDepth+1))+maxDepth; }
46
static
inline
int
Index
(
int
depth ,
int
offSet ) {
return
(1<<depth)+offSet-1; }
47
static
inline
int
CenterIndex
(
int
depth ,
int
offSet ) {
return
(1<<depth)+offSet-1; }
48
static
inline
int
CornerIndex
(
int
depth ,
int
offSet ) {
return
(1<<depth)+offSet+depth; }
49
50
static
inline
int
CornerIndex
(
int
maxDepth ,
int
depth ,
int
offSet ,
int
forwardCorner ){
return
(offSet+forwardCorner)<<(maxDepth-depth); }
51
static
inline
Real
CornerIndexPosition
(
int
index,
int
maxDepth){
return
Real
(index)/(1<<maxDepth); }
52
static
inline
Real
Width
(
int
depth){
return
Real
(1.0/(1<<depth)); }
53
static
inline
void
CenterAndWidth
(
int
depth ,
int
offset ,
Real
& center ,
Real
& width )
54
{
55
width=
Real
(1.0/(1<<depth) );
56
center=
Real
((0.5+offset)*width);
57
}
58
static
inline
void
CenterAndWidth
(
int
idx ,
Real
& center ,
Real
& width )
59
{
60
int
depth , offset;
61
DepthAndOffset
( idx , depth , offset );
62
CenterAndWidth
( depth , offset , center , width );
63
}
64
static
inline
void
DepthAndOffset
(
int
idx ,
int
& depth ,
int
& offset )
65
{
66
int
i=idx+1;
67
#if MSVC_2010_FIX
68
depth = 0;
69
#else
// !MSVC_2010_FIX
70
depth = -1;
71
#endif
// MSVC_2010_FIX
72
while
( i )
73
{
74
i >>= 1;
75
depth++;
76
}
77
#if MSVC_2010_FIX
78
depth--;
79
#endif
// MSVC_2010_FIX
80
offset = ( idx+1 ) - (1<<depth);
81
}
82
};
83
84
85
}
86
}
87
88
#endif
// BINARY_NODE_INCLUDED
pcl::poisson::BinaryNode
Definition
binary_node.h:40
pcl::poisson::BinaryNode::CenterAndWidth
static void CenterAndWidth(int idx, Real ¢er, Real &width)
Definition
binary_node.h:58
pcl::poisson::BinaryNode::Width
static Real Width(int depth)
Definition
binary_node.h:52
pcl::poisson::BinaryNode::CenterAndWidth
static void CenterAndWidth(int depth, int offset, Real ¢er, Real &width)
Definition
binary_node.h:53
pcl::poisson::BinaryNode::Index
static int Index(int depth, int offSet)
Definition
binary_node.h:46
pcl::poisson::BinaryNode::CumulativeCenterCount
static int CumulativeCenterCount(int maxDepth)
Definition
binary_node.h:44
pcl::poisson::BinaryNode::CumulativeCornerCount
static int CumulativeCornerCount(int maxDepth)
Definition
binary_node.h:45
pcl::poisson::BinaryNode::CornerIndex
static int CornerIndex(int depth, int offSet)
Definition
binary_node.h:48
pcl::poisson::BinaryNode::CornerIndex
static int CornerIndex(int maxDepth, int depth, int offSet, int forwardCorner)
Definition
binary_node.h:50
pcl::poisson::BinaryNode::CenterIndex
static int CenterIndex(int depth, int offSet)
Definition
binary_node.h:47
pcl::poisson::BinaryNode::CornerCount
static int CornerCount(int depth)
Definition
binary_node.h:43
pcl::poisson::BinaryNode::CenterCount
static int CenterCount(int depth)
Definition
binary_node.h:42
pcl::poisson::BinaryNode::CornerIndexPosition
static Real CornerIndexPosition(int index, int maxDepth)
Definition
binary_node.h:51
pcl::poisson::BinaryNode::DepthAndOffset
static void DepthAndOffset(int idx, int &depth, int &offset)
Definition
binary_node.h:64
pcl::poisson
Definition
allocator.h:36
pcl::poisson::Real
float Real
Definition
multi_grid_octree_data.h:85
pcl
Definition
convolution.h:46