Krita Source Code Documentation
Loading...
Searching...
No Matches
KisGreenCoordinatesMath Class Reference

#include <kis_green_coordinates_math.h>

+ Inheritance diagram for KisGreenCoordinatesMath:

Public Member Functions

void generateTransformedCageNormals (const QVector< QPointF > &transformedCage)
 
 KisGreenCoordinatesMath ()
 
void precalculateGreenCoordinates (const QVector< QPointF > &originalCage, const QVector< QPointF > &points)
 
void precalculateOneEdge (const QPointF &pt, const QPointF &v1, const QPointF &v2, qreal *edge_psi, qreal *vertex1_phi, qreal *vertex2_phi, int polygonDirection)
 
void precalculateOnePoint (const QVector< QPointF > &originalCage, PrecalculatedCoords *coords, const QPointF &pt, int polygonDirection)
 
 Private ()
 
QPointF transformedPoint (int pointIndex, const QVector< QPointF > &transformedCage)
 
 ~KisGreenCoordinatesMath ()
 
- Public Member Functions inherited from Private
 Private (KisCanvas2 *c)
 

Public Attributes

QVector< qreal > originalCageEdgeSizes
 
QVector< PrecalculatedCoordsprecalculatedCoords
 
int transformedCageDirection
 
QVector< QPointF > transformedCageNormals
 
- Public Attributes inherited from Private
KisCanvas2canvas
 
int displayedFrame
 
int intendedFrame
 

Private Attributes

const QScopedPointer< Privatem_d
 

Detailed Description

Definition at line 29 of file kis_green_coordinates_math.cpp.

Constructor & Destructor Documentation

◆ KisGreenCoordinatesMath()

KisGreenCoordinatesMath::KisGreenCoordinatesMath ( )

Definition at line 115 of file kis_green_coordinates_math.cpp.

116 : m_d(new Private())
117{
118}
const QScopedPointer< Private > m_d

◆ ~KisGreenCoordinatesMath()

KisGreenCoordinatesMath::~KisGreenCoordinatesMath ( )

Definition at line 120 of file kis_green_coordinates_math.cpp.

121{
122}

Member Function Documentation

◆ generateTransformedCageNormals()

void KisGreenCoordinatesMath::generateTransformedCageNormals ( const QVector< QPointF > & transformedCage)

Precalculate coefficients of the destination cage. Should be called once for every cage change

Definition at line 153 of file kis_green_coordinates_math.cpp.

154{
155 m_d->transformedCageDirection = polygonDirection(transformedCage);
156
157 const int numCagePoints = transformedCage.size();
158 m_d->transformedCageNormals.resize(numCagePoints);
159
160 for (int i = 1; i <= numCagePoints; i++) {
161 int endIndex = i != numCagePoints ? i : 0;
162 int startIndex = i - 1;
163
164 QPointF transformedEdge =
165 transformedCage[endIndex] - transformedCage[startIndex];
166
167 qreal scaleCoeff =
168 norm(transformedEdge) / m_d->originalCageEdgeSizes[startIndex];
169
170 m_d->transformedCageNormals[startIndex] =
171 scaleCoeff * inwardUnitNormal(transformedEdge, m_d->transformedCageDirection);
172 }
173}
qreal norm(const T &a)
int polygonDirection(const QVector< T > &polygon)
T inwardUnitNormal(const T &a, int polygonDirection)

References KisAlgebra2D::inwardUnitNormal(), m_d, KisAlgebra2D::norm(), and KisAlgebra2D::polygonDirection().

◆ precalculateGreenCoordinates()

void KisGreenCoordinatesMath::precalculateGreenCoordinates ( const QVector< QPointF > & originalCage,
const QVector< QPointF > & points )

Prepare the transformation framework by computing internal coordinates of the points in cage.

Please note that the points in points will later be accessed with indexes only.

Definition at line 124 of file kis_green_coordinates_math.cpp.

125{
126 const int cageDirection = polygonDirection(originalCage);
127 const int numPoints = points.size();
128 const int numCagePoints = originalCage.size();
129
130 m_d->originalCageEdgeSizes.resize(numCagePoints);
131
132 for (int i = 1; i <= numCagePoints; i++) {
133 int endIndex = i != numCagePoints ? i : 0;
134 int startIndex = i - 1;
135
136 m_d->originalCageEdgeSizes[startIndex] =
137 norm(originalCage[endIndex] - originalCage[startIndex]);
138 }
139
140 m_d->precalculatedCoords.resize(numPoints);
141
142 for (int i = 0; i < numPoints; i++) {
143 m_d->precalculatedCoords[i].psi.resize(numCagePoints);
144 m_d->precalculatedCoords[i].phi.resize(numCagePoints);
145
146 m_d->precalculateOnePoint(originalCage,
147 &m_d->precalculatedCoords[i],
148 points[i],
149 cageDirection);
150 }
151}

References m_d, KisAlgebra2D::norm(), and KisAlgebra2D::polygonDirection().

◆ precalculateOneEdge()

void KisGreenCoordinatesMath::precalculateOneEdge ( const QPointF & pt,
const QPointF & v1,
const QPointF & v2,
qreal * edge_psi,
qreal * vertex1_phi,
qreal * vertex2_phi,
int polygonDirection )
inline

◆ precalculateOnePoint()

void KisGreenCoordinatesMath::precalculateOnePoint ( const QVector< QPointF > & originalCage,
PrecalculatedCoords * coords,
const QPointF & pt,
int polygonDirection )

◆ Private()

KisGreenCoordinatesMath::Private ( )
inline

◆ transformedPoint()

QPointF KisGreenCoordinatesMath::transformedPoint ( int pointIndex,
const QVector< QPointF > & transformedCage )

Transform one point according to its index

Definition at line 175 of file kis_green_coordinates_math.cpp.

176{
177 QPointF result;
178
179 const int numCagePoints = transformedCage.size();
180
181
182 PrecalculatedCoords *coords = &m_d->precalculatedCoords[pointIndex];
183
184 for (int i = 0; i < numCagePoints; i++) {
185 result += coords->phi[i] * transformedCage[i];
186 result += coords->psi[i] * m_d->transformedCageNormals[i];
187 }
188
189 return result;
190}

References m_d, PrecalculatedCoords::phi, and PrecalculatedCoords::psi.

Member Data Documentation

◆ m_d

const QScopedPointer<Private> KisGreenCoordinatesMath::m_d
private

Definition at line 44 of file kis_green_coordinates_math.h.

◆ originalCageEdgeSizes

QVector<qreal> KisGreenCoordinatesMath::originalCageEdgeSizes

Definition at line 33 of file kis_green_coordinates_math.cpp.

◆ precalculatedCoords

QVector<PrecalculatedCoords> KisGreenCoordinatesMath::precalculatedCoords

Definition at line 37 of file kis_green_coordinates_math.cpp.

◆ transformedCageDirection

int KisGreenCoordinatesMath::transformedCageDirection

Definition at line 35 of file kis_green_coordinates_math.cpp.

◆ transformedCageNormals

QVector<QPointF> KisGreenCoordinatesMath::transformedCageNormals

Definition at line 34 of file kis_green_coordinates_math.cpp.


The documentation for this class was generated from the following files: