QGIS API Documentation 3.99.0-Master (21b3aa880ba)
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
23#include <memory>
24
25#include "qgis_core.h"
27#include "qgsmaplayer.h"
30
31#include <QString>
32
36
47{
48 Q_OBJECT
49 public:
50
96
97
103 {
104 NotStarted = 0,
105 Calculating = 1 << 0,
106 Calculated = 1 << 1
107 };
108 Q_ENUM( PointCloudStatisticsCalculationState )
109
110
113 explicit QgsPointCloudLayer( const QString &uri = QString(),
114 const QString &baseName = QString(),
115 const QString &providerLib = QStringLiteral( "pointcloud" ),
117
118 ~QgsPointCloudLayer() override;
119
122
123#ifdef SIP_RUN
124 SIP_PYOBJECT __repr__();
125 % MethodCode
126 QString str = QStringLiteral( "<QgsPointCloudLayer: '%1' (%2)>" ).arg( sipCpp->name(), sipCpp->dataProvider() ? sipCpp->dataProvider()->name() : QStringLiteral( "Invalid" ) );
127 sipRes = PyUnicode_FromString( str.toUtf8().constData() );
128 % End
129#endif
130
131 QgsPointCloudLayer *clone() const override SIP_FACTORY;
132 QgsRectangle extent() const override;
134 QgsAbstractProfileSource *profileSource() override {return this;}
135 QString profileSourceId() const override {return id();}
136 QString profileSourceName() const override {return name();}
138
140 const QgsPointCloudDataProvider *dataProvider() const override SIP_SKIP;
141
142 bool supportsEditing() const override;
143 bool isEditable() const override;
144 bool isModified() const override;
145
146 bool readXml( const QDomNode &layerNode, QgsReadWriteContext &context ) override;
147
148 bool writeXml( QDomNode &layerNode, QDomDocument &doc, const QgsReadWriteContext &context ) const override;
149
150 bool readSymbology( const QDomNode &node, QString &errorMessage,
151 QgsReadWriteContext &context, StyleCategories categories = AllStyleCategories ) override;
152 bool readStyle( const QDomNode &node, QString &errorMessage, QgsReadWriteContext &context, StyleCategories categories = AllStyleCategories ) final;
153
154 bool writeSymbology( QDomNode &node, QDomDocument &doc, QString &errorMessage, const QgsReadWriteContext &context,
155 StyleCategories categories = AllStyleCategories ) const override;
156 bool writeStyle( QDomNode &node, QDomDocument &doc, QString &errorMessage, const QgsReadWriteContext &context, StyleCategories categories = AllStyleCategories ) const final;
157
158 void setTransformContext( const QgsCoordinateTransformContext &transformContext ) override;
159
160 QString encodedSource( const QString &source, const QgsReadWriteContext &context ) const override;
161 QString decodedSource( const QString &source, const QString &dataProvider, const QgsReadWriteContext &context ) const override;
162 QString loadDefaultStyle( bool &resultFlag SIP_OUT ) final;
163 QString htmlMetadata() const override;
164 QgsMapLayerElevationProperties *elevationProperties() override;
165
169 QgsPointCloudAttributeCollection attributes() const;
170
174 qint64 pointCount() const;
175
181 QgsPointCloudRenderer *renderer();
182
189 const QgsPointCloudRenderer *renderer() const SIP_SKIP;
190
198 void setRenderer( QgsPointCloudRenderer *renderer SIP_TRANSFER );
199
207 bool setSubsetString( const QString &subset );
208
215 QString subsetString() const;
216
223 void setSync3DRendererTo2DRenderer( bool sync );
224
231 bool sync3DRendererTo2DRenderer() const;
232
239 bool convertRenderer3DFromRenderer2D();
240
245 const QgsPointCloudStatistics statistics() const { return mStatistics; }
246
252 PointCloudStatisticsCalculationState statisticsCalculationState() const { return mStatisticsCalculationState; }
253
269 bool startEditing();
270
290 bool commitChanges( bool stopEditing = true );
291
298 QString commitError() const;
299
307 bool rollBack();
308
323 bool changeAttributeValue( const QgsPointCloudNodeId &n, const QVector<int> &points, const QgsPointCloudAttribute &attribute, double value ) SIP_SKIP;
324
338 bool changeAttributeValue( const QHash<QgsPointCloudNodeId, QVector<int>> &nodesAndPoints, const QgsPointCloudAttribute &attribute, double value ) SIP_SKIP;
339
347 QgsPointCloudIndex index() const;
348
349
350 signals:
351
358
364 void raiseError( const QString &msg );
365
372
379
380 private slots:
381 void onPointCloudIndexGenerationStateChanged( QgsPointCloudDataProvider::PointCloudIndexGenerationState state );
382 void setDataSourcePrivate( const QString &dataSource, const QString &baseName, const QString &provider, const QgsDataProvider::ProviderOptions &options, Qgis::DataProviderReadFlags flags ) override;
383
384 private:
385
386 bool isReadOnly() const override {return true;}
387
388 void calculateStatistics();
389
390 void resetRenderer();
391
392 void loadIndexesForRenderContext( QgsRenderContext &rendererContext ) const;
393
394#ifdef SIP_RUN
396#endif
397
398 std::unique_ptr<QgsPointCloudDataProvider> mDataProvider;
399
400 std::unique_ptr<QgsPointCloudRenderer> mRenderer;
401
402 QgsPointCloudLayerElevationProperties *mElevationProperties = nullptr;
403
404 LayerOptions mLayerOptions;
405
406 bool mSync3DRendererTo2DRenderer = true;
407 QgsPointCloudStatistics mStatistics;
408 PointCloudStatisticsCalculationState mStatisticsCalculationState = PointCloudStatisticsCalculationState::NotStarted;
409 long mStatsCalculationTask = 0;
410
411 QgsPointCloudIndex mEditIndex;
412 QString mCommitError;
413
415};
416
417
418#endif // QGSPOINTCLOUDLAYER_H
QFlags< DataProviderReadFlag > DataProviderReadFlags
Flags which control data provider construction.
Definition qgis.h:486
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.
QString name
Definition qgsmaplayer.h:84
QString id
Definition qgsmaplayer.h:83
QgsMapLayer(Qgis::LayerType type=Qgis::LayerType::Vector, const QString &name=QString(), const QString &source=QString())
Constructor for QgsMapLayer.
QgsMapLayer::LayerFlags flags
Definition qgsmaplayer.h:96
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.
QgsRectangle extent() const override
Returns the extent of the layer.
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.
QString profileSourceName() const override
Returns a name for displaying this profile source in the elevation profile layer tree.
QgsPointCloudLayer(const QgsPointCloudLayer &rhs)=delete
void statisticsCalculationStateChanged(QgsPointCloudLayer::PointCloudStatisticsCalculationState state)
Emitted when statistics calculation state has changed.
QString profileSourceId() const override
Returns a unique identifier for this profile source.
const QgsPointCloudStatistics statistics() const
Returns the object containing statistics.
QgsAbstractProfileSource * profileSource() override
Returns the layer's profile source if it has profile capabilities.
void chunkAttributeValuesChanged(const QgsPointCloudNodeId &n)
Emitted when a node gets some attribute values of some points changed.
QgsPointCloudLayer(const QString &uri=QString(), const QString &baseName=QString(), const QString &providerLib=QStringLiteral("pointcloud"), const QgsPointCloudLayer::LayerOptions &options=QgsPointCloudLayer::LayerOptions())
Constructor - creates a point cloud layer.
friend class TestQgsVirtualPointCloudProvider
void subsetStringChanged()
Emitted when the layer's subset string has changed.
QgsPointCloudLayer & operator=(QgsPointCloudLayer const &rhs)=delete
QgsMapLayerRenderer * createMapRenderer(QgsRenderContext &rendererContext) override
Returns new instance of QgsMapLayerRenderer that will be used for rendering of given context.
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:275
#define SIP_SKIP
Definition qgis_sip.h:134
#define SIP_TRANSFER
Definition qgis_sip.h:36
#define SIP_OUT
Definition qgis_sip.h:58
#define SIP_FACTORY
Definition qgis_sip.h:84
Setting options for creating vector data providers.
Setting options for loading point cloud layers.
bool skipCrsValidation
Controls whether the layer is allowed to have an invalid/unknown CRS.
bool skipStatisticsCalculation
Set to true if the statistics calculation for this point cloud is disabled.
bool loadDefaultStyle
Set to true if the default layer style should be loaded.
bool skipIndexGeneration
Set to true if point cloud index generation should be skipped.
LayerOptions(const QgsCoordinateTransformContext &transformContext=QgsCoordinateTransformContext())
Constructor for LayerOptions with optional transformContext.
QgsCoordinateTransformContext transformContext
Coordinate transform context.