QGIS API Documentation  3.26.3-Buenos Aires (65e4edfdad)
qgsalgorithmexportmesh.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgsalgorithmexportmesh.h
3  ---------------------------
4  begin : October 2020
5  copyright : (C) 2020 by Vincent Cloarec
6  email : vcloarec 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 QGSALGORITHMEXPORTMESH_H
19 #define QGSALGORITHMEXPORTMESH_H
20 
21 #define SIP_NO_FILE
22 
23 #include "qgsprocessingalgorithm.h"
24 #include "qgsmeshdataset.h"
25 #include "qgsmeshdataprovider.h"
26 #include "qgstriangularmesh.h"
28 
30 
31 struct DataGroup
32 {
34  QgsMeshDataBlock datasetValues;
35  QgsMeshDataBlock activeFaces;
36  QgsMesh3dDataBlock dataset3dStakedValue; //will be filled only if data are 3d stacked
37 };
38 
39 class QgsExportMeshOnElement : public QgsProcessingAlgorithm
40 {
41 
42  public:
43  QString group() const override;
44  QString groupId() const override;
45 
46  protected:
47  void initAlgorithm( const QVariantMap &configuration = QVariantMap() ) override;
48  bool prepareAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override;
49  QVariantMap processAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override;
50  QgsMesh mNativeMesh;
51 
52  private:
53 
54  virtual QSet<int> supportedDataType() const = 0;
55  virtual QgsProcessing::SourceType sinkType() const = 0;
56  virtual QgsWkbTypes::Type sinkGeometryType() const = 0;
57  virtual QgsGeometry meshElement( int index ) const = 0;
58  virtual QgsMesh::ElementType meshElementType() const = 0;
59 
60  QList<DataGroup> mDataPerGroup;
61  QgsCoordinateTransform mTransform;
62  int mExportVectorOption = 2;
63  int mElementCount = 0;
64 };
65 
66 class QgsExportMeshVerticesAlgorithm : public QgsExportMeshOnElement
67 {
68  public:
69  QString shortHelpString() const override;
70  QString shortDescription() const override;
71  QString name() const override;
72  QString displayName() const override;
73 
74  protected:
75  QgsProcessingAlgorithm *createInstance() const override;
76 
77  private:
78  QgsWkbTypes::Type sinkGeometryType() const override {return QgsWkbTypes::PointZ;}
79  QSet<int> supportedDataType() const override
80  {
81  return QSet<int>( {QgsMeshDatasetGroupMetadata::DataOnVertices} );
82  }
83  QgsProcessing::SourceType sinkType() const override {return QgsProcessing::TypeVectorPoint;}
84  QgsGeometry meshElement( int index ) const override;
85  QgsMesh::ElementType meshElementType()const override {return QgsMesh::Vertex;}
86 };
87 
88 class QgsExportMeshFacesAlgorithm : public QgsExportMeshOnElement
89 {
90  public:
91  QString shortHelpString() const override;
92  QString shortDescription() const override;
93  QString name() const override;
94  QString displayName() const override;
95 
96  protected:
97  QgsProcessingAlgorithm *createInstance() const override;
98 
99  private:
100  QgsWkbTypes::Type sinkGeometryType() const override {return QgsWkbTypes::PolygonZ;}
101  QSet<int> supportedDataType() const override
102  {
103  return QSet<int>( {QgsMeshDatasetGroupMetadata::DataOnFaces} );
104  }
105  QgsProcessing::SourceType sinkType() const override {return QgsProcessing::TypeVectorPolygon;}
106  QgsGeometry meshElement( int index ) const override;
107  QgsMesh::ElementType meshElementType()const override {return QgsMesh::Face;}
108 };
109 
110 class QgsExportMeshEdgesAlgorithm : public QgsExportMeshOnElement
111 {
112  public:
113  QString shortHelpString() const override;
114  QString shortDescription() const override;
115  QString name() const override;
116  QString displayName() const override;
117 
118  protected:
119  QgsProcessingAlgorithm *createInstance() const override;
120 
121  private:
122  QgsWkbTypes::Type sinkGeometryType() const override {return QgsWkbTypes::LineStringZ;}
123  QSet<int> supportedDataType() const override
124  {
125  return QSet<int>( {QgsMeshDatasetGroupMetadata::DataOnEdges} );
126  }
127  QgsProcessing::SourceType sinkType() const override {return QgsProcessing::TypeVectorLine;}
128  QgsGeometry meshElement( int index ) const override;
129  QgsMesh::ElementType meshElementType()const override {return QgsMesh::Edge;}
130 };
131 
132 
133 class QgsExportMeshOnGridAlgorithm : public QgsProcessingAlgorithm
134 {
135 
136  public:
137  QString name() const override;
138  QString displayName() const override;
139  QString group() const override;
140  QString groupId() const override;
141  QString shortHelpString() const override;
142  QString shortDescription() const override;
143 
144  protected:
145  QgsProcessingAlgorithm *createInstance() const override;
146  void initAlgorithm( const QVariantMap &configuration = QVariantMap() ) override;
147  bool prepareAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override;
148  QVariantMap processAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override;
149 
150  private:
151 
152  QSet<int> supportedDataType();
153 
154  QgsTriangularMesh mTriangularMesh;
155 
156  QList<DataGroup> mDataPerGroup;
157  QgsCoordinateTransform mTransform;
158  int mExportVectorOption = 2;
159  QgsMeshRendererSettings mLayerRendererSettings;
160 };
161 
162 class QgsMeshRasterizeAlgorithm : public QgsProcessingAlgorithm
163 {
164 
165  public:
166  QString name() const override;
167  QString displayName() const override;
168  QString group() const override;
169  QString groupId() const override;
170  QString shortHelpString() const override;
171  QString shortDescription() const override;
172 
173  protected:
174  QgsProcessingAlgorithm *createInstance() const override;
175  void initAlgorithm( const QVariantMap &configuration = QVariantMap() ) override;
176  bool prepareAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override;
177  QVariantMap processAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override;
178 
179  private:
180 
181  QSet<int> supportedDataType();
182 
183  QgsTriangularMesh mTriangularMesh;
184 
185  QList<DataGroup> mDataPerGroup;
186  QgsCoordinateTransform mTransform;
187  QgsMeshRendererSettings mLayerRendererSettings;
188 };
189 
190 class QgsMeshContoursAlgorithm : public QgsProcessingAlgorithm
191 {
192 
193  public:
194  QString name() const override;
195  QString displayName() const override;
196  QString group() const override;
197  QString groupId() const override;
198  QString shortHelpString() const override;
199  QString shortDescription() const override;
200 
201  protected:
202  QgsProcessingAlgorithm *createInstance() const override;
203  void initAlgorithm( const QVariantMap &configuration = QVariantMap() ) override;
204  bool prepareAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override;
205  QVariantMap processAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override;
206 
207  private:
208 
209  QSet<int> supportedDataType()
210  {
211  return QSet<int>(
212  {
216  }
217 
218  QgsTriangularMesh mTriangularMesh;
219  QgsMesh mNativeMesh;
220  QVector<double> mLevels;
221 
222  QList<DataGroup> mDataPerGroup;
223  QgsCoordinateTransform mTransform;
224  QgsMeshRendererSettings mLayerRendererSettings;
225  QString mDateTimeString;
226 
227 };
228 
229 class QgsMeshExportCrossSection : public QgsProcessingAlgorithm
230 {
231 
232  public:
233  QString name() const override;
234  QString displayName() const override;
235  QString group() const override;
236  QString groupId() const override;
237  QString shortHelpString() const override;
238  QString shortDescription() const override;
239 
240  protected:
241  QgsProcessingAlgorithm *createInstance() const override;
242  void initAlgorithm( const QVariantMap &configuration = QVariantMap() ) override;
243  bool prepareAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override;
244  QVariantMap processAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override;
245 
246  private:
247 
248  QSet<int> supportedDataType()
249  {
250  return QSet<int>(
251  {
255  }
256 
257  QgsTriangularMesh mTriangularMesh;
258 
259  QList<DataGroup> mDataPerGroup;
260  QgsCoordinateReferenceSystem mMeshLayerCrs;
261  QgsMeshRendererSettings mLayerRendererSettings;
262 
263 };
264 
265 class QgsMeshExportTimeSeries : public QgsProcessingAlgorithm
266 {
267 
268  public:
269  QString name() const override;
270  QString displayName() const override;
271  QString group() const override;
272  QString groupId() const override;
273  QString shortHelpString() const override;
274  QString shortDescription() const override;
275 
276  protected:
277  QgsProcessingAlgorithm *createInstance() const override;
278  void initAlgorithm( const QVariantMap &configuration = QVariantMap() ) override;
279  bool prepareAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override;
280  QVariantMap processAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override;
281 
282  private:
283 
284  QSet<int> supportedDataType()
285  {
286  return QSet<int>(
287  {
291  }
292 
293  QgsTriangularMesh mTriangularMesh;
294 
295  QgsCoordinateReferenceSystem mMeshLayerCrs;
296  QgsMeshRendererSettings mLayerRendererSettings;
297 
298  QList<int> mGroupIndexes;
299  QList<DataGroup> mDatasets;
300  QList<qint64> mRelativeTimeSteps;
301  QStringList mTimeStepString;
302  QMap<qint64, QMap<int, int>> mRelativeTimeToData;
303  QMap<int, QgsMeshDatasetGroupMetadata> mGroupsMetadata;
304 
305 };
306 
307 
309 
310 #endif // QGSALGORITHMEXPORTMESH_H
QgsProcessingAlgorithm::shortDescription
virtual QString shortDescription() const
Returns an optional translated short description of the algorithm.
Definition: qgsprocessingalgorithm.cpp:60
QgsMeshDatasetGroupMetadata::DataOnVolumes
@ DataOnVolumes
Data is defined on volumes.
Definition: qgsmeshdataset.h:360
QgsMeshRendererSettings
Represents all mesh renderer settings.
Definition: qgsmeshrenderersettings.h:590
QgsProcessingAlgorithm::displayName
virtual QString displayName() const =0
Returns the translated algorithm name, which should be used for any user-visible display of the algor...
QgsProcessingFeedback
Base class for providing feedback from a processing algorithm.
Definition: qgsprocessingfeedback.h:37
QgsMesh::Face
@ Face
Definition: qgsmeshdataprovider.h:69
QgsProcessing::TypeVectorPolygon
@ TypeVectorPolygon
Vector polygon layers.
Definition: qgsprocessing.h:51
QgsProcessingAlgorithm::groupId
virtual QString groupId() const
Returns the unique ID of the group this algorithm belongs to.
Definition: qgsprocessingalgorithm.h:234
QgsProcessingAlgorithm::createInstance
virtual QgsProcessingAlgorithm * createInstance() const =0
Creates a new instance of the algorithm class.
QgsProcessing::TypeVectorLine
@ TypeVectorLine
Vector line layers.
Definition: qgsprocessing.h:50
QgsWkbTypes::LineStringZ
@ LineStringZ
Definition: qgswkbtypes.h:87
QgsWkbTypes::Type
Type
The WKB type describes the number of dimensions a geometry has.
Definition: qgswkbtypes.h:69
QgsMesh
Mesh - vertices, edges and faces.
Definition: qgsmeshdataprovider.h:58
QgsProcessingAlgorithm::prepareAlgorithm
virtual bool prepareAlgorithm(const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback) SIP_THROW(QgsProcessingException)
Prepares the algorithm to run using the specified parameters.
Definition: qgsprocessingalgorithm.cpp:451
QgsProcessing::TypeVectorPoint
@ TypeVectorPoint
Vector point layers.
Definition: qgsprocessing.h:49
QgsMesh3dDataBlock
QgsMesh3dDataBlock is a block of 3d stacked mesh data related N faces defined on base mesh frame.
Definition: qgsmeshdataset.h:246
QgsWkbTypes::PolygonZ
@ PolygonZ
Definition: qgswkbtypes.h:88
qgstriangularmesh.h
QgsMeshDatasetGroupMetadata::DataOnFaces
@ DataOnFaces
Data is defined on faces.
Definition: qgsmeshdataset.h:358
QgsMeshDatasetGroupMetadata::DataOnVertices
@ DataOnVertices
Data is defined on vertices.
Definition: qgsmeshdataset.h:359
QgsProcessingAlgorithm::name
virtual QString name() const =0
Returns the algorithm name, used for identifying the algorithm.
QgsMesh::ElementType
ElementType
Defines type of mesh elements.
Definition: qgsmeshdataprovider.h:65
QgsProcessingAlgorithm::processAlgorithm
virtual QVariantMap processAlgorithm(const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback) SIP_THROW(QgsProcessingException)=0
Runs the algorithm using the specified parameters.
QgsProcessingContext
Contains information about the context in which a processing algorithm is executed.
Definition: qgsprocessingcontext.h:46
qgsprocessingalgorithm.h
QgsMesh::Edge
@ Edge
Definition: qgsmeshdataprovider.h:68
QgsWkbTypes::PointZ
@ PointZ
Definition: qgswkbtypes.h:86
QgsProcessingAlgorithm::shortHelpString
virtual QString shortHelpString() const
Returns a localised short helper string for the algorithm.
Definition: qgsprocessingalgorithm.cpp:65
QgsMeshDatasetGroupMetadata::DataOnEdges
@ DataOnEdges
Data is defined on edges.
Definition: qgsmeshdataset.h:361
QgsCoordinateReferenceSystem
This class represents a coordinate reference system (CRS).
Definition: qgscoordinatereferencesystem.h:211
qgsmeshrenderersettings.h
QgsMeshDatasetGroupMetadata
QgsMeshDatasetGroupMetadata is a collection of dataset group metadata such as whether the data is vec...
Definition: qgsmeshdataset.h:351
QgsProcessingAlgorithm
Abstract base class for processing algorithms.
Definition: qgsprocessingalgorithm.h:52
QgsGeometry
A geometry is the spatial representation of a feature.
Definition: qgsgeometry.h:124
qgsmeshdataset.h
QgsMeshDataBlock
QgsMeshDataBlock is a block of integers/doubles that can be used to retrieve: active flags (e....
Definition: qgsmeshdataset.h:137
QgsProcessingAlgorithm::group
virtual QString group() const
Returns the name of the group this algorithm belongs to.
Definition: qgsprocessingalgorithm.h:225
QgsTriangularMesh
Triangular/Derived Mesh is mesh with vertices in map coordinates.
Definition: qgstriangularmesh.h:51
QgsCoordinateTransform
Class for doing transforms between two map coordinate systems.
Definition: qgscoordinatetransform.h:57
QgsProcessing::SourceType
SourceType
Data source types enum.
Definition: qgsprocessing.h:45
qgsmeshdataprovider.h
QgsProcessingAlgorithm::initAlgorithm
virtual void initAlgorithm(const QVariantMap &configuration=QVariantMap())=0
Initializes the algorithm using the specified configuration.
QgsMesh::Vertex
@ Vertex
Definition: qgsmeshdataprovider.h:67