Quilting-lw/sharedviews/view/mygraphicsscene.h

127 lines
3.6 KiB
C
Raw Normal View History

2026-01-23 08:37:18 +00:00
#ifndef MYGRAPHICSSCENE_H
#define MYGRAPHICSSCENE_H
#include <QObject>
#include <QGraphicsScene>
#include <QVector>
#include <QPainter>
#include <QGraphicsItem>
#include <QGraphicsScene>
#include <QGraphicsSceneMouseEvent>
#include <QPixmap>
#include <QPicture>
#include <QList>
#include <QtGui>
#include <QList>
#include "mygraphicsgriditem.h"
#include "machine/comm/datadef.h"
#include "datafile/dataoperat.h"
#include "main.h"
#define DRAWMARGINS 200.0 //item在场景中绘制时的边距(留边)
#define TYPE_DRAG -1 //拖拽
#define TYPE_LINE 0 //直线
#define TYPE_ARC 1 //三点圆
struct GLineItem
{
u16 order;//顺序
WORD type;
QGraphicsPolygonItem* item;
QList<QPointF> points;
};
struct GPathItem
{
u16 order;//顺序
WORD type;
QGraphicsPathItem* item;
QList<QPointF> points;
};
struct SelectPoint
{
int type;//选中点类型 0起点 1终点 2:中间点
int idx;//图元索引
};
///
/// \brief The MyGraphicsScene class
///场景层 记录实际数据
///
class MyGraphicsScene: public QGraphicsScene
{
Q_OBJECT
public:
MyGraphicsScene();
~MyGraphicsScene();
protected:
void mousePressEvent(QGraphicsSceneMouseEvent *event);
void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
// void drawBackground(QPainter *painter, const QRectF &rect);
private:
QByteArray m_dispDat;
MyGraphicsGridItem *m_grid;
qreal m_radius = 0.5;
QBrush m_selectedBrush;
QBrush m_defaultBrush;
QList<QGraphicsEllipseItem *> m_ellipseItemList; //顶点圆圈的元素
QList<GLineItem> m_lineItemList; //直线元素
QList<GPathItem> m_pathItemList; //路径元素
QPointF m_dragOffset; //拖拽点的坐标
QGraphicsEllipseItem *m_draggingPoint; //拖拽点的元素
int m_ArcCount = 0; //圆弧记录坐标个数 个数在0-2之间
int m_shapeType = TYPE_DRAG;
bool m_isAdsorption = true;
int m_maxSegmentLength = 20;
int m_addOrder;//绘制图元时的绘制顺序
private:
// 计算两点之间的中点
QPointF midpoint(const QPointF &p1, const QPointF &p2);
// 计算两点之间连线的斜率
double slope(const QPointF &p1, const QPointF &p2);
// 计算圆心
bool findCircleCenter(const QPointF &p1, const QPointF &p2, const QPointF &p3, QPointF &center, double &radius);
// 计算半径
double findRadius(const QPointF &center, const QPointF &point);
// 计算两点之间的距离平方
double distanceSquared(QPointF p1, QPointF p2);
public:
QList<QGraphicsEllipseItem *> getPointList();
QList<GLineItem> getLineItemList();
QList<GPathItem> getPathItemList();
void addItemToScene(QByteArray ary);
void addItemListToScene(QList<drawItem> list);
void addGrid(double gridSpacing,QRectF rect);
void cleanScene();
bool getCurSelectState();
bool initAPoint();
void forwardAndBackward(int idx);
void insertPoint(int dir);
void removeSelectPoint();
void setShapeType(int type);
void setAdsorption(bool adsorption);
void setLastPointSelected();
void setMaxSegmentLength(int value);
int getMaxSegmentLength();
int getArcItem(QList<QPointF> points, QGraphicsPathItem* item, double threex[], double threey[]);
int getGLineItem(QGraphicsEllipseItem* p,QPointF p1);
int getGPathItem(QGraphicsEllipseItem*p,QPointF p1);
void setXYMove(double valX,double valY);
void revokeLastItem();//撤销最后一个图元
signals:
void siCurrentIndex(int idx);
public slots:
};
#endif // MYGRAPHICSSCENE_H