42 , mFeedback( new QgsMeshLayerRendererFeedback )
43 , mRendererSettings( layer->rendererSettings() )
55 copyScalarDatasetValues( layer );
56 copyVectorDatasetValues( layer );
58 calculateOutputSize();
66 void QgsMeshLayerRenderer::calculateOutputSize()
74 int width = int( bottomright.
x() - topleft.
x() );
75 int height = int( bottomright.
y() - topleft.
y() );
79 void QgsMeshLayerRenderer::copyScalarDatasetValues(
QgsMeshLayer *layer )
87 if ( ( cache->mDatasetGroupsCount == datasetGroupCount ) &&
88 ( cache->mActiveScalarDatasetIndex == datasetIndex ) &&
89 ( cache->mDataInterpolationMethod == method ) &&
139 &mScalarActiveFaceFlagValues,
150 cache->mDatasetGroupsCount = datasetGroupCount;
151 cache->mActiveScalarDatasetIndex = datasetIndex;
152 cache->mDataInterpolationMethod = method;
161 void QgsMeshLayerRenderer::copyVectorDatasetValues(
QgsMeshLayer *layer )
168 if ( ( cache->mDatasetGroupsCount == datasetGroupCount ) &&
169 ( cache->mActiveVectorDatasetIndex == datasetIndex ) &&
188 bool isScalar = metadata.
isScalar();
191 QgsDebugMsg( QStringLiteral(
"Dataset has no vector values" ) );
223 cache->mDatasetGroupsCount = datasetGroupCount;
224 cache->mActiveVectorDatasetIndex = datasetIndex;
237 renderScalarDataset();
239 renderVectorDataset();
243 void QgsMeshLayerRenderer::renderMesh()
265 nativeFacesInExtent );
269 void QgsMeshLayerRenderer::renderMesh(
const QgsMeshRendererMeshSettings &settings,
const QVector<QgsMeshFace> &faces,
const QList<int> &facesInExtent )
275 QPainter *painter = context.painter();
278 painter->setRenderHint( QPainter::Antialiasing,
true );
280 QPen pen = painter->pen();
281 pen.setCapStyle( Qt::FlatCap );
282 pen.setJoinStyle( Qt::MiterJoin );
284 double penWidth = context.convertToPainterUnits( settings.
lineWidth(),
285 QgsUnitTypes::RenderUnit::RenderMillimeters );
286 pen.setWidthF( penWidth );
287 pen.setColor( settings.
color() );
288 painter->setPen( pen );
291 QSet<QPair<int, int>> drawnEdges;
293 for (
const int i : facesInExtent )
295 if ( context.renderingStopped() )
299 if ( face.size() < 2 )
302 for (
int j = 0; j < face.size(); ++j )
304 const int startVertexId = face[j];
305 const int endVertexId = face[( j + 1 ) % face.size()];
306 const QPair<int, int> thisEdge( startVertexId, endVertexId );
307 const QPair<int, int> thisEdgeReversed( endVertexId, startVertexId );
308 if ( drawnEdges.contains( thisEdge ) || drawnEdges.contains( thisEdgeReversed ) )
310 drawnEdges.insert( thisEdge );
311 drawnEdges.insert( thisEdgeReversed );
315 const QgsPointXY lineStart = context.mapToPixel().transform( startVertex.
x(), startVertex.
y() );
316 const QgsPointXY lineEnd = context.mapToPixel().transform( endVertex.
x(), endVertex.
y() );
324 void QgsMeshLayerRenderer::renderScalarDataset()
340 sh->setRasterShaderFunction( fcn );
353 QImage img = bl->image();
355 context.
painter()->drawImage( 0, 0, img );
358 void QgsMeshLayerRenderer::renderVectorDataset()
370 std::unique_ptr<QgsMeshVectorRenderer> renderer( QgsMeshVectorRenderer::makeVectorRenderer(
A rectangle specified with double values.
Interface for all raster shaders.
Use antialiasing while drawing.
QgsMeshRendererSettings mRendererSettings
A ramp shader will color a raster pixel based on a list of values ranges in a ramp.
Represents a mesh renderer settings for mesh object.
A class to represent a 2D point.
Use data defined on face centers, do not interpolate to vertices.
QgsMeshDataBlock is a block of integers/doubles that can be used to retrieve: active flags (e...
Represents a mesh renderer settings for scalar datasets.
bool isEnabled() const
Returns whether mesh structure rendering is enabled.
QgsRectangle mapExtent() const
Returns the original extent of the map being rendered.
double mVectorDatasetGroupMagMinimum
QVector< double > mScalarDatasetValues
bool mScalarDataOnVertices
double mVectorDatasetMagMinimum
QgsMeshRendererScalarSettings scalarSettings(int groupIndex) const
Returns renderer settings.
int group() const
Returns a group index.
void setClassificationMax(double max)
QgsMesh * nativeMesh()
Returns native mesh (nullptr before rendering)
static bool equals(const QgsMesh3dAveragingMethod *a, const QgsMesh3dAveragingMethod *b)
Returns whether two methods equal.
bool mVectorDataOnVertices
QgsMeshDataBlock mVectorDatasetValues
QVector< double > mVectorDatasetValuesMag
QVector< QgsMeshVertex > vertices
vertices
QgsTriangularMesh mTriangularMesh
double opacity() const
Returns opacity.
Base class for feedback objects to be used for cancellation of something running in a worker thread...
Perform transforms between map coordinates and device coordinates.
double lineWidth() const
Returns line width used for rendering (in millimeters)
QgsPointXY transform(const QgsPointXY &p) const
Transform the point from map (world) coordinates to device coordinates.
QgsFeedback * feedback() const override
Access to feedback object of the layer renderer (may be nullptr)
const QVector< QgsMeshFace > & triangles() const
Returns triangles.
bool render() override
Do the rendering (based on data stored in the class)
QgsMeshDatasetIndex activeVectorDataset() const
Returns active vector dataset.
QPointF toQPointF() const
Converts a point to a QPointF.
QgsRectangle extent() const override
Returns the extent of the layer.
virtual QgsMesh3dAveragingMethod * clone() const =0
Clone the instance.
double mScalarDatasetMaximum
DataInterpolationMethod
Interpolation of value defined on vertices from datasets with data defined on faces.
Raster renderer pipe for single band pseudocolor.
QgsRectangle mLayerExtent
QgsMeshDataProvider * dataProvider() override
Returns the layer's data provider, it may be nullptr.
Point geometry type, with support for z-dimension and m-values.
std::unique_ptr< QgsMeshLayerRendererFeedback > mFeedback
feedback class for cancellation
CORE_EXPORT QList< int > nativeFacesFromTriangles(const QList< int > &triangleIndexes, const QVector< int > &trianglesToNativeFaces)
Returns unique native faces indexes from list of triangle indexes.
QgsColorRampShader colorRampShader() const
Returns color ramp shader function.
double yMinimum() const
Returns the y minimum value (bottom side of rectangle).
QList< int > faceIndexesForRectangle(const QgsRectangle &rectangle) const
Finds indexes of triangles intersecting given bounding box It uses spatial indexing.
QgsMesh3dAveragingMethod * averagingMethod() const
Returns averaging method for conversion of 3d stacked mesh data to 2d data.
double xMaximum() const
Returns the x maximum value (right side of rectangle).
QgsMeshRendererVectorSettings vectorSettings(int groupIndex) const
Returns renderer settings.
virtual QgsMeshDatasetMetadata datasetMetadata(QgsMeshDatasetIndex index) const =0
Returns dataset metadata.
Contains information about the context of a rendering operation.
void setClassificationMin(double min)
QPainter * painter()
Returns the destination QPainter for the render operation.
const QgsMapToPixel & mapToPixel() const
Returns the context's map to pixel transform, which transforms between map coordinates and device coo...
double mVectorDatasetGroupMagMaximum
QgsMeshLayerRenderer(QgsMeshLayer *layer, QgsRenderContext &context)
Ctor.
QgsMeshRendererMeshSettings nativeMeshSettings() const
Returns renderer settings.
bool isValid() const
Whether the block is valid.
QColor color() const
Returns color used for rendering.
QVector< int > QgsMeshFace
List of vertex indexes.
double mVectorDatasetMagMaximum
QgsMeshDatasetIndex is index that identifies the dataset group (e.g.
QgsMeshRendererMeshSettings triangularMeshSettings() const
Returns renderer settings.
QgsMeshLayerRendererCache * rendererCache()
Returns native mesh (nullptr before rendering)
double xMinimum() const
Returns the x minimum value (left side of rectangle).
bool isValid() const
Returns whether index is valid, ie at least groups is set.
Base class for utility classes that encapsulate information necessary for rendering of map layers...
double yMaximum() const
Returns the y maximum value (top side of rectangle).
Represents a mesh layer supporting display of data on structured or unstructured meshes.
QVector< QgsMeshFace > faces
faces
virtual int datasetGroupCount() const =0
Returns number of datasets groups loaded.
void setOpacity(double opacity)
Sets the opacity for the renderer, where opacity is a value between 0 (totally transparent) and 1...
double mScalarDatasetMinimum
QgsMeshDataBlock mScalarActiveFaceFlagValues
QgsRenderContext * renderContext()
Returns the render context associated with the renderer.
const QVector< int > & trianglesToNativeFaces() const
Returns mapping between triangles and original faces.
const QVector< QgsMeshVertex > & vertices() const
Returns vertices in map coordinate system.
double classificationMaximum() const
Returns max value used for creation of the color ramp shader.
QgsTriangularMesh * triangularMesh()
Returns triangular mesh (nullptr before rendering)
QgsRasterBlock * block(int bandNo, const QgsRectangle &extent, int width, int height, QgsRasterBlockFeedback *feedback=nullptr) override
Read block of data using given extent and size.
double classificationMinimum() const
Returns min value used for creation of the color ramp shader.
virtual QgsMeshDataBlock areFacesActive(QgsMeshDatasetIndex index, int faceIndex, int count) const =0
Returns whether the faces are active for particular dataset.
virtual QgsMeshDatasetGroupMetadata datasetGroupMetadata(int groupIndex) const =0
Returns dataset group metadata.
QgsMeshDatasetIndex activeScalarDataset() const
Returns active scalar dataset.