logplus/logPlus/TransparentDraggableCrackObject.h

92 lines
2.7 KiB
C
Raw Normal View History

2026-04-17 10:37:25 +08:00
#ifndef TRANSPARENTDRAGGABLECRACKOBJECT_H
2026-04-14 11:03:11 +08:00
#define TRANSPARENTDRAGGABLECRACKOBJECT_H
#include <QObject>
2026-04-16 10:22:24 +08:00
#include <QPointer>
#include <QVector>
#include "qcustomplot.h"
2026-04-14 11:03:11 +08:00
2026-04-17 10:37:25 +08:00
#pragma execution_character_set("utf-8")
2026-04-14 11:03:11 +08:00
class TransparentDraggableCrackObject : public QObject
{
Q_OBJECT
public:
2026-04-16 10:22:24 +08:00
enum CurveType { TYPE_A, TYPE_B, TYPE_C };
explicit TransparentDraggableCrackObject(QCustomPlot *parentPlot,
2026-04-17 10:37:25 +08:00
const QString &strUuid, double depth, QString type, QString showNames);
2026-04-14 11:03:11 +08:00
~TransparentDraggableCrackObject();
2026-04-17 10:37:25 +08:00
bool m_isShow = false;
QString m_typeName;
void isShow(bool is);
2026-04-14 11:03:11 +08:00
protected:
bool eventFilter(QObject *obj, QEvent *event) override;
private:
2026-04-16 10:22:24 +08:00
QCustomPlot *mPlot;
CurveType m_type;
QString m_uuid;
2026-04-14 11:03:11 +08:00
double m_depth;
double m_endX;
2026-04-17 10:37:25 +08:00
QColor m_lineColor;
2026-04-14 11:03:11 +08:00
2026-04-16 10:22:24 +08:00
static QPointer<TransparentDraggableCrackObject> s_activeObject;
2026-04-17 10:37:25 +08:00
QCPItemText *m_itemText;
2026-04-16 10:22:24 +08:00
// 模式A
QCPItemCurve *mCurve;
2026-04-14 11:03:11 +08:00
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;
2026-04-16 10:22:24 +08:00
double m_offsetXA, m_offsetYA;
QCPItemTracer *m_tracer1, *m_tracer2;
enum DragStateA { IdleA, DraggingPoint1, DraggingPoint2, DraggingCurveA };
DragStateA m_dragStateA;
QPointF m_lastDragPixelA;
2026-04-14 11:03:11 +08:00
2026-04-16 10:22:24 +08:00
// 模式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;
2026-04-14 11:03:11 +08:00
2026-04-16 10:22:24 +08:00
// 模式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; // 拖拽起始像素
2026-04-14 11:03:11 +08:00
void updateCurveFromTargets();
void updateCurvePosition();
void updateTracers();
void setTracerHighlight(QCPItemTracer *tracer, bool highlight);
2026-04-16 10:22:24 +08:00
void updateLinesPosition();
void clearLines();
void updateLineEndpoints(LineItem &item);
void updatePolylineC(bool closed);
void clearPolylineC();
void deactivate();
2026-04-14 11:03:11 +08:00
};
#endif