26 , mGeometry( geometry )
27 , mPreserveAspectRatio( preserveAspectRatio )
49 return mPreserveAspectRatio;
59 const double *srcX = line->
xData();
60 const double *srcY = line->
yData();
62 QPolygonF thisRes( count );
63 QPointF *dest = thisRes.data();
64 for (
int i = 0; i < count; ++i )
66 *dest++ = QPointF( *srcX++, *srcY++ );
73 if (
const QgsLineString *line = qgsgeometry_cast< const QgsLineString * >( curve ) )
79 std::unique_ptr< QgsLineString > straightened( curve->
curveToLine() );
86 if (
isNull() || type != mSymbolType )
95 if ( mPreserveAspectRatio && bounds.height() > 0 && bounds.width() > 0 )
97 const double scaling = std::min( size.width() / bounds.width(), size.height() / bounds.height() );
98 const QSizeF scaledSize = bounds.size() * scaling;
99 dx = ( size.width() - scaledSize.width() ) / 2.0;
100 dy = ( size.height() - scaledSize.height() ) / 2.0;
105 QPolygonF targetRectPoly = QPolygonF() << QPointF( dx, dy + size.height() )
106 << QPointF( dx + size.width(), dy + size.height() )
107 << QPointF( dx + size.width(), dy )
108 << QPointF( dx, dy );
111 if ( bounds.width() > 0 && bounds.height() > 0 )
113 QPolygonF patchRectPoly = QPolygonF( bounds );
115 patchRectPoly.pop_back();
117 QTransform::quadToQuad( patchRectPoly, targetRectPoly, t );
119 else if ( bounds.width() > 0 )
121 t = QTransform::fromScale( size.width() / bounds.width(), 1 ).translate( -bounds.left(), size.height() / 2 - bounds.y() );
123 else if ( bounds.height() > 0 )
125 t = QTransform::fromScale( 1, size.height() / bounds.height() ).translate( size.width() / 2 - bounds.x(), -bounds.top() );
131 switch ( mSymbolType )
141 points << QPointF( ( *it ).x(), ( *it ).y() );
145 points << QPointF( static_cast< int >( size.width() ) / 2,
static_cast< int >( size.height() ) / 2 );
147 return QList< QList<QPolygonF> >() << ( QList< QPolygonF >() << points );
152 QList< QList<QPolygonF> > res;
158 res << ( QList< QPolygonF >() <<
curveToPolygonF( qgsgeometry_cast< const QgsCurve * >( *it ) ) );
166 QList< QList<QPolygonF> > res;
171 QList<QPolygonF> thisPart;
172 const QgsCurvePolygon *surface = qgsgeometry_cast< const QgsCurvePolygon * >( *it );
190 return QList< QList<QPolygonF> >();
193 return QList< QList<QPolygonF> >();
199 mPreserveAspectRatio = element.attribute( QStringLiteral(
"preserveAspect" ) ).toInt();
200 mSymbolType =
static_cast< Qgis::SymbolType >( element.attribute( QStringLiteral(
"type" ) ).toInt() );
205 element.setAttribute( QStringLiteral(
"wkt" ), mGeometry.
isNull() ? QString() : mGeometry.
asWkt( ) );
206 element.setAttribute( QStringLiteral(
"preserveAspect" ), mPreserveAspectRatio ? QStringLiteral(
"1" ) : QStringLiteral(
"0" ) );
207 element.setAttribute( QStringLiteral(
"type" ), QString::number(
static_cast< int >( mSymbolType ) ) );
Curve polygon geometry type.
const QgsCurve * interiorRing(int i) const SIP_HOLDGIL
Retrieves an interior ring from the curve polygon.
const QgsCurve * exteriorRing() const SIP_HOLDGIL
Returns the curve polygon's exterior ring.
int numInteriorRings() const SIP_HOLDGIL
Returns the number of interior rings contained with the curve polygon.
Abstract base class for curved geometry type.
virtual QgsLineString * curveToLine(double tolerance=M_PI_2/90, SegmentationToleranceType toleranceType=MaximumAngle) const =0
Returns a new line string geometry corresponding to a segmentized approximation of the curve.
A geometry is the spatial representation of a feature.
QgsWkbTypes::Type wkbType() const SIP_HOLDGIL
Returns type of the geometry as a WKB type (point / linestring / polygon etc.)
QgsAbstractGeometry::const_part_iterator const_parts_begin() const
Returns STL-style const iterator pointing to the first part of the geometry.
static QgsGeometry fromWkt(const QString &wkt)
Creates a new geometry from a WKT string.
bool isEmpty() const
Returns true if the geometry is empty (eg a linestring with no vertices, or a collection with no geom...
QgsAbstractGeometry::const_part_iterator const_parts_end() const
Returns STL-style iterator pointing to the imaginary part after the last part of the geometry.
QgsAbstractGeometry::vertex_iterator vertices_begin() const
Returns STL-style iterator pointing to the first vertex of the geometry.
OperationResult transform(const QgsCoordinateTransform &ct, QgsCoordinateTransform::TransformDirection direction=QgsCoordinateTransform::ForwardTransform, bool transformZ=false) SIP_THROW(QgsCsException)
Transforms this geometry as described by the coordinate transform ct.
QgsRectangle boundingBox() const
Returns the bounding box of the geometry.
QString asWkt(int precision=17) const
Exports the geometry to WKT.
QgsAbstractGeometry::vertex_iterator vertices_end() const
Returns STL-style iterator pointing to the imaginary vertex after the last vertex of the geometry.
void setSymbolType(Qgis::SymbolType type)
Sets the symbol type associated with this patch.
void readXml(const QDomElement &element, const QgsReadWriteContext &context)
Read settings from a DOM element.
QList< QList< QPolygonF > > toQPolygonF(Qgis::SymbolType type, QSizeF size) const
Converts the patch shape to a set of QPolygonF objects representing how the patch should be drawn for...
void setGeometry(const QgsGeometry &geometry)
Sets the geometry for the patch shape.
bool preserveAspectRatio() const
Returns true if the patch shape should preserve its aspect ratio when it is resized to fit a desired ...
bool isNull() const
Returns true if the patch shape is a null QgsLegendPatchShape, which indicates that the default legen...
QgsLegendPatchShape()=default
Constructor for a null QgsLegendPatchShape.
void setPreserveAspectRatio(bool preserve)
Sets whether the patch shape should preserve its aspect ratio when it is resized to fit a desired leg...
void writeXml(QDomElement &element, QDomDocument &doc, const QgsReadWriteContext &context) const
Write settings into a DOM element.
QgsGeometry geometry() const
Returns the geometry for the patch shape.
Qgis::SymbolType symbolType() const
Returns the symbol type associated with this patch.
Line string geometry type, with support for z-dimension and m-values.
const double * yData() const
Returns a const pointer to the y vertex data.
int numPoints() const override SIP_HOLDGIL
Returns the number of points in the curve.
const double * xData() const
Returns a const pointer to the x vertex data.
The class is used as a container of context for various read/write operations on other objects.
QRectF toRectF() const
Returns a QRectF with same coordinates as the rectangle.
static QgsStyle * defaultStyle()
Returns default application-wide style.
QList< QList< QPolygonF > > defaultPatchAsQPolygonF(Qgis::SymbolType type, QSizeF size) const
Returns the default patch geometry for the given symbol type and size as a set of QPolygonF objects (...
static GeometryType geometryType(Type type) SIP_HOLDGIL
Returns the geometry type for a WKB type, e.g., both MultiPolygon and CurvePolygon would have a Polyg...
static Type flatType(Type type) SIP_HOLDGIL
Returns the flat type for a WKB type.
QPolygonF lineStringToQPolygonF(const QgsLineString *line)
QPolygonF curveToPolygonF(const QgsCurve *curve)