Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_distance_information.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2010 Cyrille Berger <cberger@cberger.net>
3 * SPDX-FileCopyrightText: 2013 Dmitry Kazakov <dimula73@gmail.com>
4 *
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 */
7
8#ifndef _KIS_DISTANCE_INFORMATION_H_
9#define _KIS_DISTANCE_INFORMATION_H_
10
11#include <QPointF>
12#include <QVector2D>
13#include <QDomDocument>
14#include <QDomElement>
15#include "kritaimage_export.h"
16#include <boost/optional.hpp>
17#include <boost/operators.hpp>
18
23
29class KRITAIMAGE_EXPORT KisDistanceInitInfo : boost::equality_comparable<KisDistanceInitInfo> {
30
31public:
32
37 explicit KisDistanceInitInfo();
38
43 explicit KisDistanceInitInfo(qreal spacingUpdateInterval, qreal timingUpdateInterval, int currentDabSeqNo);
44
49 explicit KisDistanceInitInfo(const QPointF &lastPosition, qreal lastAngle, int currentDabSeqNo);
50
55 explicit KisDistanceInitInfo(const QPointF &lastPosition, qreal lastAngle,
56 qreal spacingUpdateInterval, qreal timingUpdateInterval, int currentDabSeqNo);
57
59
61
62 bool operator==(const KisDistanceInitInfo &other) const;
63
64 KisDistanceInitInfo &operator=(const KisDistanceInitInfo &rhs);
65
69 KisDistanceInformation makeDistInfo();
70
71 void toXML(QDomDocument &doc, QDomElement &elt) const;
72
73 static KisDistanceInitInfo fromXML(const QDomElement &elt);
74
75private:
76 struct Private;
77 Private * const m_d;
78};
79
84class KRITAIMAGE_EXPORT KisDistanceInformation {
85public:
87 KisDistanceInformation(qreal spacingUpdateInterval, qreal timingUpdateInterval, int currentDabSeqNo = 0);
88 KisDistanceInformation(const QPointF &lastPosition, qreal lastAngle);
97 KisDistanceInformation(const QPointF &lastPosition, qreal lastAngle,
98 qreal spacingUpdateInterval, qreal timingUpdateInterval, int currentDabSeqNo);
100 KisDistanceInformation(const KisDistanceInformation &rhs, int levelOfDetail);
101 KisDistanceInformation& operator=(const KisDistanceInformation &rhs);
102
104
105 const KisSpacingInformation& currentSpacing() const;
106 void updateSpacing(const KisSpacingInformation &spacing);
111 bool needsSpacingUpdate() const;
112
113 const KisTimingInformation &currentTiming() const;
114 void updateTiming(const KisTimingInformation &timing);
119 bool needsTimingUpdate() const;
120
121 bool hasLastDabInformation() const;
122 QPointF lastPosition() const;
123 qreal lastDrawingAngle() const;
124
125 bool hasLastPaintInformation() const;
127
128 int currentDabSeqNo() const;
129
130 qreal maxPressure() const;
131
138 void registerPaintedDab(const KisPaintInformation &info,
139 const KisSpacingInformation &spacing,
140 const KisTimingInformation &timing);
141
142 qreal getNextPointPosition(const QPointF &start,
143 const QPointF &end,
144 qreal startTime,
145 qreal endTime);
146
147 qreal getSpacingInterval() const;
148 qreal getTimingUpdateInterval() const;
149
154 bool isStarted() const;
155
156 boost::optional<qreal> lockedDrawingAngleOptional() const;
157
162 void lockCurrentDrawingAngle(const KisPaintInformation &info) const;
163
164 qreal scalarDistanceApprox() const;
165
166 void overrideLastValues(const QPointF &lastPosition, qreal lastAngle);
167
168private:
169 qreal getNextPointPositionIsotropic(const QPointF &start,
170 const QPointF &end);
171 qreal getNextPointPositionAnisotropic(const QPointF &start,
172 const QPointF &end);
173 qreal getNextPointPositionTimed(qreal startTime,
174 qreal endTime);
175 void resetAccumulators();
176
177private:
178 struct Private;
179 Private * const m_d;
180};
181
182#endif
bool operator==(const KisRegion &lhs, const KisRegion &rhs)
int currentDabSeqNo() const
boost::optional< qreal > lockedDrawingAngleOptional() const
const KisPaintInformation & lastPaintInformation() const
QPointF lastPosition() const