#ifndef __VIZUM_MUL_DETECTED_LASER_HEADER__ #define __VIZUM_MUL_DETECTED_LASER_HEADER__ #include "VZNL_Export.h" #include "VZNL_Types.h" #include "VZNL_Common.h" #include "VZNL_DetectLaser.h" /// @brief /// 开始多设备检测 /// [in]多个相机Handle /// [in]相机个数 /// [out]错误码 /// @return 返回多设备检测工具Handle VZNLAPI VZNLDETECTHANDLE VzNL_BeginMultiDeviceDetectLaser(VZNLHANDLE* phDevice, int nDeviceCount, int* pnErrorCode); /// @brief /// 是否为主相机 /// [in]多相机检测工具 /// [in]相机handle /// @return 返回true则表示是主相机 VZNLAPI VzBool VzNL_IsMasterDev(VZNLDETECTHANDLE hDetectHandle, VZNLHANDLE hDevice); /** * @brief 设备状态提醒 * @param [in] hDevice 融合设备Handle * @param [in] pNotifyCB 返回函数 * @param [in] pCBParam 回调函数返回参数 * @return 关闭成功返回0,否则为错误码 */ VZNLAPI int VzNL_SetMulDevStatusNotify(VZNLHANDLE hDetechTool, VzNL_OnMulDevNotifyStatusCB pNotifyCB, void* pCBParam); /// @brief /// 设置激光标定。 /// [in]多相机检测工具 /// [in]设置标定高度 /// [in]顶部ROI数组指针 /// [in]顶部ROI的数组个数 /// [in]底部ROI数组指针 /// [in]底部ROI数组个数 /// @return 返回0为正确,失败返回错误码 VZNLAPI int VzNL_SetMulDevLaserStandard( VZNLDETECTHANDLE hDetechTool, double dStandardObjectHeight, const SVzNLROIRect* pTopROI, const int nTopROICount, const SVzNLROIRect* pBottomROI, const int nBottomROICount); /// @brief /// 清除标定信息 /// [in]多相机检测工具 /// @return 成功返回0,失败返回错误码 VZNLAPI int VzNL_ClearMulDevLaserStandard(VZNLDETECTHANDLE hDetechTool); /// @brief /// 设置激光门限值 /// [in]多相机检测工具 /// [in]激光门限值[Range:0~255] /// @return 成功返回0,失败返回错误码 VZNLAPI int VzNL_SetMulDevLaserThres(VZNLDETECTHANDLE hDetechTool, int nLaserThres); /// @brief /// 设置过滤高度 /// [in]多相机检测工具 /// [in]过滤高度(此高度以下的数据不输出) /// @return 成功返回0,失败返回错误码 VZNLAPI int VzNL_ConfigMulDevLaserLineFilterHeight(VZNLDETECTHANDLE hDetechTool, double dFilterHeight); /// @brief /// 设置杂点过滤阈值 /// [in]多相机检测工具 /// [in]过滤值 /// @return 成功返回0,失败返回错误码 VZNLAPI int VzNL_ConfigMulDevLaserLineMaxDeviation(VZNLDETECTHANDLE hDetechTool, double dMaxDeviation); /// @brief /// 设置偏移量 /// [in]多相机检测工具 /// [in]偏移量 /// @return 成功返回0,失败返回错误码 VZNLAPI int VzNL_ConfigMulDevLaserBeginOffsetValue(VZNLDETECTHANDLE hDetechTool, double dOffsetValue); /** * @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_SetMulDevPointCloudProcMode(VZNLDETECTHANDLE hDetechTool, EVzPointCloudProcMode ePointCloudProcMode); /** * @brief 设置固定步长 * 设置前请先设置为kePointCloudProcMode_FixedStep模式 */ VZNLAPI int VzNL_SetMulDevFixedStep(VZNLDETECTHANDLE hDetechTool, double dStep); /// @brief /// 设置传送带速度值 当设置点云处理模式为 kePointCloudProcMode_Speed可用 /// [in]多相机检测工具 /// [in]运行方向 /// [in]速度 /// @return 成功返回0,失败返回错误码 VZNLAPI int VzNL_ConfigMulDevLaserObjRunSpeedValue(VZNLDETECTHANDLE hDetechTool, EVzObjRunDirect eDirect, double dSpeed); /** * @brief 配置转动轴半径 kePointCloudProcMode_Encoder可用 * @param [in] hDevice 设备句柄 * @param [in] dRadius 转动轴半径 * @return 成功返回0,否则为其他错误码 */ VZNLAPI int VzNL_ConfigMulDevLaserRollerRadius(VZNLDETECTHANDLE hDetechTool, double dRadius); VZNLAPI int VzNL_GetMulDevLaserRollerRadius(VZNLDETECTHANDLE hDetechTool, double* pdRadius); /** * @brief 设置编码器脉冲精度 kePointCloudProcMode_Encoder可用 * @param [in] hDevice 设备句柄 * @param [in] nPulsePerRound 脉冲个数 * @return 成功返回0,否则为其他错误码 */ VZNLAPI int VzNL_SetMulDevLaserEncoderResolution(VZNLDETECTHANDLE hDetechTool, unsigned int nPulsePerRound); VZNLAPI int VzNL_GetMulDevLaserEncoderResolution(VZNLDETECTHANDLE hDetechTool, unsigned int* pnPulsePerRound); ///@brief 获取参数设置范围 ///[in]多相机检测工具 ///@param name="eType"[in]参数类型 ///@param name="pnMinVal"[in]最小值 ///@param name="pnMaxVal"[in]最大值 /// @return 成功返回0,失败返回错误码。 VZNLAPI int VzNL_QueryMulDevParamRange(VZNLDETECTHANDLE hDetechTool, EVzDeviceParamType eType, unsigned int* pnMinVal, unsigned int* pnMaxVal); /// @brief /// 检测一帧数据 /// [in]多相机检测工具 /// @return 成功返回0,失败返回错误码 VZNLAPI int VzNL_MulDevDetectLaser(VZNLDETECTHANDLE hDetechTool); /// @brief /// 设置外部设备为外部触发模式 /// [in]多相机检测工具 /// [in]外部触发模式 /// @return 成功返回0,失败返回错误码 VZNLAPI int VzNL_SwitchMulDevExternTrigger(VZNLDETECTHANDLE hDetechTool, EVzMultiDevWorkMode eWorkMode); /// @brief /// 启用多相机全数据模式 /// [in]多相机检测工具 /// [in]启用/禁用 /// @return 成功返回0,失败返回错误码 VZNLAPI int VzNL_EnableMulDevUseAllPoint(VZNLDETECTHANDLE hDetechTool, VzBool bEnable); /// @brief /// 刷新多相机参数 /// [in]多相机检测工具 /// [in]启用/禁用 /// @return 成功返回0,失败返回错误码 VZNLAPI int VzNL_UpdateMulDevCalibration(VZNLDETECTHANDLE hDetechTool); /// @brief /// 启用软件计算模式 /// [in]多相机检测工具 /// [in]启用/禁用 /// @return 成功返回0,失败返回错误码 VZNLAPI int VzNL_EnableMulDevCalcMatrix(VZNLDETECTHANDLE hDetechTool, VzBool bEnable); /// @brief /// 获取激光线2D结果 /// [in]多相机检测工具 /// [out]2D点,内存空间由用户分配 /// [in/out]传入:用户分配的SVzNL2DPoint的结构个数;传出:用户需要分配多少个SVzNL2DPoint /// @return 成功返回0,失败返回错误码。 VZNLAPI int VzNL_GetMulDevLaser2DResult(VZNLDETECTHANDLE hDetechTool, SVzNL2DPosition* p2DPoint, int* pnCount); /// @brief /// 获取激光线3D结果 /// [in]多相机检测工具 /// [out]3D点,内存空间由用户分配 /// [in/out]传入:用户分配的SVzNL3DPosition的结构个数;传出:用户需要分配多少个SVzNL3DPosition /// @return 成功返回0,失败返回错误码。 VZNLAPI int VzNL_GetMulDevLaser3DResult(VZNLDETECTHANDLE hDetechTool, SVzNL3DPosition* p3DPoint, int* pnCount); /// @brief /// 启动多设备自动检测,并返回激光线 /// [in]多相机检测工具 /// [in]回调函数 /// [in]回调参数 /// @return 成功返回0,失败返回错误码。 VZNLAPI int VzNL_StartMulDeviceAutoDetect(VZNLDETECTHANDLE hDetechTool, VzNL_GetAutoDetectResultCB pCB, void* pCBParam); /// @brief /// 启动多设备自动检测,并返回激光线 /// [in]多相机检测工具 /// [in]回调函数 /// [in]回调参数 /// @return 成功返回0,失败返回错误码。 VZNLAPI int VzNL_StartMulDeviceAutoDetectEx(VZNLDETECTHANDLE hDetechTool, EVzResultDataType eResultType, VzNL_AutoOutputLaserLineExCB pCBEx, void* pCBParam); /// @brief /// 设置融合的相机类型。 /// [in]多相机检测工具 /// [in]融合的相机类型 /// @return 返回0为正确,失败返回错误码 VZNLAPI int VzNL_SetMulDevType(VZNLDETECTHANDLE hDetechTool, EVzMultiDevType eMultiDevType); VZNLAPI int VzNL_GetMulDevType(VZNLDETECTHANDLE hDetechTool, EVzMultiDevType* peMultiDevType); /// @brief /// 设置静态相机融合扫描模式。 /// [in]多相机检测工具 /// [in]静态相机融合扫描模式 /// @return 返回0为正确,失败返回错误码 VZNLAPI int VzNL_SetMulStaticDevScanMode(VZNLDETECTHANDLE hDetechTool, EVzMultiStaticDevScanMode eMultiDevScanMode); VZNLAPI int VzNL_GetMulStaticDevScanMode(VZNLDETECTHANDLE hDetechTool, EVzMultiStaticDevScanMode* peMultiDevScanMode); /// @brief /// 停止多设备检测 /// [in]多相机检测工具 /// @return 成功返回0,失败返回错误码。 VZNLAPI int VzNL_StopMulDeviceAutoDetect(VZNLDETECTHANDLE hDetectTool); /// @brief /// 结束多设备检测 /// [in]多相机检测工具 /// @return 成功返回0,失败返回错误码。 VZNLAPI int VzNL_EndMultiDeviceDetectLaser(VZNLDETECTHANDLE* pDetectTool); /** * @brief 是否支持高帧率下降沿模式 * @param hDevice 当前设备句柄 * @param pnErrorCode 错误信息,如果不需要可填NULL * @return VzTrue 表示支持 VzFalse 表示不支持 */ VZNLAPI VzBool VzNL_IsMulDevSupportHighFrequenceFallingEdge(VZNLDETECTHANDLE hDetechTool, int* pnErrorCode); #endif