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

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#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