QGIS API Documentation 3.43.0-Master (32433f7016e)
qgsmeshdataprovider.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsmeshdataprovider.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 QGSMESHDATAPROVIDER_H
19#define QGSMESHDATAPROVIDER_H
20
21#include <QVector>
22#include <QString>
23#include <QMap>
24#include <QPair>
25
26#include <limits>
27
28#include "qgis_core.h"
29#include "qgsdataprovider.h"
30#include "qgsprovidermetadata.h"
31#include "qgsmeshdataset.h"
33#include "qgsmeshutils.h"
34
35#ifdef SIP_RUN
36% ModuleHeaderCode
37#include "qgsmeshutils.h"
38% End
39#endif
40
41class QgsRectangle;
42
50struct CORE_EXPORT QgsMesh
51{
52
58 {
59 Vertex = 1,
60 Edge = 2,
61 Face = 4
62 };
63
68 bool contains( const ElementType &type ) const;
69
71 int vertexCount() const;
73 int faceCount() const;
74
79 int edgeCount() const;
80
82 QgsMeshVertex vertex( int index ) const;
84 QgsMeshFace face( int index ) const;
85
90 QgsMeshEdge edge( int index ) const;
91
96 void clear();
97
102 static bool compareFaces( const QgsMeshFace &face1, const QgsMeshFace &face2 );
103
104 QVector<QgsMeshVertex> vertices SIP_SKIP;
105 QVector<QgsMeshEdge> edges SIP_SKIP;
106 QVector<QgsMeshFace> faces SIP_SKIP;
107};
108
109// we need to declare metatype so QgsMesh can be passed as QVariant for expressions
111
112
132{
133 public:
134
135 virtual ~QgsMeshDataSourceInterface() = default;
136
141 bool contains( const QgsMesh::ElementType &type ) const;
142
147 virtual int vertexCount() const = 0;
148
153 virtual int faceCount() const = 0;
154
161 virtual int edgeCount() const = 0;
162
171 virtual int maximumVerticesCountPerFace() const {return 0;};
172
177 virtual void populateMesh( QgsMesh *mesh ) const = 0;
178
188 virtual bool saveMeshFrame( const QgsMesh &mesh ) = 0;
189};
190
207{
208 public:
211
217 virtual bool addDataset( const QString &uri ) = 0;
218
222 virtual QStringList extraDatasets() const = 0;
223
227 virtual int datasetGroupCount( ) const = 0;
228
232 virtual int datasetCount( int groupIndex ) const = 0;
233
237 int datasetCount( QgsMeshDatasetIndex index ) const;
238
242 virtual QgsMeshDatasetGroupMetadata datasetGroupMetadata( int groupIndex ) const = 0;
243
247 QgsMeshDatasetGroupMetadata datasetGroupMetadata( QgsMeshDatasetIndex index ) const;
248
253
265 virtual QgsMeshDatasetValue datasetValue( QgsMeshDatasetIndex index, int valueIndex ) const = 0;
266
278 virtual QgsMeshDataBlock datasetValues( QgsMeshDatasetIndex index, int valueIndex, int count ) const = 0;
279
291 virtual QgsMesh3DDataBlock dataset3dValues( QgsMeshDatasetIndex index, int faceIndex, int count ) const = 0;
292
303 virtual bool isFaceActive( QgsMeshDatasetIndex index, int faceIndex ) const = 0;
304
310 virtual QgsMeshDataBlock areFacesActive( QgsMeshDatasetIndex index, int faceIndex, int count ) const = 0;
311
331 Q_DECL_DEPRECATED virtual bool persistDatasetGroup( const QString &path,
332 const QgsMeshDatasetGroupMetadata &meta,
333 const QVector<QgsMeshDataBlock> &datasetValues,
334 const QVector<QgsMeshDataBlock> &datasetActive,
335 const QVector<double> &times
337
355 virtual bool persistDatasetGroup( const QString &outputFilePath,
356 const QString &outputDriver,
357 const QgsMeshDatasetGroupMetadata &meta,
358 const QVector<QgsMeshDataBlock> &datasetValues,
359 const QVector<QgsMeshDataBlock> &datasetActive,
360 const QVector<double> &times
361 ) = 0;
362
363
378 virtual bool persistDatasetGroup( const QString &outputFilePath,
379 const QString &outputDriver,
381 int datasetGroupIndex
382 ) = 0;
383
394 QgsMeshDatasetIndex datasetIndexAtTime( const QDateTime &referenceTime,
395 int groupIndex,
396 qint64 time,
398
411 QList<QgsMeshDatasetIndex> datasetIndexInTimeInterval( const QDateTime &referenceTime,
412 int groupIndex,
413 qint64 time1,
414 qint64 time2 ) const;
415
416 protected:
417 std::unique_ptr<QgsMeshDataProviderTemporalCapabilities> mTemporalCapabilities;
418};
419
420
432{
433 Q_OBJECT
434 public:
436 QgsMeshDataProvider( const QString &uri,
437 const QgsDataProvider::ProviderOptions &providerOptions,
439
440 QgsMeshDataProviderTemporalCapabilities *temporalCapabilities() override;
441 const QgsMeshDataProviderTemporalCapabilities *temporalCapabilities() const override SIP_SKIP;
442
450 void setTemporalUnit( Qgis::TemporalUnit unit );
451
452
460 virtual QgsMeshDriverMetadata driverMetadata() const;
461
462
468 virtual void close() = 0;
469
479 virtual bool removeDatasetGroup( int index ) = 0;
480
481 signals:
483 void datasetGroupsAdded( int count );
484
485};
486
487#endif // QGSMESHDATAPROVIDER_H
TemporalUnit
Temporal units.
Definition qgis.h:4989
QFlags< DataProviderReadFlag > DataProviderReadFlags
Flags which control data provider construction.
Definition qgis.h:450
Abstract base class for spatial data provider implementations.
A block of 3d stacked mesh data related N faces defined on base mesh frame.
A block of integers/doubles from a mesh dataset.
Handles properties relating to a mesh data provider's temporal capabilities.
MatchingTemporalDatasetMethod
Method for selection of temporal mesh dataset from a range time.
Base class for providing data for QgsMeshLayer.
virtual bool removeDatasetGroup(int index)=0
Remove dataset group from the mesh.
void datasetGroupsAdded(int count)
Emitted when some new dataset groups have been added.
virtual void close()=0
Closes the data provider and free every resources used.
Interface for mesh data sources.
virtual int vertexCount() const =0
Returns number of vertices in the native mesh.
virtual void populateMesh(QgsMesh *mesh) const =0
Populates the mesh vertices, edges and faces.
virtual ~QgsMeshDataSourceInterface()=default
virtual bool saveMeshFrame(const QgsMesh &mesh)=0
Saves the mesh frame to the source.
virtual int edgeCount() const =0
Returns number of edges in the native mesh.
virtual int faceCount() const =0
Returns number of faces in the native mesh.
virtual int maximumVerticesCountPerFace() const
Returns the maximum number of vertices per face supported by the current mesh, if returns 0,...
A collection of dataset group metadata such as whether the data is vector or scalar,...
An index that identifies the dataset group (e.g.
Represents mesh dataset metadata, such as whether the data is valid or the associated time.
Interface for mesh datasets and dataset groups.
virtual QgsMeshDataBlock datasetValues(QgsMeshDatasetIndex index, int valueIndex, int count) const =0
Returns N vector/scalar values from the index from the dataset.
virtual QgsMesh3DDataBlock dataset3dValues(QgsMeshDatasetIndex index, int faceIndex, int count) const =0
Returns N vector/scalar values from the face index from the dataset for 3d stacked meshes.
virtual bool persistDatasetGroup(const QString &outputFilePath, const QString &outputDriver, QgsMeshDatasetSourceInterface *source, int datasetGroupIndex)=0
Saves a an existing dataset group provided by source to a file with a specified driver.
virtual int datasetCount(int groupIndex) const =0
Returns number of datasets loaded in the group.
virtual QgsMeshDatasetGroupMetadata datasetGroupMetadata(int groupIndex) const =0
Returns dataset group metadata.
virtual ~QgsMeshDatasetSourceInterface()=default
virtual QgsMeshDataBlock areFacesActive(QgsMeshDatasetIndex index, int faceIndex, int count) const =0
Returns whether the faces are active for particular dataset.
virtual QgsMeshDatasetMetadata datasetMetadata(QgsMeshDatasetIndex index) const =0
Returns dataset metadata.
virtual int datasetGroupCount() const =0
Returns number of datasets groups loaded.
std::unique_ptr< QgsMeshDataProviderTemporalCapabilities > mTemporalCapabilities
virtual QStringList extraDatasets() const =0
Returns list of additional dataset file URIs added using addDataset() calls.
virtual bool isFaceActive(QgsMeshDatasetIndex index, int faceIndex) const =0
Returns whether the face is active for particular dataset.
virtual bool persistDatasetGroup(const QString &outputFilePath, const QString &outputDriver, const QgsMeshDatasetGroupMetadata &meta, const QVector< QgsMeshDataBlock > &datasetValues, const QVector< QgsMeshDataBlock > &datasetActive, const QVector< double > &times)=0
Creates a new dataset group from a data and persists it into a destination path.
virtual QgsMeshDatasetValue datasetValue(QgsMeshDatasetIndex index, int valueIndex) const =0
Returns vector/scalar value associated with the index from the dataset To read multiple continuous va...
virtual bool addDataset(const QString &uri)=0
Associate dataset with the mesh.
Represents a single mesh dataset value.
Holds metadata about mesh drivers.
Point geometry type, with support for z-dimension and m-values.
Definition qgspoint.h:49
A rectangle specified with double values.
#define SIP_DEPRECATED
Definition qgis_sip.h:106
#define SIP_SKIP
Definition qgis_sip.h:126
#define SIP_ABSTRACT
Definition qgis_sip.h:213
Q_DECLARE_METATYPE(QgsMesh)
QVector< int > QgsMeshFace
List of vertex indexes.
QPair< int, int > QgsMeshEdge
Edge is a straight line seqment between 2 points.
Setting options for creating vector data providers.
Mesh - vertices, edges and faces.
ElementType
Defines type of mesh elements.