92 lines
2.7 KiB
C++
92 lines
2.7 KiB
C++
#ifndef TRANSPARENTDRAGGABLECRACKOBJECT_H
|
|
#define TRANSPARENTDRAGGABLECRACKOBJECT_H
|
|
|
|
#include <QObject>
|
|
#include <QPointer>
|
|
#include <QVector>
|
|
#include "qcustomplot.h"
|
|
|
|
#pragma execution_character_set("utf-8")
|
|
|
|
class TransparentDraggableCrackObject : public QObject
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
enum CurveType { TYPE_A, TYPE_B, TYPE_C };
|
|
|
|
explicit TransparentDraggableCrackObject(QCustomPlot *parentPlot,
|
|
const QString &strUuid, double depth, QString type, QString showNames);
|
|
~TransparentDraggableCrackObject();
|
|
|
|
bool m_isShow = false;
|
|
QString m_typeName;
|
|
void isShow(bool is);
|
|
protected:
|
|
bool eventFilter(QObject *obj, QEvent *event) override;
|
|
|
|
private:
|
|
QCustomPlot *mPlot;
|
|
CurveType m_type;
|
|
QString m_uuid;
|
|
double m_depth;
|
|
double m_endX;
|
|
QColor m_lineColor;
|
|
|
|
static QPointer<TransparentDraggableCrackObject> s_activeObject;
|
|
|
|
QCPItemText *m_itemText;
|
|
// 模式A
|
|
QCPItemCurve *mCurve;
|
|
double m_orig_x1, m_orig_x2;
|
|
double m_orig_y1, m_orig_y2;
|
|
double m_orig_startX, m_orig_endX;
|
|
double m_orig_startDirX, m_orig_startDirY;
|
|
double m_orig_endDirX, m_orig_endDirY;
|
|
double m_offsetXA, m_offsetYA;
|
|
QCPItemTracer *m_tracer1, *m_tracer2;
|
|
enum DragStateA { IdleA, DraggingPoint1, DraggingPoint2, DraggingCurveA };
|
|
DragStateA m_dragStateA;
|
|
QPointF m_lastDragPixelA;
|
|
|
|
// 模式B
|
|
struct LineItem {
|
|
QPointF startOrig;
|
|
QPointF endOrig;
|
|
QCPItemLine *line;
|
|
QCPItemTracer *startTracer;
|
|
QCPItemTracer *endTracer;
|
|
};
|
|
QVector<LineItem> m_lines;
|
|
bool m_isAddingLine;
|
|
QPointF m_tempPoint;
|
|
double m_offsetXB, m_offsetYB;
|
|
enum DragStateB { IdleB, DraggingLineOverall, DraggingStartPoint, DraggingEndPoint };
|
|
DragStateB m_dragStateB;
|
|
QPointF m_bDragStart;
|
|
int m_draggedLineIndex;
|
|
|
|
// 模式C
|
|
QCPCurve *m_curveC;
|
|
QVector<QPointF> m_pointsC; // 原始点(无偏移)
|
|
QVector<QCPItemText*> m_labelsC; // 序号标签
|
|
double m_offsetXC, m_offsetYC; // 整体偏移
|
|
bool m_cFinished; // 是否已完成选点
|
|
bool m_cDragging; // 是否正在拖拽整体
|
|
bool m_draggingPoint; // 是否正在拖拽点
|
|
int m_draggedPointIndex; // 拖拽的点的索引
|
|
QPointF m_cDragStart; // 拖拽起始像素
|
|
|
|
void updateCurveFromTargets();
|
|
void updateCurvePosition();
|
|
void updateTracers();
|
|
void setTracerHighlight(QCPItemTracer *tracer, bool highlight);
|
|
void updateLinesPosition();
|
|
void clearLines();
|
|
void updateLineEndpoints(LineItem &item);
|
|
void updatePolylineC(bool closed);
|
|
void clearPolylineC();
|
|
void deactivate();
|
|
};
|
|
|
|
#endif
|