26 , mGeometry( geometry )
27 , mPreserveAspectRatio( preserveAspectRatio )
49 return mPreserveAspectRatio;
59 return mScaleToTargetSize;
64 mScaleToTargetSize = scale;
69 const double *srcX = line->
xData();
70 const double *srcY = line->
yData();
72 QPolygonF thisRes( count );
73 QPointF *dest = thisRes.data();
74 for (
int i = 0; i < count; ++i )
76 *dest++ = QPointF( *srcX++, *srcY++ );
83 if (
const QgsLineString *line = qgsgeometry_cast< const QgsLineString * >( curve ) )
89 const std::unique_ptr< QgsLineString > straightened( curve->
curveToLine() );
97 if ( mScaleToTargetSize )
105 if ( mPreserveAspectRatio && bounds.height() > 0 && bounds.width() > 0 )
107 const double scaling = std::min( size.width() / bounds.width(), size.height() / bounds.height() );
108 const QSizeF scaledSize = bounds.size() * scaling;
109 dx = ( size.width() - scaledSize.width() ) / 2.0;
110 dy = ( size.height() - scaledSize.height() ) / 2.0;
115 const QPolygonF targetRectPoly = QPolygonF() << QPointF( dx, dy + size.height() )
116 << QPointF( dx + size.width(), dy + size.height() )
117 << QPointF( dx + size.width(), dy )
118 << QPointF( dx, dy );
121 if ( bounds.width() > 0 && bounds.height() > 0 )
123 QPolygonF patchRectPoly = QPolygonF( bounds );
125 patchRectPoly.pop_back();
127 QTransform::quadToQuad( patchRectPoly, targetRectPoly, t );
129 else if ( bounds.width() > 0 )
131 t = QTransform::fromScale( size.width() / bounds.width(), 1 ).translate( -bounds.left(), size.height() / 2 - bounds.y() );
133 else if ( bounds.height() > 0 )
135 t = QTransform::fromScale( 1, size.height() / bounds.height() ).translate( size.width() / 2 - bounds.x(), -bounds.top() );
145 if (
isNull() || type != mSymbolType )
150 switch ( mSymbolType )
160 points << QPointF( ( *it ).x(), ( *it ).y() );
164 points << QPointF( static_cast< int >( size.width() ) / 2,
static_cast< int >( size.height() ) / 2 );
166 return QList< QList<QPolygonF> >() << ( QList< QPolygonF >() << points );
171 QList< QList<QPolygonF> > res;
177 res << ( QList< QPolygonF >() <<
curveToPolygonF( qgsgeometry_cast< const QgsCurve * >( *it ) ) );
185 QList< QList<QPolygonF> > res;
190 QList<QPolygonF> thisPart;
191 const QgsCurvePolygon *surface = qgsgeometry_cast< const QgsCurvePolygon * >( *it );
209 return QList< QList<QPolygonF> >();
212 return QList< QList<QPolygonF> >();
218 mPreserveAspectRatio = element.attribute( QStringLiteral(
"preserveAspect" ) ).toInt();
219 mSymbolType =
static_cast< Qgis::SymbolType >( element.attribute( QStringLiteral(
"type" ) ).toInt() );
224 element.setAttribute( QStringLiteral(
"wkt" ), mGeometry.
isNull() ? QString() : mGeometry.
asWkt( ) );
225 element.setAttribute( QStringLiteral(
"preserveAspect" ), mPreserveAspectRatio ? QStringLiteral(
"1" ) : QStringLiteral(
"0" ) );
226 element.setAttribute( QStringLiteral(
"type" ), QString::number(
static_cast< int >( mSymbolType ) ) );
SymbolType
Attribute editing capabilities which may be supported by vector data providers.
Curve polygon geometry type.
int numInteriorRings() const
Returns the number of interior rings contained with the curve polygon.
const QgsCurve * exteriorRing() const
Returns the curve polygon's exterior ring.
const QgsCurve * interiorRing(int i) const
Retrieves an interior ring from 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.
QgsAbstractGeometry::const_part_iterator const_parts_begin() const
Returns STL-style const iterator pointing to the first part of the geometry.
Qgis::GeometryOperationResult transform(const QgsCoordinateTransform &ct, Qgis::TransformDirection direction=Qgis::TransformDirection::Forward, bool transformZ=false)
Transforms this geometry as described by the coordinate transform ct.
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.
QgsRectangle boundingBox() const
Returns the bounding box of the geometry.
QString asWkt(int precision=17) const
Exports the geometry to WKT.
Qgis::WkbType wkbType() const
Returns type of the geometry as a WKB type (point / linestring / polygon etc.)
QgsAbstractGeometry::vertex_iterator vertices_end() const
Returns STL-style iterator pointing to the imaginary vertex after the last vertex of the geometry.
bool scaleToOutputSize() const
Returns true if the patch shape should by resized to the desired target size when rendering.
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...
QgsGeometry scaledGeometry(QSizeF size) const
Returns the patch shape's geometry, scaled to the given size.
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.
void setScaleToOutputSize(bool scale)
Sets whether the patch shape should by resized to the desired target size when rendering.
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.
const double * xData() const
Returns a const pointer to the x vertex data.
int numPoints() const override
Returns the number of points in the curve.
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 Qgis::GeometryType geometryType(Qgis::WkbType type)
Returns the geometry type for a WKB type, e.g., both MultiPolygon and CurvePolygon would have a Polyg...
static Qgis::WkbType flatType(Qgis::WkbType type)
Returns the flat type for a WKB type.
QPolygonF lineStringToQPolygonF(const QgsLineString *line)
QPolygonF curveToPolygonF(const QgsCurve *curve)