Krita Source Code Documentation
Loading...
Searching...
No Matches
KisLiquifyTransformWorker Class Reference

#include <kis_liquify_transform_worker.h>

+ Inheritance diagram for KisLiquifyTransformWorker:

Public Member Functions

QRectF accumulatedStrokesBounds () const
 
QRect approxChangeRect (const QRect &rc)
 
QRect approxNeedRect (const QRect &rc, const QRect &fullBounds)
 
QSize gridSize () const
 
bool isIdentity () const
 
 KisLiquifyTransformWorker (const KisLiquifyTransformWorker &rhs)
 
 KisLiquifyTransformWorker (const QRect &srcBounds, KoUpdater *progress, int pixelPrecision=8)
 
bool operator== (const KisLiquifyTransformWorker &other) const
 
const QVector< QPointF > & originalPoints () const
 
int pointToIndex (const QPoint &cellPt)
 
void preparePoints ()
 
 Private (const QRect &_srcBounds, KoUpdater *_progress, int _pixelPrecision)
 
template<class ProcessOp >
void processTransformedPixels (ProcessOp op, const QPointF &base, qreal sigma, bool useWashMode, qreal flow)
 
template<class ProcessOp >
void processTransformedPixelsBuildUp (ProcessOp op, const QPointF &base, qreal sigma)
 
template<class ProcessOp >
void processTransformedPixelsWash (ProcessOp op, const QPointF &base, qreal sigma, qreal flow)
 
void rotatePoints (const QPointF &base, qreal angle, qreal sigma, bool useWashMode, qreal flow)
 
void run (KisPaintDeviceSP srcDevice, KisPaintDeviceSP dstDevice)
 
QImage runOnQImage (const QImage &srcImage, const QPointF &srcImageOffset, const QTransform &imageToThumbTransform, QPointF *newOffset)
 
void scalePoints (const QPointF &base, qreal scale, qreal sigma, bool useWashMode, qreal flow)
 
void toXML (QDomElement *e) const
 
QVector< QPointF > & transformedPoints ()
 
void transformSrcAndDst (const QTransform &t)
 
void translate (const QPointF &offset)
 
void translateDstSpace (const QPointF &offset)
 
void translatePoints (const QPointF &base, const QPointF &offset, qreal sigma, bool useWashMode, qreal flow)
 
void undoPoints (const QPointF &base, qreal amount, qreal sigma)
 
 ~KisLiquifyTransformWorker ()
 
- Public Member Functions inherited from Private
 Private (KisCanvas2 *c)
 

Static Public Member Functions

static KisLiquifyTransformWorkerfromXML (const QDomElement &e)
 

Public Attributes

QRectF accumulatedBrushStrokes
 
QSize gridSize
 
QVector< QPointF > originalPoints
 
KisSpatialContainer originalPointsContainer
 
int pixelPrecision
 
KoUpdaterprogress
 
QRect srcBounds
 
QVector< QPointF > transformedPoints
 
KisSpatialContainer transformedPointsContainer
 
- Public Attributes inherited from Private
KisCanvas2canvas
 
int displayedFrame
 
int intendedFrame
 

Private Attributes

const QScopedPointer< Privatem_d
 

Detailed Description

Definition at line 16 of file kis_liquify_transform_worker.cpp.

Constructor & Destructor Documentation

◆ KisLiquifyTransformWorker() [1/2]

KisLiquifyTransformWorker::KisLiquifyTransformWorker ( const QRect & srcBounds,
KoUpdater * progress,
int pixelPrecision = 8 )

Definition at line 66 of file kis_liquify_transform_worker.cpp.

70{
72
73 // TODO: implement 'progress' stuff
74 m_d->preparePoints();
75}
#define KIS_ASSERT_RECOVER_RETURN(cond)
Definition kis_assert.h:75
const QScopedPointer< Private > m_d

References KIS_ASSERT_RECOVER_RETURN, m_d, and srcBounds.

◆ KisLiquifyTransformWorker() [2/2]

KisLiquifyTransformWorker::KisLiquifyTransformWorker ( const KisLiquifyTransformWorker & rhs)

Definition at line 77 of file kis_liquify_transform_worker.cpp.

78 : m_d(new Private(*rhs.m_d.data()))
79{
80}

◆ ~KisLiquifyTransformWorker()

KisLiquifyTransformWorker::~KisLiquifyTransformWorker ( )

Definition at line 82 of file kis_liquify_transform_worker.cpp.

83{
84}

