CMultiTemplate.h 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  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. X_Y_ANGLE_STRUCT RefPos; //参考位置,以下偏差均以此为基准
  19. double score; //分数
  20. double x; //x方向偏差(微米)
  21. double y; //y方向偏差(微米)
  22. union
  23. {
  24. double a; //角度偏差(度)
  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. MODULE_LIST m_eModuleType = MODULE_LIST::BondHead;
  37. CProduct* m_pCProduct = nullptr; // 产品指针
  38. CSingleTemplate* m_pCPrTemplate = nullptr; // 单模板指针
  39. vector<CAMERA_CALIB_STRUCT> m_VecCamera; // 相机校准结构体向量
  40. // 检查相机是否正确
  41. // 参数:nCameraId - 相机ID
  42. // 返回值:如果相机ID存在于相机向量中,返回true;否则返回false
  43. bool CheckCameraId(UINT nCameraId);
  44. // 控制坐标轴移动到指定位置,并进行同步操作
  45. // 参数:dX - X轴目标位置;dY - Y轴目标位置;dZ - Z轴目标位置;dR - R轴目标位置
  46. // 返回值:操作成功返回OK,否则返回错误码
  47. LONG ModuleMoveTo(double dX, double dY, double dZ, double dR,double dZ_Safe);
  48. // 通过相机Id获取相机指针
  49. // 参数:nCameraID - 相机ID
  50. // 返回值:如果找到对应相机,返回相机指针;否则返回nullptr
  51. CCameraBase* GetCameraPoint(UINT nCameraID);
  52. // 通过相机Id获取相机XY标定指针
  53. // 参数:nCameraID - 相机ID
  54. // 返回值:如果找到对应相机的XY标定,返回XY标定指针;否则返回nullptr
  55. CXYCalib* GetXYCalibPoint(UINT nCameraID);
  56. // 通过策略Id,获取所有认图模板
  57. // 参数:iStrategyId - 策略ID;stTemplate - 用于存储获取到的模板的向量
  58. // 返回值:操作成功返回OK,否则返回错误码
  59. LONG GetAlnTemplateById(UINT iStrategyId, vector<MULTI_TEMP_STRUCT>& stTemplate);
  60. // 通过策略Id,获取参考位置
  61. // 参数:iStrategyId - 策略ID;stRef - 用于存储参考位置的结构体
  62. // 返回值:操作成功返回OK,否则返回错误码
  63. LONG GetAlnRefById(UINT iStrategyId, X_Y_ANGLE_STRUCT& stRef);
  64. LONG GetPrTemplateById(UINT iTemplateId, PR_TEMPLATE& stTemplate);
  65. public:
  66. // 析构函数,用于释放资源
  67. ~CMultiTemplate();
  68. // 构造函数,初始化CMultiTemplate对象
  69. // 参数:vecCamer - 相机校准结构体向量;pX - X轴指针;pY - Y轴指针;pZ - Z轴指针(可选,默认为nullptr);pR - R轴指针(可选,默认为nullptr)
  70. CMultiTemplate(vector<CAMERA_CALIB_STRUCT> vecCamer, CAxis* pX, CAxis* pY, CAxis* pZ = nullptr, CAxis* pR = nullptr);
  71. LONG GetAlnTemplateById(UINT iStrategyId, vector<PR_TEMPLATE>& stTemplate);
  72. // 判断对象是否初始化成功
  73. // 返回值:如果初始化成功,返回true;否则返回false
  74. bool IsInitSuccess() { return m_bIsInitSuccess; };
  75. void SetModuleType(MODULE_LIST eModuleType) { m_eModuleType = eModuleType; };
  76. // 通过策略Id,设置参考位置
  77. // 参数:iStrategyId - 策略ID;stRef - 用于存储参考位置的结构体
  78. // 返回值:操作成功返回OK,否则返回错误码
  79. LONG SetAlnRefById(UINT iStrategyId);
  80. // 通过策略Id,设置PR策略的模板
  81. // 参数:iStrategyId - 策略ID;stRef - 用于存储参考位置的结构体
  82. // 参数:stVecTemplate - 模板Id列表
  83. // 返回值:操作成功返回OK,否则返回错误码
  84. LONG SetAlnTemplateById(UINT iStrategyId, vector<MULTI_TEMP_STRUCT> stVecTemplate);
  85. // 搜索多模板,返回一组Pr策略得到的绝对,X、Y(微米)以及角度(度)
  86. // 参数:stVecTemplate - 模板向量;
  87. // 参数:nDelayTakePicture - 拍照延时;
  88. // 参数:bUseCurrPos - 第一个模板使用当前位置;
  89. // 参数:stOutAln - 输出的搜索结果结构体
  90. // 返回值:操作成功返回OK,否则返回错误码
  91. LONG SearchMultipleTemplate(vector<MULTI_TEMP_STRUCT> stVecTemplate, UINT nDelayTakePicture, XY_DOUBLE_STRUCT stStartOffset, X_Y_ANGLE_STRUCT& stOutAln);
  92. /// <summary>
  93. /// 根据PR策略Id,进行模板匹配,输出计算后的结果
  94. /// </summary>
  95. /// <param name="iStrategyId">策略id</param>
  96. /// <param name="nDelayTakePicture">拍照延时</param>
  97. /// <param name="bUseTemplatePos">固定使用模板位置,不加偏移</param>
  98. /// <param name="stOutAln">输出值 对点结果</param>
  99. /// <returns>成功返加OK,否则返回错误码</returns>
  100. LONG SearchAlnModels(UINT iStrategyId, UINT nDelayTakePicture, bool bUseTemplatePos, FIND_MULTI_TEMP_STRUCT& stOutAln);
  101. // 创建对齐模型
  102. // 参数:vecTemplateId - 模板ID向量
  103. // 返回值:操作成功返回OK,否则返回错误码
  104. LONG CreateAlnModels(vector<MULTI_TEMP_STRUCT> vecTemplateId);
  105. //添加一个空的Pr策略
  106. LONG AddNullAlnModels(UINT& iStrategyId);
  107. };
  108. }