31 : m_d(new
Private(props, worker))
42 const qreal diameter = props.
size();
46 outline.addEllipse(-0.5 * diameter, -0.5 * diameter,
49 switch (props.
mode()) {
60 if (diameter < 15.0) {
61 const qreal scale = diameter / 15.0;
62 S = QTransform::fromScale(scale, scale);
65 R.rotateRadians(-reverseCoeff * 0.5 *
M_PI);
66 QTransform T = QTransform::fromTranslate(0.5 * diameter, 0.0);
68 p = (
S *
R * T).map(
p);
78 const qreal offset = qMax(0.8 * diameter, 15.0);
81 R.rotateRadians(normalAngle);
82 QTransform T = QTransform::fromTranslate(offset, 0.0);
92 qFatal(
"Not supported mode");
132 const qreal spacing =
m_d->props.spacing() * size;
134 const qreal reverseCoeff =
137 m_d->props.reverseDirection() ? -1.0 : 1.0;
138 const qreal amount =
m_d->props.amountHasPressure() ?
139 pi.
pressure() * reverseCoeff *
m_d->props.amount():
140 reverseCoeff *
m_d->props.amount();
142 const bool useWashMode =
m_d->props.useWashMode();
143 const qreal flow =
m_d->props.flow();
145 switch (
m_d->props.mode()) {
147 const qreal offsetLength = size * amount;
148 m_d->worker->translatePoints(pi.
pos(),
150 size, useWashMode, flow);
155 m_d->worker->scalePoints(pi.
pos(),
157 size, useWashMode, flow);
160 m_d->worker->rotatePoints(pi.
pos(),
162 size, useWashMode, flow);
165 const qreal offsetLength = size * amount;
166 m_d->worker->translatePoints(pi.
pos(),
168 size, useWashMode, flow);
172 m_d->worker->undoPoints(pi.
pos(),
178 qFatal(
"Not supported mode");
198 static const qreal sizeToSigmaCoeff = 1.0 / 3.0;
199 return sizeToSigmaCoeff *
200 (
m_d->props.sizeHasPressure() ?
Eigen::Matrix< double, 4, 2 > S
Eigen::Matrix< double, 4, 2 > R
const QScopedPointer< Private > m_d
qreal computeSize(const KisPaintInformation &pi) const
KisSpacingInformation updateSpacingImpl(const KisPaintInformation &pi) const
KisSpacingInformation paintAt(const KisPaintInformation &pi)
static QPainterPath brushOutline(const KisLiquifyProperties &props, const KisPaintInformation &info)
void updateSpacing(const KisPaintInformation &info, KisDistanceInformation ¤tDistance) const
KisLiquifyPaintop(const KisLiquifyProperties &props, KisLiquifyTransformWorker *worker)
void updateTiming(const KisPaintInformation &info, KisDistanceInformation ¤tDistance) const
KisTimingInformation updateTimingImpl(const KisPaintInformation &pi) const
bool reverseDirection() const
QPainterPath smallArrow()
T rightUnitNormal(const T &a)
KisLiquifyProperties props
Private(const KisLiquifyProperties &_props, KisLiquifyTransformWorker *_worker)
KisLiquifyTransformWorker * worker