Fixed pcl:OrganizedFastMesh link error for type pcl::PointXYZRGBNormal with PCL 1.8 (issue #75)

This commit is contained in:
matlabbe
2016-05-31 12:23:13 -04:00
parent be13a9b967
commit b2bb421063
2 changed files with 28 additions and 6 deletions

View File

@@ -45,6 +45,18 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <rtabmap/utilite/UMath.h> #include <rtabmap/utilite/UMath.h>
#include <rtabmap/utilite/UConversion.h> #include <rtabmap/utilite/UConversion.h>
#if PCL_VERSION_COMPARE(>=, 1, 8, 0)
#include <pcl/impl/instantiate.hpp>
#include <pcl/point_types.h>
#include <pcl/segmentation/impl/extract_clusters.hpp>
#include <pcl/segmentation/extract_labeled_clusters.h>
#include <pcl/segmentation/impl/extract_labeled_clusters.hpp>
PCL_INSTANTIATE(EuclideanClusterExtraction, (pcl::PointXYZRGBNormal))
PCL_INSTANTIATE(extractEuclideanClusters, (pcl::PointXYZRGBNormal))
PCL_INSTANTIATE(extractEuclideanClusters_indices, (pcl::PointXYZRGBNormal))
#endif
namespace rtabmap namespace rtabmap
{ {
@@ -88,7 +100,7 @@ pcl::PointCloud<pcl::PointXYZ>::Ptr downsample(
} }
else else
{ {
int finalSize = cloud->size()/step; int finalSize = int(cloud->size())/step;
output->resize(finalSize); output->resize(finalSize);
int oi = 0; int oi = 0;
for(unsigned int i=0; i<cloud->size()-step+1; i+=step) for(unsigned int i=0; i<cloud->size()-step+1; i+=step)
@@ -111,7 +123,7 @@ pcl::PointCloud<pcl::PointXYZRGB>::Ptr downsample(
} }
else else
{ {
int finalSize = cloud->size()/step; int finalSize = int(cloud->size())/step;
output->resize(finalSize); output->resize(finalSize);
int oi = 0; int oi = 0;
for(int i=0; i<(int)cloud->size()-step+1; i+=step) for(int i=0; i<(int)cloud->size()-step+1; i+=step)

View File

@@ -46,6 +46,16 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "pcl18/surface/organized_fast_mesh.h" #include "pcl18/surface/organized_fast_mesh.h"
#else #else
#include <pcl/surface/organized_fast_mesh.h> #include <pcl/surface/organized_fast_mesh.h>
#include <pcl/surface/impl/marching_cubes.hpp>
#include <pcl/surface/impl/organized_fast_mesh.hpp>
#include <pcl/impl/instantiate.hpp>
#include <pcl/point_types.h>
// Instantiations of specific point types
PCL_INSTANTIATE(OrganizedFastMesh, (pcl::PointXYZRGBNormal))
#include <pcl/features/impl/normal_3d_omp.hpp>
PCL_INSTANTIATE_PRODUCT(NormalEstimationOMP, ((pcl::PointXYZRGB))((pcl::Normal)))
#endif #endif
namespace rtabmap namespace rtabmap
@@ -177,10 +187,10 @@ void appendMesh(
UDEBUG("cloudA=%d polygonsA=%d cloudB=%d polygonsB=%d", (int)cloudA.size(), (int)polygonsA.size(), (int)cloudB.size(), (int)polygonsB.size()); UDEBUG("cloudA=%d polygonsA=%d cloudB=%d polygonsB=%d", (int)cloudA.size(), (int)polygonsA.size(), (int)cloudB.size(), (int)polygonsB.size());
UASSERT(!cloudA.isOrganized() && !cloudB.isOrganized()); UASSERT(!cloudA.isOrganized() && !cloudB.isOrganized());
int sizeA = cloudA.size(); int sizeA = (int)cloudA.size();
cloudA += cloudB; cloudA += cloudB;
int sizePolygonsA = polygonsA.size(); int sizePolygonsA = (int)polygonsA.size();
polygonsA.resize(sizePolygonsA+polygonsB.size()); polygonsA.resize(sizePolygonsA+polygonsB.size());
for(unsigned int i=0; i<polygonsB.size(); ++i) for(unsigned int i=0; i<polygonsB.size(); ++i)
@@ -203,10 +213,10 @@ void appendMesh(
UDEBUG("cloudA=%d polygonsA=%d cloudB=%d polygonsB=%d", (int)cloudA.size(), (int)polygonsA.size(), (int)cloudB.size(), (int)polygonsB.size()); UDEBUG("cloudA=%d polygonsA=%d cloudB=%d polygonsB=%d", (int)cloudA.size(), (int)polygonsA.size(), (int)cloudB.size(), (int)polygonsB.size());
UASSERT(!cloudA.isOrganized() && !cloudB.isOrganized()); UASSERT(!cloudA.isOrganized() && !cloudB.isOrganized());
int sizeA = cloudA.size(); int sizeA = (int)cloudA.size();
cloudA += cloudB; cloudA += cloudB;
int sizePolygonsA = polygonsA.size(); int sizePolygonsA = (int)polygonsA.size();
polygonsA.resize(sizePolygonsA+polygonsB.size()); polygonsA.resize(sizePolygonsA+polygonsB.size());
for(unsigned int i=0; i<polygonsB.size(); ++i) for(unsigned int i=0; i<polygonsB.size(); ++i)