QGIS API Documentation 3.39.0-Master (3aed037ce22)
Loading...
Searching...
No Matches
qgsmesh3daveraging.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsmesh3daveraging.h
3 ---------------------
4 begin : November 2019
5 copyright : (C) 2019 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 QGSMESH3DAVERAGING_H
19#define QGSMESH3DAVERAGING_H
20
21#include "qgis_core.h"
22#include "qgis_sip.h"
23
24#include <QDomElement>
25
26class QgsMeshLayer;
30class QgsFeedback;
31
42{
43
44#ifdef SIP_RUN
46 QgsMesh3DAveragingMethod *averagingMethod = dynamic_cast<QgsMesh3DAveragingMethod *>( sipCpp );
47
48 sipType = 0;
49
50 if ( averagingMethod )
51 {
52 switch ( averagingMethod->method() )
53 {
55 sipType = sipType_QgsMeshMultiLevelsAveragingMethod;
56 break;
58 sipType = sipType_QgsMeshSigmaAveragingMethod;
59 break;
61 sipType = sipType_QgsMeshRelativeHeightAveragingMethod;
62 break;
64 sipType = sipType_QgsMeshElevationAveragingMethod;
65 break;
66 default:
67 sipType = nullptr;
68 break;
69 }
70 }
72#endif
73
74 public:
76 enum Method
77 {
79 MultiLevelsAveragingMethod = 0,
85 ElevationAveragingMethod
86 };
87
89 QgsMesh3DAveragingMethod( Method method );
90
91 virtual ~QgsMesh3DAveragingMethod() = default;
92
94 QgsMeshDataBlock calculate( const QgsMesh3DDataBlock &block3d, QgsFeedback *feedback = nullptr ) const;
95
99 virtual QDomElement writeXml( QDomDocument &doc ) const = 0;
100
102 static QgsMesh3DAveragingMethod *createFromXml( const QDomElement &elem ) SIP_FACTORY;
103
105 virtual void readXml( const QDomElement &elem ) = 0;
106
108 static bool equals( const QgsMesh3DAveragingMethod *a, const QgsMesh3DAveragingMethod *b );
109
111 virtual bool equals( const QgsMesh3DAveragingMethod *other ) const = 0;
112
115
117 Method method() const;
118
119 private:
121 virtual bool hasValidInputs() const = 0;
122
126 void averageVolumeValuesForFace(
127 int faceIndex,
128 int volumesBelowFaceCount,
129 int startVolumeIndex,
130 double methodLevelTop,
131 double methodLevelBottom,
132 bool isVector,
133 const QVector<double> &verticalLevelsForFace,
134 const QVector<double> &volumeValues,
135 QVector<double> &valuesFaces
136 ) const;
137
141 virtual void volumeRangeForFace(
142 double &startVerticalLevel,
143 double &endVerticalLevel,
144 int &singleVerticalLevel,
145 const QVector<double> &verticalLevels ) const = 0;
146
147 Method mMethod;
148};
149
161{
162 public:
165
173 QgsMeshMultiLevelsAveragingMethod( int startLevel, int endLevel, bool countedFromTop );
174
181 QgsMeshMultiLevelsAveragingMethod( int verticalLevel, bool countedFromTop );
182
184 QDomElement writeXml( QDomDocument &doc ) const override;
185 void readXml( const QDomElement &elem ) override;
186 bool equals( const QgsMesh3DAveragingMethod *other ) const override;
187 QgsMesh3DAveragingMethod *clone() const override SIP_FACTORY;
188
197 int startVerticalLevel() const;
198
207 int endVerticalLevel() const;
208
212 bool countedFromTop() const;
213
217 bool isSingleLevel() const;
218
219 private:
220 bool hasValidInputs() const override;
221 void volumeRangeForFace( double &startVerticalLevel,
222 double &endVerticalLevel,
223 int &singleVerticalIndex,
224 const QVector<double> &verticalLevels ) const override;
225 void setLevels( int startVerticalLevel, int endVerticalLevel );
226 int mStartVerticalLevel = 1;
227 int mEndVerticalLevel = 1;
228 bool mCountedFromTop = true;
229};
230
242{
243 public:
246
252 QgsMeshSigmaAveragingMethod( double startFraction, double endFraction );
253
255 QDomElement writeXml( QDomDocument &doc ) const override;
256 void readXml( const QDomElement &elem ) override;
257 bool equals( const QgsMesh3DAveragingMethod *other ) const override;
258 QgsMesh3DAveragingMethod *clone() const override SIP_FACTORY;
259
266 double startFraction() const;
267
274 double endFraction() const;
275
276 private:
277 bool hasValidInputs() const override;
278 void volumeRangeForFace( double &startVerticalLevel,
279 double &endVerticalLevel,
280 int &singleVerticalIndex,
281 const QVector<double> &verticalLevels ) const override;
282
283 double mStartFraction = 0;
284 double mEndFraction = 1;
285};
286
304{
305 public:
306
309
317 QgsMeshRelativeHeightAveragingMethod( double startHeight, double endHeight, bool countedFromTop );
318
320 QDomElement writeXml( QDomDocument &doc ) const override;
321 void readXml( const QDomElement &elem ) override;
322 bool equals( const QgsMesh3DAveragingMethod *other ) const override;
323 QgsMesh3DAveragingMethod *clone() const override SIP_FACTORY;
324
330 double startHeight() const;
331
337 double endHeight() const;
338
342 bool countedFromTop() const;
343
344 private:
345 bool hasValidInputs() const override;
346 void volumeRangeForFace( double &startVerticalLevel,
347 double &endVerticalLevel,
348 int &singleVerticalIndex,
349 const QVector<double> &verticalLevels ) const override;
350 double mStartHeight = 0;
351 double mEndHeight = 0;
352 bool mCountedFromTop = true;
353};
354
367{
368 public:
369
371
377 QgsMeshElevationAveragingMethod( double startElevation, double endElevation );
379
380 QDomElement writeXml( QDomDocument &doc ) const override;
381 void readXml( const QDomElement &elem ) override;
382 bool equals( const QgsMesh3DAveragingMethod *other ) const override;
383 QgsMesh3DAveragingMethod *clone() const override SIP_FACTORY;
384
388 double startElevation() const;
389
393 double endElevation() const;
394
395 private:
396 bool hasValidInputs() const override;
397 void volumeRangeForFace( double &startVerticalLevel,
398 double &endVerticalLevel,
399 int &singleVerticalIndex,
400 const QVector<double> &verticalLevels ) const override;
401 double mStartElevation = 0;
402 double mEndElevation = 0;
403};
404
405#endif // QGSMESH3DAVERAGING_H
Base class for feedback objects to be used for cancellation of something running in a worker thread.
Definition qgsfeedback.h:44
Abstract class to interpolate 3d stacked mesh data to 2d data.
virtual void readXml(const QDomElement &elem)=0
Reads configuration from the given DOM element.
virtual bool equals(const QgsMesh3DAveragingMethod *other) const =0
Returns whether method equals to other.
Method
Type of averaging method.
@ RelativeHeightAveragingMethod
Method to average values defined by range of relative length units to the surface or bed level.
@ MultiLevelsAveragingMethod
Method to average values from selected vertical layers.
@ ElevationAveragingMethod
Method to average values defined by range of absolute length units to the model's datum.
@ SigmaAveragingMethod
Method to average values between 0 (bed level) and 1 (surface)
virtual ~QgsMesh3DAveragingMethod()=default
virtual QDomElement writeXml(QDomDocument &doc) const =0
Writes configuration to a new DOM element.
virtual QgsMesh3DAveragingMethod * clone() const =0
Clone the instance.
QgsMesh3DDataBlock is a block of 3d stacked mesh data related N faces defined on base mesh frame.
QgsMeshDataBlock is a block of integers/doubles that can be used to retrieve: active flags (e....
QgsMeshDatasetIndex is index that identifies the dataset group (e.g.
Elevation averaging method averages the values based on range defined absolute value to the model's d...
Represents a mesh layer supporting display of data on structured or unstructured meshes.
Multi level averaging method specifies limits of vertical layers from the top layer down or reversed.
Relative height averaging method averages the values based on range defined relative to bed elevation...
Sigma averages over the values between 0 (bed level) and 1 (surface).
~QgsMeshSigmaAveragingMethod() override
#define SIP_CONVERT_TO_SUBCLASS_CODE(code)
Definition qgis_sip.h:191
#define SIP_ABSTRACT
Definition qgis_sip.h:213
#define SIP_FACTORY
Definition qgis_sip.h:76
#define SIP_END
Definition qgis_sip.h:208