QGIS API Documentation  3.16.0-Hannover (43b64b13f3)
qgsmeshdataset.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  qgsmeshdataset.cpp
3  -----------------------
4  begin : April 2018
5  copyright : (C) 2018 by Peter Petrik
6  email : zilolv 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 #include "qgsmeshdataset.h"
19 #include "qgsrectangle.h"
20 #include "qgis.h"
21 
23  : mGroupIndex( group ), mDatasetIndex( dataset )
24 {}
25 
27 {
28  return mGroupIndex;
29 }
30 
32 {
33  return mDatasetIndex;
34 }
35 
37 {
38  return ( group() > -1 ) && ( dataset() > -1 );
39 }
40 
42 {
43  if ( isValid() && other.isValid() )
44  return other.group() == group() && other.dataset() == dataset();
45  else
46  return isValid() == other.isValid();
47 }
48 
50 {
51  return !( operator==( other ) );
52 }
53 
55  : mX( x ), mY( y )
56 {}
57 
59  : mX( scalar )
60 {}
61 
63 {
64  if ( std::isnan( mY ) )
65  {
66  return mX;
67  }
68  else if ( std::isnan( mX ) )
69  {
70  return std::numeric_limits<double>::quiet_NaN();
71  }
72  else
73  {
74  return std::sqrt( ( mX ) * ( mX ) + ( mY ) * ( mY ) );
75  }
76 }
77 
78 void QgsMeshDatasetValue::set( double scalar )
79 {
80  setX( scalar );
81 }
82 
83 void QgsMeshDatasetValue::setX( double x )
84 {
85  mX = x;
86 }
87 
88 void QgsMeshDatasetValue::setY( double y )
89 {
90  mY = y;
91 }
92 
93 double QgsMeshDatasetValue::x() const
94 {
95  return mX;
96 }
97 
98 double QgsMeshDatasetValue::y() const
99 {
100  return mY;
101 }
102 
104 {
105  bool equal = std::isnan( mX ) == std::isnan( other.x() );
106  equal &= std::isnan( mY ) == std::isnan( other.y() );
107 
108  if ( equal )
109  {
110  if ( std::isnan( mY ) )
111  {
112  equal &= qgsDoubleNear( other.x(), mX, 1E-8 );
113  }
114  else
115  {
116  equal &= qgsDoubleNear( other.x(), mX, 1E-8 );
117  equal &= qgsDoubleNear( other.y(), mY, 1E-8 );
118  }
119  }
120  return equal;
121 }
122 
124  const QString uri,
125  bool isScalar,
126  DataType dataType,
127  double minimum,
128  double maximum,
129  int maximumVerticalLevels,
130  const QDateTime &referenceTime,
131  bool isTemporal,
132  const QMap<QString, QString> &extraOptions )
133  : mName( name )
134  , mUri( uri )
135  , mIsScalar( isScalar )
136  , mDataType( dataType )
137  , mMinimumValue( minimum )
138  , mMaximumValue( maximum )
139  , mExtraOptions( extraOptions )
140  , mMaximumVerticalLevelsCount( maximumVerticalLevels )
141  , mReferenceTime( referenceTime )
142  , mIsTemporal( isTemporal )
143 {
144 }
145 
146 QMap<QString, QString> QgsMeshDatasetGroupMetadata::extraOptions() const
147 {
148  return mExtraOptions;
149 }
150 
152 {
153  return !mIsScalar;
154 }
155 
157 {
158  return mIsScalar;
159 }
160 
162 {
163  return mIsTemporal;
164 }
165 
167 {
168  return mName;
169 }
170 
172 {
173  return mDataType;
174 }
175 
177 {
178  return mMinimumValue;
179 }
180 
182 {
183  return mMaximumValue;
184 }
185 
187 {
188  return mMaximumVerticalLevelsCount;
189 }
190 
192 {
193  return mReferenceTime;
194 }
195 
197 {
198  return mUri;
199 }
200 
202  double time,
203  bool isValid,
204  double minimum,
205  double maximum,
206  int maximumVerticalLevels )
207  : mTime( time )
208  , mIsValid( isValid )
209  , mMinimumValue( minimum )
210  , mMaximumValue( maximum )
211  , mMaximumVerticalLevelsCount( maximumVerticalLevels )
212 {
213 }
214 
216 {
217  return mTime;
218 }
219 
221 {
222  return mIsValid;
223 }
224 
226 {
227  return mMinimumValue;
228 }
229 
231 {
232  return mMaximumValue;
233 }
234 
236 {
237  return mMaximumVerticalLevelsCount;
238 }
239 
241  : mType( ActiveFlagInteger )
242 {
243 }
244 
246  : mType( type ),
247  mSize( count )
248 {
249 }
250 
252 {
253  return mType;
254 }
255 
257 {
258  return mSize;
259 }
260 
262 {
263  return ( count() > 0 ) && ( mIsValid );
264 }
265 
267 {
268  if ( !isValid() )
269  return QgsMeshDatasetValue();
270 
271  Q_ASSERT( mType != ActiveFlagInteger );
272 
273  if ( mType == ScalarDouble )
274  return QgsMeshDatasetValue( mDoubleBuffer[index] );
275 
276  return QgsMeshDatasetValue(
277  mDoubleBuffer[2 * index],
278  mDoubleBuffer[2 * index + 1]
279  );
280 }
281 
282 bool QgsMeshDataBlock::active( int index ) const
283 {
284  if ( !isValid() )
285  return false;
286 
287  Q_ASSERT( mType == ActiveFlagInteger );
288 
289  if ( mIntegerBuffer.empty() )
290  return true;
291  else
292  return bool( mIntegerBuffer[index] );
293 }
294 
295 void QgsMeshDataBlock::setActive( const QVector<int> &vals )
296 {
297  Q_ASSERT( mType == ActiveFlagInteger );
298  Q_ASSERT( vals.size() == count() );
299 
300  mIntegerBuffer = vals;
301  setValid( true );
302 }
303 
304 QVector<int> QgsMeshDataBlock::active() const
305 {
306  Q_ASSERT( mType == ActiveFlagInteger );
307  return mIntegerBuffer;
308 }
309 
310 QVector<double> QgsMeshDataBlock::values() const
311 {
312  Q_ASSERT( mType != ActiveFlagInteger );
313 
314  return mDoubleBuffer;
315 }
316 
317 void QgsMeshDataBlock::setValues( const QVector<double> &vals )
318 {
319  Q_ASSERT( mType != ActiveFlagInteger );
320  Q_ASSERT( mType == ScalarDouble ? vals.size() == count() : vals.size() == 2 * count() );
321 
322  mDoubleBuffer = vals;
323  setValid( true );
324 }
325 
326 void QgsMeshDataBlock::setValid( bool valid )
327 {
328  mIsValid = valid;
329 }
330 
332 
334 
335 QgsMesh3dDataBlock::QgsMesh3dDataBlock( int count, bool isVector )
336  : mSize( count )
337  , mIsVector( isVector )
338 {
339 }
340 
342 {
343  return mIsValid;
344 }
345 
347 {
348  return mIsVector;
349 }
350 
352 {
353  return mSize;
354 }
355 
357 {
358  if ( mFaceToVolumeIndex.empty() )
359  return -1;
360  return mFaceToVolumeIndex[0];
361 }
362 
364 {
365  if ( mFaceToVolumeIndex.empty() || mVerticalLevelsCount.empty() )
366  return -1;
367  const int lastVolumeStartIndex = mFaceToVolumeIndex[mFaceToVolumeIndex.size() - 1];
368  const int volumesCountInLastRow = mVerticalLevelsCount[mVerticalLevelsCount.size() - 1];
369  return lastVolumeStartIndex + volumesCountInLastRow;
370 }
371 
373 {
374  return lastVolumeIndex() - firstVolumeIndex();
375 }
376 
378 {
379  Q_ASSERT( isValid() );
380  return mVerticalLevelsCount;
381 }
382 
383 void QgsMesh3dDataBlock::setFaceToVolumeIndex( const QVector<int> &faceToVolumeIndex )
384 {
385  Q_ASSERT( faceToVolumeIndex.size() == count() );
386  mFaceToVolumeIndex = faceToVolumeIndex;
387 }
388 
389 void QgsMesh3dDataBlock::setVerticalLevelsCount( const QVector<int> &verticalLevelsCount )
390 {
391  Q_ASSERT( verticalLevelsCount.size() == count() );
392  mVerticalLevelsCount = verticalLevelsCount;
393 }
394 
395 QVector<double> QgsMesh3dDataBlock::verticalLevels() const
396 {
397  Q_ASSERT( isValid() );
398  return mVerticalLevels;
399 }
400 
401 void QgsMesh3dDataBlock::setVerticalLevels( const QVector<double> &verticalLevels )
402 {
403  Q_ASSERT( verticalLevels.size() == volumesCount() + count() );
404  mVerticalLevels = verticalLevels;
405 }
406 
408 {
409  Q_ASSERT( isValid() );
410  return mFaceToVolumeIndex;
411 }
412 
413 QVector<double> QgsMesh3dDataBlock::values() const
414 {
415  Q_ASSERT( isValid() );
416  return mDoubleBuffer;
417 }
418 
420 {
421  if ( !isValid() )
422  return QgsMeshDatasetValue();
423 
424  if ( !mIsVector )
425  return QgsMeshDatasetValue( mDoubleBuffer[volumeIndex] );
426 
427  return QgsMeshDatasetValue(
428  mDoubleBuffer[2 * volumeIndex],
429  mDoubleBuffer[2 * volumeIndex + 1]
430  );
431 }
432 
433 void QgsMesh3dDataBlock::setValues( const QVector<double> &doubleBuffer )
434 {
435  Q_ASSERT( doubleBuffer.size() == ( isVector() ? 2 * volumesCount() : volumesCount() ) );
436  mDoubleBuffer = doubleBuffer;
437 }
438 
440 {
441  mIsValid = valid;
442 }
443 
445 
446 QgsMeshDatasetGroupTreeItem::QgsMeshDatasetGroupTreeItem( const QString &defaultName, const QString &sourceName,
447  bool isVector,
448  int index )
449  : mOriginalName( defaultName )
450  , mSourceName( sourceName )
451  , mIsVector( isVector )
452  , mDatasetGroupIndex( index )
453 {
454 }
455 
456 QgsMeshDatasetGroupTreeItem::QgsMeshDatasetGroupTreeItem( const QDomElement &itemElement, const QgsReadWriteContext &context )
457 {
458  Q_UNUSED( context );
459  if ( itemElement.hasAttribute( QStringLiteral( "display-name" ) ) )
460  mUserName = itemElement.attribute( QStringLiteral( "display-name" ), mUserName );
461 
462  if ( itemElement.hasAttribute( QStringLiteral( "original-name" ) ) )
463  mOriginalName = itemElement.attribute( QStringLiteral( "original-name" ), mOriginalName );
464 
465  if ( itemElement.hasAttribute( QStringLiteral( "source-name" ) ) )
466  mSourceName = itemElement.attribute( QStringLiteral( "source-name" ), mSourceName );
467 
468  if ( itemElement.hasAttribute( QStringLiteral( "is-vector" ) ) )
469  mIsVector = itemElement.attribute( QStringLiteral( "is-vector" ) ).toInt();
470 
471  if ( itemElement.hasAttribute( QStringLiteral( "dataset-index" ) ) )
472  mDatasetGroupIndex = itemElement.attribute( QStringLiteral( "dataset-index" ) ).toInt();
473 
474  if ( itemElement.hasAttribute( QStringLiteral( "is-enabled" ) ) )
475  mIsEnabled = itemElement.attribute( QStringLiteral( "is-enabled" ) ).toInt();
476 
477  if ( itemElement.hasAttribute( QStringLiteral( "dataset-group-type" ) ) )
478  mDatasetGroupType = static_cast<QgsMeshDatasetGroup::Type>( itemElement.attribute( QStringLiteral( "dataset-group-type" ) ) .toInt() ) ;
479 
480  if ( itemElement.hasAttribute( QStringLiteral( "description" ) ) )
481  mDescription = itemElement.attribute( QStringLiteral( "description" ) );
482 
483  QDomElement dependOnElement = itemElement.firstChildElement( QStringLiteral( "dependent-on-item" ) );
484  while ( !dependOnElement.isNull() )
485  {
486  if ( dependOnElement.hasAttribute( QStringLiteral( "dataset-index" ) ) )
487  mDatasetGroupDependentOn.append( dependOnElement.attribute( QStringLiteral( "dataset-index" ) ).toInt() );
488  dependOnElement = dependOnElement.nextSiblingElement( QStringLiteral( "dependent-on-item" ) );
489  }
490 
491  QDomElement dependencieElement = itemElement.firstChildElement( QStringLiteral( "dependency-item" ) );
492  while ( !dependencieElement.isNull() )
493  {
494  if ( dependencieElement.hasAttribute( QStringLiteral( "dataset-index" ) ) )
495  mDatasetGroupDependencies.append( dependencieElement.attribute( QStringLiteral( "dataset-index" ) ).toInt() );
496  dependencieElement = dependencieElement.nextSiblingElement( QStringLiteral( "dependency-item" ) );
497  }
498 
499  QDomElement childElement = itemElement.firstChildElement( QStringLiteral( "mesh-dataset-group-tree-item" ) );
500  while ( !childElement.isNull() )
501  {
502  appendChild( new QgsMeshDatasetGroupTreeItem( childElement, context ) );
503  childElement = childElement.nextSiblingElement( QStringLiteral( "mesh-dataset-group-tree-item" ) );
504  }
505 }
506 
508 {
509  // Remove from where this item is linked
510 
511  freeAsDependency();
512  freeFromDependencies();
513  qDeleteAll( mChildren );
514  if ( mParent )
515  {
516  mParent->mDatasetGroupIndexToChild.remove( mDatasetGroupIndex );
517  mParent->mChildren.removeOne( this );
518  }
519 }
520 
522 {
523  QgsMeshDatasetGroupTreeItem *other = new QgsMeshDatasetGroupTreeItem( mOriginalName, mSourceName, mIsVector, mDatasetGroupIndex );
524  *other = *this;
525 
526  other->mChildren.clear();
527  other->mDatasetGroupIndexToChild.clear();
528  if ( !mChildren.empty() )
529  for ( int i = 0; i < mChildren.count(); ++i )
530  other->appendChild( mChildren.at( i )->clone() );
531 
532  return other;
533 }
534 
536 {
537  mChildren.append( item );
538  item->mParent = this;
539  mDatasetGroupIndexToChild[item->datasetGroupIndex()] = item;
540 }
541 
543 {
544  delete item;
545 }
546 
548 {
549  if ( row < mChildren.count() )
550  return mChildren.at( row );
551  else
552  return nullptr;
553 }
554 
556 {
557  if ( mDatasetGroupIndexToChild.empty() )
558  return nullptr;
559 
560  QMap<int, QgsMeshDatasetGroupTreeItem *>::iterator it = mDatasetGroupIndexToChild.find( index );
561 
562  if ( it != mDatasetGroupIndexToChild.end() )
563  return it.value();
564  else
565  {
566  QgsMeshDatasetGroupTreeItem *item = nullptr;
567  for ( int i = 0; i < mChildren.count(); ++i )
568  {
569  item = mChildren.at( i )->childFromDatasetGroupIndex( index );
570  if ( item )
571  break;
572  }
573  return item;
574  }
575 }
576 
578 {
579  return mChildren.count();
580 }
581 
583 {
584  int count = 0;
585  for ( int i = 0; i < mChildren.count(); ++i )
586  {
587  count++;
588  count += mChildren.at( i )->totalChildCount();
589  }
590  return count;
591 }
592 
594 {
595  return mParent;
596 }
597 
599 {
600  if ( mParent )
601  return mParent->mChildren.indexOf( const_cast<QgsMeshDatasetGroupTreeItem *>( this ) );
602 
603  return 0;
604 }
605 
607 {
608  if ( mUserName.isEmpty() )
609  return mOriginalName;
610  else
611  return mUserName;
612 }
613 
615 {
616  return mIsVector;
617 }
618 
620 {
621  return mDatasetGroupIndex;
622 }
623 
625 {
626  return mIsEnabled;
627 }
628 
630 {
631  mIsEnabled = enabled;
632 }
633 
635 {
636  return mOriginalName;
637 }
638 
640 {
641  return mDatasetGroupType;
642 }
643 
645 {
646  return mDescription;
647 }
648 
650 {
651  if ( datasetGroup )
652  {
653  mDescription = datasetGroup->description();
654  mDatasetGroupType = datasetGroup->type();
655  const QStringList &datasetGroupNames = datasetGroup->datasetGroupNamesDependentOn();
656  for ( const QString &varName : datasetGroupNames )
657  {
658  QgsMeshDatasetGroupTreeItem *varItem = searchItemBySourceName( varName );
659  varItem->mDatasetGroupDependencies.append( this->datasetGroupIndex() );
660  mDatasetGroupDependentOn.append( varItem->datasetGroupIndex() );
661  }
662  }
663 }
664 
666 {
667  mDatasetGroupType = QgsMeshDatasetGroup::Persistent;
668  mDatasetGroupDependentOn.clear();
669  mDescription = uri;
670 }
671 
672 QDomElement QgsMeshDatasetGroupTreeItem::writeXml( QDomDocument &doc, const QgsReadWriteContext &context )
673 {
674  Q_UNUSED( context );
675 
676  QDomElement itemElement = doc.createElement( QStringLiteral( "mesh-dataset-group-tree-item" ) );
677  itemElement.setAttribute( QStringLiteral( "display-name" ), mUserName );
678  itemElement.setAttribute( QStringLiteral( "source-name" ), mSourceName );
679  itemElement.setAttribute( QStringLiteral( "original-name" ), mOriginalName );
680  itemElement.setAttribute( QStringLiteral( "is-vector" ), mIsVector ? true : false );
681  itemElement.setAttribute( QStringLiteral( "dataset-index" ), mDatasetGroupIndex );
682  itemElement.setAttribute( QStringLiteral( "is-enabled" ), mIsEnabled ? true : false );
683  itemElement.setAttribute( QStringLiteral( "dataset-group-type" ), mDatasetGroupType );
684  itemElement.setAttribute( QStringLiteral( "description" ), mDescription );
685 
686  for ( int index : mDatasetGroupDependentOn )
687  {
688  QDomElement dependOnElement = doc.createElement( QStringLiteral( "dependent-on-item" ) );
689  dependOnElement.setAttribute( QStringLiteral( "dataset-index" ), index );
690  itemElement.appendChild( dependOnElement );
691  }
692 
693  for ( int index : mDatasetGroupDependencies )
694  {
695  QDomElement dependencieElement = doc.createElement( QStringLiteral( "dependency-item" ) );
696  dependencieElement.setAttribute( QStringLiteral( "dataset-index" ), index );
697  itemElement.appendChild( dependencieElement );
698  }
699 
700  for ( int i = 0; i < mChildren.count(); ++i )
701  itemElement.appendChild( mChildren.at( i )->writeXml( doc, context ) );
702 
703  return itemElement;
704 }
705 
707 {
708  QList<int> dependencies;
709  QgsMeshDatasetGroupTreeItem *root = rootItem();
710  for ( int index : mDatasetGroupDependencies )
711  {
712  if ( !dependencies.contains( index ) )
713  dependencies.append( index );
715  if ( item )
716  dependencies.append( item->groupIndexDependencies() );
717  }
718 
719  for ( int i = 0; i < childCount(); ++i )
720  {
721  dependencies.append( child( i )->groupIndexDependencies() );
722  }
723 
724  return dependencies;
725 }
726 
727 QgsMeshDatasetGroupTreeItem *QgsMeshDatasetGroupTreeItem::searchItemBySourceName( const QString &sourceName ) const
728 {
729 
730  QgsMeshDatasetGroupTreeItem *baseItem = rootItem();
731 
732  QList<QgsMeshDatasetGroupTreeItem *> itemToCheck;
733  itemToCheck.append( baseItem );
734  while ( baseItem->providerName() != sourceName && !itemToCheck.isEmpty() )
735  {
736  for ( int i = 0; i < baseItem->childCount(); ++i )
737  itemToCheck.append( baseItem->child( i ) );
738  itemToCheck.removeOne( baseItem );
739  if ( !itemToCheck.empty() )
740  baseItem = itemToCheck.first();
741  else
742  baseItem = nullptr;
743  }
744 
745  return baseItem;
746 }
747 
748 QgsMeshDatasetGroupTreeItem *QgsMeshDatasetGroupTreeItem::rootItem() const
749 {
750  const QgsMeshDatasetGroupTreeItem *baseItem = this;
751  while ( baseItem->parentItem() != nullptr )
752  baseItem = baseItem->parentItem();
753 
754  return const_cast<QgsMeshDatasetGroupTreeItem *>( baseItem );
755 }
756 
757 void QgsMeshDatasetGroupTreeItem::freeAsDependency()
758 {
759  QgsMeshDatasetGroupTreeItem *root = rootItem();
760  for ( int index : mDatasetGroupDependentOn )
761  {
763  if ( item )
764  item->mDatasetGroupDependencies.removeOne( this->datasetGroupIndex() );
765  }
766 }
767 
768 void QgsMeshDatasetGroupTreeItem::freeFromDependencies()
769 {
770  QgsMeshDatasetGroupTreeItem *root = rootItem();
771  for ( int index : mDatasetGroupDependencies )
772  {
774  if ( item )
775  item->mDatasetGroupDependentOn.removeOne( this->datasetGroupIndex() );
776  }
777 }
778 
780 {
781  return mSourceName;
782 }
783 
784 void QgsMeshDatasetGroupTreeItem::setName( const QString &name )
785 {
786  mUserName = name;
787 }
788 
789 
791 {
792  if ( valueIndex >= 0 && valueIndex < values.count() )
793  return values[valueIndex];
794  else
795  return QgsMeshDatasetValue();
796 }
797 
798 QgsMeshDataBlock QgsMeshMemoryDataset::datasetValues( bool isScalar, int valueIndex, int count ) const
799 {
801  QVector<double> buf( isScalar ? count : 2 * count );
802  for ( int i = 0; i < count; ++i )
803  {
804  int idx = valueIndex + i;
805  if ( ( idx < 0 ) || ( idx >= values.size() ) )
806  return ret;
807 
808  QgsMeshDatasetValue val = values[ valueIndex + i ];
809  if ( isScalar )
810  buf[i] = val.x();
811  else
812  {
813  buf[2 * i] = val.x();
814  buf[2 * i + 1] = val.y();
815  }
816  }
817  ret.setValues( buf );
818  return ret;
819 }
820 
822 {
824  if ( active.isEmpty() ||
825  ( faceIndex < 0 ) ||
826  ( faceIndex + count > active.size() )
827  )
828  ret.setValid( true );
829  else
830  ret.setActive( active );
831  return ret;
832 }
833 
835 {
837 }
838 
840 {
841  double min = std::numeric_limits<double>::max();
842  double max = std::numeric_limits<double>::min();
843 
844  if ( !valid )
845  return;
846 
847 
848  bool firstIteration = true;
849  for ( int i = 0; i < values.size(); ++i )
850  {
851  double v = values[i].scalar();
852 
853  if ( std::isnan( v ) )
854  continue;
855  if ( firstIteration )
856  {
857  firstIteration = false;
858  min = v;
859  max = v;
860  }
861  else
862  {
863  if ( v < min )
864  min = v;
865  if ( v > max )
866  max = v;
867  }
868  }
869 
870  minimum = min;
871  maximum = max;
872 }
873 
874 bool QgsMeshMemoryDataset::isActive( int faceIndex ) const
875 {
876  if ( active.isEmpty() || faceIndex >= active.count() )
877  return true;
878  else
879  return active.at( faceIndex );
880 }
881 
883 {
884  return values.count();
885 }
886 
888  QgsMeshDatasetGroup( name, dataType )
889 {
890 }
891 
893  QgsMeshDatasetGroup( name )
894 {
895 }
896 
898 {
900  name(),
901  QString(),
902  isScalar(),
903  dataType(),
904  minimum(),
905  maximum(),
906  0,
907  mReferenceTime,
908  datasetCount() > 1,
909  extraMetadata()
910  );
911 }
912 
914 {
915  return memoryDatasets.size();
916 }
917 
919 {
920  if ( datasetIndex >= 0 && datasetIndex < memoryDatasets.count() )
921  return memoryDatasets[datasetIndex]->metadata();
922  else
923  return QgsMeshDatasetMetadata();
924 }
925 
927 {
928  return memoryDatasets[index].get();
929 }
930 
931 void QgsMeshMemoryDatasetGroup::addDataset( std::shared_ptr<QgsMeshMemoryDataset> dataset )
932 {
933  dataset->calculateMinMax();
934  memoryDatasets.push_back( dataset );
935 }
936 
938 {
939  memoryDatasets.clear();
940 }
941 
943 {
945 }
946 
947 std::shared_ptr<const QgsMeshMemoryDataset> QgsMeshMemoryDatasetGroup::constDataset( int index ) const
948 {
949  return memoryDatasets[index];
950 }
951 
952 QDomElement QgsMeshMemoryDatasetGroup::writeXml( QDomDocument &doc, const QgsReadWriteContext &context ) const
953 {
954  Q_UNUSED( doc )
955  Q_UNUSED( context )
956  return QDomElement();
957 }
958 
960 {
961  double min = std::numeric_limits<double>::max();
962  double max = std::numeric_limits<double>::min();
963 
964  int count = datasetCount();
965  for ( int i = 0; i < count; ++i )
966  {
967  min = std::min( min, datasetMetadata( i ).minimum() );
968  max = std::max( max, datasetMetadata( i ).maximum() );
969  }
970  mMinimum = min;
971  mMaximum = max;
972 }
973 
975 {
976  return QStringList();
977 }
978 
980 {
981  return QString();
982 }
983 
984 void QgsMeshDatasetGroup::setReferenceTime( const QDateTime &referenceTime )
985 {
986  mReferenceTime = referenceTime;
987 }
988 
990 {
991  for ( int i = 0; i < datasetCount(); ++i )
992  if ( dataset( i )->valuesCount() != count )
993  return false;
994  return true;
995 }
996 
997 QgsMeshDatasetGroup::QgsMeshDatasetGroup( const QString &name, QgsMeshDatasetGroupMetadata::DataType dataType ): mName( name ), mDataType( dataType ) {}
998 
1000 
1001 QgsMeshDatasetGroup::QgsMeshDatasetGroup( const QString &name ): mName( name ) {}
1002 
1004 {
1005  return mMinimum;
1006 }
1007 
1009 {
1010  return mMaximum;
1011 }
1012 
1013 void QgsMeshDatasetGroup::setMinimumMaximum( double min, double max )
1014 {
1015  mMinimum = min;
1016  mMaximum = max;
1017 }
1018 
1020 {
1021  return mName;
1022 }
1023 
1024 void QgsMeshDatasetGroup::setName( const QString &name )
1025 {
1026  mName = name;
1027 }
1028 
1030 {
1031  return mDataType;
1032 }
1033 
1035 {
1036  mDataType = type;
1037 }
1038 
1039 void QgsMeshDatasetGroup::addExtraMetadata( QString key, QString value )
1040 {
1041  mMetadata.insert( key, value );
1042 }
1043 
1044 QMap<QString, QString> QgsMeshDatasetGroup::extraMetadata() const
1045 {
1046  return mMetadata;
1047 }
1048 
1050 {
1051  return mIsScalar;
1052 }
1053 
1055 {
1056  mIsScalar = isScalar;
1057 }
QgsMeshDatasetGroupMetadata::minimum
double minimum() const
Returns minimum scalar value/vector magnitude present for whole dataset group.
Definition: qgsmeshdataset.cpp:176
QgsMeshDatasetIndex::dataset
int dataset() const
Returns a dataset index within group()
Definition: qgsmeshdataset.cpp:31
QgsMesh3dDataBlock::faceToVolumeIndex
QVector< int > faceToVolumeIndex() const
Returns the indexing between faces and volumes.
Definition: qgsmeshdataset.cpp:407
QgsMeshDatasetMetadata::maximumVerticalLevelsCount
int maximumVerticalLevelsCount() const
Returns maximum number of vertical levels for 3d stacked meshes.
Definition: qgsmeshdataset.cpp:235
QgsMesh3dDataBlock::setValues
void setValues(const QVector< double > &doubleBuffer)
Sets the values at volume centers.
Definition: qgsmeshdataset.cpp:433
QgsMeshDatasetMetadata::minimum
double minimum() const
Returns minimum scalar value/vector magnitude present for the dataset.
Definition: qgsmeshdataset.cpp:225
QgsMeshDatasetGroup::QgsMeshDatasetGroup
QgsMeshDatasetGroup()=default
Default constructor.
QgsMeshDatasetGroup::setIsScalar
void setIsScalar(bool isScalar)
Sets whether the group contain scalar values.
Definition: qgsmeshdataset.cpp:1054
QgsMeshMemoryDatasetGroup::initialize
void initialize() override
Initialize the dataset group.
Definition: qgsmeshdataset.cpp:942
QgsMeshDatasetGroupTreeItem::totalChildCount
int totalChildCount() const
Returns the total count of children, that is included deeper children.
Definition: qgsmeshdataset.cpp:582
QgsMeshDataBlock::QgsMeshDataBlock
QgsMeshDataBlock()
Constructs an invalid block.
Definition: qgsmeshdataset.cpp:240
QgsReadWriteContext
The class is used as a container of context for various read/write operations on other objects.
Definition: qgsreadwritecontext.h:35
QgsMeshDatasetValue::setY
void setY(double y)
Sets Y value.
Definition: qgsmeshdataset.cpp:88
QgsMeshDataBlock::ScalarDouble
@ ScalarDouble
Scalar double values.
Definition: qgsmeshdataset.h:142
qgsrectangle.h
QgsMeshDataBlock::active
QVector< int > active() const
Returns active flag array.
Definition: qgsmeshdataset.cpp:304
QgsMeshMemoryDataset::valuesCount
int valuesCount() const override
Returns the values count.
Definition: qgsmeshdataset.cpp:882
QgsMeshDatasetGroupTreeItem::parentItem
QgsMeshDatasetGroupTreeItem * parentItem() const
Returns the parent item, nullptr if it is root item.
Definition: qgsmeshdataset.cpp:593
QgsMesh3dDataBlock::isValid
bool isValid() const
Whether the block is valid.
Definition: qgsmeshdataset.cpp:341
QgsMesh3dDataBlock::~QgsMesh3dDataBlock
~QgsMesh3dDataBlock()
Dtor.
Definition: qgsmeshdataset.cpp:333
QgsMeshDatasetGroup::datasetCount
virtual int datasetCount() const =0
Returns the count of datasets in the group.
QgsMeshMemoryDataset::isActive
bool isActive(int faceIndex) const override
Returns whether the face is active.
Definition: qgsmeshdataset.cpp:874
QgsMeshDatasetValue
QgsMeshDatasetValue represents single dataset value.
Definition: qgsmeshdataset.h:78
QgsMeshDatasetGroupTreeItem::isVector
bool isVector() const
Definition: qgsmeshdataset.cpp:614
QgsMeshDatasetGroupTreeItem::isEnabled
bool isEnabled() const
Definition: qgsmeshdataset.cpp:624
QgsMeshMemoryDatasetGroup::datasetMetadata
QgsMeshDatasetMetadata datasetMetadata(int datasetIndex) const override
Returns the metadata of the dataset with index datasetIndex.
Definition: qgsmeshdataset.cpp:918
QgsMeshDataset
Abstract class that represents a dataset.
Definition: qgsmeshdataset.h:541
QgsMeshDatasetGroup::Persistent
@ Persistent
Generic type used for non typed dataset group.
Definition: qgsmeshdataset.h:587
qgis.h
QgsMeshDatasetGroupTreeItem::defaultName
QString defaultName() const
Definition: qgsmeshdataset.cpp:634
QgsMesh3dDataBlock::setVerticalLevelsCount
void setVerticalLevelsCount(const QVector< int > &verticalLevelsCount)
Sets the vertical level counts.
Definition: qgsmeshdataset.cpp:389
QgsMeshMemoryDataset::active
QVector< int > active
Definition: qgsmeshdataset.h:711
QgsMeshDatasetGroupTreeItem
Tree item for display of the mesh dataset groups.
Definition: qgsmeshdataset.h:785
QgsMeshDatasetGroup::mIsScalar
bool mIsScalar
Definition: qgsmeshdataset.h:675
QgsMeshDatasetMetadata::isValid
bool isValid() const
Returns whether dataset is valid.
Definition: qgsmeshdataset.cpp:220
QgsMesh3dDataBlock::values
QVector< double > values() const
Returns the values at volume centers.
Definition: qgsmeshdataset.cpp:413
QgsMeshDatasetIndex::operator!=
bool operator!=(QgsMeshDatasetIndex other) const
Inequality operator.
Definition: qgsmeshdataset.cpp:49
QgsMeshMemoryDataset::time
double time
Definition: qgsmeshdataset.h:712
QgsMeshDatasetMetadata
QgsMeshDatasetMetadata is a collection of mesh dataset metadata such as whether the data is valid or ...
Definition: qgsmeshdataset.h:476
QgsMeshDatasetMetadata::time
double time() const
Returns the time value for this dataset.
Definition: qgsmeshdataset.cpp:215
QgsMeshDatasetIndex::QgsMeshDatasetIndex
QgsMeshDatasetIndex(int group=-1, int dataset=-1)
Creates an index. -1 represents invalid group/dataset.
Definition: qgsmeshdataset.cpp:22
QgsMeshDatasetGroupTreeItem::clone
QgsMeshDatasetGroupTreeItem * clone() const
Clones the item.
Definition: qgsmeshdataset.cpp:521
QgsMeshDataBlock::type
DataType type() const
Type of data stored in the block.
Definition: qgsmeshdataset.cpp:251
QgsMeshDatasetGroup::setReferenceTime
void setReferenceTime(const QDateTime &referenceTime)
Sets the reference time of the dataset group.
Definition: qgsmeshdataset.cpp:984
QgsMeshDatasetGroupTreeItem::datasetGroupType
QgsMeshDatasetGroup::Type datasetGroupType() const
Definition: qgsmeshdataset.cpp:639
QgsMeshMemoryDatasetGroup::addDataset
void addDataset(std::shared_ptr< QgsMeshMemoryDataset > dataset)
Adds a memory dataset to the group.
Definition: qgsmeshdataset.cpp:931
QgsMeshMemoryDataset::areFacesActive
QgsMeshDataBlock areFacesActive(int faceIndex, int count) const override
Returns whether faces are active.
Definition: qgsmeshdataset.cpp:821
QgsMesh3dDataBlock::lastVolumeIndex
int lastVolumeIndex() const
Index of the last volume stored in the buffer (absolute)
Definition: qgsmeshdataset.cpp:363
QgsMeshDatasetGroup::maximum
double maximum() const
Returns the maximum value of the whole dataset group.
Definition: qgsmeshdataset.cpp:1008
QgsMeshDatasetGroup::setMinimumMaximum
void setMinimumMaximum(double min, double max)
Overrides the minimum and the maximum value of the whole dataset group.
Definition: qgsmeshdataset.cpp:1013
QgsMesh3dDataBlock::QgsMesh3dDataBlock
QgsMesh3dDataBlock()
Constructs an invalid block.
QgsMeshDatasetIndex::group
int group() const
Returns a group index.
Definition: qgsmeshdataset.cpp:26
QgsMeshDatasetGroupTreeItem::removeChild
void removeChild(QgsMeshDatasetGroupTreeItem *item)
Removes a item child if exists.
Definition: qgsmeshdataset.cpp:542
QgsMeshDatasetGroupTreeItem::QgsMeshDatasetGroupTreeItem
QgsMeshDatasetGroupTreeItem()
Constructor for an empty dataset group tree item.
QgsMeshDatasetGroupTreeItem::childCount
int childCount() const
Returns the count of children.
Definition: qgsmeshdataset.cpp:577
QgsMeshDataBlock::Vector2DDouble
@ Vector2DDouble
Vector double pairs (x1, y1, x2, y2, ... )
Definition: qgsmeshdataset.h:143
QgsMeshDatasetGroupTreeItem::childFromDatasetGroupIndex
QgsMeshDatasetGroupTreeItem * childFromDatasetGroupIndex(int index)
Returns the child with dataset group index Searches as depper as needed on the child hierarchy.
Definition: qgsmeshdataset.cpp:555
QgsMeshDatasetIndex
QgsMeshDatasetIndex is index that identifies the dataset group (e.g.
Definition: qgsmeshdataset.h:47
qgsDoubleNear
bool qgsDoubleNear(double a, double b, double epsilon=4 *std::numeric_limits< double >::epsilon())
Compare two doubles (but allow some difference)
Definition: qgis.h:315
QgsMeshDatasetGroupTreeItem::setPersistentDatasetGroup
void setPersistentDatasetGroup(const QString &uri)
Set parameters of the item in accordance with the persistent dataset group with uri.
Definition: qgsmeshdataset.cpp:665
QgsMesh3dDataBlock::verticalLevelsCount
QVector< int > verticalLevelsCount() const
Returns number of vertical level above 2d faces.
Definition: qgsmeshdataset.cpp:377
QgsMeshDatasetGroupMetadata::maximumVerticalLevelsCount
int maximumVerticalLevelsCount() const
Returns maximum number of vertical levels for 3d stacked meshes.
Definition: qgsmeshdataset.cpp:186
QgsMeshDatasetGroupTreeItem::description
QString description() const
Returns description about the dataset group (URI, formula,...)
Definition: qgsmeshdataset.cpp:644
QgsMeshDatasetGroupTreeItem::name
QString name() const
Returns the name of the item This name is the default name if the name has not been overridden (.
Definition: qgsmeshdataset.cpp:606
QgsMeshMemoryDataset::datasetValue
QgsMeshDatasetValue datasetValue(int valueIndex) const override
Returns the value with index valueIndex.
Definition: qgsmeshdataset.cpp:790
QgsMeshDatasetIndex::isValid
bool isValid() const
Returns whether index is valid, ie at least groups is set.
Definition: qgsmeshdataset.cpp:36
QgsMesh3dDataBlock::isVector
bool isVector() const
Whether we store vector values.
Definition: qgsmeshdataset.cpp:346
QgsMeshDatasetValue::set
void set(double scalar)
Sets scalar value.
Definition: qgsmeshdataset.cpp:78
QgsMeshDatasetIndex::operator==
bool operator==(QgsMeshDatasetIndex other) const
Equality operator.
Definition: qgsmeshdataset.cpp:41
QgsMeshDatasetValue::x
double x() const
Returns x value.
Definition: qgsmeshdataset.cpp:93
QgsMeshMemoryDataset::calculateMinMax
void calculateMinMax()
Calculates the minimum and the maximum of this group.
Definition: qgsmeshdataset.cpp:839
QgsMeshMemoryDatasetGroup::constDataset
std::shared_ptr< const QgsMeshMemoryDataset > constDataset(int index) const
Returns the dataset with index.
Definition: qgsmeshdataset.cpp:947
QgsMeshDataBlock::DataType
DataType
Type of data stored in the block.
Definition: qgsmeshdataset.h:140
QgsMesh3dDataBlock::count
int count() const
Number of 2d faces for which the volume data is stored in the block.
Definition: qgsmeshdataset.cpp:351
QgsMeshMemoryDatasetGroup::dataset
QgsMeshDataset * dataset(int index) const override
Returns the dataset with index.
Definition: qgsmeshdataset.cpp:926
QgsMeshDatasetGroup::addExtraMetadata
void addExtraMetadata(QString key, QString value)
Adds extra metadata to the group.
Definition: qgsmeshdataset.cpp:1039
QgsMeshDatasetGroupTreeItem::setDatasetGroup
void setDatasetGroup(QgsMeshDatasetGroup *datasetGroup)
Set parameters of the item in accordance with the dataset group.
Definition: qgsmeshdataset.cpp:649
QgsMeshDatasetGroup::minimum
double minimum() const
Returns the minimum value of the whole dataset group.
Definition: qgsmeshdataset.cpp:1003
QgsMesh3dDataBlock::setFaceToVolumeIndex
void setFaceToVolumeIndex(const QVector< int > &faceToVolumeIndex)
Sets the indexing between faces and volumes.
Definition: qgsmeshdataset.cpp:383
QgsMeshMemoryDataset::datasetValues
QgsMeshDataBlock datasetValues(bool isScalar, int valueIndex, int count) const override
Returns count values from valueIndex.
Definition: qgsmeshdataset.cpp:798
QgsMeshDatasetGroup::type
virtual QgsMeshDatasetGroup::Type type() const =0
Returns the type of dataset group.
QgsMeshDatasetGroupMetadata::name
QString name() const
Returns name of the dataset group.
Definition: qgsmeshdataset.cpp:166
QgsMeshDatasetGroup::dataset
virtual QgsMeshDataset * dataset(int index) const =0
Returns the dataset with index.
QgsMeshMemoryDataset::maximum
double maximum
Definition: qgsmeshdataset.h:715
QgsMeshDataBlock::setValid
void setValid(bool valid)
Sets block validity.
Definition: qgsmeshdataset.cpp:326
QgsMeshDatasetGroup::isScalar
bool isScalar() const
Returns whether the group contain scalar values.
Definition: qgsmeshdataset.cpp:1049
QgsMeshDatasetGroup
Abstract class that represents a dataset group.
Definition: qgsmeshdataset.h:576
QgsMeshDatasetGroup::datasetMetadata
virtual QgsMeshDatasetMetadata datasetMetadata(int datasetIndex) const =0
Returns the metadata of the dataset with index datasetIndex.
QgsMeshDatasetGroup::mDataType
QgsMeshDatasetGroupMetadata::DataType mDataType
Definition: qgsmeshdataset.h:673
QgsMeshDatasetGroupTreeItem::groupIndexDependencies
QList< int > groupIndexDependencies() const
Returns a list of group index corresponding to dataset group that depends on the dataset group repres...
Definition: qgsmeshdataset.cpp:706
QgsMeshDatasetGroupMetadata::dataType
DataType dataType() const
Returns whether dataset group data is defined on vertices or faces or volumes.
Definition: qgsmeshdataset.cpp:171
QgsMeshDatasetGroup::mMetadata
QMap< QString, QString > mMetadata
Definition: qgsmeshdataset.h:674
QgsMeshMemoryDataset::minimum
double minimum
Definition: qgsmeshdataset.h:714
QgsMeshDataBlock::setActive
void setActive(const QVector< int > &vals)
Sets active flag values.
Definition: qgsmeshdataset.cpp:295
QgsMeshDatasetGroupMetadata::isTemporal
bool isTemporal() const
Returns whether the dataset group is temporal (contains time-related dataset)
Definition: qgsmeshdataset.cpp:161
QgsMeshDatasetGroup::mName
QString mName
Definition: qgsmeshdataset.h:671
QgsMeshMemoryDatasetGroup::QgsMeshMemoryDatasetGroup
QgsMeshMemoryDatasetGroup()=default
Constructor.
QgsMeshDatasetGroupMetadata::extraOptions
QMap< QString, QString > extraOptions() const
Returns extra metadata options, for example description.
Definition: qgsmeshdataset.cpp:146
QgsMeshDatasetGroupMetadata
QgsMeshDatasetGroupMetadata is a collection of dataset group metadata such as whether the data is vec...
Definition: qgsmeshdataset.h:350
QgsMeshDatasetGroupMetadata::referenceTime
QDateTime referenceTime() const
Returns the reference time.
Definition: qgsmeshdataset.cpp:191
QgsMeshDataBlock::values
QVector< double > values() const
Returns buffer to the array with values For vector it is pairs (x1, y1, x2, y2, .....
Definition: qgsmeshdataset.cpp:310
QgsMeshDatasetGroupMetadata::isScalar
bool isScalar() const
Returns whether dataset group has scalar data.
Definition: qgsmeshdataset.cpp:156
QgsMeshDatasetGroupMetadata::maximum
double maximum() const
Returns maximum scalar value/vector magnitude present for whole dataset group.
Definition: qgsmeshdataset.cpp:181
QgsMeshDatasetGroupMetadata::DataType
DataType
Location of where data is specified for datasets in the dataset group.
Definition: qgsmeshdataset.h:355
QgsMeshDataBlock::ActiveFlagInteger
@ ActiveFlagInteger
Integer boolean flag whether face is active.
Definition: qgsmeshdataset.h:141
QgsMeshDatasetGroup::description
virtual QString description() const
Returns some information about the dataset group.
Definition: qgsmeshdataset.cpp:979
QgsMeshDatasetGroupTreeItem::appendChild
void appendChild(QgsMeshDatasetGroupTreeItem *item)
Appends a item child.
Definition: qgsmeshdataset.cpp:535
QgsMesh3dDataBlock::volumesCount
int volumesCount() const
Returns number of volumes stored in the buffer.
Definition: qgsmeshdataset.cpp:372
QgsMeshDatasetGroup::extraMetadata
QMap< QString, QString > extraMetadata() const
Returns all the extra metadata of the group.
Definition: qgsmeshdataset.cpp:1044
QgsMeshDatasetGroup::Type
Type
Type of the dataset group.
Definition: qgsmeshdataset.h:585
qgsmeshdataset.h
QgsMeshDataBlock::setValues
void setValues(const QVector< double > &vals)
Sets values.
Definition: qgsmeshdataset.cpp:317
QgsMeshDatasetGroup::dataType
QgsMeshDatasetGroupMetadata::DataType dataType() const
Returns the data type of the dataset group.
Definition: qgsmeshdataset.cpp:1029
QgsMeshMemoryDatasetGroup::datasetCount
int datasetCount() const override
Returns the count of datasets in the group.
Definition: qgsmeshdataset.cpp:913
QgsMeshDatasetValue::operator==
bool operator==(QgsMeshDatasetValue other) const
Definition: qgsmeshdataset.cpp:103
QgsMeshDatasetValue::y
double y() const
Returns y value.
Definition: qgsmeshdataset.cpp:98
QgsMeshDatasetGroupTreeItem::writeXml
QDomElement writeXml(QDomDocument &doc, const QgsReadWriteContext &context)
Writes the item and its children in a DOM document.
Definition: qgsmeshdataset.cpp:672
QgsMeshDatasetGroup::datasetGroupNamesDependentOn
virtual QStringList datasetGroupNamesDependentOn() const
Returns the dataset group variable name which this dataset group depends on.
Definition: qgsmeshdataset.cpp:974
QgsMeshMemoryDatasetGroup::memoryDatasets
QVector< std::shared_ptr< QgsMeshMemoryDataset > > memoryDatasets
Contains all the memory datasets.
Definition: qgsmeshdataset.h:755
QgsMesh3dDataBlock::verticalLevels
QVector< double > verticalLevels() const
Returns the vertical levels height.
Definition: qgsmeshdataset.cpp:395
QgsMeshDatasetValue::setX
void setX(double x)
Sets X value.
Definition: qgsmeshdataset.cpp:83
QgsMeshDatasetGroup::calculateStatistic
void calculateStatistic()
Calculates the statictics (minimum and maximum)
Definition: qgsmeshdataset.cpp:959
QgsMeshDataBlock
QgsMeshDataBlock is a block of integers/doubles that can be used to retrieve: active flags (e....
Definition: qgsmeshdataset.h:136
QgsMeshDatasetGroup::~QgsMeshDatasetGroup
virtual ~QgsMeshDatasetGroup()
QgsMeshMemoryDataset::valid
bool valid
Definition: qgsmeshdataset.h:713
QgsMeshDatasetGroupTreeItem::datasetGroupIndex
int datasetGroupIndex() const
Definition: qgsmeshdataset.cpp:619
QgsMeshDatasetMetadata::maximum
double maximum() const
Returns maximum scalar value/vector magnitude present for the dataset.
Definition: qgsmeshdataset.cpp:230
QgsMeshDatasetGroup::name
QString name() const
Returns the name of the dataset group.
Definition: qgsmeshdataset.cpp:1019
QgsMeshDatasetGroupTreeItem::~QgsMeshDatasetGroupTreeItem
~QgsMeshDatasetGroupTreeItem()
Destructor, destructs also the children.
Definition: qgsmeshdataset.cpp:507
QgsMeshDatasetGroup::groupMetadata
QgsMeshDatasetGroupMetadata groupMetadata() const
Returns the metadata of the dataset group.
Definition: qgsmeshdataset.cpp:897
QgsMeshDatasetGroupMetadata::uri
QString uri() const
Returns the uri of the source.
Definition: qgsmeshdataset.cpp:196
QgsMeshMemoryDataset::metadata
QgsMeshDatasetMetadata metadata() const override
Returns the metadata of the dataset.
Definition: qgsmeshdataset.cpp:834
QgsMeshDatasetGroupMetadata::isVector
bool isVector() const
Returns whether dataset group has vector data.
Definition: qgsmeshdataset.cpp:151
QgsMeshDatasetMetadata::QgsMeshDatasetMetadata
QgsMeshDatasetMetadata()=default
Constructs an empty metadata object.
QgsMeshDataBlock::value
QgsMeshDatasetValue value(int index) const
Returns a value represented by the index For active flag the behavior is undefined.
Definition: qgsmeshdataset.cpp:266
QgsMeshDatasetGroupTreeItem::setName
void setName(const QString &name)
Overrides the default name with the name to display.
Definition: qgsmeshdataset.cpp:784
QgsMesh3dDataBlock::firstVolumeIndex
int firstVolumeIndex() const
Index of the first volume stored in the buffer (absolute)
Definition: qgsmeshdataset.cpp:356
QgsMeshDatasetGroupTreeItem::setIsEnabled
void setIsEnabled(bool isEnabled)
Sets whether the item is enabled, that is if it is displayed in view.
Definition: qgsmeshdataset.cpp:629
QgsMesh3dDataBlock::value
QgsMeshDatasetValue value(int volumeIndex) const
Returns the value at volume centers.
Definition: qgsmeshdataset.cpp:419
QgsMeshDatasetGroupTreeItem::child
QgsMeshDatasetGroupTreeItem * child(int row) const
Returns a child.
Definition: qgsmeshdataset.cpp:547
QgsMeshDatasetValue::scalar
double scalar() const
Returns magnitude of vector for vector data or scalar value for scalar data.
Definition: qgsmeshdataset.cpp:62
QgsMesh3dDataBlock::setValid
void setValid(bool valid)
Sets block validity.
Definition: qgsmeshdataset.cpp:439
QgsMeshDataset::valuesCount
virtual int valuesCount() const =0
Returns the values count.
QgsMeshDatasetGroup::setName
void setName(const QString &name)
Sets the name of the dataset group.
Definition: qgsmeshdataset.cpp:1024
QgsMeshDatasetGroup::checkValueCountPerDataset
bool checkValueCountPerDataset(int count) const
Returns whether all the datasets contain count values.
Definition: qgsmeshdataset.cpp:989
QgsMesh3dDataBlock::setVerticalLevels
void setVerticalLevels(const QVector< double > &verticalLevels)
Sets the vertical levels height.
Definition: qgsmeshdataset.cpp:401
QgsMeshDatasetGroupMetadata::QgsMeshDatasetGroupMetadata
QgsMeshDatasetGroupMetadata()=default
Constructs an empty metadata object.
QgsMeshMemoryDatasetGroup::writeXml
QDomElement writeXml(QDomDocument &doc, const QgsReadWriteContext &context) const override
Returns a invalid DOM element.
Definition: qgsmeshdataset.cpp:952
QgsMeshDatasetGroupTreeItem::providerName
QString providerName() const
Returns the name used by the provider to identify the dataset.
Definition: qgsmeshdataset.cpp:779
QgsMeshMemoryDatasetGroup::clearDatasets
void clearDatasets()
Removes all the datasets from the group.
Definition: qgsmeshdataset.cpp:937
QgsMeshDatasetValue::QgsMeshDatasetValue
QgsMeshDatasetValue()=default
Default Ctor, initialize to NaN.
QgsMeshDatasetGroupTreeItem::row
int row() const
Returns the position of the item in the parent.
Definition: qgsmeshdataset.cpp:598
QgsMeshDatasetGroup::setDataType
void setDataType(const QgsMeshDatasetGroupMetadata::DataType &dataType)
Sets the data type of the dataset group.
Definition: qgsmeshdataset.cpp:1034
QgsMeshDataBlock::isValid
bool isValid() const
Whether the block is valid.
Definition: qgsmeshdataset.cpp:261
QgsMeshDataBlock::count
int count() const
Number of items stored in the block.
Definition: qgsmeshdataset.cpp:256
QgsMeshMemoryDataset::values
QVector< QgsMeshDatasetValue > values
Definition: qgsmeshdataset.h:710