QGIS API Documentation  3.12.1-BucureČ™ti (121cc00ff0)
qgsmeshlayer.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgsmeshlayer.h
3  --------------
4  begin : April 2018
5  copyright : (C) 2018 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 QGSMESHLAYER_H
19 #define QGSMESHLAYER_H
20 
21 #include <memory>
22 
23 #include "qgis_core.h"
24 #include "qgsmaplayer.h"
25 #include "qgsmeshdataprovider.h"
27 #include "qgsmeshtimesettings.h"
28 
30 struct QgsMeshLayerRendererCache;
31 class QgsSymbol;
32 class QgsTriangularMesh;
33 class QgsRenderContext;
34 struct QgsMesh;
36 
91 class CORE_EXPORT QgsMeshLayer : public QgsMapLayer
92 {
93  Q_OBJECT
94  public:
95 
99  struct LayerOptions
100  {
101 
107  : transformContext( transformContext )
108  {}
109 
111 
125  bool skipCrsValidation = false;
126  };
127 
141  explicit QgsMeshLayer( const QString &path = QString(), const QString &baseName = QString(), const QString &providerLib = QStringLiteral( "mesh_memory" ),
143 
144  ~QgsMeshLayer() override;
145 
147  QgsMeshLayer( const QgsMeshLayer &rhs ) = delete;
149  QgsMeshLayer &operator=( QgsMeshLayer const &rhs ) = delete;
150 
151  QgsMeshDataProvider *dataProvider() override;
152  const QgsMeshDataProvider *dataProvider() const override SIP_SKIP;
153  QgsMeshLayer *clone() const override SIP_FACTORY;
154  QgsRectangle extent() const override;
155  QgsMapLayerRenderer *createMapRenderer( QgsRenderContext &rendererContext ) override SIP_FACTORY;
156  bool readSymbology( const QDomNode &node, QString &errorMessage,
157  QgsReadWriteContext &context, QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories ) override;
158  bool writeSymbology( QDomNode &node, QDomDocument &doc, QString &errorMessage,
159  const QgsReadWriteContext &context, QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories ) const override;
160  QString encodedSource( const QString &source, const QgsReadWriteContext &context ) const override;
161  QString decodedSource( const QString &source, const QString &provider, const QgsReadWriteContext &context ) const override;
162  bool readXml( const QDomNode &layer_node, QgsReadWriteContext &context ) override;
163  bool writeXml( QDomNode &layer_node, QDomDocument &doc, const QgsReadWriteContext &context ) const override;
164 
165  void reload() override;
166 
168  QString providerType() const;
169 
175  QgsMesh *nativeMesh() SIP_SKIP;
176 
182  const QgsMesh *nativeMesh() const SIP_SKIP;
183 
189  QgsTriangularMesh *triangularMesh() SIP_SKIP;
190 
196  const QgsTriangularMesh *triangularMesh() const SIP_SKIP;
197 
203  QgsMeshLayerRendererCache *rendererCache() SIP_SKIP;
204 
206  QgsMeshRendererSettings rendererSettings() const;
208  void setRendererSettings( const QgsMeshRendererSettings &settings );
209 
215  QgsMeshTimeSettings timeSettings() const;
216 
222  void setTimeSettings( const QgsMeshTimeSettings &settings );
223 
230  QString formatTime( double hours );
231 
247  QgsMeshDatasetValue datasetValue( const QgsMeshDatasetIndex &index, const QgsPointXY &point ) const;
248 
264  QgsMesh3dDataBlock dataset3dValue( const QgsMeshDatasetIndex &index, const QgsPointXY &point ) const;
265 
266  public slots:
267 
273  void setTransformContext( const QgsCoordinateTransformContext &transformContext ) override;
274 
275 
276  signals:
277 
283  void activeScalarDatasetChanged( const QgsMeshDatasetIndex &index );
284 
290  void activeVectorDatasetChanged( const QgsMeshDatasetIndex &index );
291 
297  void timeSettingsChanged( );
298 
299  private: // Private methods
300 
304  bool isReadOnly() const override {return true;}
305 
311  bool setDataProvider( QString const &provider, const QgsDataProvider::ProviderOptions &options );
312 
313 #ifdef SIP_RUN
314  QgsMeshLayer( const QgsMeshLayer &rhs );
315 #endif
316 
317  private:
318  void fillNativeMesh();
319  void assignDefaultStyleToDatasetGroup( int groupIndex );
320  void setDefaultRendererSettings();
321 
322  private slots:
323  void onDatasetGroupsAdded( int count );
324 
325  private:
327  QgsMeshDataProvider *mDataProvider = nullptr;
328 
330  std::unique_ptr<QgsMesh> mNativeMesh;
331 
333  std::unique_ptr<QgsTriangularMesh> mTriangularMesh;
334 
336  std::unique_ptr<QgsMeshLayerRendererCache> mRendererCache;
337 
339  QgsMeshRendererSettings mRendererSettings;
340 
342  QgsMeshTimeSettings mTimeSettings;
343 };
344 
345 #endif //QGSMESHLAYER_H
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:41
Base class for all map layer types.
Definition: qgsmaplayer.h:79
Triangular/Derived Mesh is mesh with vertices in map coordinates.
QgsCoordinateTransformContext transformContext
Definition: qgsmeshlayer.h:110
Abstract base class for all rendered symbols.
Definition: qgssymbol.h:62
A class to represent a 2D point.
Definition: qgspointxy.h:43
QgsMesh3dDataBlock is a block of 3d stacked mesh data related N faces defined on base mesh frame...
Setting options for loading mesh layers.
Definition: qgsmeshlayer.h:99
Represents all mesh renderer settings.
#define SIP_SKIP
Definition: qgis_sip.h:126
#define SIP_FACTORY
Definition: qgis_sip.h:76
Contains information about the context in which a coordinate transform is executed.
LayerOptions(const QgsCoordinateTransformContext &transformContext=QgsCoordinateTransformContext())
Constructor for LayerOptions with optional transformContext.
Definition: qgsmeshlayer.h:106
Represents a mesh time settings for mesh datasets.
Base class for providing data for QgsMeshLayer.
Contains information about the context of a rendering operation.
Setting options for creating vector data providers.
Mesh - vertices and faces.
QgsMeshDatasetIndex is index that identifies the dataset group (e.g.
Abstract class to interpolate 3d stacked mesh data to 2d data.
Base class for utility classes that encapsulate information necessary for rendering of map layers...
Represents a mesh layer supporting display of data on structured or unstructured meshes.
Definition: qgsmeshlayer.h:91
QgsMeshDatasetValue represents single dataset value.