CSingleTemplate.h 4.7 KB

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