Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgspointcloudlayerrenderer.h 3 : : -------------------- 4 : : begin : October 2020 5 : : copyright : (C) 2020 by Peter Petrik 6 : : email : zilolv at gmail dot com 7 : : ***************************************************************************/ 8 : : 9 : : /*************************************************************************** 10 : : * * 11 : : * This program is free software; you can redistribute it and/or modify * 12 : : * it under the terms of the GNU General Public License as published by * 13 : : * the Free Software Foundation; either version 2 of the License, or * 14 : : * (at your option) any later version. * 15 : : * * 16 : : ***************************************************************************/ 17 : : 18 : : #ifndef QGSPOINTCLOUDLAYERRENDERER_H 19 : : #define QGSPOINTCLOUDLAYERRENDERER_H 20 : : 21 : : #include "qgis_core.h" 22 : : #include "qgscolorramp.h" 23 : : #include "qgsmaplayerrenderer.h" 24 : : #include "qgsreadwritecontext.h" 25 : : #include "qgspointcloudindex.h" 26 : : #include "qgsgeometry.h" 27 : : 28 : : #include "qgserror.h" 29 : : #include "qgspointcloudindex.h" 30 : : #include "qgsidentifycontext.h" 31 : : #include "qgspointcloudrenderer.h" 32 : : #include "qgsmapclippingregion.h" 33 : : #include "qgsrasterinterface.h" 34 : : 35 : : #include <QDomElement> 36 : : #include <QString> 37 : : #include <QPainter> 38 : : #include <QElapsedTimer> 39 : : 40 : : class QgsRenderContext; 41 : : class QgsPointCloudLayer; 42 : : class QgsPointCloudRenderer; 43 : : class QgsPointCloudRenderContext; 44 : : 45 : : #define SIP_NO_FILE 46 : : 47 : : ///@endcond 48 : : 49 : : /** 50 : : * \ingroup core 51 : : * 52 : : * \brief Implementation of threaded rendering for point cloud layers. 53 : : * 54 : : * \note The API is considered EXPERIMENTAL and can be changed without a notice 55 : : * \note Not available in Python bindings 56 : : * 57 : : * \since QGIS 3.18 58 : : */ 59 : : class CORE_EXPORT QgsPointCloudLayerRenderer: public QgsMapLayerRenderer 60 : : { 61 : : public: 62 : : 63 : : //! Ctor 64 : : explicit QgsPointCloudLayerRenderer( QgsPointCloudLayer *layer, QgsRenderContext &context ); 65 : : ~QgsPointCloudLayerRenderer(); 66 : : 67 : : bool render() override; 68 : : bool forceRasterRender() const override; 69 : : void setLayerRenderingTimeHint( int time ) override; 70 : : 71 : 0 : QgsFeedback *feedback() const override { return mFeedback.get(); } 72 : : 73 : : private: 74 : : QVector<IndexedPointCloudNode> traverseTree( const QgsPointCloudIndex *pc, const QgsRenderContext &context, IndexedPointCloudNode n, double maxErrorPixels, double nodeErrorPixels ); 75 : : 76 : : int renderNodesSync( const QVector<IndexedPointCloudNode> &nodes, QgsPointCloudIndex *pc, QgsPointCloudRenderContext &context, QgsPointCloudRequest &request, bool &canceled ); 77 : : int renderNodesAsync( const QVector<IndexedPointCloudNode> &nodes, QgsPointCloudIndex *pc, QgsPointCloudRenderContext &context, QgsPointCloudRequest &request, bool &canceled ); 78 : : 79 : : QgsPointCloudLayer *mLayer = nullptr; 80 : : 81 : : std::unique_ptr< QgsPointCloudRenderer > mRenderer; 82 : : 83 : : QgsVector3D mScale; 84 : : QgsVector3D mOffset; 85 : : double mZOffset = 0; 86 : : double mZScale = 1.0; 87 : : 88 : : QgsPointCloudAttributeCollection mLayerAttributes; 89 : : QgsPointCloudAttributeCollection mAttributes; 90 : : QgsGeometry mCloudExtent; 91 : : QList< QgsMapClippingRegion > mClippingRegions; 92 : : 93 : : int mRenderTimeHint = 0; 94 : : bool mBlockRenderUpdates = false; 95 : : QElapsedTimer mElapsedTimer; 96 : : 97 : : std::unique_ptr<QgsFeedback> mFeedback = nullptr; 98 : : }; 99 : : 100 : : #endif // QGSPOINTCLOUDLAYERRENDERER_H