From 80c17b89f8ec23bf64fc5d8650adb0cce0bd9ae0 Mon Sep 17 00:00:00 2001 From: 12345qiupeng Date: Sat, 12 Apr 2025 17:25:49 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=AE=9E=E7=8E=B0=E4=B8=A4=E7=A7=8D?= =?UTF-8?q?=E4=BD=93=E7=B4=A0=E6=BB=A4=E6=B3=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PclPointCloud.cs | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/PclPointCloud.cs b/PclPointCloud.cs index 33e64cb..a62f5fa 100644 --- a/PclPointCloud.cs +++ b/PclPointCloud.cs @@ -19,6 +19,25 @@ public class PclPointCloudXYZ : IDisposable { [DllImport("./pcl/libpclwrapper.dylib")] private static extern int save_pcd_xyz(string path,IntPtr ptr); } + +public class PclPointCloudXYZI : IDisposable { + private IntPtr handle; + + public PclPointCloudXYZI() => handle = create_pointcloud_xyzi(); + // 构造函数用于内部封装 handle 对象 + public PclPointCloudXYZI(IntPtr handle) => this.handle = handle; + public void Dispose() { delete_pointcloud(handle); handle = IntPtr.Zero; } + + public bool Load(string path) => load_pcd_xyzi( path,handle); + public int Save(string path) => save_pcd_xyzi(path,handle); + public IntPtr Handle => handle; + + [DllImport("./pcl/libpclwrapper.dylib")] private static extern IntPtr create_pointcloud_xyzi(); + [DllImport("./pcl/libpclwrapper.dylib")] private static extern void delete_pointcloud(IntPtr ptr); + [DllImport("./pcl/libpclwrapper.dylib")] private static extern bool load_pcd_xyzi(string path,IntPtr ptr); + [DllImport("./pcl/libpclwrapper.dylib")] private static extern int save_pcd_xyzi(string path,IntPtr ptr); +} + public class PclVoxelGridXYZ : IDisposable { private IntPtr handle; @@ -36,4 +55,24 @@ public class PclVoxelGridXYZ : IDisposable { [DllImport("./pcl/libpclwrapper.dylib")] private static extern IntPtr apply_voxel_filter_xyz(IntPtr filterPtr); +} + + +public class PclVoxelGridXYZI : IDisposable { + private IntPtr handle; + + public PclVoxelGridXYZI() => handle = create_voxel_filter_xyzi(); + public void Dispose() { delete_voxel_filter(handle); handle = IntPtr.Zero; } + + public void SetLeafSize(float x, float y, float z) => set_voxel_leaf_size(handle, x, y, z); + public void SetInputCloud(PclPointCloudXYZI cloud) => set_voxel_input_cloud(handle, cloud.Handle); + public PclPointCloudXYZI Filter() => new PclPointCloudXYZI(apply_voxel_filter_xyzi(handle)); + + [DllImport("./pcl/libpclwrapper.dylib")] private static extern IntPtr create_voxel_filter_xyzi(); + [DllImport("./pcl/libpclwrapper.dylib")] private static extern void delete_voxel_filter(IntPtr ptr); + [DllImport("./pcl/libpclwrapper.dylib")] private static extern void set_voxel_leaf_size(IntPtr ptr, float x, float y, float z); + [DllImport("./pcl/libpclwrapper.dylib")] private static extern void set_voxel_input_cloud(IntPtr filterPtr, IntPtr cloudPtr); + [DllImport("./pcl/libpclwrapper.dylib")] private static extern IntPtr apply_voxel_filter_xyzi(IntPtr filterPtr); + + } \ No newline at end of file