43 return QStringLiteral(
"extent" );
48 auto res = std::make_unique< QgsPointCloudExtentRenderer >( mFillSymbol ? mFillSymbol->clone() :
nullptr );
60 auto r = std::make_unique< QgsPointCloudExtentRenderer >();
62 const QDomElement symbolElem = element.firstChildElement( QStringLiteral(
"symbol" ) );
63 if ( !symbolElem.isNull() )
68 r->restoreCommonProperties( element, context );
74 auto transformRing = [&context]( QPolygonF & pts )
90 pts.erase( std::remove_if( pts.begin(), pts.end(),
91 [](
const QPointF point )
93 return !std::isfinite( point.x() ) || !std::isfinite( point.y() );
96 QPointF *ptr = pts.data();
97 for (
int i = 0; i < pts.size(); ++i, ++ptr )
107 QPolygonF exterior = polygon->exteriorRing()->asQPolygonF();
108 transformRing( exterior );
109 QVector<QPolygonF> rings;
110 rings.reserve( polygon->numInteriorRings() );
111 for (
int i = 0; i < polygon->numInteriorRings(); ++i )
113 QPolygonF ring = polygon->interiorRing( i )->asQPolygonF();
114 transformRing( ring );
115 rings.append( ring );
118 mFillSymbol->renderPolygon( exterior, rings.empty() ?
nullptr : &rings,
nullptr, context.
renderContext() );
125 auto layer = std::make_unique< QgsSimpleLineSymbolLayer >();
126 layer->setColor( QColor( 228, 26, 28 ) );
127 layer->setWidth( 0.960000 );
128 layer->setPenStyle( Qt::DotLine );
135 return mFillSymbol.get();
140 mFillSymbol.reset( symbol );
147 if ( textSize.width() < extent.width() && textSize.height() < extent.height() )
155 QDomElement rendererElem = doc.createElement( QStringLiteral(
"renderer" ) );
157 rendererElem.setAttribute( QStringLiteral(
"type" ),
type() );
160 rendererElem.appendChild( symbolElem );
180 QList<QgsLayerTreeModelLegendNode *> nodes;
182 const QgsLegendSymbolItem extentItem( mFillSymbol.get(), QStringLiteral(
"extent" ), QStringLiteral(
"extent" ) );
@ Rectangle
Text within rectangle layout mode.
@ Millimeters
Millimeters.
@ VerticalCenter
Center align.
Custom exception class for Coordinate Reference System related exceptions.
A fill symbol type, for rendering Polygon and MultiPolygon geometries.
A geometry is the spatial representation of a feature.
QgsAbstractGeometry::const_part_iterator const_parts_begin() const
Returns STL-style const iterator pointing to the first part of the geometry.
QgsAbstractGeometry::const_part_iterator const_parts_end() const
Returns STL-style iterator pointing to the imaginary part after the last part of the geometry.
Layer tree node points to a map layer.
Stores information about one class/rule of a vector layer renderer in a unified way that can be used ...
void transformInPlace(double &x, double &y) const
Transforms map coordinates to device coordinates.
Base class for storing raw data from point cloud nodes.
QDomElement save(QDomDocument &doc, const QgsReadWriteContext &context) const override
Saves the renderer configuration to an XML element.
QgsFillSymbol * fillSymbol() const
Returns the symbol used to render the cloud's extent.
QList< QgsLayerTreeModelLegendNode * > createLegendNodes(QgsLayerTreeLayer *nodeLayer) override
Creates a set of legend nodes representing the renderer.
void startRender(QgsPointCloudRenderContext &context) override
Must be called when a new render cycle is started.
static QgsPointCloudRenderer * create(QDomElement &element, const QgsReadWriteContext &context)
Creates an extent renderer from an XML element.
void stopRender(QgsPointCloudRenderContext &context) override
Must be called when a render cycle has finished, to allow the renderer to clean up.
~QgsPointCloudExtentRenderer() override
void setFillSymbol(QgsFillSymbol *symbol)
Sets the symbol used to render the cloud's extent.
void renderExtent(const QgsGeometry &extent, QgsPointCloudRenderContext &context)
Renders a polygon extent geometry to the specified render context.
void renderBlock(const QgsPointCloudBlock *block, QgsPointCloudRenderContext &context) override
Renders a block of point cloud data using the specified render context.
static QgsFillSymbol * defaultFillSymbol()
Returns a new instance of the default fill symbol to use for showing point cloud extents.
QgsPointCloudRenderer * clone() const override
Create a deep copy of this renderer.
void renderLabel(const QRectF &extent, const QString &text, QgsPointCloudRenderContext &context) const
Renders a label inside the specified extent rectangle.
QString type() const override
Returns the identifier of the renderer type.
QgsPointCloudExtentRenderer(QgsFillSymbol *symbol=nullptr)
Constructor for QgsPointCloudExtentRenderer.
Encapsulates the render context for a 2D point cloud rendering operation.
QgsRenderContext & renderContext()
Returns a reference to the context's render context.
QgsTextFormat labelTextFormat() const
Returns the text format renderer is using for rendering labels.
void saveCommonProperties(QDomElement &element, const QgsReadWriteContext &context) const
Saves common renderer properties (such as point size and screen error) to the specified DOM element.
void copyCommonProperties(QgsPointCloudRenderer *destination) const
Copies common point cloud properties (such as point size and screen error) to the destination rendere...
virtual void startRender(QgsPointCloudRenderContext &context)
Must be called when a new render cycle is started.
virtual void stopRender(QgsPointCloudRenderContext &context)
Must be called when a render cycle has finished, to allow the renderer to clean up.
A container for the context for various read/write operations on objects.
const QgsMapToPixel & mapToPixel() const
Returns the context's map to pixel transform, which transforms between map coordinates and device coo...
QgsCoordinateTransform coordinateTransform() const
Returns the current coordinate transform for the context.
static std::unique_ptr< QgsSymbol > loadSymbol(const QDomElement &element, const QgsReadWriteContext &context)
Attempts to load a symbol from a DOM element.
static QDomElement saveSymbol(const QString &symbolName, const QgsSymbol *symbol, QDomDocument &doc, const QgsReadWriteContext &context)
Writes a symbol definition to XML.
Implementation of legend node interface for displaying preview of vector symbols and their labels and...
void setEmbeddedInParent(bool embedded) override
Contains pre-calculated metrics of a QgsTextDocument.
static QgsTextDocumentMetrics calculateMetrics(const QgsTextDocument &document, const QgsTextFormat &format, const QgsRenderContext &context, double scaleFactor=1.0, const QgsTextDocumentRenderContext &documentContext=QgsTextDocumentRenderContext())
Returns precalculated text metrics for a text document, when rendered using the given base format and...
Represents a document consisting of one or more QgsTextBlock objects.
static QgsTextDocument fromTextAndFormat(const QStringList &lines, const QgsTextFormat &format)
Constructor for QgsTextDocument consisting of a set of lines, respecting settings from a text format.
static void drawDocument(const QRectF &rect, const QgsTextFormat &format, const QgsTextDocument &document, const QgsTextDocumentMetrics &metrics, QgsRenderContext &context, Qgis::TextHorizontalAlignment horizontalAlignment=Qgis::TextHorizontalAlignment::Left, Qgis::TextVerticalAlignment verticalAlignment=Qgis::TextVerticalAlignment::Top, double rotation=0, Qgis::TextLayoutMode mode=Qgis::TextLayoutMode::Rectangle, Qgis::TextRendererFlags flags=Qgis::TextRendererFlags())
Draws a text document within a rectangle using the specified settings.
T qgsgeometry_cast(QgsAbstractGeometry *geom)
QList< QgsSymbolLayer * > QgsSymbolLayerList