|
25 | 25 |
|
26 | 26 | #include <QVector>
|
27 | 27 | #include <QString>
|
| 28 | +#include <QMap> |
| 29 | +#include <limits> |
28 | 30 |
|
29 |
| -typedef QgsPoint QgsMeshVertex; //xyz coords of vertex |
30 |
| -typedef QVector<int> QgsMeshFace; //list of vertex indexes |
| 31 | +//! xyz coords of vertex |
| 32 | +typedef QgsPoint QgsMeshVertex; |
| 33 | + |
| 34 | +//! List of vertex indexes |
| 35 | +typedef QVector<int> QgsMeshFace; |
| 36 | + |
| 37 | +//! Dataset's metadata key:value map |
| 38 | +typedef QMap<QString, QString> QgsMeshDatasetMetadata; |
| 39 | + |
| 40 | +/** |
| 41 | + * \ingroup core |
| 42 | + * |
| 43 | + * QgsMeshDatasetValue is a vector or a scalar value on vertex or face of the mesh with |
| 44 | + * support of nodata values |
| 45 | + * |
| 46 | + * \since QGIS 3.2 |
| 47 | + */ |
| 48 | +class CORE_EXPORT QgsMeshDatasetValue |
| 49 | +{ |
| 50 | + Q_GADGET |
| 51 | + |
| 52 | + public: |
| 53 | + QgsMeshDatasetValue( double x, |
| 54 | + double y ); |
| 55 | + QgsMeshDatasetValue( double scalar ); |
| 56 | + QgsMeshDatasetValue( ) = default; |
| 57 | + |
| 58 | + ~QgsMeshDatasetValue() = default; |
| 59 | + void setNodata( bool nodata = true ); |
| 60 | + bool isNodata() const; |
| 61 | + bool isScalar() const; |
| 62 | + double scalar() const; //length for vectors, value for scalars |
| 63 | + void set( double scalar ); |
| 64 | + void setX( double x ); |
| 65 | + void setY( double y ) ; |
| 66 | + double x() const; |
| 67 | + double y() const; |
| 68 | + bool operator==( const QgsMeshDatasetValue &other ) const; |
| 69 | + |
| 70 | + private: |
| 71 | + double mX = std::numeric_limits<double>::quiet_NaN(); |
| 72 | + double mY = std::numeric_limits<double>::quiet_NaN(); |
| 73 | + bool mIsNodata = true; |
| 74 | + bool mIsScalar = true; |
| 75 | +}; |
31 | 76 |
|
32 | 77 | /**
|
33 | 78 | * \ingroup core
|
@@ -73,14 +118,66 @@ class CORE_EXPORT QgsMeshSource SIP_ABSTRACT
|
73 | 118 |
|
74 | 119 | /**
|
75 | 120 | * \ingroup core
|
76 |
| - * Base class for providing data for QgsMeshLayer |
77 |
| - * |
78 |
| - * Responsible for reading native mesh data |
79 |
| - * |
80 |
| - * \see QgsMeshSource |
81 |
| - * \since QGIS 3.2 |
82 |
| - */ |
83 |
| -class CORE_EXPORT QgsMeshDataProvider: public QgsDataProvider, public QgsMeshSource |
| 121 | + * Dataset is a collection of vector or scalar values on vertices or faces of the mesh |
| 122 | + * |
| 123 | + * Base on the underlying data provider/format, whole dataset is either stored in memory or |
| 124 | + * read on demand |
| 125 | + * |
| 126 | + * \since QGIS 3.2 |
| 127 | + */ |
| 128 | +class CORE_EXPORT QgsMeshDatasetSource SIP_ABSTRACT |
| 129 | +{ |
| 130 | + public: |
| 131 | + //! Dtor |
| 132 | + virtual ~QgsMeshDatasetSource() = default; |
| 133 | + |
| 134 | + /** |
| 135 | + * \brief Associate dataset with the mesh |
| 136 | + */ |
| 137 | + virtual bool addDataset( const QString &uri ) = 0; |
| 138 | + |
| 139 | + /** |
| 140 | + * \brief Return number of datasets loaded |
| 141 | + */ |
| 142 | + virtual int datasetCount() const = 0; |
| 143 | + |
| 144 | + /** |
| 145 | + * \brief Whether dataset has scalar data associated |
| 146 | + */ |
| 147 | + virtual bool datasetHasScalarData( int index ) const = 0; |
| 148 | + |
| 149 | + /** |
| 150 | + * \brief Whether dataset is on vertices |
| 151 | + */ |
| 152 | + virtual bool datasetIsOnVertices( int index ) const = 0; |
| 153 | + |
| 154 | + /** |
| 155 | + * \brief Return dataset metadata |
| 156 | + */ |
| 157 | + virtual QgsMeshDatasetMetadata datasetMetadata( int index ) const = 0; |
| 158 | + |
| 159 | + /** |
| 160 | + * \brief Return value associated with the index from the dataset |
| 161 | + */ |
| 162 | + virtual QgsMeshDatasetValue datasetValue( int datasetIndex, int valueIndex ) const = 0; |
| 163 | + |
| 164 | + /** |
| 165 | + * \brief Return whether dataset is valid |
| 166 | + */ |
| 167 | + virtual bool datasetIsValid( int index ) const = 0; |
| 168 | +}; |
| 169 | + |
| 170 | + |
| 171 | +/** |
| 172 | + * \ingroup core |
| 173 | + * Base class for providing data for QgsMeshLayer |
| 174 | + * |
| 175 | + * Responsible for reading native mesh data |
| 176 | + * |
| 177 | + * \see QgsMeshSource |
| 178 | + * \since QGIS 3.2 |
| 179 | + */ |
| 180 | +class CORE_EXPORT QgsMeshDataProvider: public QgsDataProvider, public QgsMeshSource, public QgsMeshDatasetSource |
84 | 181 | {
|
85 | 182 | Q_OBJECT
|
86 | 183 |
|
|
0 commit comments