gtsam_points
Loading...
Searching...
No Matches
pointcloud_buffer_pcl.hpp
Go to the documentation of this file.
1#ifndef GLK_POINTCLOUD_BUFFER_PCL_HPP
2#define GLK_POINTCLOUD_BUFFER_PCL_HPP
3
4#include <iostream>
5#include <pcl/point_types.h>
6#include <pcl/point_cloud.h>
8
9namespace glk {
10
11template <typename PointT>
12std::shared_ptr<PointCloudBuffer> create_point_cloud_buffer(const pcl::PointCloud<PointT>& cloud) {
13 std::vector<Eigen::Vector3f> points(cloud.size());
14 for (int i = 0; i < cloud.size(); i++) {
15 points[i] = cloud[i].getVector3fMap();
16 }
17 return std::make_shared<PointCloudBuffer>(points[0].data(), sizeof(Eigen::Vector3f), cloud.size());
18}
19
20template <>
21inline std::shared_ptr<PointCloudBuffer> create_point_cloud_buffer(const pcl::PointCloud<pcl::PointXYZ>& cloud) {
22 return std::make_shared<PointCloudBuffer>(&cloud.at(0).x, sizeof(pcl::PointXYZ), cloud.size());
23}
24
25template <>
26inline std::shared_ptr<PointCloudBuffer> create_point_cloud_buffer(const pcl::PointCloud<pcl::PointNormal>& cloud) {
27 std::vector<Eigen::Vector3f> points(cloud.size());
28 std::vector<Eigen::Vector3f> normals(cloud.size());
29 for (int i = 0; i < cloud.size(); i++) {
30 points[i] = cloud[i].getVector3fMap();
31 normals[i] = cloud[i].getNormalVector3fMap();
32 }
33
34 auto cloud_buffer = std::make_shared<PointCloudBuffer>(points[0].data(), sizeof(Eigen::Vector3f), cloud.size());
35 cloud_buffer->add_normals(normals[0].data(), sizeof(Eigen::Vector3f), normals.size());
36
37 return cloud_buffer;
38}
39
40template <typename PointT>
41std::shared_ptr<PointCloudBuffer> create_colored_point_cloud_buffer(const pcl::PointCloud<PointT>& cloud) {
42 std::vector<Eigen::Vector3f> points(cloud.size());
43 std::vector<Eigen::Vector4f> colors(cloud.size());
44
45 for (int i = 0; i < cloud.size(); i++) {
46 points[i] = cloud[i].getVector3fMap();
47 colors[i] = Eigen::Vector4f(cloud[i].r, cloud[i].g, cloud[i].b, cloud[i].a) / 255.0f;
48 }
49
50 auto cloud_buffer = std::make_shared<PointCloudBuffer>(points[0].data(), sizeof(Eigen::Vector3f), points.size());
51 cloud_buffer->add_color(colors[0].data(), sizeof(Eigen::Vector4f), colors.size());
52
53 return cloud_buffer;
54}
55
56} // namespace glk
57
58#endif
Definition async_buffer_copy.hpp:6
std::shared_ptr< PointCloudBuffer > create_colored_point_cloud_buffer(const pcl::PointCloud< PointT > &cloud)
Definition pointcloud_buffer_pcl.hpp:41
static std::shared_ptr< PointCloudBuffer > create_point_cloud_buffer(const void *src_cuda_ptr, int stride, int num_points)
Definition pointcloud_buffer_cuda.hpp:13
std::enable_if_t< needs_aligned_allocator< T >::value, std::shared_ptr< T > > make_shared(Args &&... args)
Definition make_shared.hpp:20