30#include "moc_qgsmeshdatasetgroupstore.cpp"
32using namespace Qt::StringLiterals;
36 return mRegistry.keys();
41 return mDatasetGroupTreeRootItem->enabledDatasetGroupIndexes();
46 return mRegistry.count();
51 return mExtraDatasets.datasetGroupCount();
61 removePersistentProvider();
62 mPersistentProvider = provider;
63 if ( !mPersistentProvider )
65 for (
const QString &uri : extraDatasetUri )
68 onPersistentDatasetAdded( mPersistentProvider->datasetGroupCount() );
70 checkDatasetConsistency( mPersistentProvider );
71 removeUnregisteredItemFromTree();
74 const int groupCount = mExtraDatasets.datasetGroupCount();
75 for (
int i = 0; i < groupCount; ++i )
76 if ( mExtraDatasets.datasetGroup( i ) )
77 mExtraDatasets.datasetGroup( i )->initialize();
79 mExtraDatasets.updateTemporalCapabilities();
84QgsMeshDatasetGroupStore::DatasetGroup QgsMeshDatasetGroupStore::datasetGroup(
int index )
const
86 return mRegistry.value( index, DatasetGroup {
nullptr, -1 } );
91 if ( !mPersistentProvider )
93 return mPersistentProvider->addDataset( path );
101 switch ( group->dataType() )
104 if ( !group->checkValueCountPerDataset( mLayer->meshFaceCount() ) )
108 if ( !group->checkValueCountPerDataset( mLayer->meshVertexCount() ) )
115 if ( !group->checkValueCountPerDataset( mLayer->meshEdgeCount() ) )
120 int nativeIndex = mExtraDatasets.addDatasetGroup( std::move( group ) );
121 int groupIndex = registerDatasetGroup( DatasetGroup { &mExtraDatasets, nativeIndex } );
123 if ( groupIndex == -1 )
126 QList<int> groupIndexes;
127 groupIndexes.append( groupIndex );
128 createDatasetGroupTreeItems( groupIndexes );
129 syncItemToDatasetGroup( groupIndex );
138 const QgsMeshDatasetGroupStore::DatasetGroup group = datasetGroup( index );
139 if ( group.first == mPersistentProvider )
140 mPersistentProvider->removeDatasetGroup( group.second );
141 else if ( group.first == &mExtraDatasets )
142 eraseExtraDataset( group.second );
144 reindexDatasetGroups();
147void QgsMeshDatasetGroupStore::reindexDatasetGroups()
150 mPersistentExtraDatasetGroupIndexes.clear();
151 mGroupNameToGlobalIndex.clear();
158 mRegistry[globalIndex] = DatasetGroup { mPersistentProvider, i };
159 mPersistentExtraDatasetGroupIndexes.append( globalIndex );
160 mGroupNameToGlobalIndex.insert( name, globalIndex );
164 for (
int i = 0; i < mExtraDatasets.datasetGroupCount(); i++ )
166 QgsMeshDatasetSourceInterface *source = &mExtraDatasets;
168 mRegistry[globalIndex] = DatasetGroup { source, i };
169 mGroupNameToGlobalIndex.insert( name, globalIndex );
176 mDatasetGroupTreeRootItem = std::make_unique<QgsMeshDatasetGroupTreeItem>();
179 for (
int groupIndex : groupIndexes )
180 syncItemToDatasetGroup( groupIndex );
185 return mDatasetGroupTreeRootItem.get();
191 mDatasetGroupTreeRootItem.reset( rootItem->
clone() );
193 mDatasetGroupTreeRootItem.reset();
195 unregisterGroupNotPresentInTree();
200 QgsMeshDatasetGroupStore::DatasetGroup group = datasetGroup( index.
group() );
202 return group.first->datasetGroupMetadata( group.second );
209 QgsMeshDatasetGroupStore::DatasetGroup group = datasetGroup( groupIndex );
211 return group.first->datasetCount( group.second );
218 QgsMeshDatasetGroupStore::DatasetGroup group = datasetGroup( index.
group() );
227 QgsMeshDatasetGroupStore::DatasetGroup group = datasetGroup( index.
group() );
236 QgsMeshDatasetGroupStore::DatasetGroup group = datasetGroup( index.
group() );
245 QgsMeshDatasetGroupStore::DatasetGroup group = datasetGroup( index.
group() );
254 QgsMeshDatasetGroupStore::DatasetGroup group = datasetGroup( index.
group() );
263 QgsMeshDatasetGroupStore::DatasetGroup group = datasetGroup( index.
group() );
272 QgsMeshDatasetGroupStore::DatasetGroup group = datasetGroup( groupIndex );
276 const QDateTime &referenceTime = mPersistentProvider ? mPersistentProvider->temporalCapabilities()->referenceTime() : QDateTime();
278 return QgsMeshDatasetIndex( groupIndex, group.first->datasetIndexAtTime( referenceTime, group.second, time, method ).dataset() );
283 const QgsMeshDatasetGroupStore::DatasetGroup group = datasetGroup( groupIndex );
285 return QList<QgsMeshDatasetIndex>();
287 const QDateTime &referenceTime = mPersistentProvider ? mPersistentProvider->temporalCapabilities()->referenceTime() : QDateTime();
289 const QList<QgsMeshDatasetIndex> datasetIndexes = group.first->datasetIndexInTimeInterval( referenceTime, group.second, time1, time2 );
291 QList<QgsMeshDatasetIndex> ret;
292 ret.reserve( datasetIndexes.count() );
302 QgsMeshDatasetGroupStore::DatasetGroup group = datasetGroup( index.
group() );
303 if ( !group.first || group.second < 0 )
308 if ( group.first == mPersistentProvider )
309 return mPersistentProvider->temporalCapabilities()->datasetTime( nativeIndex );
310 else if ( group.first == &mExtraDatasets )
311 return mExtraDatasets.datasetRelativeTime( nativeIndex );
318 return ( mPersistentProvider && mPersistentProvider->temporalCapabilities()->hasTemporalCapabilities() ) || ( mExtraDatasets.hasTemporalCapabilities() );
324 QDomElement storeElement = doc.createElement( u
"mesh-dataset-groups-store"_s );
325 storeElement.appendChild( mDatasetGroupTreeRootItem->writeXml( doc, context ) );
327 QMap< int, DatasetGroup>::const_iterator it = mRegistry.constBegin();
328 while ( it != mRegistry.constEnd() )
330 QDomElement elemDataset;
331 if ( it.value().first == mPersistentProvider )
333 elemDataset = doc.createElement( u
"mesh-dataset"_s );
334 elemDataset.setAttribute( u
"global-index"_s, it.key() );
335 elemDataset.setAttribute( u
"source-type"_s, u
"persitent-provider"_s );
336 elemDataset.setAttribute( u
"source-index"_s, it.value().second );
338 else if ( it.value().first == &mExtraDatasets )
343 elemDataset = mExtraDatasets.writeXml( it.value().second, doc, context );
344 if ( !elemDataset.isNull() )
345 elemDataset.setAttribute( u
"global-index"_s, it.key() );
349 if ( !elemDataset.isNull() )
350 storeElement.appendChild( elemDataset );
354 for (
auto it = mGroupNameToGlobalIndex.constBegin(); it != mGroupNameToGlobalIndex.constEnd(); ++it )
356 QDomElement elemNameToIndex = doc.createElement( u
"name-to-global-index"_s );
357 elemNameToIndex.setAttribute( u
"name"_s, it.key() );
358 elemNameToIndex.setAttribute( u
"global-index"_s, it.value() );
360 storeElement.appendChild( elemNameToIndex );
370 QDomElement datasetElem = storeElem.firstChildElement(
"mesh-dataset" );
371 while ( !datasetElem.isNull() )
373 int globalIndex = datasetElem.attribute( u
"global-index"_s ).toInt();
375 const QString sourceType = datasetElem.attribute( u
"source-type"_s );
376 if ( sourceType ==
"persitent-provider"_L1 )
378 mPersistentExtraDatasetGroupIndexes.append( globalIndex );
380 else if ( sourceType ==
"virtual"_L1 )
383 QString name = datasetElem.attribute( u
"name"_s );
384 QString formula = datasetElem.attribute( u
"formula"_s );
385 qint64 startTime = datasetElem.attribute( u
"start-time"_s ).toLongLong();
386 qint64 endTime = datasetElem.attribute( u
"end-time"_s ).toLongLong();
388 auto dsg = std::make_unique< QgsMeshVirtualDatasetGroup >( name, formula, mLayer, startTime, endTime );
389 int sourceIndex = mExtraDatasets.addDatasetGroup( std::move( dsg ) );
391 mRegistry[globalIndex] = DatasetGroup { source, sourceIndex };
395 QgsDebugError( u
"Unhandled source-type: %1."_s.arg( sourceType ) );
398 datasetElem = datasetElem.nextSiblingElement( u
"mesh-dataset"_s );
401 QDomElement nameToIndexElem = storeElem.firstChildElement(
"name-to-global-index" );
402 mGroupNameToGlobalIndex.clear();
403 while ( !nameToIndexElem.isNull() )
405 QString name = nameToIndexElem.attribute( u
"name"_s );
406 int globalIndex = nameToIndexElem.attribute( u
"global-index"_s ).toInt();
408 mGroupNameToGlobalIndex.insert( name, globalIndex );
410 nameToIndexElem = nameToIndexElem.nextSiblingElement( u
"name-to-global-index"_s );
413 QDomElement rootTreeItemElem = storeElem.firstChildElement( u
"mesh-dataset-group-tree-item"_s );
414 if ( !rootTreeItemElem.isNull() )
423 for ( QMap<int, DatasetGroup>::const_iterator it = mRegistry.cbegin(); it != mRegistry.cend(); ++it )
425 if ( it.value().first == source && it.value().second == nativeGroupIndex )
434 return mGroupNameToGlobalIndex.value(
groupName, -1 );
444 DatasetGroup group = datasetGroup( groupIndex );
447 if ( group.first && group.second >= 0 )
448 fail = mPersistentProvider->persistDatasetGroup( filePath, driver, group.first, group.second );
452 eraseDatasetGroup( group );
453 group.first = mPersistentProvider;
454 group.second = mPersistentProvider->datasetGroupCount() - 1;
455 mRegistry[groupIndex] = group;
457 if ( mDatasetGroupTreeRootItem )
468void QgsMeshDatasetGroupStore::onPersistentDatasetAdded(
int count )
470 Q_ASSERT( mPersistentProvider );
474 QList<int> newGroupIndexes;
475 for (
int i = providerBeginIndex; i < providerTotalCount; ++i )
478 if ( mGroupNameToGlobalIndex.empty() && i < mPersistentExtraDatasetGroupIndexes.count() )
481 mRegistry[mPersistentExtraDatasetGroupIndexes.at( i )] = DatasetGroup( mPersistentProvider, i );
483 else if ( mGroupNameToGlobalIndex.contains(
groupName ) )
486 registerDatasetGroup( DatasetGroup { mPersistentProvider, i } );
490 int newGroupIndex = registerDatasetGroup( DatasetGroup { mPersistentProvider, i } );
491 if ( newGroupIndex != -1 )
492 newGroupIndexes.append( newGroupIndex );
496 if ( !newGroupIndexes.isEmpty() )
498 createDatasetGroupTreeItems( newGroupIndexes );
499 mPersistentExtraDatasetGroupIndexes.append( newGroupIndexes );
501 for (
int groupIndex : std::as_const( newGroupIndexes ) )
502 syncItemToDatasetGroup( groupIndex );
508void QgsMeshDatasetGroupStore::removePersistentProvider()
510 if ( !mPersistentProvider )
515 QMap< int, DatasetGroup>::iterator it = mRegistry.begin();
516 while ( it != mRegistry.end() )
518 if ( it.value().first == mPersistentProvider )
519 it = mRegistry.erase( it );
524 mPersistentProvider =
nullptr;
527int QgsMeshDatasetGroupStore::newIndex()
529 QSet usedIndex = qgis::listToSet( mRegistry.keys() );
530 usedIndex.unite( qgis::listToSet( mGroupNameToGlobalIndex.values() ) );
533 while ( usedIndex.contains( index ) )
539int QgsMeshDatasetGroupStore::registerDatasetGroup(
const QgsMeshDatasetGroupStore::DatasetGroup &group )
541 const QString &name = group.first->datasetGroupMetadata( group.second ).name();
542 auto it = mGroupNameToGlobalIndex.find( name );
545 if ( it != mGroupNameToGlobalIndex.end() )
547 groupIndex = it.value();
549 if ( mRegistry.contains( groupIndex ) )
551 QgsDebugError( u
"Duplicate group name for %1."_s.arg( name ) );
557 groupIndex = newIndex();
558 mGroupNameToGlobalIndex.insert( name, groupIndex );
561 mRegistry[groupIndex] = group;
565void QgsMeshDatasetGroupStore::eraseDatasetGroup(
const QgsMeshDatasetGroupStore::DatasetGroup &group )
567 if ( group.first == mPersistentProvider )
569 else if ( group.first == &mExtraDatasets )
570 eraseExtraDataset( group.second );
573void QgsMeshDatasetGroupStore::eraseExtraDataset(
int indexInExtraStore )
575 mExtraDatasets.removeDatasetGroup( indexInExtraStore );
578 QMap< int, DatasetGroup>::iterator it = mRegistry.begin();
579 while ( it != mRegistry.end() )
581 int localIndex = it.value().second;
582 if ( it.value().first == &mExtraDatasets && localIndex > indexInExtraStore )
583 it->second = localIndex - 1;
595 if ( globalIndex == -1 )
596 globalIndex = registerDatasetGroup( DatasetGroup { source, i } );
598 if ( globalIndex != -1 )
599 indexes.append( globalIndex );
602 if ( !indexes.isEmpty() )
603 createDatasetGroupTreeItems( indexes );
605 const QList<int> globalIndexes = mRegistry.keys();
606 for (
int globalIndex : globalIndexes )
608 if ( mRegistry.value( globalIndex ).first == source )
609 syncItemToDatasetGroup( globalIndex );
613void QgsMeshDatasetGroupStore::removeUnregisteredItemFromTree()
615 QList<QgsMeshDatasetGroupTreeItem *> itemsToCheck;
616 QList<int> indexItemToRemove;
617 for (
int i = 0; i < mDatasetGroupTreeRootItem->childCount(); ++i )
618 itemsToCheck.append( mDatasetGroupTreeRootItem->child( i ) );
620 while ( !itemsToCheck.isEmpty() )
622 QgsMeshDatasetGroupTreeItem *item = itemsToCheck.takeFirst();
624 if ( !mRegistry.contains( globalIndex ) )
625 indexItemToRemove.append( globalIndex );
626 for (
int i = 0; i < item->
childCount(); ++i )
627 itemsToCheck.append( item->
child( i ) );
630 for (
int i : indexItemToRemove )
638void QgsMeshDatasetGroupStore::unregisterGroupNotPresentInTree()
640 if ( !mDatasetGroupTreeRootItem )
646 QMap< int, DatasetGroup>::iterator it = mRegistry.begin();
647 while ( it != mRegistry.end() )
649 DatasetGroup datasetGroup = it.value();
650 int globalIndex = it.key();
651 if ( !mDatasetGroupTreeRootItem->childFromDatasetGroupIndex( globalIndex )
652 && datasetGroup.first != mPersistentProvider )
654 it = mRegistry.erase( it );
655 eraseDatasetGroup( datasetGroup );
662void QgsMeshDatasetGroupStore::syncItemToDatasetGroup(
int groupIndex )
664 if ( !mDatasetGroupTreeRootItem )
666 const DatasetGroup group = datasetGroup( groupIndex );
668 if ( group.first == mPersistentProvider && mPersistentProvider )
670 const QgsMeshDatasetGroupMetadata meta = mPersistentProvider->datasetGroupMetadata( group.second );
674 else if ( group.first == &mExtraDatasets )
681void QgsMeshDatasetGroupStore::createDatasetGroupTreeItems(
const QList<int> &indexes )
683 QMap<QString, QgsMeshDatasetGroupTreeItem *> mNameToItem;
685 for (
int i = 0; i < indexes.count(); ++i )
687 int groupIndex = indexes.at( i );
688 if ( mDatasetGroupTreeRootItem->childFromDatasetGroupIndex( groupIndex ) )
691 const QString name = meta.
name();
692 const QStringList subdatasets = name.split(
'/' );
694 QString displayName = name;
695 QgsMeshDatasetGroupTreeItem *parent = mDatasetGroupTreeRootItem.get();
697 if ( subdatasets.size() == 2 )
699 auto it = mNameToItem.find( subdatasets[0] );
700 if ( it == mNameToItem.end() )
701 QgsDebugError( u
"Unable to find parent group for %1."_s.arg( name ) );
704 displayName = subdatasets[1];
708 else if ( subdatasets.size() != 1 )
709 QgsDebugError( u
"Ignoring too deep child group name %1."_s.arg( name ) );
711 QgsMeshDatasetGroupTreeItem *item =
new QgsMeshDatasetGroupTreeItem( displayName, name, meta.
isVector(), groupIndex );
713 if ( mNameToItem.contains( name ) )
714 QgsDebugError( u
"Group %1 is not unique"_s.arg( displayName ) );
715 mNameToItem[name] = item;
721 int groupIndex = mGroups.size();
731 return mGroups.size() - 1;
737 mGroups.erase( mGroups.begin() + groupIndex );
755 if ( groupIndex >= 0 && groupIndex <
int( mGroups.size() ) )
756 return mGroups.at( groupIndex )->description();
763 if ( groupIndex >= 0 && groupIndex <
int( mGroups.size() ) )
764 return mGroups[groupIndex].get();
777 return QStringList();
782 return mGroups.size();
788 return mGroups.at( groupIndex )->datasetCount();
796 return mGroups.at( groupIndex )->groupMetadata();
803 int groupIndex = index.
group();
806 int datasetIndex = index.
dataset();
816 int groupIndex = index.
group();
820 int datasetIndex = index.
dataset();
830 int groupIndex = index.
group();
834 int datasetIndex = index.
dataset();
846 Q_UNUSED( faceIndex )
853 int groupIndex = index.
group();
857 int datasetIndex = index.
dataset();
867 int groupIndex = index.
group();
871 int datasetIndex = index.
dataset();
879 const QString &outputFilePath,
880 const QString &outputDriver,
883 const QVector<QgsMeshDataBlock> &datasetActive,
884 const QVector<double> ×
887 Q_UNUSED( outputFilePath )
888 Q_UNUSED( outputDriver )
891 Q_UNUSED( datasetActive )
898 Q_UNUSED( outputFilePath )
899 Q_UNUSED( outputDriver )
901 Q_UNUSED( datasetGroupIndex )
907 if ( groupIndex >= 0 && groupIndex <
int( mGroups.size() ) && mGroups[groupIndex] )
908 return mGroups[groupIndex]->writeXml( doc, context );
910 return QDomElement();
917 bool hasTemporal =
false;
918 for (
size_t g = 0; g < mGroups.size(); ++g )
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.
void datasetGroupsAdded(int count)
Emitted when some new dataset groups have been added.
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.
QgsMeshDatasetGroupTreeItem * clone() const
Clones the item.
void setPersistentDatasetGroup(const QString &uri)
Set parameters of the item in accordance with the persistent dataset group with uri.
int childCount() const
Returns the count of children.
int datasetGroupIndex() const
Returns the dataset group index.
QgsMeshDatasetGroupTreeItem * parentItem() const
Returns the parent item, nullptr if it is root item.
QgsMeshDatasetGroupTreeItem * childFromDatasetGroupIndex(int index)
Returns the child with dataset group index Searches as depper as needed on the child hierarchy.
void removeChild(QgsMeshDatasetGroupTreeItem *item)
Removes and destroy a item child if exists.
void setDatasetGroup(QgsMeshDatasetGroup *datasetGroup)
Set parameters of the item in accordance with the dataset group.
void appendChild(QgsMeshDatasetGroupTreeItem *item)
Appends a child item.
QgsMeshDatasetGroupTreeItem * child(int row) const
Returns a child.
Abstract class that represents a dataset group.
bool isScalar() const
Returns whether the group contain scalar values.
virtual QgsMeshDatasetMetadata datasetMetadata(int datasetIndex) const =0
Returns the metadata of the dataset with index datasetIndex.
virtual int datasetCount() const =0
Returns the count of datasets in the group.
virtual QgsMeshDataset * dataset(int index) const =0
Returns the dataset with index.
An index that identifies the dataset group (e.g.
bool isValid() const
Returns whether index is valid, ie at least groups is set.
int group() const
Returns a group index.
int dataset() const
Returns a dataset index within group().
Interface for mesh datasets and dataset groups.
virtual QgsMeshDatasetGroupMetadata datasetGroupMetadata(int groupIndex) const =0
Returns dataset group metadata.
QgsMeshDatasetSourceInterface()
virtual int datasetGroupCount() const =0
Returns number of datasets groups loaded.
std::unique_ptr< QgsMeshDataProviderTemporalCapabilities > mTemporalCapabilities
virtual bool addDataset(const QString &uri)=0
Associate dataset with the mesh.
Represents a single mesh dataset value.
virtual QgsMeshDataBlock datasetValues(bool isScalar, int valueIndex, int count) const =0
Returns count values from valueIndex.
virtual bool isActive(int faceIndex) const =0
Returns whether the face is active.
virtual QgsMeshDataBlock areFacesActive(int faceIndex, int count) const =0
Returns whether faces are active.
virtual QgsMeshDatasetValue datasetValue(int valueIndex) const =0
Returns the value with index valueIndex.
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.
#define QgsDebugError(str)
#define INVALID_MESHLAYER_TIME