28#include "moc_qgsmeshdatasetgroupstore.cpp"
32 return mRegistry.keys();
37 return mDatasetGroupTreeRootItem->enabledDatasetGroupIndexes();
42 return mRegistry.count();
47 return mExtraDatasets.datasetGroupCount();
57 removePersistentProvider();
58 mPersistentProvider = provider;
59 if ( !mPersistentProvider )
61 for (
const QString &uri : extraDatasetUri )
64 onPersistentDatasetAdded( mPersistentProvider->datasetGroupCount() );
66 checkDatasetConsistency( mPersistentProvider );
67 removeUnregisteredItemFromTree();
70 const int groupCount = mExtraDatasets.datasetGroupCount();
71 for (
int i = 0; i < groupCount; ++i )
72 if ( mExtraDatasets.datasetGroup( i ) )
73 mExtraDatasets.datasetGroup( i )->initialize();
75 mExtraDatasets.updateTemporalCapabilities();
80QgsMeshDatasetGroupStore::DatasetGroup QgsMeshDatasetGroupStore::datasetGroup(
int index )
const
82 return mRegistry.value( index, DatasetGroup{
nullptr, -1} );
87 if ( !mPersistentProvider )
89 return mPersistentProvider->addDataset( path ) ;
97 switch ( group->dataType() )
100 if ( ! group->checkValueCountPerDataset( mLayer->meshFaceCount() ) )
104 if ( ! group->checkValueCountPerDataset( mLayer->meshVertexCount() ) )
111 if ( ! group->checkValueCountPerDataset( mLayer->meshEdgeCount() ) )
116 int nativeIndex = mExtraDatasets.addDatasetGroup( std::move( group ) );
117 int groupIndex = registerDatasetGroup( DatasetGroup{&mExtraDatasets, nativeIndex} );
119 if ( groupIndex == -1 )
122 QList<int> groupIndexes;
123 groupIndexes.append( groupIndex );
124 createDatasetGroupTreeItems( groupIndexes );
125 syncItemToDatasetGroup( groupIndex );
134 const QgsMeshDatasetGroupStore::DatasetGroup group = datasetGroup( index );
135 if ( group.first == mPersistentProvider )
136 mPersistentProvider->removeDatasetGroup( group.second );
137 else if ( group.first == &mExtraDatasets )
138 eraseExtraDataset( group.second );
140 reindexDatasetGroups();
143void QgsMeshDatasetGroupStore::reindexDatasetGroups()
146 mPersistentExtraDatasetGroupIndexes.clear();
147 mGroupNameToGlobalIndex.clear();
154 mRegistry[globalIndex] = DatasetGroup{mPersistentProvider, i};
155 mPersistentExtraDatasetGroupIndexes.append( globalIndex );
156 mGroupNameToGlobalIndex.insert( name, globalIndex );
160 for (
int i = 0; i < mExtraDatasets.datasetGroupCount(); i++ )
162 QgsMeshDatasetSourceInterface *source = &mExtraDatasets;
164 mRegistry[globalIndex] = DatasetGroup{source, i};
165 mGroupNameToGlobalIndex.insert( name, globalIndex );
172 mDatasetGroupTreeRootItem = std::make_unique<QgsMeshDatasetGroupTreeItem>( );
175 for (
int groupIndex : groupIndexes )
176 syncItemToDatasetGroup( groupIndex );
181 return mDatasetGroupTreeRootItem.get();
187 mDatasetGroupTreeRootItem.reset( rootItem->
clone() );
189 mDatasetGroupTreeRootItem.reset();
191 unregisterGroupNotPresentInTree();
196 QgsMeshDatasetGroupStore::DatasetGroup group = datasetGroup( index.
group() );
198 return group.first->datasetGroupMetadata( group.second );
205 QgsMeshDatasetGroupStore::DatasetGroup group = datasetGroup( groupIndex );
207 return group.first->datasetCount( group.second );
214 QgsMeshDatasetGroupStore::DatasetGroup group = datasetGroup( index.
group() );
223 QgsMeshDatasetGroupStore::DatasetGroup group = datasetGroup( index.
group() );
232 QgsMeshDatasetGroupStore::DatasetGroup group = datasetGroup( index.
group() );
241 QgsMeshDatasetGroupStore::DatasetGroup group = datasetGroup( index.
group() );
250 QgsMeshDatasetGroupStore::DatasetGroup group = datasetGroup( index.
group() );
259 QgsMeshDatasetGroupStore::DatasetGroup group = datasetGroup( index.
group() );
270 QgsMeshDatasetGroupStore::DatasetGroup group = datasetGroup( groupIndex );
274 const QDateTime &referenceTime = mPersistentProvider ? mPersistentProvider->temporalCapabilities()->referenceTime() : QDateTime();
277 group.first->datasetIndexAtTime( referenceTime, group.second, time, method ).dataset() );
283 int groupIndex )
const
285 const QgsMeshDatasetGroupStore::DatasetGroup group = datasetGroup( groupIndex );
287 return QList<QgsMeshDatasetIndex>();
289 const QDateTime &referenceTime = mPersistentProvider ? mPersistentProvider->temporalCapabilities()->referenceTime() : QDateTime();
291 const QList<QgsMeshDatasetIndex> datasetIndexes = group.first->datasetIndexInTimeInterval( referenceTime, group.second, time1, time2 );
293 QList<QgsMeshDatasetIndex> ret;
294 ret.reserve( datasetIndexes.count() );
304 QgsMeshDatasetGroupStore::DatasetGroup group = datasetGroup( index.
group() );
305 if ( !group.first || group.second < 0 )
310 if ( group.first == mPersistentProvider )
311 return mPersistentProvider->temporalCapabilities()->datasetTime( nativeIndex );
312 else if ( group.first == &mExtraDatasets )
313 return mExtraDatasets.datasetRelativeTime( nativeIndex );
321 return ( mPersistentProvider && mPersistentProvider->temporalCapabilities()->hasTemporalCapabilities() ) ||
322 ( mExtraDatasets.hasTemporalCapabilities() );
328 QDomElement storeElement = doc.createElement( QStringLiteral(
"mesh-dataset-groups-store" ) );
329 storeElement.appendChild( mDatasetGroupTreeRootItem->writeXml( doc, context ) );
331 QMap < int, DatasetGroup>::const_iterator it = mRegistry.constBegin();
332 while ( it != mRegistry.constEnd() )
334 QDomElement elemDataset;
335 if ( it.value().first == mPersistentProvider )
337 elemDataset = doc.createElement( QStringLiteral(
"mesh-dataset" ) );
338 elemDataset.setAttribute( QStringLiteral(
"global-index" ), it.key() );
339 elemDataset.setAttribute( QStringLiteral(
"source-type" ), QStringLiteral(
"persitent-provider" ) );
340 elemDataset.setAttribute( QStringLiteral(
"source-index" ), it.value().second );
342 else if ( it.value().first == &mExtraDatasets )
347 elemDataset = mExtraDatasets.writeXml( it.value().second, doc, context );
348 if ( !elemDataset.isNull() )
349 elemDataset.setAttribute( QStringLiteral(
"global-index" ), it.key() );
353 if ( !elemDataset.isNull() )
354 storeElement.appendChild( elemDataset );
358 for (
auto it = mGroupNameToGlobalIndex.constBegin(); it != mGroupNameToGlobalIndex.constEnd(); ++it )
360 QDomElement elemNameToIndex = doc.createElement( QStringLiteral(
"name-to-global-index" ) );
361 elemNameToIndex.setAttribute( QStringLiteral(
"name" ), it.key() );
362 elemNameToIndex.setAttribute( QStringLiteral(
"global-index" ), it.value() );
364 storeElement.appendChild( elemNameToIndex );
374 QDomElement datasetElem = storeElem.firstChildElement(
"mesh-dataset" );
375 while ( !datasetElem.isNull() )
377 int globalIndex = datasetElem.attribute( QStringLiteral(
"global-index" ) ).toInt();
379 const QString sourceType = datasetElem.attribute( QStringLiteral(
"source-type" ) );
380 if ( sourceType == QLatin1String(
"persitent-provider" ) )
382 mPersistentExtraDatasetGroupIndexes.append( globalIndex );
384 else if ( sourceType == QLatin1String(
"virtual" ) )
387 QString name = datasetElem.attribute( QStringLiteral(
"name" ) );
388 QString formula = datasetElem.attribute( QStringLiteral(
"formula" ) );
389 qint64 startTime = datasetElem.attribute( QStringLiteral(
"start-time" ) ).toLongLong();
390 qint64 endTime = datasetElem.attribute( QStringLiteral(
"end-time" ) ).toLongLong();
392 auto dsg = std::make_unique< QgsMeshVirtualDatasetGroup >( name, formula, mLayer, startTime, endTime );
393 int sourceIndex = mExtraDatasets.addDatasetGroup( std::move( dsg ) );
395 mRegistry[globalIndex] = DatasetGroup{source, sourceIndex};
399 QgsDebugError( QStringLiteral(
"Unhandled source-type: %1." ).arg( sourceType ) );
402 datasetElem = datasetElem.nextSiblingElement( QStringLiteral(
"mesh-dataset" ) );
405 QDomElement nameToIndexElem = storeElem.firstChildElement(
"name-to-global-index" );
406 mGroupNameToGlobalIndex.clear();
407 while ( !nameToIndexElem.isNull() )
409 QString name = nameToIndexElem.attribute( QStringLiteral(
"name" ) );
410 int globalIndex = nameToIndexElem.attribute( QStringLiteral(
"global-index" ) ).toInt();
412 mGroupNameToGlobalIndex.insert( name, globalIndex );
414 nameToIndexElem = nameToIndexElem.nextSiblingElement( QStringLiteral(
"name-to-global-index" ) );
417 QDomElement rootTreeItemElem = storeElem.firstChildElement( QStringLiteral(
"mesh-dataset-group-tree-item" ) );
418 if ( !rootTreeItemElem.isNull() )
427 for ( QMap<int, DatasetGroup>::const_iterator it = mRegistry.cbegin(); it != mRegistry.cend(); ++it )
429 if ( it.value().first == source && it.value().second == nativeGroupIndex )
438 return mGroupNameToGlobalIndex.value(
groupName, -1 );
448 DatasetGroup group = datasetGroup( groupIndex );
451 if ( group.first && group.second >= 0 )
452 fail = mPersistentProvider->persistDatasetGroup( filePath, driver, group.first, group.second );
456 eraseDatasetGroup( group );
457 group.first = mPersistentProvider;
458 group.second = mPersistentProvider->datasetGroupCount() - 1;
459 mRegistry[groupIndex] = group;
461 if ( mDatasetGroupTreeRootItem )
472void QgsMeshDatasetGroupStore::onPersistentDatasetAdded(
int count )
474 Q_ASSERT( mPersistentProvider );
478 QList<int> newGroupIndexes;
479 for (
int i = providerBeginIndex; i < providerTotalCount; ++i )
482 if ( mGroupNameToGlobalIndex.empty() && i < mPersistentExtraDatasetGroupIndexes.count() )
485 mRegistry[mPersistentExtraDatasetGroupIndexes.at( i )] = DatasetGroup( mPersistentProvider, i );
487 else if ( mGroupNameToGlobalIndex.contains(
groupName ) )
490 registerDatasetGroup( DatasetGroup{mPersistentProvider, i} );
494 int newGroupIndex = registerDatasetGroup( DatasetGroup{mPersistentProvider, i} );
495 if ( newGroupIndex != -1 )
496 newGroupIndexes.append( newGroupIndex );
500 if ( !newGroupIndexes.isEmpty() )
502 createDatasetGroupTreeItems( newGroupIndexes );
503 mPersistentExtraDatasetGroupIndexes.append( newGroupIndexes );
505 for (
int groupIndex : std::as_const( newGroupIndexes ) )
506 syncItemToDatasetGroup( groupIndex );
512void QgsMeshDatasetGroupStore::removePersistentProvider()
514 if ( !mPersistentProvider )
519 QMap < int, DatasetGroup>::iterator it = mRegistry.begin();
520 while ( it != mRegistry.end() )
522 if ( it.value().first == mPersistentProvider )
523 it = mRegistry.erase( it );
528 mPersistentProvider =
nullptr;
531int QgsMeshDatasetGroupStore::newIndex()
533 QSet usedIndex = qgis::listToSet( mRegistry.keys() );
534 usedIndex.unite( qgis::listToSet( mGroupNameToGlobalIndex.values() ) );
537 while ( usedIndex.contains( index ) )
543int QgsMeshDatasetGroupStore::registerDatasetGroup(
const QgsMeshDatasetGroupStore::DatasetGroup &group )
545 const QString &name = group.first->datasetGroupMetadata( group.second ).name();
546 auto it = mGroupNameToGlobalIndex.find( name );
549 if ( it != mGroupNameToGlobalIndex.end() )
551 groupIndex = it.value();
553 if ( mRegistry.contains( groupIndex ) )
555 QgsDebugError( QStringLiteral(
"Duplicate group name for %1." ).arg( name ) );
561 groupIndex = newIndex();
562 mGroupNameToGlobalIndex.insert( name, groupIndex );
565 mRegistry[groupIndex] = group;
569void QgsMeshDatasetGroupStore::eraseDatasetGroup(
const QgsMeshDatasetGroupStore::DatasetGroup &group )
571 if ( group.first == mPersistentProvider )
573 else if ( group.first == &mExtraDatasets )
574 eraseExtraDataset( group.second );
577void QgsMeshDatasetGroupStore::eraseExtraDataset(
int indexInExtraStore )
579 mExtraDatasets.removeDatasetGroup( indexInExtraStore );
582 QMap < int, DatasetGroup>::iterator it = mRegistry.begin();
583 while ( it != mRegistry.end() )
585 int localIndex = it.value().second;
586 if ( it.value().first == &mExtraDatasets && localIndex > indexInExtraStore )
587 it->second = localIndex - 1;
599 if ( globalIndex == -1 )
600 globalIndex = registerDatasetGroup( DatasetGroup{source, i} );
602 if ( globalIndex != - 1 )
603 indexes.append( globalIndex );
606 if ( !indexes.isEmpty() )
607 createDatasetGroupTreeItems( indexes );
609 const QList<int> globalIndexes = mRegistry.keys();
610 for (
int globalIndex : globalIndexes )
612 if ( mRegistry.value( globalIndex ).first == source )
613 syncItemToDatasetGroup( globalIndex );
617void QgsMeshDatasetGroupStore::removeUnregisteredItemFromTree()
619 QList<QgsMeshDatasetGroupTreeItem *> itemsToCheck;
620 QList<int> indexItemToRemove;
621 for (
int i = 0; i < mDatasetGroupTreeRootItem->childCount(); ++i )
622 itemsToCheck.append( mDatasetGroupTreeRootItem->child( i ) );
624 while ( !itemsToCheck.isEmpty() )
626 QgsMeshDatasetGroupTreeItem *item = itemsToCheck.takeFirst();
628 if ( !mRegistry.contains( globalIndex ) )
629 indexItemToRemove.append( globalIndex );
630 for (
int i = 0; i < item->
childCount(); ++i )
631 itemsToCheck.append( item->
child( i ) );
634 for (
int i : indexItemToRemove )
642void QgsMeshDatasetGroupStore::unregisterGroupNotPresentInTree()
644 if ( !mDatasetGroupTreeRootItem )
650 QMap < int, DatasetGroup>::iterator it = mRegistry.begin();
651 while ( it != mRegistry.end() )
653 DatasetGroup datasetGroup = it.value();
654 int globalIndex = it.key();
655 if ( ! mDatasetGroupTreeRootItem->childFromDatasetGroupIndex( globalIndex )
656 && datasetGroup.first != mPersistentProvider )
658 it = mRegistry.erase( it );
659 eraseDatasetGroup( datasetGroup );
666void QgsMeshDatasetGroupStore::syncItemToDatasetGroup(
int groupIndex )
668 if ( !mDatasetGroupTreeRootItem )
670 const DatasetGroup group = datasetGroup( groupIndex );
672 if ( group.first == mPersistentProvider && mPersistentProvider )
674 const QgsMeshDatasetGroupMetadata meta = mPersistentProvider->datasetGroupMetadata( group.second );
678 else if ( group.first == &mExtraDatasets )
685void QgsMeshDatasetGroupStore::createDatasetGroupTreeItems(
const QList<int> &indexes )
687 QMap<QString, QgsMeshDatasetGroupTreeItem *> mNameToItem;
689 for (
int i = 0; i < indexes.count(); ++i )
691 int groupIndex = indexes.at( i );
692 if ( mDatasetGroupTreeRootItem->childFromDatasetGroupIndex( groupIndex ) )
695 const QString name = meta.
name();
696 const QStringList subdatasets = name.split(
'/' );
698 QString displayName = name;
699 QgsMeshDatasetGroupTreeItem *parent = mDatasetGroupTreeRootItem.get();
701 if ( subdatasets.size() == 2 )
703 auto it = mNameToItem.find( subdatasets[0] );
704 if ( it == mNameToItem.end() )
705 QgsDebugError( QStringLiteral(
"Unable to find parent group for %1." ).arg( name ) );
708 displayName = subdatasets[1];
712 else if ( subdatasets.size() != 1 )
713 QgsDebugError( QStringLiteral(
"Ignoring too deep child group name %1." ).arg( name ) );
715 QgsMeshDatasetGroupTreeItem *item =
new QgsMeshDatasetGroupTreeItem( displayName, name, meta.
isVector(), groupIndex );
717 if ( mNameToItem.contains( name ) )
718 QgsDebugError( QStringLiteral(
"Group %1 is not unique" ).arg( displayName ) );
719 mNameToItem[name] = item;
725 int groupIndex = mGroups.size();
735 return mGroups.size() - 1;
741 mGroups.erase( mGroups.begin() + groupIndex );
759 if ( groupIndex >= 0 && groupIndex <
int( mGroups.size() ) )
760 return mGroups.at( groupIndex )->description();
767 if ( groupIndex >= 0 && groupIndex <
int( mGroups.size() ) )
768 return mGroups[groupIndex].get();
781 return QStringList();
786 return mGroups.size();
792 return mGroups.at( groupIndex )->datasetCount();
800 return mGroups.at( groupIndex )->groupMetadata();
807 int groupIndex = index.
group();
810 int datasetIndex = index.
dataset();
820 int groupIndex = index.
group();
824 int datasetIndex = index.
dataset();
834 int groupIndex = index.
group();
838 int datasetIndex = index.
dataset();
850 Q_UNUSED( faceIndex )
857 int groupIndex = index.
group();
861 int datasetIndex = index.
dataset();
871 int groupIndex = index.
group();
875 int datasetIndex = index.
dataset();
883 const QString &outputDriver,
886 const QVector<QgsMeshDataBlock> &datasetActive,
887 const QVector<double> × )
889 Q_UNUSED( outputFilePath )
890 Q_UNUSED( outputDriver )
893 Q_UNUSED( datasetActive )
899 const QString &outputDriver,
901 int datasetGroupIndex )
903 Q_UNUSED( outputFilePath )
904 Q_UNUSED( outputDriver )
906 Q_UNUSED( datasetGroupIndex )
912 if ( groupIndex >= 0 && groupIndex <
int( mGroups.size() ) && mGroups[groupIndex] )
913 return mGroups[groupIndex]->writeXml( doc, context );
915 return QDomElement();
922 bool hasTemporal =
false;
923 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