summaryrefslogtreecommitdiffstats
path: root/src/render/jobs/pickboundingvolumeutils_p.h
diff options
context:
space:
mode:
authorMike Krus <mike.krus@kdab.com>2017-02-17 23:11:55 +0000
committerMike Krus <mike.krus@kdab.com>2017-05-26 09:58:32 +0000
commita441bd7d3d83284f68f1d8addedc93989a18cfeb (patch)
treee84f875ea9efa2e6cf5c20070e8a19daac1c1c70 /src/render/jobs/pickboundingvolumeutils_p.h
parent498a2b1c90616c559aa696757685ac624899783e (diff)
Refactor job to prepare for line and point picking
This moves much of the job utils into private code, simplifies the various class types, clarifies names to avoid clashes and simplifies some APIs. Introduces changes in headers requiring extra includes in various files. Task-number: QTBUG-58071 Change-Id: I20a8251abcef140d9d71b372a66282e242a21ad2 Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/render/jobs/pickboundingvolumeutils_p.h')
-rw-r--r--src/render/jobs/pickboundingvolumeutils_p.h58
1 files changed, 14 insertions, 44 deletions
diff --git a/src/render/jobs/pickboundingvolumeutils_p.h b/src/render/jobs/pickboundingvolumeutils_p.h
index 08615c094..eb272ce41 100644
--- a/src/render/jobs/pickboundingvolumeutils_p.h
+++ b/src/render/jobs/pickboundingvolumeutils_p.h
@@ -108,33 +108,7 @@ private:
mutable bool m_needsRefresh;
};
-class Q_AUTOTEST_EXPORT CollisionVisitor : public TrianglesVisitor
-{
-public:
- typedef QVector<RayCasting::QCollisionQueryResult::Hit> HitList;
- HitList hits;
-
- CollisionVisitor(NodeManagers* manager, const Entity *root, const RayCasting::QRay3D& ray,
- bool frontFaceRequested, bool backFaceRequested)
- : TrianglesVisitor(manager), m_root(root), m_ray(ray), m_triangleIndex(0)
- , m_frontFaceRequested(frontFaceRequested), m_backFaceRequested(backFaceRequested)
- {
- }
-
-private:
- const Entity *m_root;
- RayCasting::QRay3D m_ray;
- uint m_triangleIndex;
- bool m_frontFaceRequested;
- bool m_backFaceRequested;
-
- void visit(uint andx, const QVector3D &a,
- uint bndx, const QVector3D &b,
- uint cndx, const QVector3D &c) Q_DECL_OVERRIDE;
- bool intersectsSegmentTriangle(uint andx, const QVector3D &a,
- uint bndx, const QVector3D &b,
- uint cndx, const QVector3D &c);
-};
+typedef QVector<RayCasting::QCollisionQueryResult::Hit> HitList;
class Q_AUTOTEST_EXPORT HierarchicalEntityPicker
{
@@ -142,12 +116,12 @@ public:
explicit HierarchicalEntityPicker(const RayCasting::QRay3D &ray);
bool collectHits(Entity *root);
- inline CollisionVisitor::HitList hits() const { return m_hits; }
+ inline HitList hits() const { return m_hits; }
inline QVector<Entity *> entities() const { return m_entities; }
private:
RayCasting::QRay3D m_ray;
- CollisionVisitor::HitList m_hits;
+ HitList m_hits;
QVector<Entity *> m_entities;
};
@@ -159,17 +133,21 @@ struct Q_AUTOTEST_EXPORT AbstractCollisionGathererFunctor
NodeManagers *m_manager;
RayCasting::QRay3D m_ray;
+ virtual HitList computeHits(const QVector<Entity *> &entities, bool allHitsRequested) = 0;
+
// This define is required to work with QtConcurrent
- typedef CollisionVisitor::HitList result_type;
- result_type operator ()(const Entity *entity) const;
- virtual result_type pick(RayCasting::QAbstractCollisionQueryService *rayCasting, const Entity *entity) const = 0;
+ typedef HitList result_type;
+ HitList operator ()(const Entity *entity) const;
+ virtual HitList pick(const Entity *entity) const = 0;
- static void sortHits(CollisionVisitor::HitList &results);
+ bool rayHitsEntity(const Entity *entity) const;
+ static void sortHits(HitList &results);
};
struct Q_AUTOTEST_EXPORT EntityCollisionGathererFunctor : public AbstractCollisionGathererFunctor
{
- result_type pick(RayCasting::QAbstractCollisionQueryService *rayCasting, const Entity *entity) const Q_DECL_OVERRIDE;
+ HitList computeHits(const QVector<Entity *> &entities, bool allHitsRequested) Q_DECL_OVERRIDE;
+ HitList pick(const Entity *entity) const Q_DECL_OVERRIDE;
};
struct Q_AUTOTEST_EXPORT TriangleCollisionGathererFunctor : public AbstractCollisionGathererFunctor
@@ -177,18 +155,10 @@ struct Q_AUTOTEST_EXPORT TriangleCollisionGathererFunctor : public AbstractColli
bool m_frontFaceRequested;
bool m_backFaceRequested;
- result_type pick(RayCasting::QAbstractCollisionQueryService *rayCasting, const Entity *entity) const Q_DECL_OVERRIDE;
-
- bool rayHitsEntity(RayCasting::QAbstractCollisionQueryService *rayCasting, const Entity *entity) const;
+ HitList computeHits(const QVector<Entity *> &entities, bool allHitsRequested) Q_DECL_OVERRIDE;
+ HitList pick(const Entity *entity) const Q_DECL_OVERRIDE;
};
-Q_AUTOTEST_EXPORT QVector<Entity *> gatherEntities(Entity *entity, QVector<Entity *> entities);
-
-Q_AUTOTEST_EXPORT CollisionVisitor::HitList reduceToFirstHit(CollisionVisitor::HitList &result, const CollisionVisitor::HitList &intermediate);
-
-// Unordered
-Q_AUTOTEST_EXPORT CollisionVisitor::HitList reduceToAllHits(CollisionVisitor::HitList &results, const CollisionVisitor::HitList &intermediate);
-
} // PickingUtils
} // Render