29 QML_ADDED_IN_VERSION(6, 2)
30 Q_PROPERTY(QVariant from READ from WRITE setFrom NOTIFY fromChanged)
31 Q_PROPERTY(QVariant to READ to WRITE setTo NOTIFY toChanged)
32 Q_PROPERTY(
bool proportional READ proportional WRITE setProportional NOTIFY proportionalChanged)
33 QML_NAMED_ELEMENT(InstanceRange)
36 explicit QQuick3DInstanceRange(QQuick3DObject *parent =
nullptr);
37 ~QQuick3DInstanceRange() override {}
47 bool proportional()
const
49 return m_proportional;
53 void setFrom(QVariant from);
54 void setTo(QVariant to);
55 void setProportional(
bool proportional);
60 void proportionalChanged();
64 QSSGRenderGraphObject *updateSpatialNode(QSSGRenderGraphObject *) override
71 bool m_proportional =
false;
79 Q_PROPERTY(
int instanceCount READ instanceCount WRITE setInstanceCount NOTIFY instanceCountChanged)
80 Q_PROPERTY(QQuick3DInstanceRange *position READ position WRITE setPosition NOTIFY positionChanged)
81 Q_PROPERTY(QQuick3DInstanceRange *scale READ scale WRITE setScale NOTIFY scaleChanged)
82 Q_PROPERTY(QQuick3DInstanceRange *rotation READ rotation WRITE setRotation NOTIFY rotationChanged)
83 Q_PROPERTY(QQuick3DInstanceRange *color READ color WRITE setColor NOTIFY colorChanged)
84 Q_PROPERTY(ColorModel colorModel READ colorModel WRITE setColorModel NOTIFY colorModelChanged)
85 Q_PROPERTY(QQuick3DInstanceRange *customData READ customData WRITE setCustomData NOTIFY customDataChanged)
87 Q_PROPERTY(QVector3D gridSpacing READ gridSpacing WRITE setGridSpacing NOTIFY gridSpacingChanged FINAL REVISION(6, 9))
89 Q_PROPERTY(
int randomSeed READ randomSeed WRITE setRandomSeed NOTIFY randomSeedChanged)
91 QML_NAMED_ELEMENT(RandomInstancing)
92 QML_ADDED_IN_VERSION(6, 2)
95 enum class ColorModel { RGB, HSV, HSL };
98 explicit QQuick3DRandomInstancing(QQuick3DObject *parent =
nullptr);
99 ~QQuick3DRandomInstancing();
101 QByteArray getInstanceBuffer(
int *instanceCount) override;
103 int instanceCount()
const
105 return m_randomCount;
108 int randomSeed()
const
113 QQuick3DInstanceRange *position()
const
118 QQuick3DInstanceRange* scale()
const
123 QQuick3DInstanceRange* rotation()
const
128 QQuick3DInstanceRange* color()
const
133 QQuick3DInstanceRange* customData()
const
138 ColorModel colorModel()
const
143 QVector3D gridSpacing()
const;
144 void setGridSpacing(
const QVector3D &newGridSpacing);
147 void setInstanceCount(
int instanceCount);
148 void setRandomSeed(
int randomSeed);
150 void setPosition(QQuick3DInstanceRange *position);
151 void setScale(QQuick3DInstanceRange *scale);
152 void setRotation(QQuick3DInstanceRange *rotation);
153 void setColor(QQuick3DInstanceRange *color);
154 void setCustomData(QQuick3DInstanceRange *customData);
155 void setColorModel(ColorModel colorModel);
158 void instanceCountChanged();
159 void randomSeedChanged();
160 void positionChanged();
162 void rotationChanged();
164 void customDataChanged();
165 void colorModelChanged();
167 void gridSpacingChanged();
173 void generateInstanceTable();
174 int m_randomCount = 0;
175 int m_randomSeed = -1;
177 bool m_gridMode =
false;
178 QByteArray m_instanceData;
179 QQuick3DInstanceRange *m_position =
nullptr;
180 QQuick3DInstanceRange *m_scale =
nullptr;
181 QQuick3DInstanceRange *m_rotation =
nullptr;
182 QQuick3DInstanceRange *m_color =
nullptr;
183 QQuick3DInstanceRange *m_customData =
nullptr;
184 ColorModel m_colorModel = ColorModel::RGB;
185 QVector3D m_gridSpacing;
static QColor genRandom(const QColor &from, const QColor &to, bool proportional, QQuick3DRandomInstancing::ColorModel colorModel, QRandomGenerator *rgen)