18#ifndef QGSMESHCALCUTILS_H
19#define QGSMESHCALCUTILS_H
50class CORE_EXPORT QgsMeshCalcUtils
64 QgsMeshCalcUtils( QgsMeshLayer *layer,
65 const QStringList &usedGroupNames,
84 Q_DECL_DEPRECATED QgsMeshCalcUtils( QgsMeshLayer *layer,
85 const QStringList &usedGroupNames,
86 const QgsInterval &relativeTime );
106 QgsMeshCalcUtils( QgsMeshLayer *layer,
107 const QStringList &usedGroupNames,
108 const QStringList &usedGroupNamesForAggregate,
109 const QgsInterval &relativeTime,
110 const QgsInterval &startTime,
111 const QgsInterval &endTime );
115 bool isValid()
const;
118 const QgsMeshLayer *layer()
const;
121 std::shared_ptr<const QgsMeshMemoryDatasetGroup> group(
const QString &groupName )
const;
124 void ones( QgsMeshMemoryDatasetGroup &group1 )
const;
127 void nodata( QgsMeshMemoryDatasetGroup &group1 )
const;
130 std::shared_ptr<QgsMeshMemoryDataset> number(
double val,
double time )
const;
133 void copy( QgsMeshMemoryDatasetGroup &group1,
const QString &groupName,
bool forAggregate =
false )
const;
136 std::shared_ptr<QgsMeshMemoryDataset> copy( std::shared_ptr<const QgsMeshMemoryDataset> dataset0 )
const;
139 void transferDatasets( QgsMeshMemoryDatasetGroup &group1, QgsMeshMemoryDatasetGroup &group2 )
const;
142 void expand( QgsMeshMemoryDatasetGroup &group1,
143 const QgsMeshMemoryDatasetGroup &group2 )
const;
146 void number( QgsMeshMemoryDatasetGroup &group1,
double val )
const;
149 void addIf( QgsMeshMemoryDatasetGroup &trueGroup,
150 const QgsMeshMemoryDatasetGroup &falseGroup,
151 const QgsMeshMemoryDatasetGroup &condition )
const;
154 void filter( QgsMeshMemoryDatasetGroup &group1,
const QgsRectangle &extent )
const;
157 void filter( QgsMeshMemoryDatasetGroup &group1,
const QgsGeometry &mask )
const;
160 void logicalNot( QgsMeshMemoryDatasetGroup &group1 )
const;
163 void changeSign( QgsMeshMemoryDatasetGroup &group1 )
const;
166 void abs( QgsMeshMemoryDatasetGroup &group1 )
const;
169 void sumAggregated( QgsMeshMemoryDatasetGroup &group1 )
const;
172 void minimumAggregated( QgsMeshMemoryDatasetGroup &group1 )
const;
175 void maximumAggregated( QgsMeshMemoryDatasetGroup &group1 )
const;
178 void averageAggregated( QgsMeshMemoryDatasetGroup &group1 )
const;
181 void add( QgsMeshMemoryDatasetGroup &group1,
const QgsMeshMemoryDatasetGroup &group2 )
const;
184 void subtract( QgsMeshMemoryDatasetGroup &group1,
const QgsMeshMemoryDatasetGroup &group2 )
const;
187 void multiply( QgsMeshMemoryDatasetGroup &group1,
const QgsMeshMemoryDatasetGroup &group2 )
const;
190 void divide( QgsMeshMemoryDatasetGroup &group1,
const QgsMeshMemoryDatasetGroup &group2 )
const;
193 void power( QgsMeshMemoryDatasetGroup &group1,
const QgsMeshMemoryDatasetGroup &group2 )
const;
196 void equal( QgsMeshMemoryDatasetGroup &group1,
const QgsMeshMemoryDatasetGroup &group2 )
const;
199 void notEqual( QgsMeshMemoryDatasetGroup &group1,
const QgsMeshMemoryDatasetGroup &group2 )
const;
202 void greaterThan( QgsMeshMemoryDatasetGroup &group1,
const QgsMeshMemoryDatasetGroup &group2 )
const;
205 void lesserThan( QgsMeshMemoryDatasetGroup &group1,
const QgsMeshMemoryDatasetGroup &group2 )
const;
208 void lesserEqual( QgsMeshMemoryDatasetGroup &group1,
const QgsMeshMemoryDatasetGroup &group2 )
const;
211 void greaterEqual( QgsMeshMemoryDatasetGroup &group1,
const QgsMeshMemoryDatasetGroup &group2 )
const;
214 void logicalAnd( QgsMeshMemoryDatasetGroup &group1,
const QgsMeshMemoryDatasetGroup &group2 )
const;
217 void logicalOr( QgsMeshMemoryDatasetGroup &group1,
const QgsMeshMemoryDatasetGroup &group2 )
const;
220 void minimum( QgsMeshMemoryDatasetGroup &group1,
const QgsMeshMemoryDatasetGroup &group2 )
const;
223 void maximum( QgsMeshMemoryDatasetGroup &group1,
const QgsMeshMemoryDatasetGroup &group2 )
const;
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;
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;
276 std::shared_ptr<const QgsMeshMemoryDatasetGroup> group(
const QString &groupName,
bool isAggregate )
const;
281 std::shared_ptr<QgsMeshMemoryDataset> createMemoryDataset(
const QgsMeshMemoryDatasetGroup &grp )
const;
286 std::shared_ptr<QgsMeshMemoryDataset> createMemoryDataset(
const QgsMeshDatasetIndex &datasetIndex )
const;
296 std::shared_ptr<QgsMeshMemoryDataset> canditateDataset( QgsMeshMemoryDatasetGroup &group,
297 int datasetIndex )
const;
302 std::shared_ptr<const QgsMeshMemoryDataset> constCandidateDataset(
const QgsMeshMemoryDatasetGroup &group,
303 int datasetIndex )
const;
308 int datasetCount(
const QgsMeshMemoryDatasetGroup &group1,
const QgsMeshMemoryDatasetGroup &group2 )
const;
315 void activate( std::shared_ptr<QgsMeshMemoryDataset> dataset,
316 std::shared_ptr<const QgsMeshMemoryDataset> refDataset =
nullptr )
const;
319 void activate( QgsMeshMemoryDatasetGroup &group )
const;
322 void populateSpatialFilter( QgsMeshMemoryDatasetGroup &filter,
const QgsRectangle &extent )
const;
325 void populateMaskFilter( QgsMeshMemoryDatasetGroup &filter,
const QgsGeometry &mask )
const;
328 void func1( QgsMeshMemoryDatasetGroup &group,
329 std::function<
double(
double )> func )
const;
332 void func2( QgsMeshMemoryDatasetGroup &group1,
333 const QgsMeshMemoryDatasetGroup &group2,
334 std::function<
double(
double,
double )> func )
const;
337 void funcAggr( QgsMeshMemoryDatasetGroup &group1,
338 std::function<
double( QVector<double>& )> func )
const;
340 const QgsTriangularMesh *triangularMesh()
const;
341 const QgsMesh *nativeMesh()
const;
342 void updateMesh()
const;
344 QgsMeshLayer *mMeshLayer;
348 QVector<double> mTimes;
349 QMap < QString, std::shared_ptr<QgsMeshMemoryDatasetGroup> > mDatasetGroupMap;
350 QMap < QString, std::shared_ptr<QgsMeshMemoryDatasetGroup> > mDatasetGroupMapForAggregate;
352 bool mIgnoreTime =
false;