Point Cloud Library (PCL)  1.3.1
marching_cubes_greedy.hpp
Go to the documentation of this file.
00001 /*
00002  * Software License Agreement (BSD License)
00003  *
00004  *  Copyright (c) 2010, Willow Garage, Inc.
00005  *  All rights reserved.
00006  *
00007  *  Redistribution and use in source and binary forms, with or without
00008  *  modification, are permitted provided that the following conditions
00009  *  are met:
00010  *
00011  *   * Redistributions of source code must retain the above copyright
00012  *     notice, this list of conditions and the following disclaimer.
00013  *   * Redistributions in binary form must reproduce the above
00014  *     copyright notice, this list of conditions and the following
00015  *     disclaimer in the documentation and/or other materials provided
00016  *     with the distribution.
00017  *   * Neither the name of Willow Garage, Inc. nor the names of its
00018  *     contributors may be used to endorse or promote products derived
00019  *     from this software without specific prior written permission.
00020  *
00021  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00022  *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
00023  *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
00024  *  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
00025  *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
00026  *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
00027  *  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
00028  *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
00029  *  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
00030  *  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
00031  *  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00032  *  POSSIBILITY OF SUCH DAMAGE.
00033  *
00034  */
00035 
00036 #ifndef PCL_SURFACE_IMPL_MARCHING_CUBES_GREEDY_H_
00037 #define PCL_SURFACE_IMPL_MARCHING_CUBES_GREEDY_H_
00038 
00039 #include "pcl/surface/marching_cubes_greedy.h"
00041 template <typename PointNT>
00042 pcl::MarchingCubesGreedy<PointNT>::MarchingCubesGreedy ()
00043 {}
00044 
00046 template <typename PointNT>
00047 pcl::MarchingCubesGreedy<PointNT>::~MarchingCubesGreedy ()
00048 {
00049 
00050 }
00051 
00052 template <typename PointNT> void
00053 pcl::MarchingCubesGreedy<PointNT>::voxelizeData()
00054 {
00055   for (size_t cp = 0; cp < input_->points.size(); ++cp)
00056   {
00057     // Check if the point is invalid
00058     if (!pcl_isfinite (input_->points[cp].x) ||
00059         !pcl_isfinite (input_->points[cp].y) ||
00060         !pcl_isfinite (input_->points[cp].z))
00061       continue;
00062 
00063     Eigen::Vector3i index_3d;
00064     MarchingCubes<PointNT>::getCellIndex (input_->points[cp].getVector4fMap (), index_3d);
00065     int index_1d = MarchingCubes<PointNT>::getIndexIn1D (index_3d);
00066     Leaf cell_data;
00067     for (int i = 0; i < 8; ++i)
00068     {
00069       cell_data.vertex[i] = 1;
00070     }
00071     cell_hash_map_[index_1d] = cell_data;
00072 
00073     // the vertices are shared by 8 voxels, so we need to update all 8 of them
00074     HashMap neighbor_list;
00075     getNeighborList1D (cell_data, index_3d, neighbor_list);
00076     BOOST_FOREACH (typename HashMap::value_type entry, neighbor_list)
00077     {
00078       Eigen::Vector3i i3d;
00079       getIndexIn3D(entry.first, i3d);
00080       // if the neighbor doesn't exist, add it, otherwise we need to do an OR operation on the vertices
00081       if (cell_hash_map_.find (entry.first) == cell_hash_map_.end ())
00082       {
00083         cell_hash_map_[entry.first] = entry.second;
00084       }
00085       else
00086       {
00087         for(int i = 0; i < 8; ++i)
00088         {
00089           if(entry.second.vertex[i] > 0)
00090             cell_hash_map_[entry.first].vertex[i] = entry.second.vertex[i];
00091         }
00092       }
00093     }
00094   }
00095 }
00096 
00097 #define PCL_INSTANTIATE_MarchingCubesGreedy(T) template class PCL_EXPORTS pcl::MarchingCubesGreedy<T>;
00098 
00099 #endif    // PCL_SURFACE_IMPL_MARCHING_CUBES_GREEDY_H_
00100 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines