16#ifndef QGSPOINTCLOUD3DSYMBOL_P_H
17#define QGSPOINTCLOUD3DSYMBOL_P_H
24#include <Qt3DCore/QGeometry>
41class QgsPointCloud3DSymbolHandler
44 QgsPointCloud3DSymbolHandler();
46 virtual ~QgsPointCloud3DSymbolHandler() =
default;
50 virtual bool prepare(
const QgsPointCloud3DRenderContext &context ) = 0;
51 virtual void processNode( QgsPointCloudIndex &pc,
const QgsPointCloudNodeId &n,
const QgsPointCloud3DRenderContext &context, PointData *output =
nullptr ) = 0;
52 virtual void finalize( Qt3DCore::QEntity *parent,
const QgsPointCloud3DRenderContext &context ) = 0;
54 void triangulate( QgsPointCloudIndex &pc,
const QgsPointCloudNodeId &n,
const QgsPointCloud3DRenderContext &context,
const QgsBox3D &box3D );
56 float zMinimum()
const {
return mZMin; }
57 float zMaximum()
const {
return mZMax; }
62 QgsVector3D positionsOrigin;
63 QVector<QVector3D> positions;
64 QVector<float> parameter;
65 QVector<float> pointSizes;
66 QVector<QVector3D> colors;
72 float mZMin = std::numeric_limits<float>::max();
73 float mZMax = std::numeric_limits<float>::lowest();
75 void makeEntity( Qt3DCore::QEntity *parent,
const QgsPointCloud3DRenderContext &context,
const PointData &out,
bool selected );
77 virtual Qt3DCore::QGeometry *makeGeometry( Qt3DCore::QNode *parent,
const QgsPointCloud3DSymbolHandler::PointData &data,
unsigned int byteStride ) = 0;
79 std::unique_ptr<QgsPointCloudBlock> pointCloudBlock( QgsPointCloudIndex &pc,
const QgsPointCloudNodeId &node,
const QgsPointCloudRequest &request,
const QgsPointCloud3DRenderContext &context );
86 std::vector<double> getVertices( QgsPointCloudIndex &pc,
const QgsPointCloudNodeId &n,
const QgsPointCloud3DRenderContext &context,
const QgsBox3D &box3D );
89 void calculateNormals(
const std::vector<size_t> &triangles );
99 void filterTriangles(
const std::vector<size_t> &triangleIndexes,
const QgsPointCloud3DRenderContext &context,
const QgsBox3D &box3D );
102class QgsSingleColorPointCloud3DSymbolHandler :
public QgsPointCloud3DSymbolHandler
105 QgsSingleColorPointCloud3DSymbolHandler();
107 bool prepare(
const QgsPointCloud3DRenderContext &context )
override;
108 void processNode( QgsPointCloudIndex &pc,
const QgsPointCloudNodeId &n,
const QgsPointCloud3DRenderContext &context, PointData *output =
nullptr )
override;
109 void finalize( Qt3DCore::QEntity *parent,
const QgsPointCloud3DRenderContext &context )
override;
112 Qt3DCore::QGeometry *makeGeometry( Qt3DCore::QNode *parent,
const QgsPointCloud3DSymbolHandler::PointData &data,
unsigned int byteStride )
override;
115class QgsColorRampPointCloud3DSymbolHandler :
public QgsPointCloud3DSymbolHandler
118 QgsColorRampPointCloud3DSymbolHandler();
120 bool prepare(
const QgsPointCloud3DRenderContext &context )
override;
121 void processNode( QgsPointCloudIndex &pc,
const QgsPointCloudNodeId &n,
const QgsPointCloud3DRenderContext &context, PointData *output =
nullptr )
override;
122 void finalize( Qt3DCore::QEntity *parent,
const QgsPointCloud3DRenderContext &context )
override;
125 Qt3DCore::QGeometry *makeGeometry( Qt3DCore::QNode *parent,
const QgsPointCloud3DSymbolHandler::PointData &data,
unsigned int byteStride )
override;
128class QgsRGBPointCloud3DSymbolHandler :
public QgsPointCloud3DSymbolHandler
131 QgsRGBPointCloud3DSymbolHandler();
133 bool prepare(
const QgsPointCloud3DRenderContext &context )
override;
134 void processNode( QgsPointCloudIndex &pc,
const QgsPointCloudNodeId &n,
const QgsPointCloud3DRenderContext &context, PointData *output =
nullptr )
override;
135 void finalize( Qt3DCore::QEntity *parent,
const QgsPointCloud3DRenderContext &context )
override;
138 Qt3DCore::QGeometry *makeGeometry( Qt3DCore::QNode *parent,
const QgsPointCloud3DSymbolHandler::PointData &data,
unsigned int byteStride )
override;
141class QgsClassificationPointCloud3DSymbolHandler :
public QgsPointCloud3DSymbolHandler
144 QgsClassificationPointCloud3DSymbolHandler();
146 bool prepare(
const QgsPointCloud3DRenderContext &context )
override;
147 void processNode( QgsPointCloudIndex &pc,
const QgsPointCloudNodeId &n,
const QgsPointCloud3DRenderContext &context, PointData *output =
nullptr )
override;
148 void finalize( Qt3DCore::QEntity *parent,
const QgsPointCloud3DRenderContext &context )
override;
151 Qt3DCore::QGeometry *makeGeometry( Qt3DCore::QNode *parent,
const QgsPointCloud3DSymbolHandler::PointData &data,
unsigned int byteStride )
override;
154class QgsPointCloud3DGeometry :
public Qt3DCore::QGeometry
159 QgsPointCloud3DGeometry( Qt3DCore::QNode *parent,
const QgsPointCloud3DSymbolHandler::PointData &data,
unsigned int byteStride );
162 virtual void makeVertexBuffer(
const QgsPointCloud3DSymbolHandler::PointData &data ) = 0;
164 Qt3DCore::QAttribute *mPositionAttribute =
nullptr;
165 Qt3DCore::QAttribute *mParameterAttribute =
nullptr;
166 Qt3DCore::QAttribute *mPointSizeAttribute =
nullptr;
167 Qt3DCore::QAttribute *mColorAttribute =
nullptr;
168 Qt3DCore::QAttribute *mTriangleIndexAttribute =
nullptr;
169 Qt3DCore::QAttribute *mNormalsAttribute =
nullptr;
170 Qt3DCore::QBuffer *mVertexBuffer =
nullptr;
171 Qt3DCore::QBuffer *mTriangleBuffer =
nullptr;
172 Qt3DCore::QBuffer *mNormalsBuffer =
nullptr;
174 int mVertexCount = 0;
176 unsigned int mByteStride = 16;
179class QgsSingleColorPointCloud3DGeometry :
public QgsPointCloud3DGeometry
184 QgsSingleColorPointCloud3DGeometry( Qt3DCore::QNode *parent,
const QgsPointCloud3DSymbolHandler::PointData &data,
unsigned int byteStride );
187 void makeVertexBuffer(
const QgsPointCloud3DSymbolHandler::PointData &data )
override;
190class QgsColorRampPointCloud3DGeometry :
public QgsPointCloud3DGeometry
195 QgsColorRampPointCloud3DGeometry( Qt3DCore::QNode *parent,
const QgsPointCloud3DSymbolHandler::PointData &data,
unsigned int byteStride );
198 void makeVertexBuffer(
const QgsPointCloud3DSymbolHandler::PointData &data )
override;
201class QgsRGBPointCloud3DGeometry :
public QgsPointCloud3DGeometry
206 QgsRGBPointCloud3DGeometry( Qt3DCore::QNode *parent,
const QgsPointCloud3DSymbolHandler::PointData &data,
unsigned int byteStride );
209 void makeVertexBuffer(
const QgsPointCloud3DSymbolHandler::PointData &data )
override;
212class QgsClassificationPointCloud3DGeometry :
public QgsPointCloud3DGeometry
217 QgsClassificationPointCloud3DGeometry( Qt3DCore::QNode *parent,
const QgsPointCloud3DSymbolHandler::PointData &data,
unsigned int byteStride );
220 void makeVertexBuffer(
const QgsPointCloud3DSymbolHandler::PointData &data )
override;
A 3-dimensional box composed of x, y, z coordinates.
Encapsulates the render context for a 3D point cloud rendering operation.
Base class for storing raw data from point cloud nodes.
Smart pointer for QgsAbstractPointCloudIndex.
Represents an indexed point cloud node's position in octree.
Point cloud data request.