CSingleTemplate.h 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. #pragma once
  2. #include "CManageDB.h"
  3. #include "CAxis.h"
  4. #include "CCameraBase.h"
  5. //#include "CXYCalib.h"
  6. //#include "ILocalizationManager.h"
  7. #include "CPxielLocation.h"
  8. #include "CMessageBox.h"
  9. #ifdef C_PR_TEMPLATE_EXPORTS
  10. #define C_PR_TEMPLATE_DLL_API __declspec(dllexport)
  11. #else
  12. #define C_PR_TEMPLATE_DLL_API //__declspec(dllimport)
  13. #endif
  14. using namespace ns_db;
  15. using namespace JVision;
  16. class CXYCalib;
  17. namespace ns_pr
  18. {
  19. //此处输出的偏差为相对于相机十字光标中心的物理坐标(微米)
  20. struct FIND_SINGLE_TEMP_STRUCT
  21. {
  22. PR_OUTPUT_TYPE type; //方法类型
  23. double score; //分数
  24. double x; //x方向偏差(微米)
  25. double y; //y方向偏差(微米)
  26. union
  27. {
  28. double angle; //角度偏差(度)
  29. double radius; //半径
  30. };
  31. };
  32. // 相机校准结构体,用于存储相机指针和对应的坐标校准指针
  33. struct CAMERA_CALIB_STRUCT
  34. {
  35. CCameraBase* pCamera; // 指向相机对象的指针
  36. CXYCalib* pXYCalib; // 指向坐标校准对象的指针
  37. };
  38. // CSingleTemplate 类,用于处理单模板相关的操作
  39. class C_PR_TEMPLATE_DLL_API CSingleTemplate
  40. {
  41. private:
  42. bool m_bIsInitSuccess; // 标记初始化是否成功
  43. CProduct* m_pCProduct = nullptr; // 指向产品相关对象的指针,可能用于与数据库交互获取产品信息
  44. //ILocalizationManager* m_pLocalizationManager = nullptr; // 本地化管理对象指针,暂时注释掉,可能在后续功能扩展中使用
  45. CPixelLocation* m_pPixelLocation = nullptr; // 像素位置处理对象指针,用于处理图像中像素位置相关操作
  46. vector<CAMERA_CALIB_STRUCT> m_VecCamera; // 存储相机校准结构体的向量
  47. // 禁止默认构造函数,确保对象只能通过特定方式初始化
  48. //CSingleTemplate() = delete;
  49. // 检查相机ID是否在存储的相机列表中
  50. // 参数 nCameraId:要检查的相机ID
  51. bool CheckCameraId(UINT nCameraId);
  52. // 通过相机ID获取相机对象指针
  53. // 参数 nCameraID:目标相机的ID
  54. // 返回值:指向相机对象的指针,如果未找到则返回 nullptr
  55. CCameraBase* GetCameraPoint(UINT nCameraID);
  56. // 通过相机ID获取相机的XY标定对象指针
  57. // 参数 nCameraID:目标相机的ID
  58. // 返回值:指向相机XY标定对象的指针,如果未找到则返回 nullptr
  59. CXYCalib* GetXYCalibPoint(UINT nCameraID);
  60. // 通过模板ID获取模板信息
  61. // 参数 iTemplateId:要获取的模板ID
  62. // 参数 stTemplate:用于存储获取到的模板信息的结构体引用
  63. // 返回值:操作结果,例如成功返回 OK,失败返回 FAIL 等
  64. LONG GetTemplateById(UINT iTemplateId, PR_TEMPLATE& stTemplate);
  65. // 搜索图片,outPoint为相对于图片左上角的点,暂时注释掉,可能在后续功能整合中使用
  66. // 参数 iPrMethod:搜索使用的方法ID
  67. // 参数 image:要搜索的图像信息
  68. // 参数 outPoint:用于存储搜索结果的相对于图片左上角的点的结构体引用
  69. // 返回值:操作结果,例如成功返回 OK,失败返回 FAIL 等
  70. //LONG SearchImageByLocalization(UINT iPrMethod, ImageInfo image,FIND_OUTPUT_STRUCT& outPoint);
  71. public:
  72. // 构造函数,使用传入的相机校准结构体向量进行初始化
  73. // 参数 vecCamer:包含相机和坐标校准信息的结构体向量
  74. CSingleTemplate(vector<CAMERA_CALIB_STRUCT> vecCamer);
  75. // 获取初始化是否成功的状态
  76. // 返回值:初始化成功返回 true,失败返回 false
  77. bool IsInitSuccess() { return m_bIsInitSuccess; };
  78. // 根据给定的模板信息、拍照延迟时间,搜索单模板,返回相对于十字光标中心的X、Y(微米值)以及角度(度)偏差
  79. // 参数 stTemplate:包含模板相关信息的结构体,如相机ID、方法等
  80. // 参数 nDelayTakePicture:拍照前的延迟时间(单位为毫秒)
  81. // 参数 stOutOffset:用于存储搜索结果偏差信息的结构体引用,包括X、Y和角度偏差
  82. // 返回值:操作结果,例如成功返回 OK,失败返回 FAIL 等
  83. LONG SearchTemplate(PR_TEMPLATE stTemplate, UINT nDelayTakePicture, FIND_SINGLE_TEMP_STRUCT& stOutOffset);
  84. // 根据给定的模板ID、拍照延迟时间,搜索单模板,返回相对于十字光标中心的X、Y(微米值)以及角度(度)偏差
  85. // 参数 iTemplateId:要搜索的模板ID
  86. // 参数 nDelayTakePicture:拍照前的延迟时间(单位毫秒)
  87. // 参数 stOutOffset:用于存储搜索结果偏差信息的结构体引用,包括X、Y和角度偏差
  88. // 返回值:操作结果,例如成功返回 OK,失败返回 FAIL 等
  89. LONG SearchTemplate(UINT iTemplateId, UINT nDelayTakePicture, FIND_SINGLE_TEMP_STRUCT& stOutOffset);
  90. // 创建模板,传入模块类型、相机ID、识别方法、抓取位置等参数,可选结果选择参数
  91. // 参数 iModuleType:模板所属的模块类型
  92. // 参数 iCameraId:使用的相机ID
  93. // 参数 iPrMethod:模板识别方法ID
  94. // 参数 stGrabPos:包含抓取位置信息的结构体,可能包括X、Y、Z坐标和旋转角度等
  95. // 参数 eResultSelect:结果选择枚举值,默认值为 SEARCH_OUT::OUT_All,用于指定搜索结果的类型
  96. // 返回值:操作结果,例如成功返回 OK,失败返回 FAIL 等
  97. LONG CreateTemplate(UINT iCameraId, UINT iPrMethod, X_Y_Z_R_STRUCT stGrabPos, SEARCH_OUT eResultSelect,UINT &iTemplateId);
  98. };
  99. }