Member Function Documentation

◆ accumulatedStrokesBounds()

QRectF KisLiquifyTransformWorker::accumulatedStrokesBounds ( ) const

Definition at line 451 of file kis_liquify_transform_worker.cpp.

452{
453 return m_d->accumulatedBrushStrokes;
454}

References m_d.

◆ approxChangeRect()

QRect KisLiquifyTransformWorker::approxChangeRect ( const QRect & rc)

Definition at line 438 of file kis_liquify_transform_worker.cpp.

439{
440 const qreal margin = 0.05;
441 QRect resultRect = m_d->transformedPointsContainer.exactBounds().toRect();
442 return KisAlgebra2D::blowRect(resultRect | rc, margin);
443}
Rect blowRect(const Rect &rect, qreal coeff)

References KisAlgebra2D::blowRect(), and m_d.

◆ approxNeedRect()

QRect KisLiquifyTransformWorker::approxNeedRect ( const QRect & rc,
const QRect & fullBounds )

Definition at line 445 of file kis_liquify_transform_worker.cpp.

446{
447 Q_UNUSED(rc);
448 return fullBounds;
449}

◆ fromXML()

KisLiquifyTransformWorker * KisLiquifyTransformWorker::fromXML ( const QDomElement & e)
static

Definition at line 566 of file kis_liquify_transform_worker.cpp.

567{
568 QDomElement liquifyEl;
569
570 QRect srcBounds;
573 int pixelPrecision;
574 QSize gridSize;
575
576 bool result = false;
577
578
579 result =
580 KisDomUtils::findOnlyElement(e, "liquify_points", &liquifyEl) &&
581
582 KisDomUtils::loadValue(liquifyEl, "srcBounds", &srcBounds) &&
583 KisDomUtils::loadValue(liquifyEl, "originalPoints", &originalPoints) &&
584 KisDomUtils::loadValue(liquifyEl, "transformedPoints", &transformedPoints) &&
585 KisDomUtils::loadValue(liquifyEl, "pixelPrecision", &pixelPrecision) &&
586 KisDomUtils::loadValue(liquifyEl, "gridSize", &gridSize);
587
588 if (!result) {
589 warnKrita << "WARNING: Failed to load liquify worker from XML";
590 return new KisLiquifyTransformWorker(QRect(0,0,1024, 1024), 0, 8);
591 }
592
595
596 const int numPoints = originalPoints.size();
597
598 if (numPoints != transformedPoints.size() ||
599 numPoints != worker->m_d->originalPoints.size() ||
600 gridSize != worker->m_d->gridSize) {
601 warnKrita << "WARNING: Inconsistent number of points!";
602 warnKrita << ppVar(originalPoints.size());
605 warnKrita << ppVar(worker->m_d->originalPoints.size());
606 warnKrita << ppVar(worker->m_d->transformedPoints.size());
607 warnKrita << ppVar(worker->m_d->gridSize);
608
609 return worker;
610 }
611
612 QRectF changedRect = QRectF();
613
614 for (int i = 0; i < numPoints; i++) {
615 worker->m_d->originalPoints[i] = originalPoints[i];
616 worker->m_d->transformedPoints[i] = transformedPoints[i];
619 }
620 }
621
622 worker->m_d->transformedPointsContainer.initializeWith(worker->m_d->transformedPoints);
623 worker->m_d->originalPointsContainer.initializeWith(worker->m_d->originalPoints);
624
625 worker->m_d->accumulatedBrushStrokes = changedRect;
626
627
628 return worker;
629}
#define warnKrita
Definition kis_debug.h:87
#define ppVar(var)
Definition kis_debug.h:155
void accumulateBounds(const Point &pt, Rect *bounds)
bool fuzzyPointCompare(const QPointF &p1, const QPointF &p2)
bool findOnlyElement(const QDomElement &parent, const QString &tag, QDomElement *el, QStringList *errorMessages)
bool loadValue(const QDomElement &e, float *v)
KisLiquifyTransformWorker(const QRect &srcBounds, KoUpdater *progress, int pixelPrecision=8)

References KisAlgebra2D::accumulateBounds(), KisDomUtils::findOnlyElement(), KisAlgebra2D::fuzzyPointCompare(), gridSize, KisLiquifyTransformWorker(), KisDomUtils::loadValue(), m_d, originalPoints, pixelPrecision, ppVar, srcBounds, transformedPoints, and warnKrita.

◆ gridSize()

QSize KisLiquifyTransformWorker::gridSize ( ) const

