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.

78 lines
2.8 KiB
C

#pragma once
#include <QObject>
#include <QGraphicsLineItem>
#include <QPainter>
#include <QPen>
#include <QGraphicsSceneMouseEvent>
#include <QDebug>
#include <cmath>
#include <memory>
#include <QPointF>
#include "global.h"
#include "GlobalDefine.h"
class MyQGraphicsLineItem : public QObject, public QGraphicsLineItem
{
Q_OBJECT
public:
MyQGraphicsLineItem(QObject *parent);
MyQGraphicsLineItem(qreal x1, qreal y1, qreal x2, qreal y2, QGraphicsItem *parent = nullptr)
: QGraphicsLineItem(x1, y1, x2, y2, parent) {}
~MyQGraphicsLineItem();
bool CoordAxis() const { return m_isCoordAxis; }
void CoordAxis(bool val) { m_isCoordAxis = val; }
int Id() const { return m_id; }
void Id(int val) { m_id = val; }
QPointF FirstPoint() const { return m_firstPoint; }
void FirstPoint(QPointF val) { m_firstPoint = val; }
QPointF SecondPoint() const { return m_secondPoint; }
void SecondPoint(QPointF val) { m_secondPoint = val; }
double ActualP1DieCoordX() const { return m_actualP1DieCoordX; }
void ActualP1DieCoordX(double val) { m_actualP1DieCoordX = val; }
double ActualP1DieCoordY() const { return m_actualP1DieCoordY; }
void ActualP1DieCoordY(double val) { m_actualP1DieCoordY = val; }
double ActualP2DieCoordX() const { return m_actualP2DieCoordX; }
void ActualP2DieCoordX(double val) { m_actualP2DieCoordX = val; }
double ActualP2DieCoordY() const { return m_actualP2DieCoordY; }
void ActualP2DieCoordY(double val) { m_actualP2DieCoordY = val; }
private:
bool JudgeIsFeatruePoint(QPointF& mousePos);
double GetStartAngle();
public:
void SetLineItemAttr(QPointF& firstPoint, QPointF& secondPoint);
void SetActualCoordAndUpdate(double actualP1DieCoordX,double actualP1DieCoordY,
double actualP2DieCoordX,double actualP2DieCoordY);
protected:
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
void mousePressEvent(QGraphicsSceneMouseEvent *event) override;
void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override;
void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override;
signals:
void signal_select(int id);
private:
bool m_isPressDown; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD>
QPointF m_mousePressDownPos; //<2F><><EFBFBD><EFBFBD><EAB0B4>ʱ<EFBFBD>ڳ<EFBFBD><DAB3><EFBFBD><EFBFBD>е<EFBFBD>λ<EFBFBD><CEBB>
double m_rotateAngle = 0.0; //<2F><><EFBFBD><EFBFBD><EAB0B4>ʱ<EFBFBD><CAB1>ת<EFBFBD>ĽǶ<C4BD>
bool m_isCoordAxis = false; //<2F>Dz<EFBFBD><C7B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
QLineF m_levelLine; //ˮƽ<CBAE>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD>ڼ<EFBFBD><DABC><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD>н<EFBFBD>
QPointF m_firstPoint; //<2F>Լ<EFBFBD><D4BC>߶ε<DFB6>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
QPointF m_secondPoint; //<2F>Լ<EFBFBD><D4BC>߶εڶ<CEB5><DAB6><EFBFBD><EFBFBD><EFBFBD>
bool m_isInFraturePoint = false; //<2F>Ƿ<EFBFBD><C7B7>ڻ<EFBFBD><DABB>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD><EFBFBD>ڰ<EFBFBD>ס<EFBFBD><D7A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת
bool m_isNeedSelect = false; //<2F>Ƿ<EFBFBD><C7B7>ڳ<EFBFBD><DAB3><EFBFBD><EFBFBD>б<EFBFBD>ѡ<EFBFBD><D1A1>
double m_actualP1DieCoordX = 0.0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD>
double m_actualP1DieCoordY = 0.0;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD>
double m_actualP2DieCoordX = 0.0;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD>
double m_actualP2DieCoordY = 0.0;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD>
int m_id; //Ψһ<CEA8><D2BB>ʶ
};