16#ifndef QGSPOINTCLOUD3DSYMBOL_P_H 
   17#define QGSPOINTCLOUD3DSYMBOL_P_H 
   23#include <QFutureWatcher> 
   24#if QT_VERSION < QT_VERSION_CHECK( 6, 0, 0 ) 
   25#include <Qt3DRender/QGeometry> 
   26#include <Qt3DRender/QBuffer> 
   28#include <Qt3DCore/QGeometry> 
   29#include <Qt3DCore/QBuffer> 
   38class QgsPointCloud3DSymbolHandler
 
   41    QgsPointCloud3DSymbolHandler();
 
   43    virtual ~QgsPointCloud3DSymbolHandler() = 
default;
 
   53    float zMinimum()
 const { 
return mZMin; }
 
   54    float zMaximum()
 const { 
return mZMax; }
 
   60        QVector<QVector3D> positions; 
 
   61        QVector<float> parameter;
 
   62        QVector<float> pointSizes; 
 
   63        QVector<QVector3D> colors;
 
   69    float mZMin = std::numeric_limits<float>::max();
 
   70    float mZMax = std::numeric_limits<float>::lowest();
 
   74#if QT_VERSION < QT_VERSION_CHECK( 6, 0, 0 ) 
   75    virtual Qt3DRender::QGeometry *makeGeometry( Qt3DCore::QNode *parent, 
const QgsPointCloud3DSymbolHandler::PointData &data, 
unsigned int byteStride ) = 0;
 
   77    virtual Qt3DCore::QGeometry *makeGeometry( Qt3DCore::QNode *parent, 
const QgsPointCloud3DSymbolHandler::PointData &data, 
unsigned int byteStride ) = 0;
 
   89    void calculateNormals( 
const std::vector<size_t> &triangles );
 
  102class QgsSingleColorPointCloud3DSymbolHandler : 
public QgsPointCloud3DSymbolHandler
 
  105    QgsSingleColorPointCloud3DSymbolHandler();
 
  112#if QT_VERSION < QT_VERSION_CHECK( 6, 0, 0 ) 
  113    Qt3DRender::QGeometry *makeGeometry( Qt3DCore::QNode *parent, 
const QgsPointCloud3DSymbolHandler::PointData &data, 
unsigned int byteStride ) 
override;
 
  115    Qt3DCore::QGeometry *makeGeometry( Qt3DCore::QNode *parent, 
const QgsPointCloud3DSymbolHandler::PointData &data, 
unsigned int byteStride ) 
override;
 
  119class QgsColorRampPointCloud3DSymbolHandler : 
public QgsPointCloud3DSymbolHandler
 
  122    QgsColorRampPointCloud3DSymbolHandler();
 
  129#if QT_VERSION < QT_VERSION_CHECK( 6, 0, 0 ) 
  130    Qt3DRender::QGeometry *makeGeometry( Qt3DCore::QNode *parent, 
const QgsPointCloud3DSymbolHandler::PointData &data, 
unsigned int byteStride ) 
override;
 
  132    Qt3DCore::QGeometry *makeGeometry( Qt3DCore::QNode *parent, 
const QgsPointCloud3DSymbolHandler::PointData &data, 
unsigned int byteStride ) 
override;
 
  136class QgsRGBPointCloud3DSymbolHandler : 
public QgsPointCloud3DSymbolHandler
 
  139    QgsRGBPointCloud3DSymbolHandler();
 
  146#if QT_VERSION < QT_VERSION_CHECK( 6, 0, 0 ) 
  147    Qt3DRender::QGeometry *makeGeometry( Qt3DCore::QNode *parent, 
const QgsPointCloud3DSymbolHandler::PointData &data, 
unsigned int byteStride ) 
override;
 
  149    Qt3DCore::QGeometry *makeGeometry( Qt3DCore::QNode *parent, 
const QgsPointCloud3DSymbolHandler::PointData &data, 
unsigned int byteStride ) 
override;
 
  153class QgsClassificationPointCloud3DSymbolHandler : 
public QgsPointCloud3DSymbolHandler
 
  156    QgsClassificationPointCloud3DSymbolHandler();
 
  163#if QT_VERSION < QT_VERSION_CHECK( 6, 0, 0 ) 
  164    Qt3DRender::QGeometry *makeGeometry( Qt3DCore::QNode *parent, 
const QgsPointCloud3DSymbolHandler::PointData &data, 
unsigned int byteStride ) 
override;
 
  166    Qt3DCore::QGeometry *makeGeometry( Qt3DCore::QNode *parent, 
const QgsPointCloud3DSymbolHandler::PointData &data, 
unsigned int byteStride ) 
override;
 
  170#if QT_VERSION < QT_VERSION_CHECK( 6, 0, 0 ) 
  171class QgsPointCloud3DGeometry : 
