Krita Source Code Documentation
Loading...
Searching...
No Matches
KisBezierGradientMeshDetail::KisBezierGradientMesh Class Reference

#include <KisBezierGradientMesh.h>

+ Inheritance diagram for KisBezierGradientMeshDetail::KisBezierGradientMesh:

Public Member Functions

PatchIndex hitTestPatch (const QPointF &pt, QPointF *localPointResult) const
 
void renderMesh (const QPoint &dstQImageOffset, QImage *dstImage) const
 
- Public Member Functions inherited from KisBezierMeshDetails::Mesh< NodeArg, PatchArg >
control_point_iterator beginControlPoints ()
 
control_point_const_iterator beginControlPoints () const
 
patch_iterator beginPatches ()
 
patch_const_iterator beginPatches () const
 
segment_iterator beginSegments ()
 
segment_const_iterator beginSegments () const
 
control_point_const_iterator constBeginControlPoints () const
 
patch_const_iterator constBeginPatches () const
 
segment_const_iterator constBeginSegments () const
 
control_point_const_iterator constEndControlPoints () const
 
patch_const_iterator constEndPatches () const
 
segment_const_iterator constEndSegments () const
 
control_point_const_iterator constFind (const ControlPointIndex &index) const
 
control_point_const_iterator constFind (const NodeIndex &index) const
 
patch_const_iterator constFind (const PatchIndex &index) const
 
segment_const_iterator constFind (const SegmentIndex &index) const
 
QRectF dstBoundingRect () const
 
control_point_iterator endControlPoints ()
 
control_point_const_iterator endControlPoints () const
 
patch_iterator endPatches ()
 
patch_const_iterator endPatches () const
 
segment_iterator endSegments ()
 
segment_const_iterator endSegments () const
 
control_point_iterator find (const ControlPointIndex &index)
 
control_point_const_iterator find (const ControlPointIndex &index) const
 
control_point_iterator find (const NodeIndex &index)
 
control_point_const_iterator find (const NodeIndex &index) const
 
patch_iterator find (const PatchIndex &index)
 
patch_const_iterator find (const PatchIndex &index) const
 
segment_iterator find (const SegmentIndex &index)
 
segment_const_iterator find (const SegmentIndex &index) const
 
ControlPointIndex hitTestControlPoint (const QPointF &pt, qreal distanceThreshold) const
 
ControlPointIndex hitTestNode (const QPointF &pt, qreal distanceThreshold) const
 
SegmentIndex hitTestSegment (const QPointF &pt, qreal distanceThreshold, qreal *t=0) const
 
bool isIdentity () const
 
template<typename T >
bool isIndexValid (const T &index) const
 
Patch makePatch (const PatchIndex &index) const
 
Patch makePatch (int col, int row) const
 
 Mesh ()
 
 Mesh (const QRectF &mapRect, const QSize &size=QSize(2, 2))
 
Nodenode (const NodeIndex &index)
 
const Nodenode (const NodeIndex &index) const
 
Nodenode (int col, int row)
 
const Nodenode (int col, int row) const
 
bool operator== (const Mesh &rhs) const
 
QRectF originalRect () const
 
void removeColumn (int column)
 
void removeColumnOrRow (NodeIndex index, bool row)
 
void removeRow (int row)
 
void reshapeMeshHorizontally (int numColumns)
 
void reshapeMeshVertically (int numRows)
 
QSize size () const
 
int subdivideColumn (int leftColumn, qreal relProportionalT)
 
int subdivideColumn (qreal proportionalT)
 
int subdivideRow (int topRow, qreal relProportionalT)
 
int subdivideRow (qreal proportionalT)
 
void subdivideSegment (SegmentIndex index, qreal proportionalT)
 
void transform (const QTransform &t)
 
void transformSrcAndDst (const QTransform &t)
 
void translate (const QPointF &offset)
 

Static Public Member Functions

static void renderPatch (const GradientMeshPatch &patch, const QPoint &dstQImageOffset, QImage *dstImage)
 

Friends

KRITAIMAGE_EXPORT bool loadValue (const QDomElement &parent, const QString &tag, KisBezierGradientMesh *mesh)
 
KRITAIMAGE_EXPORT void saveValue (QDomElement *parent, const QString &tag, const KisBezierGradientMesh &mesh)
 

Additional Inherited Members

- Public Types inherited from KisBezierMeshDetails::Mesh< NodeArg, PatchArg >
using control_point_const_iterator = control_point_iterator_impl<true>
 
using control_point_iterator = control_point_iterator_impl<false>
 
using ControlType = typename ControlPointIndex::ControlType
 
using Node = NodeArg
 
using Patch = PatchArg
 
using patch_const_iterator = patch_iterator_impl<true>
 
using patch_iterator = patch_iterator_impl<false>
 
using segment_const_iterator = segment_iterator_impl<true>
 
using segment_iterator = segment_iterator_impl<false>
 
using SegmentIndex = std::pair<NodeIndex, int>
 
- Protected Attributes inherited from KisBezierMeshDetails::Mesh< NodeArg, PatchArg >
std::vector< qreal > m_columns
 
std::vector< Nodem_nodes
 
QRectF m_originalRect
 
std::vector< qreal > m_rows
 
QSize m_size
 

Detailed Description

Definition at line 63 of file KisBezierGradientMesh.h.

Member Function Documentation

◆ hitTestPatch()

KisBezierGradientMesh::PatchIndex KisBezierGradientMesh::hitTestPatch ( const QPointF & pt,
QPointF * localPointResult ) const

Definition at line 134 of file KisBezierGradientMesh.cpp.

