16#ifndef QGSPOINTCLOUDLAYERCHUNKLOADER_P_H
17#define QGSPOINTCLOUDLAYERCHUNKLOADER_P_H
39#include <QFutureWatcher>
41#include <Qt3DCore/QBuffer>
42#include <Qt3DCore/QGeometry>
53class QgsPointCloudLayerChunkLoaderFactory :
public QgsChunkLoaderFactory
62 QgsPointCloudLayerChunkLoaderFactory(
const Qgs3DRenderContext &context,
const QgsCoordinateTransform &coordinateTransform, QgsPointCloudIndex pc, QgsPointCloud3DSymbol *symbol,
double zValueScale,
double zValueOffset,
int pointBudget );
65 QgsChunkLoader *createChunkLoader( QgsChunkNode *node )
const override;
66 QgsChunkNode *createRootNode()
const override;
67 QVector<QgsChunkNode *> createChildren( QgsChunkNode *node )
const override;
68 int primitivesCount( QgsChunkNode *node )
const override;
69 Qgs3DRenderContext mRenderContext;
70 QgsCoordinateTransform mCoordinateTransform;
71 QgsPointCloudIndex mPointCloudIndex;
72 std::unique_ptr<QgsPointCloud3DSymbol> mSymbol;
73 double mZValueScale = 1.0;
74 double mZValueOffset = 0;
75 int mPointBudget = 1000000;
76 bool mTriangulate =
false;
89class QgsPointCloudLayerChunkLoader :
public QgsChunkLoader
98 QgsPointCloudLayerChunkLoader(
const QgsPointCloudLayerChunkLoaderFactory *factory, QgsChunkNode *node, std::unique_ptr<QgsPointCloud3DSymbol> symbol,
const QgsCoordinateTransform &coordinateTransform,
double zValueScale,
double zValueOffset );
99 ~QgsPointCloudLayerChunkLoader()
override;
101 void start()
override;
102 void cancel()
override;
103 Qt3DCore::QEntity *createEntity( Qt3DCore::QEntity *parent )
override;
106 const QgsPointCloudLayerChunkLoaderFactory *mFactory;
107 std::unique_ptr<QgsPointCloud3DSymbolHandler> mHandler;
108 QgsPointCloud3DRenderContext mContext;
109 QFutureWatcher<void> *mFutureWatcher =
nullptr;
123class QgsPointCloudLayerChunkedEntity :
public QgsChunkedEntity
127 explicit QgsPointCloudLayerChunkedEntity( Qgs3DMapSettings *map, QgsPointCloudLayer *pcl,
const int indexPosition,
const QgsCoordinateTransform &coordinateTransform, QgsPointCloud3DSymbol *symbol,
float maxScreenError,
bool showBoundingBoxes,
double zValueScale,
double zValueOffset,
int pointBudget );
129 QList<QgsRayCastHit> rayIntersection(
const QgsRay3D &ray,
const QgsRayCastContext &context )
const override;
131 ~QgsPointCloudLayerChunkedEntity()
override;
137 static QgsPointCloudIndex resolveIndex(
const QgsPointCloudLayer *pcl,
int indexPosition );
139 QgsPointCloudLayer *mLayer =
nullptr;
140 std::unique_ptr<QgsChunkUpdaterFactory> mChunkUpdaterFactory;