57QVariant InstanceModel::data(
const QModelIndex &index,
int role)
const
63 int idx = index.row();
66 qWarning(
"InstanceModel: index out of range");
70 auto *instanceData =
reinterpret_cast<
const QQuick3DInstancing::InstanceTableEntry*>(m_instanceData.data()) + idx;
74 return instanceData->getColor();
76 return instanceData->getPosition();
78 return instanceData->getRotation();
80 return instanceData->getScale();
82 return instanceData->instanceData;
93void InstanceModel::setInstancing(QQuick3DInstancing *instancing)
95 if (m_instancing == instancing)
97 QObject::disconnect(m_tableConnection);
98 m_instancing = instancing;
99 m_tableConnection = QObject::connect(instancing, &QQuick3DInstancing::instanceTableChanged,
this, &InstanceModel::reset);
100 emit instancingChanged();
170void InstanceRepeater::setInstancing(QQuick3DInstancing *instancing)
172 if (m_model && m_model->instancing() == instancing)
175 m_model =
new InstanceModel(
this);
176 m_model->setInstancing(instancing);
177 setModel(QVariant::fromValue(m_model));
178 emit instancingChanged();
181void InstanceRepeater::initDelegate(
int index, QQuick3DNode *node)
184 auto *entry = m_model->instanceData(index);
186 node->setPosition(entry->getPosition());
187 node->setScale(entry->getScale());
188 node->setRotation(entry->getRotation());