#pragma once
#define C_MACHINE_EXPORTS
#include "Machine.h"
#include "CDieBondFsm.h"
#include "CMessageBox.h"
#include "CPrManage.h"
#include "dt.h"
namespace ns_module
{
class __declspec(dllexport) CCamerAndLamp
{
private:
static CCamerAndLamp* m_instance;
CManageDB* m_pCManageDB = nullptr;
Machine* m_pMachine = nullptr;
CCameraManage* m_pCameraManage = nullptr;
CBondHead* m_pBondHead = nullptr;
CWaferTable* m_pWaferTable = nullptr;
CWaferHead* m_pWaferHead = nullptr;
CTransferTable* m_pWaferTransferTable = nullptr;
CTransferTable* m_pWaffleTransferTable = nullptr;
CResources* m_pResource = nullptr;
CDieBondFsm* m_pDieBondFsm = nullptr;
public:
static CCamerAndLamp* GetInstance();
CCamerAndLamp();
//设置图像为连续更新
long VideoStart(int iCameraId);
//设置图像为暂停更新
long VideoStop(int iCameraId);
///
/// 设置红光
///
/// 相机Id
/// 灯光值
/// 成功返回0,否则返回错误码
long SetRedLight(int iCameraId, int LightValue);
///
/// 设置绿光
///
/// 灯光值
/// 成功返回0,否则返回错误码
long SetGreenLight(int iCameraId, int LightValue);
///
/// 设置蓝光
///
/// 相机Id
/// 灯光值
/// 成功返回0,否则返回错误码
long SetBlueLight(int iCameraId, int LightValue);
///
/// 设置点光
///
/// 相机Id
/// 灯光值
/// 成功返回0,否则返回错误码
long SetPointLight(int iCameraId, int LightValue);
///
/// 获取灯光值
///
/// 相机Id
/// 红光。值为-1时,表示没有该灯
/// 绿光。值为-1时,表示没有该灯
/// 蓝光。值为-1时,表示没有该灯
/// 点光。值为-1时,表示没有该灯
/// 成功返回0,否则返回错误码
long GetLight(int iCameraId, int& redLightValue, int& greenLightValue, int& blueLightValue, int& pointLightValue);
///
/// 获取相机图像。调用后会阻塞,直到有新的相机图像时才返回
///
/// 相机Id
///
/// 成功返回0,否则返回错误码
long GrabImage(int iCameraId, ImageInfo& image);
///
/// 获取相机列表
///
/// 相机列表
/// 成功返回0,否则返回错误码
long GetCameraList(vector& vecCamera);
///
/// 相机移动到显示位置
///
///
///
///
///
long CameraMove(int iCameraId, double x, double y);
/**打开,关闭相机
*/
long OpenOrCloseCamera(int iCameraId);
//设置相机显示回调
long SetVideoCallBackFunc(int iCameraId, CallVideoBack func);
//获取模板图片
long GetTemplateImage(int iTemplateId,ImageInfo& image);
//获取所有Pr策略
std::vector GetPrStrategyList();
//获取指定Pr策略中的Pr模板
LONG GetPrTemplateList(UINT iStrategyId, std::vector vecTemplate);
//获取模组中相机
std::vector GetCameraIdList(MODULE_LIST iModuleType);
//创建PR模板
LONG CreatePrTemplate(MODULE_LIST iModuleType, UINT iCameraId, UINT& iTemplateId);
//获取PR模板
LONG GetPrTemplate(MODULE_LIST iModuleType, UINT iCameraId, UINT& iTemplateId);
//模板匹配测试,传入策略对象,以及模板id,返回图像,像素结果,物理结果
LONG TemplateMacthTest(MODULE_LIST iModuleType, UINT iTempId,ImageInfo& image,X_Y_ANGLE_STRUCT& PxielResult, X_Y_ANGLE_STRUCT& posResult);
//创建空的PR策略
LONG CreatePrStrategy(MODULE_LIST iModuleType, UINT& iStrategyId);
//设置策略参考点
LONG SetPrStrategyRef(MODULE_LIST iModuleType, UINT iStrategyId);
//设置PR策略里的模板
LONG SetPrStrategyTemplate(MODULE_LIST iModuleType, UINT iStrategyId, vector vecTemplateId);
LONG SaveImage2File(const JVision::ImageInfo& imageIn,const std::string& FilePath);
};
}