#ifndef _VSENSOR_H
#define _VSENSOR_H
#ifdef __linux__
#define VSENSOR_API
#else
#ifdef  DLL_EXPORT
#define VSENSOR_API  __declspec(dllexport)
#else
#define VSENSOR_API  __declspec(dllimport)
#endif
#endif
#include <functional>
#include <string>
#include <array>
#include <vector>
#include <memory>
#include "VSensorDefine.h"
namespace VSENSOR
{
	extern "C" class VSENSOR_API VSensor
	{
	public:
		VSensor();
		~VSensor();
		/*******************************************************************
		*名称：              GetSdkVersionString
		*功能：              获取SDK版本号
		*入口参数：
		version		         SDK版本号
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int GetSdkVersionString(std::string& version);
		/*******************************************************************
		*名称：              GetDeviceList
		*功能：              获取参数列表
		*入口参数：
		pCameraList          相机列表信息
		piNums               相机个数
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int GetDeviceList(VSensorCameraInfo* pCameraList, int* piNums);
		/*******************************************************************
		*名称：              GetDeviceIP
		*功能：              获取设备网络地址
		*入口参数：
		deviceName           相机名称
		addr				 相机IP
		mask               	 相机子网掩码
		gateWay				 相机网关
		etAddr				 网卡IP
		etMask				 网卡子网掩码
		etGateWay			 网卡网关
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int GetDeviceIP(const std::string& deviceName, std::string& addr, std::string& mask, std::string& gateWay, std::string& etAddr, std::string& etMask, std::string& etGateWay);
		/*******************************************************************
		*名称：              SetDeviceIP
		*功能：              设置设备网络地址(该函数仅在相机断连时可调用)
		*入口参数：
		deviceName           相机名称
		addr				 相机IP(如:192.168.1.100)
		mask               	 相机子网掩码(如:255.255.255.0)
		gateWay				 相机网关(如:192.168.1.1)
		bPersistent          true:设置相机为固定IP   false:设置相机自动分配IP(忽略参数addr, mask, gateWay)
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int SetDeviceIP(const std::string& deviceName, const std::string& addr, const std::string& mask, const std::string& gateWay, const bool& bPersistent);
		/*******************************************************************
		*名称：              SetDeviceSysOption
		*功能：              配置系统选项(需要在DeviceConnect连接设备之前配置)
		*入口参数：
		optionName           选项
		value                值
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int SetDeviceSysOption(char const* optionName, char const* value);
		/*******************************************************************
		*名称：              DeviceConnect
		*功能：              设备连接
		*入口参数：
		iDeviceIndex         需要连接的相机索引
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int DeviceConnect(const int& iDeviceIndex);
		/*******************************************************************
		*名称：              DeviceParameterInit
		*功能：              设备参数初始化，仅上电时需要进行此操作，初始化时间不固定，可通过GetDeviceParameterInitDelayTime接口获取
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int DeviceParameterInit();
		/*******************************************************************
		*名称：              GetDeviceParameterInitDelayTime
		*功能：              获取设备参数初始化时间
		*入口参数：
		time                 时间
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int GetDeviceParameterInitDelayTime(int& time);
		/*******************************************************************
		*名称：              GetDeviceCustomSN
		*功能：              获取设备自定义序列号
		*入口参数：
		serialNumber         自定义序列号
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int GetDeviceCustomSN(std::string& serialNumber);
		/*******************************************************************
		*名称：              SetDeviceCustomSN
		*功能：              设置设备自定义序列号
		*入口参数：
		serialNumber         自定义序列号
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int SetDeviceCustomSN(const std::string& serialNumber);
		/*******************************************************************
		*名称：              GetCamInternelParameter
		*功能：              获取相机内参
		*入口参数：
		pCameraInternelPara  相机内参
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int GetCamInternelParameter(VSensorCameraInternelPara* pCameraInternelPara);
		/*******************************************************************
		*名称：              GetPara
		*功能：              获取标定参数
		*入口参数：
		para                 相机标定参数
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int GetPara(std::vector<double>& para);
		/*******************************************************************
		*名称：              SetUserSettingMode
		*功能：              设置用户设置模式，新手模式下设置参数为固定参数，专家模式下设置参数能自由修改，具体功能参考软件端用户模式切换功能
		*入口参数：
		mode                 0:新手模式  1:专家模式。取值范围参见@link #emVSensorUserSettingMode @endlink的定义
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int SetUserSettingMode(const int& mode);
		/*******************************************************************
		*名称：              GetUserSettingMode
		*功能：              获取用户设置模式
		*入口参数：
		mode                 用户设置模式
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int GetUserSettingMode(int& mode);
		/*******************************************************************
		*名称：              ResetUserSettingData
		*功能：              重置用户设置数据
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int ResetUserSettingData();
		/*******************************************************************
		*名称：              LoadUserSettingData
		*功能：              加载用户设置数据
		*入口参数：
		filePath			 加载路径，支持格式ini(加载该路径下的用户设置文件至当前连接设备内部并生效设置参数)
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int LoadUserSettingData(const std::string& filePath);
		/*******************************************************************
		*名称：              SaveUserSettingData
		*功能：              保存用户设置数据
		*入口参数：
		filePath			 保存路径，支持格式ini(保存前连接设备内部的用户设置数据至该路径)
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int SaveUserSettingData(const std::string& filePath);
		/*******************************************************************
		*名称：              SetZaxisRange
		*功能：              设置当前Z轴范围
		*入口参数：
		min					 最小值
		max					 最大值
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int SetZaxisRange(const int& min, const int& max);
		/*******************************************************************
		*名称：              GetZaxisRange
		*功能：              获取当前Z轴范围
		*入口参数：
		min					 最小值
		max					 最大值
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int GetZaxisRange(int& min, int& max);
		/*******************************************************************
		*名称：              SetProjectLight
		*功能：              设置投影亮度
		*入口参数：
		brightness           投影亮度，范围1 - 100
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int SetProjectLight(const int& light);
		/*******************************************************************
		*名称：              SetDownsampling
		*功能：              设置降采样，开启降采样后图像输出分辨率宽高均会降低1/2
		*入口参数：
		isOpen				 降采样开关
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int SetDownsampling(const bool& isOpen);
		/*******************************************************************
		*名称：              GetExposureTime
		*功能：              获取曝光时间
		*入口参数：
		exposureTime         曝光时间，单位为ms
		flag                 0:灰度相机  1:彩色相机  2:灰度相机(预览)，默认灰度相机。取值范围参见@link #emVSensorCameraType @endlink的定义
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int GetExposureTime(double& exposureTime, const int& flag = TYPE_GRAY);
		/*******************************************************************
		*名称：              SetExposureTime
		*功能：              设置曝光时间
		*入口参数：
		exposureTime         曝光时间，单位为ms，范围1 - 200
		flag                 0:灰度相机  1:彩色相机  2:灰度相机(预览)，默认灰度相机。取值范围参见@link #emVSensorCameraType @endlink的定义
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int SetExposureTime(const double& exposureTime, const int& flag = TYPE_GRAY);
		/*******************************************************************
		*名称：              SetAutoExposureTime
		*功能：              设置自动曝光
		*入口参数：
		isOpen               自动曝光开关
		targetLight          目标亮度，范围10 - 250
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int SetAutoExposureTime(const bool& isOpen, const int& targetLight);
		/*******************************************************************
		*名称：              SetHDR
		*功能：              设置高动态采集模式
		*入口参数：
		exposureTime1		 曝光时间1，单位为ms，范围1 - 200
		exposureTime2        曝光时间2，单位为ms，范围1 - 200
		isOpen			     HDR开关
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int SetHDR(const double& exposureTime1, const double& exposureTime2, const bool& isOpen);
		/*******************************************************************
		*名称：              GetHDR
		*功能：              获取高动态采集模式曝光参数
		*入口参数：
		exposureTime1		 曝光时间1，单位为ms
		exposureTime2        曝光时间2，单位为ms
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int GetHDR(double& exposureTime1, double& exposureTime2);
		/*******************************************************************
		*名称：              SetAutoHDR
		*功能：              设置自动高动态采集模式
		*入口参数：
		isOpen               自动高动态采集模式开关
		model                0:亮场  1:暗场  2:混合场。取值范围参见@link #emVSensorHDRMode @endlink的定义
		targetLight          目标亮度，范围10 - 250
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int SetAutoHDR(const bool& isOpen, const int& model, const int& targetLight);
		/*******************************************************************
		*名称：              SetCameraOnceWB
		*功能：              设置一键白平衡(此接口仅支持多线扫描彩色3D设备)
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int SetCameraOnceWB();
		/*******************************************************************
		*名称：              SetAnalogGain
		*功能：              设置图像模拟增益值(此接口仅支持多线扫描彩色3D设备)
		*入口参数：
		iAnalogGainR         红色通道增益值，范围0 - 400
		iAnalogGainG         绿色通道增益值，范围0 - 400
		iAnalogGainB         蓝色通道增益值，范围0 - 400
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int SetAnalogGain(const int& iAnalogGainR, const int& iAnalogGainG, const int& iAnalogGainB);
		/*******************************************************************
		*名称：              GetAnalogGain
		*功能：              获取图像模拟增益值(此接口仅支持多线扫描彩色3D设备)
		*入口参数：
		iAnalogGainR         红色通道增益值
		iAnalogGainG         绿色通道增益值
		iAnalogGainB         蓝色通道增益值
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int GetAnalogGain(int& iAnalogGainR, int& iAnalogGainG, int& iAnalogGainB);
		/*******************************************************************
		*名称：              SetAnalogGain
		*功能：              设置图像模拟增益值
		*入口参数：
		iAnalogGain          增益值，范围5 - 10
		flag                 0:灰度相机  1:彩色相机  2:灰度相机(预览)，默认灰度相机。取值范围参见@link #emVSensorCameraType @endlink的定义
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int SetAnalogGain(const int& iAnalogGain, const int& flag = TYPE_GRAY);
		/*******************************************************************
		*名称：              GetAnalogGain
		*功能：              获取图像模拟增益值
		*入口参数：
		iAnalogGain          增益值
		flag                 0:灰度相机  1:彩色相机  2:灰度相机(预览)，默认灰度相机。取值范围参见@link #emVSensorCameraType @endlink的定义
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int GetAnalogGain(int& iAnalogGain, const int& flag = TYPE_GRAY);
		/*******************************************************************
		*名称：              GetImageResolution
		*功能：              获取输出图像分辨率
		*入口参数：
		pImageResolution     图像分辨率
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int GetImageResolution(VSensorImageResolution* pImageResolution);
		/*******************************************************************
		*名称：              GetImageResolution
		*功能：              获取输出图像分辨率
		*入口参数：
		pImageResolutionGray 灰度图像分辨率
		pImageResolutionRgb  彩色图像分辨率
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int GetImageResolution(VSensorImageResolution* pImageResolutionGray, VSensorImageResolution* pImageResolutionRgb);
		/*******************************************************************
		*名称：              GetDevTemperature
		*功能：              获取传感器温度
		*入口参数：
		devTemperature       传感器温度
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int GetDevTemperature(float& devTemperature);
		/*******************************************************************
		*名称：              ResetFrameTimeStamp
		*功能：              复位图像采集时间戳
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int ResetFrameTimeStamp();
		/*****************************************************************
		*名称：              GetLuminance1(此接口已废弃)
		*功能：              获取环境亮度(关闭激光器状态下)
		luminance            环境亮度
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int GetLuminance1(int& luminance);
		/*****************************************************************
		*名称：              GetLuminance2(此接口已废弃)
		*功能：              获取环境亮度(打开激光器状态下)
		luminance            环境亮度
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int GetLuminance2(int& luminance);			
		/*******************************************************************
		*名称：              SetScanTimeInterval
		*功能：              设置扫描时间间隔(此接口仅支持多线扫描3D设备)
		*入口参数：
		level                0:500ms  1:1000ms  2:1500ms  3:2000ms  4:2500ms  5:3000ms。取值范围参见@link #emVSensorScanTimeInterval @endlink的定义。
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int SetScanTimeInterval(const int& level);
		/*******************************************************************
		*名称：              SetLaserHoverPosition
		*功能：              设置线激光悬停位置(此接口仅支持多线扫描3D设备)
		*入口参数：
		pos                  悬停位置，范围-100 - 100
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int SetLaserHoverPosition(const int& pos);
		/*******************************************************************
		*名称：              SetFrameRate
		*功能：              设置帧速率，该接口设置采集的帧率等级，该等级为当前理论输出的最大帧率的百分比，最大帧率非固定值受曝光和ROI设置共同影响(此接口仅支持多线扫描3D设备)
		*入口参数：
		level                帧率等级，范围1 - 100
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int SetFrameRate(const int& level);
		/*******************************************************************
		*名称：              Set3DCloudCompletion
		*功能：              设置点云补全(此接口仅支持多线扫描3D设备)
		*入口参数：
		isOpen               点云补全开关
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int Set3DCloudCompletion(const bool& isOpen);
		/*******************************************************************
		*名称：              SetAlgoMode
		*功能：              设置算法模式(此接口仅支持线面一体和多线扫描3D设备)
		*入口参数：
		flag                 0:常规算法  1:抗弧光算法。取值范围参见@link #emVSensorAlgoMode @endlink的定义。
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int SetAlgoMode(const int& flag);
		/*******************************************************************
		*名称：              SetHoleFilling
		*功能：              设置数据补偿
		*入口参数：
		model                补偿等级，范围1 - 5，建议值1。注：1 - 2级填补点准确，3 - 5级放宽填补条件，会出现边界区域填充异常情况，3 - 4级增加大孔洞填补量，5级大孔洞填补误差最大，填补精度依次变差且补点个数依次变多
		isOpen               数据补偿开关
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int SetHoleFilling(const int& model, const bool& isOpen);
		/*******************************************************************
		*名称：              SetOutlierDetect
		*功能：              设置离散点
		*入口参数：
		window               离散窗口，范围1 - 5，取值越小离散点去除越弱，建议2
		para				 离散参数，范围1.0 - 5.0，取值越小离散点去除越强，建议5
		isOpen               离散开关
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int SetOutlierDetect(const int& window, const float& para, const bool& isOpen);
		/*******************************************************************
		*名称：              SetOutlierDetect2
		*功能：              设置离散点
		*入口参数：
		window               离散窗口，范围10 - 50，取值越小离散点去除越弱，建议20
		para				 离散参数，范围0.5 - 10，取值越小离散点去除越强，建议2
		isOpen               离散开关
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int SetOutlierDetect2(const int& window, const float& para, const bool& isOpen);
		/*******************************************************************
		*名称：              SetFilter1
		*功能：              设置滤波1
		*入口参数：
		window               滤波窗口，范围1 - 15
		para				 滤波参数，范围1.0 - 10.0
		isOpen               滤波开关
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int SetFilter1(const int& window, const float& para, const bool& isOpen);
		/*******************************************************************
		*名称：              SetFilter2
		*功能：              设置滤波2
		*入口参数：
		para				 滤波参数，范围1.0 - 10.0
		isOpen               滤波开关
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int SetFilter2(const float& para, const bool& isOpen);
		/*******************************************************************
		*名称：              SetFilter3
		*功能：              设置滤波3
		*入口参数：
		para				 滤波参数，范围1.0 - 10.0
		isOpen               滤波开关
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int SetFilter3(const float& para, const bool& isOpen);
		/*******************************************************************
		*名称：              SetFilter4
		*功能：              设置滤波4
		*入口参数：
		cutLevel		     离散点去除等级，范围0 - 8，取值越小离散点去除等级越小，建议值4
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int SetFilter4(const int& cutLevel, const bool& isOpen);
		/*******************************************************************
		*名称：              SetFilter5
		*功能：              设置滤波5
		*入口参数：
		para		         平滑范围，范围4 - 10，取值越大越平滑但速度越慢，建议值6
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int SetFilter5(const int& para, const bool& isOpen);
		/*******************************************************************
		*名称：              SetROI
		*功能：              设置ROI感兴趣区域
		*入口参数：
		offsetX		         起始坐标X
		offsetY              起始坐标Y
		width			     区域宽，仅支持16倍数
		height				 区域高，仅支持16倍数
		isOpen			     ROI开关
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int SetROI(const int& offsetX, const int& offsetY, const int& width, const int& height, const bool& isOpen);
		/*******************************************************************
		*名称：              SetLight
		*功能：              设置补光灯，预览模式下默认半亮，采集点云模式下默认暗(此接口仅支持加装补光灯的设备)
		*入口参数：
		flag		         0:暗  1:半亮  2:全亮。取值范围参见@link #emVSensorLight @endlink的定义
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int SetLight(const int& flag);
		/*******************************************************************
		*名称：              SetCaptureMode
		*功能：              设置相机采集模式
		*入口参数：
		flag                 0:预览模式  1:采集点云模式  2:硬件触发采集点云模式(仅支持线扫模式)，默认为预览模式。取值范围参见@link #emVSensorCaptureMode @endlink的定义
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int SetCaptureMode(const int& flag);
		/*******************************************************************
		*名称：              SetRestructionMode
		*功能：              设置相机重建模式(此接口仅支持线面一体和多线扫描3D设备切换后需要重新设备参数初始化)
		*入口参数：
		flag                 0:面模式  1:线模式，默认为面模式。取值范围参见@link #emVSensorRestructionMode @endlink的定义
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int SetRestructionMode(const int& flag);
		/*******************************************************************
		*名称：              GetRunningStatus
		*功能：              获取相机后台运行状态
		*入口参数：
		pRunningStatus       相机后台运行状态结构体
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int GetRunningStatus(VSensorCameraRunningStatus* pRunningStatus);
		/*******************************************************************
		*名称：              SingleRestruction
		*功能：              单次重建
		*入口参数：
		presult              点云数据结果
		flag                 0:全量输出  1:输出点云  2:输出点云和深度图  3:输出点云和灰度图。取值范围参见@link #emVSensorCaptureOutputMode @endlink的定义
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int SingleRestruction(VSensorResult* presult, const int& flag);
		/*******************************************************************
		*名称：              ContinuousRestructionStart
		*功能：              开始3D重建连续模式
		*入口参数：
		flag                 0:全量输出  1:输出点云  2:输出点云和深度图  3:输出点云和灰度图。取值范围参见@link #emVSensorCaptureOutputMode @endlink的定义
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int ContinuousRestructionStart(const int& flag);
		/*******************************************************************
		*名称：              ContinuousRestructionStop
		*功能：              结束3D重建连续模式
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int ContinuousRestructionStop();
		/*******************************************************************
		*名称：              CaptureFrame
		*功能：              获取一帧点云数据
		*入口参数：
		presult              点云数据结果
		ctime                最大延时时间，单位ms
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int CaptureFrame(VSensorResult* presult, const int& ctime);	
		/*******************************************************************
		*名称：              SetExternalTriggerMode
		*功能：              设置外部触发模式
		*入口参数：
		flag                 0:外触发模式  1:计数器模式。取值范围参见@link #emVSensorExternalTriggerMode @endlink的定义
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int SetExternalTriggerMode(const int& flag);
		/*******************************************************************
		*名称：              SetExternalTriggerDelay
		*功能：              设置外部触发延时
		*入口参数：
		delayTime            延迟时间，单位为us，范围0 - 1000
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int SetExternalTriggerDelay(const int& delayTime);
		/*******************************************************************
		*名称：              SetExternalTriggerType
		*功能：              设置外部触发种类
		*入口参数：
		flag                 0:上升沿触发  1:下降沿触发。取值范围参见@link #emVSensorExternalTriggerType @endlink的定义
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int SetExternalTriggerType(const int& flag);
		/*******************************************************************
		*名称：              SetExternalTriggerCounterTriggers
		*功能：              设置外部触发计数器触发数量设定值
		*入口参数：
		value                计数器触发数量设定值，范围1 - 1024
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int SetExternalTriggerCounterTriggers(const int& value);
		/*******************************************************************
		*名称：              GetExternalTriggerCurrentCounterTriggers
		*功能：              获取外部触发计数器实时触发数量
		*入口参数：
		count                计数器触发数量
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int GetExternalTriggerCurrentCounterTriggers(int& count);
		/*******************************************************************
		*名称：              ResetExternalTriggerCounterTriggers
		*功能：              复位外部触发计数器
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int ResetExternalTriggerCounterTriggers();
		/*******************************************************************
		*名称：              SetCloudBufferNum
		*功能：              设置点云缓存区数量
		*入口参数：
		num                  点云缓存区数量，默认20
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int SetCloudBufferNum(const int& num);
		/*******************************************************************
		*名称：              ClearCloudBuffer
		*功能：              清空点云缓存区
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int ClearCloudBuffer();
		/*******************************************************************
		*名称：              GetCloudBuffer
		*功能：              获取缓存区点云
		*入口参数：
		result               缓存区的点云数据数组
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int GetCloudBuffer(std::vector<VSensorResult>& result);
		/*******************************************************************
		*名称：              Record3DCloud
		*功能：              录制点云(此接口仅支持线面一体和多线扫描3D设备)
		*入口参数：
		filePath             保存点云文件路径,支持格式pcd、ply、txt。(注:最多能录制5000帧点云数据，错误路径默认不保存点云)
		flag				 0:无点云录制  1:以固定距离点云录制  2:以移动速度点云录制。取值范围参见@link #emVSensorRecordCloudMode @endlink的定义。
		para                 以固定距离点云录制模式下为间隔距离，以移动速度点云录制模式下为移动速度
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int Record3DCloud(const std::string& filePath, const int& flag, const float& para);
		/*******************************************************************
		*名称：              GetRecord3DCloud
		*功能：              获取录制点云(此接口仅支持线面一体和多线扫描3D设备)
		*入口参数：
		cloud                录制点云，x y z
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int GetRecord3DCloud(std::vector<std::array<float, 3>>& cloud);
		/*******************************************************************
		*名称：              SaveGrayMap
		*功能：              保存灰度图
		*入口参数：
		filePath             保存灰度图文件路径，支持格式png、jpg、bmp
		presult              点云数据结果
		flag                 0:原始图  1:矫正图。取值范围参见@link #emVSensorGrayType @endlink的定义
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int SaveGrayMap(const std::string& filePath, VSensorResult* presult, const int& flag);
		/*******************************************************************
		*名称：              SaveDepthMap
		*功能：              保存深度图
		*入口参数：
		filePath             保存深度图文件路径，支持格式png、tif
		presult              点云数据结果
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int SaveDepthMap(const std::string& filePath, VSensorResult* presult);
		/*******************************************************************
		*名称：              Save3DCloud
		*功能：              保存点云
		*入口参数：
		filePath             保存点云文件路径,支持格式pcd、ply、txt
		presult              点云数据结果
		flag                 0:无序点云  1:有序点云。取值范围参见@link #emVSensorPointType @endlink的定义
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int Save3DCloud(const std::string& filePath, VSensorResult* presult, const int& flag);
		/*******************************************************************
		*名称：              SaveRGBMap
		*功能：              保存彩色图(此接口仅支持多线扫描彩色3D设备)
		*入口参数：
		presult              点云数据结果
		SaveName             保存彩色图文件路径，支持格式png、jpg、bmp
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int SaveRGBMap(const std::string& filePath, VSensorResult* presult);
		/*******************************************************************
		*名称：              CameraOut
		*功能：              获取相机采集
		*入口参数：
		imgBufferGray		 存储采集左右灰度相机拼接后的灰度图像数据，分辨率为相应相机的输出分辨率*2
		imgBufferRGB         存储采集彩色相机采集到的彩色图像数据，分辨率为相应相机的输出分辨率(此参数仅支持多线扫描彩色3D设备，非该系列设备可输入nullptr)
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int CameraOut(unsigned char* imgBufferGray, unsigned char* imgBufferRGB);
		/*******************************************************************
		*名称：              CameraOut
		*功能：              获取相机采集(此接口已废弃)
		*入口参数：
		imgBufferRGB         存储采集左右彩色相机拼接后的彩色图像数据，分辨率为相应相机的输出分辨率*2
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int CameraOut(unsigned char* imgBufferRGB);
		/*******************************************************************
		*名称：              RegisterCallbackFuncGetResult
		*功能：              注册获取重建结果回调函数
		*入口参数：
		event                回调函数事件，当相应的事件发生时，所指向的函数会被调用
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int RegisterCallbackFuncGetResult(const std::function<void(VSensorResult*)>& event);
		/*******************************************************************
		*名称：              DeviceUnInit
		*功能：              设备反初始化
		*出口参数：          成功返回0否则返回非0错误码，参考VSensorDefine.h中错误码的定义
		*******************************************************************/
		int DeviceUnInit();
	private:
		class VSensorSDK;
		std::unique_ptr<VSensorSDK> pVSensorSDK;
	};
}
#endif