public Qt3DRender::QGeometry
 
  173class QgsPointCloud3DGeometry : 
public Qt3DCore::QGeometry
 
  179    QgsPointCloud3DGeometry( Qt3DCore::QNode *parent, 
const QgsPointCloud3DSymbolHandler::PointData &data, 
unsigned int byteStride );
 
  182    virtual void makeVertexBuffer( 
const QgsPointCloud3DSymbolHandler::PointData &data ) = 0;
 
  184#if QT_VERSION < QT_VERSION_CHECK( 6, 0, 0 ) 
  185    Qt3DRender::QAttribute *mPositionAttribute = 
nullptr;
 
  186    Qt3DRender::QAttribute *mParameterAttribute = 
nullptr;
 
  187    Qt3DRender::QAttribute *mPointSizeAttribute = 
nullptr;
 
  188    Qt3DRender::QAttribute *mColorAttribute = 
nullptr;
 
  189    Qt3DRender::QAttribute *mTriangleIndexAttribute = 
nullptr;
 
  190    Qt3DRender::QAttribute *mNormalsAttribute = 
nullptr;
 
  191    Qt3DRender::QBuffer *mVertexBuffer = 
nullptr;
 
  192    Qt3DRender::QBuffer *mTriangleBuffer = 
nullptr;
 
  193    Qt3DRender::QBuffer *mNormalsBuffer = 
nullptr;
 
  195    Qt3DCore::QAttribute *mPositionAttribute = 
nullptr;
 
  196    Qt3DCore::QAttribute *mParameterAttribute = 
nullptr;
 
  197    Qt3DCore::QAttribute *mPointSizeAttribute = 
nullptr;
 
  198    Qt3DCore::QAttribute *mColorAttribute = 
nullptr;
 
  199    Qt3DCore::QAttribute *mTriangleIndexAttribute = 
nullptr;
 
  200    Qt3DCore::QAttribute *mNormalsAttribute = 
nullptr;
 
  201    Qt3DCore::QBuffer *mVertexBuffer = 
nullptr;
 
  202    Qt3DCore::QBuffer *mTriangleBuffer = 
nullptr;
 
  203    Qt3DCore::QBuffer *mNormalsBuffer = 
nullptr;
 
  205    int mVertexCount = 0;
 
  207    unsigned int mByteStride = 16;
 
  210class QgsSingleColorPointCloud3DGeometry : 
public QgsPointCloud3DGeometry
 
  215    QgsSingleColorPointCloud3DGeometry( Qt3DCore::QNode *parent, 
const QgsPointCloud3DSymbolHandler::PointData &data, 
unsigned int byteStride );
 
  218    void makeVertexBuffer( 
const QgsPointCloud3DSymbolHandler::PointData &data ) 
override;
 
  221class QgsColorRampPointCloud3DGeometry : 
public QgsPointCloud3DGeometry
 
  226    QgsColorRampPointCloud3DGeometry( Qt3DCore::QNode *parent, 
const QgsPointCloud3DSymbolHandler::PointData &data, 
unsigned int byteStride );
 
  229    void makeVertexBuffer( 
const QgsPointCloud3DSymbolHandler::PointData &data ) 
override;
 
  232class QgsRGBPointCloud3DGeometry : 
public QgsPointCloud3DGeometry
 
  237    QgsRGBPointCloud3DGeometry( Qt3DCore::QNode *parent, 
const QgsPointCloud3DSymbolHandler::PointData &data, 
unsigned int byteStride );
 
  240    void makeVertexBuffer( 
const QgsPointCloud3DSymbolHandler::PointData &data ) 
override;
 
  243class QgsClassificationPointCloud3DGeometry : 
public QgsPointCloud3DGeometry
 
  248    QgsClassificationPointCloud3DGeometry( Qt3DCore::QNode *parent, 
const QgsPointCloud3DSymbolHandler::PointData &data, 
unsigned int byteStride );
 
  251    void makeVertexBuffer( 
const QgsPointCloud3DSymbolHandler::PointData &data ) 
override;
 
Axis-aligned bounding box - in world coords.
 
A 3-dimensional box composed of x, y, z coordinates.
 
Encapsulates the render context for a 3D point cloud rendering operation.
 
Smart pointer for QgsAbstractPointCloudIndex.
 
Represents an indexed point cloud node's position in octree.
 
Point cloud data request.
 
A 3D vector (similar to QVector3D) with the difference that it uses double precision instead of singl...