QGIS API Documentation 4.3.0-Master (16649ce5cc6)
Loading...
Searching...
No Matches
qgsmeshvectorrenderer.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsmeshvectorrenderer.h
3 -------------------
4 begin : May 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 QGSMESHVECTORRENDERER_H
19#define QGSMESHVECTORRENDERER_H
20
21#include <memory>
22
23#include "qgsmeshdataset.h"
24#include "qgsmeshutils.h"
26
27#include <QSize>
28#include <QVector>
29
30#define SIP_NO_FILE
31
32class QgsMeshVectorFieldValueSource;
33class QgsPointXY;
38
40
41
42class QgsMeshVectorRenderer
43{
44 public:
45 QgsMeshVectorRenderer() = default;
46
50 virtual ~QgsMeshVectorRenderer();
51
52 virtual void draw() = 0;
53
55 static QgsMeshVectorRenderer *makeVectorRenderer(
56 const QgsTriangularMesh &m,
57 const QgsMeshDataBlock &datasetVectorValues,
58 const QgsMeshDataBlock &scalarActiveFaceFlagValues,
59 const QVector<double> &datasetValuesMag,
60 double datasetMagMaximumValue,
61 double datasetMagMinimumValue,
63 const QgsVectorFieldSettings &settings,
64 QgsRenderContext &context,
65 const QgsRectangle &layerExtent,
66 QgsRasterBlockFeedback *feedBack,
67 const QSize &size
68 );
69};
70
80class QgsMeshVectorGlyphRenderer : public QgsMeshVectorRenderer
81{
82 public:
84 QgsMeshVectorGlyphRenderer(
85 const QgsTriangularMesh &m,
86 const QgsMeshDataBlock &datasetValues,
87 const QVector<double> &datasetValuesMag,
88 double datasetMagMaximumValue,
89 double datasetMagMinimumValue,
91 const QgsVectorFieldSettings &settings,
92 QgsRenderContext &context,
93 QSize size
94 );
95 ~QgsMeshVectorGlyphRenderer() override;
96
100 void draw() override;
101
102 private:
104 void drawVectorDataOnVertices();
106 void drawVectorDataOnFaces();
108 void drawVectorDataOnEdges();
110 void drawVectorDataOnPoints( const QSet<int> indexesToRender, const QVector<QgsMeshVertex> &points );
112 void drawVectorDataOnGrid();
113
120 double calcExtentBufferSize() const;
121
122 const QgsTriangularMesh &mTriangularMesh;
123 const QgsMeshDataBlock &mDatasetValues;
124 const QVector<double> &mDatasetValuesMag; //magnitudes
125 double mMinMag = 0.0;
126 double mMaxMag = 0.0;
128 QgsRectangle mBufferedExtent;
129
130 QgsRenderContext &mContext;
131 const QgsVectorFieldSettings mCfg;
132 QSize mOutputSize;
133
134 QgsVectorFieldEngine mEngine;
135};
136
148class QgsMeshVectorStreamlineRenderer : public QgsMeshVectorRenderer
149{
150 public:
152 QgsMeshVectorStreamlineRenderer(
153 const QgsTriangularMesh &m,
154 const QgsMeshDataBlock &datasetValues,
155 const QgsMeshDataBlock &scalarActiveFaceFlagValues,
156 const QVector<double> &datasetValuesMag,
157 double datasetMagMaximumValue,
158 double datasetMagMinimumValue,
160 const QgsVectorFieldSettings &settings,
161 QgsRenderContext &context,
162 const QgsRectangle &layerExtent,
163 QgsRasterBlockFeedback *feedBack,
164 QSize size
165 );
166 ~QgsMeshVectorStreamlineRenderer() override;
167
168 void draw() override;
169
170 private:
171 const QgsVectorFieldSettings mCfg;
172 QgsRasterBlockFeedback *mFeedBack = nullptr;
173 std::unique_ptr<QgsMeshVectorFieldValueSource> mSource;
174 QgsVectorFieldEngine mEngine;
175};
176
178
179
180#endif // QGSMESHVECTORRENDERER_H
A block of integers/doubles from a mesh dataset.
DataType
Location of where data is specified for datasets in the dataset group.
@ DataOnVertices
Data is defined on vertices.
Represents a 2D point.
Definition qgspointxy.h:62
Feedback object tailored for raster block reading.
A rectangle specified with double values.
Contains information about the context of a rendering operation.
A triangular/derived mesh with vertices in map coordinates.
Represents a renderer settings for vector datasets.