QGIS API Documentation 3.99.0-Master (a26b91b364d)
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 QgsAbstractProfileSource *profileSource() override {return this;}
135
137 const QgsPointCloudDataProvider *dataProvider() const override SIP_SKIP;
138
139 bool supportsEditing() const override;
140 bool isEditable() const override;
141 bool isModified() const override;
142
143 bool readXml( const QDomNode &layerNode, QgsReadWriteContext &context ) override;
144
145 bool writeXml( QDomNode &layerNode, QDomDocument &doc, const QgsReadWriteContext &context ) const override;
146
147 bool readSymbology( const QDomNode &node, QString &errorMessage,
148 QgsReadWriteContext &context, StyleCategories categories = AllStyleCategories ) override;
149 bool readStyle( const QDomNode &node, QString &errorMessage, QgsReadWriteContext &context, StyleCategories categories = AllStyleCategories ) FINAL;
150
151 bool writeSymbology( QDomNode &node, QDomDocument &doc, QString &errorMessage, const QgsReadWriteContext &context,
152 StyleCategories categories = AllStyleCategories ) const override;
153 bool writeStyle( QDomNode &node, QDomDocument &doc, QString &errorMessage, const QgsReadWriteContext &context, StyleCategories categories = AllStyleCategories ) const FINAL;
154
155 void setTransformContext( const QgsCoordinateTransformContext &transformContext ) override;
156
157 QString encodedSource( const QString &source, const QgsReadWriteContext &context ) const override;
158 QString decodedSource( const QString &source, const QString &dataProvider, const QgsReadWriteContext &context ) const override;
159 QString loadDefaultStyle( bool &resultFlag SIP_OUT ) FINAL;
160 QString htmlMetadata() const override;
161 QgsMapLayerElevationProperties *elevationProperties() override;
162
166 QgsPointCloudAttributeCollection attributes() const;
167
171 qint64 pointCount() const;
172
178 QgsPointCloudRenderer *renderer();
179
186 const QgsPointCloudRenderer *renderer() const SIP_SKIP;
187
195 void setRenderer( QgsPointCloudRenderer *renderer SIP_TRANSFER );
196
204 bool setSubsetString( const QString &subset );
205
212 QString subsetString() const;
213
220 void setSync3DRendererTo2DRenderer( bool sync );
221
228 bool sync3DRendererTo2DRenderer() const;
229
236 bool convertRenderer3DFromRenderer2D();
237
242 const QgsPointCloudStatistics statistics() const { return mStatistics; }
243
249 PointCloudStatisticsCalculationState statisticsCalculationState() const { return mStatisticsCalculationState; }
250
266 bool startEditing();
267
287 bool commitChanges( bool stopEditing = true );
288
295 QString commitError() const;
296
304 bool rollBack();
305
320 bool changeAttributeValue( const QgsPointCloudNodeId &n, const QVector<int> &points, const QgsPointCloudAttribute &attribute, double value ) SIP_SKIP;
321
335 bool changeAttributeValue( const QHash<QgsPointCloudNodeId, QVector<int>> &nodesAndPoints, const QgsPointCloudAttribute &attribute, double value ) SIP_SKIP;
336
344 QgsPointCloudIndex index() const;
345
346
347 signals:
348
355
361 void raiseError( const QString &msg );
362
369
376
377 private slots:
378 void onPointCloudIndexGenerationStateChanged( QgsPointCloudDataProvider::PointCloudIndexGenerationState state );
379 void setDataSourcePrivate( const QString &dataSource, const QString &baseName, const QString &provider, const QgsDataProvider::ProviderOptions &options, Qgis::DataProviderReadFlags flags ) override;
380
381 private:
382
383 bool isReadOnly() const override {return true;}
384
385 void calculateStatistics();
386
387 void resetRenderer();
388
389 void loadIndexesForRenderContext( QgsRenderContext &rendererContext ) const;
390
391#ifdef SIP_RUN
393#endif
394
395 std::unique_ptr<QgsPointCloudDataProvider> mDataProvider;
396
397 std::unique_ptr<QgsPointCloudRenderer> mRenderer;
398
399 QgsPointCloudLayerElevationProperties *mElevationProperties = nullptr;
400
401 LayerOptions mLayerOptions;
402
403 bool mSync3DRendererTo2DRenderer = true;
404 QgsPointCloudStatistics mStatistics;
405 PointCloudStatisticsCalculationState mStatisticsCalculationState = PointCloudStatisticsCalculationState::NotStarted;
406 long mStatsCalculationTask = 0;
407
408 QgsPointCloudIndex mEditIndex;
409 QString mCommitError;
410
411 friend class TestQgsVirtualPointCloudProvider;
412};
413
414
415#endif // QGSPOINTCLOUDLAYER_H
QFlags< DataProviderReadFlag > DataProviderReadFlags
Flags which control data provider construction.
Definition qgis.h:450
Base class for point cloud 3D renderers.
Abstract base class for objects which generate elevation profiles.
Interface for classes which can generate elevation profiles.
virtual QgsAbstractProfileGenerator * createProfileGenerator(const QgsProfileRequest &request)=0
Given a profile request, returns a new profile generator ready for generating 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:78
virtual QgsMapLayer * clone() const =0
Returns a new instance equivalent to this one except for the id which is still unique.
virtual Q_INVOKABLE QgsDataProvider * dataProvider()
Returns the layer's data provider, it may be nullptr.
A collection of point cloud attributes.
Attribute for point cloud data pair of name and size in bytes.
Base class for providing data for QgsPointCloudLayer.
PointCloudIndexGenerationState
Point cloud index state.
Smart pointer for QgsAbstractPointCloudIndex.
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 chunkAttributeValuesChanged(const QgsPointCloudNodeId &n)
Emitted when a node gets some attribute values of some points changed.
void subsetStringChanged()
Emitted when the layer's subset string has changed.
QgsPointCloudLayer & operator=(QgsPointCloudLayer const &rhs)=delete
Represents an indexed point cloud node's position in octree.
Abstract base class for 2d point cloud renderers.
Used to store statistics of a point cloud dataset.
Encapsulates properties and constraints relating to fetching elevation profiles from different source...
A container for the context for various read/write operations on objects.
A rectangle specified with double values.
Contains information about the context of a rendering operation.
#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.