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() );
274 QgsMeshDatasetGroupStore::DatasetGroup group = datasetGroup( groupIndex );
278 const QDateTime &referenceTime = mPersistentProvider ? mPersistentProvider->temporalCapabilities()->referenceTime() : QDateTime();
281 group.first->datasetIndexAtTime( referenceTime, group.second, time, method ).dataset() );
287 int groupIndex )
const
289 const QgsMeshDatasetGroupStore::DatasetGroup group = datasetGroup( groupIndex );
291 return QList<QgsMeshDatasetIndex>();
293 const QDateTime &referenceTime = mPersistentProvider ? mPersistentProvider->temporalCapabilities()->referenceTime() : QDateTime();
295 const QList<QgsMeshDatasetIndex> datasetIndexes = group.first->datasetIndexInTimeInterval( referenceTime, group.second, time1, time2 );
297 QList<QgsMeshDatasetIndex> ret;
298 ret.reserve( datasetIndexes.count() );
308 QgsMeshDatasetGroupStore::DatasetGroup group = datasetGroup( index.
group() );
309 if ( !group.first || group.second < 0 )
314 if ( group.first == mPersistentProvider )
315 return mPersistentProvider->temporalCapabilities()->datasetTime( nativeIndex );
316 else if ( group.first == &mExtraDatasets )
317 return mExtraDatasets.datasetRelativeTime( nativeIndex );
325 return ( mPersistentProvider && mPersistentProvider->temporalCapabilities()->hasTemporalCapabilities() ) ||
326 ( mExtraDatasets.hasTemporalCapabilities() );
332 QDomElement storeElement = doc.createElement( u
"mesh-dataset-groups-store"_s );
333 storeElement.appendChild( mDatasetGroupTreeRootItem->writeXml( doc, context ) );
335 QMap < int, DatasetGroup>::const_iterator it = mRegistry.constBegin();
336 while ( it != mRegistry.constEnd() )
338 QDomElement elemDataset;
339 if ( it.value().first == mPersistentProvider )
341 elemDataset = doc.createElement( u
"mesh-dataset"_s );
342 elemDataset.setAttribute( u
"global-index"_s, it.key() );
343 elemDataset.setAttribute( u
"source-type"_s, u
"persitent-provider"_s );
344 elemDataset.setAttribute( u
"source-index"_s, it.value().second );
346 else if ( it.value().first == &mExtraDatasets )
351 elemDataset = mExtraDatasets.writeXml( it.value().second, doc, context );
352 if ( !elemDataset.isNull() )
353 elemDataset.setAttribute( u
"global-index"_s, it.key() );
357 if ( !elemDataset.isNull() )
358 storeElement.appendChild( elemDataset );
362 for (
auto it = mGroupNameToGlobalIndex.constBegin(); it != mGroupNameToGlobalIndex.constEnd(); ++it )
364 QDomElement elemNameToIndex = doc.createElement( u
"name-to-global-index"_s );
365 elemNameToIndex.setAttribute( u
"name"_s, it.key() );
366 elemNameToIndex.setAttribute( u
"global-index"_s, it.value() );
368 storeElement.appendChild( elemNameToIndex );
378 QDomElement datasetElem = storeElem.firstChildElement(
"mesh-dataset" );
379 while ( !datasetElem.isNull() )
381 int globalIndex = datasetElem.attribute( u
"global-index"_s ).toInt();
383 const QString sourceType = datasetElem.attribute( u
"source-type"_s );
384 if ( sourceType ==
"persitent-provider"_L1 )
386 mPersistentExtraDatasetGroupIndexes.append( globalIndex );
388 else if ( sourceType ==
"virtual"_L1 )
391 QString name = datasetElem.attribute( u
"name"_s );
392 QString formula = datasetElem.attribute( u
"formula"_s );
393 qint64 startTime = datasetElem.attribute( u
"start-time"_s ).toLongLong();
394 qint64 endTime = datasetElem.attribute( u
"end-time"_s ).toLongLong();
396 auto dsg = std::make_unique< QgsMeshVirtualDatasetGroup >( name, formula, mLayer, startTime, endTime );
397 int sourceIndex = mExtraDatasets.addDatasetGroup( std::move( dsg ) );
399 mRegistry[globalIndex] = DatasetGroup{source, sourceIndex};
403 QgsDebugError( u
"Unhandled source-type: %1."_s.arg( sourceType ) );
406 datasetElem = datasetElem.nextSiblingElement( u
"mesh-dataset"_s );
409 QDomElement nameToIndexElem = storeElem.firstChildElement(
"name-to-global-index" );
410 mGroupNameToGlobalIndex.clear();
411 while ( !nameToIndexElem.isNull() )
413 QString name = nameToIndexElem.attribute( u
"name"_s );
414 int globalIndex = nameToIndexElem.attribute( u
"global-index"_s ).toInt();
416 mGroupNameToGlobalIndex.insert( name, globalIndex );
418 nameToIndexElem = nameToIndexElem.nextSiblingElement( u
"name-to-global-index"_s );
421 QDomElement rootTreeItemElem = storeElem.firstChildElement( u
"mesh-dataset-group-tree-item"_s );
422 if ( !rootTreeItemElem.isNull() )
431 for ( QMap<int, DatasetGroup>::const_iterator it = mRegistry.cbegin(); it != mRegistry.cend(); ++it )
433 if ( it.value().first == source && it.value().second == nativeGroupIndex )
442 return mGroupNameToGlobalIndex.value(
groupName, -1 );
452 DatasetGroup group = datasetGroup( groupIndex );
455 if ( group.first && group.second >= 0 )
456 fail = mPersistentProvider->persistDatasetGroup( filePath, driver, group.first, group.second );
460 eraseDatasetGroup( group );
461 group.first = mPersistentProvider;
462 group.second = mPersistentProvider->datasetGroupCount() - 1;
463 mRegistry[groupIndex] = group;
465 if ( mDatasetGroupTreeRootItem )
476void QgsMeshDatasetGroupStore::onPersistentDatasetAdded(
int count )
478 Q_ASSERT( mPersistentProvider );
482 QList<int> newGroupIndexes;
483 for (
int i = providerBeginIndex; i < providerTotalCount; ++i )
486 if ( mGroupNameToGlobalIndex.empty() && i < mPersistentExtraDatasetGroupIndexes.count() )
489 mRegistry[mPersistentExtraDatasetGroupIndexes.at( i )] = DatasetGroup( mPersistentProvider, i );
491 else if ( mGroupNameToGlobalIndex.contains(
groupName ) )
494 registerDatasetGroup( DatasetGroup{mPersistentProvider, i} );
498 int newGroupIndex = registerDatasetGroup( DatasetGroup{mPersistentProvider, i} );
499 if ( newGroupIndex != -1 )
500 newGroupIndexes.append( newGroupIndex );
504 if ( !newGroupIndexes.isEmpty() )
506 createDatasetGroupTreeItems( newGroupIndexes );
507 mPersistentExtraDatasetGroupIndexes.append( newGroupIndexes );
509 for (
int groupIndex : std::as_const( newGroupIndexes ) )
510 syncItemToDatasetGroup( groupIndex );
516void QgsMeshDatasetGroupStore::removePersistentProvider()
518 if ( !mPersistentProvider )
523 QMap < int, DatasetGroup>::iterator it = mRegistry.begin();
524 while ( it != mRegistry.end() )
526 if ( it.value().first == mPersistentProvider )
527 it = mRegistry.erase( it );
532 mPersistentProvider =
nullptr;
535int QgsMeshDatasetGroupStore::newIndex()
537 QSet usedIndex = qgis::listToSet( mRegistry.keys() );
538 usedIndex.unite( qgis::listToSet( mGroupNameToGlobalIndex.values() ) );
541 while ( usedIndex.contains( index ) )
547int QgsMeshDatasetGroupStore::registerDatasetGroup(
const QgsMeshDatasetGroupStore::DatasetGroup &group )
549 const QString &name = group.first->datasetGroupMetadata( group.second ).name();
550 auto it = mGroupNameToGlobalIndex.find( name );
553 if ( it != mGroupNameToGlobalIndex.end() )
555 groupIndex = it.value();
557 if ( mRegistry.contains( groupIndex ) )
559 QgsDebugError( u
"Duplicate group name for %1."_s.arg( name ) );
565 groupIndex = newIndex();
566 mGroupNameToGlobalIndex.insert( name, groupIndex );
569 mRegistry[groupIndex] = group;
573void QgsMeshDatasetGroupStore::eraseDatasetGroup(
const QgsMeshDatasetGroupStore::DatasetGroup &group )
575 if ( group.first == mPersistentProvider )
577 else if ( group.first == &mExtraDatasets )
578 eraseExtraDataset( group.second );
581void QgsMeshDatasetGroupStore::eraseExtraDataset(
int indexInExtraStore )
583 mExtraDatasets.removeDatasetGroup( indexInExtraStore );
586 QMap < int, DatasetGroup>::iterator it = mRegistry.begin();
587 while ( it != mRegistry.end() )
589 int localIndex = it.value().second;
590 if ( it.value().first == &mExtraDatasets && localIndex > indexInExtraStore )
591 it->second = localIndex - 1;
603 if ( globalIndex == -1 )
604 globalIndex = registerDatasetGroup( DatasetGroup{source, i} );
606 if ( globalIndex != - 1 )
607 indexes.append( globalIndex );
610 if ( !indexes.isEmpty() )
611 createDatasetGroupTreeItems( indexes );
613 const QList<int> globalIndexes = mRegistry.keys();
614 for (
int globalIndex : globalIndexes )
616 if ( mRegistry.value( globalIndex ).first == source )
617 syncItemToDatasetGroup( globalIndex );
621void QgsMeshDatasetGroupStore::removeUnregisteredItemFromTree()
623 QList<QgsMeshDatasetGroupTreeItem *> itemsToCheck;
624 QList<int> indexItemToRemove;
625 for (
int i = 0; i < mDatasetGroupTreeRootItem->childCount(); ++i )
626 itemsToCheck.append( mDatasetGroupTreeRootItem->child( i ) );
628 while ( !itemsToCheck.isEmpty() )
630 QgsMeshDatasetGroupTreeItem *item = itemsToCheck.takeFirst();
632 if ( !mRegistry.contains( globalIndex ) )
633 indexItemToRemove.append( globalIndex );
634 for (
int i = 0; i < item->
childCount(); ++i )
635 itemsToCheck.append( item->
child( i ) );
638 for (
int i : indexItemToRemove )
646void QgsMeshDatasetGroupStore::unregisterGroupNotPresentInTree()
648 if ( !mDatasetGroupTreeRootItem )
654 QMap < int, DatasetGroup>::iterator it = mRegistry.begin();
655 while ( it != mRegistry.end() )
657 DatasetGroup datasetGroup = it.value();
658 int globalIndex = it.key();
659 if ( ! mDatasetGroupTreeRootItem->childFromDatasetGroupIndex( globalIndex )
660 && datasetGroup.first != mPersistentProvider )
662 it = mRegistry.erase( it );
663 eraseDatasetGroup( datasetGroup );
670void QgsMeshDatasetGroupStore::syncItemToDatasetGroup(
int groupIndex )
672 if ( !mDatasetGroupTreeRootItem )
674 const DatasetGroup group = datasetGroup( groupIndex );
676 if ( group.first == mPersistentProvider && mPersistentProvider )
678 const QgsMeshDatasetGroupMetadata meta = mPersistentProvider->datasetGroupMetadata( group.second );
682 else if ( group.first == &mExtraDatasets )
689void QgsMeshDatasetGroupStore::createDatasetGroupTreeItems(
const QList<int> &indexes )
691 QMap<QString, QgsMeshDatasetGroupTreeItem *> mNameToItem;
693 for (
int i = 0; i < indexes.count(); ++i )
695 int groupIndex = indexes.at( i );
696 if ( mDatasetGroupTreeRootItem->childFromDatasetGroupIndex( groupIndex ) )
699 const QString name = meta.
name();
700 const QStringList subdatasets = name.split(
'/' );
702 QString displayName = name;
703 QgsMeshDatasetGroupTreeItem *parent = mDatasetGroupTreeRootItem.get();
705 if ( subdatasets.size() == 2 )
707 auto it = mNameToItem.find( subdatasets[0] );
708 if ( it == mNameToItem.end() )
709 QgsDebugError( u
"Unable to find parent group for %1."_s.arg( name ) );
712 displayName = subdatasets[1];
716 else if ( subdatasets.size() != 1 )
717 QgsDebugError( u
"Ignoring too deep child group name %1."_s.arg( name ) );
719 QgsMeshDatasetGroupTreeItem *item =
new QgsMeshDatasetGroupTreeItem( displayName, name, meta.
isVector(), groupIndex );
721 if ( mNameToItem.contains( name ) )
722 QgsDebugError( u
"Group %1 is not unique"_s.arg( displayName ) );
723 mNameToItem[name] = item;
729 int groupIndex = mGroups.size();
739 return mGroups.size() - 1;
745 mGroups.erase( mGroups.begin() + groupIndex );
763 if ( groupIndex >= 0 && groupIndex <
int( mGroups.size() ) )
764 return mGroups.at( groupIndex )->description();
771 if ( groupIndex >= 0 && groupIndex <
int( mGroups.size() ) )
772 return mGroups[groupIndex].get();
785 return QStringList();
790 return mGroups.size();
796 return mGroups.at( groupIndex )->datasetCount();
804 return mGroups.at( groupIndex )->groupMetadata();
811 int groupIndex = index.
group();
814 int datasetIndex = index.
dataset();
824 int groupIndex = index.
group();
828 int datasetIndex = index.
dataset();
838 int groupIndex = index.
group();
842 int datasetIndex = index.
dataset();
854 Q_UNUSED( faceIndex )
861 int groupIndex = index.
group();
865 int datasetIndex = index.
dataset();
875 int groupIndex = index.
group();
879 int datasetIndex = index.
dataset();
887 const QString &outputDriver,
890 const QVector<QgsMeshDataBlock> &datasetActive,
891 const QVector<double> × )
893 Q_UNUSED( outputFilePath )
894 Q_UNUSED( outputDriver )
897 Q_UNUSED( datasetActive )
903 const QString &outputDriver,
905 int datasetGroupIndex )
907 Q_UNUSED( outputFilePath )
908 Q_UNUSED( outputDriver )
910 Q_UNUSED( datasetGroupIndex )
916 if ( groupIndex >= 0 && groupIndex <
int( mGroups.size() ) && mGroups[groupIndex] )
917 return mGroups[groupIndex]->writeXml( doc, context );
919 return QDomElement();
926 bool hasTemporal =
false;
927 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