QGIS API Documentation  3.24.2-Tisler (13c1a02865)
qgsmeshdatasetgroupstore.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgsmeshdatasetgroupstore.h
3  ---------------------
4  begin : June 2020
5  copyright : (C) 2020 by Vincent Cloarec
6  email : vcloarec 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 QGSMESHDATASETGROUPSTORE_H
19 #define QGSMESHDATASETGROUPSTORE_H
20 
21 #define SIP_NO_FILE
22 
23 #include "qgsmeshdataprovider.h"
24 #include "qgsmeshdataset.h"
25 
26 class QgsMeshLayer;
27 
37 {
38  public:
39 
42 
44  void removeDatasetGroup( int index );
45 
47  bool hasTemporalCapabilities() const;
48 
51 
53  QString description( int groupIndex ) const;
54 
56  QgsMeshDatasetGroup *datasetGroup( int groupIndex ) const;
57 
58  int datasetGroupCount() const override;
59  int datasetCount( int groupIndex ) const override;
60  QgsMeshDatasetGroupMetadata datasetGroupMetadata( int groupIndex ) const override;
62  QgsMeshDatasetValue datasetValue( QgsMeshDatasetIndex index, int valueIndex ) const override;
63  QgsMeshDataBlock datasetValues( QgsMeshDatasetIndex index, int valueIndex, int count ) const override;
64  QgsMesh3dDataBlock dataset3dValues( QgsMeshDatasetIndex index, int faceIndex, int count ) const override;
65  bool isFaceActive( QgsMeshDatasetIndex index, int faceIndex ) const override;
66  QgsMeshDataBlock areFacesActive( QgsMeshDatasetIndex index, int faceIndex, int count ) const override;
67 
69  bool addDataset( const QString &uri ) override;
70 
72  QStringList extraDatasets() const override;
73 
75  bool persistDatasetGroup( const QString &outputFilePath,
76  const QString &outputDriver,
77  const QgsMeshDatasetGroupMetadata &meta,
78  const QVector<QgsMeshDataBlock> &datasetValues,
79  const QVector<QgsMeshDataBlock> &datasetActive,
80  const QVector<double> &times ) override;
81 
83  bool persistDatasetGroup( const QString &outputFilePath,
84  const QString &outputDriver,
86  int datasetGroupIndex ) override;
87 
89  QDomElement writeXml( int groupIndex, QDomDocument &doc, const QgsReadWriteContext &context );
90 
93 
94  private:
95  std::vector<std::unique_ptr<QgsMeshDatasetGroup>> mGroups;
96 };
97 
119 class QgsMeshDatasetGroupStore: public QObject
120 {
121  Q_OBJECT
122 
124  typedef QPair<QgsMeshDatasetSourceInterface *, int> DatasetGroup;
125 
126  public:
129 
131  void setPersistentProvider( QgsMeshDataProvider *provider, const QStringList &extraDatasetUri );
132 
134  bool addPersistentDatasets( const QString &path );
135 
142  bool addDatasetGroup( QgsMeshDatasetGroup *group );
143 
145  bool saveDatasetGroup( QString filePath, int groupIndex, QString driver );
146 
149 
152 
155 
157  QList<int> datasetGroupIndexes() const;
158 
164  QList<int> enabledDatasetGroupIndexes() const;
165 
167  int datasetGroupCount() const;
168 
170  int extraDatasetGroupCount() const;
171 
173  int datasetCount( int groupIndex ) const;
174 
177 
180 
182  QgsMeshDatasetValue datasetValue( const QgsMeshDatasetIndex &index, int valueIndex ) const;
183 
185  QgsMeshDataBlock datasetValues( const QgsMeshDatasetIndex &index, int valueIndex, int count ) const;
186 
188  QgsMesh3dDataBlock dataset3dValues( const QgsMeshDatasetIndex &index, int faceIndex, int count ) const;
189 
191  QgsMeshDataBlock areFacesActive( const QgsMeshDatasetIndex &index, int faceIndex, int count ) const;
192 
194  bool isFaceActive( const QgsMeshDatasetIndex &index, int faceIndex ) const;
195 
198  int groupIndex,
200 
206  QList<QgsMeshDatasetIndex> datasetIndexInTimeInterval( qint64 time1, qint64 time2, int groupIndex ) const;
207 
209  qint64 datasetRelativeTime( const QgsMeshDatasetIndex &index ) const;
210 
212  bool hasTemporalCapabilities() const;
213 
215  QDomElement writeXml( QDomDocument &doc, const QgsReadWriteContext &context );
216 
218  void readXml( const QDomElement &storeElem, const QgsReadWriteContext &context );
219 
226  int globalDatasetGroupIndexInSource( QgsMeshDatasetSourceInterface *source, int nativeGroupIndex ) const;
227 
228  signals:
230  void datasetGroupsAdded( QList<int> indexes );
231 
232  private slots:
233  void onPersistentDatasetAdded( int count );
234 
235  private:
236  QgsMeshLayer *mLayer = nullptr;
237  QgsMeshDataProvider *mPersistentProvider = nullptr;
238  QList<int> mPersistentExtraDatasetGroupIndexes;
239  std::unique_ptr<QgsMeshExtraDatasetStore> mExtraDatasets;
240  QMap < int, DatasetGroup> mRegistery;
241  std::unique_ptr<QgsMeshDatasetGroupTreeItem> mDatasetGroupTreeRootItem;
242 
243  void removePersistentProvider();
244 
245  DatasetGroup datasetGroup( int index ) const;
246  int newIndex();
247 
248  int registerDatasetGroup( const DatasetGroup &group );
249  int nativeIndexToGroupIndex( QgsMeshDatasetSourceInterface *source, int providerIndex );
250  void createDatasetGroupTreeItems( const QList<int> &indexes );
251 
253  void eraseDatasetGroup( const DatasetGroup &group );
254 
256  void eraseExtraDataset( int indexInExtraStore );
257 
258  void checkDatasetConsistency( QgsMeshDatasetSourceInterface *source );
259  void removeUnregisteredItemFromTree();
260  void unregisterGroupNotPresentInTree();
261 
262  void syncItemToDatasetGroup( int groupIndex );
263 };
264 
265 #endif // QGSMESHDATASETGROUPSTORE_H
QgsMesh3dDataBlock is a block of 3d stacked mesh data related N faces defined on base mesh frame.
QgsMeshDataBlock is a block of integers/doubles that can be used to retrieve: active flags (e....
MatchingTemporalDatasetMethod
Method for selection of temporal mesh dataset from a range time.
Base class for providing data for QgsMeshLayer.
QgsMeshDatasetGroupMetadata is a collection of dataset group metadata such as whether the data is vec...
Class used to register and access all the dataset groups related to a mesh layer.
QgsMeshDatasetGroupTreeItem * datasetGroupTreeItem() const
Returns a pointer to the root of the dataset groups tree item.
QgsMeshDatasetMetadata datasetMetadata(const QgsMeshDatasetIndex &index) const
Returns the metadata of the dataset with global index.
QList< int > enabledDatasetGroupIndexes() const
Returns a list of all group indexes that are enabled.
bool addPersistentDatasets(const QString &path)
Adds persistent datasets from a file with path.
QgsMeshDatasetGroupMetadata datasetGroupMetadata(const QgsMeshDatasetIndex &index) const
Returns the metadata of the dataset group with global index.
bool isFaceActive(const QgsMeshDatasetIndex &index, int faceIndex) const
Returns whether face is active for particular dataset.
QList< int > datasetGroupIndexes() const
Returns a list of all group indexes.
bool hasTemporalCapabilities() const
Returns whether at lea&st one of stored dataset group is temporal.
void resetDatasetGroupTreeItem()
Resets to default state the dataset groups tree item.
QgsMeshDataBlock datasetValues(const QgsMeshDatasetIndex &index, int valueIndex, int count) const
Returns count values of the dataset with global index and from valueIndex.
QgsMesh3dDataBlock dataset3dValues(const QgsMeshDatasetIndex &index, int faceIndex, int count) const
Returns count 3D values of the dataset with global index and from valueIndex.
QgsMeshDatasetIndex datasetIndexAtTime(qint64 time, int groupIndex, QgsMeshDataProviderTemporalCapabilities::MatchingTemporalDatasetMethod method) const
Returns the global dataset index of the dataset int the dataset group with groupIndex,...
bool saveDatasetGroup(QString filePath, int groupIndex, QString driver)
Saves on a file with filePath the dataset groups index with groupIndex with the specified driver.
QList< QgsMeshDatasetIndex > datasetIndexInTimeInterval(qint64 time1, qint64 time2, int groupIndex) const
Returns the global dataset index of the dataset int the dataset group with groupIndex,...
bool addDatasetGroup(QgsMeshDatasetGroup *group)
Adds a extra dataset group, take ownership.
QgsMeshDatasetValue datasetValue(const QgsMeshDatasetIndex &index, int valueIndex) const
Returns the value of the dataset with global index and valueIndex.
QDomElement writeXml(QDomDocument &doc, const QgsReadWriteContext &context)
Writes the store's information in a DOM document.
int extraDatasetGroupCount() const
Returns the count of extra dataset groups.
int datasetGroupCount() const
Returns the count of dataset groups.
QgsMeshDatasetGroupStore(QgsMeshLayer *layer)
Constructor.
QgsMeshDataBlock areFacesActive(const QgsMeshDatasetIndex &index, int faceIndex, int count) const
Returns whether faces are active for particular dataset.
void setDatasetGroupTreeItem(QgsMeshDatasetGroupTreeItem *rootItem)
Sets the root of the dataset groups tree item, doesn't take onwnershib but clone the root item.
void setPersistentProvider(QgsMeshDataProvider *provider, const QStringList &extraDatasetUri)
Sets the persistent mesh data provider with the path of its extra dataset.
qint64 datasetRelativeTime(const QgsMeshDatasetIndex &index) const
Returns the relative time of the dataset from the persistent provider reference time.
int datasetCount(int groupIndex) const
Returns the total count of dataset group in the store.
void readXml(const QDomElement &storeElem, const QgsReadWriteContext &context)
Reads the store's information from a DOM document.
int globalDatasetGroupIndexInSource(QgsMeshDatasetSourceInterface *source, int nativeGroupIndex) const
Returns the global dataset group index of the dataset group with native index globalGroupIndex in the...
void datasetGroupsAdded(QList< int > indexes)
Emitted after dataset groups are added.
Tree item for display of the mesh dataset groups.
Abstract class that represents a dataset group.
QgsMeshDatasetIndex is index that identifies the dataset group (e.g.
QgsMeshDatasetMetadata is a collection of mesh dataset metadata such as whether the data is valid or ...
Interface for mesh datasets and dataset groups.
QgsMeshDatasetValue represents single dataset value.
Class that can be used to store and access extra dataset group, like memory dataset (temporary) Deriv...
int datasetCount(int groupIndex) const override
Returns number of datasets loaded in the group.
QString description(int groupIndex) const
Returns information related to the dataset group with groupIndex.
void updateTemporalCapabilities()
Updates the temporal capabilities.
QStringList extraDatasets() const override
Not implemented, always returns empty list.
QgsMeshDatasetGroup * datasetGroup(int groupIndex) const
Returns a pointer to the dataset group.
bool persistDatasetGroup(const QString &outputFilePath, const QString &outputDriver, const QgsMeshDatasetGroupMetadata &meta, const QVector< QgsMeshDataBlock > &datasetValues, const QVector< QgsMeshDataBlock > &datasetActive, const QVector< double > &times) override
Not implemented, always returns true.
quint64 datasetRelativeTime(QgsMeshDatasetIndex index)
Returns the relative times of the dataset index with index, returned value in milliseconds.
QgsMeshDataBlock datasetValues(QgsMeshDatasetIndex index, int valueIndex, int count) const override
Returns N vector/scalar values from the index from the dataset.
int addDatasetGroup(QgsMeshDatasetGroup *datasetGroup)
Adds a dataset group, returns the index of the added dataset group.
QgsMeshDataBlock areFacesActive(QgsMeshDatasetIndex index, int faceIndex, int count) const override
Returns whether the faces are active for particular dataset.
int datasetGroupCount() const override
Returns number of datasets groups loaded.
bool hasTemporalCapabilities() const
Returns whether if the dataset groups have temporal capabilities (a least one dataset group with more...
bool isFaceActive(QgsMeshDatasetIndex index, int faceIndex) const override
Returns whether the face is active for particular dataset.
QDomElement writeXml(int groupIndex, QDomDocument &doc, const QgsReadWriteContext &context)
Writes the store's information in a DOM document.
QgsMeshDatasetMetadata datasetMetadata(QgsMeshDatasetIndex index) const override
Returns dataset metadata.
void removeDatasetGroup(int index)
Removes the dataset group with the local index.
QgsMesh3dDataBlock dataset3dValues(QgsMeshDatasetIndex index, int faceIndex, int count) const override
Returns N vector/scalar values from the face index from the dataset for 3d stacked meshes.
QgsMeshDatasetGroupMetadata datasetGroupMetadata(int groupIndex) const override
Returns dataset group metadata.
QgsMeshDatasetValue datasetValue(QgsMeshDatasetIndex index, int valueIndex) const override
Returns vector/scalar value associated with the index from the dataset To read multiple continuous va...
bool addDataset(const QString &uri) override
Not implemented, always returns false.
Represents a mesh layer supporting display of data on structured or unstructured meshes.
Definition: qgsmeshlayer.h:97
The class is used as a container of context for various read/write operations on other objects.