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 712 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 714 of file kis_grid_interpolation_tools.h.

721 {
722 if (numExistingPoints >= 4) return false;
723 if (numExistingPoints == 0) return true;
724
725 QPolygonF srcPolygon;
726 QPolygonF dstPolygon;
727
728 for (int i = 0; i < 4; i++) {
729 const int index = polygonPoints[i];
730
731 if (index >= 0) {
732 srcPolygon << originalPoints[index];
733 dstPolygon << transformedPoints[index];
734 } else {
735 QPoint cellPt = Private::pointPolygonIndexToColRow(QPoint(col, row), i);
736 QPointF srcPoint;
737 QPointF dstPoint;
738 bool result =
740 originalPoints,
741 transformedPoints,
742 indexesOp,
743 &srcPoint,
744 &dstPoint);
745
746 if (!result) {
747 //dbgKrita << "*NOT* found any valid point" << allSrcPoints[pointToIndex(cellPt)] << "->" << ppVar(pt);
748 break;
749 } else {
750 srcPolygon << srcPoint;
751 dstPolygon << dstPoint;
752 }
753 }
754 }
755
756 if (dstPolygon.size() == 4) {
757 QPolygonF srcClipPolygon(srcPolygon.intersected(indexesOp.srcCropPolygon()));
758
759 KisFourPointInterpolatorForward forwardTransform(srcPolygon, dstPolygon);
760 for (int i = 0; i < srcClipPolygon.size(); i++) {
761 const QPointF newPt = forwardTransform.map(srcClipPolygon[i]);
762 srcClipPolygon[i] = newPt;
763 }
764
765 polygonOp(srcPolygon, dstPolygon, srcClipPolygon);
766 }
767
768 return true;
769 }
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: