37#define CACHE_SIZE_LIMIT 5000 
   40class QgsLayoutItemElevationProfilePlot : 
public Qgs2DPlot 
   44    QgsLayoutItemElevationProfilePlot()
 
   58        rc.
painter()->translate( plotArea.left(), plotArea.top() );
 
   59        mRenderer->render( rc, plotArea.width(), plotArea.height(), xMinimum() * xScale, 
xMaximum() * xScale, 
yMinimum(), 
yMaximum() );
 
   60        rc.
painter()->translate( -plotArea.left(), -plotArea.top() );
 
   75  , mPlot( std::make_unique< QgsLayoutItemElevationProfilePlot >() )
 
   77  mBackgroundUpdateTimer = 
new QTimer( 
this );
 
   78  mBackgroundUpdateTimer->setSingleShot( 
true );
 
   79  connect( mBackgroundUpdateTimer, &QTimer::timeout, 
this, &QgsLayoutItemElevationProfile::recreateCachedImageInBackground );
 
   81  setCacheMode( QGraphicsItem::NoCache );
 
 
  103    mRenderJob->cancelGeneration(); 
 
 
  127  bool forceUpdate = 
false;
 
  132    double value = mTolerance;
 
  152    double value = mPlot->xMinimum();
 
  163      mPlot->setXMinimum( value );
 
  172    double value = mPlot->xMaximum();
 
  183      mPlot->setXMaximum( value );
 
  192    double value = mPlot->yMinimum();
 
  203      mPlot->setYMinimum( value );
 
  212    double value = mPlot->yMaximum();
 
  223      mPlot->setYMaximum( value );
 
  232    double value = mPlot->xAxis().gridIntervalMajor();
 
  243      mPlot->xAxis().setGridIntervalMajor( value );
 
  252    double value = mPlot->xAxis().gridIntervalMinor();
 
  263      mPlot->xAxis().setGridIntervalMinor( value );
 
  272    double value = mPlot->xAxis().labelInterval();
 
  283      mPlot->xAxis().setLabelInterval( value );
 
  292    double value = mPlot->yAxis().gridIntervalMajor();
 
  303      mPlot->yAxis().setGridIntervalMajor( value );
 
  312    double value = mPlot->yAxis().gridIntervalMinor();
 
  323      mPlot->yAxis().setGridIntervalMinor( value );
 
  332    double value = mPlot->yAxis().labelInterval();
 
  343      mPlot->yAxis().setLabelInterval( value );
 
  352    double value = mPlot->margins().left();
 
  365      mPlot->setMargins( margins );
 
  374    double value = mPlot->margins().right();
 
  387      mPlot->setMargins( margins );
 
  396    double value = mPlot->margins().top();
 
  409      mPlot->setMargins( margins );
 
  418    double value = mPlot->margins().bottom();
 
  431      mPlot->setMargins( margins );
 
  439    mCacheInvalidated = 
