C3032
2026-01-06 7d40453bb5702b1898bc9fe57afbdb3f2e629918
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
 
namespace LB_SmartVisionCameraSDK
{
    //typedef void(__stdcall* PCLPointPickCallback)(double x, double y, double z);
    /// <summary>
    /// 获取点云中点的回调函数
    /// </summary>
    /// <param name="x">x坐标</param>
    /// <param name="y">y坐标</param>
    /// <param name="z">z坐标</param>
    [UnmanagedFunctionPointer(CallingConvention.StdCall)]
    public delegate void PCLPointPickCallback(double x, double y, double z);
 
    //typedef void (__stdcall* ShowParameterCallback) (void* pData, int nSize);
    /// <summary>
    /// 显示参数信息的回调函数格式,无返回值
    /// </summary>
    /// <param name="pData">消息字符串</param>
    /// <param name="nSize">字符串长度</param>
    [UnmanagedFunctionPointer(CallingConvention.StdCall)]
    public delegate void ShowParameterCallback(IntPtr pData, int nSize);
 
    public class PclEntry
    {
        /// <summary>
        /// 相对应窗体发送信息
        /// </summary>
        /// <param name="hWnd">对应窗体句柄</param>
        /// <param name="Msg">指定被寄送的消息</param>
        /// <param name="wParam">指定附加的消息特定的信息</param>
        /// <param name="lParam">指定附加的消息特定的信息</param>
        /// <returns>如果函数调用成功,返回非零值:如果函数调用失败,返回值是零。</returns>
        [DllImport("user32.dll")]
        public static extern bool PostMessage(IntPtr hWnd, uint Msg, ushort wParam, ulong lParam);
 
        //PCLAPI(void*) CreatePCLWindow(void* hWnd);
        /// <summary>
        /// 创建PCL显示实例,返回其句柄
        /// </summary>
        /// <param name="hWnd">为容纳二维显示控件的容器句柄</param>
        /// <returns>返回PCL显示实例句柄</returns>
        [DllImport("PointCloud3D", CallingConvention = CallingConvention.StdCall, EntryPoint = "CreatePCLWindow")]
        public static extern IntPtr CreatePCLWindow(IntPtr hWnd);
 
        //PCLAPI(void) DestroyPCLWindow(void* pInstance);
        /// <summary>
        /// 销毁PCL显示实例,无返回值
        /// </summary>
        /// <param name="pInstance">PCL显示实例句柄</param>
        [DllImport("PointCloud3D", CallingConvention = CallingConvention.StdCall, EntryPoint = "DestroyPCLWindow")]
        public static extern void DestroyPCLWindow(IntPtr pInstance);
 
        //PCLAPI(void) ShowPCLWindow(void* pInstance);
        /// <summary>
        /// 显示PCL实例窗口,无返回值(不使用)
        /// </summary>
        /// <param name="pInstance">PCL显示实例句柄</param>
        [DllImport("PointCloud3D", CallingConvention = CallingConvention.StdCall, EntryPoint = "ShowPCLWindow")]
        public static extern void ShowPCLWindow(IntPtr pInstance);
 
        //PCLAPI(void) HidePCLWindow(void* pInstance);
        /// <summary>
        /// 隐藏PCL实例窗口,无返回值(不使用)
        /// </summary>
        /// <param name="pInstance">PCL显示实例句柄</param>
        [DllImport("PointCloud3D", CallingConvention = CallingConvention.StdCall, EntryPoint = "HidePCLWindow")]
        public static extern void HidePCLWindow(IntPtr pInstance);
 
        //PCLAPI(int) LoadPointsFromFile(void* pInstance, const char* szFilename);
        /// <summary>
        /// 打开点云文件,以pcd、ply或csv为扩展名,加载成功返回点的个数(不小于0)。
        /// </summary>
        /// <param name="pInstance">PCL显示实例句柄</param>
        /// <param name="szFilename">待打开的文件名</param>
        /// <returns>返回打开的文件中包含的点的个数</returns>
        [DllImport("PointCloud3D", CallingConvention = CallingConvention.StdCall, EntryPoint = "LoadPointsFromFile")]
        public static extern int LoadPointsFromFile(IntPtr pInstance, byte[] szFilename);
 
