QGIS API Documentation  3.37.0-Master (a5b4d9743e8)
qgspointcloudlayer.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgspointcloudlayer.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 QGSPOINTCLOUDLAYER_H
19 #define QGSPOINTCLOUDLAYER_H
20 
22 
24 #include "qgsmaplayer.h"
25 #include "qgis_core.h"
28 
29 #include <QString>
30 #include <memory>
31 
35 
45 class CORE_EXPORT QgsPointCloudLayer : public QgsMapLayer, public QgsAbstractProfileSource
46 {
47  Q_OBJECT
48  public:
49 
53  struct LayerOptions
54  {
55 
60  : transformContext( transformContext )
61  {}
62 
67 
69  bool loadDefaultStyle = true;
70 
82  bool skipCrsValidation = false;
83 
87  bool skipIndexGeneration = false;
88 
93  bool skipStatisticsCalculation = false;
94  };
95 
96 
102  {
103  NotStarted = 0,
104  Calculating = 1 << 0,
105  Calculated = 1 << 1
106  };
107  Q_ENUM( PointCloudStatisticsCalculationState )
108 
109 
112  explicit QgsPointCloudLayer( const QString &uri = QString(),
113  const QString &baseName = QString(),
114  const QString &providerLib = QStringLiteral( "pointcloud" ),
116 
117  ~QgsPointCloudLayer() override;
118 
120  QgsPointCloudLayer( const QgsPointCloudLayer &rhs ) = delete;
123 
124 #ifdef SIP_RUN
125  SIP_PYOBJECT __repr__();
126  % MethodCode
127  QString str = QStringLiteral( "<QgsPointCloudLayer: '%1' (%2)>" ).arg( sipCpp->name(), sipCpp->dataProvider() ? sipCpp->dataProvider()->name() : QStringLiteral( "Invalid" ) );
128  sipRes = PyUnicode_FromString( str.toUtf8().constData() );
129  % End
130 #endif
131 
132  QgsPointCloudLayer *clone() const override SIP_FACTORY;
133  QgsRectangle extent() const override;
134  QgsMapLayerRenderer *createMapRenderer( QgsRenderContext &rendererContext ) override SIP_FACTORY;
135  QgsAbstractProfileGenerator *createProfileGenerator( const QgsProfileRequest &request ) override SIP_FACTORY;
136 
137  QgsPointCloudDataProvider *dataProvider() override;
138  const QgsPointCloudDataProvider *dataProvider() const override SIP_SKIP;
139 
140  bool readXml( const QDomNode &layerNode, QgsReadWriteContext &context ) override;
141 
142  bool writeXml( QDomNode &layerNode, QDomDocument &doc, const QgsReadWriteContext &context ) const override;
143 
144  bool readSymbology( const QDomNode &node, QString &errorMessage,
145  QgsReadWriteContext &context, StyleCategories categories = AllStyleCategories ) override;
146  bool readStyle( const QDomNode &node, QString &errorMessage, QgsReadWriteContext &context, StyleCategories categories = AllStyleCategories ) FINAL;
147 
148  bool writeSymbology( QDomNode &node, QDomDocument &doc, QString &errorMessage, const QgsReadWriteContext &context,
149  StyleCategories categories = AllStyleCategories ) const override;
150  bool writeStyle( QDomNode &node, QDomDocument &doc, QString &errorMessage, const QgsReadWriteContext &context, StyleCategories categories = AllStyleCategories ) const FINAL;
151 
152  void setTransformContext( const QgsCoordinateTransformContext &transformContext ) override;
153 
154  QString encodedSource( const QString &source, const QgsReadWriteContext &context ) const override;
155  QString decodedSource( const QString &source, const QString &dataProvider, const QgsReadWriteContext &context ) const override;
156  QString loadDefaultStyle( bool &resultFlag SIP_OUT ) FINAL;
157  QString htmlMetadata() const override;
158  QgsMapLayerElevationProperties *elevationProperties() override;
159 
163  QgsPointCloudAttributeCollection attributes() const;
164 
168  qint64 pointCount() const;
169 
175  QgsPointCloudRenderer *renderer();
176 
183  const QgsPointCloudRenderer *renderer() const SIP_SKIP;
184 
192  void setRenderer( QgsPointCloudRenderer *renderer SIP_TRANSFER );
193 
201  bool setSubsetString( const QString &subset );
202 
209  QString subsetString() const;
210 
217  void setSync3DRendererTo2DRenderer( bool sync );
218 
225  bool sync3DRendererTo2DRenderer() const;
226 
233  bool convertRenderer3DFromRenderer2D();
234 
239  const QgsPointCloudStatistics statistics() const { return mStatistics; }
240 
246  PointCloudStatisticsCalculationState statisticsCalculationState() const { return mStatisticsCalculationState; }
247  signals:
248 
255 
261  void raiseError( const QString &msg );
262 
269 
270  private slots:
271  void onPointCloudIndexGenerationStateChanged( QgsPointCloudDataProvider::PointCloudIndexGenerationState state );
272  void setDataSourcePrivate( const QString &dataSource, const QString &baseName, const QString &provider, const QgsDataProvider::ProviderOptions &options, QgsDataProvider::ReadFlags flags ) override;
273 
274  private:
275 
276  bool isReadOnly() const override {return true;}
277 
278  void calculateStatistics();
279 
280  void resetRenderer();
281 
282  void loadIndexesForRenderContext( QgsRenderContext &rendererContext ) const;
283 
284 #ifdef SIP_RUN
286 #endif
287 
288  std::unique_ptr<QgsPointCloudDataProvider> mDataProvider;
289 
290  std::unique_ptr<QgsPointCloudRenderer> mRenderer;
291 
292  QgsPointCloudLayerElevationProperties *mElevationProperties = nullptr;
293 
294  LayerOptions mLayerOptions;
295 
296  bool mSync3DRendererTo2DRenderer = true;
297  QgsPointCloudStatistics mStatistics;
298  PointCloudStatisticsCalculationState mStatisticsCalculationState = PointCloudStatisticsCalculationState::NotStarted;
299  long mStatsCalculationTask = 0;
300 
301  friend class TestQgsVirtualPointCloudProvider;
302 };
303 
304 
305 #endif // QGSPOINTCLOUDPLAYER_H
Base class for point cloud 3D renderers.
Abstract base class for objects which generate elevation profiles.
Interface for classes which can generate elevation profiles.
Contains information about the context in which a coordinate transform is executed.
QFlags< ReadFlag > ReadFlags
Base class for storage of map layer elevation properties.
Base class for utility classes that encapsulate information necessary for rendering of map layers.
Base class for all map layer types.
Definition: qgsmaplayer.h:75
QFlags< StyleCategory > StyleCategories
Definition: qgsmaplayer.h:188
virtual QgsMapLayer * clone() const =0
Returns a new instance equivalent to this one except for the id which is still unique.
Collection of point cloud attributes.
Base class for providing data for QgsPointCloudLayer.
PointCloudIndexGenerationState
Point cloud index state.
Point cloud layer specific subclass of QgsMapLayerElevationProperties.
Implementation of threaded rendering for point cloud layers.
Represents a map layer supporting display of point clouds.
PointCloudStatisticsCalculationState
Point cloud statistics calculation task.
void raiseError(const QString &msg)
Signals an error related to this point cloud layer.
PointCloudStatisticsCalculationState statisticsCalculationState() const
Returns the status of point cloud statistics calculation.
QgsPointCloudLayer(const QgsPointCloudLayer &rhs)=delete
QgsPointCloudLayer cannot be copied.
void statisticsCalculationStateChanged(QgsPointCloudLayer::PointCloudStatisticsCalculationState state)
Emitted when statistics calculation state has changed.
QgsPointCloudLayer & operator=(QgsPointCloudLayer const &rhs)=delete
QgsPointCloudLayer cannot be copied.
void subsetStringChanged()
Emitted when the layer's subset string has changed.
Abstract base class for 2d point cloud renderers.
Class used to store statistics of a point cloud dataset.
Encapsulates properties and constraints relating to fetching elevation profiles from different source...
The class is used as a container of context for various read/write operations on other objects.
A rectangle specified with double values.
Definition: qgsrectangle.h:42
Contains information about the context of a rendering operation.
#define str(x)
Definition: qgis.cpp:38
#define SIP_ENUM_BASETYPE(type)
Definition: qgis_sip.h:278
#define SIP_SKIP
Definition: qgis_sip.h:126
#define FINAL
Definition: qgis_sip.h:242
#define SIP_TRANSFER
Definition: qgis_sip.h:36
#define SIP_OUT
Definition: qgis_sip.h:58
#define SIP_FACTORY
Definition: qgis_sip.h:76
Setting options for creating vector data providers.
Setting options for loading point cloud layers.
LayerOptions(const QgsCoordinateTransformContext &transformContext=QgsCoordinateTransformContext())
Constructor for LayerOptions with optional transformContext.
QgsCoordinateTransformContext transformContext
Coordinate transform context.