#pragma once #include "CManageDB.h" #include "CAxis.h" #include "CCameraBase.h" //#include "CXYCalib.h" //#include "ILocalizationManager.h" #include "CPxielLocation.h" #ifdef C_PR_TEMPLATE_EXPORTS #define C_PR_TEMPLATE_DLL_API __declspec(dllexport) #else #define C_PR_TEMPLATE_DLL_API //__declspec(dllimport) #endif using namespace ns_db; using namespace JVision; class CXYCalib; namespace ns_pr { //此处输出的偏差为相对于相机十字光标中心的物理坐标(微米) struct FIND_SINGLE_TEMP_STRUCT { PR_OUTPUT_TYPE type; //方法类型 double score; //分数 double x; //x方向偏差(微米) double y; //y方向偏差(微米) union { double angle; //角度偏差(度) double radius; //半径 }; }; // 相机校准结构体,用于存储相机指针和对应的坐标校准指针 struct CAMERA_CALIB_STRUCT { CCameraBase* pCamera; // 指向相机对象的指针 CXYCalib* pXYCalib; // 指向坐标校准对象的指针 }; // CSingleTemplate 类,用于处理单模板相关的操作 class C_PR_TEMPLATE_DLL_API CSingleTemplate { private: bool m_bIsInitSuccess; // 标记初始化是否成功 CProduct* m_pCProduct = nullptr; // 指向产品相关对象的指针,可能用于与数据库交互获取产品信息 //ILocalizationManager* m_pLocalizationManager = nullptr; // 本地化管理对象指针,暂时注释掉,可能在后续功能扩展中使用 CPixelLocation* m_pPixelLocation = nullptr; // 像素位置处理对象指针,用于处理图像中像素位置相关操作 vector m_VecCamera; // 存储相机校准结构体的向量 // 禁止默认构造函数,确保对象只能通过特定方式初始化 //CSingleTemplate() = delete; // 检查相机ID是否在存储的相机列表中 // 参数 nCameraId:要检查的相机ID bool CheckCameraId(UINT nCameraId); // 通过相机ID获取相机对象指针 // 参数 nCameraID:目标相机的ID // 返回值:指向相机对象的指针,如果未找到则返回 nullptr CCameraBase* GetCameraPoint(UINT nCameraID); // 通过相机ID获取相机的XY标定对象指针 // 参数 nCameraID:目标相机的ID // 返回值:指向相机XY标定对象的指针,如果未找到则返回 nullptr CXYCalib* GetXYCalibPoint(UINT nCameraID); // 通过模板ID获取模板信息 // 参数 iTemplateId:要获取的模板ID // 参数 stTemplate:用于存储获取到的模板信息的结构体引用 // 返回值:操作结果,例如成功返回 OK,失败返回 FAIL 等 LONG GetTemplateById(UINT iTemplateId, PR_TEMPLATE& stTemplate); // 搜索图片,outPoint为相对于图片左上角的点,暂时注释掉,可能在后续功能整合中使用 // 参数 iPrMethod:搜索使用的方法ID // 参数 image:要搜索的图像信息 // 参数 outPoint:用于存储搜索结果的相对于图片左上角的点的结构体引用 // 返回值:操作结果,例如成功返回 OK,失败返回 FAIL 等 //LONG SearchImageByLocalization(UINT iPrMethod, ImageInfo image,FIND_OUTPUT_STRUCT& outPoint); public: // 构造函数,使用传入的相机校准结构体向量进行初始化 // 参数 vecCamer:包含相机和坐标校准信息的结构体向量 CSingleTemplate(vector vecCamer); // 获取初始化是否成功的状态 // 返回值:初始化成功返回 true,失败返回 false bool IsInitSuccess() { return m_bIsInitSuccess; }; // 根据给定的模板信息、拍照延迟时间,搜索单模板,返回相对于十字光标中心的X、Y(微米值)以及角度(度)偏差 // 参数 stTemplate:包含模板相关信息的结构体,如相机ID、方法等 // 参数 nDelayTakePicture:拍照前的延迟时间(单位为毫秒) // 参数 stOutOffset:用于存储搜索结果偏差信息的结构体引用,包括X、Y和角度偏差 // 返回值:操作结果,例如成功返回 OK,失败返回 FAIL 等 LONG SearchTemplate(PR_TEMPLATE stTemplate, UINT nDelayTakePicture, FIND_SINGLE_TEMP_STRUCT& stOutOffset); // 根据给定的模板ID、拍照延迟时间,搜索单模板,返回相对于十字光标中心的X、Y(微米值)以及角度(度)偏差 // 参数 iTemplateId:要搜索的模板ID // 参数 nDelayTakePicture:拍照前的延迟时间(单位毫秒) // 参数 stOutOffset:用于存储搜索结果偏差信息的结构体引用,包括X、Y和角度偏差 // 返回值:操作结果,例如成功返回 OK,失败返回 FAIL 等 LONG SearchTemplate(UINT iTemplateId, UINT nDelayTakePicture, FIND_SINGLE_TEMP_STRUCT& stOutOffset); // 创建模板,传入模块类型、相机ID、识别方法、抓取位置等参数,可选结果选择参数 // 参数 iModuleType:模板所属的模块类型 // 参数 iCameraId:使用的相机ID // 参数 iPrMethod:模板识别方法ID // 参数 stGrabPos:包含抓取位置信息的结构体,可能包括X、Y、Z坐标和旋转角度等 // 参数 eResultSelect:结果选择枚举值,默认值为 SEARCH_OUT::OUT_All,用于指定搜索结果的类型 // 返回值:操作结果,例如成功返回 OK,失败返回 FAIL 等 LONG CreateTemplate(UINT iCameraId, UINT iPrMethod, X_Y_Z_R_STRUCT stGrabPos, SEARCH_OUT eResultSelect,UINT &iTemplateId); }; }