3#ifndef __YARP_CLOUD_UTILS_PCL_TRAITS_HPP__
4#define __YARP_CLOUD_UTILS_PCL_TRAITS_HPP__
7#include <yarp/sig/PointCloudTypes.h>
8#include <pcl/point_types.h>
16struct pcl_type_from_yarp;
19struct pcl_type_from_yarp<yarp::sig::DataXY>
20{
typedef pcl::PointXY type; };
23struct pcl_type_from_yarp<yarp::sig::DataXYZ>
24{
typedef pcl::PointXYZ type; };
27struct pcl_type_from_yarp<yarp::sig::DataNormal>
28{
typedef pcl::Normal type; };
31struct pcl_type_from_yarp<yarp::sig::DataXYZRGBA>
32{
typedef pcl::PointXYZRGB type; };
35struct pcl_type_from_yarp<yarp::sig::DataXYZI>
36{
typedef pcl::PointXYZI type; };
39struct pcl_type_from_yarp<yarp::sig::DataInterestPointXYZ>
40{
typedef pcl::InterestPoint type; };
43struct pcl_type_from_yarp<yarp::sig::DataXYZNormal>
44{
typedef pcl::PointNormal type; };
47struct pcl_type_from_yarp<yarp::sig::DataXYZNormalRGBA>
48{
typedef pcl::PointXYZRGBNormal type; };
52struct pcl_all_xyz_types_tag {};
54struct pcl_xyz_rgb_types_tag {};
56struct pcl_rgb_types_tag {};
58struct pcl_xyzi_types_tag {};
60struct pcl_normal_types_tag {};
64struct pcl_mls_types_tag :
public pcl_all_xyz_types_tag {};
65struct pcl_mls_normal_types_tag :
public pcl_normal_types_tag {};
69template <
typename T,
typename tag>
75struct pcl_decay<T, pcl_all_xyz_types_tag>
81struct pcl_decay<T, pcl_xyz_rgb_types_tag>
82{
typedef pcl::PointXYZ type; };
85struct pcl_decay<pcl::PointXYZRGB, pcl_xyz_rgb_types_tag>
86{
typedef pcl::PointXYZRGB type; };
89struct pcl_decay<pcl::PointXYZRGBNormal, pcl_xyz_rgb_types_tag>
90{
typedef pcl::PointXYZRGB type; };
95struct pcl_decay<T, pcl_rgb_types_tag>
96{
typedef pcl::PointXYZRGB type; };
101struct pcl_decay<T, pcl_xyzi_types_tag>
102{
typedef pcl::PointXYZI type; };
105struct pcl_decay<pcl::PointNormal, pcl_xyzi_types_tag>
106{
typedef pcl::PointXYZINormal type; };
109struct pcl_decay<pcl::PointXYZRGBNormal, pcl_xyzi_types_tag>
110{
typedef pcl::PointXYZINormal type; };
113struct pcl_decay<pcl::PointXYZINormal, pcl_xyzi_types_tag>
114{
typedef pcl::PointXYZINormal type; };
119struct pcl_decay<T, pcl_normal_types_tag>
123struct pcl_decay<pcl::PointXYZ, pcl_normal_types_tag>
124{
typedef pcl::PointNormal type; };
127struct pcl_decay<pcl::PointXYZRGB, pcl_normal_types_tag>
128{
typedef pcl::PointXYZRGBNormal type; };
131struct pcl_decay<pcl::PointXYZI, pcl_normal_types_tag>
132{
typedef pcl::PointXYZINormal type; };
135struct pcl_decay<pcl::InterestPoint, pcl_normal_types_tag>
136{
typedef pcl::PointNormal type; };
141struct pcl_decay<T, pcl_mls_types_tag>
145struct pcl_decay<pcl::InterestPoint, pcl_mls_types_tag>
146{
typedef pcl::PointXYZ type; };
149struct pcl_decay<T, pcl_mls_normal_types_tag>
153struct pcl_decay<pcl::PointXYZ, pcl_mls_normal_types_tag>
154{
typedef pcl::PointNormal type; };
157struct pcl_decay<pcl::PointXYZRGB, pcl_mls_normal_types_tag>
158{
typedef pcl::PointXYZRGBNormal type; };
161struct pcl_decay<pcl::PointXYZI, pcl_mls_normal_types_tag>
162{
typedef pcl::PointNormal type; };
165struct pcl_decay<pcl::InterestPoint, pcl_mls_normal_types_tag>
166{
typedef pcl::PointNormal type; };
170template <
typename T1,
typename T2>
171struct pcl_is_convertible : std::false_type {};
174struct pcl_is_convertible<T, pcl::PointXYZ> : std::true_type {};
177struct pcl_is_convertible<pcl::PointXYZRGBNormal, pcl::PointXYZRGB> : std::true_type {};
180struct pcl_is_convertible<pcl::PointXYZRGBNormal, pcl::PointNormal> : std::true_type {};
183struct pcl_is_convertible<pcl::PointXYZINormal, pcl::PointXYZI> : std::true_type {};
186struct pcl_is_convertible<pcl::PointXYZINormal, pcl::PointNormal> : std::true_type {};
191struct pcl_descriptor;
194struct pcl_descriptor<pcl::PointXY>
195{
static constexpr const char * name =
"XY"; };
198struct pcl_descriptor<pcl::PointXYZ>
199{
static constexpr const char * name =
"XYZ"; };
202struct pcl_descriptor<pcl::Normal>
203{
static constexpr const char * name =
"NORMAL"; };
206struct pcl_descriptor<pcl::PointXYZRGB>
207{
static constexpr const char * name =
"XYZ_RGB"; };
210struct pcl_descriptor<pcl::PointXYZI>
211{
static constexpr const char * name =
"XYZI"; };
214struct pcl_descriptor<pcl::InterestPoint>
215{
static constexpr const char * name =
"XYZ_INTEREST"; };
218struct pcl_descriptor<pcl::PointNormal>
219{
static constexpr const char * name =
"XYZ_NORMAL"; };
222struct pcl_descriptor<pcl::PointXYZRGBNormal>
223{
static constexpr const char * name =
"XYZ_RGB_NORMAL"; };
226struct pcl_descriptor<pcl::PointXYZINormal>
227{
static constexpr const char * name =
"XYZI_NORMAL"; };
232constexpr auto is_unsupported_type =
233 std::is_same_v<T, pcl::PointXY> ||
234 std::is_same_v<T, pcl::Normal>;