134 {
135 auto result = endPatches();
136
137 const QRectF unitRect(0, 0, 1, 1);
138
139 for (auto it = beginPatches(); it != endPatches(); ++it) {
140 Patch patch = *it;
141
142 if (patch.dstBoundingRect().contains(pt)) {
143 const QPointF localPos = KisBezierUtils::calculateLocalPosSVG2(patch.points, pt);
144
145 if (unitRect.contains(localPos)) {
146
147 if (localPointResult) {
148 *localPointResult = localPos;
149 }
150
151 result = it;
152 break;
153 }
154 }
155 }
156
157 return result.patchIndex();
158}
patch_iterator endPatches()
patch_iterator beginPatches()
QPointF calculateLocalPosSVG2(const std::array< QPointF, 12 > &points, const QPointF &globalPoint)
calculates local (u,v) coordinates of the patch corresponding to globalPoint

References KisBezierMeshDetails::Mesh< NodeArg, PatchArg >::beginPatches(), KisBezierUtils::calculateLocalPosSVG2(), and KisBezierMeshDetails::Mesh< NodeArg, PatchArg >::endPatches().

◆ renderMesh()

void KisBezierGradientMesh::renderMesh ( const QPoint & dstQImageOffset,
QImage * dstImage ) const

Definition at line 188 of file KisBezierGradientMesh.cpp.

190{
191 for (auto it = beginPatches(); it != endPatches(); ++it) {
192 renderPatch(*it, dstQImageOffset, dstImage);
193 }
194}
static void renderPatch(const GradientMeshPatch &patch, const QPoint &dstQImageOffset, QImage *dstImage)

References KisBezierMeshDetails::Mesh< NodeArg, PatchArg >::beginPatches(), KisBezierMeshDetails::Mesh< NodeArg, PatchArg >::endPatches(), and renderPatch().

◆ renderPatch()

void KisBezierGradientMesh::renderPatch ( const GradientMeshPatch & patch,
const QPoint & dstQImageOffset,
QImage * dstImage )
static

Definition at line 160 of file KisBezierGradientMesh.cpp.

163{
164 QVector<QPointF> originalPointsLocal;
165 QVector<QPointF> transformedPointsLocal;
166 QSize gridSize;
167
168 patch.sampleRegularGridSVG2(gridSize, originalPointsLocal, transformedPointsLocal, QPointF(8,8));
169
170 const QRect dstBoundsI = patch.dstBoundingRect().toAlignedRect();
171 const QRect imageSize = QRect(dstQImageOffset, dstImage->size());
172 KIS_SAFE_ASSERT_RECOVER_NOOP(imageSize.contains(dstBoundsI));
173
174 {
175 QImageGradientOp polygonOp(patch.colors, *dstImage, dstQImageOffset);
176
177
181 gridSize,
182 originalPointsLocal,
183 transformedPointsLocal);
184
185 }
186}
#define KIS_SAFE_ASSERT_RECOVER_NOOP(cond)
Definition kis_assert.h:130
void iterateThroughGrid(PolygonOp &polygonOp, IndexesOp &indexesOp, const QSize &gridSize, const QVector< QPointF > &originalPoints, const QVector< QPointF > &transformedPoints)

References KisBezierGradientMeshDetail::GradientMeshPatch::colors, KisBezierPatch::dstBoundingRect(), GridIterationTools::iterateThroughGrid(), KIS_SAFE_ASSERT_RECOVER_NOOP, and KisBezierPatch::sampleRegularGridSVG2().

Friends And Related Symbol Documentation

◆ loadValue

KRITAIMAGE_EXPORT bool loadValue ( const QDomElement & parent,
const QString & tag,
KisBezierGradientMesh * mesh )
friend

Definition at line 112 of file KisBezierGradientMesh.cpp.

113{
114 QDomElement e;
115 if (!KisDomUtils::findOnlyElement(parent, tag, &e)) return false;
116
117 if (!KisDomUtils::Private::checkType(e, "gradient-mesh")) return false;
118
119 mesh->m_columns.clear();
120 mesh->m_rows.clear();
121 mesh->m_nodes.clear();
122
123 KisDomUtils::loadValue(e, "size", &mesh->m_size);
124 KisDomUtils::loadValue(e, "srcRect", &mesh->m_originalRect);
125 KisDomUtils::loadValue(e, "columns", &mesh->m_columns);
126 KisDomUtils::loadValue(e, "rows", &mesh->m_rows);
127 KisDomUtils::loadValue(e, "nodes", &mesh->m_nodes);
128
129 return true;
130}
std::vector< qreal > m_rows
std::vector< qreal > m_columns
std::vector< Node > m_nodes
bool checkType(const QDomElement &e, const QString &expectedType)
bool findOnlyElement(const QDomElement &parent, const QString &tag, QDomElement *el, QStringList *errorMessages)
bool loadValue(const QDomElement &e, float *v)

◆ saveValue

KRITAIMAGE_EXPORT void saveValue ( QDomElement * parent,
const QString & tag,
const KisBezierGradientMesh & mesh )
friend

Definition at line 97 of file KisBezierGradientMesh.cpp.

98{
99 QDomDocument doc = parent->ownerDocument();
100 QDomElement e = doc.createElement(tag);
101 parent->appendChild(e);
102
103 e.setAttribute("type", "gradient-mesh");
104
105 KisDomUtils::saveValue(&e, "size", mesh.m_size);
106 KisDomUtils::saveValue(&e, "srcRect", mesh.m_originalRect);
107 KisDomUtils::saveValue(&e, "columns", mesh.m_columns);
108 KisDomUtils::saveValue(&e, "rows", mesh.m_rows);
109 KisDomUtils::saveValue(&e, "nodes", mesh.m_nodes);
110}
void saveValue(QDomElement *parent, const QString &tag, const QSize &size)
ChildIterator< value_type, is_const > parent(const ChildIterator< value_type, is_const > &it)
Definition KisForest.h:327

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