37using namespace Qt::StringLiterals;
46struct QgsChunkListEntry;
48class QgsChunkQueueJob;
49class QgsChunkQueueJobFactory;
69 QgsChunkNodeId(
int _d = -1,
int _x = -1,
int _y = -1,
int _z = -1 )
70 : d( _d ), x( _x ), y( _y ), z( _z ) {}
77 QgsChunkNodeId(
long long id )
85 long long uniqueId = -1;
91 return QString::number( uniqueId );
93 return u
"%1/%2/%3"_s.arg( d ).arg( x ).arg( y );
95 return u
"%1/%2/%3/%4"_s.arg( d ).arg( x ).arg( y ).arg( z );
98 bool operator==(
const QgsChunkNodeId &other )
const
100 return ( uniqueId == -1 && other.uniqueId == -1 && d == other.d && x == other.x && y == other.y && z == other.z )
101 || ( uniqueId != -1 && uniqueId == other.uniqueId );
104 bool operator!=(
const QgsChunkNodeId &other )
const
106 return !( *
this == other );
130 QgsChunkNode(
const QgsChunkNodeId &nodeId,
const QgsBox3D &box3D,
float error, QgsChunkNode *parent =
nullptr );
163 QgsBox3D box3D()
const {
return mBox3D; }
165 float error()
const {
return mError; }
167 QgsChunkNodeId tileId()
const {
return mNodeId; }
169 QgsChunkNode *parent()
const {
return mParent; }
171 int childCount()
const {
return mChildren.count(); }
173 QgsChunkNode *
const *children()
const {
return mChildren.constData(); }
177 State state()
const {
return mState; }
180 QgsChunkListEntry *loaderQueueEntry()
const {
return mLoaderQueueEntry; }
182 QgsChunkListEntry *replacementQueueEntry()
const {
return mReplacementQueueEntry; }
184 QgsChunkLoader *loader()
const {
return mLoader; }
186 Qt3DCore::QEntity *entity()
const {
return mEntity; }
188 QgsChunkQueueJob *updater()
const {
return mUpdater; }
191 bool allChildChunksResident( QTime currentTime )
const;
194 bool hasChildrenPopulated()
const {
return mChildrenPopulated; }
197 void populateChildren(
const QVector<QgsChunkNode *> &children );
206 QList<QgsChunkNode *> descendants();
213 void setQueuedForLoad( QgsChunkListEntry *entry );
216 void cancelQueuedForLoad();
219 void setLoading( QgsChunkLoader *chunkLoader );
222 void cancelLoading();
225 void setLoaded( Qt3DCore::QEntity *mEntity );
231 void setQueuedForUpdate( QgsChunkListEntry *entry, QgsChunkQueueJobFactory *updateJobFactory );
234 void cancelQueuedForUpdate();
240 void cancelUpdating();
246 void replaceEntity( Qt3DCore::QEntity *newEntity );
249 void setExactBox3D(
const QgsBox3D &box3D );
258 void updateParentBoundingBoxesRecursively()
const;
261 void setHasData(
bool hasData ) { mHasData = hasData; }
263 bool hasData()
const {
return mHasData; }
269 QgsChunkNodeId mNodeId;
271 QgsChunkNode *mParent;
272 QVector<QgsChunkNode *> mChildren;
273 bool mChildrenPopulated =
false;
275 State mState = Skeleton;
279 QgsChunkListEntry *mLoaderQueueEntry =
nullptr;
280 QgsChunkListEntry *mReplacementQueueEntry =
nullptr;
282 QgsChunkLoader *mLoader =
nullptr;
283 Qt3DCore::QEntity *mEntity =
nullptr;
285 QgsChunkQueueJobFactory *mUpdaterFactory =
nullptr;
286 QgsChunkQueueJob *mUpdater =
nullptr;
288 QTime mEntityCreatedTime;
289 bool mHasData =
true;
TileRefinementProcess
Tiled scene tile refinement processes.
@ Replacement
When tile is refined then its children should be used in place of itself.
bool operator==(const QgsFeatureIterator &fi1, const QgsFeatureIterator &fi2)
bool operator!=(const QgsFeatureIterator &fi1, const QgsFeatureIterator &fi2)