true;
 
 
  455  return blendMode() != QPainter::CompositionMode_SourceOver;
 
 
  460  return mEvaluatedOpacity < 1.0;
 
 
  475  return _qgis_listRefToRaw( mLayers );
 
 
  480  if ( 
layers == _qgis_listRefToRaw( mLayers ) )
 
  483  mLayers = _qgis_listRawToRef( 
layers );
 
 
  489  mCurve.reset( curve );
 
 
  528  mAtlasDriven = enabled;
 
 
  554  if ( !
mLayout || !painter || !painter->device() || !mUpdatesEnabled )
 
  563  QRectF thisPaintRect = rect();
 
  567  if ( 
mLayout->renderContext().isPreviewRender() )
 
  573    painter->setClipRect( thisPaintRect );
 
  574    if ( !mCacheFinalImage || mCacheFinalImage->isNull() )
 
  577      painter->setBrush( QBrush( QColor( 125, 125, 125, 125 ) ) );
 
  578      painter->drawRect( thisPaintRect );
 
  579      painter->setBrush( Qt::NoBrush );
 
  581      messageFont.setPointSize( 12 );
 
  582      painter->setFont( messageFont );
 
  583      painter->setPen( QColor( 255, 255, 255, 255 ) );
 
  584      painter->drawText( thisPaintRect, Qt::AlignCenter | Qt::AlignHCenter, tr( 
"Rendering profile" ) );
 
  587        ( mRenderJob && mCacheInvalidated && !mDrawingPreview ) 
 
  589        ( !mRenderJob && !mDrawingPreview ) 
 
  594        mBackgroundUpdateTimer->start( 1 );
 
  599      if ( mCacheInvalidated && !mDrawingPreview )
 
  603        mBackgroundUpdateTimer->start( 1 );
 
  608      double imagePixelWidth = mCacheFinalImage->width(); 
 
  609      double scale = rect().width() / imagePixelWidth;
 
  613      painter->scale( scale, scale );
 
  614      painter->setCompositionMode( blendModeForRender() );
 
  615      painter->drawImage( 0, 0, *mCacheFinalImage );
 
  618    painter->setClipRect( thisPaintRect, Qt::NoClip );
 
  631    QPaintDevice *paintDevice = painter->device();
 
  638      painter->setRenderHint( QPainter::LosslessImageRendering, 
true );
 
  650        int widthInPixels = 
static_cast< int >( std::round( boundingRect().width() * layoutUnitsInInches * destinationDpi ) );
 
  651        int heightInPixels = 
static_cast< int >( std::round( boundingRect().height() * layoutUnitsInInches * destinationDpi ) );
 
  652        QImage image = QImage( widthInPixels, heightInPixels, QImage::Format_ARGB32 );
 
  654        image.fill( Qt::transparent );
 
  655        image.setDotsPerMeterX( 
static_cast< int >( std::round( 1000 * destinationDpi / 25.4 ) ) );
 
  656        image.setDotsPerMeterY( 
static_cast< int >( std::round( 1000 * destinationDpi / 25.4 ) ) );
 
  657        double dotsPerMM = destinationDpi / 25.4;
 
  658        layoutSize *= dotsPerMM; 
 
  659        QPainter p( &image );
 
  660        preparePainter( &p );
 
  665        p.scale( dotsPerMM, dotsPerMM );
 
  671        p.scale( 1.0 / dotsPerMM, 1.0 / dotsPerMM );
 
  673        const double mapUnitsPerPixel = 
static_cast<double>( mPlot->xMaximum() - mPlot->xMinimum() ) * mPlot->xScale / layoutSize.width();
 
  676        QList< QgsAbstractProfileSource * > sources;
 
  681            sources.append( source );
 
  687        mPlot->setRenderer( &renderer );
 
  690        mPlot->setSize( layoutSize );
 
  694        mPlot->setRenderer( 
nullptr );
 
  696        p.scale( dotsPerMM, dotsPerMM );
 
  704        painter->setCompositionMode( blendModeForRender() );
 
  705        painter->scale( 1 / dotsPerMM, 1 / dotsPerMM ); 
 
  706        painter->drawImage( 0, 0, image );
 
  707        painter->scale( dotsPerMM, dotsPerMM );
 
  722        double dotsPerMM = paintDevice->logicalDpiX() / 25.4;
 
  723        layoutSize *= dotsPerMM; 
 
  724        painter->scale( 1 / dotsPerMM, 1 / dotsPerMM ); 
 
  726        const double mapUnitsPerPixel = 
static_cast<double>( mPlot->xMaximum() - mPlot->xMinimum() ) * mPlot->xScale / layoutSize.width();
 
  729        QList< QgsAbstractProfileSource * > sources;
 
  734            sources.append( source );
 
  747        mPlot->setRenderer( &renderer );
 
  750        mPlot->setSize( layoutSize );
 
  754        mPlot->setRenderer( 
nullptr );
 
  756        painter->setClipRect( thisPaintRect, Qt::NoClip );
 
 
  771  if ( mAtlasDriven && 
mLayout && 
mLayout->reportContext().layer() )
 
  780      if ( 
const QgsCurve *curve = qgsgeometry_cast< const QgsCurve * >( geom->simplifiedTypeRef() ) )
 
  782        mCurve.reset( curve->clone() );
 
 
  795  mCacheInvalidated = 
