QGIS API Documentation  3.20.0-Odense (decaadbb31)
qgsmeshlayerutils.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgsmeshlayerutils.h
3  --------------------------
4  begin : August 2018
5  copyright : (C) 2018 by Martin Dobias
6  email : wonder dot sk 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 #ifndef QGSMESHLAYERUTILS_H
19 #define QGSMESHLAYERUTILS_H
20 
21 #define SIP_NO_FILE
22 
23 #include "qgis_core.h"
24 #include "qgsrectangle.h"
25 #include "qgsmaptopixel.h"
26 #include "qgsmeshdataprovider.h"
28 
29 #include <QVector>
30 #include <QSize>
31 
33 
35 class QgsTriangularMesh;
36 class QgsMeshDataBlock;
39 class QgsMeshLayer;
40 
48 class CORE_EXPORT QgsMeshLayerUtils
49 {
50  public:
51 
60  static int datasetValuesCount( const QgsMesh *mesh, QgsMeshDatasetGroupMetadata::DataType dataType );
61 
69 
79  static QgsMeshDataBlock datasetValues(
80  const QgsMeshLayer *meshLayer,
81  QgsMeshDatasetIndex index,
82  int valueIndex,
83  int count );
84 
98  static QVector<QgsVector> griddedVectorValues(
99  const QgsMeshLayer *meshLayer,
100  const QgsMeshDatasetIndex index,
101  double xSpacing,
102  double ySpacing,
103  const QSize &size,
104  const QgsPointXY &minCorner );
105 
111  static QVector<double> calculateMagnitudes( const QgsMeshDataBlock &block );
112 
123  static void boundingBoxToScreenRectangle(
124  const QgsMapToPixel &mtp,
125  const QSize &outputSize,
126  const QgsRectangle &bbox,
127  int &leftLim,
128  int &rightLim,
129  int &bottomLim,
130  int &topLim );
131 
137  static QgsRectangle boundingBoxToScreenRectangle(
138  const QgsMapToPixel &mtp,
139  const QgsRectangle &bbox
140  );
141 
148  static double interpolateFromVerticesData(
149  double fraction,
150  double val1, double val2
151  );
152 
159  static QgsMeshDatasetValue interpolateFromVerticesData( double fraction,
160  const QgsMeshDatasetValue &val1, const QgsMeshDatasetValue &val2
161  );
162 
174  static double interpolateFromVerticesData(
175  const QgsPointXY &p1, const QgsPointXY &p2, const QgsPointXY &p3,
176  double val1, double val2, double val3, const QgsPointXY &pt
177  );
178 
192  static QgsVector interpolateVectorFromVerticesData(
193  const QgsPointXY &p1, const QgsPointXY &p2, const QgsPointXY &p3,
194  QgsVector vect1, QgsVector vect2, QgsVector vect3, const QgsPointXY &pt
195  );
196 
206  static double interpolateFromFacesData(
207  const QgsPointXY &p1, const QgsPointXY &p2, const QgsPointXY &p3,
208  double val, const QgsPointXY &pt );
209 
221  static QgsVector interpolateVectorFromFacesData(
222  const QgsPointXY &p1, const QgsPointXY &p2, const QgsPointXY &p3,
223  QgsVector vect, const QgsPointXY &pt );
224 
230  static QVector<double> interpolateFromFacesData(
231  QVector<double> valuesOnFaces,
232  const QgsMesh *nativeMesh,
233  const QgsTriangularMesh *triangularMesh,
234  QgsMeshDataBlock *active,
236  );
237 
243  static QVector<double> interpolateFromFacesData(
244  const QVector<double> &valuesOnFaces,
245  const QgsMesh &nativeMesh,
246  QgsMeshDataBlock *active,
248  );
249 
255  static QVector<double> interpolateFromFacesData(
256  const QVector<double> &valuesOnFaces,
257  const QgsMesh &nativeMesh,
258  const QgsMeshDataBlock &active,
260  );
261 
267  static QVector<double> resampleFromVerticesToFaces(
268  const QVector<double> valuesOnVertices,
269  const QgsMesh *nativeMesh,
270  const QgsTriangularMesh *triangularMesh,
271  const QgsMeshDataBlock *active,
273  );
274 
285  static QVector<double> calculateMagnitudeOnVertices(
286  const QgsMeshLayer *meshLayer,
287  const QgsMeshDatasetIndex index,
288  QgsMeshDataBlock *activeFaceFlagValues,
290 
303  static QVector<double> calculateMagnitudeOnVertices(
304  const QgsMesh &nativeMesh,
305  const QgsMeshDatasetGroupMetadata &groupMetadata,
306  const QgsMeshDataBlock &datasetValues,
307  const QgsMeshDataBlock &activeFaceFlagValues,
309 
310 
311 
319  static QgsRectangle triangleBoundingBox( const QgsPointXY &p1, const QgsPointXY &p2, const QgsPointXY &p3 );
320 
329  static QString formatTime( double hours, const QDateTime &referenceTime, const QgsMeshTimeSettings &settings );
330 
339  static QVector<QVector3D> calculateNormals(
340  const QgsTriangularMesh &triangularMesh,
341  const QVector<double> &verticalMagnitude,
342  bool isRelative );
343 };
344 
346 
347 #endif // QGSMESHLAYERUTILS_H
Perform transforms between map coordinates and device coordinates.
Definition: qgsmaptopixel.h:39
Abstract class to interpolate 3d stacked mesh data to 2d data.
QgsMeshDataBlock is a block of integers/doubles that can be used to retrieve: active flags (e....
QgsMeshDatasetGroupMetadata is a collection of dataset group metadata such as whether the data is vec...
DataType
Location of where data is specified for datasets in the dataset group.
QgsMeshDatasetIndex is index that identifies the dataset group (e.g.
QgsMeshDatasetValue represents single dataset value.
Represents a mesh layer supporting display of data on structured or unstructured meshes.
Definition: qgsmeshlayer.h:95
DataResamplingMethod
Resampling of value from dataset.
@ NeighbourAverage
Does a simple average of values defined for all surrounding faces/vertices.
Represents a mesh time settings for mesh datasets.
A class to represent a 2D point.
Definition: qgspointxy.h:59
A rectangle specified with double values.
Definition: qgsrectangle.h:42
Triangular/Derived Mesh is mesh with vertices in map coordinates.
A class to represent a vector.
Definition: qgsvector.h:30
Mesh - vertices, edges and faces.