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