Krita Source Code Documentation
Loading...
Searching...
No Matches
GridIterationTools::IncompletePolygonPolicy< PolygonOp, IndexesOp > Struct Template Reference

#include <kis_grid_interpolation_tools.h>

Static Public Member Functions

static bool tryProcessPolygon (int col, int row, int numExistingPoints, PolygonOp &polygonOp, IndexesOp &indexesOp, const QVector< int > &polygonPoints, const QVector< QPointF > &originalPoints, const QVector< QPointF > &transformedPoints)
 

Detailed Description

template<class PolygonOp, class IndexesOp>
struct GridIterationTools::IncompletePolygonPolicy< PolygonOp, IndexesOp >

Definition at line 455 of file kis_grid_interpolation_tools.h.

Member Function Documentation

◆ tryProcessPolygon()

template<class PolygonOp , class IndexesOp >
static bool GridIterationTools::IncompletePolygonPolicy< PolygonOp, IndexesOp >::tryProcessPolygon ( int col,
int row,
int numExistingPoints,
PolygonOp & polygonOp,
IndexesOp & indexesOp,
const QVector< int > & polygonPoints,
const QVector< QPointF > & originalPoints,
const QVector< QPointF > & transformedPoints )
inlinestatic

Definition at line 457 of file kis_grid_interpolation_tools.h.

464 {
465 if (numExistingPoints >= 4) return false;
466 if (numExistingPoints == 0) return true;
467
468 QPolygonF srcPolygon;
469 QPolygonF dstPolygon;
470
471 for (int i = 0; i < 4; i++) {
472 const int index = polygonPoints[i];
473
474 if (index >= 0) {
475 srcPolygon << originalPoints[index];
476 dstPolygon << transformedPoints[index];
477 } else {
478 QPoint cellPt = Private::pointPolygonIndexToColRow(QPoint(col, row), i);
479 QPointF srcPoint;
480 QPointF dstPoint;
481 bool result =
483 originalPoints,
484 transformedPoints,
485 indexesOp,
486 &srcPoint,
487 &dstPoint);
488
489 if (!result) {
490 //dbgKrita << "*NOT* found any valid point" << allSrcPoints[pointToIndex(cellPt)] << "->" << ppVar(pt);
491 break;
492 } else {
493 srcPolygon << srcPoint;
494 dstPolygon << dstPoint;
495 }
496 }
497 }
498
499 if (dstPolygon.size() == 4) {
500 QPolygonF srcClipPolygon(srcPolygon.intersected(indexesOp.srcCropPolygon()));
501
502 KisFourPointInterpolatorForward forwardTransform(srcPolygon, dstPolygon);
503 for (int i = 0; i < srcClipPolygon.size(); i++) {
504 const QPointF newPt = forwardTransform.map(srcClipPolygon[i]);
505 srcClipPolygon[i] = newPt;
506 }
507
508 polygonOp(srcPolygon, dstPolygon, srcClipPolygon);
509 }
510
511 return true;
512 }
QPointF dstPoint
QPoint pointPolygonIndexToColRow(QPoint baseColRow, int index)
bool getOrthogonalPointApproximation(const QPoint &cellPt, const QVector< QPointF > &originalPoints, const QVector< QPointF > &transformedPoints, IndexesOp indexesOp, QPointF *srcPoint, QPointF *dstPoint)

References dstPoint, GridIterationTools::getOrthogonalPointApproximation(), KisFourPointInterpolatorForward::map(), and GridIterationTools::Private::pointPolygonIndexToColRow().


The documentation for this struct was generated from the following file: