You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123 lines
3.3 KiB

#ifndef SIGNPENSTRUCTS_H
#define SIGNPENSTRUCTS_H
#include <QObject>
#include <QPointF>
#include <QPainterPath>
#include "SWPosPointcut.h"
typedef QPointF CGPointMake ;
typedef QPointF CGPoint;
struct SWRealPoint
{
CGPoint realPoint; // 原始点
int pointType;//0 moved 1 press 2 releas
double force;
double maxForce;
qint64 timestamp;//当前点的时间戳
float radius;
float finalRadius;
CGPoint pLeftTopPoint;
CGPoint pLeftBottomPoint;
CGPoint PLeftIntersectPoint;
CGPoint pRightTopPoint;
CGPoint pRightBottomPoint;
CGPoint PRightIntersectPoint;
// SWCirclePoint *circlePoints;
QList<SWCirclePoint> circlePoints;
int circleCount;
SWRealPoint()
{
timestamp = -1;
circleCount = 0;
pointType = 2;
force = 10;
maxForce = 10;
radius = 3;
}
};
enum ElementType {
StartFigure,
MoveToElement,
LineToElement,
CurveToElement,
QuadToElement
};
class Element {
public:
Element(ElementType type){
this->type = type;
point = QPointF(0,0);
control = QPointF(0,0);//CurveToElement时的控制点 point为结束点
control2 = QPointF(0,0);}
~Element(){}
ElementType GetElementType(){return type;}
void AddEndPoint(QPointF point){
this->point = point;
x = point.x();
y = point.y();
}
//二阶贝塞尔控制点三阶贝塞尔控制点1, 非CurveToElement和QuadToElement时此点为空
void AddControlPoint(QPointF point){control = point;}
//三阶贝塞尔控制点2,非QuadToElement时此点为空
void AddControlPoint2(QPointF point){control2 = point;}
QPointF GetEndPoint(){return point;}
QPointF GetControlPoint(){return (type == CurveToElement || type == QuadToElement) ? control : QPointF(0,0);}
QPointF GetControlPoint2(){return (type == CurveToElement) ? control2 : QPointF(0,0);}
bool IsMoveTo() const { return type == MoveToElement; }
bool IsLineTo() const { return type == LineToElement; }
bool IsCurveTo() const { return type == CurveToElement; }
bool IsQuadTo() const { return type == QuadToElement; }
operator QPointF () const { return point; }
bool operator==(const Element &e) const { return qFuzzyCompare(x, e.x)
&& qFuzzyCompare(y, e.y) && type == e.type; }
inline bool operator!=(const Element &e) const { return !operator==(e); }
ElementType type;
QPointF point;
QPointF control;//CurveToElement时的控制点 point为结束点
QPointF control2;
private:
qreal x;
qreal y;
// ElementType type;
// QPointF point;
// QPointF control;//CurveToElement时的控制点 point为结束点
// QPointF control2;
};
// 一笔的Path数据抬笔前
struct SWAnnotPath
{
QList<SWRealPoint> points;
QList<SWRealPoint> realPoints;
QList<QPainterPath> bezierPaths; //绘制的Path
QList<QList<QPainterPath> > currentPathsList;
QList<Element> bezierEles; //绘制
bool isShake; //是否防抖
int pageIndex;
bool isEnd;
bool isPainted;//是否已经缓冲绘制
QRect paintRect;//手写时的区域
SWAnnotPath()
{
isShake = false;
isEnd = false;
isPainted = false;
}
};
#endif // SIGNPENSTRUCTS_H