◆ isIdentity()

bool KisLiquifyTransformWorker::isIdentity ( ) const

Definition at line 106 of file kis_liquify_transform_worker.cpp.

107{
108 const qreal eps = 1e-6;
109 return KisAlgebra2D::fuzzyPointCompare(m_d->originalPoints, m_d->transformedPoints, eps);
110}
const qreal eps

References eps, KisAlgebra2D::fuzzyPointCompare(), and m_d.

◆ operator==()

bool KisLiquifyTransformWorker::operator== ( const KisLiquifyTransformWorker & other) const

Definition at line 86 of file kis_liquify_transform_worker.cpp.

87{
88 bool result =
89 m_d->srcBounds == other.m_d->srcBounds &&
90 m_d->pixelPrecision == other.m_d->pixelPrecision &&
91 m_d->gridSize == other.m_d->gridSize &&
92 m_d->originalPoints.size() == other.m_d->originalPoints.size() &&
93 m_d->transformedPoints.size() == other.m_d->transformedPoints.size();
94
95 if (!result) return false;
96
97 const qreal eps = 1e-6;
98
99 result =
100 KisAlgebra2D::fuzzyPointCompare(m_d->originalPoints, other.m_d->originalPoints, eps) &&
101 KisAlgebra2D::fuzzyPointCompare(m_d->transformedPoints, other.m_d->transformedPoints, eps);
102
103 return result;
104}

References eps, KisAlgebra2D::fuzzyPointCompare(), and m_d.

◆ originalPoints()

const QVector< QPointF > & KisLiquifyTransformWorker::originalPoints ( ) const

◆ pointToIndex()

int KisLiquifyTransformWorker::pointToIndex ( const QPoint & cellPt)

Definition at line 112 of file kis_liquify_transform_worker.cpp.

113{
114 return GridIterationTools::pointToIndex(cellPt, m_d->gridSize);
115}
int pointToIndex(const QPoint &cellPt, const QSize &gridSize)

References m_d, and GridIterationTools::pointToIndex().

◆ preparePoints()

void KisLiquifyTransformWorker::preparePoints ( )

◆ Private()

KisLiquifyTransformWorker::Private ( const QRect & _srcBounds,
KoUpdater * _progress,
int _pixelPrecision )
inline

Definition at line 18 of file kis_liquify_transform_worker.cpp.

21 : srcBounds(_srcBounds),
22 progress(_progress),
23 pixelPrecision(_pixelPrecision)
24 , originalPointsContainer(_srcBounds)
25 , transformedPointsContainer(_srcBounds)
26 {
27 }

◆ processTransformedPixels()

template<class ProcessOp >
void KisLiquifyTransformWorker::processTransformedPixels ( ProcessOp op,
const QPointF & base,
qreal sigma,
bool useWashMode,
qreal flow )

◆ processTransformedPixelsBuildUp()

template<class ProcessOp >
void KisLiquifyTransformWorker::processTransformedPixelsBuildUp ( ProcessOp op,
const QPointF & base,
qreal sigma )

◆ processTransformedPixelsWash()

template<class ProcessOp >
void KisLiquifyTransformWorker::processTransformedPixelsWash ( ProcessOp op,
const QPointF & base,
qreal sigma,
qreal flow )

◆ rotatePoints()

void KisLiquifyTransformWorker::rotatePoints ( const QPointF & base,
qreal angle,
qreal sigma,
bool useWashMode,
qreal flow )

Definition at line 402 of file kis_liquify_transform_worker.cpp.

407{
408 RotateOp op(angle);
409 m_d->processTransformedPixels(op, base, sigma, useWashMode, flow);
410}

References m_d.

◆ run()

void KisLiquifyTransformWorker::run ( KisPaintDeviceSP srcDevice,
KisPaintDeviceSP dstDevice )

Definition at line 412 of file kis_liquify_transform_worker.cpp.

