QGIS API Documentation 3.99.0-Master (a5475b57e34)
Loading...
Searching...
No Matches
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
22#include "qgsmeshdataprovider.h"
23#include "qgsmeshdataset.h"
24
25#define SIP_NO_FILE
26
27class QgsMeshLayer;
28
40{
41 public:
42
44 int addDatasetGroup( std::unique_ptr< QgsMeshDatasetGroup > datasetGroup );
45
47 void removeDatasetGroup( int index );
48
50 bool hasTemporalCapabilities() const;
51
53 qint64 datasetRelativeTime( QgsMeshDatasetIndex index ) const;
54
56 QString description( int groupIndex ) const;
57
59 QgsMeshDatasetGroup *datasetGroup( int groupIndex ) const;
60
61 int datasetGroupCount() const override;
62 int datasetCount( int groupIndex ) const override;
63 QgsMeshDatasetGroupMetadata datasetGroupMetadata( int groupIndex ) const override;
65 QgsMeshDatasetValue datasetValue( QgsMeshDatasetIndex index, int valueIndex ) const override;
66 QgsMeshDataBlock datasetValues( QgsMeshDatasetIndex index, int valueIndex, int count ) const override;
67 QgsMesh3DDataBlock dataset3dValues( QgsMeshDatasetIndex index, int faceIndex, int count ) const override;
68 bool isFaceActive( QgsMeshDatasetIndex index, int faceIndex ) const override;
69 QgsMeshDataBlock areFacesActive( QgsMeshDatasetIndex index, int faceIndex, int count ) const override;
70
72 bool addDataset( const QString &uri ) override;
73
75 QStringList extraDatasets() const override;
76
79 bool persistDatasetGroup( const QString &outputFilePath,
80 const QString &outputDriver,
82 const QVector<QgsMeshDataBlock> &datasetValues,
83 const QVector<QgsMeshDataBlock> &datasetActive,
84 const QVector<double> &times ) override;
85
87 bool persistDatasetGroup( const QString &outputFilePath,
88 const QString &outputDriver,
90 int datasetGroupIndex ) override;
91
93 QDomElement writeXml( int groupIndex, QDomDocument &doc, const QgsReadWriteContext &context );
94
97
98 private:
99 std::vector<std::unique_ptr<QgsMeshDatasetGroup>> mGroups;
100};
101
123class QgsMeshDatasetGroupStore: public QObject
124{
125 Q_OBJECT
126
128 typedef QPair<QgsMeshDatasetSourceInterface *, int> DatasetGroup;
129
130 public:
132 explicit QgsMeshDatasetGroupStore( QgsMeshLayer *layer );
133
135 void setPersistentProvider( QgsMeshDataProvider *provider, const QStringList &extraDatasetUri );
136
138 bool addPersistentDatasets( const QString &path );
139
145 bool addDatasetGroup( std::unique_ptr< QgsMeshDatasetGroup > group );
146
148 bool saveDatasetGroup( QString filePath, int groupIndex, QString driver );
149
152
155
162
164 QList<int> datasetGroupIndexes() const;
165
171 QList<int> enabledDatasetGroupIndexes() const;
172
174 int datasetGroupCount() const;
175
177 int extraDatasetGroupCount() const;
178
180 int datasetCount( int groupIndex ) const;
181
184
187
189 QgsMeshDatasetValue datasetValue( const QgsMeshDatasetIndex &index, int valueIndex ) const;
190
192 QgsMeshDataBlock datasetValues( const QgsMeshDatasetIndex &index, int valueIndex, int count ) const;
193
195 QgsMesh3DDataBlock dataset3dValues( const QgsMeshDatasetIndex &index, int faceIndex, int count ) const;
196
198 QgsMeshDataBlock areFacesActive( const QgsMeshDatasetIndex &index, int faceIndex, int count ) const;
199
201 bool isFaceActive( const QgsMeshDatasetIndex &index, int faceIndex ) const;
202
205 int groupIndex,
207
213 QList<QgsMeshDatasetIndex> datasetIndexInTimeInterval( qint64 time1, qint64 time2, int groupIndex ) const;
214
216 qint64 datasetRelativeTime( const QgsMeshDatasetIndex &index ) const;
217
219 bool hasTemporalCapabilities() const;
220
222 QDomElement writeXml( QDomDocument &doc, const QgsReadWriteContext &context );
223
225 void readXml( const QDomElement &storeElem, const QgsReadWriteContext &context );
226
233 int globalDatasetGroupIndexInSource( QgsMeshDatasetSourceInterface *source, int nativeGroupIndex ) const;
234
240 int indexFromGroupName( const QString &groupName ) const;
241
247 QString groupName( int groupIndex ) const;
248
254 void removeDatasetGroup( int groupIndex );
255
256 signals:
258 void datasetGroupsAdded( QList<int> indexes );
259
260 private slots:
261 void onPersistentDatasetAdded( int count );
262
263 private:
264 QgsMeshLayer *mLayer = nullptr;
265 QgsMeshDataProvider *mPersistentProvider = nullptr;
266 QgsMeshExtraDatasetStore mExtraDatasets;
267 QMap < int, DatasetGroup> mRegistry;
268 QList<int> mPersistentExtraDatasetGroupIndexes;
269 QMap<QString, int> mGroupNameToGlobalIndex;
270 std::unique_ptr<QgsMeshDatasetGroupTreeItem> mDatasetGroupTreeRootItem;
271
272 void removePersistentProvider();
273
275 void reindexDatasetGroups();
276
277 DatasetGroup datasetGroup( int index ) const;
278
280 int newIndex();
281
282 int registerDatasetGroup( const DatasetGroup &group );
283 void createDatasetGroupTreeItems( const QList<int> &indexes );
284
286 void eraseDatasetGroup( const DatasetGroup &group );
287
289 void eraseExtraDataset( int indexInExtraStore );
290
291 void checkDatasetConsistency( QgsMeshDatasetSourceInterface *source );
292 void removeUnregisteredItemFromTree();
293 void unregisterGroupNotPresentInTree();
294
295 void syncItemToDatasetGroup( int groupIndex );
296};
297
298#endif // QGSMESHDATASETGROUPSTORE_H
A block of 3d stacked mesh data related N faces defined on base mesh frame.
A block of integers/doubles from a mesh dataset.
MatchingTemporalDatasetMethod
Method for selection of temporal mesh dataset from a range time.
Base class for providing data for QgsMeshLayer.
A collection of dataset group metadata such as whether the data is vector or scalar,...
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.
void setDatasetGroupTreeItem(const QgsMeshDatasetGroupTreeItem *rootItem)
Sets the root of the dataset groups tree item.
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.
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,...
QgsMeshDatasetValue datasetValue(const QgsMeshDatasetIndex &index, int valueIndex) const
Returns the value of the dataset with global index and valueIndex.
void removeDatasetGroup(int groupIndex)
Removes dataset group with global index groupIndex.
bool addDatasetGroup(std::unique_ptr< QgsMeshDatasetGroup > group)
Adds a extra dataset group, take ownership, returns True if the group is effectively added.
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.
QString groupName(int groupIndex) const
Returns the name of the dataset group with global index groupIndex.
void setPersistentProvider(QgsMeshDataProvider *provider, const QStringList &extraDatasetUri)
Sets the persistent mesh data provider with the path of its extra dataset to be loaded by the provide...
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 nativeGroupIndex in the...
int indexFromGroupName(const QString &groupName) const
Returns the global dataset group index of the dataset with name groupName.
void datasetGroupsAdded(QList< int > indexes)
Emitted after dataset groups are added.
QgsMesh3DDataBlock dataset3dValues(const QgsMeshDatasetIndex &index, int faceIndex, int count) const
Returns count 3D values of the dataset with global index and from valueIndex.
Tree item for display of the mesh dataset groups.
Abstract class that represents a dataset group.
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 Q_DECL_DEPRECATED bool persistDatasetGroup(const QString &path, const QgsMeshDatasetGroupMetadata &meta, const QVector< QgsMeshDataBlock > &datasetValues, const QVector< QgsMeshDataBlock > &datasetActive, const QVector< double > &times)
Creates a new dataset group from a data and persists it into a destination path.
Represents a single mesh dataset value.
Stores and accesses extra dataset groups for meshes.
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.
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.
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.
qint64 datasetRelativeTime(QgsMeshDatasetIndex index) const
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.
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.
int addDatasetGroup(std::unique_ptr< QgsMeshDatasetGroup > datasetGroup)
Adds a dataset group, returns the index of the added dataset group.
QgsMeshDatasetMetadata datasetMetadata(QgsMeshDatasetIndex index) const override
Returns dataset metadata.
void removeDatasetGroup(int index)
Removes the dataset group with the local index.
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.
A container for the context for various read/write operations on objects.