QGIS API Documentation  3.23.0-Master (dd0cd13a00)
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
This class represents a coordinate reference system (CRS).
Class for doing transforms between two map coordinate systems.
A geometry is the spatial representation of a feature.
Definition: qgsgeometry.h:125
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....
QgsMeshDatasetGroupMetadata is a collection of dataset group metadata such as whether the data is vec...
@ DataOnEdges
Data is defined on edges.
@ DataOnFaces
Data is defined on faces.
@ DataOnVertices
Data is defined on vertices.
@ DataOnVolumes
Data is defined on volumes.
Represents all mesh renderer settings.
Abstract base class for processing algorithms.
virtual QString group() const
Returns the name of the group this algorithm belongs to.
virtual QString groupId() const
Returns the unique ID of the group this algorithm belongs to.
virtual QString shortHelpString() const
Returns a localised short helper string for the algorithm.
virtual QString shortDescription() const
Returns an optional translated short description of the algorithm.
virtual QVariantMap processAlgorithm(const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback) SIP_THROW(QgsProcessingException)=0
Runs the algorithm using the specified parameters.
virtual QString displayName() const =0
Returns the translated algorithm name, which should be used for any user-visible display of the algor...
virtual bool prepareAlgorithm(const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback) SIP_THROW(QgsProcessingException)
Prepares the algorithm to run using the specified parameters.
virtual QgsProcessingAlgorithm * createInstance() const =0
Creates a new instance of the algorithm class.
virtual void initAlgorithm(const QVariantMap &configuration=QVariantMap())=0
Initializes the algorithm using the specified configuration.
virtual QString name() const =0
Returns the algorithm name, used for identifying the algorithm.
Contains information about the context in which a processing algorithm is executed.
Base class for providing feedback from a processing algorithm.
SourceType
Data source types enum.
Definition: qgsprocessing.h:46
@ TypeVectorLine
Vector line layers.
Definition: qgsprocessing.h:50
@ TypeVectorPolygon
Vector polygon layers.
Definition: qgsprocessing.h:51
@ TypeVectorPoint
Vector point layers.
Definition: qgsprocessing.h:49
Triangular/Derived Mesh is mesh with vertices in map coordinates.
Type
The WKB type describes the number of dimensions a geometry has.
Definition: qgswkbtypes.h:70
Mesh - vertices, edges and faces.
ElementType
Defines type of mesh elements.