You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
113 lines
2.5 KiB
C++
113 lines
2.5 KiB
C++
#ifndef _H_ROIIMGVIEWER_H_
|
|
#define _H_ROIIMGVIEWER_H_
|
|
|
|
#include "lpImgViewer.h"
|
|
#include <QMouseEvent>
|
|
|
|
typedef struct tagLP_ROI_NODE {
|
|
QString id;
|
|
qreal fScale;
|
|
QString szChannel;
|
|
QGraphicsRectItem* pItem;
|
|
bool isTemplate;
|
|
}LP_ROI_NODE, *P_LP_ROI_NODE;
|
|
Q_DECLARE_METATYPE(LP_ROI_NODE*)
|
|
|
|
|
|
typedef QMap<int, QList<QGraphicsItem*> > RoiItemMap;
|
|
|
|
class RoiImgViewer : public lpImgViewer
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
enum MouseCaptureStatus
|
|
{
|
|
MouseCaptureLeft,
|
|
MouseCaptureRight,
|
|
MouseCaptureTop,
|
|
MouseCaptureBottom,
|
|
MouseCaptureNone
|
|
};
|
|
|
|
enum DrawStatus
|
|
{
|
|
DrawLine,
|
|
DrawRect,
|
|
DrawNone
|
|
};
|
|
|
|
public:
|
|
RoiImgViewer(QWidget* parent = 0);
|
|
~RoiImgViewer() {};
|
|
|
|
virtual void wheelEvent(QWheelEvent *evt);
|
|
|
|
QGraphicsPixmapItem* setImg(QImage& img);
|
|
|
|
QGraphicsItem* firstSelectedItem();
|
|
|
|
void setDrawStatus(DrawStatus s);
|
|
|
|
void clearRois(int type = -1);
|
|
void clearExistRois();
|
|
|
|
float getMouseCaptureDistance() const { return mMouseCaptureDistance; }
|
|
void setMouseCaptureDistance(float val) { mMouseCaptureDistance = val; }
|
|
|
|
void addRoiRect(QRectF rect, qreal scale, QString channelName, QString id, bool isTemplate = true, QColor nonTmplColor = Qt::yellow);
|
|
void addRoiRect(QRectF rect, qreal scale, QString id);
|
|
|
|
void addRoiLine(QLineF line, QString id);
|
|
|
|
QList<LP_ROI_NODE> getRectROIs() const { return mRoiNodeList; }
|
|
LP_ROI_NODE* lastRectRoi();
|
|
|
|
protected:
|
|
void mousePressEvent(QMouseEvent *event);
|
|
void mouseMoveEvent(QMouseEvent *evt);
|
|
void mouseReleaseEvent(QMouseEvent *event);
|
|
void keyPressEvent(QKeyEvent *event);
|
|
|
|
MouseCaptureStatus decideMouseCaptureStatus(const QRectF r,
|
|
QPointF p, float capDis = 10);
|
|
MouseCaptureStatus decideMouseCaptureStatus(const QLineF l,
|
|
QPointF p, float capDis = 10);
|
|
|
|
protected slots:
|
|
void updateSelectedRoiNode();
|
|
|
|
protected:
|
|
float mMouseCaptureDistance;
|
|
|
|
MouseCaptureStatus mMouseCaptureStatus;
|
|
|
|
DrawStatus mDrawStatus;
|
|
QLineF mDrawingLine;
|
|
QRectF mDrawingRect;
|
|
QGraphicsLineItem* mpDrawingLineItem;
|
|
QGraphicsRectItem* mpDrawingRectItem;
|
|
void updateDrawingItem();
|
|
void createDrawingItem();
|
|
void acceptDrawingItem();
|
|
void rejectDrawingItem();
|
|
void resetAllDrawingItems();
|
|
|
|
void acceptRoiItem(QGraphicsItem* pItem);
|
|
LP_ROI_NODE* findRoiNode(QGraphicsItem* pItem);
|
|
RoiItemMap mRoiItemMap;
|
|
QList<LP_ROI_NODE> mRoiNodeList;
|
|
LP_ROI_NODE* mpSelectedRoiNode;
|
|
|
|
signals:
|
|
void roiChanged(QGraphicsItem* pItem);
|
|
void roiAdded(QGraphicsItem* pItem);
|
|
void roiSelectionChanged(LP_ROI_NODE* pSelectedRoiNode);
|
|
|
|
private:
|
|
|
|
};
|
|
|
|
#endif
|
|
|