Skip to content

Commit 271bab1

Browse files
committed
introduce DataType for mesh dataset data definition and small fixes
1 parent 9ea0bc2 commit 271bab1

12 files changed

+70
-49
lines changed

python/core/auto_generated/mesh/qgsmeshdataprovider.sip.in

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,13 @@ such as whether the data is vector or scalar, name
140140
#include "qgsmeshdataprovider.h"
141141
%End
142142
public:
143+
144+
enum DataType
145+
{
146+
DataOnFaces,
147+
DataOnVertices
148+
};
149+
143150
QgsMeshDatasetGroupMetadata();
144151
%Docstring
145152
Constructs an empty metadata object
@@ -178,14 +185,9 @@ Returns whether dataset group has vector data
178185
Returns whether dataset group has scalar data
179186
%End
180187

181-
bool isOnVertices() const;
182-
%Docstring
183-
Returns whether dataset group data is defined on vertices
184-
%End
185-
186-
bool isOnFaces() const;
188+
DataType dataType() const;
187189
%Docstring
188-
Returns whether dataset group data is defined on faces
190+
Returns whether dataset group data is defined on vertices or faces
189191
%End
190192

191193
};

python/core/auto_generated/mesh/qgsmeshlayer.sip.in

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -195,22 +195,33 @@ Returns active vector dataset
195195
%Docstring
196196
Interpolates the value on the given point from given dataset.
197197

198-
Returns NaN for NaN values, for values outside range or when
199-
triangular mesh is not yet initialized on given point
198+
.. note::
199+
200+
It uses previously cached and indexed triangular mesh
201+
and so if the layer has not been rendered previously
202+
(e.g. when used in a script) it returns NaN value
203+
204+
:param index: dataset index specifying group and dataset to extract value from
205+
:param point: point to query in map coordinates
206+
207+
:return: interpolated value at the point. Returns NaN values for values
208+
outside the mesh layer, nodata values and in case triangular mesh was not
209+
previously used for rendering
210+
200211

201212
.. versionadded:: 3.4
202213
%End
203214

204215
signals:
205216

206-
void activeScalarDatasetChanged( QgsMeshDatasetIndex index );
217+
void activeScalarDatasetChanged( const QgsMeshDatasetIndex &index );
207218
%Docstring
208219
Emitted when active scalar dataset is changed
209220

210221
.. versionadded:: 3.4
211222
%End
212223

213-
void activeVectorDatasetChanged( QgsMeshDatasetIndex index );
224+
void activeVectorDatasetChanged( const QgsMeshDatasetIndex &index );
214225
%Docstring
215226
Emitted when active vector dataset is changed
216227

