QGIS API Documentation
3.14.0-Pi (9f7028fd23)
|
Go to the documentation of this file.
33 properties.insert( QStringLiteral(
"color" ), QStringLiteral(
"white" ) );
34 properties.insert( QStringLiteral(
"style" ), QStringLiteral(
"solid" ) );
35 properties.insert( QStringLiteral(
"style_border" ), QStringLiteral(
"solid" ) );
36 properties.insert( QStringLiteral(
"color_border" ), QStringLiteral(
"black" ) );
37 properties.insert( QStringLiteral(
"width_border" ), QStringLiteral(
"0.3" ) );
38 properties.insert( QStringLiteral(
"joinstyle" ), QStringLiteral(
"miter" ) );
76 if ( !
id().isEmpty() )
84 return tr(
"<Ellipse>" );
86 return tr(
"<Rectangle>" );
88 return tr(
"<Triangle>" );
91 return tr(
"<Shape>" );
103 if (
mLayout &&
id().isEmpty() )
106 mLayout->itemsModel()->updateItemDisplayName(
this );
110 void QgsLayoutItemShape::refreshSymbol()
118 updateBoundingRect();
124 void QgsLayoutItemShape::updateBoundingRect()
126 QRectF rectangle = rect();
127 rectangle.adjust( -mMaxSymbolBleed, -mMaxSymbolBleed, mMaxSymbolBleed, mMaxSymbolBleed );
128 if ( rectangle != mCurrentRectangle )
130 prepareGeometryChange();
131 mCurrentRectangle = rectangle;
146 return mCurrentRectangle;
151 return mMaxSymbolBleed;
156 if ( mShapeStyleSymbol )
169 painter->setPen( Qt::NoPen );
170 painter->setBrush( Qt::NoBrush );
174 QPolygonF shapePolygon;
178 QTransform t = QTransform::fromScale( 100, 100 );
180 QTransform ti = t.inverted();
187 QPainterPath ellipsePath;
188 ellipsePath.addEllipse( QRectF( 0, 0, rect().width() * scale, rect().height() * scale ) );
189 QPolygonF ellipsePoly = ellipsePath.toFillPolygon( t );
190 shapePolygon = ti.map( ellipsePoly );
196 if ( mCornerRadius.
length() > 0 )
198 QPainterPath roundedRectPath;
199 double radius =
mLayout->convertToLayoutUnits( mCornerRadius ) * scale;
200 roundedRectPath.addRoundedRect( QRectF( 0, 0, rect().width() * scale, rect().height() * scale ), radius, radius );
201 QPolygonF roundedPoly = roundedRectPath.toFillPolygon( t );
202 shapePolygon = ti.map( roundedPoly );
206 shapePolygon = QPolygonF( QRectF( 0, 0, rect().width() * scale, rect().height() * scale ) );
212 shapePolygon << QPointF( 0, rect().height() * scale );
213 shapePolygon << QPointF( rect().width() * scale, rect().height() * scale );
214 shapePolygon << QPointF( rect().width() / 2.0 * scale, 0 );
215 shapePolygon << QPointF( 0, rect().height() * scale );
220 QVector<QPolygonF> rings;
229 element.setAttribute( QStringLiteral(
"shapeType" ), mShape );
230 element.setAttribute( QStringLiteral(
"cornerRadiusMeasure" ), mCornerRadius.
encodeMeasurement() );
233 element.appendChild( shapeStyleElem );
240 mShape =
static_cast< Shape >( element.attribute( QStringLiteral(
"shapeType" ), QStringLiteral(
"0" ) ).toInt() );
241 if ( element.hasAttribute( QStringLiteral(
"cornerRadiusMeasure" ) ) )
244 mCornerRadius =
QgsLayoutMeasurement( element.attribute( QStringLiteral(
"cornerRadius" ), QStringLiteral(
"0" ) ).toDouble() );
246 QDomElement shapeStyleSymbolElem = element.firstChildElement( QStringLiteral(
"symbol" ) );
247 if ( !shapeStyleSymbolElem.isNull() )
249 mShapeStyleSymbol.reset( QgsSymbolLayerUtils::loadSymbol<QgsFillSymbol>( shapeStyleSymbolElem, context ) );
QString id() const
Returns the item's ID name.
const QgsLayout * layout() const
Returns the layout the object is attached to.
Layout item for basic filled shapes (e.g. rectangles, ellipses).
double convertToPainterUnits(double size, QgsUnitTypes::RenderUnit unit, const QgsMapUnitScale &scale=QgsMapUnitScale()) const
Converts a size from the specified units to painter units (pixels).
static QIcon getThemeIcon(const QString &name)
Helper to get a theme icon.
void sizePositionChanged()
Emitted when the item's size or position changes.
virtual void setFrameEnabled(bool drawFrame)
Sets whether this item has a frame drawn around it or not.
QgsLayoutRenderContext & renderContext()
Returns a reference to the layout's render context, which stores information relating to the current ...
double length() const
Returns the length of the measurement.
bool accept(QgsStyleEntityVisitorInterface *visitor) const override
Accepts the specified style entity visitor, causing it to visit all style entities associated with th...
QIcon icon() const override
Returns the item's icon.
@ RenderMillimeters
Millimeters.
bool writePropertiesToElement(QDomElement &element, QDomDocument &document, const QgsReadWriteContext &context) const override
Stores item state within an XML DOM element.
QgsLayoutItemShape(QgsLayout *layout)
Constructor for QgsLayoutItemShape, with the specified parent layout.
bool readPropertiesFromElement(const QDomElement &element, const QDomDocument &document, const QgsReadWriteContext &context) override
Sets item state from a DOM element.
Contains information relating to the style entity currently being visited.
QString encodeMeasurement() const
Encodes the layout measurement to a string.
static QgsRenderContext createRenderContextForLayout(QgsLayout *layout, QPainter *painter, double dpi=-1)
Creates a render context suitable for the specified layout and painter destination.
void stopRender(QgsRenderContext &context)
Ends the rendering process.
QString displayName() const override
Gets item display name.
static QgsLayoutItemShape * create(QgsLayout *layout)
Returns a new shape item for the specified layout.
void frameChanged()
Emitted if the item's frame style changes.
void setBackgroundEnabled(bool drawBackground)
Sets whether this item has a background drawn under it or not.
void startRender(QgsRenderContext &context, const QgsFields &fields=QgsFields())
Begins the rendering process for the symbol.
Base class for graphical items within a QgsLayout.
double estimatedFrameBleed() const override
Returns the estimated amount the item's frame bleeds outside the item's actual rectangle.
void renderPolygon(const QPolygonF &points, const QVector< QPolygonF > *rings, const QgsFeature *f, QgsRenderContext &context, int layer=-1, bool selected=false)
Renders the symbol using the given render context.
@ Rectangle
Rectangle shape.
int type() const override
QgsRenderContext & renderContext()
Returns a reference to the context's render context.
virtual QString uuid() const
Returns the item identification string.
QMap< QString, QString > QgsStringMap
QPointer< QgsLayout > mLayout
QRectF boundingRect() const override
Base class for layouts, which can contain items such as maps, labels, scalebars, etc.
void setShapeType(QgsLayoutItemShape::Shape type)
Sets the type of shape (e.g.
QgsFillSymbol * clone() const override
Returns a deep copy of this symbol.
virtual bool visit(const QgsStyleEntityVisitorInterface::StyleLeaf &entity)
Called when the visitor will visit a style entity.
QgsFillSymbol * symbol()
Returns the fill symbol used to draw the shape.
double dpi() const
Returns the dpi for outputting the layout.
static QgsFillSymbol * createSimple(const QgsStringMap &properties)
Create a fill symbol with one symbol layer: SimpleFill with specified properties.
static double estimateMaxSymbolBleed(QgsSymbol *symbol, const QgsRenderContext &context)
Returns the maximum estimated bleed for the symbol.
@ Triangle
Triangle shape.
QPainter * painter()
Returns the destination QPainter for the render operation.
static QDomElement saveSymbol(const QString &symbolName, const QgsSymbol *symbol, QDomDocument &doc, const QgsReadWriteContext &context)
Writes a symbol definition to XML.
This class provides a method of storing measurements for use in QGIS layouts using a variety of diffe...
void setSymbol(QgsFillSymbol *symbol)
Sets the fill symbol used to draw the shape.
void draw(QgsLayoutItemRenderContext &context) override
Draws the item's contents using the specified item render context.
static QgsLayoutMeasurement decodeMeasurement(const QString &string)
Decodes a measurement from a string.