Make 3D objects pickable

Mark 3D objects implicitly pickable upon initialization so that they
receive mouse clicks without having to declare the pickable property
in qml.

Task-number: QDS-1124
Change-Id: Ib8ec5415097c1a9bf57b8965a3fca0c3665f3732
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
Mahmoud Badri
2019-10-24 15:17:47 +03:00
parent 1fe204565a
commit b83b93fb7f
2 changed files with 19 additions and 0 deletions

View File

@@ -52,6 +52,23 @@ Quick3DNodeInstance::~Quick3DNodeInstance()
{
}
void Quick3DNodeInstance::initialize(const ObjectNodeInstance::Pointer &objectNodeInstance,
InstanceContainer::NodeFlags flags)
{
ObjectNodeInstance::initialize(objectNodeInstance, flags);
#ifdef QUICK3D_MODULE
if (quick3DNode()) {
QQuick3DObject::Type nodeType = quick3DNode()->type();
if (nodeType == QQuick3DObject::Camera || nodeType == QQuick3DObject::Light
|| nodeType == QQuick3DObject::Model || nodeType == QQuick3DObject::Image
|| nodeType == QQuick3DObject::Text) {
setPropertyVariant("pickable", true); // allow 3D objects to receive mouse clicks
}
}
#endif
}
Qt5NodeInstanceServer *Quick3DNodeInstance::qt5NodeInstanceServer() const
{
return qobject_cast<Qt5NodeInstanceServer *>(nodeInstanceServer());

View File

@@ -44,6 +44,8 @@ public:
~Quick3DNodeInstance() override;
static Pointer create(QObject *objectToBeWrapped);
void setHideInEditor(bool b) override;
void initialize(const ObjectNodeInstance::Pointer &objectNodeInstance,
InstanceContainer::NodeFlags flags) override;
protected:
explicit Quick3DNodeInstance(QObject *node);