1// Copyright (C) 2017 Klaralvdalens Datakonsult AB (KDAB).
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QT3DRENDER_RENDER_FILTERPROXIMITYDISTANCEJOB_P_H
5#define QT3DRENDER_RENDER_FILTERPROXIMITYDISTANCEJOB_P_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists for the convenience
12// of other Qt classes. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#include <Qt3DCore/qaspectjob.h>
19#include <Qt3DCore/qnodeid.h>
20#include <Qt3DRender/private/qt3drender_global_p.h>
21
22QT_BEGIN_NAMESPACE
23
24namespace Qt3DRender {
25
26namespace Render {
27
28class Entity;
29class NodeManagers;
30
31class Q_3DRENDERSHARED_PRIVATE_EXPORT FilterProximityDistanceJob : public Qt3DCore::QAspectJob
32{
33public:
34 FilterProximityDistanceJob();
35 ~FilterProximityDistanceJob();
36
37 inline void setManager(NodeManagers *manager) { m_manager = manager; }
38 inline void setProximityFilterIds(const Qt3DCore::QNodeIdVector &proximityFilterIds) { m_proximityFilterIds = proximityFilterIds; }
39 inline bool hasProximityFilter() const { return !m_proximityFilterIds.empty(); }
40
41 // QAspectJob interface
42 void run() final;
43 const std::vector<Entity *> &filteredEntities() const { return m_filteredEntities; }
44 bool isRequired() override;
45
46#if defined (QT_BUILD_INTERNAL)
47 // For unit testing
48 inline Qt3DCore::QNodeIdVector proximityFilterIds() const { return m_proximityFilterIds; }
49 inline NodeManagers *manager() const { return m_manager; }
50#endif
51
52private:
53 void selectAllEntities();
54 void filterEntities(const std::vector<Entity *> &entitiesToFilter);
55
56 NodeManagers *m_manager;
57 Qt3DCore::QNodeIdVector m_proximityFilterIds;
58 Entity *m_targetEntity;
59 float m_distanceThresholdSquared;
60 std::vector<Entity *> m_filteredEntities;
61};
62
63typedef QSharedPointer<FilterProximityDistanceJob> FilterProximityDistanceJobPtr;
64
65} // Render
66
67} // Qt3DRender
68
69QT_END_NAMESPACE
70
71#endif // QT3DRENDER_RENDER_FILTERPROXIMITYDISTANCEJOB_P_H
72

source code of qt3d/src/render/jobs/filterproximitydistancejob_p.h