413{
414 KIS_SAFE_ASSERT_RECOVER_RETURN(*srcDevice->colorSpace() == *dstDevice->colorSpace());
415
416 dstDevice->clear();
417
418 using namespace GridIterationTools;
419 QRect correctSubGrid = calculateCorrectSubGrid(m_d->srcBounds, m_d->pixelPrecision, m_d->accumulatedBrushStrokes, m_d->gridSize);
420
421 PaintDevicePolygonOp polygonOp(srcDevice, dstDevice);
422 RegularGridIndexesOp indexesOp(m_d->gridSize);
423
424 bool canMergeRects = GridIterationTools::canProcessRectsInRandomOrder(indexesOp, m_d->transformedPoints, correctSubGrid);
425 polygonOp.setCanMergeRects(canMergeRects);
426
427 iterateThroughGrid<AlwaysCompletePolygonPolicy>(polygonOp, indexesOp,
428 m_d->gridSize,
429 m_d->originalPoints,
430 m_d->transformedPoints,
431 correctSubGrid);
432 QList<QRectF> areasToCopy = cutOutSubgridFromBounds(correctSubGrid, m_d->srcBounds, m_d->gridSize, m_d->originalPoints);
433 for (int i = 0; i < areasToCopy.length(); i++) {
434 polygonOp.fastCopyArea(areasToCopy[i].toRect(), false);
435 }
436}
virtual void clear()
const KoColorSpace * colorSpace() const
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
Definition kis_assert.h:128
bool canProcessRectsInRandomOrder(IndexesOp &indexesOp, const QVector< QPointF > &transformedPoints, QSize grid)
QList< QRectF > cutOutSubgridFromBounds(QRect subGrid, QRect srcBounds, const QSize &gridSize, const QVector< QPointF > &originalPoints)
QRect calculateCorrectSubGrid(QRect originalBoundsForGrid, int pixelPrecision, QRectF currentBounds, QSize gridSize)

References GridIterationTools::canProcessRectsInRandomOrder(), KisPaintDevice::clear(), KisPaintDevice::colorSpace(), GridIterationTools::PaintDevicePolygonOp::fastCopyArea(), KIS_SAFE_ASSERT_RECOVER_RETURN, m_d, and GridIterationTools::PaintDevicePolygonOp::setCanMergeRects().

◆ runOnQImage()

QImage KisLiquifyTransformWorker::runOnQImage ( const QImage & srcImage,
const QPointF & srcImageOffset,
const QTransform & imageToThumbTransform,
QPointF * newOffset )

Definition at line 485 of file kis_liquify_transform_worker.cpp.

489{
490 KIS_ASSERT_RECOVER(m_d->originalPoints.size() == m_d->transformedPoints.size()) {
491 return QImage();
492 }
493
494 KIS_ASSERT_RECOVER(!srcImage.isNull()) {
495 return QImage();
496 }
497
498 KIS_ASSERT_RECOVER(srcImage.format() == QImage::Format_ARGB32) {
499 return QImage();
500 }
501
502 QVector<QPointF> originalPointsLocal(m_d->originalPoints);
503 QVector<QPointF> transformedPointsLocal(m_d->transformedPoints);
504
505 PointMapFunction mapFunc = bindPointMapTransform(imageToThumbTransform);
506
507 std::transform(originalPointsLocal.begin(), originalPointsLocal.end(),
508 originalPointsLocal.begin(), mapFunc);
509
510 std::transform(transformedPointsLocal.begin(), transformedPointsLocal.end(),
511 transformedPointsLocal.begin(), mapFunc);
512
513 QRectF dstBounds;
514 Q_FOREACH (const QPointF &pt, transformedPointsLocal) {
515 KisAlgebra2D::accumulateBounds(pt, &dstBounds);
516 }
517
518 const QRectF srcBounds(srcImageOffset, srcImage.size());
519 dstBounds |= srcBounds;
520
521 QPointF dstQImageOffset = dstBounds.topLeft();
522 *newOffset = dstQImageOffset;
523
524 QRect dstBoundsI = dstBounds.toAlignedRect();
525
526 QImage dstImage(dstBoundsI.size(), srcImage.format());
527 dstImage.fill(0);
528
529 GridIterationTools::QImagePolygonOp polygonOp(srcImage, dstImage, srcImageOffset, dstQImageOffset);
531
532
533 QRect correctSubGrid = GridIterationTools::calculateCorrectSubGrid(m_d->srcBounds, m_d->pixelPrecision, m_d->accumulatedBrushStrokes, m_d->gridSize);
534 bool canMergeRects = GridIterationTools::canProcessRectsInRandomOrder(indexesOp, m_d->transformedPoints, correctSubGrid);
535 polygonOp.setCanMergeRects(canMergeRects);
536
537
538 GridIterationTools::iterateThroughGrid<GridIterationTools::AlwaysCompletePolygonPolicy>(polygonOp, indexesOp,
539 m_d->gridSize,
540 originalPointsLocal,
541 transformedPointsLocal,
542 correctSubGrid);
543
544
545 QList<QRectF> areasToCopy = GridIterationTools::cutOutSubgridFromBounds(correctSubGrid, m_d->srcBounds, m_d->gridSize, m_d->originalPoints);
546 polygonOp.setCanMergeRects(false);
547 for (int i = 0; i < areasToCopy.length(); i++) {
548 polygonOp.fastCopyArea(imageToThumbTransform.map(QPolygonF(areasToCopy[i])));
549 }
550 return dstImage;
551}
#define KIS_ASSERT_RECOVER(cond)
Definition kis_assert.h:55
std::function< QPointF(const QPointF &)> PointMapFunction
PointMapFunction bindPointMapTransform(const QTransform &transform)

