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 743 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 745 of file kis_grid_interpolation_tools.h.

752 {
753 if (numExistingPoints >= 4) return false;
754 if (numExistingPoints == 0) return true;
755
756 QPolygonF srcPolygon;
757 QPolygonF dstPolygon;
758
759 for (int i = 0; i < 4; i++) {
760 const int index = polygonPoints[i];
761
762 if (index >= 0) {
763 srcPolygon << originalPoints[index];
764 dstPolygon << transformedPoints[index];
765 } else {
766 QPoint cellPt = Private::pointPolygonIndexToColRow(QPoint(col, row), i);
767 QPointF srcPoint;
768 QPointF dstPoint;
769 bool result =
771 originalPoints,
772 transformedPoints,
773 indexesOp,
774 &srcPoint,
775 &dstPoint);
776
777 if (!result) {
778 //dbgKrita << "*NOT* found any valid point" << allSrcPoints[pointToIndex(cellPt)] << "->" << ppVar(pt);
779 break;
780 } else {
781 srcPolygon << srcPoint;
782 dstPolygon << dstPoint;
783 }
784 }
785 }
786
787 if (dstPolygon.size() == 4) {
788 QPolygonF srcClipPolygon(srcPolygon.intersected(indexesOp.srcCropPolygon()));
789
790 KisFourPointInterpolatorForward forwardTransform(srcPolygon, dstPolygon);
791 for (int i = 0; i < srcClipPolygon.size(); i++) {
792 const QPointF newPt = forwardTransform.map(srcClipPolygon[i]);
793 srcClipPolygon[i] = newPt;
794 }
795
796 polygonOp(srcPolygon, dstPolygon, srcClipPolygon);
797 }
798
799 return true;
800 }
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: