16#ifndef QGSPOINTCLOUDLAYERCHUNKLOADER_P_H
17#define QGSPOINTCLOUDLAYERCHUNKLOADER_P_H
38#include <QFutureWatcher>
40#include <Qt3DCore/QBuffer>
41#include <Qt3DCore/QGeometry>
52class QgsPointCloudLayerChunkLoaderFactory :
public QgsChunkLoaderFactory
61 QgsPointCloudLayerChunkLoaderFactory(
const Qgs3DRenderContext &context,
const QgsCoordinateTransform &coordinateTransform, QgsPointCloudIndex pc, QgsPointCloud3DSymbol *symbol,
double zValueScale,
double zValueOffset,
int pointBudget );
64 QgsChunkLoader *createChunkLoader( QgsChunkNode *node )
const override;
65 QgsChunkNode *createRootNode()
const override;
66 QVector<QgsChunkNode *> createChildren( QgsChunkNode *node )
const override;
67 int primitivesCount( QgsChunkNode *node )
const override;
68 Qgs3DRenderContext mRenderContext;
69 QgsCoordinateTransform mCoordinateTransform;
70 QgsPointCloudIndex mPointCloudIndex;
71 std::unique_ptr<QgsPointCloud3DSymbol> mSymbol;
72 double mZValueScale = 1.0;
73 double mZValueOffset = 0;
74 int mPointBudget = 1000000;
75 bool mTriangulate =
false;
88class QgsPointCloudLayerChunkLoader :
public QgsChunkLoader
97 QgsPointCloudLayerChunkLoader(
const QgsPointCloudLayerChunkLoaderFactory *factory, QgsChunkNode *node, std::unique_ptr<QgsPointCloud3DSymbol> symbol,
const QgsCoordinateTransform &coordinateTransform,
double zValueScale,
double zValueOffset );
98 ~QgsPointCloudLayerChunkLoader()
override;
100 void start()
override;
101 void cancel()
override;
102 Qt3DCore::QEntity *createEntity( Qt3DCore::QEntity *parent )
override;
105 const QgsPointCloudLayerChunkLoaderFactory *mFactory;
106 std::unique_ptr<QgsPointCloud3DSymbolHandler> mHandler;
107 QgsPointCloud3DRenderContext mContext;
108 QFutureWatcher<void> *mFutureWatcher =
nullptr;
122class QgsPointCloudLayerChunkedEntity :
public QgsChunkedEntity
126 explicit QgsPointCloudLayerChunkedEntity( Qgs3DMapSettings *map, QgsPointCloudLayer *pcl, QgsPointCloudIndex index,
const QgsCoordinateTransform &coordinateTransform, QgsPointCloud3DSymbol *symbol,
float maxScreenError,
bool showBoundingBoxes,
double zValueScale,
double zValueOffset,
int pointBudget );
128 QList<QgsRayCastHit> rayIntersection(
const QgsRay3D &ray,
const QgsRayCastContext &context )
const override;
130 ~QgsPointCloudLayerChunkedEntity()
override;
136 QgsPointCloudLayer *mLayer =
nullptr;
137 std::unique_ptr<QgsChunkUpdaterFactory> mChunkUpdaterFactory;