27 QML_ADDED_IN_VERSION(6, 2)
28 Q_PROPERTY(QVariant from READ from WRITE setFrom NOTIFY fromChanged)
29 Q_PROPERTY(QVariant to READ to WRITE setTo NOTIFY toChanged)
30 Q_PROPERTY(
bool proportional READ proportional WRITE setProportional NOTIFY proportionalChanged)
31 QML_NAMED_ELEMENT(InstanceRange)
34 explicit QQuick3DInstanceRange(QQuick3DObject *parent =
nullptr);
35 ~QQuick3DInstanceRange() override {}
45 bool proportional()
const
47 return m_proportional;
51 void setFrom(QVariant from);
52 void setTo(QVariant to);
53 void setProportional(
bool proportional);
58 void proportionalChanged();
62 QSSGRenderGraphObject *updateSpatialNode(QSSGRenderGraphObject *) override
69 bool m_proportional =
false;
77 Q_PROPERTY(
int instanceCount READ instanceCount WRITE setInstanceCount NOTIFY instanceCountChanged)
78 Q_PROPERTY(QQuick3DInstanceRange *position READ position WRITE setPosition NOTIFY positionChanged)
79 Q_PROPERTY(QQuick3DInstanceRange *scale READ scale WRITE setScale NOTIFY scaleChanged)
80 Q_PROPERTY(QQuick3DInstanceRange *rotation READ rotation WRITE setRotation NOTIFY rotationChanged)
81 Q_PROPERTY(QQuick3DInstanceRange *color READ color WRITE setColor NOTIFY colorChanged)
82 Q_PROPERTY(ColorModel colorModel READ colorModel WRITE setColorModel NOTIFY colorModelChanged)
83 Q_PROPERTY(QQuick3DInstanceRange *customData READ customData WRITE setCustomData NOTIFY customDataChanged)
85 Q_PROPERTY(QVector3D gridSpacing READ gridSpacing WRITE setGridSpacing NOTIFY gridSpacingChanged FINAL REVISION(6, 9))
87 Q_PROPERTY(
int randomSeed READ randomSeed WRITE setRandomSeed NOTIFY randomSeedChanged)
89 QML_NAMED_ELEMENT(RandomInstancing)
90 QML_ADDED_IN_VERSION(6, 2)
93 enum class ColorModel { RGB, HSV, HSL };
96 explicit QQuick3DRandomInstancing(QQuick3DObject *parent =
nullptr);
97 ~QQuick3DRandomInstancing();
99 QByteArray getInstanceBuffer(
int *instanceCount) override;
101 int instanceCount()
const
103 return m_randomCount;
106 int randomSeed()
const
111 QQuick3DInstanceRange *position()
const
116 QQuick3DInstanceRange* scale()
const
121 QQuick3DInstanceRange* rotation()
const
126 QQuick3DInstanceRange* color()
const
131 QQuick3DInstanceRange* customData()
const
136 ColorModel colorModel()
const
141 QVector3D gridSpacing()
const;
142 void setGridSpacing(
const QVector3D &newGridSpacing);
145 void setInstanceCount(
int instanceCount);
146 void setRandomSeed(
int randomSeed);
148 void setPosition(QQuick3DInstanceRange *position);
149 void setScale(QQuick3DInstanceRange *scale);
150 void setRotation(QQuick3DInstanceRange *rotation);
151 void setColor(QQuick3DInstanceRange *color);
152 void setCustomData(QQuick3DInstanceRange *customData);
153 void setColorModel(ColorModel colorModel);
156 void instanceCountChanged();
157 void randomSeedChanged();
158 void positionChanged();
160 void rotationChanged();
162 void customDataChanged();
163 void colorModelChanged();
165 void gridSpacingChanged();
171 void generateInstanceTable();
172 int m_randomCount = 0;
173 int m_randomSeed = -1;
175 bool m_gridMode =
false;
176 QByteArray m_instanceData;
177 QQuick3DInstanceRange *m_position =
nullptr;
178 QQuick3DInstanceRange *m_scale =
nullptr;
179 QQuick3DInstanceRange *m_rotation =
nullptr;
180 QQuick3DInstanceRange *m_color =
nullptr;
181 QQuick3DInstanceRange *m_customData =
nullptr;
182 ColorModel m_colorModel = ColorModel::RGB;
183 QVector3D m_gridSpacing;
static QColor genRandom(const QColor &from, const QColor &to, bool proportional, QQuick3DRandomInstancing::ColorModel colorModel, QRandomGenerator *rgen)