Krita Source Code Documentation
Loading...
Searching...
No Matches
multigridpatterngenerator.h
Go to the documentation of this file.
1/*
2 * This file is part of Krita
3 *
4 * SPDX-FileCopyrightText: 2020 Wolthera van Hövell tot Westerflier <griffinvalley@gmail.com>
5 *
6 * SPDX-License-Identifier: GPL-2.0-or-later
7 */
8
9#ifndef MULTIGRID_PATTERN_GENERATOR_H
10#define MULTIGRID_PATTERN_GENERATOR_H
11
12#include <QObject>
13#include <QVariant>
15
16class KisConfigWidget;
17
18/*
19 * This is de Bruijn's 1981 multigrid approach for generating aperiodic tilings
20 * of the plane with rhombs. At dimensions 5, offset .2 and .4 this generator
21 * makes penrose tilings.
22 * Other configurations show up in nature as quasicrystals.
23 *
24 * Based off the explanation of the algorithm here:
25 * http://www.physics.emory.edu/faculty/weeks//software/exquasi.html
26 * With extra explanation here: https://www.schoengeometry.com/c-infintil.html
27 */
28
29class KritaMultigridPatternGenerator : public QObject
30{
31 Q_OBJECT
32public:
33 KritaMultigridPatternGenerator(QObject *parent, const QVariantList &);
35};
36
38 QPolygonF shape;
41 int line1;
42 int line2;
43};
44
46{
47public:
48
57
59
61
63 const QSize& size,
64 const KisFilterConfigurationSP config,
65 KoUpdater* progressUpdater
66 ) const override;
67
68 static inline KoID id() {
69 return KoID("multigrid", i18n("Multigrid"));
70 }
71
73 KisConfigWidget * createConfigurationWidget(QWidget* parent, const KisPaintDeviceSP dev, bool useForMasks) const override;
74
75 // XXX: Fix the generation to work with tiles
76 virtual bool allowsSplittingIntoPatches() const override { return false; }
77
78private:
79 QList<KisMultiGridRhomb> generateRhombs(int lines, int divisions, qreal offset) const;
80
81 QList<int> getIndicesFromPoint(QPointF point, QList<qreal> angles, qreal offset) const;
82
86 QPointF getVertice(QList<int> indices, QList<qreal> angles) const;
87};
88
89#endif
virtual void generate(KisProcessingInformation dst, const QSize &size, const KisFilterConfigurationSP config, KoUpdater *progressUpdater) const =0
void generate(KisProcessingInformation dst, const QSize &size, const KisFilterConfigurationSP config, KoUpdater *progressUpdater) const override
KisConfigWidget * createConfigurationWidget(QWidget *parent, const KisPaintDeviceSP dev, bool useForMasks) const override
QPointF getVertice(QList< int > indices, QList< qreal > angles) const
virtual bool allowsSplittingIntoPatches() const override
QList< KisMultiGridRhomb > generateRhombs(int lines, int divisions, qreal offset) const
QList< int > getIndicesFromPoint(QPointF point, QList< qreal > angles, qreal offset) const
KisFilterConfigurationSP defaultConfiguration(KisResourcesInterfaceSP resourcesInterface) const override
Definition KoID.h:30
KritaMultigridPatternGenerator(QObject *parent, const QVariantList &)