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

#include <KisMagneticWorker.h>

Public Member Functions

QVector< QPointF > computeEdge (int bounds, QPoint start, QPoint end, qreal radius)
 
qreal intensity (QPoint pt)
 
 KisMagneticWorker (const KisPaintDeviceSP &dev)
 
void saveTheImage (vQPointF points)
 

Private Attributes

KisMagneticGraphm_graph {nullptr}
 
KisMagneticLazyTiles m_lazyTileFilter
 

Detailed Description

Definition at line 30 of file KisMagneticWorker.h.

Constructor & Destructor Documentation

◆ KisMagneticWorker()

KisMagneticWorker::KisMagneticWorker ( const KisPaintDeviceSP & dev)

Definition at line 181 of file KisMagneticWorker.cc.

181 :
183{ }
KisMagneticLazyTiles m_lazyTileFilter

Member Function Documentation

◆ computeEdge()

QVector< QPointF > KisMagneticWorker::computeEdge ( int bounds,
QPoint start,
QPoint end,
qreal radius )

Definition at line 185 of file KisMagneticWorker.cc.

186{
187 QRect rect;
191
192 VertexDescriptor goal(end);
193 VertexDescriptor start(begin);
194
196
197 // How many maps does it require?
198 // Take a look here, if it doesn't make sense, https://www.boost.org/doc/libs/1_70_0/libs/graph/doc/astar_search.html
199 PredecessorMap pmap;
200 DistanceMap dmap(std::numeric_limits<double>::max());
201 dmap[start] = 0;
202 std::map<VertexDescriptor, double> rmap;
203 std::map<VertexDescriptor, boost::default_color_type> cmap;
204 std::map<VertexDescriptor, double> imap;
205 WeightMap wmap(*m_graph);
206 AStarHeuristic heuristic(goal);
207 QVector<QPointF> result;
208
209 try {
210 boost::astar_search_no_init(
211 *m_graph, start, heuristic,
212 boost::visitor(AStarGoalVisitor(goal))
213 .distance_map(boost::associative_property_map<DistanceMap>(dmap))
214 .predecessor_map(boost::ref(pmap))
215 .weight_map(boost::associative_property_map<WeightMap>(wmap))
216 .vertex_index_map(boost::associative_property_map<std::map<VertexDescriptor, double> >(imap))
217 .rank_map(boost::associative_property_map<std::map<VertexDescriptor, double> >(rmap))
218 .color_map(boost::associative_property_map<std::map<VertexDescriptor, boost::default_color_type> >
219 (cmap))
220 .distance_combine(std::plus<double>())
221 .distance_compare(std::less<double>())
222 );
223 } catch (GoalFound const &) {
224 for (VertexDescriptor u = goal; u != start; u = pmap[u]) {
225 result.push_front(QPointF(u.x, u.y));
226 }
227 }
228
229 result.push_front(QPoint(start.x, start.y));
230
231 return result;
232} // KisMagneticWorker::computeEdge
qreal u
KisPaintDeviceSP device()
void filter(qreal radius, QRect &rect)
KisMagneticGraph * m_graph
#define bounds(x, a, b)
T kisGrowRect(const T &rect, U offset)
Definition kis_global.h:186
void accumulateBounds(const Point &pt, Rect *bounds)

References KisAlgebra2D::accumulateBounds(), bounds, KisMagneticLazyTiles::device(), KisMagneticLazyTiles::filter(), kisGrowRect(), m_graph, m_lazyTileFilter, u, VertexDescriptor::x, and VertexDescriptor::y.

◆ intensity()

qreal KisMagneticWorker::intensity ( QPoint pt)

Definition at line 234 of file KisMagneticWorker.cc.

235{
237}
quint8 getIntensity(VertexDescriptor pt)

References KisMagneticGraph::getIntensity(), and m_graph.

◆ saveTheImage()

void KisMagneticWorker::saveTheImage ( vQPointF points)

Definition at line 239 of file KisMagneticWorker.cc.

240{
242
243 const QPointF offset = m_lazyTileFilter.device()->exactBounds().topLeft();
244 for (QPointF &pt : points) {
245 pt -= offset;
246 }
247
248 img.convertTo(QImage::Format_ARGB32);
249 QPainter gc(&img);
250
251 QPainterPath path;
252
253 for (int i = 0; i < points.size(); i++) {
254 if (i == 0) {
255 path.moveTo(points[i]);
256 } else {
257 path.lineTo(points[i]);
258 }
259 }
260
261 gc.setPen(Qt::blue);
262 gc.drawPath(path);
263
264 gc.setPen(Qt::green);
265 gc.drawEllipse(points[0], 3, 3);
266 gc.setPen(Qt::red);
267 gc.drawEllipse(points[points.count() - 1], 2, 2);
268
269 for (QRect &r : m_lazyTileFilter.tiles() ) {
270 gc.drawRect(r);
271 }
272
273 img.save("result.png");
274} // KisMagneticWorker::saveTheImage
QRect exactBounds() const
QImage convertToQImage(const KoColorProfile *dstProfile, qint32 x, qint32 y, qint32 w, qint32 h, KoColorConversionTransformation::Intent renderingIntent=KoColorConversionTransformation::internalRenderingIntent(), KoColorConversionTransformation::ConversionFlags conversionFlags=KoColorConversionTransformation::internalConversionFlags()) const

References KisPaintDevice::convertToQImage(), KisMagneticLazyTiles::device(), KisPaintDevice::exactBounds(), m_lazyTileFilter, and KisMagneticLazyTiles::tiles().

Member Data Documentation

◆ m_graph

KisMagneticGraph* KisMagneticWorker::m_graph {nullptr}
private

Definition at line 40 of file KisMagneticWorker.h.

40{nullptr};

◆ m_lazyTileFilter

KisMagneticLazyTiles KisMagneticWorker::m_lazyTileFilter
private

Definition at line 39 of file KisMagneticWorker.h.


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