CMultiTemplate.h 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. #pragma once
  2. #include "CManageDB.h"
  3. #include "CSingleTemplate.h"
  4. #ifdef C_PR_STRATEGY_ALN_EXPORTS
  5. #define C_PR_STRATEGY_ALN_DLL_API __declspec(dllexport)
  6. #else
  7. #define C_PR_STRATEGY_ALN_DLL_API //__declspec(dllimport)
  8. #endif
  9. using namespace ns_db;
  10. using namespace JVision;
  11. namespace ns_pr
  12. {
  13. //此处输出的偏差为相对于RefPos的物理坐标(微米)
  14. struct FIND_MULTI_TEMP_STRUCT
  15. {
  16. //PR_OUTPUT_TYPE type; //方法类型
  17. //XY_DOUBLE_STRUCT AbsPos; //绝对位置
  18. XY_DOUBLE_STRUCT RefPos; //参考位置,以下偏差均以此为基准
  19. double score; //分数
  20. double x; //x方向偏差(微米)
  21. double y; //y方向偏差(微米)
  22. union
  23. {
  24. double angle; //角度偏差(度)
  25. double radius; //半径
  26. };
  27. };
  28. class C_PR_STRATEGY_ALN_DLL_API CMultiTemplate
  29. {
  30. private:
  31. CAxis* m_pAxisX = nullptr; // X轴指针
  32. CAxis* m_pAxisY = nullptr; // Y轴指针
  33. CAxis* m_pAxisZ = nullptr; // Z轴指针
  34. CAxis* m_pAxisR = nullptr; // R轴指针
  35. bool m_bIsInitSuccess = false; // 初始化是否成功的标志
  36. CProduct* m_pCProduct = nullptr; // 产品指针
  37. CSingleTemplate* m_pCPrTemplate = nullptr; // 单模板指针
  38. vector<CAMERA_CALIB_STRUCT> m_VecCamera; // 相机校准结构体向量
  39. // 检查相机是否正确
  40. // 参数:nCameraId - 相机ID
  41. // 返回值:如果相机ID存在于相机向量中,返回true;否则返回false
  42. bool CheckCameraId(UINT nCameraId);
  43. // 控制坐标轴移动到指定位置,并进行同步操作
  44. // 参数:dX - X轴目标位置;dY - Y轴目标位置;dZ - Z轴目标位置;dR - R轴目标位置
  45. // 返回值:操作成功返回OK,否则返回错误码
  46. LONG ModuleMove(double dX, double dY, double dZ, double dR);
  47. // 通过相机Id获取相机指针
  48. // 参数:nCameraID - 相机ID
  49. // 返回值:如果找到对应相机,返回相机指针;否则返回nullptr
  50. CCameraBase* GetCameraPoint(UINT nCameraID);
  51. // 通过相机Id获取相机XY标定指针
  52. // 参数:nCameraID - 相机ID
  53. // 返回值:如果找到对应相机的XY标定,返回XY标定指针;否则返回nullptr
  54. CXYCalib* GetXYCalibPoint(UINT nCameraID);
  55. // 通过策略Id,获取所有认图模板
  56. // 参数:iStrategyId - 策略ID;stTemplate - 用于存储获取到的模板的向量
  57. // 返回值:操作成功返回OK,否则返回错误码
  58. LONG GetAlnTemplateById(UINT iStrategyId, vector<PR_TEMPLATE>& stTemplate);
  59. // 通过策略Id,获取参考位置
  60. // 参数:iStrategyId - 策略ID;stRef - 用于存储参考位置的结构体
  61. // 返回值:操作成功返回OK,否则返回错误码
  62. LONG GetAlnRefById(UINT iStrategyId, X_Y_ANGLE_STRUCT& stRef);
  63. public:
  64. // 析构函数,用于释放资源
  65. ~CMultiTemplate();
  66. // 构造函数,初始化CMultiTemplate对象
  67. // 参数:vecCamer - 相机校准结构体向量;pX - X轴指针;pY - Y轴指针;pZ - Z轴指针(可选,默认为nullptr);pR - R轴指针(可选,默认为nullptr)
  68. CMultiTemplate(vector<CAMERA_CALIB_STRUCT> vecCamer, CAxis* pX, CAxis* pY, CAxis* pZ = nullptr, CAxis* pR = nullptr);
  69. // 判断对象是否初始化成功
  70. // 返回值:如果初始化成功,返回true;否则返回false
  71. bool IsInitSuccess() { return m_bIsInitSuccess; };
  72. // 搜索多模板,返回一组Pr策略得到的绝对,X、Y(微米)以及角度(度)
  73. // 参数:stVecTemplate - 模板向量;
  74. // 参数:nDelayTakePicture - 拍照延时;
  75. // 参数:stOutAln - 输出的搜索结果结构体
  76. // 返回值:操作成功返回OK,否则返回错误码
  77. LONG SearchMultipleTemplate(vector<PR_TEMPLATE> stVecTemplate, UINT nDelayTakePicture, X_Y_ANGLE_STRUCT& stOutAln);
  78. /// <summary>
  79. /// 根据PR策略Id,进行模板匹配,输出计算后的结果
  80. /// </summary>
  81. /// <param name="iStrategyId">策略id</param>
  82. /// <param name="nDelayTakePicture">拍照延时</param>
  83. /// <param name="stOutAln">输出值 对点结果</param>
  84. /// <returns>成功返加OK,否则返回错误码</returns>
  85. LONG SearchAlnModels(UINT iStrategyId, UINT nDelayTakePicture, FIND_MULTI_TEMP_STRUCT& stOutAln);
  86. // 创建对齐模型
  87. // 参数:vecTemplateId - 模板ID向量
  88. // 返回值:操作成功返回OK,否则返回错误码
  89. LONG CreateAlnModels(vector<UINT> vecTemplateId);
  90. };
  91. }