QGIS API Documentation 3.99.0-Master (c22de0620c0)
Loading...
Searching...
No Matches
qgsmeshcalcutils.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsmeshcalcutils.h
3 ------------------
4 begin : December 18th, 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#ifndef QGSMESHCALCUTILS_H
19#define QGSMESHCALCUTILS_H
20
21
23
24#include <algorithm>
25#include <functional>
26#include <math.h>
27#include <numeric>
28
29#include "qgis_core.h"
30#include "qgsmeshdataprovider.h"
31#include "qgsmeshlayer.h"
32#include "qgsrectangle.h"
33
34#include <QMap>
35#include <QStringList>
36#include <QVector>
37
38#define SIP_NO_FILE
39
50class CORE_EXPORT QgsMeshCalcUtils
51{
52 public:
53
64 QgsMeshCalcUtils( QgsMeshLayer *layer,
65 const QStringList &usedGroupNames,
66 double startTime,
67 double endTime );
68
84 Q_DECL_DEPRECATED QgsMeshCalcUtils( QgsMeshLayer *layer,
85 const QStringList &usedGroupNames,
86 const QgsInterval &relativeTime );
87
106 QgsMeshCalcUtils( QgsMeshLayer *layer,
107 const QStringList &usedGroupNames,
108 const QStringList &usedGroupNamesForAggregate,
109 const QgsInterval &relativeTime,
110 const QgsInterval &startTime,
111 const QgsInterval &endTime );
112
113
115 bool isValid() const;
116
118 const QgsMeshLayer *layer() const;
119
121 std::shared_ptr<const QgsMeshMemoryDatasetGroup> group( const QString &groupName ) const;
122
124 void ones( QgsMeshMemoryDatasetGroup &group1 ) const;
125
127 void nodata( QgsMeshMemoryDatasetGroup &group1 ) const;
128
130 std::shared_ptr<QgsMeshMemoryDataset> number( double val, double time ) const;
131
133 void copy( QgsMeshMemoryDatasetGroup &group1, const QString &groupName, bool forAggregate = false ) const;
134
136 std::shared_ptr<QgsMeshMemoryDataset> copy( std::shared_ptr<const QgsMeshMemoryDataset> dataset0 ) const;
137
139 void transferDatasets( QgsMeshMemoryDatasetGroup &group1, QgsMeshMemoryDatasetGroup &group2 ) const;
140
142 void expand( QgsMeshMemoryDatasetGroup &group1,
143 const QgsMeshMemoryDatasetGroup &group2 ) const;
144
146 void number( QgsMeshMemoryDatasetGroup &group1, double val ) const;
147
149 void addIf( QgsMeshMemoryDatasetGroup &trueGroup,
150 const QgsMeshMemoryDatasetGroup &falseGroup,
151 const QgsMeshMemoryDatasetGroup &condition ) const;
152
154 void filter( QgsMeshMemoryDatasetGroup &group1, const QgsRectangle &extent ) const;
155
157 void filter( QgsMeshMemoryDatasetGroup &group1, const QgsGeometry &mask ) const;
158
160 void logicalNot( QgsMeshMemoryDatasetGroup &group1 ) const;
161
163 void changeSign( QgsMeshMemoryDatasetGroup &group1 ) const;
164
166 void abs( QgsMeshMemoryDatasetGroup &group1 ) const;
167
169 void sumAggregated( QgsMeshMemoryDatasetGroup &group1 ) const;
170
172 void minimumAggregated( QgsMeshMemoryDatasetGroup &group1 ) const;
173
175 void maximumAggregated( QgsMeshMemoryDatasetGroup &group1 ) const;
176
178 void averageAggregated( QgsMeshMemoryDatasetGroup &group1 ) const;
179
181 void add( QgsMeshMemoryDatasetGroup &group1, const QgsMeshMemoryDatasetGroup &group2 ) const;
182
184 void subtract( QgsMeshMemoryDatasetGroup &group1, const QgsMeshMemoryDatasetGroup &group2 ) const;
185
187 void multiply( QgsMeshMemoryDatasetGroup &group1, const QgsMeshMemoryDatasetGroup &group2 ) const;
188
190 void divide( QgsMeshMemoryDatasetGroup &group1, const QgsMeshMemoryDatasetGroup &group2 ) const;
191
193 void power( QgsMeshMemoryDatasetGroup &group1, const QgsMeshMemoryDatasetGroup &group2 ) const;
194
196 void equal( QgsMeshMemoryDatasetGroup &group1, const QgsMeshMemoryDatasetGroup &group2 ) const;
197
199 void notEqual( QgsMeshMemoryDatasetGroup &group1, const QgsMeshMemoryDatasetGroup &group2 ) const;
200
202 void greaterThan( QgsMeshMemoryDatasetGroup &group1, const QgsMeshMemoryDatasetGroup &group2 ) const;
203
205 void lesserThan( QgsMeshMemoryDatasetGroup &group1, const QgsMeshMemoryDatasetGroup &group2 ) const;
206
208 void lesserEqual( QgsMeshMemoryDatasetGroup &group1, const QgsMeshMemoryDatasetGroup &group2 ) const;
209
211 void greaterEqual( QgsMeshMemoryDatasetGroup &group1, const QgsMeshMemoryDatasetGroup &group2 ) const;
212
214 void logicalAnd( QgsMeshMemoryDatasetGroup &group1, const QgsMeshMemoryDatasetGroup &group2 ) const;
215
217 void logicalOr( QgsMeshMemoryDatasetGroup &group1, const QgsMeshMemoryDatasetGroup &group2 ) const;
218
220 void minimum( QgsMeshMemoryDatasetGroup &group1, const QgsMeshMemoryDatasetGroup &group2 ) const;
221
223 void maximum( QgsMeshMemoryDatasetGroup &group1, const QgsMeshMemoryDatasetGroup &group2 ) const;
224
226 static QgsMeshDatasetGroupMetadata::DataType determineResultDataType( QgsMeshLayer *layer, const QStringList &usedGroupNames );
227
229 QgsMeshDatasetGroupMetadata::DataType outputType() const;
230
231 private:
232 double ffilter( double val1, double filter ) const;
233 double fadd( double val1, double val2 ) const;
234 double fsubtract( double val1, double val2 ) const;
235 double fmultiply( double val1, double val2 ) const;
236 double fdivide( double val1, double val2 ) const;
237 double fpower( double val1, double val2 ) const;
238 double fequal( double val1, double val2 ) const;
239 double fnotEqual( double val1, double val2 ) const;
240 double fgreaterThan( double val1, double val2 ) const;
241 double flesserThan( double val1, double val2 ) const;
242 double flesserEqual( double val1, double val2 ) const;
243 double fgreaterEqual( double val1, double val2 ) const;
244 double flogicalAnd( double val1, double val2 ) const;
245 double flogicalOr( double val1, double val2 ) const;
246 double flogicalNot( double val1 ) const;
247 double fchangeSign( double val1 ) const;
248 double fmin( double val1, double val2 ) const;
249 double fmax( double val1, double val2 ) const;
250 double fabs( double val1 ) const;
251 double fsumAggregated( QVector<double> &vals ) const;
252 double fminimumAggregated( QVector<double> &vals ) const;
253 double fmaximumAggregated( QVector<double> &vals ) const;
254 double faverageAggregated( QVector<double> &vals ) const;
255
263 std::shared_ptr<QgsMeshMemoryDatasetGroup> createMemoryDatasetGroup( const QString &datasetGroupName,
264 const QgsInterval &relativeTime = QgsInterval(),
265 const QgsInterval &startTime = QgsInterval(),
266 const QgsInterval &endTime = QgsInterval() ) const;
267
276 std::shared_ptr<const QgsMeshMemoryDatasetGroup> group( const QString &groupName, bool isAggregate ) const;
277
281 std::shared_ptr<QgsMeshMemoryDataset> createMemoryDataset( const QgsMeshMemoryDatasetGroup &grp ) const;
282
286 std::shared_ptr<QgsMeshMemoryDataset> createMemoryDataset( const QgsMeshDatasetIndex &datasetIndex ) const;
287
291 std::shared_ptr<QgsMeshMemoryDataset> createMemoryDataset( const QgsMeshDatasetGroupMetadata::DataType type ) const;
292
296 std::shared_ptr<QgsMeshMemoryDataset> canditateDataset( QgsMeshMemoryDatasetGroup &group,
297 int datasetIndex ) const;
298
302 std::shared_ptr<const QgsMeshMemoryDataset> constCandidateDataset( const QgsMeshMemoryDatasetGroup &group,
303 int datasetIndex ) const;
304
308 int datasetCount( const QgsMeshMemoryDatasetGroup &group1, const QgsMeshMemoryDatasetGroup &group2 ) const;
309
315 void activate( std::shared_ptr<QgsMeshMemoryDataset> dataset,
316 std::shared_ptr<const QgsMeshMemoryDataset> refDataset = nullptr ) const;
317
319 void activate( QgsMeshMemoryDatasetGroup &group ) const;
320
322 void populateSpatialFilter( QgsMeshMemoryDatasetGroup &filter, const QgsRectangle &extent ) const; // create a filter from extent
323
325 void populateMaskFilter( QgsMeshMemoryDatasetGroup &filter, const QgsGeometry &mask ) const; // create a filter from mask
326
328 void func1( QgsMeshMemoryDatasetGroup &group,
329 std::function<double( double )> func ) const;
330
332 void func2( QgsMeshMemoryDatasetGroup &group1,
333 const QgsMeshMemoryDatasetGroup &group2,
334 std::function<double( double, double )> func ) const;
335
337 void funcAggr( QgsMeshMemoryDatasetGroup &group1,
338 std::function<double( QVector<double>& )> func ) const;
339
340 const QgsTriangularMesh *triangularMesh() const;
341 const QgsMesh *nativeMesh() const;
342 void updateMesh() const;
343
344 QgsMeshLayer *mMeshLayer;
345 bool mIsValid;
348 QVector<double> mTimes;
349 QMap < QString, std::shared_ptr<QgsMeshMemoryDatasetGroup> > mDatasetGroupMap;
350 QMap < QString, std::shared_ptr<QgsMeshMemoryDatasetGroup> > mDatasetGroupMapForAggregate;
351
352 bool mIgnoreTime = false; // with virtual datasetgroup, we only consider the current time step, except for aggregate function where we don't care about time value
353};
354
356
357#endif // QGSMESHCALCUTILS_H
DataType
Location of where data is specified for datasets in the dataset group.
@ DataOnFaces
Data is defined on faces.