QGIS API Documentation 3.39.0-Master (3aed037ce22)
Loading...
Searching...
No Matches
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
46{
47 Q_OBJECT
48 public:
49
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
121
122#ifdef SIP_RUN
123 SIP_PYOBJECT __repr__();
124 % MethodCode
125 QString str = QStringLiteral( "<QgsPointCloudLayer: '%1' (%2)>" ).arg( sipCpp->name(), sipCpp->dataProvider() ? sipCpp->dataProvider()->name() : QStringLiteral( "Invalid" ) );
126 sipRes = PyUnicode_FromString( str.toUtf8().constData() );
127 % End
128#endif
129
130 QgsPointCloudLayer *clone() const override SIP_FACTORY;
131 QgsRectangle extent() const override;
132 QgsMapLayerRenderer *createMapRenderer( QgsRenderContext &rendererContext ) override SIP_FACTORY;
133 QgsAbstractProfileGenerator *createProfileGenerator( const QgsProfileRequest &request ) override SIP_FACTORY;
134
135 QgsPointCloudDataProvider *dataProvider() override;
136 const QgsPointCloudDataProvider *dataProvider() const override SIP_SKIP;
137
138 bool readXml( const QDomNode &layerNode, QgsReadWriteContext &context ) override;
139
140 bool writeXml( QDomNode &layerNode, QDomDocument &doc, const QgsReadWriteContext &context ) const override;
141
142 bool readSymbology( const QDomNode &node, QString &errorMessage,
143 QgsReadWriteContext &context, StyleCategories categories = AllStyleCategories ) override;
144 bool readStyle( const QDomNode &node, QString &errorMessage, QgsReadWriteContext &context, StyleCategories categories = AllStyleCategories ) FINAL;
145
146 bool writeSymbology( QDomNode &node, QDomDocument &doc, QString &errorMessage, const QgsReadWriteContext &context,
147 StyleCategories categories = AllStyleCategories ) const override;
148 bool writeStyle( QDomNode &node, QDomDocument &doc, QString &errorMessage, const QgsReadWriteContext &context, StyleCategories categories = AllStyleCategories ) const FINAL;
149
150 void setTransformContext( const QgsCoordinateTransformContext &transformContext ) override;
151
152 QString encodedSource( const QString &source, const QgsReadWriteContext &context ) const override;
153 QString decodedSource( const QString &source, const QString &dataProvider, const QgsReadWriteContext &context ) const override;
154 QString loadDefaultStyle( bool &resultFlag SIP_OUT ) FINAL;
155 QString htmlMetadata() const override;
156 QgsMapLayerElevationProperties *elevationProperties() override;
157
161 QgsPointCloudAttributeCollection attributes() const;
162
166 qint64 pointCount() const;
167
173 QgsPointCloudRenderer *renderer();
174
181 const QgsPointCloudRenderer *renderer() const SIP_SKIP;
182
190 void setRenderer( QgsPointCloudRenderer *renderer SIP_TRANSFER );
191
199 bool setSubsetString( const QString &subset );
200
207 QString subsetString() const;
208
215 void setSync3DRendererTo2DRenderer( bool sync );
216
223 bool sync3DRendererTo2DRenderer() const;
224
231 bool convertRenderer3DFromRenderer2D();
232
237 const QgsPointCloudStatistics statistics() const { return mStatistics; }
238
244 PointCloudStatisticsCalculationState statisticsCalculationState() const { return mStatisticsCalculationState; }
245 signals:
246
253
259 void raiseError( const QString &msg );
260
267
268 private slots:
269 void onPointCloudIndexGenerationStateChanged( QgsPointCloudDataProvider::PointCloudIndexGenerationState state );
270 void setDataSourcePrivate( const QString &dataSource, const QString &baseName, const QString &provider, const QgsDataProvider::ProviderOptions &options, Qgis::DataProviderReadFlags flags ) override;
271
272 private:
273
274 bool isReadOnly() const override {return true;}
275
276 void calculateStatistics();
277
278 void resetRenderer();
279
280 void loadIndexesForRenderContext( QgsRenderContext &rendererContext ) const;
281
282#ifdef SIP_RUN
284#endif
285
286 std::unique_ptr<QgsPointCloudDataProvider> mDataProvider;
287
288 std::unique_ptr<QgsPointCloudRenderer> mRenderer;
289
290 QgsPointCloudLayerElevationProperties *mElevationProperties = nullptr;
291
292 LayerOptions mLayerOptions;
293
294 bool mSync3DRendererTo2DRenderer = true;
295 QgsPointCloudStatistics mStatistics;
296 PointCloudStatisticsCalculationState mStatisticsCalculationState = PointCloudStatisticsCalculationState::NotStarted;
297 long mStatsCalculationTask = 0;
298
299 friend class TestQgsVirtualPointCloudProvider;
300};
301
302
303#endif // QGSPOINTCLOUDPLAYER_H
QFlags< DataProviderReadFlag > DataProviderReadFlags
Flags which control data provider construction.
Definition qgis.h:376
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.
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
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
void statisticsCalculationStateChanged(QgsPointCloudLayer::PointCloudStatisticsCalculationState state)
Emitted when statistics calculation state has changed.
void subsetStringChanged()
Emitted when the layer's subset string has changed.
QgsPointCloudLayer & operator=(QgsPointCloudLayer const &rhs)=delete
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.
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.