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> 104 : QGraphicsView( parent )
106 , mExpressionContextScope( tr(
"Map Canvas" ) )
108 mScene =
new QGraphicsScene();
110 setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff );
111 setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff );
112 setMouseTracking(
true );
113 setFocusPolicy( Qt::StrongFocus );
115 mResizeTimer =
new QTimer(
this );
116 mResizeTimer->setSingleShot(
true );
119 mRefreshTimer =
new QTimer(
this );
120 mRefreshTimer->setSingleShot(
true );
121 connect( mRefreshTimer, &QTimer::timeout,
this, &QgsMapCanvas::refreshMap );
124 mMap =
new QgsMapCanvasMap(
this );
159 double segmentationTolerance = settings.
value( QStringLiteral(
"qgis/segmentationTolerance" ),
"0.01745" ).toDouble();
164 mWheelZoomFactor = settings.
value( QStringLiteral(
"qgis/zoom_factor" ), 2 ).toDouble();
166 QSize s = viewport()->size();
169 setSceneRect( 0, 0, s.width(), s.height() );
170 mScene->setSceneRect( QRectF( 0, 0, s.width(), s.height() ) );
175 if ( window()->windowHandle() )
177 connect( window()->windowHandle(), &QWindow::screenChanged,
this, [ = ]( QScreen * ) {mSettings.
setDevicePixelRatio( devicePixelRatio() );} );
178 connect( window()->windowHandle()->screen(), &QScreen::physicalDotsPerInchChanged,
this, [ = ]( qreal ) {mSettings.
setDevicePixelRatio( devicePixelRatio() );} );
181 connect( &mMapUpdateTimer, &QTimer::timeout,
this, &QgsMapCanvas::mapUpdateTimeout );
182 mMapUpdateTimer.setInterval( 250 );
187 grabGesture( Qt::PinchGesture );
188 viewport()->setAttribute( Qt::WA_AcceptTouchEvents );
192 viewport()->setGraphicsEffect( mPreviewEffect );
196 connect( &mAutoRefreshTimer, &QTimer::timeout,
this, &QgsMapCanvas::autoRefreshTriggered );
200 setInteractive(
false );
218 mLastNonZoomMapTool =
nullptr;
228 QList< QgsMapRendererQImageJob * >::const_iterator previewJob = mPreviewJobs.constBegin();
229 for ( ; previewJob != mPreviewJobs.constEnd(); ++previewJob )
241 QList<QGraphicsItem *> list = mScene->items();
242 QList<QGraphicsItem *>::iterator it = list.begin();
243 while ( it != list.end() )
245 QGraphicsItem *item = *it;
250 mScene->deleteLater();
253 delete mLabelingResults;
261 factor = qBound( magnifierMin, factor, magnifierMax );
290 if ( index >= 0 && index < layers.size() )
291 return layers[index];
298 if ( mCurrentLayer == layer )
301 mCurrentLayer =
layer;
312 return nullptr != mJob;
325 if ( !mTheme.isEmpty() )
328 setLayersPrivate( layers );
331 void QgsMapCanvas::setLayersPrivate(
const QList<QgsMapLayer *> &
layers )
333 QList<QgsMapLayer *> oldLayers = mSettings.
layers();
336 if ( layers == oldLayers )
343 if (
QgsVectorLayer *vlayer = qobject_cast<QgsVectorLayer *>( layer ) )
357 if (
QgsVectorLayer *vlayer = qobject_cast<QgsVectorLayer *>( layer ) )
363 QgsDebugMsg( QStringLiteral(
"Layers have changed, refreshing" ) );
366 updateAutoRefreshTimer();
388 rect = transform.transformBoundingBox( mSettings.
visibleExtent() );
393 QgsDebugMsg( QStringLiteral(
"Transform error caught: %1" ).arg( e.
what() ) );
405 QgsDebugMsg( QStringLiteral(
"refreshing after destination CRS changed" ) );
420 return mLabelingResults;
447 return nullptr != mCache;
458 mUseParallelRendering = enabled;
463 return mUseParallelRendering;
468 mMapUpdateTimer.setInterval( timeMilliseconds );
473 return mMapUpdateTimer.interval();
479 return mCurrentLayer;
494 QgsDebugMsg( QStringLiteral(
"CANVAS refresh - invalid settings -> nothing to do" ) );
498 if ( !mRenderFlag || mFrozen )
500 QgsDebugMsg( QStringLiteral(
"CANVAS render flag off" ) );
504 if ( mRefreshScheduled )
506 QgsDebugMsg( QStringLiteral(
"CANVAS refresh already scheduled" ) );
510 mRefreshScheduled =
true;
512 QgsDebugMsg( QStringLiteral(
"CANVAS refresh scheduling" ) );
515 mRefreshTimer->start( 1 );
518 void QgsMapCanvas::refreshMap()
520 Q_ASSERT( mRefreshScheduled );
539 if ( !mTheme.isEmpty() )
552 mJobCanceled =
false;
553 if ( mUseParallelRendering )
568 mRefreshScheduled =
false;
570 mMapUpdateTimer.start();
575 void QgsMapCanvas::mapThemeChanged(
const QString &
theme )
577 if ( theme == mTheme )
582 setLayersPrivate(
QgsProject::instance()->mapThemeCollection()->mapThemeVisibleLayers( mTheme ) );
596 void QgsMapCanvas::rendererJobFinished()
598 QgsDebugMsg( QStringLiteral(
"CANVAS finish! %1" ).arg( !mJobCanceled ) );
600 mMapUpdateTimer.stop();
614 delete mLabelingResults;
625 if ( settings.
value( QStringLiteral(
"Map/logCanvasRefreshEvent" ),
false ).toBool() )
627 QString logMsg = tr(
"Canvas refresh: %1 ms" ).arg( mJob->
renderingTime() );
631 if ( mDrawRenderingStats )
633 int w = img.width(), h = img.height();
634 QFont fnt = p.font();
637 int lh = p.fontMetrics().height() * 2;
638 QRect r( 0, h - lh, w, lh );
639 p.setPen( Qt::NoPen );
640 p.setBrush( QColor( 0, 0, 0, 110 ) );
642 p.setPen( Qt::white );
643 QString msg = QStringLiteral(
"%1 :: %2 ms" ).arg( mUseParallelRendering ? QStringLiteral(
"PARALLEL" ) : QStringLiteral(
"SEQUENTIAL" ) ).arg( mJob->
renderingTime() );
644 p.drawText( r, msg, QTextOption( Qt::AlignCenter ) );
649 mMap->setContent( img, imageRect( img, mSettings ) );
651 mLastLayerRenderTime.clear();
653 for (
auto it = times.constBegin(); it != times.constEnd(); ++it )
655 mLastLayerRenderTime.insert( it.key()->id(), it.value() );
657 if ( mUsePreviewJobs )
669 void QgsMapCanvas::previewJobFinished()
677 mPreviewJobs.removeAll( job );
679 int number = job->property(
"number" ).toInt();
682 startPreviewJob( number + 1 );
699 QgsLogger::warning( QStringLiteral(
"The renderer map has a wrong device pixel ratio" ) );
702 #if QT_VERSION >= 0x050600 707 QgsRectangle rect( topLeft.
x(), topLeft.
y(), topLeft.
x() + img.width()*res, topLeft.
y() - img.height()*res );
713 return mUsePreviewJobs;
718 mUsePreviewJobs = enabled;
721 void QgsMapCanvas::mapUpdateTimeout()
726 mMap->setContent( img, imageRect( img, mSettings ) );
734 QgsDebugMsg( QStringLiteral(
"CANVAS stop rendering!" ) );
755 image = theQPixmap->toImage();
756 painter.begin( &image );
766 image = mMap->contentImage().copy();
767 painter.begin( &image );
771 QStyleOptionGraphicsItem option;
772 option.initFrom(
this );
773 QGraphicsItem *item =
nullptr;
774 QListIterator<QGraphicsItem *> i( items() );
776 while ( i.hasPrevious() )
780 if ( !( item && dynamic_cast< QgsMapCanvasAnnotationItem * >( item ) ) )
787 QPointF itemScenePos = item->scenePos();
788 painter.translate( itemScenePos.x(), itemScenePos.y() );
790 item->paint( &painter, &option );
796 image.save( fileName, format.toLocal8Bit().data() );
798 QFileInfo myInfo = QFileInfo( fileName );
801 QString outputSuffix = myInfo.suffix();
802 QString myWorldFileName = myInfo.absolutePath() +
'/' + myInfo.baseName() +
'.' 803 + outputSuffix.at( 0 ) + outputSuffix.at( myInfo.suffix().size() - 1 ) +
'w';
804 QFile myWorldFile( myWorldFileName );
805 if ( !myWorldFile.open( QIODevice::WriteOnly | QIODevice::Truncate ) )
809 QTextStream myStream( &myWorldFile );
830 if ( ( r == current ) && magnified )
838 QgsDebugMsg( QStringLiteral(
"Empty extent - ignoring" ) );
843 QgsDebugMsg( QStringLiteral(
"Empty extent - keeping old scale with new center!" ) );
852 if ( mLastExtent.size() > 20 )
853 mLastExtent.removeAt( 0 );
856 for (
int i = mLastExtent.size() - 1; i > mLastExtentIndex; i-- )
858 mLastExtent.removeAt( i );
861 mLastExtent.append(
extent() );
864 if ( mLastExtent.size() > 20 )
866 mLastExtent.removeAt( 0 );
870 mLastExtentIndex = mLastExtent.size() - 1;
880 double x = center.
x();
881 double y = center.
y();
933 extent.
scale( 1.05 );
943 if ( mLastExtentIndex > 0 )
946 mSettings.
setExtent( mLastExtent[mLastExtentIndex] );
959 if ( mLastExtentIndex < mLastExtent.size() - 1 )
962 mSettings.
setExtent( mLastExtent[mLastExtentIndex] );
975 mLastExtent.append(
extent() ) ;
976 mLastExtentIndex = mLastExtent.size() - 1;
1006 int scaleFactor = 5;
1014 double closestSquaredDistance = pow( extentRect.
width(), 2.0 ) + pow( extentRect.
height(), 2.0 );
1015 bool pointFound =
false;
1019 double sqrDist = point.
sqrDist( centerLayerCoordinates );
1020 if ( sqrDist > closestSquaredDistance || sqrDist < 4 * std::numeric_limits<double>::epsilon() )
1023 closestPoint = point;
1024 closestSquaredDistance = sqrDist;
1030 rect.
scale( scaleFactor, ¢erMapCoordinates );
1046 rect.
scale( 1.0, &c );
1070 if ( boundingBoxOfFeatureIds( ids, layer, bbox, errorMsg ) )
1090 if ( boundingBoxOfFeatureIds( ids, layer, bbox, errorMsg ) )
1106 int featureCount = 0;
1114 errorMsg = tr(
"Feature does not have a geometry" );
1118 errorMsg = tr(
"Feature geometry is empty" );
1120 if ( !errorMsg.isEmpty() )
1129 if ( featureCount != ids.count() )
1131 errorMsg = tr(
"Feature not found" );
1162 const QColor &color1,
const QColor &color2,
1163 int flashes,
int duration )
1170 QList< QgsGeometry > geoms;
1186 if ( geometries.isEmpty() )
1192 rb->addGeometry( geom, crs );
1197 rb->setSecondaryStrokeColor( QColor( 255, 255, 255 ) );
1202 QColor startColor = color1;
1203 if ( !startColor.isValid() )
1207 startColor = rb->fillColor();
1211 startColor = rb->strokeColor();
1213 startColor.setAlpha( 255 );
1215 QColor endColor = color2;
1216 if ( !endColor.isValid() )
1218 endColor = startColor;
1219 endColor.setAlpha( 0 );
1223 QVariantAnimation *animation =
new QVariantAnimation(
this );
1224 connect( animation, &QVariantAnimation::finished,
this, [animation, rb]
1226 animation->deleteLater();
1229 connect( animation, &QPropertyAnimation::valueChanged,
this, [rb, geomType](
const QVariant & value )
1231 QColor
c = value.value<QColor>();
1234 rb->setFillColor( c );
1238 rb->setStrokeColor( c );
1239 QColor c = rb->secondaryStrokeColor();
1240 c.setAlpha( c.alpha() );
1241 rb->setSecondaryStrokeColor( c );
1246 animation->setDuration( duration * flashes );
1247 animation->setStartValue( endColor );
1248 double midStep = 0.2 / flashes;
1249 for (
int i = 0; i < flashes; ++i )
1251 double start =
static_cast< double >( i ) / flashes;
1252 animation->setKeyValueAt( start + midStep, startColor );
1253 double end =
static_cast< double >( i + 1 ) / flashes;
1255 animation->setKeyValueAt( end, endColor );
1257 animation->setEndValue( endColor );
1274 double dx = std::fabs( currentExtent.
width() / 4 );
1275 double dy = std::fabs( currentExtent.
height() / 4 );
1306 QgsDebugMsg( QStringLiteral(
"Pressing pan selector" ) );
1309 if ( ! e->isAutoRepeat() )
1311 QApplication::setOverrideCursor( Qt::ClosedHandCursor );
1317 case Qt::Key_PageUp:
1322 case Qt::Key_PageDown:
1329 mUseParallelRendering = !mUseParallelRendering;
1334 mDrawRenderingStats = !mDrawRenderingStats;
1347 QgsDebugMsg(
"Ignoring key: " + QString::number( e->key() ) );
1357 QgsDebugMsg( QStringLiteral(
"keyRelease event" ) );
1364 QgsDebugMsg( QStringLiteral(
"Releasing pan selector" ) );
1365 QApplication::restoreOverrideCursor();
1379 QgsDebugMsg(
"Ignoring key release: " + QString::number( e->key() ) );
1398 void QgsMapCanvas::beginZoomRect( QPoint pos )
1400 mZoomRect.setRect( 0, 0, 0, 0 );
1401 QApplication::setOverrideCursor( mZoomCursor );
1402 mZoomDragging =
true;
1404 QColor color( Qt::blue );
1405 color.setAlpha( 63 );
1406 mZoomRubberBand->setColor( color );
1407 mZoomRect.setTopLeft( pos );
1410 void QgsMapCanvas::endZoomRect( QPoint pos )
1412 mZoomDragging =
false;
1413 mZoomRubberBand.reset(
nullptr );
1414 QApplication::restoreOverrideCursor();
1417 mZoomRect.setRight( pos.x() );
1418 mZoomRect.setBottom( pos.y() );
1420 if ( mZoomRect.width() < 5 && mZoomRect.height() < 5 )
1427 mZoomRect = mZoomRect.normalized();
1430 const QSize &zoomRectSize = mZoomRect.size();
1431 const QSize &canvasSize = mSettings.
outputSize();
1432 double sfx =
static_cast< double >( zoomRectSize.width() ) / canvasSize.width();
1433 double sfy =
static_cast< double >( zoomRectSize.height() ) / canvasSize.height();
1434 double sf = std::max( sfx, sfy );
1445 if ( e->button() == Qt::MidButton )
1456 && e->modifiers() & Qt::ShiftModifier )
1458 beginZoomRect( e->pos() );
1483 if ( e->button() == Qt::MidButton )
1488 else if ( e->button() == Qt::BackButton )
1493 else if ( e->button() == Qt::ForwardButton )
1500 if ( mZoomDragging && e->button() == Qt::LeftButton )
1502 endZoomRect( e->pos() );
1512 QgsDebugMsg( QStringLiteral(
"Right click in map tool zoom or pan, last tool is %1." ).arg(
1513 mLastNonZoomMapTool ? QStringLiteral(
"not null" ) : QStringLiteral(
"null" ) ) );
1518 if ( mLastNonZoomMapTool
1523 mLastNonZoomMapTool =
nullptr;
1543 QGraphicsView::resizeEvent( e );
1544 mResizeTimer->start( 500 );
1546 double oldScale = mSettings.
scale();
1547 QSize lastSize = viewport()->size();
1550 mScene->setSceneRect( QRectF( 0, 0, lastSize.width(), lastSize.height() ) );
1556 double scaleFactor = oldScale / mSettings.
scale();
1559 r.
scale( scaleFactor, ¢er );
1574 QGraphicsView::paintEvent( e );
1579 QList<QGraphicsItem *> list = mScene->items();
1580 QList<QGraphicsItem *>::iterator it = list.begin();
1581 while ( it != list.end() )
1600 QgsDebugMsg(
"Wheel event delta " + QString::number( e->delta() ) );
1605 if ( e->isAccepted() )
1609 if ( e->delta() == 0 )
1615 double zoomFactor = mWheelZoomFactor;
1618 zoomFactor = 1.0 + ( zoomFactor - 1.0 ) / 120.0 * std::fabs( e->angleDelta().y() );
1620 if ( e->modifiers() & Qt::ControlModifier )
1623 zoomFactor = 1.0 + ( zoomFactor - 1.0 ) / 20.0;
1626 double signedWheelFactor = e->angleDelta().y() > 0 ? 1 / zoomFactor : zoomFactor;
1631 QgsPointXY newCenter( mousePos.
x() + ( ( oldCenter.
x() - mousePos.
x() ) * signedWheelFactor ),
1632 mousePos.
y() + ( ( oldCenter.
y() - mousePos.
y() ) * signedWheelFactor ) );
1640 mWheelZoomFactor = factor;
1662 double scaleFactor = ( zoomIn ? 1 / mWheelZoomFactor : mWheelZoomFactor );
1673 r.
scale( scaleFactor, ¢er );
1681 mScaleLocked = isLocked;
1692 else if ( mZoomDragging )
1694 mZoomRect.setBottomRight( e->pos() );
1695 mZoomRubberBand->setToCanvasRectangle( mZoomRect );
1696 mZoomRubberBand->show();
1723 disconnect( mMapTool, &QObject::destroyed,
this, &QgsMapCanvas::mapToolDestroyed );
1733 mLastNonZoomMapTool = mMapTool;
1737 mLastNonZoomMapTool =
nullptr;
1746 connect( mMapTool, &QObject::destroyed,
this, &QgsMapCanvas::mapToolDestroyed );
1755 if ( mMapTool && mMapTool == tool )
1760 setCursor( Qt::ArrowCursor );
1763 if ( mLastNonZoomMapTool && mLastNonZoomMapTool == tool )
1765 mLastNonZoomMapTool =
nullptr;
1778 QBrush bgBrush( color );
1779 setBackgroundBrush( bgBrush );
1782 palette.setColor( backgroundRole(), color );
1783 setPalette( palette );
1787 mScene->setBackgroundBrush( bgBrush );
1794 return mScene->backgroundBrush().color();
1861 if ( mTheme == theme )
1875 setLayersPrivate(
QgsProject::instance()->mapThemeCollection()->mapThemeVisibleLayers( mTheme ) );
1893 void QgsMapCanvas::connectNotify(
const char *signal )
1896 QgsDebugMsg(
"QgsMapCanvas connected to " + QString( signal ) );
1900 void QgsMapCanvas::layerRepaintRequested(
bool deferred )
1906 void QgsMapCanvas::autoRefreshTriggered()
1919 void QgsMapCanvas::updateAutoRefreshTimer()
1923 int minAutoRefreshInterval = -1;
1930 if ( minAutoRefreshInterval > 0 )
1932 mAutoRefreshTimer.setInterval( minAutoRefreshInterval );
1933 mAutoRefreshTimer.start();
1937 mAutoRefreshTimer.stop();
1941 void QgsMapCanvas::projectThemesChanged()
1943 if ( mTheme.isEmpty() )
1969 double dx = end.
x() - start.
x();
1970 double dy = end.
y() - start.
y();
1972 c.
set( c.
x() - dx, c.
y() - dy );
1992 setSceneRect( -pnt.x(), -pnt.y(), viewport()->size().width(), viewport()->size().height() );
2002 if ( !mPreviewEffect )
2007 mPreviewEffect->setEnabled( previewEnabled );
2012 if ( !mPreviewEffect )
2017 return mPreviewEffect->isEnabled();
2022 if ( !mPreviewEffect )
2027 mPreviewEffect->
setMode( mode );
2032 if ( !mPreviewEffect )
2037 return mPreviewEffect->
mode();
2042 if ( !mSnappingUtils )
2048 return mSnappingUtils;
2053 mSnappingUtils = utils;
2058 QDomNodeList nodes = doc.elementsByTagName( QStringLiteral(
"mapcanvas" ) );
2059 if ( nodes.count() )
2061 QDomNode node = nodes.item( 0 );
2064 if ( nodes.count() > 1 )
2066 for (
int i = 0; i < nodes.size(); ++i )
2068 QDomElement elementNode = nodes.at( i ).toElement();
2070 if ( elementNode.hasAttribute( QStringLiteral(
"name" ) ) && elementNode.attribute( QStringLiteral(
"name" ) ) == objectName() )
2072 node = nodes.at( i );
2080 if ( objectName() != QStringLiteral(
"theMapCanvas" ) )
2091 QDomElement elem = node.toElement();
2092 if ( elem.hasAttribute( QStringLiteral(
"theme" ) ) )
2096 setTheme( elem.attribute( QStringLiteral(
"theme" ) ) );
2099 setAnnotationsVisible( elem.attribute( QStringLiteral(
"annotationsVisible" ), QStringLiteral(
"1" ) ).toInt() );
2103 QgsDebugMsg( QStringLiteral(
"Couldn't read mapcanvas information from project" ) );
2111 QDomNodeList nl = doc.elementsByTagName( QStringLiteral(
"qgis" ) );
2114 QgsDebugMsg( QStringLiteral(
"Unable to find qgis element in project file" ) );
2117 QDomNode qgisNode = nl.item( 0 );
2119 QDomElement mapcanvasNode = doc.createElement( QStringLiteral(
"mapcanvas" ) );
2120 mapcanvasNode.setAttribute( QStringLiteral(
"name" ), objectName() );
2121 if ( !mTheme.isEmpty() )
2122 mapcanvasNode.setAttribute( QStringLiteral(
"theme" ), mTheme );
2123 mapcanvasNode.setAttribute( QStringLiteral(
"annotationsVisible" ), mAnnotationsVisible );
2124 qgisNode.appendChild( mapcanvasNode );
2126 mSettings.
writeXml( mapcanvasNode, doc );
2138 QString settingsString =
"/Projections/" + source.
authid() +
"//" + destination.
authid();
2139 QVariant defaultSrcTransform = s.
value( settingsString +
"_srcTransform" );
2140 QVariant defaultDestTransform = s.
value( settingsString +
"_destTransform" );
2141 if ( defaultSrcTransform.isValid() && defaultDestTransform.isValid() )
2143 int sourceDatumTransform = defaultSrcTransform.toInt();
2144 int destinationDatumTransform = defaultDestTransform.toInt();
2152 if ( !s.
value( QStringLiteral(
"/Projections/showDatumTransformDialog" ),
false ).toBool() )
2174 r.
scale( scaleFactor, center );
2199 void QgsMapCanvas::mapToolDestroyed()
2201 QgsDebugMsg( QStringLiteral(
"maptool destroyed" ) );
2207 if ( !QTouchDevice::devices().empty() )
2209 if ( e->type() == QEvent::Gesture )
2214 return mMapTool->
gestureEvent( static_cast<QGestureEvent *>( e ) );
2220 return QGraphicsView::event( e );
2242 while ( mRefreshScheduled || mJob )
2244 QgsApplication::processEvents();
2260 QList<QgsMapCanvasAnnotationItem *> annotationItemList;
2261 QList<QGraphicsItem *> itemList = mScene->items();
2262 QList<QGraphicsItem *>::iterator it = itemList.begin();
2263 for ( ; it != itemList.end(); ++it )
2268 annotationItemList.push_back( aItem );
2272 return annotationItemList;
2277 mAnnotationsVisible = show;
2280 item->setVisible( show );
2294 void QgsMapCanvas::startPreviewJobs()
2297 schedulePreviewJob( 0 );
2300 void QgsMapCanvas::startPreviewJob(
int number )
2313 double dx = ( i - 1 ) * mapRect.
width();
2314 double dy = ( 1 - j ) * mapRect.
height();
2327 const QList<QgsMapLayer *>
layers = jobSettings.
layers();
2328 QList< QgsMapLayer * > previewLayers;
2336 QgsDebugMsgLevel( QStringLiteral(
"Layer %1 not rendered because it does not match the renderInPreview criterion %2" ).arg( layer->
id() ).arg( mLastLayerRenderTime.value( layer->
id() ) ), 3 );
2340 previewLayers <<
layer;
2345 job->setProperty(
"number", number );
2346 mPreviewJobs.append( job );
2351 void QgsMapCanvas::stopPreviewJobs()
2353 mPreviewTimer.stop();
2354 QList< QgsMapRendererQImageJob * >::const_iterator it = mPreviewJobs.constBegin();
2355 for ( ; it != mPreviewJobs.constEnd(); ++it )
2361 ( *it )->cancelWithoutBlocking();
2364 mPreviewJobs.clear();
2367 void QgsMapCanvas::schedulePreviewJob(
int number )
2369 mPreviewTimer.setSingleShot(
true );
2370 mPreviewTimer.setInterval( PREVIEW_JOB_DELAY_MS );
2371 disconnect( mPreviewTimerConnection );
2372 mPreviewTimerConnection = connect( &mPreviewTimer, &QTimer::timeout,
this, [ = ]()
2374 startPreviewJob( number );
2376 mPreviewTimer.start();
void unsetMapTool(QgsMapTool *mapTool)
Unset the current map tool or last non zoom tool.
bool hasAutoRefreshEnabled() const
Returns true if auto refresh is enabled for the layer.
QgsRectangle boundingBoxOfSelected() const
Returns the bounding box of the selected features. If there is no selection, QgsRectangle(0,0,0,0) is returned.
QgsUnitTypes::DistanceUnit mapUnits() const
Gets units of map's geographical coordinates - used for scale calculation.
QList< QgsMapCanvasAnnotationItem * > annotationItems() const
Returns a list of all annotation items in the canvas.
static QgsSvgCache * svgCache()
Returns the application's SVG cache, used for caching SVG images and handling parameter replacement w...
Wrapper for iterator of features from vector data provider or vector layer.
void updateCanvasItemPositions()
called on resize or changed extent to notify canvas items to change their rectangle ...
void finished()
emitted when asynchronous rendering is finished (or canceled).
void setParallelRenderingEnabled(bool enabled)
Set whether the layers are rendered in parallel or sequentially.
void set(double x, double y)
Sets the x and y value of the point.
void setDestinationCrs(const QgsCoordinateReferenceSystem &crs)
sets destination coordinate reference system
QPoint mouseLastXY
Last seen point of the mouse.
virtual bool isEmpty() const
Returns true if the geometry is empty.
QColor canvasColor() const
Read property of QColor bgColor.
A rectangle specified with double values.
Base class for all map layer types.
void setExtent(const QgsRectangle &rect, bool magnified=true)
Set coordinates of the rectangle which should be rendered.
const QgsLabelingEngineSettings & labelingEngineSettings() const
Returns the global configuration of the labeling engine.
Job implementation that renders everything sequentially using a custom painter.
std::unique_ptr< CanvasProperties > mCanvasProperties
Handle pattern for implementation object.
void setRotation(double degrees)
Set the rotation of the map canvas in clockwise degrees.
void setRenderFlag(bool flag)
Sets whether a user has disabled canvas renders via the GUI.
bool isEmpty() const
Returns true if the rectangle is empty.
QSet< QgsFeatureId > QgsFeatureIds
void zoomToNextExtent()
Zoom to the next extent (view)
void zoomWithCenter(int x, int y, bool zoomIn)
Zooms in/out with a given center.
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 setMinimal()
Set a rectangle so that min corner is at max and max corner is at min.
void setSegmentationToleranceType(QgsAbstractGeometry::SegmentationToleranceType type)
Sets segmentation tolerance type (maximum angle or maximum difference between curve and approximation...
void setTransformContext(const QgsCoordinateTransformContext &context)
Sets the coordinate transform context, which stores various information regarding which datum transfo...
double scale() const
Returns the calculated map scale.
bool isFrozen() const
Returns true if canvas is frozen.
double mapUnitsPerPixel() const
Returns the mapUnitsPerPixel (map units per pixel) for the canvas.
bool isNull() const
Returns true if the geometry is null (ie, contains no underlying geometry accessible via geometry() )...
int layerCount() const
Returns number of layers on the map.
void setLayerStyleOverrides(const QMap< QString, QString > &overrides)
Sets the stored overrides of styles for rendering layers.
void setExpressionContext(const QgsExpressionContext &context)
Sets the expression context.
void setXMaximum(double x)
Set the maximum x value.
void clearExtentHistory()
This class is a composition of two QSettings instances:
QgsPointXY layerToMapCoordinates(const QgsMapLayer *layer, QgsPointXY point) const
transform point coordinates from layer's CRS to output CRS
QgsRectangle fullExtent() const
returns current extent of layer set
Maximum angle between generating radii (lines from arc center to output vertices) ...
Errors errors() const
List of errors that happened during the rendering job - available when the rendering has been finishe...
bool event(QEvent *e) override
Overridden standard event to be gestures aware.
bool mouseButtonDown
Flag to indicate status of mouse button.
void wheelEvent(QWheelEvent *e) override
Overridden mouse wheel event.
bool previewJobsEnabled() const
Returns true if canvas map preview jobs (low priority render jobs which render portions of the view j...
void canvasColorChanged()
Emitted when canvas background color changes.
double yMaximum() const
Returns the y maximum value (top side of rectangle).
QColor selectionColor() const
Gets color that is used for drawing of selected vector features.
void stopRendering()
stop rendering (if there is any right now)
double rotation() const
Gets the current map canvas rotation in clockwise degrees.
float devicePixelRatio() const
Returns device pixel ratio Common values are 1 for normal-dpi displays and 2 for high-dpi "retina" di...
static void warning(const QString &msg)
Goes to qWarning.
void setPreviewJobsEnabled(bool enabled)
Sets whether canvas map preview jobs (low priority render jobs which render portions of the view just...
A class to represent a 2D point.
void scale(double scaleFactor, const QgsPointXY *c=nullptr)
Scale the rectangle around its center point.
bool qgsDoubleNear(double a, double b, double epsilon=4 *std::numeric_limits< double >::epsilon())
Compare two doubles (but allow some difference)
void keyPressEvent(QKeyEvent *e) override
Overridden key press event.
void zoomToFeatureExtent(QgsRectangle &rect)
Zooms to feature extent.
virtual void reload()
Synchronises with changes in the datasource.
Whether to make extra effort to update map image with partially rendered layers (better for interacti...
void enableAntiAliasing(bool flag)
used to determine if anti-aliasing is enabled or not
bool isNull() const
Test if the rectangle is null (all coordinates zero or after call to setMinimal()).
An abstract class for items that can be placed on the map canvas.
QgsRectangle boundingBox() const
Returns the bounding box of the geometry.
void setCurrentLayer(QgsMapLayer *layer)
double sqrDist(double x, double y) const
Returns the squared distance between this point a specified x, y coordinate.
bool previewModeEnabled() const
Returns whether a preview mode is enabled for the map canvas.
QgsRectangle visibleExtent() const
Returns the actual extent derived from requested extent that takes takes output image size into accou...
QList< QgsMapLayer * > layers() const
Returns the list of layers shown within the map canvas.
int selectedFeatureCount() const
Returns the number of features that are selected in this layer.
QMap< QString, QString > layerStyleOverrides() const
Gets map of map layer style overrides (key: layer ID, value: style name) where a different style shou...
void moveCanvasContents(bool reset=false)
called when panning is in action, reset indicates end of panning
A QgsMapMouseEvent is the result of a user interaction with the mouse on a QgsMapCanvas.
void setFlags(QgsMapSettings::Flags flags)
Sets combination of flags that will be used for rendering.
QVariant value(const QString &key, const QVariant &defaultValue=QVariant(), Section section=NoSection) const
Returns the value for setting key.
void setAnnotationsVisible(bool visible)
Sets whether annotations are visible in the canvas.
const QgsMapSettings & mapSettings() const
Gets access to properties used for map rendering.
constexpr double CANVAS_MAGNIFICATION_MAX
Maximum magnification level allowed in map canvases.
void readProject(const QDomDocument &)
called to read map canvas settings from project
bool panSelectorDown
Flag to indicate the pan selector key is held down by user.
void refresh()
Repaints the canvas map.
A geometry is the spatial representation of a feature.
void renderComplete(QPainter *)
Emitted when the canvas has rendered.
Snapping utils instance that is connected to a canvas and updates the configuration (map settings + c...
const QgsMapToPixel & mapToPixel() const
QgsPointXY mapToLayerCoordinates(const QgsMapLayer *layer, QgsPointXY point) const
transform point coordinates from output CRS to layer's CRS
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...
static QgsExpressionContextScope * projectScope(const QgsProject *project)
Creates a new scope which contains variables and functions relating to a QGIS project.
QgsMapTool * mapTool()
Returns the currently active tool.
double rotation() const
Returns the rotation of the resulting map image, in degrees clockwise.
SegmentationToleranceType
Segmentation tolerance as maximum angle or maximum difference between approximation and circle...
QgsPointXY asPoint() const
Returns the contents of the geometry as a 2-dimensional point.
The feature class encapsulates a single feature including its id, geometry and a list of field/values...
const QgsLabelingResults * labelingResults() const
Gets access to the labeling results (may be null)
const QgsCoordinateReferenceSystem & crs
void mousePressEvent(QMouseEvent *e) override
Overridden mouse press event.
QMap< QString, QString > layerStyleOverrides() const
Returns the stored overrides of styles for layers.
void mapThemesChanged()
Emitted when map themes within the collection are changed.
void setSegmentationTolerance(double tolerance)
Sets the segmentation tolerance applied when rendering curved geometries.
virtual QImage renderedImage()=0
Gets a preview/resulting image.
bool isSpatial() const FINAL
Returns true if this is a geometry layer and false in case of NoGeometry (table only) or UnknownGeome...
Map canvas is a class for displaying all GIS data types on a canvas.
QgsExpressionContextScope * defaultExpressionContextScope()
Creates a new scope which contains default variables and functions relating to the map canvas...
void selectionChanged(QgsVectorLayer *layer)
Emitted when selection in any layer gets changed.
Enable drawing of labels on top of the map.
static QString worldFileContent(const QgsMapSettings &mapSettings)
Creates the content of a world file.
double maxRenderingTimeMs
Default maximum allowable render time, in ms.
void zoomLastStatusChanged(bool)
Emitted when zoom last status changed.
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...
void setCache(QgsMapRendererCache *cache)
Assign a cache to be used for reading and storing rendered images of individual layers.
QgsCoordinateReferenceSystem destinationCrs() const
returns CRS of destination coordinate reference system
void magnificationChanged(double)
Emitted when the scale of the map changes.
void setFlag(Flag flag, bool on=true)
Enable or disable a particular flag (other flags are not affected)
void updateScale()
Emits signal scaleChanged to update scale in main window.
void setDestinationCrs(const QgsCoordinateReferenceSystem &crs)
sets destination coordinate reference system
The QgsMapSettings class contains configuration for rendering of the map.
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 resizeEvent(QResizeEvent *e) override
Overridden resize event.
void setLayers(const QList< QgsMapLayer * > &layers)
Sets the list of layers that should be shown in the canvas.
Deprecated to be deleted, stuff from here should be moved elsewhere.
void enableMapTileRendering(bool flag)
sets map tile rendering flag
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
QList< QgsMapLayer * > layers() const
Gets list of layers for map rendering The layers are stored in the reverse order of how they are rend...
Perform transforms between map coordinates and device coordinates.
void setSnappingUtils(QgsSnappingUtils *utils)
Assign an instance of snapping utils to the map canvas.
bool isEditable() const FINAL
Returns true if the provider is in editing mode.
bool hasMapTheme(const QString &name) const
Returns whether a map theme with a matching name exists.
void mapThemeChanged(const QString &theme)
Emitted when a map theme changes definition.
const QgsAbstractGeometry * constGet() const
Returns a non-modifiable (const) reference to the underlying abstract geometry primitive.
QgsPointXY center() const
Gets map center, in geographical coordinates.
void setMapTool(QgsMapTool *mapTool, bool clean=false)
Sets the map tool currently being used on the canvas.
void setOutputSize(QSize size)
Sets the size of the resulting map image.
double magnificationFactor() const
Returns the magnification factor.
static QgsExpressionContextScope * globalScope()
Creates a new scope which contains variables and functions relating to the global QGIS context...
QgsSnappingUtils * snappingUtils() const
Returns snapping utility class that is associated with map canvas.
void start() override
Start the rendering job and immediately return.
void saveAsImage(const QString &fileName, QPixmap *QPixmap=nullptr, const QString &="PNG")
Save the convtents of the map canvas to disk as an image.
QgsMapThemeCollection mapThemeCollection
void setLabelingEngineSettings(const QgsLabelingEngineSettings &settings)
Sets global labeling engine settings in the internal map settings.
void mapCanvasRefreshed()
Emitted when canvas finished a refresh request.
double yMinimum() const
Returns the y minimum value (bottom side of rectangle).
void rotationChanged(double)
Emitted when the rotation of the map changes.
QSize outputSize() const
Returns the size of the resulting map image.
double xMaximum() const
Returns the x maximum value (right side of rectangle).
#define QgsDebugMsgLevel(str, level)
void setMagnificationFactor(double factor)
Set the magnification factor.
void zoomNextStatusChanged(bool)
Emitted when zoom next status changed.
A circle is used to highlight points (â—‹)
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...
bool hasValidSettings() const
Check whether the map settings are valid and can be used for rendering.
void clearCache()
Make sure to remove any rendered images from cache (does nothing if cache is not enabled) ...
QgsFeatureRequest & setNoAttributes()
Set that no attributes will be fetched.
QgsMapCanvas(QWidget *parent=nullptr)
Constructor.
A class for drawing transient features (e.g.
Job implementation that renders all layers in parallel.
void setYMinimum(double y)
Set the minimum y value.
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
void setSegmentationTolerance(double tolerance)
Sets the segmentation tolerance applied when rendering curved geometries.
void setMapUpdateInterval(int timeMilliseconds)
Set how often map preview should be updated while it is being rendered (in milliseconds) ...
void keyReleased(QKeyEvent *e)
Emit key release event.
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).
virtual void waitForFinished()=0
Block until the job has finished.
void setDevicePixelRatio(float dpr)
Sets the device pixel ratio Common values are 1 for normal-dpi displays and 2 for high-dpi "retina" d...
void readProject(const QDomDocument &)
Emitted when a project is being read.
Enable anti-aliasing for map rendering.
static GeometryType geometryType(Type type)
Returns the geometry type for a WKB type, e.g., both MultiPolygon and CurvePolygon would have a Polyg...
QgsPointXY center() const
Returns the center point of the rectangle.
void panToFeatureIds(QgsVectorLayer *layer, const QgsFeatureIds &ids)
Centers canvas extent to feature ids.
void mouseDoubleClickEvent(QMouseEvent *e) override
Overridden mouse double-click event.
This class wraps a request for features to a vector layer (or directly its vector data provider)...
void panToSelected(QgsVectorLayer *layer=nullptr)
Pan to the selected features of current (vector) layer keeping same extent.
double mapUnitsPerPixel() const
Returns the distance in geographical coordinates that equals to one pixel in the map.
QgsFeatureRequest & setFilterRect(const QgsRectangle &rectangle)
Sets the rectangle from which features will be taken.
void setWheelFactor(double factor)
Sets wheel zoom factor (should be greater than 1)
QString id() const
Returns the layer's unique ID, which is used to access this layer from QgsProject.
void destinationCrsChanged()
Emitted when map CRS has changed.
double mapUnitsPerPixel() const
Returns current map units per pixel.
int mapUpdateInterval() const
Find out how often map preview should be updated while it is being rendered (in milliseconds) ...
void selectionChanged(const QgsFeatureIds &selected, const QgsFeatureIds &deselected, bool clearAndSelect)
This signal is emitted when selection was changed.
void setCachingEnabled(bool enabled)
Set whether to cache images of rendered layers.
QgsPointXY toMapCoordinates(int x, int y) const
Transform device coordinates to map (world) coordinates.
Single scope for storing variables and functions for use within a QgsExpressionContext.
Contains information about the context in which a coordinate transform is executed.
void setPreviewMode(QgsPreviewEffect::PreviewMode mode)
Sets a preview mode for the map canvas.
void transformContextChanged()
Emitted when the canvas transform context is changed.
void setMode(PreviewMode mode)
Sets the mode for the preview effect, which controls how the effect modifies a widgets appearance...
void renderStarting()
Emitted when the canvas is about to be rendered.
void keyPressed(QKeyEvent *e)
Emit key press event.
void currentLayerChanged(QgsMapLayer *layer)
Emitted when the current layer is changed.
void zoomOut()
Zoom out with fixed factor.
QgsPreviewEffect::PreviewMode previewMode() const
Returns the current preview mode for the map canvas.
Enable drawing of vertex markers for layers in editing mode.
void waitWhileRendering()
Blocks until the rendering job has finished.
constexpr double CANVAS_MAGNIFICATION_MIN
Minimum magnification level allowed in map canvases.
void zoomToPreviousExtent()
Zoom to the previous extent (view)
bool isDrawing()
Find out whether rendering is in progress.
void zoomByFactor(double scaleFactor, const QgsPointXY *center=nullptr)
Zoom with the factor supplied.
const QgsLabelingEngineSettings & labelingEngineSettings() const
Returns global labeling engine settings from the internal map settings.
bool addSourceDestinationDatumTransform(const QgsCoordinateReferenceSystem &sourceCrs, const QgsCoordinateReferenceSystem &destinationCrs, int sourceTransformId, int destinationTransformId)
Adds a new sourceTransform and destinationTransform to use when projecting coordinates from the speci...
virtual bool renderInPreview(const QgsDataProvider::PreviewContext &context)
Returns whether the layer must be rendered in preview jobs.
void zoomToSelected(QgsVectorLayer *layer=nullptr)
Zoom to the extent of the selected features of provided (vector) layer.
A class to represent a vector.
QColor backgroundColor() const
Gets the background color of the map.
void repaintRequested(bool deferredUpdate=false)
By emitting this signal the layer tells that either appearance or content have been changed and any v...
void setPreviewModeEnabled(bool previewEnabled)
Enables a preview mode for the map canvas.
virtual void start()=0
Start the rendering job and immediately return.
QPoint mouseLastXY()
returns last position of mouse cursor
void setRotation(double rotation)
Sets the rotation of the resulting map image, in degrees clockwise.
QgsMapLayer * currentLayer()
returns current layer (set by legend widget)
void mouseMoveEvent(QMouseEvent *e) override
Overridden mouse move event.
void keyReleaseEvent(QKeyEvent *e) override
Overridden key release event.
QHash< QgsMapLayer *, int > perLayerRenderingTime() const
Returns the render time (in ms) per layer.
bool isCachingEnabled() const
Check whether images of rendered layers are curerently being cached.
DistanceUnit
Units of distance.
bool testFlag(Flag flag) const
Check whether a particular flag is enabled.
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.
QgsCoordinateTransformContext transformContext
void combineExtentWith(const QgsRectangle &rect)
Expands the rectangle so that it covers both the original rectangle and the given rectangle...
void clear()
Invalidates the cache contents, clearing all cached images.
GeometryType
The geometry types are used to group QgsWkbTypes::Type in a coarse way.
void selectionChangedSlot()
Receives signal about selection change, and pass it on with layer info.
Draw map such that there are no problems between adjacent tiles.
Job implementation that renders everything sequentially in one thread.
Render is a 'canvas preview' render, and shortcuts should be taken to ensure fast rendering...
bool isValid() const
Returns whether this CRS is correctly initialized and usable.
double scale() const
Returns the last reported scale of the canvas.
void setBackgroundColor(const QColor &color)
Sets the background color of the map.
void setLabelingEngineSettings(const QgsLabelingEngineSettings &settings)
Sets the global configuration of the labeling engine.
void mouseReleaseEvent(QMouseEvent *e) override
Overridden mouse release event.
void writeProject(QDomDocument &)
Emitted when the project is being written.
bool setEllipsoid(const QString &ellipsoid)
Sets the ellipsoid by its acronym.
QgsSignalBlocker< Object > whileBlocking(Object *object)
Temporarily blocks signals from a QObject while calling a single method from the object.
static QgsExpressionContextScope * atlasScope(QgsLayoutAtlas *atlas)
Creates a new scope which contains variables and functions relating to a QgsLayoutAtlas.
void zoomToFeatureIds(QgsVectorLayer *layer, const QgsFeatureIds &ids)
Set canvas extent to the bounding box of a set of features.
static QgsExpressionContextScope * mapSettingsScope(const QgsMapSettings &mapSettings)
Creates a new scope which contains variables and functions relating to a QgsMapSettings object...
QColor selectionColor() const
Returns color for selected features.
void setSelectionColor(const QColor &color)
Sets color that is used for drawing of selected vector features.
void layerStyleOverridesChanged()
Emitted when the configuration of overridden layer styles changes.
void dragEnterEvent(QDragEnterEvent *e) override
Overridden drag enter event.
void setYMaximum(double y)
Set the maximum y value.
void writeProject(QDomDocument &)
called to write map canvas settings to project
void panAction(QMouseEvent *event)
Called when mouse is moving and pan is activated.
Intermediate base class adding functionality that allows client to query the rendered image...
Stores global configuration for labeling engine.
static QgsProject * instance()
Returns the QgsProject singleton instance.
void zoomToFullExtent()
Zoom to the full extent of all layers.
This class represents a coordinate reference system (CRS).
This class has all the configuration of snapping and can return answers to snapping queries...
bool hasGeometry() const
Returns true if the feature has an associated geometry.
void setTransformContext(const QgsCoordinateTransformContext &context)
Sets the project's coordinate transform context, which stores various information regarding which dat...
void setMapSettingsFlags(QgsMapSettings::Flags flags)
Resets the flags for the canvas' map settings.
void refreshAllLayers()
Reload all layers, clear the cache and refresh the canvas.
QgsRectangle layerExtentToOutputExtent(const QgsMapLayer *layer, QgsRectangle extent) const
transform bounding box from layer's CRS to output CRS
QgsRectangle extent() const
Returns geographical coordinates of the rectangle that should be rendered.
QgsFeatureRequest & setLimit(long limit)
Set the maximum number of features to request.
QString authid() const
Returns the authority identifier for the CRS.
void zoomScale(double scale)
Zooms the canvas to a specific scale.
void setExtent(const QgsRectangle &r, bool magnified=false)
Sets the extent of the map canvas.
const QgsMapToPixel * getCoordinateTransform()
Gets the current coordinate transform.
void scaleChanged(double)
Emitted when the scale of the map changes.
void setPathResolver(const QgsPathResolver &resolver)
Sets the path resolver for conversion between relative and absolute paths during rendering operations...
T enumValue(const QString &key, const T &defaultValue, const Section section=NoSection)
Returns the setting value for a setting based on an enum.
void setSegmentationToleranceType(QgsAbstractGeometry::SegmentationToleranceType type)
Sets segmentation tolerance type (maximum angle or maximum difference between curve and approximation...
QgsUnitTypes::DistanceUnit mapUnits() const
Convenience function for returning the current canvas map units.
virtual void cancelWithoutBlocking()=0
Triggers cancellation of the rendering job without blocking.
void setSelectionColor(const QColor &color)
Set color of selected vector features.
QgsFeatureIterator getFeatures(const QgsFeatureRequest &request=QgsFeatureRequest()) const FINAL
Query the layer for features specified in request.
void paintEvent(QPaintEvent *e) override
Overridden paint event.
void layerStateChange()
This slot is connected to the visibility change of one or more layers.
double lastRenderingTimeMs
Previous rendering time for the layer, in ms.
Enable vector simplification and other rendering optimizations.
static QCursor getThemeCursor(Cursor cursor)
Helper to get a theme cursor.
QgsWkbTypes::GeometryType geometryType() const
Returns point, line or polygon.
void freeze(bool frozen=true)
Freeze/thaw the map canvas.
void setScaleLocked(bool isLocked)
Lock the scale, so zooming can be performed using magnication.
Class that stores computed placement from labeling engine.
void remoteSvgFetched(const QString &url)
Emitted when the cache has finished retrieving an SVG file from a remote url.
QgsRectangle extent() const
Returns the current zoom extent of the map canvas.
This class is responsible for keeping cache of rendered images resulting from a map rendering job...
void transformContextChanged()
Emitted when the project transformContext() is changed.
Custom exception class for Coordinate Reference System related exceptions.
void setTheme(const QString &theme)
Sets a map theme to show in the canvas.
bool isParallelRenderingEnabled() const
Check whether the layers are rendered in parallel or sequentially.
QgsVectorDataProvider * dataProvider() FINAL
Returns the layer's data provider.
PreviewMode mode() const
Returns the mode used for the preview effect.
void readXml(QDomNode &node)
bool nextFeature(QgsFeature &f)
QPoint rubberStartPoint
Beginning point of a rubber band.
const QgsMapSettings & mapSettings() const
Returns map settings with which this job was started.
double width() const
Returns the width of the rectangle.
virtual QgsLabelingResults * takeLabelingResults()=0
Gets pointer to internal labeling engine (in order to get access to the results). ...
void xyCoordinates(const QgsPointXY &p)
Emits current mouse position.
void autoRefreshIntervalChanged(int interval)
Emitted when the auto refresh interval changes.
void writeXml(QDomNode &node, QDomDocument &doc)
void zoomIn()
Zoom in with fixed factor.
Stores settings related to the context in which a preview job runs.
void waitForFinished() override
Block until the job has finished.
Represents a vector layer which manages a vector based data sets.
virtual void updatePosition()
called on changed extent or resize event to update position of the item
void mapToolSet(QgsMapTool *newTool, QgsMapTool *oldTool)
Emit map tool changed with the old tool.
CanvasProperties()=default
Constructor for CanvasProperties.
An interactive map canvas item which displays a QgsAnnotation.
double xMinimum() const
Returns the x minimum value (left side of rectangle).
void themeChanged(const QString &theme)
Emitted when the canvas has been assigned a different map theme.
void extentsChanged()
Emitted when the extents of the map change.
int renderingTime() const
Returns the total time it took to finish the job (in milliseconds).
void ellipsoidChanged(const QString &ellipsoid)
Emitted when the project ellipsoid is changed.
QString theme() const
Returns the map's theme shown in the canvas, if set.
QgsMapLayer * layer(int index)
Returns the map layer at position index in the layer stack.
static QgsGeometry fromPointXY(const QgsPointXY &point)
Creates a new geometry from a QgsPointXY object.
virtual bool isActive() const =0
Tell whether the rendering job is currently running in background.
void setXMinimum(double x)
Set the minimum x value.
QgsCoordinateReferenceSystem crs
double height() const
Returns the height of the rectangle.
void setMagnificationFactor(double factor)
Sets the factor of magnification to apply to the map canvas.
void panActionEnd(QPoint releasePoint)
Ends pan action and redraws the canvas.
QgsRectangle fullExtent() const
Returns the combined extent for all layers on the map canvas.
void setLayers(const QList< QgsMapLayer * > &layers)
Set list of layers for map rendering.
void layersChanged()
Emitted when a new set of layers has been received.
void messageEmitted(const QString &title, const QString &message, Qgis::MessageLevel=Qgis::Info)
emit a message (usually to be displayed in a message bar)
virtual bool usedCachedLabels() const =0
Returns true if the render job was able to use a cached labeling solution.