diff --git a/include/pcl_conversions/pcl_conversions.h b/include/pcl_conversions/pcl_conversions.h index 23dc3d43..7c9df674 100644 --- a/include/pcl_conversions/pcl_conversions.h +++ b/include/pcl_conversions/pcl_conversions.h @@ -472,7 +472,34 @@ namespace pcl { pcl_conversions::moveFromPCL(pcl_image, image); } + /** Provide to/fromROSMsg for sensor_msgs::PointCloud2 <=> pcl::PointCloud **/ + + template + void toROSMsg(const pcl::PointCloud &pcl_cloud, sensor_msgs::PointCloud2 &cloud) + { + pcl::PCLPointCloud2 pcl_pc2; + pcl::toPCLPointCloud2(pcl_cloud, pcl_pc2); + pcl_conversions::moveFromPCL(pcl_pc2, cloud); + } + + template + void fromROSMsg(const sensor_msgs::PointCloud2 &cloud, pcl::PointCloud &pcl_cloud) + { + pcl::PCLPointCloud2 pcl_pc2; + pcl_conversions::toPCL(cloud, pcl_pc2); + pcl::toPCLPointCloud2(pcl_cloud, cloud); + } + + template + void moveFromROSMsg(sensor_msgs::PointCloud2 &cloud, pcl::PointCloud &pcl_cloud) + { + pcl::PCLPointCloud2 pcl_pc2; + pcl_conversions::moveToPCL(cloud, pcl_pc2); + pcl::toPCLPointCloud2(pcl_cloud, cloud); + } + /** Overload pcl::createMapping **/ + template void createMapping(const std::vector& msg_fields, MsgFieldMap& field_map) { @@ -484,6 +511,7 @@ namespace pcl { namespace io { /** Overload pcl::io::savePCDFile **/ + inline int savePCDFile(const std::string &file_name, const sensor_msgs::PointCloud2 &cloud, const Eigen::Vector4f &origin = Eigen::Vector4f::Zero (), @@ -507,6 +535,7 @@ namespace pcl { } /** Overload pcl::io::loadPCDFile **/ + inline int loadPCDFile(const std::string &file_name, sensor_msgs::PointCloud2 &cloud) { pcl::PCLPointCloud2 pcl_cloud;