true;
 
 
  806    QDomElement plotElement = doc.createElement( QStringLiteral( 
"plot" ) );
 
  807    mPlot->writeXml( plotElement, doc, rwContext );
 
  808    layoutProfileElem.appendChild( plotElement );
 
  811  layoutProfileElem.setAttribute( QStringLiteral( 
"distanceUnit" ), 
qgsEnumValueToKey( mDistanceUnit ) );
 
  813  layoutProfileElem.setAttribute( QStringLiteral( 
"tolerance" ), mTolerance );
 
  814  layoutProfileElem.setAttribute( QStringLiteral( 
"atlasDriven" ), mAtlasDriven ? QStringLiteral( 
"1" ) : QStringLiteral( 
"0" ) );
 
  817    QDomElement crsElem = doc.createElement( QStringLiteral( 
"crs" ) );
 
  819    layoutProfileElem.appendChild( crsElem );
 
  823    QDomElement curveElem = doc.createElement( QStringLiteral( 
"curve" ) );
 
  824    curveElem.appendChild( doc.createTextNode( mCurve->asWkt( ) ) );
 
  825    layoutProfileElem.appendChild( curveElem );
 
  829    QDomElement layersElement = doc.createElement( QStringLiteral( 
"layers" ) );
 
  832      QDomElement layerElement = doc.createElement( QStringLiteral( 
"layer" ) );
 
  833      layer.writeXml( layerElement, rwContext );
 
  834      layersElement.appendChild( layerElement );
 
  836    layoutProfileElem.appendChild( layersElement );
 
 
  844  const QDomElement plotElement = itemElem.firstChildElement( QStringLiteral( 
"plot" ) );
 
  845  if ( !plotElement.isNull() )
 
  847    mPlot->readXml( plotElement, context );
 
  850  const QDomNodeList crsNodeList = itemElem.elementsByTagName( QStringLiteral( 
"crs" ) );
 
  852  if ( !crsNodeList.isEmpty() )
 
  854    const QDomElement crsElem = crsNodeList.at( 0 ).toElement();
 
  861  const QDomNodeList curveNodeList = itemElem.elementsByTagName( QStringLiteral( 
"curve" ) );
 
  862  if ( !curveNodeList.isEmpty() )
 
  864    const QDomElement curveElem = curveNodeList.at( 0 ).toElement();
 
  866    if ( 
const QgsCurve *curveGeom = qgsgeometry_cast< const QgsCurve * >( curve.
constGet() ) )
 
  868      mCurve.reset( curveGeom->clone() );
 
  876  mTolerance = itemElem.attribute( QStringLiteral( 
"tolerance" ) ).toDouble();
 
  877  mAtlasDriven = 
static_cast< bool >( itemElem.attribute( QStringLiteral( 
"atlasDriven" ), QStringLiteral( 
"0" ) ).toInt() );
 
  881    const QDomElement layersElement = itemElem.firstChildElement( QStringLiteral( 
"layers" ) );
 
  882    QDomElement layerElement = layersElement.firstChildElement( QStringLiteral( 
"layer" ) );
 
  883    while ( !layerElement.isNull() )
 
  886      ref.
readXml( layerElement, context );
 
  888      mLayers.append( ref );
 
  890      layerElement = layerElement.nextSiblingElement( QStringLiteral( 
"layer" ) );
 
 
  897void QgsLayoutItemElevationProfile::recreateCachedImageInBackground()
 
  903    QPainter *oldPainter = mPainter.release();
 
  904    QImage *oldImage = mCacheRenderingImage.release();
 
  907      oldJob->deleteLater();
 
  915    mCacheRenderingImage.reset( 
nullptr );
 
  919  Q_ASSERT( !mRenderJob );
 
  920  Q_ASSERT( !mPainter );
 
  921  Q_ASSERT( !mCacheRenderingImage );
 
  924  double widthLayoutUnits = layoutSize.width();
 
  925  double heightLayoutUnits = layoutSize.height();
 
  927  int w = 
static_cast< int >( std::round( widthLayoutUnits * mPreviewScaleFactor ) );
 
  928  int h = 
static_cast< int >( std::round( heightLayoutUnits * mPreviewScaleFactor ) );
 
  931  if ( w > 5000 || h > 5000 )
 
  936      h = 
static_cast< int>( std::round( w * heightLayoutUnits / widthLayoutUnits ) );
 
  941      w = 
static_cast< int >( std::round( h * widthLayoutUnits / heightLayoutUnits ) );
 
  945  if ( w <= 0 || h <= 0 )
 
  948  mCacheRenderingImage.reset( 
new QImage( w, h, QImage::Format_ARGB32 ) );
 
  951  mCacheRenderingImage->setDotsPerMeterX( 
static_cast< int >( std::round( 1000 * w / widthLayoutUnits ) ) );
 
  952  mCacheRenderingImage->setDotsPerMeterY( 
static_cast< int >( std::round( 1000 * h / heightLayoutUnits ) ) );
 
  955  mCacheRenderingImage->fill( Qt::transparent );
 
  962  mCacheInvalidated = 
false;
 
  963  mPainter.reset( 
new QPainter( mCacheRenderingImage.get() ) );
 
  965  QList< QgsAbstractProfileSource * > sources;
 
  970      sources.append( source );
 
  973  mRenderJob = std::make_unique< QgsProfilePlotRenderer >( sources, 
profileRequest() );
 
  975  mRenderJob->startGeneration();
 
  977  mDrawingPreview = 
false;
 
  980void QgsLayoutItemElevationProfile::profileGenerationFinished()
 
  982  mPlot->setRenderer( mRenderJob.get() );
 
  988  const double mapUnitsPerPixel = 
static_cast< double >( mPlot->xMaximum() - mPlot->xMinimum() ) * mPlot->xScale /
 
  989                                  mCacheRenderingImage->size().width();
 
  993  mPlot->setSize( mCacheRenderingImage->size() );
 
  997  mPlot->setRenderer( 
nullptr );
 
 1000  mRenderJob.reset( 
nullptr );
 
 1001  mPainter.reset( 
nullptr );
 
 1002  mCacheFinalImage = std::move( mCacheRenderingImage );
 
 1010  return mDistanceUnit;
 
 
 1015  mDistanceUnit = unit;
 
 1017  switch ( mDistanceUnit )
 
 1032      mPlot->xAxis().setLabelSuffix( QObject::tr( 
"°" ) );
 
 1036      mPlot->xAxis().setLabelSuffix( QString() );
 
 
DistanceUnit
Units of distance.
 
@ Centimeters
Centimeters.
 
@ Millimeters
Millimeters.
 
@ Miles
Terrestrial miles.
 
@ Unknown
Unknown distance unit.
 
@ Degrees
Degrees, for planar geographic CRS distance measurements.
 
@ Inches
Inches (since QGIS 3.32)
 
@ NauticalMiles
Nautical miles.
 
Base class for 2-dimensional plot/chart/graphs.
 
double yMaximum() const
Returns the maximum value of the y axis.
 
double xMaximum() const
Returns the maximum value of the x axis.
 
double yMinimum() const
Returns the minimum value of the y axis.
 
virtual void renderContent(QgsRenderContext &context, const QRectF &plotArea)
Renders the plot content.
 
Abstract base class for all geometries.
 
Interface for classes which can generate elevation profiles.
 
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.
 
Abstract base class for terrain providers.
 
static QIcon getThemeIcon(const QString &name, const QColor &fillColor=QColor(), const QColor &strokeColor=QColor())
Helper to get a theme icon.
 
static QgsProfileSourceRegistry * profileSourceRegistry()
Returns registry of available profile source implementations.
 
This class represents a coordinate reference system (CRS).
 
bool isValid() const
Returns whether this CRS is correctly initialized and usable.
 
bool readXml(const QDomNode &node)
Restores state from the given DOM node.
 
bool writeXml(QDomNode &node, QDomDocument &doc) const
Stores state to the given Dom node in the given document.
 
Qgis::DistanceUnit mapUnits
 
Abstract base class for curved geometry type.
 
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
 
A geometry is the spatial representation of a feature.
 
const QgsAbstractGeometry * constGet() const
Returns a non-modifiable (const) reference to the underlying abstract geometry primitive.
 
static Q_INVOKABLE QgsGeometry fromWkt(const QString &wkt)
Creates a new geometry from a WKT string.
 
A layout item subclass for elevation profile plots.
 
static QgsLayoutItemElevationProfile * create(QgsLayout *layout)
Returns a new elevation profile item for the specified layout.
 
~QgsLayoutItemElevationProfile() override
 
QgsCurve * profileCurve() const
Returns the cross section profile curve, which represents the line along which the profile should be ...
 
void refreshDataDefinedProperty(QgsLayoutObject::DataDefinedProperty property=QgsLayoutObject::DataDefinedProperty::AllProperties) override
Refreshes a data defined property for the item by reevaluating the property's value and redrawing the...
 
void setLayers(const QList< QgsMapLayer * > &layers)
Sets the list of map layers participating in the elevation profile.
 
QList< QgsMapLayer * > layers() const
Returns the list of map layers participating in the elevation profile.
 
void invalidateCache() override
 
void setCrs(const QgsCoordinateReferenceSystem &crs)
Sets the desired Coordinate Reference System (crs) for the profile.
 
bool writePropertiesToElement(QDomElement &element, QDomDocument &document, const QgsReadWriteContext &context) const override
Stores item state within an XML DOM element.
 
void draw(QgsLayoutItemRenderContext &context) override
Draws the item's contents using the specified item render context.
 
QgsLayoutItem::Flags itemFlags() const override
Returns the item's flags, which indicate how the item behaves.
 
void setDistanceUnit(Qgis::DistanceUnit unit)
Sets the unit for the distance axis.
 
Qgs2DPlot * plot()
Returns a reference to the elevation plot object, which can be used to set plot appearance and proper...
 
void setTolerance(double tolerance)
Sets the tolerance of the request (in crs() units).
 
QgsCoordinateReferenceSystem crs() const
Returns the desired Coordinate Reference System for the profile.
 
void setAtlasDriven(bool enabled)
Sets whether the profile curve will follow the current atlas feature.
 
double tolerance() const
Returns the tolerance of the request (in crs() units).
 
Qgis::DistanceUnit distanceUnit() const
Returns the units for the distance axis.
 
bool requiresRasterization() const override
Returns true if the item is drawn in such a way that forces the whole layout to be rasterized when ex...
 
bool containsAdvancedEffects() const override
Returns true if the item contains contents with blend modes or transparency effects which can only be...
 
void paint(QPainter *painter, const QStyleOptionGraphicsItem *itemStyle, QWidget *pWidget) override
 
QIcon icon() const override
Returns the item's icon.
 
void previewRefreshed()
Emitted whenever the item's preview has been refreshed.
 
void setProfileCurve(QgsCurve *curve)
Sets the cross section profile curve, which represents the line along which the profile should be gen...
 
bool readPropertiesFromElement(const QDomElement &element, const QDomDocument &document, const QgsReadWriteContext &context) override
Sets item state from a DOM element.
 
QgsProfileRequest profileRequest() const
Returns the profile request used to generate the elevation profile.
 
int type() const override
 
@ LayoutElevationProfile
Elevation profile item (since QGIS 3.30)
 
Contains settings and helpers relating to a render of a QgsLayoutItem.
 
Base class for graphical items within a QgsLayout.
 