        //PCLAPI(int) SavePointsToFile(void* pInstance, const char* szFilename);
        /// <summary>
        /// 存储点云文件,以pcd、ply或csv为扩展名,保存成功返回点的个数(不小于0)。
        /// </summary>
        /// <param name="pInstance">PCL显示实例句柄</param>
        /// <param name="szFilename">待保存的文件名</param>
        /// <returns>返回保存的文件中包含的点的个数</returns>
        [DllImport("PointCloud3D", CallingConvention = CallingConvention.StdCall, EntryPoint = "SavePointsToFile")]
        public static extern int SavePointsToFile(IntPtr pInstance, byte[] szFilename);
 
        //        /***********************************************************************
        //        * 不使用
        //        ************************************************************************/
        //        PCLAPI(int) PointCloudToMemery(void* pInstance, unsigned char** buffer, unsigned int* size);
 
        //        /***********************************************************************
        //        * 不使用
        //        ************************************************************************/
        //        PCLAPI(int) MemeryToPointCloud(void* pInstance, unsigned char** buffer, unsigned int* size);
 
        //        /***********************************************************************
        //        * 不使用
        //        ************************************************************************/
        //        PCLAPI(int) PointCloudToArray(void* pInstance, void* PointsArray);
 
        //        /***********************************************************************
        //        * 不使用
        //        ************************************************************************/
        //        PCLAPI(int) ArrayToPointCloud(void* pInstance, void* PointsArray);
 
        //PCLAPI(int) AddZPoints(void* pInstance, LBPointZ* points, int nCount);
        /// <summary>
        /// 向点云实例增加数据点,失败返回-1,否则返回当前点云中点的个数(不小于0)。
        /// </summary>
        /// <param name="pInstance">PCL显示实例句柄</param>
        /// <param name="points">包含Z信息的点数据, LBPointZ* points</param>
        /// <param name="nCount">点的数量</param>
        /// <returns>失败返回-1,否则返回当前点云中点的个数(不小于0)。</returns>
        [DllImport("PointCloud3D", CallingConvention = CallingConvention.StdCall, EntryPoint = "AddZPoints")]
        public static extern int AddZPoints(IntPtr pInstance, IntPtr points, int nCount);
 
        //PCLAPI(int) AddXZPoints(void* pInstance, LBPointXZ* points, int nCount);
        /// <summary>
        /// 向点云实例增加数据点,失败返回-1,否则返回当前点云中点的个数(不小于0)。
        /// </summary>
        /// <param name="pInstance">PCL显示实例句柄</param>
        /// <param name="points">包含X和Z信息的点数据, LBPointXZ* points</param>
        /// <param name="nCount">点的数量</param>
        /// <returns>失败返回-1,否则返回当前点云中点的个数(不小于0)。</returns>
        [DllImport("PointCloud3D", CallingConvention = CallingConvention.StdCall, EntryPoint = "AddXZPoints")]
        public static extern int AddXZPoints(IntPtr pInstance, IntPtr points, int nCount);
 
        //PCLAPI(int) AddZAPoints(void* pInstance, LBPointZA* points, int nCount, float fStepX, float fStepY, int nDownSample);
        /// <summary>
        /// 向点云实例增加数据点,失败返回-1,否则返回当前点云中点的个数(不小于0)。
        /// </summary>
        /// <param name="pInstance">PCL显示实例句柄</param>
        /// <param name="points">包含深度(Z)和强度(A)信息的点数据, LBPointZA* points</param>
        /// <param name="nCount">点的数量</param>
        /// <param name="fStepX">x分辨率</param>
        /// <param name="fStepY">y分辨率</param>
        /// <param name="nDownSample">降采样倍数</param>
        /// <returns>失败返回-1,否则返回当前点云中点的个数(不小于0)。</returns>
        [DllImport("PointCloud3D", CallingConvention = CallingConvention.StdCall, EntryPoint = "AddZAPoints")]
        public static extern int AddZAPoints(IntPtr pInstance, IntPtr points, int nCount, float fStepX, float fStepY, int nDownSample);
 
