QGIS API Documentation
3.16.0-Hannover (43b64b13f3)
|
Go to the documentation of this file.
23 : mGroupIndex( group ), mDatasetIndex( dataset )
64 if ( std::isnan( mY ) )
68 else if ( std::isnan( mX ) )
70 return std::numeric_limits<double>::quiet_NaN();
74 return std::sqrt( ( mX ) * ( mX ) + ( mY ) * ( mY ) );
105 bool equal = std::isnan( mX ) == std::isnan( other.
x() );
106 equal &= std::isnan( mY ) == std::isnan( other.
y() );
110 if ( std::isnan( mY ) )
129 int maximumVerticalLevels,
130 const QDateTime &referenceTime,
132 const QMap<QString, QString> &extraOptions )
135 , mIsScalar( isScalar )
136 , mDataType( dataType )
137 , mMinimumValue( minimum )
138 , mMaximumValue( maximum )
139 , mExtraOptions( extraOptions )
140 , mMaximumVerticalLevelsCount( maximumVerticalLevels )
141 , mReferenceTime( referenceTime )
142 , mIsTemporal( isTemporal )
148 return mExtraOptions;
178 return mMinimumValue;
183 return mMaximumValue;
188 return mMaximumVerticalLevelsCount;
193 return mReferenceTime;
206 int maximumVerticalLevels )
208 , mIsValid( isValid )
209 , mMinimumValue( minimum )
210 , mMaximumValue( maximum )
211 , mMaximumVerticalLevelsCount( maximumVerticalLevels )
227 return mMinimumValue;
232 return mMaximumValue;
237 return mMaximumVerticalLevelsCount;
241 : mType( ActiveFlagInteger )
263 return (
count() > 0 ) && ( mIsValid );
277 mDoubleBuffer[2 * index],
278 mDoubleBuffer[2 * index + 1]
289 if ( mIntegerBuffer.empty() )
292 return bool( mIntegerBuffer[index] );
298 Q_ASSERT( vals.size() ==
count() );
300 mIntegerBuffer = vals;
307 return mIntegerBuffer;
314 return mDoubleBuffer;
322 mDoubleBuffer = vals;
337 , mIsVector( isVector )
358 if ( mFaceToVolumeIndex.empty() )
360 return mFaceToVolumeIndex[0];
365 if ( mFaceToVolumeIndex.empty() || mVerticalLevelsCount.empty() )
367 const int lastVolumeStartIndex = mFaceToVolumeIndex[mFaceToVolumeIndex.size() - 1];
368 const int volumesCountInLastRow = mVerticalLevelsCount[mVerticalLevelsCount.size() - 1];
369 return lastVolumeStartIndex + volumesCountInLastRow;
380 return mVerticalLevelsCount;
398 return mVerticalLevels;
410 return mFaceToVolumeIndex;
416 return mDoubleBuffer;
428 mDoubleBuffer[2 * volumeIndex],
429 mDoubleBuffer[2 * volumeIndex + 1]
436 mDoubleBuffer = doubleBuffer;
449 : mOriginalName( defaultName )
450 , mSourceName( sourceName )
451 , mIsVector( isVector )
452 , mDatasetGroupIndex( index )
459 if ( itemElement.hasAttribute( QStringLiteral(
"display-name" ) ) )
460 mUserName = itemElement.attribute( QStringLiteral(
"display-name" ), mUserName );
462 if ( itemElement.hasAttribute( QStringLiteral(
"original-name" ) ) )
463 mOriginalName = itemElement.attribute( QStringLiteral(
"original-name" ), mOriginalName );
465 if ( itemElement.hasAttribute( QStringLiteral(
"source-name" ) ) )
466 mSourceName = itemElement.attribute( QStringLiteral(
"source-name" ), mSourceName );
468 if ( itemElement.hasAttribute( QStringLiteral(
"is-vector" ) ) )
469 mIsVector = itemElement.attribute( QStringLiteral(
"is-vector" ) ).toInt();
471 if ( itemElement.hasAttribute( QStringLiteral(
"dataset-index" ) ) )
472 mDatasetGroupIndex = itemElement.attribute( QStringLiteral(
"dataset-index" ) ).toInt();
474 if ( itemElement.hasAttribute( QStringLiteral(
"is-enabled" ) ) )
475 mIsEnabled = itemElement.attribute( QStringLiteral(
"is-enabled" ) ).toInt();
477 if ( itemElement.hasAttribute( QStringLiteral(
"dataset-group-type" ) ) )
478 mDatasetGroupType =
static_cast<QgsMeshDatasetGroup::Type>( itemElement.attribute( QStringLiteral(
"dataset-group-type" ) ) .toInt() ) ;
480 if ( itemElement.hasAttribute( QStringLiteral(
"description" ) ) )
481 mDescription = itemElement.attribute( QStringLiteral(
"description" ) );
483 QDomElement dependOnElement = itemElement.firstChildElement( QStringLiteral(
"dependent-on-item" ) );
484 while ( !dependOnElement.isNull() )
486 if ( dependOnElement.hasAttribute( QStringLiteral(
"dataset-index" ) ) )
487 mDatasetGroupDependentOn.append( dependOnElement.attribute( QStringLiteral(
"dataset-index" ) ).toInt() );
488 dependOnElement = dependOnElement.nextSiblingElement( QStringLiteral(
"dependent-on-item" ) );
491 QDomElement dependencieElement = itemElement.firstChildElement( QStringLiteral(
"dependency-item" ) );
492 while ( !dependencieElement.isNull() )
494 if ( dependencieElement.hasAttribute( QStringLiteral(
"dataset-index" ) ) )
495 mDatasetGroupDependencies.append( dependencieElement.attribute( QStringLiteral(
"dataset-index" ) ).toInt() );
496 dependencieElement = dependencieElement.nextSiblingElement( QStringLiteral(
"dependency-item" ) );
499 QDomElement childElement = itemElement.firstChildElement( QStringLiteral(
"mesh-dataset-group-tree-item" ) );
500 while ( !childElement.isNull() )
503 childElement = childElement.nextSiblingElement( QStringLiteral(
"mesh-dataset-group-tree-item" ) );
512 freeFromDependencies();
513 qDeleteAll( mChildren );
516 mParent->mDatasetGroupIndexToChild.remove( mDatasetGroupIndex );
517 mParent->mChildren.removeOne(
this );
526 other->mChildren.clear();
527 other->mDatasetGroupIndexToChild.clear();
528 if ( !mChildren.empty() )
529 for (
int i = 0; i < mChildren.count(); ++i )
537 mChildren.append( item );
538 item->mParent =
this;
549 if (
row < mChildren.count() )
550 return mChildren.at(
row );
557 if ( mDatasetGroupIndexToChild.empty() )
560 QMap<int, QgsMeshDatasetGroupTreeItem *>::iterator it = mDatasetGroupIndexToChild.find( index );
562 if ( it != mDatasetGroupIndexToChild.end() )
567 for (
int i = 0; i < mChildren.count(); ++i )
569 item = mChildren.at( i )->childFromDatasetGroupIndex( index );
579 return mChildren.count();
585 for (
int i = 0; i < mChildren.count(); ++i )
588 count += mChildren.at( i )->totalChildCount();
608 if ( mUserName.isEmpty() )
609 return mOriginalName;
621 return mDatasetGroupIndex;
631 mIsEnabled = enabled;
636 return mOriginalName;
641 return mDatasetGroupType;
654 mDatasetGroupType = datasetGroup->
type();
656 for (
const QString &varName : datasetGroupNames )
668 mDatasetGroupDependentOn.clear();
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 );
686 for (
int index : mDatasetGroupDependentOn )
688 QDomElement dependOnElement = doc.createElement( QStringLiteral(
"dependent-on-item" ) );
689 dependOnElement.setAttribute( QStringLiteral(
"dataset-index" ), index );
690 itemElement.appendChild( dependOnElement );
693 for (
int index : mDatasetGroupDependencies )
695 QDomElement dependencieElement = doc.createElement( QStringLiteral(
"dependency-item" ) );
696 dependencieElement.setAttribute( QStringLiteral(
"dataset-index" ), index );
697 itemElement.appendChild( dependencieElement );
700 for (
int i = 0; i < mChildren.count(); ++i )
701 itemElement.appendChild( mChildren.at( i )->writeXml( doc, context ) );
708 QList<int> dependencies;
710 for (
int index : mDatasetGroupDependencies )
712 if ( !dependencies.contains( index ) )
713 dependencies.append( index );
732 QList<QgsMeshDatasetGroupTreeItem *> itemToCheck;
733 itemToCheck.append( baseItem );
734 while ( baseItem->
providerName() != sourceName && !itemToCheck.isEmpty() )
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();
757 void QgsMeshDatasetGroupTreeItem::freeAsDependency()
760 for (
int index : mDatasetGroupDependentOn )
768 void QgsMeshDatasetGroupTreeItem::freeFromDependencies()
771 for (
int index : mDatasetGroupDependencies )
792 if ( valueIndex >= 0 && valueIndex <
values.count() )
793 return values[valueIndex];
801 QVector<double> buf( isScalar ? count : 2 * count );
802 for (
int i = 0; i < count; ++i )
804 int idx = valueIndex + i;
805 if ( ( idx < 0 ) || ( idx >=
values.size() ) )
813 buf[2 * i] = val.
x();
814 buf[2 * i + 1] = val.
y();
826 ( faceIndex + count >
active.size() )
841 double min = std::numeric_limits<double>::max();
842 double max = std::numeric_limits<double>::min();
848 bool firstIteration =
true;
849 for (
int i = 0; i <
values.size(); ++i )
851 double v =
values[i].scalar();
853 if ( std::isnan( v ) )
855 if ( firstIteration )
857 firstIteration =
false;
879 return active.at( faceIndex );
956 return QDomElement();
961 double min = std::numeric_limits<double>::max();
962 double max = std::numeric_limits<double>::min();
965 for (
int i = 0; i < count; ++i )
976 return QStringList();
986 mReferenceTime = referenceTime;
int dataset() const
Returns a dataset index within group()
QVector< int > faceToVolumeIndex() const
Returns the indexing between faces and volumes.
void setValues(const QVector< double > &doubleBuffer)
Sets the values at volume centers.
QgsMeshDatasetGroup()=default
Default constructor.
void setIsScalar(bool isScalar)
Sets whether the group contain scalar values.
void initialize() override
Initialize the dataset group.
int totalChildCount() const
Returns the total count of children, that is included deeper children.
QgsMeshDataBlock()
Constructs an invalid block.
The class is used as a container of context for various read/write operations on other objects.
void setY(double y)
Sets Y value.
@ ScalarDouble
Scalar double values.
QVector< int > active() const
Returns active flag array.
int valuesCount() const override
Returns the values count.
QgsMeshDatasetGroupTreeItem * parentItem() const
Returns the parent item, nullptr if it is root item.
bool isValid() const
Whether the block is valid.
~QgsMesh3dDataBlock()
Dtor.
virtual int datasetCount() const =0
Returns the count of datasets in the group.
bool isActive(int faceIndex) const override
Returns whether the face is active.
QgsMeshDatasetValue represents single dataset value.
QgsMeshDatasetMetadata datasetMetadata(int datasetIndex) const override
Returns the metadata of the dataset with index datasetIndex.
Abstract class that represents a dataset.
@ Persistent
Generic type used for non typed dataset group.
QString defaultName() const
void setVerticalLevelsCount(const QVector< int > &verticalLevelsCount)
Sets the vertical level counts.
Tree item for display of the mesh dataset groups.
QVector< double > values() const
Returns the values at volume centers.
bool operator!=(QgsMeshDatasetIndex other) const
Inequality operator.
QgsMeshDatasetIndex(int group=-1, int dataset=-1)
Creates an index. -1 represents invalid group/dataset.
QgsMeshDatasetGroupTreeItem * clone() const
Clones the item.
DataType type() const
Type of data stored in the block.
void setReferenceTime(const QDateTime &referenceTime)
Sets the reference time of the dataset group.
QgsMeshDatasetGroup::Type datasetGroupType() const
void addDataset(std::shared_ptr< QgsMeshMemoryDataset > dataset)
Adds a memory dataset to the group.
QgsMeshDataBlock areFacesActive(int faceIndex, int count) const override
Returns whether faces are active.
int lastVolumeIndex() const
Index of the last volume stored in the buffer (absolute)
double maximum() const
Returns the maximum value of the whole dataset group.
void setMinimumMaximum(double min, double max)
Overrides the minimum and the maximum value of the whole dataset group.
QgsMesh3dDataBlock()
Constructs an invalid block.
int group() const
Returns a group index.
void removeChild(QgsMeshDatasetGroupTreeItem *item)
Removes a item child if exists.
QgsMeshDatasetGroupTreeItem()
Constructor for an empty dataset group tree item.
int childCount() const
Returns the count of children.
@ Vector2DDouble
Vector double pairs (x1, y1, x2, y2, ... )
QgsMeshDatasetGroupTreeItem * childFromDatasetGroupIndex(int index)
Returns the child with dataset group index Searches as depper as needed on the child hierarchy.
QgsMeshDatasetIndex is index that identifies the dataset group (e.g.
bool qgsDoubleNear(double a, double b, double epsilon=4 *std::numeric_limits< double >::epsilon())
Compare two doubles (but allow some difference)
void setPersistentDatasetGroup(const QString &uri)
Set parameters of the item in accordance with the persistent dataset group with uri.
QVector< int > verticalLevelsCount() const
Returns number of vertical level above 2d faces.
QString description() const
Returns description about the dataset group (URI, formula,...)
QString name() const
Returns the name of the item This name is the default name if the name has not been overridden (.
QgsMeshDatasetValue datasetValue(int valueIndex) const override
Returns the value with index valueIndex.
bool isValid() const
Returns whether index is valid, ie at least groups is set.
bool isVector() const
Whether we store vector values.
void set(double scalar)
Sets scalar value.
bool operator==(QgsMeshDatasetIndex other) const
Equality operator.
double x() const
Returns x value.
void calculateMinMax()
Calculates the minimum and the maximum of this group.
std::shared_ptr< const QgsMeshMemoryDataset > constDataset(int index) const
Returns the dataset with index.
DataType
Type of data stored in the block.
int count() const
Number of 2d faces for which the volume data is stored in the block.
QgsMeshDataset * dataset(int index) const override
Returns the dataset with index.
void addExtraMetadata(QString key, QString value)
Adds extra metadata to the group.
void setDatasetGroup(QgsMeshDatasetGroup *datasetGroup)
Set parameters of the item in accordance with the dataset group.
double minimum() const
Returns the minimum value of the whole dataset group.
void setFaceToVolumeIndex(const QVector< int > &faceToVolumeIndex)
Sets the indexing between faces and volumes.
QgsMeshDataBlock datasetValues(bool isScalar, int valueIndex, int count) const override
Returns count values from valueIndex.
virtual QgsMeshDatasetGroup::Type type() const =0
Returns the type of dataset group.
virtual QgsMeshDataset * dataset(int index) const =0
Returns the dataset with index.
void setValid(bool valid)
Sets block validity.
bool isScalar() const
Returns whether the group contain scalar values.
Abstract class that represents a dataset group.
virtual QgsMeshDatasetMetadata datasetMetadata(int datasetIndex) const =0
Returns the metadata of the dataset with index datasetIndex.
QgsMeshDatasetGroupMetadata::DataType mDataType
QList< int > groupIndexDependencies() const
Returns a list of group index corresponding to dataset group that depends on the dataset group repres...
QMap< QString, QString > mMetadata
void setActive(const QVector< int > &vals)
Sets active flag values.
QgsMeshMemoryDatasetGroup()=default
Constructor.
QVector< double > values() const
Returns buffer to the array with values For vector it is pairs (x1, y1, x2, y2, .....
@ ActiveFlagInteger
Integer boolean flag whether face is active.
virtual QString description() const
Returns some information about the dataset group.
void appendChild(QgsMeshDatasetGroupTreeItem *item)
Appends a item child.
int volumesCount() const
Returns number of volumes stored in the buffer.
QMap< QString, QString > extraMetadata() const
Returns all the extra metadata of the group.
Type
Type of the dataset group.
void setValues(const QVector< double > &vals)
Sets values.
QgsMeshDatasetGroupMetadata::DataType dataType() const
Returns the data type of the dataset group.
int datasetCount() const override
Returns the count of datasets in the group.
bool operator==(QgsMeshDatasetValue other) const
double y() const
Returns y value.
QDomElement writeXml(QDomDocument &doc, const QgsReadWriteContext &context)
Writes the item and its children in a DOM document.
virtual QStringList datasetGroupNamesDependentOn() const
Returns the dataset group variable name which this dataset group depends on.
QVector< std::shared_ptr< QgsMeshMemoryDataset > > memoryDatasets
Contains all the memory datasets.
QVector< double > verticalLevels() const
Returns the vertical levels height.
void setX(double x)
Sets X value.
void calculateStatistic()
Calculates the statictics (minimum and maximum)
QgsMeshDataBlock is a block of integers/doubles that can be used to retrieve: active flags (e....
virtual ~QgsMeshDatasetGroup()
int datasetGroupIndex() const
QString name() const
Returns the name of the dataset group.
~QgsMeshDatasetGroupTreeItem()
Destructor, destructs also the children.
QgsMeshDatasetGroupMetadata groupMetadata() const
Returns the metadata of the dataset group.
QgsMeshDatasetMetadata metadata() const override
Returns the metadata of the dataset.
QgsMeshDatasetValue value(int index) const
Returns a value represented by the index For active flag the behavior is undefined.
void setName(const QString &name)
Overrides the default name with the name to display.
int firstVolumeIndex() const
Index of the first volume stored in the buffer (absolute)
void setIsEnabled(bool isEnabled)
Sets whether the item is enabled, that is if it is displayed in view.
QgsMeshDatasetValue value(int volumeIndex) const
Returns the value at volume centers.
QgsMeshDatasetGroupTreeItem * child(int row) const
Returns a child.
double scalar() const
Returns magnitude of vector for vector data or scalar value for scalar data.
void setValid(bool valid)
Sets block validity.
virtual int valuesCount() const =0
Returns the values count.
void setName(const QString &name)
Sets the name of the dataset group.
bool checkValueCountPerDataset(int count) const
Returns whether all the datasets contain count values.
void setVerticalLevels(const QVector< double > &verticalLevels)
Sets the vertical levels height.
QDomElement writeXml(QDomDocument &doc, const QgsReadWriteContext &context) const override
Returns a invalid DOM element.
QString providerName() const
Returns the name used by the provider to identify the dataset.
void clearDatasets()
Removes all the datasets from the group.
QgsMeshDatasetValue()=default
Default Ctor, initialize to NaN.
int row() const
Returns the position of the item in the parent.
void setDataType(const QgsMeshDatasetGroupMetadata::DataType &dataType)
Sets the data type of the dataset group.
bool isValid() const
Whether the block is valid.
int count() const
Number of items stored in the block.
QVector< QgsMeshDatasetValue > values