diff --git a/include/pcl_wrapper/pcl_wrapper_api.hpp b/include/pcl_wrapper/pcl_wrapper_api.hpp index 9274551..5593658 100644 --- a/include/pcl_wrapper/pcl_wrapper_api.hpp +++ b/include/pcl_wrapper/pcl_wrapper_api.hpp @@ -17,6 +17,12 @@ void reserve_pointcloud_xyz(void* cloud, int count); void set_point_xyz(void* cloud, int index, float x, float y, float z); void set_point_xyzi(void* cloud, int index, float x, float y, float z, float intensity); void delete_pointcloud(void* cloud); +// 统一接口:获取点数量 +int get_pointcloud_size(void* cloud); +// 读取 PointXYZ +bool get_point_xyz(void* cloud, int index, float* x, float* y, float* z); +// 读取 PointXYZI +bool get_point_xyzi(void* cloud, int index, float* x, float* y, float* z, float* intensity); // ========== Voxel Filter ========== diff --git a/wrapper.cpp b/wrapper.cpp index 229c866..4f03a5b 100644 --- a/wrapper.cpp +++ b/wrapper.cpp @@ -40,6 +40,32 @@ void delete_pointcloud(void* cloud) { delete static_cast(cloud); // 可根据类型再区分 } +int get_pointcloud_size(void* cloud) { + auto* pc = static_cast(cloud); + return static_cast(pc->cloud->size()); +} + +bool get_point_xyz(void* cloud, int index, float* x, float* y, float* z) { + auto* pc = static_cast(cloud); + if (index < 0 || index >= pc->cloud->size()) return false; + const auto& pt = (*pc->cloud)[index]; + *x = pt.x; + *y = pt.y; + *z = pt.z; + return true; +} + +bool get_point_xyzi(void* cloud, int index, float* x, float* y, float* z, float* intensity) { + auto* pc = static_cast(cloud); + if (index < 0 || index >= pc->cloud->size()) return false; + const auto& pt = (*pc->cloud)[index]; + *x = pt.x; + *y = pt.y; + *z = pt.z; + *intensity = pt.intensity; + return true; +} + // === 滤波器相关 === void* create_voxel_filter_xyz() {