#pragma once #include "CManageDB.h" #include "CSingleTemplate.h" #ifdef C_PR_STRATEGY_ALN_EXPORTS #define C_PR_STRATEGY_ALN_DLL_API __declspec(dllexport) #else #define C_PR_STRATEGY_ALN_DLL_API //__declspec(dllimport) #endif using namespace ns_db; using namespace JVision; namespace ns_pr { //此处输出的偏差为相对于RefPos的物理坐标(微米) struct FIND_MULTI_TEMP_STRUCT { //PR_OUTPUT_TYPE type; //方法类型 //XY_DOUBLE_STRUCT AbsPos; //绝对位置 XY_DOUBLE_STRUCT RefPos; //参考位置,以下偏差均以此为基准 double score; //分数 double x; //x方向偏差(微米) double y; //y方向偏差(微米) union { double angle; //角度偏差(度) double radius; //半径 }; }; class C_PR_STRATEGY_ALN_DLL_API CMultiTemplate { private: CAxis* m_pAxisX = nullptr; // X轴指针 CAxis* m_pAxisY = nullptr; // Y轴指针 CAxis* m_pAxisZ = nullptr; // Z轴指针 CAxis* m_pAxisR = nullptr; // R轴指针 bool m_bIsInitSuccess = false; // 初始化是否成功的标志 CProduct* m_pCProduct = nullptr; // 产品指针 CSingleTemplate* m_pCPrTemplate = nullptr; // 单模板指针 vector m_VecCamera; // 相机校准结构体向量 // 检查相机是否正确 // 参数:nCameraId - 相机ID // 返回值:如果相机ID存在于相机向量中,返回true;否则返回false bool CheckCameraId(UINT nCameraId); // 控制坐标轴移动到指定位置,并进行同步操作 // 参数:dX - X轴目标位置;dY - Y轴目标位置;dZ - Z轴目标位置;dR - R轴目标位置 // 返回值:操作成功返回OK,否则返回错误码 LONG ModuleMove(double dX, double dY, double dZ, double dR); // 通过相机Id获取相机指针 // 参数:nCameraID - 相机ID // 返回值:如果找到对应相机,返回相机指针;否则返回nullptr CCameraBase* GetCameraPoint(UINT nCameraID); // 通过相机Id获取相机XY标定指针 // 参数:nCameraID - 相机ID // 返回值:如果找到对应相机的XY标定,返回XY标定指针;否则返回nullptr CXYCalib* GetXYCalibPoint(UINT nCameraID); // 通过策略Id,获取所有认图模板 // 参数:iStrategyId - 策略ID;stTemplate - 用于存储获取到的模板的向量 // 返回值:操作成功返回OK,否则返回错误码 LONG GetAlnTemplateById(UINT iStrategyId, vector& stTemplate); // 通过策略Id,获取参考位置 // 参数:iStrategyId - 策略ID;stRef - 用于存储参考位置的结构体 // 返回值:操作成功返回OK,否则返回错误码 LONG GetAlnRefById(UINT iStrategyId, X_Y_ANGLE_STRUCT& stRef); public: // 析构函数,用于释放资源 ~CMultiTemplate(); // 构造函数,初始化CMultiTemplate对象 // 参数:vecCamer - 相机校准结构体向量;pX - X轴指针;pY - Y轴指针;pZ - Z轴指针(可选,默认为nullptr);pR - R轴指针(可选,默认为nullptr) CMultiTemplate(vector vecCamer, CAxis* pX, CAxis* pY, CAxis* pZ = nullptr, CAxis* pR = nullptr); // 判断对象是否初始化成功 // 返回值:如果初始化成功,返回true;否则返回false bool IsInitSuccess() { return m_bIsInitSuccess; }; // 搜索多模板,返回一组Pr策略得到的绝对,X、Y(微米)以及角度(度) // 参数:stVecTemplate - 模板向量; // 参数:nDelayTakePicture - 拍照延时; // 参数:stOutAln - 输出的搜索结果结构体 // 返回值:操作成功返回OK,否则返回错误码 LONG SearchMultipleTemplate(vector stVecTemplate, UINT nDelayTakePicture, X_Y_ANGLE_STRUCT& stOutAln); /// /// 根据PR策略Id,进行模板匹配,输出计算后的结果 /// /// 策略id /// 拍照延时 /// 输出值 对点结果 /// 成功返加OK,否则返回错误码 LONG SearchAlnModels(UINT iStrategyId, UINT nDelayTakePicture, FIND_MULTI_TEMP_STRUCT& stOutAln); // 创建对齐模型 // 参数:vecTemplateId - 模板ID向量 // 返回值:操作成功返回OK,否则返回错误码 LONG CreateAlnModels(vector vecTemplateId); }; }