References KisAlgebra2D::accumulateBounds(), bindPointMapTransform(), GridIterationTools::calculateCorrectSubGrid(), GridIterationTools::canProcessRectsInRandomOrder(), GridIterationTools::cutOutSubgridFromBounds(), GridIterationTools::QImagePolygonOp::fastCopyArea(), KIS_ASSERT_RECOVER, m_d, GridIterationTools::QImagePolygonOp::setCanMergeRects(), and srcBounds.

◆ scalePoints()

void KisLiquifyTransformWorker::scalePoints ( const QPointF & base,
qreal scale,
qreal sigma,
bool useWashMode,
qreal flow )

Definition at line 392 of file kis_liquify_transform_worker.cpp.

397{
398 ScaleOp op(scale);
399 m_d->processTransformedPixels(op, base, sigma, useWashMode, flow);
400}

References m_d.

◆ toXML()

void KisLiquifyTransformWorker::toXML ( QDomElement * e) const

Definition at line 553 of file kis_liquify_transform_worker.cpp.

554{
555 QDomDocument doc = e->ownerDocument();
556 QDomElement liqEl = doc.createElement("liquify_points");
557 e->appendChild(liqEl);
558
559 KisDomUtils::saveValue(&liqEl, "srcBounds", m_d->srcBounds);
560 KisDomUtils::saveValue(&liqEl, "originalPoints", m_d->originalPoints);
561 KisDomUtils::saveValue(&liqEl, "transformedPoints", m_d->transformedPoints);
562 KisDomUtils::saveValue(&liqEl, "pixelPrecision", m_d->pixelPrecision);
563 KisDomUtils::saveValue(&liqEl, "gridSize", m_d->gridSize);
564}
void saveValue(QDomElement *parent, const QString &tag, const QSize &size)

References m_d, and KisDomUtils::saveValue().

◆ transformedPoints()

QVector< QPointF > & KisLiquifyTransformWorker::transformedPoints ( )

◆ transformSrcAndDst()

void KisLiquifyTransformWorker::transformSrcAndDst ( const QTransform & t)

Definition at line 456 of file kis_liquify_transform_worker.cpp.

457{
458 KIS_SAFE_ASSERT_RECOVER_RETURN(t.type() <= QTransform::TxScale);
459
460 m_d->srcBounds = t.mapRect(m_d->srcBounds);
461
462 // TODO: do it within Spatial Container
463 for (int i = 0; i < m_d->transformedPoints.count(); i++) {
464 m_d->originalPointsContainer.movePoint(i, m_d->originalPoints[i], t.map(m_d->originalPoints[i]));
465 m_d->transformedPointsContainer.movePoint(i, m_d->transformedPoints[i], t.map(m_d->transformedPoints[i]));
466
467 m_d->originalPoints[i] = t.map(m_d->originalPoints[i]);
468 m_d->transformedPoints[i] = t.map(m_d->transformedPoints[i]);
469 }
470}

References KIS_SAFE_ASSERT_RECOVER_RETURN, and m_d.

◆ translate()

void KisLiquifyTransformWorker::translate ( const QPointF & offset)

Definition at line 176 of file kis_liquify_transform_worker.cpp.

177{
178 KIS_ASSERT_RECOVER_RETURN(m_d->originalPoints.size() ==
179 m_d->transformedPoints.size());
180
181 // TODO: make it within Spatial Container, either a hidden offset, or just offsetting all points at once
182 // and benchmark
183 for (int i = 0; i < m_d->transformedPoints.count(); i++) {
184 m_d->originalPointsContainer.movePoint(i, m_d->originalPoints[i], m_d->originalPoints[i] + offset);
185 m_d->transformedPointsContainer.movePoint(i, m_d->transformedPoints[i], m_d->transformedPoints[i] + offset);
186
187 m_d->originalPoints[i] += offset;
188 m_d->transformedPoints[i] += offset;
189 }
190}

