55QVariant InstanceModel::data(
const QModelIndex &index,
int role)
const
61 int idx = index.row();
64 qWarning(
"InstanceModel: index out of range");
68 auto *instanceData =
reinterpret_cast<
const QQuick3DInstancing::InstanceTableEntry*>(m_instanceData.data()) + idx;
72 return instanceData->getColor();
74 return instanceData->getPosition();
76 return instanceData->getRotation();
78 return instanceData->getScale();
80 return instanceData->instanceData;
91void InstanceModel::setInstancing(QQuick3DInstancing *instancing)
93 if (m_instancing == instancing)
95 QObject::disconnect(m_tableConnection);
96 m_instancing = instancing;
97 m_tableConnection = QObject::connect(instancing, &QQuick3DInstancing::instanceTableChanged,
this, &InstanceModel::reset);
98 emit instancingChanged();
168void InstanceRepeater::setInstancing(QQuick3DInstancing *instancing)
170 if (m_model && m_model->instancing() == instancing)
173 m_model =
new InstanceModel(
this);
174 m_model->setInstancing(instancing);
175 setModel(QVariant::fromValue(m_model));
176 emit instancingChanged();
179void InstanceRepeater::initDelegate(
int index, QQuick3DNode *node)
182 auto *entry = m_model->instanceData(index);
184 node->setPosition(entry->getPosition());
185 node->setScale(entry->getScale());
186 node->setRotation(entry->getRotation());