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 718 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 720 of file kis_grid_interpolation_tools.h.

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