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 762 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 764 of file kis_grid_interpolation_tools.h.

771 {
772 if (numExistingPoints >= 4) return false;
773 if (numExistingPoints == 0) return true;
774
775 QPolygonF srcPolygon;
776 QPolygonF dstPolygon;
777
778 for (int i = 0; i < 4; i++) {
779 const int index = polygonPoints[i];
780
781 if (index >= 0) {
782 srcPolygon << originalPoints[index];
783 dstPolygon << transformedPoints[index];
784 } else {
785 QPoint cellPt = Private::pointPolygonIndexToColRow(QPoint(col, row), i);
786 QPointF srcPoint;
787 QPointF dstPoint;
788 bool result =
790 originalPoints,
791 transformedPoints,
792 indexesOp,
793 &srcPoint,
794 &dstPoint);
795
796 if (!result) {
797 //dbgKrita << "*NOT* found any valid point" << allSrcPoints[pointToIndex(cellPt)] << "->" << ppVar(pt);
798 break;
799 } else {
800 srcPolygon << srcPoint;
801 dstPolygon << dstPoint;
802 }
803 }
804 }
805
806 if (dstPolygon.size() == 4) {
807 QPolygonF srcClipPolygon(srcPolygon.intersected(indexesOp.srcCropPolygon()));
808
809 KisFourPointInterpolatorForward forwardTransform(srcPolygon, dstPolygon);
810 for (int i = 0; i < srcClipPolygon.size(); i++) {
811 const QPointF newPt = forwardTransform.map(srcClipPolygon[i]);
812 srcClipPolygon[i] = newPt;
813 }
814
815 polygonOp(srcPolygon, dstPolygon, srcClipPolygon);
816 }
817
818 return true;
819 }
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: