36 #include <QDomDocument> 37 #include <QDomElement> 38 #include <QFontMetricsF> 75 mStyle->draw( context.
renderContext(), mSettings, createScaleContext() );
97 refreshSegmentMillimeters();
109 refreshSegmentMillimeters();
121 refreshSegmentMillimeters();
133 refreshSegmentMillimeters();
161 disconnectCurrentMap();
171 connect( mMap, &QObject::destroyed,
this, &QgsLayoutItemScaleBar::disconnectCurrentMap );
173 refreshSegmentMillimeters();
177 void QgsLayoutItemScaleBar::disconnectCurrentMap()
185 disconnect( mMap, &QObject::destroyed,
this, &QgsLayoutItemScaleBar::disconnectCurrentMap );
193 bool forceUpdate =
false;
197 QBrush b = mSettings.
brush();
204 QBrush b = mSettings.
brush2();
211 QPen p = mSettings.
pen();
218 QPen p = mSettings.
pen();
235 double s = std::pow( 10.0, std::floor( std::log10( a ) ) ) / d;
236 return std::ceil( a / s ) * s;
242 double s = std::pow( 10.0, std::floor( std::log10( a ) ) ) / d;
243 return std::floor( a / s ) * s;
246 void QgsLayoutItemScaleBar::refreshSegmentMillimeters()
251 QRectF composerItemRect = mMap->rect();
256 mSegmentMillimeters = composerItemRect.width() / mapWidth() * mSettings.
unitsPerSegment();
262 mSegmentMillimeters = 0;
268 double minUnitsPerSeg = ( mSettings.
minimumBarWidth() * mapWidth() ) / ( nSegments * composerItemRect.width() );
269 double maxUnitsPerSeg = ( mSettings.
maximumBarWidth() * mapWidth() ) / ( nSegments * composerItemRect.width() );
279 while ( lowerNiceUnitsPerSeg > maxUnitsPerSeg && upperNiceUnitsPerSeg < minUnitsPerSeg )
287 mSettings.
setUnitsPerSegment( upperNiceUnitsPerSeg < minUnitsPerSeg ? lowerNiceUnitsPerSeg : upperNiceUnitsPerSeg );
288 mSegmentMillimeters = composerItemRect.width() / mapWidth() * mSettings.
unitsPerSegment();
294 double QgsLayoutItemScaleBar::mapWidth()
const 304 return mapExtent.
width();
323 scaleContext.
size = rect().size();
325 scaleContext.
scale = mMap ? mMap->
scale() : 1.0;
339 refreshSegmentMillimeters();
371 mStyle = qgis::make_unique< QgsSingleBoxScaleBarRenderer >();
378 QString defaultFontString = settings.
value( QStringLiteral(
"LayoutDesigner/defaultFont" ), QVariant(),
QgsSettings::Gui ).toString();
380 if ( !defaultFontString.isEmpty() )
382 f.setFamily( defaultFontString );
384 f.setPointSizeF( 12.0 );
408 double widthInSelectedUnits = mapWidth();
409 double initialUnitsPerSegment = widthInSelectedUnits / 10.0;
414 if ( initialUnitsPerSegment > 1000.0 )
422 if ( initialUnitsPerSegment > 5419.95 )
440 double upperMagnitudeMultiplier = 1.0;
441 double widthInSelectedUnits = mapWidth();
442 double initialUnitsPerSegment = widthInSelectedUnits / 10.0;
446 upperMagnitudeMultiplier = 1;
448 double segmentWidth = initialUnitsPerSegment / upperMagnitudeMultiplier;
449 int segmentMagnitude = std::floor( std::log10( segmentWidth ) );
450 double unitsPerSegment = upperMagnitudeMultiplier * ( std::pow( 10.0, segmentMagnitude ) );
451 double multiplier = std::floor( ( widthInSelectedUnits / ( unitsPerSegment * 10.0 ) ) / 2.5 ) * 2.5;
453 if ( multiplier > 0 )
455 unitsPerSegment = unitsPerSegment * multiplier;
464 refreshSegmentMillimeters();
474 double widthMM = mStyle->calculateBoxSize( mSettings, createScaleContext() ).width();
485 if ( mStyle && mStyle->name() != QLatin1String(
"Numeric" ) )
489 QgsLayoutItem::update();
492 void QgsLayoutItemScaleBar::updateScale()
494 refreshSegmentMillimeters();
502 if ( styleName == QLatin1String(
"Single Box" ) )
504 mStyle = qgis::make_unique< QgsSingleBoxScaleBarRenderer >();
506 else if ( styleName == QLatin1String(
"Double Box" ) )
508 mStyle = qgis::make_unique< QgsDoubleBoxScaleBarRenderer >();
510 else if ( styleName == QLatin1String(
"Line Ticks Middle" ) || styleName == QLatin1String(
"Line Ticks Down" ) || styleName == QLatin1String(
"Line Ticks Up" ) )
512 std::unique_ptr< QgsTicksScaleBarRenderer > tickStyle = qgis::make_unique< QgsTicksScaleBarRenderer >();
513 if ( styleName == QLatin1String(
"Line Ticks Middle" ) )
517 else if ( styleName == QLatin1String(
"Line Ticks Down" ) )
521 else if ( styleName == QLatin1String(
"Line Ticks Up" ) )
525 mStyle = std::move( tickStyle );
527 else if ( styleName == QLatin1String(
"Numeric" ) )
529 mStyle = qgis::make_unique< QgsNumericScaleBarRenderer >();
539 return mStyle->name();
549 return mSettings.
font();
561 composerScaleBarElem.setAttribute( QStringLiteral(
"height" ), QString::number( mSettings.
height() ) );
562 composerScaleBarElem.setAttribute( QStringLiteral(
"labelBarSpace" ), QString::number( mSettings.
labelBarSpace() ) );
563 composerScaleBarElem.setAttribute( QStringLiteral(
"boxContentSpace" ), QString::number( mSettings.
boxContentSpace() ) );
564 composerScaleBarElem.setAttribute( QStringLiteral(
"numSegments" ), mSettings.
numberOfSegments() );
565 composerScaleBarElem.setAttribute( QStringLiteral(
"numSegmentsLeft" ), mSettings.
numberOfSegmentsLeft() );
566 composerScaleBarElem.setAttribute( QStringLiteral(
"numUnitsPerSegment" ), QString::number( mSettings.
unitsPerSegment() ) );
567 composerScaleBarElem.setAttribute( QStringLiteral(
"segmentSizeMode" ), mSettings.
segmentSizeMode() );
568 composerScaleBarElem.setAttribute( QStringLiteral(
"minBarWidth" ), mSettings.
minimumBarWidth() );
569 composerScaleBarElem.setAttribute( QStringLiteral(
"maxBarWidth" ), mSettings.
maximumBarWidth() );
570 composerScaleBarElem.setAttribute( QStringLiteral(
"segmentMillimeters" ), QString::number( mSegmentMillimeters ) );
571 composerScaleBarElem.setAttribute( QStringLiteral(
"numMapUnitsPerScaleBarUnit" ), QString::number( mSettings.
mapUnitsPerScaleBarUnit() ) );
573 composerScaleBarElem.setAttribute( QStringLiteral(
"outlineWidth" ), QString::number( mSettings.
lineWidth() ) );
574 composerScaleBarElem.setAttribute( QStringLiteral(
"unitLabel" ), mSettings.
unitLabel() );
582 composerScaleBarElem.setAttribute( QStringLiteral(
"style" ), mStyle->name() );
588 composerScaleBarElem.setAttribute( QStringLiteral(
"mapUuid" ), mMap->
uuid() );
594 QDomElement fillColorElem = doc.createElement( QStringLiteral(
"fillColor" ) );
595 fillColorElem.setAttribute( QStringLiteral(
"red" ), QString::number( mSettings.
fillColor().red() ) );
596 fillColorElem.setAttribute( QStringLiteral(
"green" ), QString::number( mSettings.
fillColor().green() ) );
597 fillColorElem.setAttribute( QStringLiteral(
"blue" ), QString::number( mSettings.
fillColor().blue() ) );
598 fillColorElem.setAttribute( QStringLiteral(
"alpha" ), QString::number( mSettings.
fillColor().alpha() ) );
599 composerScaleBarElem.appendChild( fillColorElem );
602 QDomElement fillColor2Elem = doc.createElement( QStringLiteral(
"fillColor2" ) );
603 fillColor2Elem.setAttribute( QStringLiteral(
"red" ), QString::number( mSettings.
fillColor2().red() ) );
604 fillColor2Elem.setAttribute( QStringLiteral(
"green" ), QString::number( mSettings.
fillColor2().green() ) );
605 fillColor2Elem.setAttribute( QStringLiteral(
"blue" ), QString::number( mSettings.
fillColor2().blue() ) );
606 fillColor2Elem.setAttribute( QStringLiteral(
"alpha" ), QString::number( mSettings.
fillColor2().alpha() ) );
607 composerScaleBarElem.appendChild( fillColor2Elem );
610 QDomElement strokeColorElem = doc.createElement( QStringLiteral(
"strokeColor" ) );
611 strokeColorElem.setAttribute( QStringLiteral(
"red" ), QString::number( mSettings.
lineColor().red() ) );
612 strokeColorElem.setAttribute( QStringLiteral(
"green" ), QString::number( mSettings.
lineColor().green() ) );
613 strokeColorElem.setAttribute( QStringLiteral(
"blue" ), QString::number( mSettings.
lineColor().blue() ) );
614 strokeColorElem.setAttribute( QStringLiteral(
"alpha" ), QString::number( mSettings.
lineColor().alpha() ) );
615 composerScaleBarElem.appendChild( strokeColorElem );
618 QDomElement fontColorElem = doc.createElement( QStringLiteral(
"textColor" ) );
619 fontColorElem.setAttribute( QStringLiteral(
"red" ), QString::number( mSettings.
fontColor().red() ) );
620 fontColorElem.setAttribute( QStringLiteral(
"green" ), QString::number( mSettings.
fontColor().green() ) );
621 fontColorElem.setAttribute( QStringLiteral(
"blue" ), QString::number( mSettings.
fontColor().blue() ) );
622 fontColorElem.setAttribute( QStringLiteral(
"alpha" ), QString::number( mSettings.
fontColor().alpha() ) );
623 composerScaleBarElem.appendChild( fontColorElem );
626 composerScaleBarElem.setAttribute( QStringLiteral(
"alignment" ), QString::number( static_cast< int >( mSettings.
alignment() ) ) );
633 mSettings.
setHeight( itemElem.attribute( QStringLiteral(
"height" ), QStringLiteral(
"5.0" ) ).toDouble() );
634 mSettings.
setLabelBarSpace( itemElem.attribute( QStringLiteral(
"labelBarSpace" ), QStringLiteral(
"3.0" ) ).toDouble() );
635 mSettings.
setBoxContentSpace( itemElem.attribute( QStringLiteral(
"boxContentSpace" ), QStringLiteral(
"1.0" ) ).toDouble() );
636 mSettings.
setNumberOfSegments( itemElem.attribute( QStringLiteral(
"numSegments" ), QStringLiteral(
"2" ) ).toInt() );
637 mSettings.
setNumberOfSegmentsLeft( itemElem.attribute( QStringLiteral(
"numSegmentsLeft" ), QStringLiteral(
"0" ) ).toInt() );
638 mSettings.
setUnitsPerSegment( itemElem.attribute( QStringLiteral(
"numUnitsPerSegment" ), QStringLiteral(
"1.0" ) ).toDouble() );
639 mSettings.
setSegmentSizeMode( static_cast<QgsScaleBarSettings::SegmentSizeMode>( itemElem.attribute( QStringLiteral(
"segmentSizeMode" ), QStringLiteral(
"0" ) ).toInt() ) );
640 mSettings.
setMinimumBarWidth( itemElem.attribute( QStringLiteral(
"minBarWidth" ), QStringLiteral(
"50" ) ).toDouble() );
641 mSettings.
setMaximumBarWidth( itemElem.attribute( QStringLiteral(
"maxBarWidth" ), QStringLiteral(
"150" ) ).toDouble() );
642 mSegmentMillimeters = itemElem.attribute( QStringLiteral(
"segmentMillimeters" ), QStringLiteral(
"0.0" ) ).toDouble();
643 mSettings.
setMapUnitsPerScaleBarUnit( itemElem.attribute( QStringLiteral(
"numMapUnitsPerScaleBarUnit" ), QStringLiteral(
"1.0" ) ).toDouble() );
644 mSettings.
setLineWidth( itemElem.attribute( QStringLiteral(
"outlineWidth" ), QStringLiteral(
"0.3" ) ).toDouble() );
645 mSettings.
setUnitLabel( itemElem.attribute( QStringLiteral(
"unitLabel" ) ) );
651 f.fromString( itemElem.attribute( QStringLiteral(
"font" ), QLatin1String(
"" ) ) );
657 QDomNodeList fillColorList = itemElem.elementsByTagName( QStringLiteral(
"fillColor" ) );
658 if ( !fillColorList.isEmpty() )
660 QDomElement fillColorElem = fillColorList.at( 0 ).toElement();
661 bool redOk, greenOk, blueOk, alphaOk;
662 int fillRed, fillGreen, fillBlue, fillAlpha;
664 fillRed = fillColorElem.attribute( QStringLiteral(
"red" ) ).toDouble( &redOk );
665 fillGreen = fillColorElem.attribute( QStringLiteral(
"green" ) ).toDouble( &greenOk );
666 fillBlue = fillColorElem.attribute( QStringLiteral(
"blue" ) ).toDouble( &blueOk );
667 fillAlpha = fillColorElem.attribute( QStringLiteral(
"alpha" ) ).toDouble( &alphaOk );
669 if ( redOk && greenOk && blueOk && alphaOk )
671 mSettings.
setFillColor( QColor( fillRed, fillGreen, fillBlue, fillAlpha ) );
676 mSettings.
setFillColor( QColor( itemElem.attribute( QStringLiteral(
"brushColor" ), QStringLiteral(
"#000000" ) ) ) );
680 QDomNodeList fillColor2List = itemElem.elementsByTagName( QStringLiteral(
"fillColor2" ) );
681 if ( !fillColor2List.isEmpty() )
683 QDomElement fillColor2Elem = fillColor2List.at( 0 ).toElement();
684 bool redOk, greenOk, blueOk, alphaOk;
685 int fillRed, fillGreen, fillBlue, fillAlpha;
687 fillRed = fillColor2Elem.attribute( QStringLiteral(
"red" ) ).toDouble( &redOk );
688 fillGreen = fillColor2Elem.attribute( QStringLiteral(
"green" ) ).toDouble( &greenOk );
689 fillBlue = fillColor2Elem.attribute( QStringLiteral(
"blue" ) ).toDouble( &blueOk );
690 fillAlpha = fillColor2Elem.attribute( QStringLiteral(
"alpha" ) ).toDouble( &alphaOk );
692 if ( redOk && greenOk && blueOk && alphaOk )
694 mSettings.
setFillColor2( QColor( fillRed, fillGreen, fillBlue, fillAlpha ) );
699 mSettings.
setFillColor2( QColor( itemElem.attribute( QStringLiteral(
"brush2Color" ), QStringLiteral(
"#ffffff" ) ) ) );
703 QDomNodeList strokeColorList = itemElem.elementsByTagName( QStringLiteral(
"strokeColor" ) );
704 if ( !strokeColorList.isEmpty() )
706 QDomElement strokeColorElem = strokeColorList.at( 0 ).toElement();
707 bool redOk, greenOk, blueOk, alphaOk;
708 int strokeRed, strokeGreen, strokeBlue, strokeAlpha;
710 strokeRed = strokeColorElem.attribute( QStringLiteral(
"red" ) ).toDouble( &redOk );
711 strokeGreen = strokeColorElem.attribute( QStringLiteral(
"green" ) ).toDouble( &greenOk );
712 strokeBlue = strokeColorElem.attribute( QStringLiteral(
"blue" ) ).toDouble( &blueOk );
713 strokeAlpha = strokeColorElem.attribute( QStringLiteral(
"alpha" ) ).toDouble( &alphaOk );
715 if ( redOk && greenOk && blueOk && alphaOk )
717 mSettings.
setLineColor( QColor( strokeRed, strokeGreen, strokeBlue, strokeAlpha ) );
718 QPen p = mSettings.
pen();
725 mSettings.
setLineColor( QColor( itemElem.attribute( QStringLiteral(
"penColor" ), QStringLiteral(
"#000000" ) ) ) );
726 QPen p = mSettings.
pen();
732 QDomNodeList textColorList = itemElem.elementsByTagName( QStringLiteral(
"textColor" ) );
733 if ( !textColorList.isEmpty() )
735 QDomElement textColorElem = textColorList.at( 0 ).toElement();
736 bool redOk, greenOk, blueOk, alphaOk;
737 int textRed, textGreen, textBlue, textAlpha;
739 textRed = textColorElem.attribute( QStringLiteral(
"red" ) ).toDouble( &redOk );
740 textGreen = textColorElem.attribute( QStringLiteral(
"green" ) ).toDouble( &greenOk );
741 textBlue = textColorElem.attribute( QStringLiteral(
"blue" ) ).toDouble( &blueOk );
742 textAlpha = textColorElem.attribute( QStringLiteral(
"alpha" ) ).toDouble( &alphaOk );
744 if ( redOk && greenOk && blueOk && alphaOk )
746 mSettings.
setFontColor( QColor( textRed, textGreen, textBlue, textAlpha ) );
752 c.setNamedColor( itemElem.attribute( QStringLiteral(
"fontColor" ), QStringLiteral(
"#000000" ) ) );
757 QString styleString = itemElem.attribute( QStringLiteral(
"style" ), QLatin1String(
"" ) );
758 setStyle( styleString.toLocal8Bit().data() );
760 if ( itemElem.attribute( QStringLiteral(
"unitType" ) ).isEmpty() )
763 switch ( itemElem.attribute( QStringLiteral(
"units" ) ).toInt() )
784 mSettings.
setAlignment( static_cast< QgsScaleBarSettings::Alignment >( itemElem.attribute( QStringLiteral(
"alignment" ), QStringLiteral(
"0" ) ).toInt() ) );
787 disconnectCurrentMap();
789 mMapUuid = itemElem.attribute( QStringLiteral(
"mapUuid" ) );
796 if (
mLayout && !mMapUuid.isEmpty() )
798 disconnectCurrentMap();
803 connect( mMap, &QObject::destroyed,
this, &QgsLayoutItemScaleBar::disconnectCurrentMap );
QgsUnitTypes::DistanceUnit guessUnits() const
Attempts to guess the most reasonable unit choice for the scalebar, given the current linked map's sc...
void setFontColor(const QColor &color)
Sets the color used for drawing text in the scalebar.
QgsUnitTypes::DistanceUnit lengthUnits() const
Returns the units of distance for length calculations made by this object.
The class is used as a container of context for various read/write operations on other objects...
QColor valueAsColor(int key, const QgsExpressionContext &context, const QColor &defaultColor=QColor(), bool *ok=nullptr) const
Calculates the current value of the property with the specified key and interprets it as a color...
QgsExpressionContext createExpressionContext() const override
This method needs to be reimplemented in all classes which implement this interface and return an exp...
void setMinimumBarWidth(double width)
Sets the minimum width (in millimeters) for scale bar segments.
A rectangle specified with double values.
double mapUnitsPerScaleBarUnit() const
Returns the number of map units per scale bar unit used by the scalebar.
void refreshDataDefinedProperty(const QgsLayoutObject::DataDefinedProperty property=QgsLayoutObject::AllProperties) override
Refreshes a data defined property for the item by reevaluating the property's value and redrawing the...
QBrush brush() const
Returns the primary brush used for filling the scalebar.
QString style() const
Returns the scale bar style name.
void setLineColor(const QColor &color)
Sets the color used for lines in the scalebar.
void setLineJoinStyle(Qt::PenJoinStyle style)
Sets the join style used when drawing the lines in the scalebar.
Base class for graphical items within a QgsLayout.
QgsLayoutSize minimumSize() const override
Returns the minimum allowed size of the item, if applicable, or an empty size if item can be freely r...
QString unitLabel() const
Returns the label for units.
QFont font() const
Returns the font used for drawing text in the scalebar.
double valueAsDouble(int key, const QgsExpressionContext &context, double defaultValue=0.0, bool *ok=nullptr) const
Calculates the current value of the property with the specified key and interprets it as a double...
This class is a composition of two QSettings instances:
QPen pen() const
Returns the pen used for drawing outlines in the scalebar.
double segmentWidth
Width of each individual segment (in millimeters)
QColor fontColor() const
Returns the color used for drawing text in the scalebar.
Alignment alignment() const
Returns the scalebar alignment.
void setPen(const QPen &pen)
Sets the pen used for drawing outlines in the scalebar.
QColor fillColor2() const
Returns the secondary color used for fills in the scalebar.
void setLinkedMap(QgsLayoutItemMap *map)
Sets the map item linked to the scalebar.
A class to represent a 2D point.
void extentChanged()
Is emitted when the map's extent changes.
SegmentSizeMode segmentSizeMode() const
Returns the size mode for the scale bar segments.
void setBoxContentSpace(double space)
Sets the space (margin) between the scalebar box and content in millimeters.
QgsLayoutSize sizeWithUnits() const
Returns the item's current size, including units.
void setLineCapStyle(Qt::PenCapStyle style)
Sets the cap style used when drawing the lines in the scalebar.
double lineWidth() const
Returns the line width in millimeters for lines in the scalebar.
Alignment
Scalebar alignment.
static QIcon getThemeIcon(const QString &name)
Helper to get a theme icon.
void update()
Adjusts the scale bar box size and updates the item.
QgsUnitTypes::DistanceUnit mapUnits
void setAlignment(QgsScaleBarSettings::Alignment alignment)
Sets the scalebar alignment.
bool setEllipsoid(const QString &ellipsoid)
Sets the ellipsoid by its acronym.
QColor lineColor() const
Returns the color used for lines in the scalebar.
static Q_INVOKABLE QgsUnitTypes::DistanceUnit decodeDistanceUnit(const QString &string, bool *ok=nullptr)
Decodes a distance unit from a string.
QFont font() const
Returns the font used for drawing text in the scalebar.
void setSegmentSizeMode(QgsScaleBarSettings::SegmentSizeMode mode)
Sets the size mode for scale bar segments.
void setStyle(const QString &name)
Sets the scale bar style by name.
static Qt::PenJoinStyle decodePenJoinStyle(const QString &str)
QColor fillColor() const
Returns the color used for fills in the scalebar.
int type() const override
void refreshItemSize()
Refreshes an item's size by rechecking it against any possible item fixed or minimum sizes...
double height() const
Returns the scalebar height (in millimeters).
void setMaximumBarWidth(double maxWidth)
Sets the maximum width (in millimeters) for scale bar segments.
void setFillColor(const QColor &color)
Sets the color used for fills in the scalebar.
QgsRectangle extent() const
Returns the current map extent.
Layout graphical items for displaying a map.
static Q_INVOKABLE QString toAbbreviatedString(QgsUnitTypes::DistanceUnit unit)
Returns a translated abbreviation representing a distance unit.
int numberOfSegments() const
Returns the number of segments included in the scalebar.
double scale
Scale denominator.
Scalebar secondary fill color.
QgsPropertyCollection mDataDefinedProperties
const QgsLayout * layout() const
Returns the layout the object is attached to.
void setNumberOfSegments(int segments)
Sets the number of segments included in the scalebar.
double minimumBarWidth() const
Returns the minimum width (in millimeters) for scale bar segments.
void setLineCapStyle(Qt::PenCapStyle style)
Sets the cap style used when drawing the lines in the scalebar.
void resizeToMinimumWidth()
Resizes the scale bar to its minimum width, without changing the height.
This class provides a method of storing measurements for use in QGIS layouts using a variety of diffe...
void setMapUnitsPerScaleBarUnit(double units)
Sets the number of map units per scale bar unit used by the scalebar.
QSizeF size
Destination size for scalebar.
void setAlignment(Alignment alignment)
Sets the scalebar alignment.
QgsUnitTypes::DistanceUnit units() const
Returns the distance units used by the scalebar.
double width() const
Returns the width of the rectangle.
void finalizeRestoreFromXml() override
Called after all pending items have been restored from XML.
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
QgsRenderContext & renderContext()
Returns a reference to the context's render context.
double boxContentSpace() const
Returns the spacing (margin) between the scalebar box and content in millimeters. ...
void setMinimumBarWidth(double minWidth)
Sets the minimum width (in millimeters) for scale bar segments.
double labelBarSpace() const
Returns the spacing (in millimeters) between labels and the scalebar.
QPointer< QgsLayout > mLayout
virtual void attemptResize(const QgsLayoutSize &size, bool includesFrame=false)
Attempts to resize the item to a specified target size.
void setMaximumBarWidth(double width)
Sets the maximum width (in millimeters) for scale bar segments.
Degrees, for planar geographic CRS distance measurements.
void setBoxContentSpace(double space)
Sets the space (margin) between the scalebar box and content in millimeters.
void setUnitsPerSegment(double units)
Sets the number of scalebar units per segment.
static bool setFromXmlChildNode(QFont &font, const QDomElement &element, const QString &childNode)
Sets the properties of a font to match the properties stored in an XML child node.
void setFont(const QFont &font)
Sets the font used for drawing text in the scalebar.
void setSegmentSizeMode(SegmentSizeMode mode)
Sets the size mode for scale bar segments.
QgsUnitTypes::LayoutUnit units() const
Returns the units for the size.
static Qt::PenCapStyle decodePenCapStyle(const QString &str)
double unitsPerSegment() const
Returns the number of scalebar units per segment.
void setFillColor2(const QColor &color)
Sets the secondary color used for fills in the scalebar.
void setUnitLabel(const QString &label)
Sets the label for units.
SegmentSizeMode
Modes for setting size for scale bar segments.
Base class for layouts, which can contain items such as maps, labels, scalebars, etc.
Scale bar segment size is fixed to a map unit.
QIcon icon() const override
Returns the item's icon.
double maximumBarWidth() const
Returns the maximum width (in millimeters) for scale bar segments.
bool readPropertiesFromElement(const QDomElement &element, const QDomDocument &document, const QgsReadWriteContext &context) override
Sets item state from a DOM element.
static Q_INVOKABLE QString encodeUnit(QgsUnitTypes::DistanceUnit unit)
Encodes a distance unit to a string.
void setBackgroundEnabled(bool drawBackground)
Sets whether this item has a background drawn under it or not.
void setFont(const QFont &font)
Sets the font used for drawing text in the scalebar.
double yMinimum() const
Returns the y minimum value (bottom side of rectangle).
Contains settings and helpers relating to a render of a QgsLayoutItem.
DistanceUnit
Units of distance.
double xMaximum() const
Returns the x maximum value (right side of rectangle).
void setHeight(double height)
Sets the scalebar height (in millimeters).
A general purpose distance and area calculator, capable of performing ellipsoid based calculations...
QgsLayoutItemScaleBar(QgsLayout *layout)
Constructor for QgsLayoutItemScaleBar, with the specified parent layout.
void draw(QgsLayoutItemRenderContext &context) override
Draws the item's contents using the specified item render context.
QgsCoordinateReferenceSystem crs() const
Returns coordinate reference system used for rendering the map.
void setUnits(QgsUnitTypes::DistanceUnit units)
Sets the distance units used by the scalebar.
void setLineJoinStyle(Qt::PenJoinStyle style)
Sets the join style used when drawing the lines in the scalebar.
QVariant value(const QString &key, const QVariant &defaultValue=QVariant(), const Section section=NoSection) const
Returns the value for setting key.
double scale() const
Returns the map scale.
void setLineWidth(double width)
Sets the line width in millimeters for lines in the scalebar.
virtual QString uuid() const
Returns the item identification string.
This class represents a coordinate reference system (CRS).
void setLabelBarSpace(double space)
Sets the spacing (in millimeters) between labels and the scalebar.
bool writePropertiesToElement(QDomElement &element, QDomDocument &document, const QgsReadWriteContext &context) const override
Stores item state within an XML DOM element.
void applyDefaultSettings()
Applies the default scalebar settings to the scale bar.
void setBrush2(const QBrush &brush)
Sets the secondary brush used for filling the scalebar.
virtual void refreshDataDefinedProperty(const QgsLayoutObject::DataDefinedProperty property=QgsLayoutObject::AllProperties)
Refreshes a data defined property for the item by reevaluating the property's value and redrawing the...
double xMinimum() const
Returns the x minimum value (left side of rectangle).
A layout item subclass for scale bars.
void setNumberOfSegmentsLeft(int segments)
Sets the number of segments included in the left part of the scalebar.
double unitsPerSegment() const
Returns the number of scalebar units per segment.
Qt::PenCapStyle lineCapStyle() const
Returns the cap style used for drawing lines in the scalebar.
void setSourceCrs(const QgsCoordinateReferenceSystem &crs, const QgsCoordinateTransformContext &context)
Sets source spatial reference system crs.
void setNumberOfSegmentsLeft(int segments)
Sets the number of segments included in the left part of the scalebar.
static QDomElement toXmlElement(const QFont &font, QDomDocument &document, const QString &elementName)
Returns a DOM element containing the properties of the font.
QBrush brush2() const
Returns the secondary brush for the scalebar.
static QString encodePenCapStyle(Qt::PenCapStyle style)
double prevNiceNumber(double a, double d=1)
This class provides a method of storing sizes, consisting of a width and height, for use in QGIS layo...
Qt::PenJoinStyle lineJoinStyle() const
Returns the join style used for drawing lines in the scalebar.
static Q_INVOKABLE double fromUnitToUnitFactor(QgsUnitTypes::DistanceUnit fromUnit, QgsUnitTypes::DistanceUnit toUnit)
Returns the conversion factor between the specified distance units.
int numberOfSegmentsLeft() const
Returns the number of segments included in the left part of the scalebar.
void setUnits(QgsUnitTypes::DistanceUnit units)
Sets the distance units used by the scalebar.
void changed()
Emitted when the object's properties change.
DataDefinedProperty
Data defined properties for different item types.
void setUnitsPerSegment(double units)
Sets the number of scalebar units per segment.
double nextNiceNumber(double a, double d=1)
void setBrush(const QBrush &brush)
Sets the primary brush used for filling the scalebar.
void setUnitLabel(const QString &label)
Sets the label for units.
double measureLine(const QVector< QgsPointXY > &points) const
Measures the length of a line with multiple segments.
static QString encodePenJoinStyle(Qt::PenJoinStyle style)
void applyDefaultSize(QgsUnitTypes::DistanceUnit units=QgsUnitTypes::DistanceMeters)
Applies the default size to the scale bar (scale bar 1/5 of map item width)
void setWidth(const double width)
Sets the width for the size.
void setNumberOfSegments(int segments)
Sets the number of segments included in the scalebar.
Render ticks crossing line.
static QgsLayoutItemScaleBar * create(QgsLayout *layout)
Returns a new scale bar item for the specified layout.
QgsUnitTypes::DistanceUnit units() const
Returns the distance units used by the scalebar.
Contains parameters regarding scalebar calculations.