GrabBag/SDK/VzNLSDK/Inc/VZNL_DetectLaser.h

350 lines
16 KiB
C
Raw Normal View History

2025-07-23 01:35:14 +08:00
/*
* Header: VZNL_Graphics.h
* Description:(Vizum)EyeCB板提供检测函数接口
*
* Sample:
* VzNL_BeginDetectLaser();
*
* VzNL_SetLaserStandard();
*
* VzNL_EndDetectLaser();
* Author: Mjw
* Date: 2018/08/28
*/
#ifndef __VIZUM_DETECTED_LASER_HEADER__
#define __VIZUM_DETECTED_LASER_HEADER__
#include "VZNL_Export.h"
#include "VZNL_Types.h"
/**
* @brief
* @param [in] hDevice
* @return 0
* @retval 0
* @retval 0 ,使VzNL_GetErrorInfo获取
*/
VZNLAPI int VzNL_BeginDetectLaser(VZNLHANDLE hDevice);
/**
* @brief (EyeCB和星光眼)
* @param [in] hDevice
* @param [in] nLaserThres [Range:1~255]
* @return 0
* @retval 0
* @retval 0 ,使VzNL_GetErrorInfo获取
*/
VZNLAPI int VzNL_SetLaserThres(VZNLHANDLE hDevice, int nLaserThres);
VZNLAPI int VzNL_GetLaserThres(VZNLHANDLE hDevice, int* pnLaserThres);
/**
* @brief
* @param [in] hDevice
* @param [in] dStandardObjectHeight
* @param [in] pTopROI ROI数组指针
* @param [in] nTopROICount ROI的数组个数
* @param [in] pBottomROI ROI数组指针
* @param [in] nBottomROICount ROI数组个数
* @return 0
*/
VZNLAPI int VzNL_SetLaserStandard(VZNLHANDLE hDevice, double dStandardObjectHeight,
const SVzNLROIRect* pTopROI, const int nTopROICount,
const SVzNLROIRect* pBottomROI, const int nBottomROICount);
/**
* @brief
* @param [in] hDevice
* @return 0
*/
VZNLAPI int VzNL_ClearLaserStandard(VZNLHANDLE hDevice);
/**
* @brief
* @param [in] hDevice
* @param [in] nPointInterval
* @return 0
*/
VZNLAPI int VzNL_DetectLaser(VZNLHANDLE hDevice, int nPointInterval);
/**
* @brief 线
* @param [in] hDevice
* @return
*/
VZNLAPI int VzNL_GetLaserResultPointCount(VZNLHANDLE hDevice);
/// @brief
/// 获取激光线2D结果
/// <param name = "hDevice">[in]设备句柄</param>
/// <param name = "p2DPoint">[out]2D点内存空间由用户分配</param>
/// <param name = "pnCount">[in/out]传入:用户分配的SVzNL2DPoint的结构个数;传出:用户需要分配多少个SVzNL2DPoint</param>
/// @return 成功返回0失败返回错误码。
VZNLAPI int VzNL_GetLaser2DResult(VZNLHANDLE hDevice, SVzNL2DPosition* p2DPoint, int* pnCount);
/// @brief
/// 获取激光线3D结果
/// <param name = "hDevice">[in]设备句柄</param>
/// <param name = "p3DPoint">[out]3D点内存空间由用户分配</param>
/// <param name = "pnCount">[in/out]传入:用户分配的SVzNL3DPosition的结构个数;传出:用户需要分配多少个SVzNL3DPosition</param>
/// @return 成功返回0失败返回错误码。
VZNLAPI int VzNL_GetLaser3DResult(VZNLHANDLE hDevice, SVzNL3DPosition* p3DPoint, int* pnCount);
/// @brief
/// 获取结果图像
/// <param name = "hDevice">[in]设备句柄</param>
/// <param name = "ppIImageData">[in]图像数据</param>
VZNLAPI int VzNL_GetLaserImageResult(VZNLHANDLE hDevice, SVzNLImageData** ppLeftImageData, SVzNLImageData** ppRightImageData);
/// @brief
/// 检测激光凹槽数据
/// <param name = "hDevice">[in]设备句柄</param>
/// <param name = "dMinSlotDeep">[in]最小凹槽深度</param>
/// @return 返回0为正确失败返回错误码
VZNLAPI int VzNL_SetLaserMinSlotDeep(VZNLHANDLE hDevice, double dMinSlotDeep);
/// @brief
/// 获取激光凹槽数据结果的波峰点的个数
/// <param name = "hDevice">[in]设备句柄</param>
VZNLAPI int VzNL_GetLaserSlotResultPeakPonitCount(VZNLHANDLE hDevice);
/// @brief
/// 获取激光凹槽数据结果的波谷点的个数
/// <param name = "hDevice">[in]设备句柄</param>
VZNLAPI int VzNL_GetLaserSlotResultValleyPonitCount(VZNLHANDLE hDevice);
/// @brief
/// 获取激光凹槽2D结果
/// <param name = "hDevice">[in]设备句柄</param>
/// <param name = "pPeakPoint">[out]波峰点,内存空间由用户分配</param>
/// <param name = "pnPeakPointCount">[in/out]传入:用户分配的SVzNL2DPoint的结构个数;传出:用户需要分配多少个SVzNL2DPoint</param>
/// <param name = "pValleyPoint">[out]波谷点,内存空间由用户分配</param>
/// <param name = "pnValleyPointCount">[in/out]传入:用户分配的SVzNL2DPoint的结构个数;传出:用户需要分配多少个SVzNL2DPoint</param>
/// @return 成功返回0失败返回错误码。
VZNLAPI int VzNL_GetLaserSlot2DResult(VZNLHANDLE hDevice, SVzNL2DPosition* pPeakPoint, int* pnPeakPointCount, SVzNL2DPosition* pValleyPoint, int* pnValleyPointCount);
/// @brief
/// 获取激光凹槽3D结果
/// <param name = "hDevice">[in]设备句柄</param>
/// <param name = "pPeakPoint">[out]波峰点,内存空间由用户分配</param>
/// <param name = "pnPeakPointCount">[in/out]传入:用户分配的SVzNL3DPoint的结构个数;传出:用户需要分配多少个SVzNL3DPoint</param>
/// <param name = "pValleyPoint">[out]波谷点,内存空间由用户分配</param>
/// <param name = "pnValleyPointCount">[in/out]传入:用户分配的SVzNL3DPoint的结构个数;传出:用户需要分配多少个SVzNL3DPoint</param>
/// @return 成功返回0失败返回错误码。
VZNLAPI int VzNL_GetLaserSlot3DResult(VZNLHANDLE hDevice, SVzNL3DPosition* pPeakPoint, int* pnPeakPointCount, SVzNL3DPosition* pValleyPoint, int* pnValleyPointCount);
/// @brief
/// 启动自动检测,并且返回激光线
/// <param name = "hDevice">[in]设备句柄</param>
/// <param name = "eFlipType">[in]激光线方向,keFlipType_Vertical垂直翻转</param>
/// <param name = "pCB">[in]回调函数</param>
/// <param name = "pCBParam">[in]回调函数参数</param>
/// @return 成功返回0失败返回错误码。
VZNLAPI int VzNL_StartAutoDetect(VZNLHANDLE hDevice, EVzFlipType eFlipType, VzNL_GetAutoDetectResultCB pCB, void* pCBParam);
VZNLAPI int VzNL_StartAutoDetectEx(VZNLHANDLE hDevice, EVzResultDataType eResultType, EVzFlipType eFlipType, VzNL_AutoOutputLaserLineExCB pCB, void* pCBParam);
VZNLAPI int VzNL_StopAutoDetect(VZNLHANDLE hDevice);
/// @brief
/// 是否在自动检测中
VZNLAPI VzBool VzNL_IsAutoDetecting(VZNLHANDLE hDevice, int* pnErrorCode);
/// @brief
/// 获取扫描后的RGB原图(见说明书3.5.31)
/// <param name = "hDevice">[in]设备</param>
/// <param name = "ppResultImage">[out]输出RGB图像需要用户调用VzNL_ReleaseImage进行数据释放</param>
/// @return 成功返回0失败返回错误码。
VZNLAPI int VzNL_GetAutoDetectResultSurface(VZNLHANDLE hDevice, SVzNLImageData** ppResultImage);
/// @brief
/// 设置过滤高度
/// <param name = "hDevice">[in]设备</param>
/// <param name = "dFilterHeight">[in]过滤高度(未高度标定时,大于此高度的数据不输出,高度标定后,小于此数据的高度不输出)</param>
/// @return 成功返回0失败返回错误码。
VZNLAPI int VzNL_ConfigLaserLineFilterHeight(VZNLHANDLE hDevice, double dFilterHeight);
/// @brief
/// 获取过滤高度
/// <param name = "hDevice">[in]设备</param>
/// <param name = "pdFilterHeight">[out]过滤高度</param>
/// @return 成功返回0失败返回错误码。
VZNLAPI int VzNL_GetLaserLineFilterHeight(VZNLHANDLE hDevice, double* pdFilterHeight);
/// @brief
/// 配置激光线过滤范围
/// <param name = "hDevice">[in]设备</param>
/// <param name = "eFilterType">[in]过滤类型</param>
/// <param name = "dRange">[in]过滤范围</param>
/// @return 成功返回0失败返回错误码
VZNLAPI int VzNL_SetLaserLineFilterRange(VZNLHANDLE hDevice, EVzLaserPointFilterType eFilterType, double dRange[2]);
/// @brief
/// 获取激光线过滤范围
/// <param name = "hDevice">[in]设备</param>
/// <param name = "eFilterType">[in]过滤类型</param>
/// <param name = "dRange">[in]过滤范围</param>
/// @return 成功返回0失败返回错误码
VZNLAPI int VzNL_GetLaserLineFilterRange(VZNLHANDLE hDevice, EVzLaserPointFilterType eFilterType, double dRange[2]);
/// @brief
/// 启用/禁用过滤高度
/// <param name = "hDevice">[in]设备</param>
/// <param name = "bEnable">[in]启用过滤高度</param>
/// @return 成功返回0失败返回错误码
VZNLAPI int VzNL_EnableLaserLineFilterHeight(VZNLHANDLE hDevice, VzBool bEnable);
/// @brief
/// 是否启用过滤高度
/// <param name = "hDevice">[in]设备</param>
/// <param name = "pnErrorCode">[out]错误码</param>
/// @return 启用返回VzTrue未启用返回VzFalse
VZNLAPI VzBool VzNL_IsEnableLaserLineFilterHeight(VZNLHANDLE hDevice, int* pnErrorCode);
/// @brief
/// 设置杂点过滤阈值
/// <param name = "hDevice">[in]设备句柄</param>
/// <param name = "dMaxDeviation">[in]过滤值</param>
VZNLAPI int VzNL_ConfigLaserLineMaxDeviation(VZNLHANDLE hDevice, double dMaxDeviation);
/// @brief
/// 设置偏移量
/// <param name = "hDevice">[in]设备句柄</param>
/// <param name = "dOffsetValue">[in]偏移量</param>
VZNLAPI int VzNL_ConfigLaserBeginOffsetValue(VZNLHANDLE hDevice, double dOffsetValue);
/**
* @brief
* @param [in] hDevice
* @param [in] pErrorCode ErrorCode
* @return VzTrue
*/
VZNLAPI VzBool VzNL_LaserIsCalibration(VZNLHANDLE hDevice, int* pErrorCode);
/**
* @brief
* @param [in] hDevice
* @param [in] ePointCloudProcMode kePointCloudProcMode_Speed , kePointCloudProcMode_Encoder kePointCloudProcMode_FixedStep
* @return 0
* Old Interface int VzNL_EnableLaserRollerMode(VZNLHANDLE hDevice, VzBool bEnable);
*/
VZNLAPI int VzNL_SetPointCloudProcMode(VZNLHANDLE hDevice, EVzPointCloudProcMode ePointCloudProcMode);
VZNLAPI int VzNL_GetPointCloudProcMode(VZNLHANDLE hDevice, EVzPointCloudProcMode* pePointCloudProcMode);
/** @brief 设置物体运动方向
* <param name = "hDevice">[in]</param>
* <param name = "eDirect">[in][keObjRunDirect_Plus: keObjRunDirect_Minus:]</param>
* @return 0
*/
VZNLAPI int VzNL_SetLaserObjRunDirection(VZNLHANDLE hDevice, EVzObjRunDirect eDirect);
VZNLAPI int VzNL_GetLaserObjRunDirection(VZNLHANDLE hDevice, EVzObjRunDirect* peDirect);
/** @brief 设置传送带速度值
* VzNL_SetPointCloudProcMode(hDevice, kePointCloudProcMode_Speed)
* <param name = "hDevice">[in]</param>
* <param name = "dSpeed">[in]</param>
* @return 0
*/
VZNLAPI int VzNL_ConfigLaserObjRunSpeedValue(VZNLHANDLE hDevice, double dSpeed);
VZNLAPI int VzNL_GetLaserObjRunSpeedValue(VZNLHANDLE hDevice, double* pdSpeed);
/**
* @brief
* @detail VzNL_SetPointCloudProcMode(hDevice, kePointCloudProcMode_FixedStep)
* @param [in] hDevice
* @param [in] dStep
* @return 0
*/
VZNLAPI int VzNL_SetLaserLineFixedStep(VZNLHANDLE hDevice, double dStep);
VZNLAPI int VzNL_GetLaserLineFixedStep(VZNLHANDLE hDevice, double* pdStep);
/*
* @brief /
* @detail VzNL_SetPointCloudProcMode(hDevice, kePointCloudProcMode_Encoder)
* @param[in] hDevice
* @param[in] eParamType
* 使 + keEncodeParamType_RollerResolution
* 使 keEncodeParamType_DistancePerPulse
* @return 0
*/
VZNLAPI int VzNL_SetLaserEncoderParamType(VZNLHANDLE hDevice, EVzEncodeParamType eParamType);
VZNLAPI int VzNL_GetLaserEncoderParamType(VZNLHANDLE hDevice, EVzEncodeParamType* peParamType);
/**
* @brief
* @detail VzNL_SetPointCloudProcMode(hDevice, kePointCloudProcMode_Encoder)
* VzNL_SetLaserEncoderParamType(hDevice, keEncodeParamType_RollerResolution) 使
* @param [in] hDevice
* @param [in] dRadius
* @return 0
*/
VZNLAPI int VzNL_ConfigLaserRollerRadius(VZNLHANDLE hDevice, double dRadius);
VZNLAPI int VzNL_GetLaserRollerRadius(VZNLHANDLE hDevice, double* pdRadius);
/**
* @brief
* @detail VzNL_SetPointCloudProcMode(hDevice, kePointCloudProcMode_Encoder)
* VzNL_SetLaserEncoderParamType(hDevice, keEncodeParamType_RollerResolution) 使
* @param [in] hDevice
* @param [in] nPulsePerRound
* @return 0
*/
VZNLAPI int VzNL_SetLaserEncoderResolution(VZNLHANDLE hDevice, unsigned int nPulsePerRound);
VZNLAPI int VzNL_GetLaserEncoderResolution(VZNLHANDLE hDevice, unsigned int* pnPulsePerRound);
/**
* @brief
* @detail VzNL_SetPointCloudProcMode(hDevice, kePointCloudProcMode_Encoder)
* VzNL_SetLaserEncoderParamType(hDevice, keEncodeParamType_DistancePerPulse) 使
* @param [in] hDevice
* @param [in] dDistancePerPulse
* @return 0
*/
VZNLAPI int VzNL_SetLaserEncoderDistancePerPulse(VZNLHANDLE hDevice, double dDistancePerPulse);
VZNLAPI int VzNL_GetLaserEncoderDistancePerPulse(VZNLHANDLE hDevice, double* pdDistancePerPulse);
/**
* @brief
* @param [in] hDevice
* @param [in] nCaptureInterval
* @return 0
*/
VZNLAPI int VzNL_SetLaserCaptureInterval(VZNLHANDLE hDevice, unsigned int nCaptureInterval);
VZNLAPI int VzNL_GetLaserCaptureInterval(VZNLHANDLE hDevice, unsigned int* pnCaptureInterval);
/**
* @brief //
* @param [in] p3DPoint 3D点Array
* @param [in] nCount
* @param [out] pdAvgHeight
* @param [out] pdMinHeight
* @param [out] pdMaxHeight
* @return 0
*/
VZNLAPI void VzNL_CalcLaserZHeight(SVzNL3DPosition* p3DPoint, int nCount, double* pdAvgHeight, double* pdMinHeight, double* pdMaxHeight);
/**
* @brief
* @param [in] hDevice
* @param [in] bFillPoint VzTrue为填充VzFalse为不填充(VzFalse)
* @return 0
*/
VZNLAPI int VzNL_EnableFillLaserPoint(VZNLHANDLE hDevice, VzBool bFillPoint);
VZNLAPI int VzNL_IsEnableFillLaserPoint(VZNLHANDLE hDevice, VzBool* pbFillPoint);
/**
* @brief ,
* @param [in] hDevice
* @param [in] nDistance ,(mm)
* @return 0
*/
VZNLAPI int VzNL_SetLaserCaptureDistance(VZNLHANDLE hDevice, double dDistance);
VZNLAPI int VzNL_GetLaserCaptureDistance(VZNLHANDLE hDevice, double* dnDistance);
/**
* @brief
* @param [in] hDevice
* @return
*/
VZNLAPI void VzNL_EndDetectLaser(VZNLHANDLE hDevice);
#endif //__VIZUM_DETECTED_LASER_HEADER__