17#include "moc_qgslayoutitem3dmap.cpp" 
   59  QList<QgsLayoutItem3DMap *> mapsList;
 
   60  mLayout->layoutItems( mapsList );
 
   69    if ( map->mMapId == mMapId )
 
   72    maxId = std::max( maxId, map->mMapId );
 
   77    mLayout->itemsModel()->updateItemDisplayName( 
this );
 
 
   89  return tr( 
"3D Map %1" ).arg( mMapId );
 
 
   92void QgsLayoutItem3DMap::updateToolTip()
 
  100  QPainter *painter = ctx.
painter();
 
  102  int w = 
static_cast<int>( std::ceil( rect().width() * ctx.
scaleFactor() ) );
 
  103  int h = 
static_cast<int>( std::ceil( rect().height() * ctx.
scaleFactor() ) );
 
  104  QRect r( 0, 0, w, h );
 
  110    painter->drawText( r, Qt::AlignCenter, tr( 
"Scene not set" ) );
 
  118    mCapturedImage = QImage();
 
  121  if ( !mCapturedImage.isNull() )
 
  123    painter->drawImage( r, mCapturedImage );
 
  130  if ( 
mLayout->renderContext().isPreviewRender() )
 
  132    painter->drawText( r, Qt::AlignCenter, tr( 
"Loading" ) );
 
  150  QSize sizePixelsInt = QSize( 
static_cast<int>( std::ceil( sizePixels.width() ) ), 
static_cast<int>( std::ceil( sizePixels.height() ) ) );
 
  160    mEngine->setSize( sizePixelsInt );
 
  164    mEngine->setRootEntity( mScene );
 
  167  if ( mEngine->size() != sizePixelsInt )
 
  168    mEngine->setSize( sizePixelsInt );
 
  172  if ( 
mLayout->renderContext().isPreviewRender() )
 
  174    onSceneStateChanged();
 
  188    painter->drawImage( r, img );
 
 
  197void QgsLayoutItem3DMap::onImageCaptured( 
const QImage &img )
 
  199  mCapturedImage = img;
 
  203void QgsLayoutItem3DMap::onSceneStateChanged()
 
  207    mEngine->requestCaptureImage();
 
  211void QgsLayoutItem3DMap::onSizePositionChanged()
 
  213  mCapturedImage = QImage();
 
  222    QDomElement elemSettings = mSettings->writeXml( document, context );
 
  223    element.appendChild( elemSettings );
 
  226  QDomElement elemCameraPose = mCameraPose.
writeXml( document );
 
  227  element.appendChild( elemCameraPose );
 
  230  QDomElement elemTemporal = document.createElement( QStringLiteral( 
"temporal-settings" ) );
 
  231  elemTemporal.setAttribute( QStringLiteral( 
"isTemporal" ), 
isTemporal() ? 1 : 0 );
 
  234    elemTemporal.setAttribute( QStringLiteral( 
"temporalRangeBegin" ), 
temporalRange().
begin().toString( Qt::ISODate ) );
 
  235    elemTemporal.setAttribute( QStringLiteral( 
"temporalRangeEnd" ), 
temporalRange().
end().toString( Qt::ISODate ) );
 
  237  element.appendChild( elemTemporal );
 
 
  245  QDomElement elemSettings = element.firstChildElement( QStringLiteral( 
"qgis3d" ) );
 
  246  if ( !elemSettings.isNull() )
 
  249    mSettings->readXml( elemSettings, context );
 
  252      mSettings->resolveReferences( *
mLayout->project() );
 
  254      mSettings->setTransformContext( 
mLayout->project()->transformContext() );
 
  255      mSettings->setPathResolver( 
mLayout->project()->pathResolver() );
 
  256      mSettings->setMapThemeCollection( 
mLayout->project()->mapThemeCollection() );
 
  260  QDomElement elemCameraPose = element.firstChildElement( QStringLiteral( 
"camera-pose" ) );
 
  261  if ( !elemCameraPose.isNull() )
 
  262    mCameraPose.
readXml( elemCameraPose );
 
  265  QDomElement elemTemporal = element.firstChildElement( QStringLiteral( 
"temporal-settings" ) );
 
  266  setIsTemporal( elemTemporal.attribute( QStringLiteral( 
"isTemporal" ) ).toInt() );
 
  269    QDateTime begin = QDateTime::fromString( elemTemporal.attribute( QStringLiteral( 
"temporalRangeBegin" ) ), Qt::ISODate );
 
  270    QDateTime end = QDateTime::fromString( elemTemporal.attribute( QStringLiteral( 
"temporalRangeBegin" ) ), Qt::ISODate );
 
 
  284  mSettings.reset( settings );
 
  289  mCapturedImage = QImage();
 
 
  297  mCapturedImage = QImage();
 
 
  302  if ( mCameraPose == pose )
 
  306  mCapturedImage = QImage();
 
 