virtual void drawFrame(QgsRenderContext &context)
Draws the frame around the item.
 
QColor backgroundColor(bool useDataDefined=true) const
Returns the background color for this item.
 
virtual void refreshDataDefinedProperty(QgsLayoutObject::DataDefinedProperty property=QgsLayoutObject::DataDefinedProperty::AllProperties)
Refreshes a data defined property for the item by reevaluating the property's value and redrawing the...
 
QgsLayoutSize sizeWithUnits() const
Returns the item's current size, including units.
 
void refreshItemSize()
Refreshes an item's size by rechecking it against any possible item fixed or minimum sizes.
 
QgsExpressionContext createExpressionContext() const override
This method needs to be reimplemented in all classes which implement this interface and return an exp...
 
virtual void drawBackground(QgsRenderContext &context)
Draws the background for the item.
 
bool shouldDrawItem() const
Returns whether the item should be drawn in the current context.
 
@ FlagOverridesPaint
Item overrides the default layout item painting method.
 
@ FlagDisableSceneCaching
Item should not have QGraphicsItem caching enabled.
 
void sizePositionChanged()
Emitted when the item's size or position changes.
 
bool frameEnabled() const
Returns true if the item includes a frame.
 
bool hasBackground() const
Returns true if the item has a background.
 
void refresh() override
Refreshes the item, causing a recalculation of any property overrides and recalculation of its positi...
 
friend class QgsLayoutItemElevationProfile
 
void setBackgroundEnabled(bool drawBackground)
Sets whether this item has a background drawn under it or not.
 
QPainter::CompositionMode blendMode() const
Returns the item's composition blending mode.
 
void backgroundTaskCountChanged(int count)
Emitted whenever the number of background tasks an item is executing changes.
 
QgsPropertyCollection mDataDefinedProperties
 
const QgsLayout * layout() const
Returns the layout the object is attached to.
 
QPointer< QgsLayout > mLayout
 
DataDefinedProperty
Data defined properties for different item types.
 
@ ElevationProfileMaximumDistance
Maximum distance value for elevation profile (since QGIS 3.30)
 
@ MarginBottom
Bottom margin (since QGIS 3.30)
 
@ ElevationProfileElevationMinorInterval
Minor grid line interval for elevation profile elevation axis (since QGIS 3.30)
 
@ ElevationProfileDistanceMinorInterval
Minor grid line interval for elevation profile distance axis (since QGIS 3.30)
 
@ ElevationProfileMinimumDistance
Minimum distance value for elevation profile (since QGIS 3.30)
 
@ ElevationProfileMaximumElevation
Maximum elevation value for elevation profile (since QGIS 3.30)
 
@ ElevationProfileDistanceLabelInterval
Label interval for elevation profile distance axis (since QGIS 3.30)
 
@ ElevationProfileTolerance
Tolerance distance for elevation profiles (since QGIS 3.30)
 
@ ElevationProfileMinimumElevation
Minimum elevation value for elevation profile (since QGIS 3.30)
 
@ MarginLeft
Left margin (since QGIS 3.30)
 
@ MarginRight
Right margin (since QGIS 3.30)
 
@ ElevationProfileElevationLabelInterval
Label interval for elevation profile elevation axis (since QGIS 3.30)
 
@ ElevationProfileDistanceMajorInterval
Major grid line interval for elevation profile distance axis (since QGIS 3.30)
 
@ ElevationProfileElevationMajorInterval
Major grid line interval for elevation profile elevation axis (since QGIS 3.30)
 
@ AllProperties
All properties for item.
 
@ MarginTop
Top margin (since QGIS 3.30)
 
@ FlagLosslessImageRendering
Render images losslessly whenever possible, instead of the default lossy jpeg rendering used for some...
 
@ FlagForceVectorOutput
Force output in vector format where possible, even if items require rasterization to keep their corre...
 
static QgsRenderContext createRenderContextForLayout(QgsLayout *layout, QPainter *painter, double dpi=-1)
Creates a render context suitable for the specified layout and painter destination.
 
