123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- #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<CAMERA_CALIB_STRUCT> 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<PR_TEMPLATE>& 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<CAMERA_CALIB_STRUCT> 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<PR_TEMPLATE> stVecTemplate, UINT nDelayTakePicture, X_Y_ANGLE_STRUCT& stOutAln);
- /// <summary>
- /// 根据PR策略Id,进行模板匹配,输出计算后的结果
- /// </summary>
- /// <param name="iStrategyId">策略id</param>
- /// <param name="nDelayTakePicture">拍照延时</param>
- /// <param name="stOutAln">输出值 对点结果</param>
- /// <returns>成功返加OK,否则返回错误码</returns>
- LONG SearchAlnModels(UINT iStrategyId, UINT nDelayTakePicture, FIND_MULTI_TEMP_STRUCT& stOutAln);
- // 创建对齐模型
- // 参数:vecTemplateId - 模板ID向量
- // 返回值:操作成功返回OK,否则返回错误码
- LONG CreateAlnModels(vector<UINT> vecTemplateId);
- };
- }
|