        //PCLAPI(int) AddXYZPoints(void* pInstance, LBPointXYZ* points, int nCount);
        /// <summary>
        /// 向点云实例增加数据点,失败返回-1,否则返回当前点云中点的个数(不小于0)。
        /// </summary>
        /// <param name="pInstance">PCL显示实例句柄</param>
        /// <param name="points">包含X、Y和Z信息的点数据, LBPointXYZ* points</param>
        /// <param name="nCount">点的数量</param>
        /// <returns>失败返回-1,否则返回当前点云中点的个数(不小于0)。</returns>
        [DllImport("PointCloud3D", CallingConvention = CallingConvention.StdCall, EntryPoint = "AddXYZPoints")]
        public static extern int AddXYZPoints(IntPtr pInstance, IntPtr points, int nCount);
 
        //PCLAPI(int) AddXYZBGRAPoints(void* pInstance, LBPointXYZBGRA* points, int nCount);
        /// <summary>
        /// 向点云实例增加数据点,失败返回-1,否则返回当前点云中点的个数(不小于0)。
        /// </summary>
        /// <param name="pInstance">PCL显示实例句柄</param>
        /// <param name="points">包含X、Y和Z以及B、G、R和A信息的点数据, LBPointXYZBGRA* points</param>
        /// <param name="nCount">点的数量</param>
        /// <returns>失败返回-1,否则返回当前点云中点的个数(不小于0)。</returns>
        [DllImport("PointCloud3D", CallingConvention = CallingConvention.StdCall, EntryPoint = "AddXYZBGRAPoints")]
        public static extern int AddXYZBGRAPoints(IntPtr pInstance, IntPtr points, int nCount);
 
        //PCLAPI(int) ClearPCLPoints(void* pInstance);
        /// <summary>
        /// 清除点云实例增加数据点内部数据点
        /// </summary>
        /// <param name="pInstance">PCL显示实例句柄</param>
        /// <returns>失败返回0,成功返回1。</returns>
        [DllImport("PointCloud3D", CallingConvention = CallingConvention.StdCall, EntryPoint = "ClearPCLPoints")]
        public static extern int ClearPCLPoints(IntPtr pInstance);
 
        //PCLAPI(int) UpdatePCLPointColors(void* pInstance, const char* szColoring = "z");
        /// <summary>
        /// 更新PCL点云数据显示的颜色
        /// </summary>
        /// <param name="pInstance">PCL显示实例句柄</param>
        /// <param name="szColoring">W,B,r,g,b,x,y,z 对应于白黑红绿蓝和xyz三轴</param>
        /// <returns>失败返回0,成功返回1。</returns>
        [DllImport("PointCloud3D", CallingConvention = CallingConvention.StdCall, EntryPoint = "UpdatePCLPointColors", CharSet = CharSet.Ansi)]
        public static extern int UpdatePCLPointColors(IntPtr pInstance, string szColoring = "z");
 
        //PCLAPI(int) GetPointCloudBound(void* pInstance, double* pMin, double* pMax);
        /// <summary>
        /// 获取PCL点云数据的范围
        /// </summary>
        /// <param name="pInstance">PCL显示实例句柄</param>
        /// <param name="pMin">返回最小值</param>
        /// <param name="pMax">返回最大值</param>
        /// <returns>失败返回0,成功返回1。</returns>
        [DllImport("PointCloud3D", CallingConvention = CallingConvention.StdCall, EntryPoint = "GetPointCloudBound")]
        public static extern int GetPointCloudBound(IntPtr pInstance, ref double pMin, ref double pMax);
 
        //PCLAPI(int) SetPointCloudBound(void* pInstance, double* pMin, double* pMax);
        /// <summary>
        /// 设置PCL点云数据的范围
        /// </summary>
        /// <param name="pInstance">PCL显示实例句柄</param>
        /// <param name="pMin">输入最小值, double* pMin</param>
        /// <param name="pMax">输入最大值, double* pMax</param>
        /// <returns>失败返回0,成功返回1。</returns>
        [DllImport("PointCloud3D", CallingConvention = CallingConvention.StdCall, EntryPoint = "SetPointCloudBound")]
        public static extern int SetPointCloudBound(IntPtr pInstance, IntPtr pMin, IntPtr pMax);
 