static Q_DECL_DEPRECATED double scaleFactorFromItemStyle(const QStyleOptionGraphicsItem *style)
Extracts the scale factor from an item style.
 
Base class for layouts, which can contain items such as maps, labels, scalebars, etc.
 
void refreshed()
Emitted when the layout has been refreshed and items should also be refreshed and updated.
 
Perform transforms between map coordinates and device coordinates.
 
The QgsMargins class defines the four margins of a rectangle.
 
void setBottom(double bottom)
Sets the bottom margin to bottom.
 
void setLeft(double left)
Sets the left margin to left.
 
void setRight(double right)
Sets the right margin to right.
 
void setTop(double top)
Sets the top margin to top.
 
static void logMessage(const QString &message, const QString &tag=QString(), Qgis::MessageLevel level=Qgis::MessageLevel::Warning, bool notifyUser=true)
Adds a message to the log instance (and creates it if necessary).
 
Generates and renders elevation profile plots.
 
void cancelGenerationWithoutBlocking()
Triggers cancellation of the generation job without blocking.
 
void generateSynchronously()
Generate the profile results synchronously in this thread.
 
void generationFinished()
Emitted when the profile generation is finished (or canceled).
 
Encapsulates properties and constraints relating to fetching elevation profiles from different source...
 
QgsProfileRequest & setExpressionContext(const QgsExpressionContext &context)
Sets the expression context used to evaluate expressions.
 
QgsProfileRequest & setTransformContext(const QgsCoordinateTransformContext &context)
Sets the transform context, for use when transforming coordinates from a source to the request's crs(...
 
QgsProfileRequest & setTerrainProvider(QgsAbstractTerrainProvider *provider)
Sets the terrain provider.
 
QgsProfileRequest & setTolerance(double tolerance)
Sets the tolerance of the request (in crs() units).
 
QgsProfileRequest & setCrs(const QgsCoordinateReferenceSystem &crs)
Sets the desired Coordinate Reference System (crs) for the profile.
 
QList< QgsAbstractProfileSource * > profileSources() const
Returns a list of registered profile sources.
 
Encapsulates a QGIS project, including sets of map layers and their styles, layouts,...
 
bool isActive(int key) const final
Returns true if the collection contains an active property with the specified key.
 
The class is used as a container of context for various read/write operations on other objects.
 
Contains information about the context of a rendering operation.
 
QPainter * painter()
Returns the destination QPainter for the render operation.
 
void setMapToPixel(const QgsMapToPixel &mtp)
Sets the context's map to pixel transform, which transforms between map coordinates and device coordi...
 
void setExpressionContext(const QgsExpressionContext &context)
Sets the expression context.
 
Scoped object for saving and restoring a QPainter object's state.
 
static Q_INVOKABLE double fromUnitToUnitFactor(Qgis::DistanceUnit fromUnit, Qgis::DistanceUnit toUnit)
Returns the conversion factor between the specified distance units.
 
static Q_INVOKABLE QString toAbbreviatedString(Qgis::DistanceUnit unit)
Returns a translated abbreviation representing a distance unit.
 
Represents a vector layer which manages a vector based data sets.
 
T qgsEnumKeyToValue(const QString &key, const T &defaultValue, bool tryValueAsKey=true, bool *returnOk=nullptr)
Returns the value corresponding to the given key of an enum.
 
QString qgsEnumValueToKey(const T &value, bool *returnOk=nullptr)
Returns the value for the given key of an enum.
 
bool qgsDoubleNear(double a, double b, double epsilon=4 *std::numeric_limits< double >::epsilon())
Compare two doubles (but allow some difference)
 
const QgsCoordinateReferenceSystem & crs
 
TYPE * resolveWeakly(const QgsProject *project, MatchType matchType=MatchType::All)
Resolves the map layer by attempting to find a matching layer in a project using a weak match.
 
bool readXml(const QDomElement &element, const QgsReadWriteContext &context)
Reads the layer's properties from an XML element.