References KIS_ASSERT_RECOVER_RETURN, and m_d.

◆ translateDstSpace()

void KisLiquifyTransformWorker::translateDstSpace ( const QPointF & offset)

Definition at line 192 of file kis_liquify_transform_worker.cpp.

193{
194 // TODO: make it within Spatial Container, either a hidden offset, or just offsetting all points at once
195 // and benchmark
196 for (int i = 0; i < m_d->transformedPoints.count(); i++) {
197 m_d->transformedPointsContainer.movePoint(i, m_d->transformedPoints[i], m_d->transformedPoints[i] + offset);
198 m_d->transformedPoints[i] += offset;
199 }
200}

References m_d.

◆ translatePoints()

void KisLiquifyTransformWorker::translatePoints ( const QPointF & base,
const QPointF & offset,
qreal sigma,
bool useWashMode,
qreal flow )

Definition at line 382 of file kis_liquify_transform_worker.cpp.

387{
388 TranslateOp op(offset);
389 m_d->processTransformedPixels(op, base, sigma, useWashMode, flow);
390}

References m_d.

◆ undoPoints()

void KisLiquifyTransformWorker::undoPoints ( const QPointF & base,
qreal amount,
qreal sigma )

Definition at line 202 of file kis_liquify_transform_worker.cpp.

205{
206 const qreal maxDistCoeff = 3.0;
207 const qreal maxDist = maxDistCoeff * sigma;
208
209 KIS_ASSERT_RECOVER_RETURN(m_d->originalPoints.size() ==
210 m_d->transformedPoints.size());
211
212 QVector<int> indexes;
213 m_d->transformedPointsContainer.findAllInRange(indexes, base, maxDist);
214 for (int i = 0; i < indexes.count(); i++) {
215
216 QPointF diff = m_d->transformedPoints[indexes[i]] - base;
217 qreal dist = KisAlgebra2D::norm(diff);
218 qreal lambda = exp(-0.5 * pow2(dist / sigma));
219 lambda *= amount;
220
221 QPointF oldPosition = m_d->transformedPoints[indexes[i]];
222 m_d->transformedPoints[indexes[i]] = m_d->originalPoints[indexes[i]] * lambda + m_d->transformedPoints[indexes[i]] * (1.0 - lambda);
223
224 m_d->transformedPointsContainer.movePoint(indexes[i], oldPosition, m_d->transformedPoints[indexes[i]]);
225 }
226}
T pow2(const T &x)
Definition kis_global.h:166
qreal norm(const T &a)

References KIS_ASSERT_RECOVER_RETURN, m_d, KisAlgebra2D::norm(), and pow2().

Member Data Documentation

◆ accumulatedBrushStrokes

QRectF KisLiquifyTransformWorker::accumulatedBrushStrokes

Definition at line 37 of file kis_liquify_transform_worker.cpp.

◆ gridSize

QSize KisLiquifyTransformWorker::gridSize

Definition at line 41 of file kis_liquify_transform_worker.cpp.

◆ m_d

const QScopedPointer<Private> KisLiquifyTransformWorker::m_d
private

Definition at line 86 of file kis_liquify_transform_worker.h.

◆ originalPoints

const QVector< QPointF > & KisLiquifyTransformWorker::originalPoints

Definition at line 31 of file kis_liquify_transform_worker.cpp.

◆ originalPointsContainer

KisSpatialContainer KisLiquifyTransformWorker::originalPointsContainer

Definition at line 34 of file kis_liquify_transform_worker.cpp.

◆ pixelPrecision

int KisLiquifyTransformWorker::pixelPrecision

Definition at line 40 of file kis_liquify_transform_worker.cpp.

◆ progress

KoUpdater* KisLiquifyTransformWorker::progress

Definition at line 39 of file kis_liquify_transform_worker.cpp.

◆ srcBounds

QRect KisLiquifyTransformWorker::srcBounds

Definition at line 29 of file kis_liquify_transform_worker.cpp.

◆ transformedPoints

QVector< QPointF > & KisLiquifyTransformWorker::transformedPoints

Definition at line 32 of file kis_liquify_transform_worker.cpp.

◆ transformedPointsContainer

KisSpatialContainer KisLiquifyTransformWorker::transformedPointsContainer

Definition at line 35 of file kis_liquify_transform_worker.cpp.


The documentation for this class was generated from the following files: