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
}