using System;
|
using System.Collections.Generic;
|
using System.ComponentModel;
|
using System.Linq;
|
using System.Runtime.InteropServices;
|
using System.Text;
|
using System.Threading.Tasks;
|
|
namespace LB_SmartVisionCameraSDK.PHM6000
|
{
|
/// <summary>
|
/// 常量类
|
/// </summary>
|
public class Constants
|
{
|
/// <summary>
|
/// 最大传感器数量
|
/// </summary>
|
public const int SYS_SENSORS_MAX = 8;
|
/// <summary>
|
/// 轮廓点的数量
|
/// </summary>
|
public const int MAX_POINTS_PER_LINE = 4096;
|
/// <summary>
|
/// 最大扫描行数
|
/// </summary>
|
public const int MAX_LINES_PER_CLOUD = 50000;
|
/// <summary>
|
/// 固定方式
|
/// </summary>
|
public const int TYPE_STATIONARY = 0;
|
/// <summary>
|
/// 运动方式
|
/// </summary>
|
public const int TYPE_MOVING = 1;
|
/// <summary>
|
/// 目标平面表面
|
/// </summary>
|
public const int TARGET_FLAT_SURFACE = 0;
|
/// <summary>
|
/// 目标的边缘
|
/// </summary>
|
public const int TARGET_BAR = 1;
|
/// <summary>
|
/// 目标的多边形
|
/// </summary>
|
public const int TARGET_POLYGON = 2;
|
/// <summary>
|
/// 目标分割
|
/// </summary>
|
public const int TARGET_DISK = 3;
|
/// <summary>
|
/// 目标金字塔
|
/// </summary>
|
public const int TARGET_PYRAMID = 4;
|
/// <summary>
|
/// 目标双金字塔
|
/// </summary>
|
public const int TARGET_DUAL_PYRAMIDS = 5;
|
/// <summary>
|
/// XZ-YA景深
|
/// </summary>
|
public const int DOF_XZ_YA = 1;
|
/// <summary>
|
/// XYZ-YA景深
|
/// </summary>
|
public const int DOF_XYZ_YA = 2;
|
/// <summary>
|
/// XYZ-YZA景深
|
/// </summary>
|
public const int DOF_XYZ_YZA = 3;
|
}
|
/// <summary>
|
/// LBLineHeadInfo数据结构
|
/// </summary>
|
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
public struct LBLineHeadInfo
|
{
|
/// <summary>
|
/// 行号
|
/// </summary>
|
public UInt32 nLineIndex;
|
/// <summary>
|
/// 编码器值
|
/// </summary>
|
public UInt32 nCoderValue;
|
/// <summary>
|
/// 此行数据中包含点的数量
|
/// </summary>
|
public UInt32 nPointCount;
|
/// <summary>
|
/// 数据行信息头结构和点数据总体字节数
|
/// </summary>
|
public UInt32 nDataSize;
|
/// <summary>
|
/// X向比例
|
/// </summary>
|
public float fPitchX;
|
/// <summary>
|
/// X向最小步进单位
|
/// </summary>
|
public float fUnitX;
|
/// <summary>
|
/// Y向比例
|
/// </summary>
|
public float fPitchY;
|
/// <summary>
|
/// Y向最小步进单位
|
/// </summary>
|
public float fUnitY;
|
}
|
/// <summary>
|
/// LB3dFileHeadInfo数据结构
|
/// </summary>
|
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
public struct LB3dFileHeadInfo
|
{
|
/// <summary>
|
/// 数据大小
|
/// </summary>
|
public uint nDataSize;
|
/// <summary>
|
/// 轮廓线的行数量
|
/// </summary>
|
public uint nLineCount;
|
/// <summary>
|
/// 是否使用编码器
|
/// </summary>
|
public uint bUseCoder;
|
/// <summary>
|
/// 是否白痴
|
/// </summary>
|
public uint nReserve;
|
}
|
/// <summary>
|
/// LBLineDataZA兰宝线扫描传感器输出行数据定义(包含深度值(z)和强度值(alpha))
|
/// </summary>
|
[StructLayout(LayoutKind.Sequential)]
|
public struct LBLineDataZA
|
{
|
/// <summary>
|
/// 行信息头
|
/// </summary>
|
public LBLineHeadInfo info;
|
/// <summary>
|
/// 行数据(包含深度值(z)和强度值(alpha))
|
/// </summary>
|
public LBPointZA[] data;
|
}
|
/// <summary>
|
/// LBLineDataXYZ数据结构
|
/// </summary>
|
[StructLayout(LayoutKind.Sequential)]
|
public struct LBLineDataXYZ
|
{
|
/// <summary>
|
/// 点数
|
/// </summary>
|
public uint nPointCount;
|
/// <summary>
|
/// LBPointXYZ数组数据
|
/// </summary>
|
[MarshalAs(UnmanagedType.ByValArray, SizeConst = Constants.MAX_POINTS_PER_LINE)]
|
public LBPointXYZ[] data;
|
}
|
/// <summary>
|
/// LBLineDataXZ数据结构
|
/// </summary>
|
[StructLayout(LayoutKind.Sequential)]
|
public struct LBLineDataXZ
|
{
|
/// <summary>
|
/// 点数
|
/// </summary>
|
public uint nPointCount;
|
/// <summary>
|
/// LBPointXZ数组数据
|
/// </summary>
|
[MarshalAs(UnmanagedType.ByValArray, SizeConst = Constants.MAX_POINTS_PER_LINE)]
|
public LBPointXZ[] data;
|
}
|
/// <summary>
|
/// LB3dFileData数据结构
|
/// </summary>
|
public struct LB3dFileData
|
{
|
/// <summary>
|
/// LB3dFileHeadInfo数据
|
/// </summary>
|
public LB3dFileHeadInfo info;
|
/// <summary>
|
/// LBLineDataZA数组数据
|
/// </summary>
|
public LBLineDataZA[] lines;
|
}
|
/// <summary>
|
/// LBPointCloudData数据结构
|
/// </summary>
|
public struct LBPointCloudData
|
{
|
/// <summary>
|
/// 轮廓线数量
|
/// </summary>
|
public int nLineCount;
|
/// <summary>
|
/// LBLineDataXYZ数组数据
|
/// </summary>
|
public LBLineDataXYZ[] data;
|
}
|
/// <summary>
|
/// LBPointCloudDataXYZ数据结构
|
/// </summary>
|
public struct LBPointCloudDataXYZ
|
{
|
/// <summary>
|
/// 点云数量
|
/// </summary>
|
public int nPointCount;
|
/// <summary>
|
/// LBPointXYZ*数据指针
|
/// </summary>
|
public IntPtr points;
|
}
|
/// <summary>
|
/// LB标定数据
|
/// </summary>
|
[StructLayout(LayoutKind.Sequential)]
|
public struct LBCalibrationData
|
{
|
/// <summary>
|
/// 点数
|
/// </summary>
|
public int nCount;
|
/// <summary>
|
/// LB 轮廓线数据 XYZ
|
/// </summary>
|
public LBLineDataXYZ LineData;
|
}
|
/// <summary>
|
/// 传感器信息
|
/// </summary>
|
[StructLayout(LayoutKind.Sequential)]
|
public struct SENSOR_INFO
|
{
|
/// <summary>
|
/// 最小水平视场
|
/// </summary>
|
public float XMinFOV;
|
/// <summary>
|
/// 最大水平视场
|
/// </summary>
|
public float xMaxFOV;
|
/// <summary>
|
/// 最小值范围
|
/// </summary>
|
public float minMRange;
|
/// <summary>
|
/// 最大值范围
|
/// </summary>
|
public float maxMRange;
|
/// <summary>
|
/// 标准距离
|
/// </summary>
|
public float stdDistance;
|
/// <summary>
|
/// 标准视场
|
/// </summary>
|
public float stdFOV;
|
/// <summary>
|
/// X起始
|
/// </summary>
|
public float xStart;
|
/// <summary>
|
/// Z起始
|
/// </summary>
|
public float zStart;
|
}
|
/// <summary>
|
/// 活动区域信息
|
/// </summary>
|
[StructLayout(LayoutKind.Sequential)]
|
public struct ACTIVE_AREA_INFO
|
{
|
/// <summary>
|
/// X起点
|
/// </summary>
|
public float xOrigin;
|
/// <summary>
|
/// Y起点
|
/// </summary>
|
public float yOrigin;
|
/// <summary>
|
/// X偏移
|
/// </summary>
|
public float xOffset;
|
/// <summary>
|
/// 水平视场
|
/// </summary>
|
public float xFOV;
|
/// <summary>
|
/// X起始
|
/// </summary>
|
public float xStart;
|
}
|
/// <summary>
|
/// 传感器位置信息
|
/// </summary>
|
public struct SENSOR_POSITION
|
{
|
/// <summary>
|
/// X是否倒序
|
/// </summary>
|
public int IsReverse;
|
/// <summary>
|
/// Z是否相对
|
/// </summary>
|
public int IsOpposite;
|
/// <summary>
|
/// 标准距离
|
/// </summary>
|
public float fStdDistance;
|
/// <summary>
|
/// X 中心
|
/// </summary>
|
public float fXCenter;
|
/// <summary>
|
/// X坐标
|
/// </summary>
|
public float x;
|
/// <summary>
|
/// Y坐标
|
/// </summary>
|
public float y;
|
/// <summary>
|
/// Z坐标
|
/// </summary>
|
public float z;
|
/// <summary>
|
/// X轴角度
|
/// </summary>
|
public float xAngle;
|
/// <summary>
|
/// Y轴角度
|
/// </summary>
|
public float yAngle;
|
/// <summary>
|
/// Z轴角度
|
/// </summary>
|
public float zAngle;
|
}
|
/// <summary>
|
/// 偏移信息
|
/// </summary>
|
[StructLayout(LayoutKind.Sequential)]
|
public struct OFFSET_INFO
|
{
|
/// <summary>
|
/// X坐标
|
/// </summary>
|
public float x;
|
/// <summary>
|
/// Y坐标
|
/// </summary>
|
public float y;
|
/// <summary>
|
/// Z坐标
|
/// </summary>
|
public float z;
|
/// <summary>
|
/// X轴角度
|
/// </summary>
|
public float xAngle;
|
/// <summary>
|
/// Y轴角度
|
/// </summary>
|
public float yAngle;
|
/// <summary>
|
/// Z轴角度
|
/// </summary>
|
public float zAngle;
|
}
|
/// <summary>
|
/// 轮廓线标定数据结构
|
/// </summary>
|
[StructLayout(LayoutKind.Sequential)]
|
public struct PARAM_BAR
|
{
|
/// <summary>
|
/// 高度或者厚度值
|
/// </summary>
|
public float Height;
|
/// <summary>
|
/// 宽度值
|
/// </summary>
|
public float Width;
|
/// <summary>
|
/// 孔的数量
|
/// </summary>
|
public int HoleCount;
|
/// <summary>
|
/// 孔的直径
|
/// </summary>
|
public float HoleDiameter;
|
/// <summary>
|
/// 孔的距离
|
/// </summary>
|
public float HoleDistance;
|
/// <summary>
|
/// 景深
|
/// </summary>
|
public int DOF;
|
}
|
/// <summary>
|
/// 角点数据结构
|
/// </summary>
|
[StructLayout(LayoutKind.Sequential)]
|
public struct PARAM_CORNER
|
{
|
/// <summary>
|
/// X坐标
|
/// </summary>
|
public float x;
|
/// <summary>
|
/// Z坐标
|
/// </summary>
|
public float z;
|
}
|
/// <summary>
|
/// 多边形数据结构
|
/// </summary>
|
[StructLayout(LayoutKind.Sequential)]
|
public struct PARAM_POLYGON
|
{
|
/// <summary>
|
/// 总点数
|
/// </summary>
|
public int nCorners;
|
/// <summary>
|
/// 角点数据结
|
/// </summary>
|
public unsafe PARAM_CORNER* pCornerInfo;
|
}
|
/// <summary>
|
/// 网格数据结构
|
/// </summary>
|
[StructLayout(LayoutKind.Sequential)]
|
public struct PARAM_BOARD
|
{
|
/// <summary>
|
/// 初始化参数
|
/// </summary>
|
public void Initialize()
|
{
|
Height = 73.76f;
|
Width = 218;
|
HoleDiameter = 20;
|
HoleDistance = 98;
|
LocationHoleX1 = 60;
|
LocationHoleY1 = 73;
|
LocationHoleX2 = 60;
|
LocationHoleY2 = 213;
|
}
|
/// <summary>
|
/// 高度值
|
/// </summary>
|
public float Height;
|
/// <summary>
|
/// 宽度值
|
/// </summary>
|
public float Width;
|
/// <summary>
|
/// 孔直径
|
/// </summary>
|
public float HoleDiameter;
|
/// <summary>
|
/// 孔距离
|
/// </summary>
|
public float HoleDistance;
|
/// <summary>
|
/// 孔1X
|
/// </summary>
|
public float LocationHoleX1;
|
/// <summary>
|
/// 孔2Y
|
/// </summary>
|
public float LocationHoleY1;
|
/// <summary>
|
/// 孔2X
|
/// </summary>
|
public float LocationHoleX2;
|
/// <summary>
|
/// 孔2Y
|
/// </summary>
|
public float LocationHoleY2;
|
}
|
/// <summary>
|
/// LB-ROI
|
/// </summary>
|
[StructLayout(LayoutKind.Sequential)]
|
public struct LB_ROI
|
{
|
/// <summary>
|
/// ROI-Left坐标
|
/// </summary>
|
public float left;
|
/// <summary>
|
/// ROI-Top坐标
|
/// </summary>
|
public float top;
|
/// <summary>
|
/// ROI-Right坐标
|
/// </summary>
|
public float right;
|
/// <summary>
|
/// ROI-Bottom坐标
|
/// </summary>
|
public float bottom;
|
}
|
/// <summary>
|
/// LB-ROI-INTEGER
|
/// </summary>
|
[StructLayout(LayoutKind.Sequential)]
|
public struct LB_ROI_INTEGER
|
{
|
/// <summary>
|
/// LB-ROI-INTEGER-Left坐标
|
/// </summary>
|
public float left;
|
/// <summary>
|
/// LB-ROI-INTEGER-Top坐标
|
/// </summary>
|
public float top;
|
/// <summary>
|
/// LB-ROI-INTEGER-Right坐标
|
/// </summary>
|
public float right;
|
/// <summary>
|
/// LB-ROI-INTEGER-Bottom坐标
|
/// </summary>
|
public float bottom;
|
}
|
/// <summary>
|
/// LB 颜色映射表
|
/// </summary>
|
[StructLayout(LayoutKind.Sequential)]
|
public struct LBColorMap
|
{
|
/// <summary>
|
/// 高
|
/// </summary>
|
public int nHeight;
|
/// <summary>
|
/// 宽
|
/// </summary>
|
public int nWidth;
|
/// <summary>
|
/// LBPointBGRA数据
|
/// </summary>
|
public unsafe LBPointBGRA* pMap;
|
}
|
/// <summary>
|
/// 目标信息数据结构
|
/// </summary>
|
[StructLayout(LayoutKind.Sequential)]
|
public struct TARGET_INFO
|
{
|
/// <summary>
|
/// 宽度值
|
/// </summary>
|
public float fWidth;
|
/// <summary>
|
/// 高度值
|
/// </summary>
|
public float fHeight;
|
/// <summary>
|
/// 景深
|
/// </summary>
|
public float fDepth;
|
/// <summary>
|
/// XL
|
/// </summary>
|
public float fMarginX;
|
/// <summary>
|
/// XROI
|
/// </summary>
|
public float fMarginRangeX;
|
/// <summary>
|
/// YL
|
/// </summary>
|
public float fMarginY;
|
/// <summary>
|
/// YROI
|
/// </summary>
|
public float fMarginRangeY;
|
/// <summary>
|
/// M
|
/// </summary>
|
public int nPartitionX;
|
/// <summary>
|
/// N
|
/// </summary>
|
public int nPartitionY;
|
}
|
/// <summary>
|
/// TRANS_INFO数据结构
|
/// </summary>
|
public struct TRANS_INFO
|
{
|
/// <summary>
|
/// x偏移
|
/// </summary>
|
public float x;
|
/// <summary>
|
/// y偏移
|
/// </summary>
|
public float y;
|
/// <summary>
|
/// z偏移
|
/// </summary>
|
public float z;
|
/// <summary>
|
/// x偏角
|
/// </summary>
|
public float xAngle;
|
/// <summary>
|
/// y偏角
|
/// </summary>
|
public float yAngle;
|
/// <summary>
|
/// z偏角
|
/// </summary>
|
public float zAngle;
|
}
|
/// <summary>
|
/// 值类型
|
/// </summary>
|
enum ValueType
|
{
|
/// <summary>
|
/// 整型
|
/// </summary>
|
_Int,
|
/// <summary>
|
/// 浮点型
|
/// </summary>
|
_Float,
|
/// <summary>
|
/// 布尔类型
|
/// </summary>
|
_Bool,
|
/// <summary>
|
/// 枚举类型
|
/// </summary>
|
_Enum,
|
/// <summary>
|
/// ROI类型
|
/// </summary>
|
_Roi,
|
/// <summary>
|
/// 范围
|
/// </summary>
|
_Range,
|
/// <summary>
|
/// 浮点型数组
|
/// </summary>
|
_FloatArray,
|
};
|
|
#region 兰宝PHM6000传感器
|
|
/// <summary>
|
/// 兰宝线扫描传感器兴趣区结构定义
|
/// </summary>
|
[StructLayout(LayoutKind.Sequential/*, Pack = 1*/)] // 保证内存布局顺序
|
public struct LBProfileROI
|
{
|
/// <summary>
|
/// 兴趣区X向中心位置 (单位:mm)
|
/// </summary>
|
[DisplayName("xAxisCenter")]
|
[Category("LBProfileROI")]
|
[Description("兴趣区X向中心位置 (单位:mm)")]
|
public double xAxisCenter { get; set; }
|
|
/// <summary>
|
/// 兴趣区X向宽度 (单位:mm)
|
/// </summary>
|
[DisplayName("width")]
|
[Category("LBProfileROI")]
|
[Description("兴趣区X向宽度 (单位:mm)")]
|
public double width { get; set; }
|
|
/// <summary>
|
/// 兴趣区Z向高度 (单位:mm)
|
/// </summary>
|
[DisplayName("height")]
|
[Category("LBProfileROI")]
|
[Description("兴趣区Z向高度 (单位:mm)")]
|
public double height { get; set; }
|
}
|
/// <summary>
|
/// 兰宝线扫描传感器信息结构定义
|
/// </summary>
|
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
|
public struct LBCameraInfo
|
{
|
/// <summary>
|
/// 模块型号
|
/// </summary>
|
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
|
public string szModuleType;
|
|
/// <summary>
|
/// 模块序列号
|
/// </summary>
|
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
|
public string szSerialNumber;
|
|
/// <summary>
|
/// 网络地址
|
/// </summary>
|
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
|
public string szIpAddress;
|
|
/// <summary>
|
/// 监听端口
|
/// </summary>
|
public int nPort;
|
}
|
|
/// <summary>
|
/// 通用输入输出端口(GPIO)枚举值
|
/// </summary>
|
public enum GPIOLine
|
{
|
/// <summary>
|
/// 控制盒上接插件引线编号Line21
|
/// </summary>
|
Line21 = 0,
|
/// <summary>
|
/// 控制盒上接插件引线编号Line22
|
/// </summary>
|
Line22,
|
/// <summary>
|
/// 控制盒上接插件引线编号Line23
|
/// </summary>
|
Line23,
|
/// <summary>
|
/// 控制盒上接插件引线编号Line24
|
/// </summary>
|
Line24,
|
/// <summary>
|
/// 控制盒上接插件引线编号Line25
|
/// </summary>
|
Line25,
|
/// <summary>
|
/// 控制盒上接插件引线编号Line26
|
/// </summary>
|
Line26,
|
/// <summary>
|
/// 控制盒上接插件引线编号Line27
|
/// </summary>
|
Line27,
|
/// <summary>
|
/// 控制盒上接插件引线编号Line28
|
/// </summary>
|
Line28,
|
};
|
|
#endregion
|
}
|