diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2018-12-10 10:17:25 +0100 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2018-12-12 05:40:40 +0000 |
commit | e3fbebe61111dfe670ffe19c96e313157df7331f (patch) | |
tree | 2b61cb59a84e4d31350cb1049bd71efc7a95941e /src/render/picking/qobjectpicker.cpp | |
parent | c9ce0deeb8f2bb79c446e41584f753f1b1bfe17f (diff) |
QObjectPicker and QPickingSettings NearestPriorityPick picking mode
Add a new priority property on QObjectPicker and a new QPickingSettings mode.
This will select the result with the highest priority if there are several results
on a given ray. If we have several results with identical properties, the result
with the closest distance is selected.
[ChangeLog][Qt3DRender] QObjectPicker: add a priority based result selection
Change-Id: I7af12db6e163c3c2d9dad696e6d9f9bbbee064ed
Reviewed-by: Mike Krus <mike.krus@kdab.com>
Diffstat (limited to 'src/render/picking/qobjectpicker.cpp')
-rw-r--r-- | src/render/picking/qobjectpicker.cpp | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/render/picking/qobjectpicker.cpp b/src/render/picking/qobjectpicker.cpp index c3671d018..a0b6d8dcd 100644 --- a/src/render/picking/qobjectpicker.cpp +++ b/src/render/picking/qobjectpicker.cpp @@ -266,6 +266,23 @@ void QObjectPicker::setDragEnabled(bool dragEnabled) } /*! + * Sets the picker's priority to \a priority. This is used when the pick result + * mode on QPickingSettings is set to QPickingSettings::NearestPriorityPick. + * Picking results are sorted by highest priority and shortest picking + * distance. + * + * \since 5.13 + */ +void QObjectPicker::setPriority(int priority) +{ + Q_D(QObjectPicker); + if (priority != d->m_priority) { + d->m_priority = priority; + emit priorityChanged(priority); + } +} + +/*! \qmlproperty bool Qt3D.Render::ObjectPicker::dragEnabled */ /*! @@ -312,6 +329,25 @@ bool QObjectPicker::isPressed() const return d->m_pressed; } +/*! + \qmlproperty int Qt3D.Render::ObjectPicker::priority + + The priority to be used when filtering pick results by priority when + PickingSettings.pickResultMode is set to PickingSettings.PriorityPick. +*/ +/*! + \property Qt3DRender::QObjectPicker::priority + + The priority to be used when filtering pick results by priority when + QPickingSettings::pickResultMode is set to + QPickingSettings::NearestPriorityPick. +*/ +int QObjectPicker::priority() const +{ + Q_D(const QObjectPicker); + return d->m_priority; +} + /*! \internal */ void QObjectPicker::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &change) { @@ -465,6 +501,7 @@ Qt3DCore::QNodeCreatedChangeBasePtr QObjectPicker::createNodeCreationChange() co Q_D(const QObjectPicker); data.hoverEnabled = d->m_hoverEnabled; data.dragEnabled = d->m_dragEnabled; + data.priority = d->m_priority; return creationChange; } |