QGIS API Documentation  3.14.0-Pi (9f7028fd23)
qgslayoutitemmapoverview.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  qgslayoutitemmapoverview.cpp
3  --------------------
4  begin : October 2017
5  copyright : (C) 2017 by Nyall Dawson
6  email : nyall dot dawson at gmail dot com
7  ***************************************************************************/
8 
9 /***************************************************************************
10  * *
11  * This program is free software; you can redistribute it and/or modify *
12  * it under the terms of the GNU General Public License as published by *
13  * the Free Software Foundation; either version 2 of the License, or *
14  * (at your option) any later version. *
15  * *
16  ***************************************************************************/
17 
19 #include "qgslayoutitemmap.h"
20 #include "qgslayout.h"
21 #include "qgssymbollayerutils.h"
22 #include "qgssymbol.h"
23 #include "qgsmapsettings.h"
24 #include "qgspainting.h"
25 #include "qgspathresolver.h"
26 #include "qgsreadwritecontext.h"
27 #include "qgslayoututils.h"
28 #include "qgsexception.h"
29 #include "qgsvectorlayer.h"
31 #include "qgsstyleentityvisitor.h"
32 
33 #include <QPainter>
34 
36  : QgsLayoutItemMapItem( name, map )
37  , mExtentLayer( qgis::make_unique< QgsVectorLayer >( QStringLiteral( "Polygon?crs=EPSG:4326" ), tr( "Overview" ), QStringLiteral( "memory" ), QgsVectorLayer::LayerOptions( map && map->layout() && map->layout()->project() ? map->layout()->project()->transformContext() : QgsCoordinateTransformContext() ) ) )
38 {
39  createDefaultFrameSymbol();
40 }
41 
43 
44 void QgsLayoutItemMapOverview::createDefaultFrameSymbol()
45 {
46  QgsStringMap properties;
47  properties.insert( QStringLiteral( "color" ), QStringLiteral( "255,0,0,75" ) );
48  properties.insert( QStringLiteral( "style" ), QStringLiteral( "solid" ) );
49  properties.insert( QStringLiteral( "style_border" ), QStringLiteral( "no" ) );
50  mFrameSymbol.reset( QgsFillSymbol::createSimple( properties ) );
51 
52  mExtentLayer->setRenderer( new QgsSingleSymbolRenderer( mFrameSymbol->clone() ) );
53 }
54 
55 void QgsLayoutItemMapOverview::draw( QPainter *painter )
56 {
57  if ( !mEnabled || !mFrameMap || !mMap || !mMap->layout() )
58  {
59  return;
60  }
61  if ( !painter )
62  {
63  return;
64  }
65 
66  const QgsLayoutItemMap *overviewFrameMap = linkedMap();
67  if ( !overviewFrameMap )
68  {
69  return;
70  }
71 
72  //get polygon for other overview frame map's extent (use visibleExtentPolygon as it accounts for map rotation)
73  QPolygonF otherExtent = overviewFrameMap->visibleExtentPolygon();
74  if ( overviewFrameMap->crs() !=
75  mMap->crs() )
76  {
77  QgsGeometry g = QgsGeometry::fromQPolygonF( otherExtent );
78 
79  // reproject extent
80  QgsCoordinateTransform ct( overviewFrameMap->crs(),
81  mMap->crs(), mLayout->project() );
82  g = g.densifyByCount( 20 );
83  try
84  {
85  g.transform( ct );
86  }
87  catch ( QgsCsException & )
88  {
89  }
90 
91  otherExtent = g.asQPolygonF();
92  }
93 
94  //get current map's extent as a QPolygonF
95  QPolygonF thisExtent = mMap->visibleExtentPolygon();
96  //intersect the two
97  QPolygonF intersectExtent = thisExtent.intersected( otherExtent );
98 
99  //setup painter scaling to dots so that raster symbology is drawn to scale
100  double dotsPerMM = painter->device()->logicalDpiX() / 25.4;
101 
102  //setup render context
104  context.setForceVectorOutput( true );
105  QgsExpressionContext expressionContext = createExpressionContext();
106  context.setExpressionContext( expressionContext );
107 
108  painter->save();
109  painter->setCompositionMode( mBlendMode );
110  painter->translate( mMap->mXOffset, mMap->mYOffset );
111  painter->scale( 1 / dotsPerMM, 1 / dotsPerMM ); // scale painter from mm to dots
112  if ( context.flags() & QgsRenderContext::Antialiasing )
113  painter->setRenderHint( QPainter::Antialiasing );
114 
115  mFrameSymbol->startRender( context );
116 
117  //construct a polygon corresponding to the intersecting map extent
118  //need to scale line to dots, rather then mm, since the painter has been scaled to dots
119  QTransform mapTransform;
120  QPolygonF thisRectPoly = QPolygonF( QRectF( 0, 0, dotsPerMM * mMap->rect().width(), dotsPerMM * mMap->rect().height() ) );
121 
122  //workaround QT Bug #21329
123  thisRectPoly.pop_back();
124  thisExtent.pop_back();
125 
126  //create transform from map coordinates to painter coordinates
127  QTransform::quadToQuad( thisExtent, thisRectPoly, mapTransform );
128  QPolygonF intersectPolygon;
129  intersectPolygon = mapTransform.map( intersectExtent );
130 
131  QVector<QPolygonF> rings; //empty list
132  if ( !mInverted )
133  {
134  //Render the intersecting map extent
135  mFrameSymbol->renderPolygon( intersectPolygon, &rings, nullptr, context );
136  }
137  else
138  {
139  //We are inverting the overview frame (ie, shading outside the intersecting extent)
140  //Construct a polygon corresponding to the overview map extent
141  QPolygonF outerPolygon;
142  outerPolygon << QPointF( 0, 0 )
143  << QPointF( mMap->rect().width() * dotsPerMM, 0 )
144  << QPointF( mMap->rect().width() * dotsPerMM, mMap->rect().height() * dotsPerMM )
145  << QPointF( 0, mMap->rect().height() * dotsPerMM )
146  << QPointF( 0, 0 );
147 
148  //Intersecting extent is an inner ring for the shaded area
149  rings.append( intersectPolygon );
150  mFrameSymbol->renderPolygon( outerPolygon, &rings, nullptr, context );
151  }
152 
153  mFrameSymbol->stopRender( context );
154  painter->restore();
155 }
156 
157 bool QgsLayoutItemMapOverview::writeXml( QDomElement &elem, QDomDocument &doc, const QgsReadWriteContext &context ) const
158 {
159  if ( elem.isNull() )
160  {
161  return false;
162  }
163 
164  //overview map frame
165  QDomElement overviewFrameElem = doc.createElement( QStringLiteral( "ComposerMapOverview" ) );
166 
167  overviewFrameElem.setAttribute( QStringLiteral( "frameMap" ), mFrameMap ? mFrameMap ->uuid() : QString() );
168  overviewFrameElem.setAttribute( QStringLiteral( "blendMode" ), QgsPainting::getBlendModeEnum( mBlendMode ) );
169  overviewFrameElem.setAttribute( QStringLiteral( "inverted" ), mInverted );
170  overviewFrameElem.setAttribute( QStringLiteral( "centered" ), mCentered );
171 
172  QDomElement frameStyleElem = QgsSymbolLayerUtils::saveSymbol( QString(), mFrameSymbol.get(), doc, context );
173  overviewFrameElem.appendChild( frameStyleElem );
174 
175  bool ok = QgsLayoutItemMapItem::writeXml( overviewFrameElem, doc, context );
176  elem.appendChild( overviewFrameElem );
177  return ok;
178 }
179 
180 bool QgsLayoutItemMapOverview::readXml( const QDomElement &itemElem, const QDomDocument &doc, const QgsReadWriteContext &context )
181 {
182  Q_UNUSED( doc )
183  if ( itemElem.isNull() )
184  {
185  return false;
186  }
187 
188  bool ok = QgsLayoutItemMapItem::readXml( itemElem, doc, context );
189 
190  mFrameMapUuid = itemElem.attribute( QStringLiteral( "frameMap" ) );
191  setLinkedMap( nullptr );
192 
193  mBlendMode = QgsPainting::getCompositionMode( static_cast< QgsPainting::BlendMode >( itemElem.attribute( QStringLiteral( "blendMode" ), QStringLiteral( "0" ) ).toUInt() ) );
194  mInverted = ( itemElem.attribute( QStringLiteral( "inverted" ), QStringLiteral( "0" ) ) != QLatin1String( "0" ) );
195  mCentered = ( itemElem.attribute( QStringLiteral( "centered" ), QStringLiteral( "0" ) ) != QLatin1String( "0" ) );
196 
197  QDomElement frameStyleElem = itemElem.firstChildElement( QStringLiteral( "symbol" ) );
198  if ( !frameStyleElem.isNull() )
199  {
200  mFrameSymbol.reset( QgsSymbolLayerUtils::loadSymbol<QgsFillSymbol>( frameStyleElem, context ) );
201  }
202  return ok;
203 }
204 
206 {
207  if ( !mFrameMapUuid.isEmpty() )
208  {
209  setLinkedMap( qobject_cast< QgsLayoutItemMap * >( mLayout->itemByUuid( mFrameMapUuid, true ) ) );
210  }
211 }
212 
214 {
215  return mBlendMode != QPainter::CompositionMode_SourceOver;
216 }
217 
219 {
220  if ( mFrameMap == map )
221  {
222  //no change
223  return;
224  }
225 
226  //disconnect old map
227  if ( mFrameMap )
228  {
231  }
232  mFrameMap = map;
233  //connect to new map signals
234  connectSignals();
236 }
237 
239 {
240  return mFrameMap;
241 }
242 
244 {
245  if ( !mMap )
246  {
247  return;
248  }
249 
250  if ( mFrameMap )
251  {
254  }
255 }
256 
258 {
259  if ( !mEnabled || !mFrameMap || !mMap || !mMap->layout() )
260  {
261  return nullptr;
262  }
263 
264  const QgsLayoutItemMap *overviewFrameMap = linkedMap();
265  if ( !overviewFrameMap )
266  {
267  return nullptr;
268  }
269 
270  //get polygon for other overview frame map's extent (use visibleExtentPolygon as it accounts for map rotation)
271  QPolygonF otherExtent = overviewFrameMap->visibleExtentPolygon();
272  QgsGeometry g = QgsGeometry::fromQPolygonF( otherExtent );
273 
274  if ( overviewFrameMap->crs() != mMap->crs() )
275  {
276  // reproject extent
277  QgsCoordinateTransform ct( overviewFrameMap->crs(),
278  mMap->crs(), mLayout->project() );
279  g = g.densifyByCount( 20 );
280  try
281  {
282  g.transform( ct );
283  }
284  catch ( QgsCsException & )
285  {
286  }
287  }
288 
289  //get current map's extent as a QPolygonF
290  QPolygonF thisExtent = mMap->visibleExtentPolygon();
291  QgsGeometry thisGeom = QgsGeometry::fromQPolygonF( thisExtent );
292  //intersect the two
293  QgsGeometry intersectExtent = thisGeom.intersection( g );
294 
295  mExtentLayer->setBlendMode( mBlendMode );
296 
297  static_cast< QgsSingleSymbolRenderer * >( mExtentLayer->renderer() )->setSymbol( mFrameSymbol->clone() );
298  mExtentLayer->dataProvider()->truncate();
299  mExtentLayer->setCrs( mMap->crs() );
300 
301  if ( mInverted )
302  {
303  intersectExtent = thisGeom.difference( intersectExtent );
304  }
305 
306  QgsFeature f;
307  f.setGeometry( intersectExtent );
308  mExtentLayer->dataProvider()->addFeature( f );
309 
310  return mExtentLayer.get();
311 }
312 
314 {
315  return mExtentLayer.get();
316 }
317 
319 {
320  if ( mFrameSymbol )
321  {
322  QgsStyleSymbolEntity entity( mFrameSymbol.get() );
323  if ( !visitor->visit( QgsStyleEntityVisitorInterface::StyleLeaf( &entity, QStringLiteral( "overview" ), QObject::tr( "Overview" ) ) ) )
324  return false;
325  }
326 
327  return true;
328 }
329 
331 {
332  mFrameSymbol.reset( symbol );
333 }
334 
336 {
337  return mFrameSymbol.get();
338 }
339 
341 {
342  return mFrameSymbol.get();
343 }
344 
345 void QgsLayoutItemMapOverview::setBlendMode( const QPainter::CompositionMode blendMode )
346 {
347  mBlendMode = blendMode;
348 }
349 
350 void QgsLayoutItemMapOverview::setInverted( const bool inverted )
351 {
352  mInverted = inverted;
353 }
354 
355 void QgsLayoutItemMapOverview::setCentered( const bool centered )
356 {
357  mCentered = centered;
359 }
360 
362 {
363  if ( !mMap )
364  {
365  return;
366  }
367 
368  //if using overview centering, update the map's extent
369  if ( mMap->layout() && mCentered && mFrameMap )
370  {
371  QgsRectangle extent = mMap->extent();
372  QgsRectangle otherExtent = mFrameMap->extent();
373 
374  QgsPointXY center = otherExtent.center();
375  QgsRectangle movedExtent( center.x() - extent.width() / 2,
376  center.y() - extent.height() / 2,
377  center.x() - extent.width() / 2 + extent.width(),
378  center.y() - extent.height() / 2 + extent.height() );
379  mMap->setExtent( movedExtent );
380  }
381 
382  //repaint map so that overview gets updated
384 }
385 
386 
387 //
388 // QgsLayoutItemMapOverviewStack
389 //
390 
393 {
394 
395 }
396 
398 {
400 }
401 
402 void QgsLayoutItemMapOverviewStack::removeOverview( const QString &overviewId )
403 {
405 }
406 
407 void QgsLayoutItemMapOverviewStack::moveOverviewUp( const QString &overviewId )
408 {
410 }
411 
412 void QgsLayoutItemMapOverviewStack::moveOverviewDown( const QString &overviewId )
413 {
415 }
416 
418 {
420  return qobject_cast<QgsLayoutItemMapOverview *>( item );
421 }
422 
424 {
426  return qobject_cast<QgsLayoutItemMapOverview *>( item );
427 }
428 
430 {
431  QgsLayoutItemMapItem *item = mItems.at( idx );
432  QgsLayoutItemMapOverview *overview = qobject_cast<QgsLayoutItemMapOverview *>( item );
433  return *overview;
434 }
435 
436 QList<QgsLayoutItemMapOverview *> QgsLayoutItemMapOverviewStack::asList() const
437 {
438  QList< QgsLayoutItemMapOverview * > list;
439  QList< QgsLayoutItemMapItem * >::const_iterator it = mItems.begin();
440  for ( ; it != mItems.end(); ++it )
441  {
442  QgsLayoutItemMapOverview *overview = qobject_cast<QgsLayoutItemMapOverview *>( *it );
443  if ( overview )
444  {
445  list.append( overview );
446  }
447  }
448  return list;
449 }
450 
451 bool QgsLayoutItemMapOverviewStack::readXml( const QDomElement &elem, const QDomDocument &doc, const QgsReadWriteContext &context )
452 {
453  removeItems();
454 
455  //read overview stack
456  QDomNodeList mapOverviewNodeList = elem.elementsByTagName( QStringLiteral( "ComposerMapOverview" ) );
457  for ( int i = 0; i < mapOverviewNodeList.size(); ++i )
458  {
459  QDomElement mapOverviewElem = mapOverviewNodeList.at( i ).toElement();
460  QgsLayoutItemMapOverview *mapOverview = new QgsLayoutItemMapOverview( mapOverviewElem.attribute( QStringLiteral( "name" ) ), mMap );
461  mapOverview->readXml( mapOverviewElem, doc, context );
462  mItems.append( mapOverview );
463  }
464 
465  return true;
466 }
467 
468 QList<QgsMapLayer *> QgsLayoutItemMapOverviewStack::modifyMapLayerList( const QList<QgsMapLayer *> &layers )
469 {
470  QList<QgsMapLayer *> res = layers;
471  res.reserve( layers.count() + mItems.count() );
472  for ( QgsLayoutItemMapItem *item : qgis::as_const( mItems ) )
473  {
474  if ( !item )
475  continue;
476 
477  QgsVectorLayer *l = static_cast< QgsLayoutItemMapOverview * >( item )->asMapLayer();
478  if ( !l )
479  continue;
480 
481  switch ( item->stackingPosition() )
482  {
484  continue;
485 
488  {
489  QgsMapLayer *stackLayer = item->stackingLayer();
490  if ( !stackLayer )
491  continue;
492 
493  auto pos = std::find( res.begin(), res.end(), stackLayer );
494  if ( pos == res.end() )
495  continue;
496 
498  {
499  pos++;
500  if ( pos == res.end() )
501  {
502  res.push_back( l );
503  break;
504  }
505  }
506  res.insert( pos, l );
507  break;
508  }
509 
511  res.push_back( l );
512  break;
513 
515  res.push_front( l );
516  break;
517  }
518  }
519 
520  return res;
521 }
QgsLayoutItemMapOverviewStack::QgsLayoutItemMapOverviewStack
QgsLayoutItemMapOverviewStack(QgsLayoutItemMap *map)
Constructor for QgsLayoutItemMapOverviewStack, attached to the specified map.
Definition: qgslayoutitemmapoverview.cpp:391
QgsExpressionContext
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
Definition: qgsexpressioncontext.h:369
QgsLayoutObject::layout
const QgsLayout * layout() const
Returns the layout the object is attached to.
Definition: qgslayoutobject.cpp:118
QgsLayoutItemMapItem::StackAboveMapLayer
@ StackAboveMapLayer
Render above a specific map layer (see stackingLayer())
Definition: qgslayoutitemmapitem.h:44
QgsLayoutItemMapOverview::readXml
bool readXml(const QDomElement &itemElem, const QDomDocument &doc, const QgsReadWriteContext &context) override
Sets the map item state from a DOM document, where element is the DOM node corresponding to a 'Layout...
Definition: qgslayoutitemmapoverview.cpp:180
QgsLayoutItemMapOverview::finalizeRestoreFromXml
void finalizeRestoreFromXml() override
Called after all pending items have been restored from XML.
Definition: qgslayoutitemmapoverview.cpp:205
QgsPointXY::y
double y
Definition: qgspointxy.h:48
QgsGeometry::transform
OperationResult transform(const QgsCoordinateTransform &ct, QgsCoordinateTransform::TransformDirection direction=QgsCoordinateTransform::ForwardTransform, bool transformZ=false) SIP_THROW(QgsCsException)
Transforms this geometry as described by the coordinate transform ct.
Definition: qgsgeometry.cpp:2836
QgsCoordinateTransformContext
Definition: qgscoordinatetransformcontext.h:57
QgsLayoutItemMapOverviewStack::addOverview
void addOverview(QgsLayoutItemMapOverview *overview)
Adds a new map overview to the stack and takes ownership of the overview.
Definition: qgslayoutitemmapoverview.cpp:397
QgsLayoutItemMapItem::StackBelowMapLayer
@ StackBelowMapLayer
Render below a specific map layer (see stackingLayer())
Definition: qgslayoutitemmapitem.h:43
QgsLayoutItemMapOverview::overviewExtentChanged
void overviewExtentChanged()
Handles recentering of the map and redrawing of the map's overview.
Definition: qgslayoutitemmapoverview.cpp:361
QgsPainting::BlendMode
BlendMode
Blending modes enum defining the available composition modes that can be used when rendering a layer.
Definition: qgspainting.h:49
QgsReadWriteContext
Definition: qgsreadwritecontext.h:34
qgssinglesymbolrenderer.h
QgsStyleSymbolEntity
Definition: qgsstyle.h:1134
QgsLayoutItemMapOverviewStack::moveOverviewDown
void moveOverviewDown(const QString &overviewId)
Moves an overview with matching overviewId down the stack, causing it to be rendered below other over...
Definition: qgslayoutitemmapoverview.cpp:412
QgsLayoutItemMapItem::createExpressionContext
QgsExpressionContext createExpressionContext() const override
This method needs to be reimplemented in all classes which implement this interface and return an exp...
Definition: qgslayoutitemmapitem.cpp:124
qgsreadwritecontext.h
QgsLayoutItemMap::extentChanged
void extentChanged()
Emitted when the map's extent changes.
QgsLayoutItemMapOverview::setInverted
void setInverted(bool inverted)
Sets whether the overview frame is inverted, ie, whether the shaded area is drawn outside the extent ...
Definition: qgslayoutitemmapoverview.cpp:350
QgsLayoutItemMapOverview::setLinkedMap
void setLinkedMap(QgsLayoutItemMap *map)
Sets the map to show the overview extent of.
Definition: qgslayoutitemmapoverview.cpp:218
qgssymbollayerutils.h
qgspathresolver.h
QgsLayoutItemMapItem::map
const QgsLayoutItemMap * map() const
Returns the layout item map for the item.
Definition: qgslayoutitemmapitem.cpp:84
QgsRenderContext
Definition: qgsrendercontext.h:57
QgsLayoutItemMapItem
An item which is drawn inside a QgsLayoutItemMap, e.g., a grid or map overview.
Definition: qgslayoutitemmapitem.h:33
QgsStyleEntityVisitorInterface
Definition: qgsstyleentityvisitor.h:33
QgsLayoutItemMapItemStack::mMap
QgsLayoutItemMap * mMap
Definition: qgslayoutitemmapitem.h:355
QgsSingleSymbolRenderer
Definition: qgssinglesymbolrenderer.h:29
QgsLayoutItemMapItemStack
A collection of map items which are drawn above the map content in a QgsLayoutItemMap....
Definition: qgslayoutitemmapitem.h:230
QgsLayoutItemMapItemStack::removeItems
void removeItems()
Clears the item stack and deletes all QgsLayoutItemMapItems contained by the stack.
Definition: qgslayoutitemmapitem.cpp:323
qgsmapsettings.h
QgsLayoutItemMapItem::StackBelowMap
@ StackBelowMap
Render below all map layers.
Definition: qgslayoutitemmapitem.h:42
QgsLayoutItemMapOverview::setFrameSymbol
void setFrameSymbol(QgsFillSymbol *symbol)
Sets the fill symbol used for drawing the overview extent.
Definition: qgslayoutitemmapoverview.cpp:330
QgsLayoutItemMapOverview::draw
void draw(QPainter *painter) override
Draws the item on to a destination painter.
Definition: qgslayoutitemmapoverview.cpp:55
QgsRectangle
Definition: qgsrectangle.h:41
QgsStyleEntityVisitorInterface::StyleLeaf
Contains information relating to the style entity currently being visited.
Definition: qgsstyleentityvisitor.h:60
QgsLayoutItemMapOverview::inverted
bool inverted() const
Returns whether the overview frame is inverted, ie, whether the shaded area is drawn outside the exte...
Definition: qgslayoutitemmapoverview.h:195
QgsGeometry::intersection
QgsGeometry intersection(const QgsGeometry &geometry) const
Returns a geometry representing the points shared by this geometry and other.
Definition: qgsgeometry.cpp:2395
QgsLayoutItemMapOverview::asMapLayer
QgsVectorLayer * asMapLayer()
Returns a vector layer to render as part of the QgsLayoutItemMap render, containing a feature represe...
Definition: qgslayoutitemmapoverview.cpp:257
QgsPainting::getBlendModeEnum
static QgsPainting::BlendMode getBlendModeEnum(QPainter::CompositionMode blendMode)
Returns a BlendMode corresponding to a QPainter::CompositionMode.
Definition: qgspainting.cpp:80
qgslayoututils.h
QgsLayoutItemMapOverview::setCentered
void setCentered(bool centered)
Sets whether the extent of the map is forced to center on the overview.
Definition: qgslayoutitemmapoverview.cpp:355
QgsLayoutItemMapOverview::setBlendMode
void setBlendMode(QPainter::CompositionMode mode)
Sets the blending mode used for drawing the overview.
Definition: qgslayoutitemmapoverview.cpp:345
QgsLayoutUtils::createRenderContextForLayout
static QgsRenderContext createRenderContextForLayout(QgsLayout *layout, QPainter *painter, double dpi=-1)
Creates a render context suitable for the specified layout and painter destination.
Definition: qgslayoututils.cpp:138
QgsLayoutItemMapOverviewStack::overview
QgsLayoutItemMapOverview * overview(const QString &overviewId) const
Returns a reference to an overview with matching overviewId within the stack.
Definition: qgslayoutitemmapoverview.cpp:417
QgsLayoutItemMapOverviewStack::asList
QList< QgsLayoutItemMapOverview * > asList() const
Returns a list of QgsLayoutItemMapOverviews contained by the stack.
Definition: qgslayoutitemmapoverview.cpp:436
QgsLayoutItemMapItem::mEnabled
bool mEnabled
True if item is to be displayed on map.
Definition: qgslayoutitemmapitem.h:213
QgsLayoutItemMapOverview::linkedMap
QgsLayoutItemMap * linkedMap()
Returns the source map to show the overview extent of.
Definition: qgslayoutitemmapoverview.cpp:238
QgsCsException
Definition: qgsexception.h:65
QgsGeometry::densifyByCount
QgsGeometry densifyByCount(int extraNodesPerSegment) const
Returns a copy of the geometry which has been densified by adding the specified number of extra nodes...
Definition: qgsgeometry.cpp:2132
QgsLayoutItemMapItem::stackingLayer
QgsMapLayer * stackingLayer() const
Returns the item's stacking layer, which specifies where the in the map's stack the item should be re...
Definition: qgslayoutitemmapitem.cpp:114
qgslayoutitemmapoverview.h
QgsFeature::setGeometry
void setGeometry(const QgsGeometry &geometry)
Set the feature's geometry.
Definition: qgsfeature.cpp:137
QgsLayoutItemMapItem::mMap
QgsLayoutItemMap * mMap
Associated map.
Definition: qgslayoutitemmapitem.h:207
QgsLayoutItemMapOverview::centered
bool centered() const
Returns whether the extent of the map is forced to center on the overview.
Definition: qgslayoutitemmapoverview.h:208
QgsLayoutItemMapItemStack::removeItem
void removeItem(const QString &itemId)
Removes an item which matching itemId from the stack and deletes the corresponding QgsLayoutItemMapIt...
Definition: qgslayoutitemmapitem.cpp:162
QgsLayoutItemMapOverview::~QgsLayoutItemMapOverview
~QgsLayoutItemMapOverview() override
QgsPainting::getCompositionMode
static QPainter::CompositionMode getCompositionMode(QgsPainting::BlendMode blendMode)
Returns a QPainter::CompositionMode corresponding to a BlendMode.
Definition: qgspainting.cpp:20
QgsLayoutItemMap::extent
QgsRectangle extent() const
Returns the current map extent.
Definition: qgslayoutitemmap.cpp:252
qgspainting.h
QgsLayoutItemMap::invalidateCache
void invalidateCache() override
Definition: qgslayoutitemmap.cpp:1695
QgsLayoutItemMapItem::readXml
virtual bool readXml(const QDomElement &element, const QDomDocument &doc, const QgsReadWriteContext &context)
Sets the map item state from a DOM document, where element is the DOM node corresponding to a 'Layout...
Definition: qgslayoutitemmapitem.cpp:55
QgsGeometry::asQPolygonF
QPolygonF asQPolygonF() const
Returns contents of the geometry as a QPolygonF.
Definition: qgsgeometry.cpp:2558
QgsLayoutItemMapItem::StackBelowMapLabels
@ StackBelowMapLabels
Render above all map layers, but below map labels.
Definition: qgslayoutitemmapitem.h:45
QgsLayoutItemMapOverview::accept
bool accept(QgsStyleEntityVisitorInterface *visitor) const override
Accepts the specified style entity visitor, causing it to visit all style entities associated with th...
Definition: qgslayoutitemmapoverview.cpp:318
qgslayout.h
QgsLayoutItemMap::crs
QgsCoordinateReferenceSystem crs() const
Returns coordinate reference system used for rendering the map.
Definition: qgslayoutitemmap.cpp:264
QgsLayoutItemMapItemStack::moveItemDown
void moveItemDown(const QString &itemId)
Moves an item which matching itemId up the stack, causing it to be rendered above other items.
Definition: qgslayoutitemmapitem.cpp:194
QgsLayoutItemMapOverview::QgsLayoutItemMapOverview
QgsLayoutItemMapOverview(const QString &name, QgsLayoutItemMap *map)
Constructor for QgsLayoutItemMapOverview.
Definition: qgslayoutitemmapoverview.cpp:35
qgsvectorlayer.h
QgsPointXY
Definition: qgspointxy.h:43
QgsLayoutItemMapOverview
An individual overview which is drawn above the map content in a QgsLayoutItemMap,...
Definition: qgslayoutitemmapoverview.h:126
QgsRenderContext::setForceVectorOutput
void setForceVectorOutput(bool force)
Sets whether rendering operations should use vector operations instead of any faster raster shortcuts...
Definition: qgsrendercontext.cpp:250
QgsLayoutItemMap
Layout graphical items for displaying a map.
Definition: qgslayoutitemmap.h:39
QgsLayoutItemMapItemStack::mItems
QList< QgsLayoutItemMapItem * > mItems
Definition: qgslayoutitemmapitem.h:353
QgsLayoutItemMapOverviewStack::modifyMapLayerList
QList< QgsMapLayer * > modifyMapLayerList(const QList< QgsMapLayer * > &layers)
Alters the list of map layers which will be rendered for the link map item, inserting temporary layer...
Definition: qgslayoutitemmapoverview.cpp:468
QgsStringMap
QMap< QString, QString > QgsStringMap
Definition: qgis.h:714
QgsLayoutItemMapOverview::mapLayer
QgsMapLayer * mapLayer() override
Returns the internal map layer used by this item, if available.
Definition: qgslayoutitemmapoverview.cpp:313
QgsLayoutItemMapItem::stackingPosition
StackingPosition stackingPosition() const
Returns the item's stacking position, which specifies where the in the map's stack the item should be...
Definition: qgslayoutitemmapitem.h:140
QgsLayoutItemMapOverview::connectSignals
void connectSignals()
Reconnects signals for overview map, so that overview correctly follows changes to source map's exten...
Definition: qgslayoutitemmapoverview.cpp:243
QgsRectangle::center
QgsPointXY center() const
Returns the center point of the rectangle.
Definition: qgsrectangle.h:230
QgsLayoutObject::mLayout
QPointer< QgsLayout > mLayout
Definition: qgslayoutobject.h:335
QgsGeometry
Definition: qgsgeometry.h:122
QgsLayoutItemMapItem::StackAboveMapLabels
@ StackAboveMapLabels
Render above all map layers and labels.
Definition: qgslayoutitemmapitem.h:46
QgsVectorLayer
Definition: qgsvectorlayer.h:385
QgsLayoutItemMap::mapRotationChanged
void mapRotationChanged(double newRotation)
Emitted when the map's rotation changes.
QgsMapLayer
Definition: qgsmaplayer.h:81
QgsLayoutItemMapItem::writeXml
virtual bool writeXml(QDomElement &element, QDomDocument &document, const QgsReadWriteContext &context) const
Stores map item state in a DOM element, where element is the DOM element corresponding to a 'LayoutMa...
Definition: qgslayoutitemmapitem.cpp:33
QgsPointXY::x
double x
Definition: qgspointxy.h:47
QgsLayoutItemMapOverviewStack::removeOverview
void removeOverview(const QString &overviewId)
Removes an overview with matching overviewId from the stack and deletes the corresponding QgsLayoutIt...
Definition: qgslayoutitemmapoverview.cpp:402
QgsRectangle::height
double height() const
Returns the height of the rectangle.
Definition: qgsrectangle.h:209
QgsFillSymbol
Definition: qgssymbol.h:1212
QgsStyleEntityVisitorInterface::visit
virtual bool visit(const QgsStyleEntityVisitorInterface::StyleLeaf &entity)
Called when the visitor will visit a style entity.
Definition: qgsstyleentityvisitor.h:153
QgsRenderContext::Antialiasing
@ Antialiasing
Use antialiasing while drawing.
Definition: qgsrendercontext.h:78
QgsRenderContext::setExpressionContext
void setExpressionContext(const QgsExpressionContext &context)
Sets the expression context.
Definition: qgsrendercontext.h:572
QgsLayoutItemMapItemStack::moveItemUp
void moveItemUp(const QString &itemId)
Moves an item which matching itemId up the stack, causing it to be rendered above other items.
Definition: qgslayoutitemmapitem.cpp:174
QgsLayoutItemMapOverviewStack::readXml
bool readXml(const QDomElement &elem, const QDomDocument &doc, const QgsReadWriteContext &context) override
Sets the item stack's state from a DOM document, where element is a DOM node corresponding to a 'Layo...
Definition: qgslayoutitemmapoverview.cpp:451
qgsexception.h
QgsGeometry::fromQPolygonF
static QgsGeometry fromQPolygonF(const QPolygonF &polygon)
Construct geometry from a QPolygonF.
Definition: qgsgeometry.cpp:3095
QgsFeature
Definition: qgsfeature.h:55
QgsLayoutItemMapItemStack::item
QgsLayoutItemMapItem * item(int index) const
Returns a reference to the item at the specified index within the stack.
Definition: qgslayoutitemmapitem.cpp:227
QgsFillSymbol::createSimple
static QgsFillSymbol * createSimple(const QgsStringMap &properties)
Create a fill symbol with one symbol layer: SimpleFill with specified properties.
Definition: qgssymbol.cpp:1440
QgsLayoutItemMapOverview::frameSymbol
QgsFillSymbol * frameSymbol()
Returns the fill symbol used for drawing the overview extent.
Definition: qgslayoutitemmapoverview.cpp:335
QgsLayoutItemMapItemStack::addItem
void addItem(QgsLayoutItemMapItem *item)
Adds a new map item to the stack and takes ownership of the item.
Definition: qgslayoutitemmapitem.cpp:157
QgsCoordinateTransform
Definition: qgscoordinatetransform.h:52
QgsLayoutItemMapOverview::blendMode
QPainter::CompositionMode blendMode() const
Retrieves the blending mode used for drawing the overview.
Definition: qgslayoutitemmapoverview.h:182
QgsLayoutItemMapOverview::usesAdvancedEffects
bool usesAdvancedEffects() const override
Returns true if the item is drawn using advanced effects, such as blend modes.
Definition: qgslayoutitemmapoverview.cpp:213
QgsLayoutItemMap::setExtent
void setExtent(const QgsRectangle &extent)
Sets a new extent for the map.
Definition: qgslayoutitemmap.cpp:188
qgssymbol.h
QgsSymbolLayerUtils::saveSymbol
static QDomElement saveSymbol(const QString &symbolName, const QgsSymbol *symbol, QDomDocument &doc, const QgsReadWriteContext &context)
Writes a symbol definition to XML.
Definition: qgssymbollayerutils.cpp:1180
QgsRectangle::width
double width() const
Returns the width of the rectangle.
Definition: qgsrectangle.h:202
QgsGeometry::difference
QgsGeometry difference(const QgsGeometry &geometry) const
Returns a geometry representing the points making up this geometry that do not make up other.
Definition: qgsgeometry.cpp:2456
QgsLayoutItemMapOverviewStack::operator[]
QgsLayoutItemMapOverview & operator[](int index)
Returns a reference to an overview at the specified index within the stack.
Definition: qgslayoutitemmapoverview.cpp:429
QgsLayoutItemMapOverview::writeXml
bool writeXml(QDomElement &elem, QDomDocument &doc, const QgsReadWriteContext &context) const override
Stores map item state in a DOM element, where element is the DOM element corresponding to a 'LayoutMa...
Definition: qgslayoutitemmapoverview.cpp:157
qgsstyleentityvisitor.h
QgsLayoutItemMap::visibleExtentPolygon
QPolygonF visibleExtentPolygon() const
Returns a polygon representing the current visible map extent, considering map extents and rotation.
Definition: qgslayoutitemmap.cpp:257
QgsRenderContext::flags
Flags flags() const
Returns combination of flags used for rendering.
Definition: qgsrendercontext.cpp:160
qgslayoutitemmap.h
QgsLayoutItemMapOverviewStack::moveOverviewUp
void moveOverviewUp(const QString &overviewId)
Moves an overview with matching overviewId up the stack, causing it to be rendered above other overvi...
Definition: qgslayoutitemmapoverview.cpp:407