        //PCLAPI(int) ResizePCLWindow(void* pInstance, int nWidth, int nHeight);
        /// <summary>
        /// 调整显示点云窗口的大小
        /// </summary>
        /// <param name="pInstance">PCL显示实例句柄</param>
        /// <param name="nWidth">窗口宽度</param>
        /// <param name="nHeight">窗口高度</param>
        /// <returns>失败返回0,成功返回1。</returns>
        [DllImport("PointCloud3D", CallingConvention = CallingConvention.StdCall, EntryPoint = "ResizePCLWindow")]
        public static extern int ResizePCLWindow(IntPtr pInstance, int nWidth, int nHeight);
 
        //PCLAPI(void) RenderPCLWindow(void* pInstance, int nWidth, int nHeight);
        /// <summary>
        /// 渲染点云窗口,无返回
        /// </summary>
        /// <param name="pInstance">PCL显示实例句柄</param>
        /// <param name="nWidth">窗口宽度</param>
        /// <param name="nHeight">窗口高度</param>
        [DllImport("PointCloud3D", CallingConvention = CallingConvention.StdCall, EntryPoint = "RenderPCLWindow")]
        public static extern void RenderPCLWindow(IntPtr pInstance, int nWidth, int nHeight);
 
        //PCLAPI(void) ShowCubeAxes(void* pInstance, int bInit = 0);
        /// <summary>
        /// 显示正方体坐标系,无返回
        /// </summary>
        /// <param name="pInstance">PCL显示实例句柄</param>
        /// <param name="bInit">是否初始化</param>
        [DllImport("PointCloud3D", CallingConvention = CallingConvention.StdCall, EntryPoint = "ShowCubeAxes")]
        public static extern void ShowCubeAxes(IntPtr pInstance, int bInit = 0);
 
        //PCLAPI(void) HideCubeAxes(void* pInstance);
        /// <summary>
        /// 隐藏正方体坐标系,无返回
        /// </summary>
        /// <param name="pInstance">PCL显示实例句柄</param>
        [DllImport("PointCloud3D", CallingConvention = CallingConvention.StdCall, EntryPoint = "HideCubeAxes")]
        public static extern void HideCubeAxes(IntPtr pInstance);
 
        //PCLAPI(void) ShowAxes(void* pInstance);
        /// <summary>
        /// 在左下角显示坐标系,无返回
        /// </summary>
        /// <param name="pInstance">PCL显示实例句柄</param>
        [DllImport("PointCloud3D", CallingConvention = CallingConvention.StdCall, EntryPoint = "ShowAxes")]
        public static extern void ShowAxes(IntPtr pInstance);
 
        //PCLAPI(void) HideAxes(void* pInstance);
        /// <summary>
        /// 隐藏在左下角坐标系,无返回
        /// </summary>
        /// <param name="pInstance">PCL显示实例句柄</param>
        [DllImport("PointCloud3D", CallingConvention = CallingConvention.StdCall, EntryPoint = "HideAxes")]
        public static extern void HideAxes(IntPtr pInstance);
 
        //PCLAPI(void) ShowLookUpTable(void* pInstance, double x = 0.9, double y = 0.0, double xWide = 0.08, double yWide = 0.35);
        /// <summary>
        /// 显示颜色表
        /// </summary>
        /// <param name="pInstance">PCL显示实例句柄</param>
        /// <param name="x">显示位置,数值是与窗口宽度的比值</param>
        /// <param name="y">显示位置,数值是与窗口高度的比值</param>
        /// <param name="xWide">水平宽度,数值是与窗口宽度的比值</param>
        /// <param name="yWide">垂直宽度,数值是与窗口高度的比值</param>
        [DllImport("PointCloud3D", CallingConvention = CallingConvention.StdCall, EntryPoint = "ShowLookUpTable")]
        public static extern void ShowLookUpTable(IntPtr pInstance, double x = 0.9, double y = 0.0, double xWide = 0.08, double yWide = 0.35);
 
