logplus/logPlus/TransparentDraggableCrackObject.h
2026-04-17 10:37:25 +08:00

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