16#ifndef QGSPOINTCLOUDLAYERCHUNKLOADER_P_H
17#define QGSPOINTCLOUDLAYERCHUNKLOADER_P_H
38#include <QFutureWatcher>
40#if QT_VERSION < QT_VERSION_CHECK( 6, 0, 0 )
41#include <Qt3DRender/QGeometry>
42#include <Qt3DRender/QBuffer>
44#include <Qt3DCore/QGeometry>
45#include <Qt3DCore/QBuffer>
58class QgsPointCloudLayerChunkLoaderFactory :
public QgsChunkLoaderFactory
67 QgsPointCloudLayerChunkLoaderFactory(
const Qgs3DRenderContext &context,
const QgsCoordinateTransform &coordinateTransform, QgsPointCloudIndex pc, QgsPointCloud3DSymbol *symbol,
double zValueScale,
double zValueOffset,
int pointBudget );
70 QgsChunkLoader *createChunkLoader( QgsChunkNode *node )
const override;
71 QgsChunkNode *createRootNode()
const override;
72 QVector<QgsChunkNode *> createChildren( QgsChunkNode *node )
const override;
73 int primitivesCount( QgsChunkNode *node )
const override;
74 Qgs3DRenderContext mRenderContext;
75 QgsCoordinateTransform mCoordinateTransform;
76 QgsPointCloudIndex mPointCloudIndex;
77 std::unique_ptr<QgsPointCloud3DSymbol> mSymbol;
78 double mZValueScale = 1.0;
79 double mZValueOffset = 0;
80 int mPointBudget = 1000000;
81 bool mTriangulate =
false;
94class QgsPointCloudLayerChunkLoader :
public QgsChunkLoader
103 QgsPointCloudLayerChunkLoader(
const QgsPointCloudLayerChunkLoaderFactory *factory, QgsChunkNode *node, std::unique_ptr<QgsPointCloud3DSymbol> symbol,
const QgsCoordinateTransform &coordinateTransform,
double zValueScale,
double zValueOffset );
104 ~QgsPointCloudLayerChunkLoader()
override;
106 void start()
override;
107 void cancel()
override;
108 Qt3DCore::QEntity *createEntity( Qt3DCore::QEntity *parent )
override;
111 const QgsPointCloudLayerChunkLoaderFactory *mFactory;
112 std::unique_ptr<QgsPointCloud3DSymbolHandler> mHandler;
113 QgsPointCloud3DRenderContext mContext;
114 QFutureWatcher<void> *mFutureWatcher =
nullptr;
128class QgsPointCloudLayerChunkedEntity :
public QgsChunkedEntity
132 explicit QgsPointCloudLayerChunkedEntity( Qgs3DMapSettings *map, QgsPointCloudLayer *pcl, QgsPointCloudIndex index,
const QgsCoordinateTransform &coordinateTransform, QgsPointCloud3DSymbol *symbol,
float maxScreenError,
bool showBoundingBoxes,
double zValueScale,
double zValueOffset,
int pointBudget );
134 QList<QgsRayCastHit> rayIntersection(
const QgsRay3D &ray,
const QgsRayCastContext &context )
const override;
136 ~QgsPointCloudLayerChunkedEntity()
override;
142 QgsPointCloudLayer *mLayer =
nullptr;
143 std::unique_ptr<QgsChunkUpdaterFactory> mChunkUpdaterFactory;