Point Cloud Library (PCL)
1.15.1
Toggle main menu visibility
Loading...
Searching...
No Matches
pcl
surface
impl
marching_cubes_hoppe.hpp
1
/*
2
* Software License Agreement (BSD License)
3
*
4
* Copyright (c) 2010, Willow Garage, Inc.
5
* All rights reserved.
6
*
7
* Redistribution and use in source and binary forms, with or without
8
* modification, are permitted provided that the following conditions
9
* are met:
10
*
11
* * Redistributions of source code must retain the above copyright
12
* notice, this list of conditions and the following disclaimer.
13
* * Redistributions in binary form must reproduce the above
14
* copyright notice, this list of conditions and the following
15
* disclaimer in the documentation and/or other materials provided
16
* with the distribution.
17
* * Neither the name of Willow Garage, Inc. nor the names of its
18
* contributors may be used to endorse or promote products derived
19
* from this software without specific prior written permission.
20
*
21
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32
* POSSIBILITY OF SUCH DAMAGE.
33
*
34
*/
35
36
#ifndef PCL_SURFACE_IMPL_MARCHING_CUBES_HOPPE_H_
37
#define PCL_SURFACE_IMPL_MARCHING_CUBES_HOPPE_H_
38
39
#include <pcl/surface/marching_cubes_hoppe.h>
40
41
//////////////////////////////////////////////////////////////////////////////////////////////
42
template
<
typename
Po
int
NT>
43
pcl::MarchingCubesHoppe<PointNT>::~MarchingCubesHoppe
() =
default
;
44
45
46
//////////////////////////////////////////////////////////////////////////////////////////////
47
template
<
typename
Po
int
NT>
void
48
pcl::MarchingCubesHoppe<PointNT>::voxelizeData
()
49
{
50
const
bool
is_far_ignored =
dist_ignore_
> 0.0f;
51
52
for
(
int
x = 0; x <
res_x_
; ++x)
53
{
54
const
int
y_start = x *
res_y_
*
res_z_
;
55
56
for
(
int
y = 0; y <
res_y_
; ++y)
57
{
58
const
int
z_start = y_start + y *
res_z_
;
59
60
for
(
int
z = 0; z <
res_z_
; ++z)
61
{
62
pcl::Indices
nn_indices (1, 0);
63
std::vector<float> nn_sqr_dists (1, 0.0f);
64
const
Eigen::Vector3f point = (
lower_boundary_
+
size_voxel_
* Eigen::Array3f (x, y, z)).matrix ();
65
PointNT p;
66
67
p.getVector3fMap () = point;
68
69
tree_
->nearestKSearch (p, 1, nn_indices, nn_sqr_dists);
70
71
if
(!is_far_ignored || nn_sqr_dists[0] <
dist_ignore_
)
72
{
73
const
Eigen::Vector3f normal = (*input_)[nn_indices[0]].getNormalVector3fMap ();
74
75
if
(!std::isnan (normal (0)) && normal.norm () > 0.5f)
76
grid_
[z_start + z] = normal.dot (
77
point - (*
input_
)[nn_indices[0]].getVector3fMap ());
78
}
79
}
80
}
81
}
82
}
83
84
85
86
#define PCL_INSTANTIATE_MarchingCubesHoppe(T) template class PCL_EXPORTS pcl::MarchingCubesHoppe<T>;
87
88
#endif
// PCL_SURFACE_IMPL_MARCHING_CUBES_HOPPE_H_
89
pcl::MarchingCubesHoppe::~MarchingCubesHoppe
~MarchingCubesHoppe() override
Destructor.
pcl::MarchingCubesHoppe::voxelizeData
void voxelizeData() override
Convert the point cloud into voxel data.
Definition
marching_cubes_hoppe.hpp:48
pcl::MarchingCubesHoppe::dist_ignore_
float dist_ignore_
ignore the distance function if it is negative or distance between voxel centroid and point are large...
Definition
marching_cubes_hoppe.h:112
pcl::MarchingCubes::grid_
std::vector< float > grid_
The data structure storing the 3D grid.
Definition
marching_cubes.h:439
pcl::MarchingCubes::res_x_
int res_x_
The grid resolution.
Definition
marching_cubes.h:442
pcl::MarchingCubes::size_voxel_
Eigen::Array3f size_voxel_
size of voxels
Definition
marching_cubes.h:449
pcl::MarchingCubes::res_y_
int res_y_
Definition
marching_cubes.h:442
pcl::MarchingCubes::res_z_
int res_z_
Definition
marching_cubes.h:442
pcl::MarchingCubes::lower_boundary_
Eigen::Array3f lower_boundary_
Definition
marching_cubes.h:446
pcl::PCLBase< PointNT >::input_
PointCloudConstPtr input_
Definition
pcl_base.h:147
pcl::PCLSurfaceBase< PointNT >::tree_
KdTreePtr tree_
Definition
reconstruction.h:96
pcl::Indices
IndicesAllocator<> Indices
Type used for indices in PCL.
Definition
types.h:133