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);
|
}
|
}
|