QGIS API Documentation 4.0.0-Norrköping (1ddcee3d0e4)
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:
63 QgsMeshCalcUtils( QgsMeshLayer *layer, const QStringList &usedGroupNames, double startTime, double endTime );
64
80 Q_DECL_DEPRECATED QgsMeshCalcUtils( QgsMeshLayer *layer, const QStringList &usedGroupNames, const QgsInterval &relativeTime );
81
100 QgsMeshCalcUtils(
101 QgsMeshLayer *layer, const QStringList &usedGroupNames, const QStringList &usedGroupNamesForAggregate, const QgsInterval &relativeTime, const QgsInterval &startTime, const QgsInterval &endTime
102 );
103
104
106 bool isValid() const;
107
109 const QgsMeshLayer *layer() const;
110
112 std::shared_ptr<const QgsMeshMemoryDatasetGroup> group( const QString &groupName ) const;
113
115 void ones( QgsMeshMemoryDatasetGroup &group1 ) const;
116
118 void nodata( QgsMeshMemoryDatasetGroup &group1 ) const;
119
121 std::shared_ptr<QgsMeshMemoryDataset> number( double val, double time ) const;
122
124 void copy( QgsMeshMemoryDatasetGroup &group1, const QString &groupName, bool forAggregate = false ) const;
125
127 std::shared_ptr<QgsMeshMemoryDataset> copy( std::shared_ptr<const QgsMeshMemoryDataset> dataset0 ) const;
128
130 void transferDatasets( QgsMeshMemoryDatasetGroup &group1, QgsMeshMemoryDatasetGroup &group2 ) const;
131
133 void expand( QgsMeshMemoryDatasetGroup &group1, const QgsMeshMemoryDatasetGroup &group2 ) const;
134
136 void number( QgsMeshMemoryDatasetGroup &group1, double val ) const;
137
139 void addIf( QgsMeshMemoryDatasetGroup &trueGroup, const QgsMeshMemoryDatasetGroup &falseGroup, const QgsMeshMemoryDatasetGroup &condition ) const;
140
142 void filter( QgsMeshMemoryDatasetGroup &group1, const QgsRectangle &extent ) const;
143
145 void filter( QgsMeshMemoryDatasetGroup &group1, const QgsGeometry &mask ) const;
146
148 void logicalNot( QgsMeshMemoryDatasetGroup &group1 ) const;
149
151 void changeSign( QgsMeshMemoryDatasetGroup &group1 ) const;
152
154 void abs( QgsMeshMemoryDatasetGroup &group1 ) const;
155
157 void sumAggregated( QgsMeshMemoryDatasetGroup &group1 ) const;
158
160 void minimumAggregated( QgsMeshMemoryDatasetGroup &group1 ) const;
161
163 void maximumAggregated( QgsMeshMemoryDatasetGroup &group1 ) const;
164
166 void averageAggregated( QgsMeshMemoryDatasetGroup &group1 ) const;
167
169 void add( QgsMeshMemoryDatasetGroup &group1, const QgsMeshMemoryDatasetGroup &group2 ) const;
170
172 void subtract( QgsMeshMemoryDatasetGroup &group1, const QgsMeshMemoryDatasetGroup &group2 ) const;
173
175 void multiply( QgsMeshMemoryDatasetGroup &group1, const QgsMeshMemoryDatasetGroup &group2 ) const;
176
178 void divide( QgsMeshMemoryDatasetGroup &group1, const QgsMeshMemoryDatasetGroup &group2 ) const;
179
181 void power( QgsMeshMemoryDatasetGroup &group1, const QgsMeshMemoryDatasetGroup &group2 ) const;
182
184 void equal( QgsMeshMemoryDatasetGroup &group1, const QgsMeshMemoryDatasetGroup &group2 ) const;
185
187 void notEqual( QgsMeshMemoryDatasetGroup &group1, const QgsMeshMemoryDatasetGroup &group2 ) const;
188
190 void greaterThan( QgsMeshMemoryDatasetGroup &group1, const QgsMeshMemoryDatasetGroup &group2 ) const;
191
193 void lesserThan( QgsMeshMemoryDatasetGroup &group1, const QgsMeshMemoryDatasetGroup &group2 ) const;
194
196 void lesserEqual( QgsMeshMemoryDatasetGroup &group1, const QgsMeshMemoryDatasetGroup &group2 ) const;
197
199 void greaterEqual( QgsMeshMemoryDatasetGroup &group1, const QgsMeshMemoryDatasetGroup &group2 ) const;
200
202 void logicalAnd( QgsMeshMemoryDatasetGroup &group1, const QgsMeshMemoryDatasetGroup &group2 ) const;
203
205 void logicalOr( QgsMeshMemoryDatasetGroup &group1, const QgsMeshMemoryDatasetGroup &group2 ) const;
206
208 void minimum( QgsMeshMemoryDatasetGroup &group1, const QgsMeshMemoryDatasetGroup &group2 ) const;
209
211 void maximum( QgsMeshMemoryDatasetGroup &group1, const QgsMeshMemoryDatasetGroup &group2 ) const;
212
214 static QgsMeshDatasetGroupMetadata::DataType determineResultDataType( QgsMeshLayer *layer, const QStringList &usedGroupNames );
215
217 QgsMeshDatasetGroupMetadata::DataType outputType() const;
218
219 private:
220 double ffilter( double val1, double filter ) const;
221 double fadd( double val1, double val2 ) const;
222 double fsubtract( double val1, double val2 ) const;
223 double fmultiply( double val1, double val2 ) const;
224 double fdivide( double val1, double val2 ) const;
225 double fpower( double val1, double val2 ) const;
226 double fequal( double val1, double val2 ) const;
227 double fnotEqual( double val1, double val2 ) const;
228 double fgreaterThan( double val1, double val2 ) const;
229 double flesserThan( double val1, double val2 ) const;
230 double flesserEqual( double val1, double val2 ) const;
231 double fgreaterEqual( double val1, double val2 ) const;
232 double flogicalAnd( double val1, double val2 ) const;
233 double flogicalOr( double val1, double val2 ) const;
234 double flogicalNot( double val1 ) const;
235 double fchangeSign( double val1 ) const;
236 double fmin( double val1, double val2 ) const;
237 double fmax( double val1, double val2 ) const;
238 double fabs( double val1 ) const;
239 double fsumAggregated( QVector<double> &vals ) const;
240 double fminimumAggregated( QVector<double> &vals ) const;
241 double fmaximumAggregated( QVector<double> &vals ) const;
242 double faverageAggregated( QVector<double> &vals ) const;
243
251 std::shared_ptr<QgsMeshMemoryDatasetGroup> createMemoryDatasetGroup(
252 const QString &datasetGroupName, const QgsInterval &relativeTime = QgsInterval(), const QgsInterval &startTime = QgsInterval(), const QgsInterval &endTime = QgsInterval()
253 ) const;
254
263 std::shared_ptr<const QgsMeshMemoryDatasetGroup> group( const QString &groupName, bool isAggregate ) const;
264
268 std::shared_ptr<QgsMeshMemoryDataset> createMemoryDataset( const QgsMeshMemoryDatasetGroup &grp ) const;
269
273 std::shared_ptr<QgsMeshMemoryDataset> createMemoryDataset( const QgsMeshDatasetIndex &datasetIndex ) const;
274
278 std::shared_ptr<QgsMeshMemoryDataset> createMemoryDataset( const QgsMeshDatasetGroupMetadata::DataType type ) const;
279
283 std::shared_ptr<QgsMeshMemoryDataset> canditateDataset( QgsMeshMemoryDatasetGroup &group, int datasetIndex ) const;
284
288 std::shared_ptr<const QgsMeshMemoryDataset> constCandidateDataset( const QgsMeshMemoryDatasetGroup &group, int datasetIndex ) const;
289
293 int datasetCount( const QgsMeshMemoryDatasetGroup &group1, const QgsMeshMemoryDatasetGroup &group2 ) const;
294
300 void activate( std::shared_ptr<QgsMeshMemoryDataset> dataset, std::shared_ptr<const QgsMeshMemoryDataset> refDataset = nullptr ) const;
301
303 void activate( QgsMeshMemoryDatasetGroup &group ) const;
304
306 void populateSpatialFilter( QgsMeshMemoryDatasetGroup &filter, const QgsRectangle &extent ) const; // create a filter from extent
307
309 void populateMaskFilter( QgsMeshMemoryDatasetGroup &filter, const QgsGeometry &mask ) const; // create a filter from mask
310
312 void func1( QgsMeshMemoryDatasetGroup &group, std::function<double( double )> func ) const;
313
315 void func2( QgsMeshMemoryDatasetGroup &group1, const QgsMeshMemoryDatasetGroup &group2, std::function<double( double, double )> func ) const;
316
318 void funcAggr( QgsMeshMemoryDatasetGroup &group1, std::function<double( QVector<double> & )> func ) const;
319
320 const QgsTriangularMesh *triangularMesh() const;
321 const QgsMesh *nativeMesh() const;
322 void updateMesh() const;
323
324 QgsMeshLayer *mMeshLayer;
325 bool mIsValid;
328 QVector<double> mTimes;
329 QMap< QString, std::shared_ptr<QgsMeshMemoryDatasetGroup> > mDatasetGroupMap;
330 QMap< QString, std::shared_ptr<QgsMeshMemoryDatasetGroup> > mDatasetGroupMapForAggregate;
331
332 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
333};
334
336
337#endif // QGSMESHCALCUTILS_H
DataType
Location of where data is specified for datasets in the dataset group.
@ DataOnFaces
Data is defined on faces.