#pragma once #pragma execution_character_set("utf-8") #include #include "Toolnterface.h" #include #include #include using namespace std; class Toolnterface; //头文件相互调用前置声明 //图像 typedef struct VisionToolImage { QString Name; //名称 cv::Mat InputImage; //输入图像 cv::Mat OutputImage; //输出图像 cv::Mat OutputRoiImage; //输出ROI图像 QImage OutputViewImage; //输出显示图像 }VisionToolIMAGE; //工具 typedef struct VisionToolInfo { QString Name; //名称 int Number; //工具号 }VisionToolINFO; //屏幕号 typedef struct VisionToolScreen { int ScreenNumber; //屏幕号 int ImageIndex; //图像索引 }VisionToolSCREEN; //图像处理 typedef struct VisionToolImageProcess { cv::Rect CvRect; //矩形 cv::RotatedRect CvRotatedRect; //旋转矩形 QVector GetViewMsg = QVector(100); //信息 bool ViewMsgState; }VisionToolIMAGEPROCESS; //检测识别 typedef struct VisionToolDetect { vector Code = vector(100); //条形码/二维码 int Quantity; //斑点个数 QString Character; //字符 QString Category; //类别 double Score; //相似度 double Brightness; //亮度 double Clarity; //清晰度 vector> Contours = vector>(10000); //轮廓 vector Areas = vector(10000); //面积 vector CenterPoints = vector(10000); //重心 }VisionToolDETECT; //标定工具 typedef struct VisionToolCalib { cv::Mat CameraMatrix; //内参K cv::Mat DistCoeffs; //畸变系数 vector EstimateAffine = vector(10); //N点标定参数 double PixelEquivalentX; //像素当量X double PixelEquivalentY; //像素当量Y cv::Point2f RotateCenter; //旋转中心 cv::Point2f DatumPoint1; //基准点1 cv::Point2f DatumPoint2; //基准点2 double DatumAngle; //基准角度 }VisionToolCALIB; //对位工具 typedef struct VisionTTPosition { cv::Point2f DatumCenter; //匹配基准中心 vector Center; //匹配中心坐标 vector Angle; //匹配角度 vector OutScore; //匹配分数 vector Scale; //缩放因子 cv::RotatedRect CvRotatedRect; //旋转矩形 double MovingDistanceX; //移动量X double MovingDistanceY; //移动量Y cv::Point2f WorldCoordinatePoint; //世界坐标点 }VisionTTPOSITION; //几何工具/测量 typedef struct VisionToolGeometry { cv::Point2f Center; //中心坐标/圆心坐标 double Angle; //角度/夹角 double Distance; //距离/边缘宽度 double k; //斜率 double b; //截距 double Radius; //半径 double Length1; //长轴长度 double Length2; //短轴长度 cv::Point2f Pedal; //垂足坐标 cv::Point2f Intersection; //交点坐标 vector Intersections = vector(10); //交点坐标 vector BorderPoints = vector(1000000); //点集 }VisionToolGEOMETRY; //三维检测 typedef struct VisionToolThreeD { vector Flatness = vector(10); //平面参数 double Distance; //点到平面距离 }VisionToolTHREED; //逻辑工具 typedef struct VisionToolLogic { QString GotoToolName; //跳转工具名 }VisionToolLOGIC; //通讯工具 typedef struct VisionToolCommunication { QVector InPutIoX = QVector(8); //输入点 QString InputData; //接收数据 QString OutputData; //发送数据 QVector RegisterReadData; //寄存器读取数据 QVector RegisterWriteData; //寄存器写入数据 }VisionToolCOMMUNICATION; //系统工具 typedef struct VisionToolSystem { }VisionToolSYSTEM; //结果 typedef struct VisionToolResult { QString Name; //名称 bool State; //状态 int Regex; //表达式 }VisionToolRESULT; //处理模块数据 typedef struct VisionTool { QString PublicToolName; Toolnterface* PublicToolDlg; VisionToolIMAGE PublicImage; VisionToolINFO PublicInfo; VisionToolSCREEN PublicScreen; VisionToolIMAGEPROCESS PublicImageProcess; VisionToolDETECT PublicDetect; VisionToolCALIB PublicCalib; VisionTTPOSITION PublicTPosition; VisionToolGEOMETRY PublicGeometry; VisionToolTHREED PublicThreeD; VisionToolLOGIC PublicLogic; VisionToolCOMMUNICATION PublicCommunication; VisionToolSYSTEM PublicSystem; VisionToolRESULT PublicResult; }VisionTOOL; //工具类 class QToolBase : public QObject { Q_OBJECT public: QToolBase(); ~QToolBase(); vector m_Tools; //处理模块数据链 QVector m_FlowSortList; QToolBase* operator= (const QToolBase*& t) { this->m_Tools.clear(); for (int i = 0; i < t->m_Tools.size(); i++) { this->m_Tools.push_back(t->m_Tools[i]); } return this; } signals: void sig_Info(const QString strMsg); void sig_Warn(const QString strMsg); void sig_Error(const QString strMsg); QString sig_SetGlobalValue(const QString strVar, const QString value, const int flowIndex); public: //添加/删除/获取/处理模块数据 bool AddTool(const QString toolname); bool AddToolInfo(const QString toolname, const VisionToolINFO toolinfo); bool AddToolDlg(const QString toolname, Toolnterface* toolDlg); bool GetToolDlg(const QString toolname); bool RunToolFlow_B1(const QString toolname); bool RunToolFlow_B2(const QString toolname); bool RunToolFlow_B3(const QString toolname); bool RunToolFlow_B4(const QString toolname); bool RunToolFlow_B5(const QString toolname); bool RunToolFlow_B6(const QString toolname); bool RunToolFlow_B7(const QString toolname); bool RunToolFlow_B8(const QString toolname); bool RunToolFlow_B9(const QString toolname); bool RunToolFlow_B10(const QString toolname); bool RunToolFlow_B11(const QString toolname); bool RunToolFlow_B12(const QString toolname); bool RunToolFlow_B13(const QString toolname); bool RunToolFlow_B14(const QString toolname); bool RunToolFlow_B15(const QString toolname); bool RunToolFlow_B16(const QString toolname); bool RunToolFlow_B17(const QString toolname); bool RunToolFlow_B18(const QString toolname); bool RunToolFlow_B19(const QString toolname); bool RunToolFlow_B20(const QString toolname); bool RunToolLink(const QString toolname, const int int_link, const QString str_link); bool RunAllToolLink(); bool RunGotoToolLink(); bool RunCommunicationLink(const QString toolname); bool RunScriptEditToolLink(); };