12 #ifndef hifi_OctreeQuery_h
13 #define hifi_OctreeQuery_h
15 #include <QtCore/QJsonObject>
16 #include <QtCore/QReadWriteLock>
19 #include <shared/ConicalViewFrustum.h>
21 #include "OctreeConstants.h"
23 class OctreeQuery :
public NodeData {
27 OctreeQuery(
bool randomizeConnectionID =
false);
28 virtual ~OctreeQuery() {}
30 OctreeQuery(
const OctreeQuery&) =
delete;
31 OctreeQuery& operator=(
const OctreeQuery&) =
delete;
33 int getBroadcastData(
unsigned char* destinationBuffer);
34 int parseData(ReceivedMessage& message)
override;
36 bool hasConicalViews()
const { QMutexLocker lock(&_conicalViewsLock);
return !_conicalViews.empty(); }
37 void setConicalViews(ConicalViewFrustums views)
38 { QMutexLocker lock(&_conicalViewsLock); _conicalViews = views; }
39 void clearConicalViews() { QMutexLocker lock(&_conicalViewsLock); _conicalViews.clear(); }
42 QJsonObject getJSONParameters() { QReadLocker locker { &_jsonParametersLock };
return _jsonParameters; }
43 void setJSONParameters(
const QJsonObject& jsonParameters)
44 { QWriteLocker locker { &_jsonParametersLock }; _jsonParameters = jsonParameters; }
47 int getMaxQueryPacketsPerSecond()
const {
return _maxQueryPPS; }
48 float getOctreeSizeScale()
const {
return _octreeElementSizeScale; }
49 int getBoundaryLevelAdjust()
const {
return _boundaryLevelAdjust; }
51 void incrementConnectionID() { ++_connectionID; }
53 bool hasReceivedFirstQuery()
const {
return _hasReceivedFirstQuery; }
56 bool wantReportInitialCompletion()
const {
return _reportInitialCompletion; }
57 void setReportInitialCompletion(
bool reportInitialCompletion) { _reportInitialCompletion = reportInitialCompletion; }
60 void incomingConnectionIDChanged();
63 void setMaxQueryPacketsPerSecond(
int maxQueryPPS) { _maxQueryPPS = maxQueryPPS; }
64 void setOctreeSizeScale(
float octreeSizeScale) { _octreeElementSizeScale = octreeSizeScale; }
65 void setBoundaryLevelAdjust(
int boundaryLevelAdjust) { _boundaryLevelAdjust = boundaryLevelAdjust; }
68 mutable QMutex _conicalViewsLock;
69 ConicalViewFrustums _conicalViews;
72 int _maxQueryPPS = DEFAULT_MAX_OCTREE_PPS;
73 float _octreeElementSizeScale = DEFAULT_OCTREE_SIZE_SCALE;
74 int _boundaryLevelAdjust = 0;
76 uint16_t _connectionID;
78 QJsonObject _jsonParameters;
79 QReadWriteLock _jsonParametersLock;
81 enum OctreeQueryFlags : uint16_t { NoFlags = 0x0, WantInitialCompletion = 0x1 };
82 friend OctreeQuery::OctreeQueryFlags operator|=(OctreeQuery::OctreeQueryFlags& lhs,
const int rhs);
84 bool _hasReceivedFirstQuery {
false };
85 bool _reportInitialCompletion {
false };