@ Export
Renderer used for printing or exporting to a file.
 
@ View
Renderer used for displaying on screen.
 
Entity that encapsulates our 3D scene - contains all other entities (such as terrain) as children.
 
QgsCameraController * cameraController() const
Returns camera controller.
 
@ Ready
The scene is fully loaded/updated.
 
void sceneStateChanged()
Emitted when the scene's state has changed.
 
SceneState sceneState() const
Returns the current state of the scene.
 
static QImage captureSceneImage(QgsAbstract3DEngine &engine, Qgs3DMapScene *scene)
Captures image of the current 3D scene of a 3D engine.
 
void imageCaptured(const QImage &image)
Emitted after a call to requestCaptureImage() to return the captured image.
 
static QIcon getThemeIcon(const QString &name, const QColor &fillColor=QColor(), const QColor &strokeColor=QColor())
Helper to get a theme icon.
 
void setCameraPose(const QgsCameraPose &camPose, bool force=false)
Sets camera pose.
 
Encapsulates camera pose in a 3D scene.
 
QDomElement writeXml(QDomDocument &doc) const
Writes configuration to a new DOM element and returns it.
 
void readXml(const QDomElement &elem)
Reads configuration from a DOM element previously written using writeXml()
 
Implements support of 3D map views in print layouts.
 
void setCameraPose(const QgsCameraPose &pose)
Configures camera view.
 
QString displayName() const override
overridden to show "3D Map 1" type names
 
QgsLayoutItem3DMap(QgsLayout *layout)
Constructor for QgsLayoutItem3DMap, with the specified parent layout.
 
virtual int type() const override
 
void draw(QgsLayoutItemRenderContext &context) override
Draws the item's contents using the specified item render context.
 
QIcon icon() const override
Returns the item's icon.
 
static QgsLayoutItem3DMap * create(QgsLayout *layout)
Returns a new 3D map item for the specified layout.
 
void setMapSettings(Qgs3DMapSettings *settings)
Configures map scene.
 
bool readPropertiesFromElement(const QDomElement &element, const QDomDocument &document, const QgsReadWriteContext &context) override
Sets item state from a DOM element.
 
void assignFreeId()
Sets the map id() to a number not yet used in the layout.
 
void finalizeRestoreFromXml() override
Called after all pending items have been restored from XML.
 
bool writePropertiesToElement(QDomElement &element, QDomDocument &document, const QgsReadWriteContext &context) const override
Stores item state within an XML DOM element.
 
Contains settings and helpers relating to a render of a QgsLayoutItem.
 
QgsRenderContext & renderContext()
Returns a reference to the context's render context.
 
Base class for graphical items within a QgsLayout.
 
QColor backgroundColor(bool useDataDefined=true) const
Returns the background color for this item.
 
QgsLayoutSize sizeWithUnits() const
Returns the item's current size, including units.
 
void sizePositionChanged()
Emitted when the item's size or position changes.
 
QString id() const
Returns the item's ID name.
 
void refresh() override
Refreshes the item, causing a recalculation of any property overrides and recalculation of its positi...
 
const QgsLayout * layout() const
Returns the layout the object is attached to.
 
QPointer< QgsLayout > mLayout
 
Base class for layouts, which can contain items such as maps, labels, scalebars, etc.
 
Off-screen 3D engine implementation.
 
A container for the context for various read/write operations on objects.
 
Contains information about the context of a rendering operation.
 
double scaleFactor() const
Returns the scaling factor for the render to convert painter units to physical sizes.
 
QPainter * painter()
Returns the destination QPainter for the render operation.
 
const QgsDateTimeRange & temporalRange() const
Returns the datetime range for the object.
 
bool isTemporal() const
Returns true if the object's temporal range is enabled, and the object will be filtered when renderin...
 
void setIsTemporal(bool enabled)
Sets whether the temporal range is enabled (i.e.
 
void setTemporalRange(const QgsDateTimeRange &range)
Sets the temporal range for the object.
 
T begin() const
Returns the beginning of the range.
 
T end() const
Returns the upper bound of the range.
 
QgsTemporalRange< QDateTime > QgsDateTimeRange
QgsRange which stores a range of date times.