src/app/mesh/qgsmeshrendereractivedatasetwidget.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,8 +126,8 @@ void QgsMeshRendererActiveDatasetWidget::updateMetadata( QgsMeshDatasetIndex dat
126126

127127
const QgsMeshDatasetGroupMetadata gmeta = mMeshLayer->dataProvider()->datasetGroupMetadata( datasetIndex );
128128
msg += QStringLiteral( "<tr><td>%1</td><td>%2</td></tr>" )
129-
.arg( tr( "Is on vertices" ) )
130-
.arg( gmeta.isOnVertices() ? tr( "Yes" ) : tr( "No" ) );
129+
.arg( tr( "Data Type" ) )
130+
.arg( gmeta.dataType() == QgsMeshDatasetGroupMetadata::DataOnVertices ? tr( "Defined on vertices" ) : tr( "Defined on faces" ) );
131131

132132
msg += QStringLiteral( "<tr><td>%1</td><td>%2</td></tr>" )
133133
.arg( tr( "Is vector" ) )

src/app/mesh/qgsmeshrendererscalarsettingswidget.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ void QgsMeshRendererScalarSettingsWidget::calcMinMax( QgsMeshDatasetIndex datase
112112
return;
113113

114114
const QgsMeshDatasetGroupMetadata metadata = mMeshLayer->dataProvider()->datasetGroupMetadata( datasetIndex );
115-
bool scalarDataOnVertices = metadata.isOnVertices();
115+
bool scalarDataOnVertices = metadata.dataType() == QgsMeshDatasetGroupMetadata::DataOnVertices;
116116
int count;
117117
if ( scalarDataOnVertices )
118118
count = mMeshLayer->dataProvider()->vertexCount();

src/core/mesh/qgsmeshdataprovider.cpp

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -161,20 +161,16 @@ bool QgsMeshDatasetGroupMetadata::isScalar() const
161161
return mIsScalar;
162162
}
163163

164-
QString QgsMeshDatasetGroupMetadata::name() const
165-
{
166-
return mName;
167-
}
168164

169165

170-
bool QgsMeshDatasetGroupMetadata::isOnVertices() const
166+
QString QgsMeshDatasetGroupMetadata::name() const
171167
{
172-
return mIsOnVertices;
168+
return mName;
173169
}
174170

175-
bool QgsMeshDatasetGroupMetadata::isOnFaces() const
171+
QgsMeshDatasetGroupMetadata::DataType QgsMeshDatasetGroupMetadata::dataType() const
176172
{
177-
return !mIsOnVertices;
173+
return ( mIsOnVertices ) ? DataType::DataOnVertices : DataType::DataOnFaces;
178174
}
179175

180176
int QgsMeshDatasetSourceInterface::datasetCount( QgsMeshDatasetIndex index ) const

src/core/mesh/qgsmeshdataprovider.h

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,14 @@ class CORE_EXPORT QgsMeshDatasetValue
127127
class CORE_EXPORT QgsMeshDatasetGroupMetadata
128128
{
129129
public:
130+
131+
//! Location of where data is specified for datasets in the dataset group
132+
enum DataType
133+
{
134+
DataOnFaces, //!< Data is defined on faces
135+
DataOnVertices //!< Data is defined on vertices
136+
};
137+
130138
//! Constructs an empty metadata object
131139
QgsMeshDatasetGroupMetadata() = default;
132140

@@ -164,14 +172,9 @@ class CORE_EXPORT QgsMeshDatasetGroupMetadata
164172
bool isScalar() const;
165173

166174
/**
167-
* \brief Returns whether dataset group data is defined on vertices
168-
*/
169-
bool isOnVertices() const;
170-
171-
/**
172-
* \brief Returns whether dataset group data is defined on faces
175+
* \brief Returns whether dataset group data is defined on vertices or faces
173176
*/
174-
bool isOnFaces() const;
177+
DataType dataType() const;
175178

176179
private:
177180
QString mName;

src/core/mesh/qgsmeshlayer.cpp

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -189,18 +189,17 @@ QgsMeshDatasetValue QgsMeshLayer::datasetValue( const QgsMeshDatasetIndex &index
189189

190190
if ( mTriangularMesh && dataProvider() && dataProvider()->isValid() && index.isValid() )
191191
{
192-
int face_index = mTriangularMesh->faceIndexForPoint( point ) ;
193-
if ( face_index >= 0 )
192+
int faceIndex = mTriangularMesh->faceIndexForPoint( point ) ;
193+
if ( faceIndex >= 0 )
194194
{
195-
bool isOnFaces = dataProvider()->datasetGroupMetadata( index ).isOnFaces();
196-
if ( isOnFaces )
195+
if ( dataProvider()->datasetGroupMetadata( index ).dataType() == QgsMeshDatasetGroupMetadata::DataOnFaces )
197196
{
198-
int nativeFaceIndex = mTriangularMesh->trianglesToNativeFaces().at( face_index );
197+
int nativeFaceIndex = mTriangularMesh->trianglesToNativeFaces().at( faceIndex );
199198
return dataProvider()->datasetValue( index, nativeFaceIndex );
200199
}
201200
else
202201
{
203-
const QgsMeshFace &face = mTriangularMesh->triangles()[face_index];
202+
const QgsMeshFace &face = mTriangularMesh->triangles()[faceIndex];
204203
const int v1 = face[0], v2 = face[1], v3 = face[2];
205204
const QgsPoint p1 = mTriangularMesh->vertices()[v1], p2 = mTriangularMesh->vertices()[v2], p3 = mTriangularMesh->vertices()[v3];
206205
const QgsMeshDatasetValue val1 = dataProvider()->datasetValue( index, v1 );

src/core/mesh/qgsmeshlayer.h

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -186,8 +186,15 @@ class CORE_EXPORT QgsMeshLayer : public QgsMapLayer
186186
/**
187187
* Interpolates the value on the given point from given dataset.
188188
*
189-
* Returns NaN for NaN values, for values outside range or when
190-
* triangular mesh is not yet initialized on given point
189+
* \note It uses previously cached and indexed triangular mesh
190+
* and so if the layer has not been rendered previously
191+
* (e.g. when used in a script) it returns NaN value
192+
*
193+
* \param index dataset index specifying group and dataset to extract value from
194+
* \param point point to query in map coordinates
195+
* \returns interpolated value at the point. Returns NaN values for values
196+
* outside the mesh layer, nodata values and in case triangular mesh was not
197+
* previously used for rendering
191198
*
192199
* \since QGIS 3.4
193200
*/
@@ -200,14 +207,14 @@ class CORE_EXPORT QgsMeshLayer : public QgsMapLayer
200207
*
201208
* \since QGIS 3.4
202209
*/
203-
void activeScalarDatasetChanged( QgsMeshDatasetIndex index );
210+
void activeScalarDatasetChanged( const QgsMeshDatasetIndex &index );
204211

205212
/**
206213
* Emitted when active vector dataset is changed
207214
*
208215
* \since QGIS 3.4
209216
*/
210-
void activeVectorDatasetChanged( QgsMeshDatasetIndex index );
217+
void activeVectorDatasetChanged( const QgsMeshDatasetIndex &index );
211218

212219
private: // Private methods
213220

src/core/mesh/qgsmeshlayerrenderer.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ void QgsMeshLayerRenderer::copyScalarDatasetValues( QgsMeshLayer *layer )
140140
if ( datasetIndex.isValid() )
141141
{
142142
const QgsMeshDatasetGroupMetadata metadata = layer->dataProvider()->datasetGroupMetadata( datasetIndex );
143-
mScalarDataOnVertices = metadata.isOnVertices();
143+
mScalarDataOnVertices = metadata.dataType() == QgsMeshDatasetGroupMetadata::DataOnVertices;
144144
int count;
145145
if ( mScalarDataOnVertices )
146146
count = mNativeMesh.vertices.count();
@@ -172,7 +172,7 @@ void QgsMeshLayerRenderer::copyVectorDatasetValues( QgsMeshLayer *layer )
172172
}
173173
else
174174
{
175-
mVectorDataOnVertices = metadata.isOnVertices();
175+
mVectorDataOnVertices = metadata.dataType() == QgsMeshDatasetGroupMetadata::DataOnVertices;
176176
int count;
177177
if ( mVectorDataOnVertices )
178178
count = mNativeMesh.vertices.count();

src/core/mesh/qgstriangularmesh.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -180,8 +180,8 @@ const QVector<int> &QgsTriangularMesh::trianglesToNativeFaces() const
180180

181181
int QgsTriangularMesh::faceIndexForPoint( const QgsPointXY &point ) const
182182
{
183-
const QList<QgsFeatureId> face_indexes = mSpatialIndex.intersects( QgsRectangle( point, point ) );
184-
for ( QgsFeatureId fid : face_indexes )
183+
const QList<QgsFeatureId> faceIndexes = mSpatialIndex.intersects( QgsRectangle( point, point ) );
184+
for ( const QgsFeatureId fid : faceIndexes )
185185
{
186186
int faceIndex = static_cast<int>( fid );
187187
const QgsMeshFace &face = mTriangularMesh.faces.at( faceIndex );

0 commit comments

Comments
 (0)