        //PCLAPI(void) HideLookUpTable(void* pInstance);
        /// <summary>
        /// 隐藏颜色表,无返回值
        /// </summary>
        /// <param name="pInstance">PCL显示实例句柄</param>
        [DllImport("PointCloud3D", CallingConvention = CallingConvention.StdCall, EntryPoint = "HideLookUpTable")]
        public static extern void HideLookUpTable(IntPtr pInstance);
 
        //PCLAPI(void) SetLookUpTableRange(void* pInstance, double fMin, double fMax);
        /// <summary>
        /// 设置颜色表范围,无返回值
        /// </summary>
        /// <param name="pInstance">PCL显示实例句柄</param>
        /// <param name="fMin">最小值</param>
        /// <param name="fMax">最大值</param>
        [DllImport("PointCloud3D", CallingConvention = CallingConvention.StdCall, EntryPoint = "SetLookUpTableRange")]
        public static extern void SetLookUpTableRange(IntPtr pInstance, double fMin, double fMax);
 
        //PCLAPI(void) InsertBox(void* pInstance);
        /// <summary>
        /// 插入盒子,无返回值
        /// </summary>
        /// <param name="pInstance">PCL显示实例句柄</param>
        [DllImport("PointCloud3D", CallingConvention = CallingConvention.StdCall, EntryPoint = "InsertBox")]
        public static extern void InsertBox(IntPtr pInstance);
 
        //PCLAPI(void) InsertSphere(void* pInstance);
        /// <summary>
        /// 插入球体,无返回值
        /// </summary>
        /// <param name="pInstance">PCL显示实例句柄</param>
        [DllImport("PointCloud3D", CallingConvention = CallingConvention.StdCall, EntryPoint = "InsertSphere")]
        public static extern void InsertSphere(IntPtr pInstance);
 
        //PCLAPI(void) InsertRule(void* pInstance);
        /// <summary>
        /// 插入标尺,无返回值
        /// </summary>
        /// <param name="pInstance">PCL显示实例句柄</param>
        [DllImport("PointCloud3D", CallingConvention = CallingConvention.StdCall, EntryPoint = "InsertRule")]
        public static extern void InsertRule(IntPtr pInstance);
 
        //PCLAPI(void) InsertPlane(void* pInstance);
        /// <summary>
        /// 插入平面,无返回值
        /// </summary>
        /// <param name="pInstance">PCL显示实例句柄</param>
        [DllImport("PointCloud3D", CallingConvention = CallingConvention.StdCall, EntryPoint = "InsertPlane")]
        public static extern void InsertPlane(IntPtr pInstance);
 
        //PCLAPI(void) InsertText(void* pInstance, char* szText);
        /// <summary>
        /// 插入文字,无返回值
        /// </summary>
        /// <param name="pInstance">PCL显示实例句柄</param>
        /// <param name="szText">插入文字</param>
        [DllImport("PointCloud3D", CallingConvention = CallingConvention.StdCall, EntryPoint = "InsertText", CharSet = CharSet.Ansi)]
        public static extern void InsertText(IntPtr pInstance, string szText);
 
        //PCLAPI(void) DeleteWidget(void* pInstance);
        /// <summary>
        /// 删除部件,盒子、球体等都是部件,无返回值
        /// </summary>
        /// <param name="pInstance">PCL显示实例句柄</param>
        [DllImport("PointCloud3D", CallingConvention = CallingConvention.StdCall, EntryPoint = "DeleteWidget")]
        public static extern void DeleteWidget(IntPtr pInstance);
 
        //PCLAPI(void) RegisterShowParameter(void* pInstance, ShowParameterCallback callback);
        /// <summary>
        /// 注册显示参数的函数,无返回值
        /// </summary>
        /// <param name="pInstance">PCL显示实例句柄</param>
        /// <param name="callback">待注册的回调函数</param>
        [DllImport("PointCloud3D", CallingConvention = CallingConvention.StdCall, EntryPoint = "RegisterShowParameter")]
        public static extern void RegisterShowParameter(IntPtr pInstance, ShowParameterCallback callback);
    }
}