QGIS API Documentation
3.16.0-Hannover (43b64b13f3)
|
Go to the documentation of this file.
21 #include <QApplication>
25 #include <QGraphicsItem>
26 #include <QGraphicsScene>
27 #include <QGraphicsView>
30 #include <QPaintEvent>
33 #include <QTextStream>
34 #include <QResizeEvent>
37 #include <QStringList>
38 #include <QWheelEvent>
119 : QGraphicsView( parent )
121 , mMenu( new QMenu( this ) )
122 , mExpressionContextScope( tr(
"Map Canvas" ) )
124 mScene =
new QGraphicsScene();
126 setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff );
127 setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff );
128 setMouseTracking(
true );
129 setFocusPolicy( Qt::StrongFocus );
131 mResizeTimer =
new QTimer(
this );
132 mResizeTimer->setSingleShot(
true );
135 mRefreshTimer =
new QTimer(
this );
136 mRefreshTimer->setSingleShot(
true );
137 connect( mRefreshTimer, &QTimer::timeout,
this, &QgsMapCanvas::refreshMap );
140 mMap =
new QgsMapCanvasMap(
this );
182 double segmentationTolerance = settings.
value( QStringLiteral(
"qgis/segmentationTolerance" ),
"0.01745" ).toDouble();
187 mWheelZoomFactor = settings.
value( QStringLiteral(
"qgis/zoom_factor" ), 2 ).toDouble();
189 QSize s = viewport()->size();
192 setSceneRect( 0, 0, s.width(), s.height() );
193 mScene->setSceneRect( QRectF( 0, 0, s.width(), s.height() ) );
198 if ( window()->windowHandle() )
200 connect( window()->windowHandle(), &QWindow::screenChanged,
this, [ = ]( QScreen * ) {mSettings.
setDevicePixelRatio( devicePixelRatio() );} );
201 connect( window()->windowHandle()->screen(), &QScreen::physicalDotsPerInchChanged,
this, [ = ]( qreal ) {mSettings.
setDevicePixelRatio( devicePixelRatio() );} );
204 connect( &mMapUpdateTimer, &QTimer::timeout,
this, &QgsMapCanvas::mapUpdateTimeout );
205 mMapUpdateTimer.setInterval( 250 );
210 grabGesture( Qt::PinchGesture );
211 grabGesture( Qt::TapAndHoldGesture );
212 viewport()->setAttribute( Qt::WA_AcceptTouchEvents );
216 viewport()->setGraphicsEffect( mPreviewEffect );
220 connect( &mAutoRefreshTimer, &QTimer::timeout,
this, &QgsMapCanvas::autoRefreshTriggered );
224 setInteractive(
false );
243 mLastNonZoomMapTool =
nullptr;
253 QList< QgsMapRendererQImageJob * >::const_iterator previewJob = mPreviewJobs.constBegin();
254 for ( ; previewJob != mPreviewJobs.constEnd(); ++previewJob )
266 qDeleteAll( mScene->items() );
268 mScene->deleteLater();
271 delete mLabelingResults;
279 factor = qBound( magnifierMin, factor, magnifierMax );
308 if ( index >= 0 && index <
layers.size() )
316 if ( mCurrentLayer ==
layer )
319 mCurrentLayer =
layer;
330 return nullptr != mJob;
343 if ( !mTheme.isEmpty() )
346 setLayersPrivate(
layers );
349 void QgsMapCanvas::setLayersPrivate(
const QList<QgsMapLayer *> &layers )
351 QList<QgsMapLayer *> oldLayers = mSettings.
layers();
354 if (
layers == oldLayers )
357 const auto constOldLayers = oldLayers;
370 const auto constLayers =
layers;
386 updateAutoRefreshTimer();
414 QgsDebugMsg( QStringLiteral(
"Transform error caught: %1" ).arg( e.
what() ) );
426 QgsDebugMsgLevel( QStringLiteral(
"refreshing after destination CRS changed" ), 2 );
437 mController = controller;
455 return mLabelingResults;
482 return nullptr != mCache;
493 mUseParallelRendering = enabled;
498 return mUseParallelRendering;
503 mMapUpdateTimer.setInterval( timeMilliseconds );
508 return mMapUpdateTimer.interval();
514 return mCurrentLayer;
529 QgsDebugMsgLevel( QStringLiteral(
"CANVAS refresh - invalid settings -> nothing to do" ), 2 );
533 if ( !mRenderFlag || mFrozen )
539 if ( mRefreshScheduled )
541 QgsDebugMsgLevel( QStringLiteral(
"CANVAS refresh already scheduled" ), 2 );
545 mRefreshScheduled =
true;
550 mRefreshTimer->start( 1 );
553 void QgsMapCanvas::refreshMap()
555 Q_ASSERT( mRefreshScheduled );
570 expressionContext << generator->createExpressionContextScope();
578 if ( !mTheme.isEmpty() )
591 QList<QgsMapLayer *> allLayers = renderSettings.
layers();
597 mJobCanceled =
false;
598 if ( mUseParallelRendering )
613 mRefreshScheduled =
false;
615 mMapUpdateTimer.start();
620 void QgsMapCanvas::mapThemeChanged(
const QString &theme )
622 if (
theme == mTheme )
627 setLayersPrivate(
QgsProject::instance()->mapThemeCollection()->mapThemeVisibleLayers( mTheme ) );
640 void QgsMapCanvas::mapThemeRenamed(
const QString &theme,
const QString &newTheme )
642 if ( mTheme.isEmpty() ||
theme != mTheme )
651 void QgsMapCanvas::rendererJobFinished()
653 QgsDebugMsgLevel( QStringLiteral(
"CANVAS finish! %1" ).arg( !mJobCanceled ), 2 );
655 mMapUpdateTimer.stop();
658 const auto constErrors = mJob->
errors();
672 delete mLabelingResults;
683 if ( settings.
value( QStringLiteral(
"Map/logCanvasRefreshEvent" ),
false ).toBool() )
685 QString logMsg = tr(
"Canvas refresh: %1 ms" ).arg( mJob->
renderingTime() );
689 if ( mDrawRenderingStats )
691 int w = img.width(), h = img.height();
692 QFont fnt = p.font();
695 int lh = p.fontMetrics().height() * 2;
696 QRect r( 0, h - lh, w, lh );
697 p.setPen( Qt::NoPen );
698 p.setBrush( QColor( 0, 0, 0, 110 ) );
700 p.setPen( Qt::white );
701 QString msg = QStringLiteral(
"%1 :: %2 ms" ).arg( mUseParallelRendering ? QStringLiteral(
"PARALLEL" ) : QStringLiteral(
"SEQUENTIAL" ) ).arg( mJob->
renderingTime() );
702 p.drawText( r, msg, QTextOption( Qt::AlignCenter ) );
707 mMap->setContent( img, imageRect( img, mSettings ) );
709 mLastLayerRenderTime.clear();
711 for (
auto it = times.constBegin(); it != times.constEnd(); ++it )
713 mLastLayerRenderTime.insert( it.key()->id(), it.value() );
715 if ( mUsePreviewJobs && !mRefreshAfterJob )
720 mRefreshAfterJob =
false;
730 if ( mRefreshAfterJob )
732 mRefreshAfterJob =
false;
733 clearTemporalCache();
738 void QgsMapCanvas::previewJobFinished()
746 mPreviewJobs.removeAll( job );
748 int number = job->property(
"number" ).toInt();
751 startPreviewJob( number + 1 );
768 QgsLogger::warning( QStringLiteral(
"The renderer map has a wrong device pixel ratio" ) );
772 QgsRectangle rect( topLeft.
x(), topLeft.
y(), topLeft.
x() + img.width()*res, topLeft.
y() - img.height()*res );
778 return mUsePreviewJobs;
783 mUsePreviewJobs = enabled;
788 mDropHandlers = handlers;
791 void QgsMapCanvas::clearTemporalCache()
811 const QgsPointXY mapPoint =
event->originalMapPoint();
815 QMenu *copyCoordinateMenu =
new QMenu( tr(
"Copy Coordinate" ), mMenu );
823 const QgsPointXY transformedPoint = ct.transform( mapPoint );
826 int displayPrecision = 0;
832 displayPrecision = 0;
834 displayPrecision = 1;
836 displayPrecision = 2;
838 displayPrecision = 3;
840 displayPrecision = 4;
842 displayPrecision = 5;
844 displayPrecision = 6;
846 displayPrecision = 7;
848 displayPrecision = 8;
850 displayPrecision = 9;
857 QAction *copyCoordinateAction =
new QAction( QStringLiteral(
"%3 (%1, %2)" ).arg(
858 QString::number( transformedPoint.
x(),
'f', displayPrecision ),
859 QString::number( transformedPoint.
y(),
'f', displayPrecision ),
860 identifier ), mMenu );
862 connect( copyCoordinateAction, &QAction::triggered,
this, [displayPrecision, transformedPoint]
864 QClipboard *clipboard = QApplication::clipboard();
866 const QString coordinates = QString::number( transformedPoint.
x(),
'f', displayPrecision ) +
',' + QString::number( transformedPoint.
y(),
'f', displayPrecision );
869 if ( clipboard->supportsSelection() )
871 clipboard->setText( coordinates, QClipboard::Selection );
873 clipboard->setText( coordinates, QClipboard::Clipboard );
876 copyCoordinateMenu->addAction( copyCoordinateAction );
889 const QString customCrsString = settings.
value( QStringLiteral(
"qgis/custom_coordinate_crs" ) ).toString();
890 if ( !customCrsString.isEmpty() )
898 copyCoordinateMenu->addSeparator();
899 QAction *setCustomCrsAction =
new QAction( tr(
"Set Custom CRS…" ), mMenu );
900 connect( setCustomCrsAction, &QAction::triggered,
this, [ = ]
904 if ( selector.exec() )
909 copyCoordinateMenu->addAction( setCustomCrsAction );
911 mMenu->addMenu( copyCoordinateMenu );
918 mMenu->exec(
event->globalPos() );
927 mSettings.
setIsTemporal( dateTimeRange.begin().isValid() || dateTimeRange.end().isValid() );
934 clearTemporalCache();
936 autoRefreshTriggered();
946 mInteractionBlockers.append( blocker );
951 mInteractionBlockers.removeAll( blocker );
958 if ( block->blockCanvasInteraction( interaction ) )
964 void QgsMapCanvas::mapUpdateTimeout()
969 mMap->setContent( img, imageRect( img, mSettings ) );
998 image = theQPixmap->toImage();
999 painter.begin( &image );
1009 image = mMap->contentImage().copy();
1010 painter.begin( &image );
1014 QStyleOptionGraphicsItem option;
1015 option.initFrom(
this );
1016 QGraphicsItem *item =
nullptr;
1017 QListIterator<QGraphicsItem *> i( items() );
1019 while ( i.hasPrevious() )
1021 item = i.previous();
1030 QPointF itemScenePos = item->scenePos();
1031 painter.translate( itemScenePos.x(), itemScenePos.y() );
1033 item->paint( &painter, &option );
1037 image.save( fileName, format.toLocal8Bit().data() );
1039 QFileInfo myInfo = QFileInfo( fileName );
1042 QString outputSuffix = myInfo.suffix();
1043 QString myWorldFileName = myInfo.absolutePath() +
'/' + myInfo.completeBaseName() +
'.'
1044 + outputSuffix.at( 0 ) + outputSuffix.at( myInfo.suffix().size() - 1 ) +
'w';
1045 QFile myWorldFile( myWorldFileName );
1046 if ( !myWorldFile.open( QIODevice::WriteOnly | QIODevice::Truncate ) )
1050 QTextStream myStream( &myWorldFile );
1071 if ( ( r == current ) && magnified )
1084 QgsDebugMsgLevel( QStringLiteral(
"Empty extent - keeping old scale with new center!" ), 2 );
1092 if ( mScaleLocked && magnified )
1094 ScaleRestorer restorer(
this );
1111 for (
int i = mLastExtent.size() - 1; i > mLastExtentIndex; i-- )
1113 mLastExtent.removeAt( i );
1116 mLastExtent.append(
extent() );
1119 if ( mLastExtent.size() > 100 )
1121 mLastExtent.removeAt( 0 );
1125 mLastExtentIndex = mLastExtent.size() - 1;
1173 return mCursorPoint;
1217 if ( mLastExtentIndex > 0 )
1220 mSettings.
setExtent( mLastExtent[mLastExtentIndex] );
1233 if ( mLastExtentIndex < mLastExtent.size() - 1 )
1236 mSettings.
setExtent( mLastExtent[mLastExtentIndex] );
1248 mLastExtent.clear();
1249 mLastExtent.append(
extent() ) ;
1250 mLastExtentIndex = mLastExtent.size() - 1;
1268 double closestSquaredDistance = pow( extentRect.
width(), 2.0 ) + pow( extentRect.
height(), 2.0 );
1269 bool pointFound =
false;
1273 double sqrDist = point.
sqrDist( centerLayerCoordinates );
1274 if ( sqrDist > closestSquaredDistance || sqrDist < 4 * std::numeric_limits<double>::epsilon() )
1277 closestPoint = point;
1278 closestSquaredDistance = sqrDist;
1284 rect.scale( scaleFactor, &
center );
1295 layer = qobject_cast<QgsVectorLayer *>( mCurrentLayer );
1314 rect = optimalExtentForPointLayer(
layer, rect.
center() );
1352 if ( boundingBoxOfFeatureIds( ids,
layer, bbox, errorMsg ) )
1356 bbox = optimalExtentForPointLayer(
layer, bbox.
center() );
1376 if ( boundingBoxOfFeatureIds( ids,
layer, bbox, errorMsg ) )
1393 int featureCount = 0;
1401 errorMsg = tr(
"Feature does not have a geometry" );
1405 errorMsg = tr(
"Feature geometry is empty" );
1407 if ( !errorMsg.isEmpty() )
1416 if ( featureCount != ids.count() )
1418 errorMsg = tr(
"Feature not found" );
1430 layer = qobject_cast<QgsVectorLayer *>( mCurrentLayer );
1449 const QColor &color1,
const QColor &color2,
1450 int flashes,
int duration )
1457 QList< QgsGeometry > geoms;
1473 if ( geometries.isEmpty() )
1489 QColor startColor = color1;
1490 if ( !startColor.isValid() )
1500 startColor.setAlpha( 255 );
1502 QColor endColor = color2;
1503 if ( !endColor.isValid() )
1505 endColor = startColor;
1506 endColor.setAlpha( 0 );
1510 QVariantAnimation *animation =
new QVariantAnimation(
this );
1511 connect( animation, &QVariantAnimation::finished,
this, [animation, rb]
1513 animation->deleteLater();
1516 connect( animation, &QPropertyAnimation::valueChanged,
this, [rb, geomType](
const QVariant & value )
1518 QColor
c = value.value<QColor>();
1527 c.setAlpha(
c.alpha() );
1533 animation->setDuration( duration * flashes );
1534 animation->setStartValue( endColor );
1535 double midStep = 0.2 / flashes;
1536 for (
int i = 0; i < flashes; ++i )
1538 double start =
static_cast< double >( i ) / flashes;
1539 animation->setKeyValueAt( start + midStep, startColor );
1540 double end =
static_cast< double >( i + 1 ) / flashes;
1542 animation->setKeyValueAt( end, endColor );
1544 animation->setEndValue( endColor );
1561 double dx = std::fabs( currentExtent.
width() / 4 );
1562 double dy = std::fabs( currentExtent.
height() / 4 );
1596 if ( ! e->isAutoRepeat() )
1598 QApplication::setOverrideCursor( Qt::ClosedHandCursor );
1604 case Qt::Key_PageUp:
1609 case Qt::Key_PageDown:
1616 mUseParallelRendering = !mUseParallelRendering;
1621 mDrawRenderingStats = !mDrawRenderingStats;
1652 QApplication::restoreOverrideCursor();
1666 QgsDebugMsgLevel(
"Ignoring key release: " + QString::number( e->key() ), 2 );
1685 void QgsMapCanvas::beginZoomRect( QPoint pos )
1687 mZoomRect.setRect( 0, 0, 0, 0 );
1688 QApplication::setOverrideCursor( mZoomCursor );
1689 mZoomDragging =
true;
1691 QColor color( Qt::blue );
1692 color.setAlpha( 63 );
1693 mZoomRubberBand->setColor( color );
1694 mZoomRect.setTopLeft( pos );
1697 void QgsMapCanvas::endZoomRect( QPoint pos )
1699 mZoomDragging =
false;
1700 mZoomRubberBand.reset(
nullptr );
1701 QApplication::restoreOverrideCursor();
1704 mZoomRect.setRight( pos.x() );
1705 mZoomRect.setBottom( pos.y() );
1707 if ( mZoomRect.width() < 5 && mZoomRect.height() < 5 )
1714 mZoomRect = mZoomRect.normalized();
1717 const QSize &zoomRectSize = mZoomRect.size();
1718 const QSize &canvasSize = mSettings.
outputSize();
1719 double sfx =
static_cast< double >( zoomRectSize.width() ) / canvasSize.width();
1720 double sfy =
static_cast< double >( zoomRectSize.height() ) / canvasSize.height();
1721 double sf = std::max( sfx, sfy );
1732 if ( e->button() == Qt::MidButton )
1743 && e->modifiers() & Qt::ShiftModifier )
1745 beginZoomRect( e->pos() );
1751 showContextMenu( me.get() );
1774 if ( e->button() == Qt::MidButton )
1779 else if ( e->button() == Qt::BackButton )
1784 else if ( e->button() == Qt::ForwardButton )
1791 if ( mZoomDragging && e->button() == Qt::LeftButton )
1793 endZoomRect( e->pos() );
1803 QgsDebugMsgLevel( QStringLiteral(
"Right click in map tool zoom or pan, last tool is %1." ).arg(
1804 mLastNonZoomMapTool ? QStringLiteral(
"not null" ) : QStringLiteral(
"null" ) ), 2 );
1806 QgsVectorLayer *vlayer = qobject_cast<QgsVectorLayer *>( mCurrentLayer );
1809 if ( mLastNonZoomMapTool
1814 mLastNonZoomMapTool =
nullptr;
1834 QGraphicsView::resizeEvent( e );
1835 mResizeTimer->start( 500 );
1837 double oldScale = mSettings.
scale();
1838 QSize lastSize = viewport()->size();
1841 mScene->setSceneRect( QRectF( 0, 0, lastSize.width(), lastSize.height() ) );
1847 double scaleFactor = oldScale / mSettings.
scale();
1865 QGraphicsView::paintEvent( e );
1870 const QList<QGraphicsItem *> items = mScene->items();
1871 for ( QGraphicsItem *gi : items )
1888 QgsDebugMsgLevel(
"Wheel event delta " + QString::number( e->delta() ), 2 );
1893 if ( e->isAccepted() )
1897 if ( e->delta() == 0 )
1903 double zoomFactor = e->angleDelta().y() > 0 ? 1. / zoomInFactor() : zoomOutFactor();
1906 zoomFactor = 1.0 + ( zoomFactor - 1.0 ) / 120.0 * std::fabs( e->angleDelta().y() );
1908 if ( e->modifiers() & Qt::ControlModifier )
1911 zoomFactor = 1.0 + ( zoomFactor - 1.0 ) / 20.0;
1914 double signedWheelFactor = e->angleDelta().y() > 0 ? 1 / zoomFactor : zoomFactor;
1919 QgsPointXY newCenter( mousePos.
x() + ( ( oldCenter.
x() - mousePos.
x() ) * signedWheelFactor ),
1920 mousePos.
y() + ( ( oldCenter.
y() - mousePos.
y() ) * signedWheelFactor ) );
1928 mWheelZoomFactor = factor;
1950 double scaleFactor = (
zoomIn ? zoomInFactor() : zoomOutFactor() );
1957 ScaleRestorer restorer(
this );
1971 mScaleLocked = isLocked;
1982 else if ( mZoomDragging )
1984 mZoomRect.setBottomRight( e->pos() );
1985 mZoomRubberBand->setToCanvasRectangle( mZoomRect );
1986 mZoomRubberBand->show();
1999 if ( !panOperationInProgress() )
2016 disconnect( mMapTool, &QObject::destroyed,
this, &QgsMapCanvas::mapToolDestroyed );
2026 mLastNonZoomMapTool = mMapTool;
2030 mLastNonZoomMapTool =
nullptr;
2040 connect( mMapTool, &QObject::destroyed,
this, &QgsMapCanvas::mapToolDestroyed );
2048 if ( mMapTool && mMapTool == tool )
2050 disconnect( mMapTool, &QObject::destroyed,
this, &QgsMapCanvas::mapToolDestroyed );
2055 setCursor( Qt::ArrowCursor );
2058 if ( mLastNonZoomMapTool && mLastNonZoomMapTool == tool )
2060 mLastNonZoomMapTool =
nullptr;
2078 QBrush bgBrush( color );
2079 setBackgroundBrush( bgBrush );
2082 palette.setColor( backgroundRole(), color );
2083 setPalette( palette );
2087 mScene->setBackgroundBrush( bgBrush );
2096 return mScene->backgroundBrush().color();
2108 bool hasSelectedFeatures =
false;
2115 hasSelectedFeatures =
true;
2120 if ( hasSelectedFeatures )
2187 if ( mTheme ==
theme )
2201 setLayersPrivate(
QgsProject::instance()->mapThemeCollection()->mapThemeVisibleLayers( mTheme ) );
2219 void QgsMapCanvas::connectNotify(
const char *signal )
2222 QgsDebugMsg(
"QgsMapCanvas connected to " + QString( signal ) );
2226 void QgsMapCanvas::layerRepaintRequested(
bool deferred )
2232 void QgsMapCanvas::autoRefreshTriggered()
2238 mRefreshAfterJob =
true;
2245 void QgsMapCanvas::updateAutoRefreshTimer()
2249 int minAutoRefreshInterval = -1;
2254 minAutoRefreshInterval = minAutoRefreshInterval > 0 ? std::min(
layer->
autoRefreshInterval(), minAutoRefreshInterval ) :
layer->autoRefreshInterval();
2257 if ( minAutoRefreshInterval > 0 )
2259 mAutoRefreshTimer.setInterval( minAutoRefreshInterval );
2260 mAutoRefreshTimer.start();
2264 mAutoRefreshTimer.stop();
2268 void QgsMapCanvas::projectThemesChanged()
2270 if ( mTheme.isEmpty() )
2301 double dx = end.
x() - start.
x();
2302 double dy = end.
y() - start.
y();
2304 c.set(
c.x() - dx,
c.y() - dy );
2337 setSceneRect( -pnt.x(), -pnt.y(), viewport()->size().width(), viewport()->size().height() );
2345 bool allHandled =
true;
2348 bool handled =
false;
2351 if ( handler && handler->customUriProviderKey() == uri.providerKey )
2353 if ( handler->handleCustomUriCanvasDrop( uri,
this ) )
2381 if ( !mPreviewEffect )
2386 mPreviewEffect->setEnabled( previewEnabled );
2391 if ( !mPreviewEffect )
2396 return mPreviewEffect->isEnabled();
2401 if ( !mPreviewEffect )
2406 mPreviewEffect->
setMode( mode );
2411 if ( !mPreviewEffect )
2416 return mPreviewEffect->
mode();
2421 if ( !mSnappingUtils )
2427 return mSnappingUtils;
2432 mSnappingUtils = utils;
2439 QDomNodeList nodes = doc.elementsByTagName( QStringLiteral(
"mapcanvas" ) );
2440 if ( nodes.count() )
2442 QDomNode node = nodes.item( 0 );
2445 if ( nodes.count() > 1 )
2447 for (
int i = 0; i < nodes.size(); ++i )
2449 QDomElement elementNode = nodes.at( i ).toElement();
2451 if ( elementNode.hasAttribute( QStringLiteral(
"name" ) ) && elementNode.attribute( QStringLiteral(
"name" ) ) == objectName() )
2453 node = nodes.at( i );
2461 if ( objectName() != QLatin1String(
"theMapCanvas" ) )
2472 QDomElement elem = node.toElement();
2473 if ( elem.hasAttribute( QStringLiteral(
"theme" ) ) )
2475 if (
QgsProject::instance()->mapThemeCollection()->hasMapTheme( elem.attribute( QStringLiteral(
"theme" ) ) ) )
2477 setTheme( elem.attribute( QStringLiteral(
"theme" ) ) );
2480 setAnnotationsVisible( elem.attribute( QStringLiteral(
"annotationsVisible" ), QStringLiteral(
"1" ) ).toInt() );
2483 const QDomNodeList scopeElements = elem.elementsByTagName( QStringLiteral(
"expressionContextScope" ) );
2484 if ( scopeElements.size() > 0 )
2486 const QDomElement scopeElement = scopeElements.at( 0 ).toElement();
2492 QgsDebugMsg( QStringLiteral(
"Couldn't read mapcanvas information from project" ) );
2505 QDomNodeList nl = doc.elementsByTagName( QStringLiteral(
"qgis" ) );
2508 QgsDebugMsg( QStringLiteral(
"Unable to find qgis element in project file" ) );
2511 QDomNode qgisNode = nl.item( 0 );
2513 QDomElement mapcanvasNode = doc.createElement( QStringLiteral(
"mapcanvas" ) );
2514 mapcanvasNode.setAttribute( QStringLiteral(
"name" ), objectName() );
2515 if ( !mTheme.isEmpty() )
2516 mapcanvasNode.setAttribute( QStringLiteral(
"theme" ), mTheme );
2517 mapcanvasNode.setAttribute( QStringLiteral(
"annotationsVisible" ), mAnnotationsVisible );
2518 qgisNode.appendChild( mapcanvasNode );
2520 mSettings.
writeXml( mapcanvasNode, doc );
2523 QDomElement scopeElement = doc.createElement( QStringLiteral(
"expressionContextScope" ) );
2525 tmpScope.
removeVariable( QStringLiteral(
"atlas_featurenumber" ) );
2531 mapcanvasNode.appendChild( scopeElement );
2538 if ( mScaleLocked && !ignoreScaleLock )
2540 ScaleRestorer restorer(
this );
2575 bool allHandled =
true;
2578 bool handled =
false;
2581 if ( handler->canHandleCustomUriCanvasDrop( uri,
this ) )
2601 void QgsMapCanvas::mapToolDestroyed()
2609 if ( !QTouchDevice::devices().empty() )
2611 if ( e->type() == QEvent::Gesture )
2613 if ( QTapAndHoldGesture *tapAndHoldGesture = qobject_cast< QTapAndHoldGesture * >(
static_cast<QGestureEvent *
>( e )->gesture( Qt::TapAndHoldGesture ) ) )
2615 QPointF pos = tapAndHoldGesture->position();
2616 pos = mapFromGlobal( QPoint( pos.x(), pos.y() ) );
2624 return mMapTool->
gestureEvent(
static_cast<QGestureEvent *
>( e ) );
2630 return QGraphicsView::event( e );
2656 while ( mRefreshScheduled || mJob )
2658 QgsApplication::processEvents();
2674 QList<QgsMapCanvasAnnotationItem *> annotationItemList;
2675 const QList<QGraphicsItem *> items = mScene->items();
2676 for ( QGraphicsItem *gi : items )
2681 annotationItemList.push_back( aItem );
2685 return annotationItemList;
2690 mAnnotationsVisible = show;
2694 item->setVisible( show );
2708 void QgsMapCanvas::startPreviewJobs()
2717 schedulePreviewJob( 0 );
2720 void QgsMapCanvas::startPreviewJob(
int number )
2733 double dx = ( i - 1 ) * mapRect.
width();
2734 double dy = ( 1 - j ) * mapRect.
height();
2747 const QList<QgsMapLayer *>
layers = jobSettings.
layers();
2748 QList< QgsMapLayer * > previewLayers;
2757 QgsDebugMsgLevel( QStringLiteral(
"Layer %1 not rendered because it does not match the renderInPreview criterion %2" ).arg(
layer->
id() ).arg( mLastLayerRenderTime.value(
layer->
id() ) ), 3 );
2761 previewLayers <<
layer;
2766 job->setProperty(
"number", number );
2767 mPreviewJobs.append( job );
2772 void QgsMapCanvas::stopPreviewJobs()
2774 mPreviewTimer.stop();
2775 const auto previewJobs = mPreviewJobs;
2776 for (
auto previewJob : previewJobs )
2782 previewJob->cancelWithoutBlocking();
2785 mPreviewJobs.clear();
2788 void QgsMapCanvas::schedulePreviewJob(
int number )
2790 mPreviewTimer.setSingleShot(
true );
2791 mPreviewTimer.setInterval( PREVIEW_JOB_DELAY_MS );
2792 disconnect( mPreviewTimerConnection );
2793 mPreviewTimerConnection = connect( &mPreviewTimer, &QTimer::timeout,
this, [ = ]()
2795 startPreviewJob( number );
2797 mPreviewTimer.start();
2800 bool QgsMapCanvas::panOperationInProgress()
2805 if (
QgsMapToolPan *panTool = qobject_cast< QgsMapToolPan *>( mMapTool ) )
2807 if ( panTool->isDragging() )
2814 int QgsMapCanvas::nextZoomLevel(
const QList<double> &resolutions,
bool zoomIn )
const
2816 int resolutionLevel = -1;
2819 for (
int i = 0, n = resolutions.size(); i < n; ++i )
2821 if (
qgsDoubleNear( resolutions[i], currentResolution, 0.0001 ) )
2823 resolutionLevel =
zoomIn ? ( i - 1 ) : ( i + 1 );
2826 else if ( currentResolution <= resolutions[i] )
2828 resolutionLevel =
zoomIn ? ( i - 1 ) : i;
2832 return ( resolutionLevel < 0 || resolutionLevel >= resolutions.size() ) ? -1 : resolutionLevel;
2835 double QgsMapCanvas::zoomInFactor()
const
2837 if ( !mZoomResolutions.isEmpty() )
2839 int zoomLevel = nextZoomLevel( mZoomResolutions,
true );
2840 if ( zoomLevel != -1 )
2845 return 1 / mWheelZoomFactor;
2848 double QgsMapCanvas::zoomOutFactor()
const
2850 if ( !mZoomResolutions.isEmpty() )
2852 int zoomLevel = nextZoomLevel( mZoomResolutions,
false );
2853 if ( zoomLevel != -1 )
2858 return mWheelZoomFactor;
QPoint rubberStartPoint
Beginning point of a rubber band.
void renderStarting()
Emitted when the canvas is about to be rendered.
void mouseDoubleClickEvent(QMouseEvent *e) override
@ MaximumAngle
Maximum angle between generating radii (lines from arc center to output vertices)
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
QgsCoordinateReferenceSystem crs
const QgsLabelingEngineSettings & labelingEngineSettings() const
Returns the global configuration of the labeling engine.
void renderErrorOccurred(const QString &error, QgsMapLayer *layer)
Emitted whenever an error is encountered during a map render operation.
void panToSelected(QgsVectorLayer *layer=nullptr)
Pan to the selected features of current (vector) layer keeping same extent.
void currentLayerChanged(QgsMapLayer *layer)
Emitted when the current layer is changed.
void setDestinationCrs(const QgsCoordinateReferenceSystem &crs)
sets destination coordinate reference system
void dropEvent(QDropEvent *event) override
void waitWhileRendering()
Blocks until the rendering job has finished.
void zoomToPreviousExtent()
Zoom to the previous extent (view)
virtual QgsTemporalProperty::Flags flags() const
Returns flags associated to the temporal property.
double height() const SIP_HOLDGIL
Returns the height of the rectangle.
bool hasAutoRefreshEnabled() const
Returns true if auto refresh is enabled for the layer.
An interface for objects which block interactions with a QgsMapCanvas.
An interactive map canvas item which displays a QgsAnnotation.
virtual bool usedCachedLabels() const =0
Returns true if the render job was able to use a cached labeling solution.
void transformContextChanged()
Emitted when the canvas transform context is changed.
QgsRectangle extent() const
Returns the current zoom extent of the map canvas.
QPoint mouseLastXY
Last seen point of the mouse.
void moveCanvasContents(bool reset=false)
called when panning is in action, reset indicates end of panning
void mapThemeRenamed(const QString &name, const QString &newName)
Emitted when a map theme within the collection is renamed.
QgsPointXY mapToLayerCoordinates(const QgsMapLayer *layer, QgsPointXY point) const
transform point coordinates from output CRS to layer's CRS
void setTheme(const QString &theme)
Sets a map theme to show in the canvas.
Q_GADGET QgsUnitTypes::DistanceUnit mapUnits
void mapToolSet(QgsMapTool *newTool, QgsMapTool *oldTool)
Emit map tool changed with the old tool.
const QgsMapSettings & mapSettings() const
Returns map settings with which this job was started.
static QIcon getThemeIcon(const QString &name)
Helper to get a theme icon.
void refresh()
Repaints the canvas map.
void setFlag(Flag flag, bool on=true)
Enable or disable a particular flag (other flags are not affected)
void setVariable(const QString &name, const QVariant &value, bool isStatic=false)
Convenience method for setting a variable in the context scope by name name and value.
void setProject(QgsProject *project)
Sets the project linked to this canvas.
void setWheelFactor(double factor)
Sets wheel zoom factor (should be greater than 1)
bool isDrawing()
Find out whether rendering is in progress.
double mapUnitsPerPixel() const
Returns current map units per pixel.
void readXml(QDomNode &node)
@ ICON_CIRCLE
A circle is used to highlight points (â—‹)
void combineExtentWith(const QgsRectangle &rect)
Expands the rectangle so that it covers both the original rectangle and the given rectangle.
QVariant value(const QString &key, const QVariant &defaultValue=QVariant(), Section section=NoSection) const
Returns the value for setting key.
void waitForFinished() override
Block until the job has finished.
static QgsExpressionContextScope * globalScope()
Creates a new scope which contains variables and functions relating to the global QGIS context.
The class is used as a container of context for various read/write operations on other objects.
void destinationCrsChanged()
Emitted when map CRS has changed.
Abstract base class for spatial data provider implementations.
QSize outputSize() const
Returns the size of the resulting map image.
void zoomScale(double scale, bool ignoreScaleLock=false)
Zooms the canvas to a specific scale.
void xyCoordinates(const QgsPointXY &p)
Emits current mouse position.
void setRotation(double rotation)
Sets the rotation of the resulting map image, in degrees clockwise.
QgsMapTool * mapTool()
Returns the currently active tool.
void zoomByFactor(double scaleFactor, const QgsPointXY *center=nullptr, bool ignoreScaleLock=false)
Zoom with the factor supplied.
virtual bool isActive() const =0
Tell whether the rendering job is currently running in background.
void zoomOut()
Zoom out with fixed factor.
QString userFriendlyIdentifier(IdentifierType type=MediumString) const
Returns a user friendly identifier for the CRS.
void zoomLastStatusChanged(bool)
Emitted when zoom last status changed.
QPoint mouseLastXY()
returns last position of mouse cursor
A QgsRectangle with associated coordinate reference system.
void mouseMoveEvent(QMouseEvent *e) override
#define QgsDebugMsgLevel(str, level)
constexpr double CANVAS_MAGNIFICATION_MIN
Minimum magnification level allowed in map canvases.
@ WKT_PREFERRED
Preferred format, matching the most recent WKT ISO standard. Currently an alias to WKT2_2019,...
const QgsMapSettings & mapSettings() const
Gets access to properties used for map rendering.
void redrawAllLayers()
Clears all cached images and redraws all layers.
A class for drawing transient features (e.g.
float devicePixelRatio() const
Returns device pixel ratio Common values are 1 for normal-dpi displays and 2 for high-dpi "retina" di...
QgsPointXY center() const SIP_HOLDGIL
Returns the center point of the rectangle.
void readXml(const QDomElement &element, const QgsReadWriteContext &context)
Reads scope variables from an XML element.
virtual QImage renderedImage()=0
Gets a preview/resulting image.
const QgsCoordinateReferenceSystem & crs
bool mouseButtonDown
Flag to indicate status of mouse button.
static QCursor getThemeCursor(Cursor cursor)
Helper to get a theme cursor.
void setIsTemporal(bool enabled)
Sets whether the temporal range is enabled (i.e.
void flashGeometries(const QList< QgsGeometry > &geometries, const QgsCoordinateReferenceSystem &crs=QgsCoordinateReferenceSystem(), const QColor &startColor=QColor(255, 0, 0, 255), const QColor &endColor=QColor(255, 0, 0, 0), int flashes=3, int duration=500)
Causes a set of geometries to flash within the canvas.
void mouseReleaseEvent(QMouseEvent *e) override
void mapThemeChanged(const QString &theme)
Emitted when a map theme changes definition.
void temporalRangeChanged()
Emitted when the map canvas temporal range changes.
A generic dialog to prompt the user for a Coordinate Reference System.
void clear()
Invalidates the cache contents, clearing all cached images.
double yMinimum() const SIP_HOLDGIL
Returns the y minimum value (bottom side of rectangle).
static QgsGeometry fromPointXY(const QgsPointXY &point) SIP_HOLDGIL
Creates a new geometry from a QgsPointXY object.
bool hasValidSettings() const
Check whether the map settings are valid and can be used for rendering.
Map canvas is a class for displaying all GIS data types on a canvas.
void panActionEnd(QPoint releasePoint)
Ends pan action and redraws the canvas.
void setMagnificationFactor(double factor, const QgsPointXY *center=nullptr)
Sets the factor of magnification to apply to the map canvas.
QgsRectangle fullExtent() const
returns current extent of layer set
void setSegmentationToleranceType(QgsAbstractGeometry::SegmentationToleranceType type)
Sets segmentation tolerance type (maximum angle or maximum difference between curve and approximation...
void writeXml(QDomNode &node, QDomDocument &doc)
QgsPointXY center() const
Gets map center, in geographical coordinates.
Class that stores computed placement from labeling engine.
bool writeXml(QDomElement &element, QDomDocument &document, const QgsReadWriteContext &context) const
Writes scope variables to an XML element.
QgsCoordinateTransformContext transformContext
const QgsDateTimeRange & temporalRange() const
Returns the datetime range for the object.
QgsRectangle fullExtent() const
Returns the combined extent for all layers on the map canvas.
double mapUnitsPerPixel() const
Returns the distance in geographical coordinates that equals to one pixel in the map.
void setRotation(double degrees)
Set the rotation of the map canvas in clockwise degrees.
static QgsExpressionContextScope * mapSettingsScope(const QgsMapSettings &mapSettings)
Creates a new scope which contains variables and functions relating to a QgsMapSettings object.
void setMinimal() SIP_HOLDGIL
Set a rectangle so that min corner is at max and max corner is at min.
static QgsProject * instance()
Returns the QgsProject singleton instance.
QgsRectangle layerExtentToOutputExtent(const QgsMapLayer *layer, QgsRectangle extent) const
transform bounding box from layer's CRS to output CRS
void setStrokeColor(const QColor &color)
Sets the stroke color for the rubberband.
double scale() const
Returns the last reported scale of the canvas.
void rotationChanged(double)
Emitted when the rotation of the map changes.
void readProject(const QDomDocument &)
Emitted when a project is being read.
void zoomWithCenter(int x, int y, bool zoomIn)
Zooms in/out with a given center.
double magnificationFactor() const
Returns the magnification factor.
void setFillColor(const QColor &color)
Sets the fill color for the rubberband.
QMap< QString, QString > layerStyleOverrides() const
Gets map of map layer style overrides (key: layer ID, value: style name) where a different style shou...
This class is a composition of two QSettings instances:
void writeProject(QDomDocument &)
called to write map canvas settings to project
void selectionChangedSlot()
Receives signal about selection change, and pass it on with layer info.
void panAction(QMouseEvent *event)
Called when mouse is moving and pan is activated.
virtual void reload()
Synchronises with changes in the datasource.
Abstract interface for generating an expression context scope.
void clearCache()
Make sure to remove any rendered images from cache (does nothing if cache is not enabled)
@ RenderPartialOutput
Whether to make extra effort to update map image with partially rendered layers (better for interacti...
bool panSelectorDown
Flag to indicate the pan selector key is held down by user.
QgsUnitTypes::DistanceUnit mapUnits() const
Convenience function for returning the current canvas map units.
SegmentationToleranceType
Segmentation tolerance as maximum angle or maximum difference between approximation and circle.
QList< QgsMimeDataUtils::Uri > UriList
void dragEnterEvent(QDragEnterEvent *e) override
DistanceUnit
Units of distance.
void paintEvent(QPaintEvent *e) override
Q_INVOKABLE QgsMapLayer * mapLayer(const QString &layerId) const
Retrieve a pointer to a registered layer by layer ID.
QgsPointXY toMapCoordinates(int x, int y) const
Transform device coordinates to map (world) coordinates.
QColor secondaryStrokeColor
void freeze(bool frozen=true)
Freeze/thaw the map canvas.
QList< QgsMapLayer * > layers() const
Returns the list of layers shown within the map canvas.
void wheelEvent(QWheelEvent *e) override
QgsMapCanvas(QWidget *parent=nullptr)
Constructor.
void setSegmentationTolerance(double tolerance)
Sets the segmentation tolerance applied when rendering curved geometries.
A rectangle specified with double values.
void setSegmentationToleranceType(QgsAbstractGeometry::SegmentationToleranceType type)
Sets segmentation tolerance type (maximum angle or maximum difference between curve and approximation...
This class is responsible for keeping cache of rendered images resulting from a map rendering job.
void start() override
Start the rendering job and immediately return.
void setMapSettingsFlags(QgsMapSettings::Flags flags)
Resets the flags for the canvas' map settings.
bool isEditable() const FINAL
Returns true if the provider is in editing mode.
Encapsulates a QGIS project, including sets of map layers and their styles, layouts,...
constexpr double CANVAS_MAGNIFICATION_MAX
Maximum magnification level allowed in map canvases.
QgsSnappingUtils * snappingUtils() const
Returns snapping utility class that is associated with map canvas.
void setPreviewJobsEnabled(bool enabled)
Sets whether canvas map preview jobs (low priority render jobs which render portions of the view just...
bool allowInteraction(QgsMapCanvasInteractionBlocker::Interaction interaction) const
Returns true if the specified interaction is currently permitted on the canvas.
void scaleChanged(double)
Emitted when the scale of the map changes.
QgsRectangle extent() const
Returns geographical coordinates of the rectangle that should be rendered.
void writeProject(QDomDocument &)
Emitted when the project is being written.
@ DrawLabeling
Enable drawing of labels on top of the map.
bool isParallelRenderingEnabled() const
Check whether the layers are rendered in parallel or sequentially.
int renderingTime() const
Returns the total time it took to finish the job (in milliseconds).
const QgsLabelingResults * labelingResults() const
Gets access to the labeling results (may be nullptr)
double sqrDist(double x, double y) const SIP_HOLDGIL
Returns the squared distance between this point a specified x, y coordinate.
QgsFeatureRequest & setFilterRect(const QgsRectangle &rectangle)
Sets the rectangle from which features will be taken.
Snapping utils instance that is connected to a canvas and updates the configuration (map settings + c...
void setCurrentLayer(QgsMapLayer *layer)
Errors errors() const
List of errors that happened during the rendering job - available when the rendering has been finishe...
Job implementation that renders all layers in parallel.
virtual void updatePosition()
called on changed extent or resize event to update position of the item
double xMaximum() const SIP_HOLDGIL
Returns the x maximum value (right side of rectangle).
double rotation() const
Gets the current map canvas rotation in clockwise degrees.
void scale(double scaleFactor, const QgsPointXY *c=nullptr)
Scale the rectangle around its center point.
bool setEllipsoid(const QString &ellipsoid)
Sets the ellipsoid by its acronym.
void zoomIn()
Zoom in with fixed factor.
void readProject(const QDomDocument &)
called to read map canvas settings from project
This class wraps a request for features to a vector layer (or directly its vector data provider).
static QgsExpressionContextScope * projectScope(const QgsProject *project)
Creates a new scope which contains variables and functions relating to a QGIS project.
void enableAntiAliasing(bool flag)
used to determine if anti-aliasing is enabled or not
Custom exception class for Coordinate Reference System related exceptions.
void setBackgroundColor(const QColor &color)
Sets the background color of the map.
void setTemporalController(QgsTemporalController *controller)
Sets the temporal controller, tQgsMapCanvasInteractionBlockerhis controller will be used to update th...
An abstract class for items that can be placed on the map canvas.
QgsReferencedRectangle defaultViewExtent() const
Returns the default view extent, which should be used as the initial map extent when this project is ...
void setPreviewMode(QgsPreviewEffect::PreviewMode mode)
Sets a preview mode for the map canvas.
QHash< QgsMapLayer *, int > perLayerRenderingTime() const
Returns the render time (in ms) per layer.
int layerCount() const
Returns number of layers on the map.
QgsCoordinateTransformContext transformContext() const
Returns the coordinate transform context, which stores various information regarding which datum tran...
double rotation() const
Returns the rotation of the resulting map image, in degrees clockwise.
virtual void waitForFinished()=0
Block until the job has finished.
QMap< QString, QString > layerStyleOverrides() const
Returns the stored overrides of styles for layers.
bool isActive() const
Returns true if the temporal property is active.
@ DistanceDegrees
Degrees, for planar geographic CRS distance measurements.
double bearing(const QgsPointXY &p1, const QgsPointXY &p2) const
Computes the bearing (in radians) between two points.
QgsSignalBlocker< Object > whileBlocking(Object *object)
Temporarily blocks signals from a QObject while calling a single method from the object.
QColor canvasColor() const
Read property of QColor bgColor.
Stores global configuration for labeling engine.
void selectionChanged(const QgsFeatureIds &selected, const QgsFeatureIds &deselected, bool clearAndSelect)
Emitted when selection was changed.
void zoomToSelected(QgsVectorLayer *layer=nullptr)
Zoom to the extent of the selected features of provided (vector) layer.
void setDevicePixelRatio(float dpr)
Sets the device pixel ratio Common values are 1 for normal-dpi displays and 2 for high-dpi "retina" d...
Interaction
Available interactions to block.
bool qgsDoubleNear(double a, double b, double epsilon=4 *std::numeric_limits< double >::epsilon())
Compare two doubles (but allow some difference)
void layersChanged()
Emitted when a new set of layers has been received.
void repaintRequested(bool deferredUpdate=false)
By emitting this signal the layer tells that either appearance or content have been changed and any v...
QgsMapLayer * layer(int index)
Returns the map layer at position index in the layer stack.
void setCache(QgsMapRendererCache *cache)
Assign a cache to be used for reading and storing rendered images of individual layers.
QgsUnitTypes::DistanceUnit mapUnits() const
Gets units of map's geographical coordinates - used for scale calculation.
void setMagnificationFactor(double factor, const QgsPointXY *center=nullptr)
Set the magnification factor.
void keyReleaseEvent(QKeyEvent *e) override
double measureLine(const QVector< QgsPointXY > &points) const
Measures the length of a line with multiple segments.
void projectColorsChanged()
Emitted whenever the project's color scheme has been changed.
void extentsChanged()
Emitted when the extents of the map change.
void setSegmentationTolerance(double tolerance)
Sets the segmentation tolerance applied when rendering curved geometries.
void mapThemesChanged()
Emitted when map themes within the collection are changed.
void updateCanvasItemPositions()
called on resize or changed extent to notify canvas items to change their rectangle
@ Antialiasing
Enable anti-aliasing for map rendering.
A controller base class for temporal objects, contains a signal for notifying updates of the objects ...
QColor backgroundColor() const
Gets the background color of the map.
QgsUnitTypes::DistanceUnit lengthUnits() const
Returns the units of distance for length calculations made by this object.
static QgsImageCache * imageCache()
Returns the application's image cache, used for caching resampled versions of raster images.
virtual QgsMapLayerTemporalProperties * temporalProperties()
Returns the layer's temporal properties.
Job implementation that renders everything sequentially in one thread.
Stores settings related to the context in which a preview job runs.
void setTemporalRange(const QgsDateTimeRange &range)
Set datetime range for the map canvas.
std::unique_ptr< CanvasProperties > mCanvasProperties
Handle pattern for implementation object.
void setSelectionColor(const QColor &color)
Sets color that is used for drawing of selected vector features.
void setXMinimum(double x) SIP_HOLDGIL
Set the minimum x value.
void updateScale()
Emits signal scaleChanged to update scale in main window.
static void warning(const QString &msg)
Goes to qWarning.
void setDestinationCrs(const QgsCoordinateReferenceSystem &crs)
sets destination coordinate reference system
void setCanvasColor(const QColor &_newVal)
Write property of QColor bgColor.
void setCenter(const QgsPointXY ¢er)
Set the center of the map canvas, in geographical coordinates.
void setFlags(QgsMapSettings::Flags flags)
Sets combination of flags that will be used for rendering.
void resizeEvent(QResizeEvent *e) override
QString id() const
Returns the layer's unique ID, which is used to access this layer from QgsProject.
const QgsLabelingEngineSettings & labelingEngineSettings() const
Returns global labeling engine settings from the internal map settings.
void enableMapTileRendering(bool flag)
sets map tile rendering flag
void zoomToFullExtent()
Zoom to the full extent of all layers.
QColor selectionColor() const
Returns color for selected features.
double scale() const
Returns the calculated map scale.
void layerStyleOverridesChanged()
Emitted when the configuration of overridden layer styles changes.
void setValue(const QString &key, const QVariant &value, QgsSettings::Section section=QgsSettings::NoSection)
Sets the value of setting key to value.
QgsMapThemeCollection * mapThemeCollection
double maxRenderingTimeMs
Default maximum allowable render time, in ms.
void zoomToNextExtent()
Zoom to the next extent (view)
bool setReferencedExtent(const QgsReferencedRectangle &extent) SIP_THROW(QgsCsException)
Sets the canvas to the specified extent.
virtual void start()=0
Start the rendering job and immediately return.
double xMinimum() const SIP_HOLDGIL
Returns the x minimum value (left side of rectangle).
void setTransformContext(const QgsCoordinateTransformContext &context)
Sets the coordinate transform context, which stores various information regarding which datum transfo...
void refreshAllLayers()
Reload all layers (including refreshing layer properties from their data sources),...
void setSourceCrs(const QgsCoordinateReferenceSystem &crs, const QgsCoordinateTransformContext &context)
Sets source spatial reference system crs.
Scoped object for saving and restoring a QPainter object's state.
void setExtent(const QgsRectangle &r, bool magnified=false)
Sets the extent of the map canvas to the specified rectangle.
@ RenderMapTile
Draw map such that there are no problems between adjacent tiles.
void transformContextChanged()
Emitted when the project transformContext() is changed.
void setMapTool(QgsMapTool *mapTool, bool clean=false)
Sets the map tool currently being used on the canvas.
QgsPreviewEffect::PreviewMode previewMode() const
Returns the current preview mode for the map canvas.
const QgsMapToPixel * getCoordinateTransform()
Gets the current coordinate transform.
QgsFeatureRequest & setNoAttributes()
Set that no attributes will be fetched.
void setParallelRenderingEnabled(bool enabled)
Set whether the layers are rendered in parallel or sequentially.
void panToFeatureIds(QgsVectorLayer *layer, const QgsFeatureIds &ids, bool alwaysRecenter=true)
Centers canvas extent to feature ids.
virtual bool isEmpty() const
Returns true if the geometry is empty.
const QgsAbstractGeometry * constGet() const SIP_HOLDGIL
Returns a non-modifiable (const) reference to the underlying abstract geometry primitive.
QSet< QgsFeatureId > QgsFeatureIds
void keyPressEvent(QKeyEvent *e) override
void zoomToFeatureExtent(QgsRectangle &rect)
Zooms to feature extent.
void saveAsImage(const QString &fileName, QPixmap *QPixmap=nullptr, const QString &="PNG")
Save the contents of the map canvas to disk as an image.
This class represents a coordinate reference system (CRS).
virtual bool renderInPreview(const QgsDataProvider::PreviewContext &context)
Returns whether the layer must be rendered in preview jobs.
void setXMaximum(double x) SIP_HOLDGIL
Set the maximum x value.
This class has all the configuration of snapping and can return answers to snapping queries.
QColor selectionColor() const
Gets color that is used for drawing of selected vector features.
static QString worldFileContent(const QgsMapSettings &mapSettings)
Creates the content of a world file.
void setRenderFlag(bool flag)
Sets whether a user has disabled canvas renders via the GUI.
int mapUpdateInterval() const
Find out how often map preview should be updated while it is being rendered (in milliseconds)
@ RenderPreviewJob
Render is a 'canvas preview' render, and shortcuts should be taken to ensure fast rendering.
Single scope for storing variables and functions for use within a QgsExpressionContext.
static QgsSvgCache * svgCache()
Returns the application's SVG cache, used for caching SVG images and handling parameter replacement w...
void setLabelingEngineSettings(const QgsLabelingEngineSettings &settings)
Sets the global configuration of the labeling engine.
void setLayers(const QList< QgsMapLayer * > &layers)
Set list of layers for map rendering.
void setScaleLocked(bool isLocked)
Lock the scale, so zooming can be performed using magnication.
void flashFeatureIds(QgsVectorLayer *layer, const QgsFeatureIds &ids, const QColor &startColor=QColor(255, 0, 0, 255), const QColor &endColor=QColor(255, 0, 0, 0), int flashes=3, int duration=500)
Causes a set of features with matching ids from a vector layer to flash within the canvas.
A class to represent a 2D point.
QgsCoordinateReferenceSystem destinationCrs() const
returns CRS of destination coordinate reference system
Job implementation that renders everything sequentially using a custom painter.
void setYMaximum(double y) SIP_HOLDGIL
Set the maximum y value.
@ ShortString
A heavily abbreviated string, for use when a compact representation is required.
QgsPointXY asPoint() const
Returns the contents of the geometry as a 2-dimensional point.
void removeInteractionBlocker(QgsMapCanvasInteractionBlocker *blocker)
Removes an interaction blocker from the canvas.
void setMapUpdateInterval(int timeMilliseconds)
Set how often map preview should be updated while it is being rendered (in milliseconds)
void setExpressionContext(const QgsExpressionContext &context)
Sets the expression context.
void keyReleased(QKeyEvent *e)
Emit key release event.
const QgsDateTimeRange & temporalRange() const
Returns map canvas datetime range.
A QgsMapMouseEvent is the result of a user interaction with the mouse on a QgsMapCanvas.
void clearExtentHistory()
Clears the list of extents and sets current extent as first item.
@ UseRenderingOptimization
Enable vector simplification and other rendering optimizations.
Intermediate base class adding functionality that allows client to query the rendered image.
void updateTemporalRange(const QgsDateTimeRange &range)
Signals that a temporal range has changed and needs to be updated in all connected objects.
bool event(QEvent *e) override
void setWidth(int width)
Sets the width of the line.
double yMaximum() const SIP_HOLDGIL
Returns the y maximum value (top side of rectangle).
void setAnnotationsVisible(bool visible)
Sets whether annotations are visible in the canvas.
void canvasColorChanged()
Emitted when canvas background color changes.
static UriList decodeUriList(const QMimeData *data)
GeometryType
The geometry types are used to group QgsWkbTypes::Type in a coarse way.
bool testFlag(Flag flag) const
Check whether a particular flag is enabled.
void tapAndHoldGestureOccurred(const QgsPointXY &mapPoint, QTapAndHoldGesture *gesture)
Emitted whenever a tap and hold gesture occurs at the specified map point.
void setCustomDropHandlers(const QVector< QPointer< QgsCustomDropHandler >> &handlers)
Sets a list of custom drop handlers to use when drop events occur on the canvas.
bool nextFeature(QgsFeature &f)
void setYMinimum(double y) SIP_HOLDGIL
Set the minimum y value.
void themeChanged(const QString &theme)
Emitted when the canvas has been assigned a different map theme.
As part of the API refactoring and improvements which landed in the Processing API was substantially reworked from the x version This was done in order to allow much of the underlying Processing framework to be ported into c
A geometry is the spatial representation of a feature.
Perform transforms between map coordinates and device coordinates.
void setLayerStyleOverrides(const QMap< QString, QString > &overrides)
Set map of map layer style overrides (key: layer ID, value: style name) where a different style shoul...
Represents a vector layer which manages a vector based data sets.
bool hasGeometry() const
Returns true if the feature has an associated geometry.
double width() const SIP_HOLDGIL
Returns the width of the rectangle.
bool isCachingEnabled() const
Check whether images of rendered layers are curerently being cached.
void selectionChanged(QgsVectorLayer *layer)
Emitted when selection in any layer gets changed.
@ DrawEditingInfo
Enable drawing of vertex markers for layers in editing mode.
QgsFeatureRequest & setLimit(long limit)
Set the maximum number of features to request.
Base class for all map layer types.
bool isFrozen() const
Returns true if canvas is frozen.
QgsProject * project()
Returns the project linked to this canvas.
A class to represent a vector.
void addGeometry(const QgsGeometry &geometry, QgsVectorLayer *layer)
Adds the geometry of an existing feature to a rubberband This is useful for multi feature highlightin...
void magnificationChanged(double)
Emitted when the scale of the map changes.
Abstract base class that may be implemented to handle new types of data to be dropped in QGIS.
Scoped object for logging of the runtime for a single operation or group of operations.
static void logMessage(const QString &message, const QString &tag=QString(), Qgis::MessageLevel level=Qgis::Warning, bool notifyUser=true)
Adds a message to the log instance (and creates it if necessary).
void ellipsoidChanged(const QString &ellipsoid)
Emitted when the project ellipsoid is changed.
virtual void cancelWithoutBlocking()=0
Triggers cancellation of the rendering job without blocking.
bool previewModeEnabled() const
Returns whether a preview mode is enabled for the map canvas.
void setPreviewModeEnabled(bool previewEnabled)
Enables a preview mode for the map canvas.
void panDistanceBearingChanged(double distance, QgsUnitTypes::DistanceUnit unit, double bearing)
Emitted whenever the distance or bearing of an in-progress panning operation is changed.
QgsExpressionContextScope * defaultExpressionContextScope()
Creates a new scope which contains default variables and functions relating to the map canvas.
void setIcon(IconType icon)
Sets the icon type to highlight point geometries.
void keyPressed(QKeyEvent *e)
Emit key press event.
void unsetMapTool(QgsMapTool *mapTool)
Unset the current map tool or last non zoom tool.
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...
void mousePressEvent(QMouseEvent *e) override
static QgsExpressionContextScope * atlasScope(const QgsLayoutAtlas *atlas)
Creates a new scope which contains variables and functions relating to a QgsLayoutAtlas.
void renderComplete(QPainter *)
Emitted when the canvas has rendered.
Deprecated to be deleted, stuff from here should be moved elsewhere.
QList< QgsMapLayer * > layers() const
Gets list of layers for map rendering The layers are stored in the reverse order of how they are rend...
void setTemporalRange(const QgsDateTimeRange &range)
Sets the temporal range for the object.
QgsRectangle boundingBox() const
Returns the bounding box of the geometry.
A general purpose distance and area calculator, capable of performing ellipsoid based calculations.
void setMode(PreviewMode mode)
Sets the mode for the preview effect, which controls how the effect modifies a widgets appearance.
void messageEmitted(const QString &title, const QString &message, Qgis::MessageLevel=Qgis::Info)
emit a message (usually to be displayed in a message bar)
The feature class encapsulates a single feature including its id, geometry and a list of field/values...
double magnificationFactor() const
Returns the magnification factor.
A graphics effect which can be applied to a widget to simulate various printing and color blindness m...
virtual QgsLabelingResults * takeLabelingResults()=0
Gets pointer to internal labeling engine (in order to get access to the results).
QgsMapLayer * currentLayer()
returns current layer (set by legend widget)
void setSnappingUtils(QgsSnappingUtils *utils)
Assign an instance of snapping utils to the map canvas.
bool hasMapTheme(const QString &name) const
Returns whether a map theme with a matching name exists.
void contextMenuAboutToShow(QMenu *menu, QgsMapMouseEvent *event)
Emitted before the map canvas context menu will be shown.
double lastRenderingTimeMs
Previous rendering time for the layer, in ms.
void zoomToFeatureIds(QgsVectorLayer *layer, const QgsFeatureIds &ids)
Set canvas extent to the bounding box of a set of features.
void remoteImageFetched(const QString &url)
Emitted when the cache has finished retrieving an image file from a remote url.
void zoomNextStatusChanged(bool)
Emitted when zoom next status changed.
int selectedFeatureCount() const
Returns the number of features that are selected in this layer.
T enumValue(const QString &key, const T &defaultValue, const Section section=NoSection)
Returns the setting value for a setting based on an enum.
virtual bool isSpatial() const
Returns true if the layer is considered a spatial layer, ie it has some form of geometry associated w...
void setLayers(const QList< QgsMapLayer * > &layers)
Sets the list of layers that should be shown in the canvas.
void setOutputSize(QSize size)
Sets the size of the resulting map image.
void installInteractionBlocker(QgsMapCanvasInteractionBlocker *blocker)
Installs an interaction blocker onto the canvas, which may prevent certain map canvas interactions fr...
void panActionStart(QPoint releasePoint)
Starts a pan action.
double mapUnitsPerPixel() const
Returns the mapUnitsPerPixel (map units per pixel) for the canvas.
void setPathResolver(const QgsPathResolver &resolver)
Sets the path resolver for conversion between relative and absolute paths during rendering operations...
The QgsMapSettings class contains configuration for rendering of the map.
QgsRectangle visibleExtent() const
Returns the actual extent derived from requested extent that takes takes output image size into accou...
void invalidateCacheForLayer(QgsMapLayer *layer)
Invalidates cached images which relate to the specified map layer.
CanvasProperties()=default
Constructor for CanvasProperties.
QList< QgsMapCanvasAnnotationItem * > annotationItems() const
Returns a list of all annotation items in the canvas.
Wrapper for iterator of features from vector data provider or vector layer.
QgsPointXY layerToMapCoordinates(const QgsMapLayer *layer, QgsPointXY point) const
transform point coordinates from layer's CRS to output CRS
void setExtent(const QgsRectangle &rect, bool magnified=true)
Set coordinates of the rectangle which should be rendered.
void setSecondaryStrokeColor(const QColor &color)
Sets a secondary stroke color for the rubberband which will be drawn under the main stroke color.
const QgsProjectViewSettings * viewSettings() const
Returns the project's view settings, which contains settings and properties relating to how a QgsProj...
bool isEmpty() const
Returns true if the rectangle is empty.
const QgsMapToPixel & mapToPixel() const
bool isNull() const
Test if the rectangle is null (all coordinates zero or after call to setMinimal()).
@ FlagDontInvalidateCachedRendersWhenRangeChanges
Any cached rendering will not be invalidated when temporal range context is modified.
void setLayerStyleOverrides(const QMap< QString, QString > &overrides)
Sets the stored overrides of styles for rendering layers.
bool setEllipsoid(const QString &ellipsoid)
Sets the ellipsoid by its acronym.
void autoRefreshIntervalChanged(int interval)
Emitted when the auto refresh interval changes.
virtual QgsDataProvider * dataProvider()
Returns the layer's data provider, it may be nullptr.
static bool isUriList(const QMimeData *data)
PreviewMode mode() const
Returns the mode used for the preview effect.
void setCachingEnabled(bool enabled)
Set whether to cache images of rendered layers.
void setLabelingEngineSettings(const QgsLabelingEngineSettings &settings)
Sets global labeling engine settings in the internal map settings.
const QgsTemporalController * temporalController() const
Gets access to the temporal controller that will be used to update the canvas temporal range.
void finished()
emitted when asynchronous rendering is finished (or canceled).
void mapCanvasRefreshed()
Emitted when canvas finished a refresh request.
void setSelectionColor(const QColor &color)
Set color of selected vector features.
void layerStateChange()
This slot is connected to the visibility change of one or more layers.
void stopRendering()
stop rendering (if there is any right now)
void remoteSvgFetched(const QString &url)
Emitted when the cache has finished retrieving an SVG file from a remote url.
bool removeVariable(const QString &name)
Removes a variable from the context scope, if found.