29#include "moc_qgslayoutitem3dmap.cpp"
62 QList<QgsLayoutItem3DMap *> mapsList;
63 mLayout->layoutItems( mapsList );
72 if ( map->mMapId == mMapId )
75 maxId = std::max( maxId, map->mMapId );
80 mLayout->itemsModel()->updateItemDisplayName(
this );
92 return tr(
"3D Map %1" ).arg( mMapId );
95void QgsLayoutItem3DMap::updateToolTip()
103 QPainter *painter = ctx.
painter();
105 int w =
static_cast<int>( std::ceil( rect().width() * ctx.
scaleFactor() ) );
106 int h =
static_cast<int>( std::ceil( rect().height() * ctx.
scaleFactor() ) );
107 QRect r( 0, 0, w, h );
113 painter->drawText( r, Qt::AlignCenter, tr(
"Scene not set" ) );
121 mCapturedImage = QImage();
124 if ( !mCapturedImage.isNull() )
126 painter->drawImage( r, mCapturedImage );
133 if (
mLayout->renderContext().isPreviewRender() )
135 painter->drawText( r, Qt::AlignCenter, tr(
"Loading" ) );
153 QSize sizePixelsInt = QSize(
static_cast<int>( std::ceil( sizePixels.width() ) ),
static_cast<int>( std::ceil( sizePixels.height() ) ) );
160 mEngine = std::make_unique<QgsOffscreen3DEngine>();
163 mEngine->setSize( sizePixelsInt );
167 mEngine->setRootEntity( mScene );
170 if ( mEngine->size() != sizePixelsInt )
171 mEngine->setSize( sizePixelsInt );
173 mScene->cameraController()->setCameraPose( mCameraPose );
175 if (
mLayout->renderContext().isPreviewRender() )
177 onSceneStateChanged();
191 painter->drawImage( r, img );
200void QgsLayoutItem3DMap::onImageCaptured(
const QImage &img )
202 mCapturedImage = img;
206void QgsLayoutItem3DMap::onSceneStateChanged()
210 mEngine->requestCaptureImage();
214void QgsLayoutItem3DMap::onSizePositionChanged()
216 mCapturedImage = QImage();
225 QDomElement elemSettings = mSettings->writeXml( document, context );
226 element.appendChild( elemSettings );
229 QDomElement elemCameraPose = mCameraPose.writeXml( document );
230 element.appendChild( elemCameraPose );
233 QDomElement elemTemporal = document.createElement( QStringLiteral(
"temporal-settings" ) );
234 elemTemporal.setAttribute( QStringLiteral(
"isTemporal" ),
isTemporal() ? 1 : 0 );
237 elemTemporal.setAttribute( QStringLiteral(
"temporalRangeBegin" ),
temporalRange().begin().toString( Qt::ISODate ) );
238 elemTemporal.setAttribute( QStringLiteral(
"temporalRangeEnd" ),
temporalRange().end().toString( Qt::ISODate ) );
240 element.appendChild( elemTemporal );
248 QDomElement elemSettings = element.firstChildElement( QStringLiteral(
"qgis3d" ) );
249 if ( !elemSettings.isNull() )
251 mSettings = std::make_unique<Qgs3DMapSettings>();
252 mSettings->readXml( elemSettings, context );
255 mSettings->resolveReferences( *
mLayout->project() );
257 mSettings->setTransformContext(
mLayout->project()->transformContext() );
258 mSettings->setPathResolver(
mLayout->project()->pathResolver() );
259 mSettings->setMapThemeCollection(
mLayout->project()->mapThemeCollection() );
263 QDomElement elemCameraPose = element.firstChildElement( QStringLiteral(
"camera-pose" ) );
264 if ( !elemCameraPose.isNull() )
265 mCameraPose.readXml( elemCameraPose );
268 QDomElement elemTemporal = element.firstChildElement( QStringLiteral(
"temporal-settings" ) );
269 setIsTemporal( elemTemporal.attribute( QStringLiteral(
"isTemporal" ) ).toInt() );
272 QDateTime begin = QDateTime::fromString( elemTemporal.attribute( QStringLiteral(
"temporalRangeBegin" ) ), Qt::ISODate );
273 QDateTime end = QDateTime::fromString( elemTemporal.attribute( QStringLiteral(
"temporalRangeBegin" ) ), Qt::ISODate );
287 mSettings.reset( settings );
292 mCapturedImage = QImage();
300 mCapturedImage = QImage();
305 if ( mCameraPose == pose )
309 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.
@ Ready
The scene is fully loaded/updated.
void sceneStateChanged()
Emitted when the scene's state has changed.
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.
Encapsulates camera pose in a 3D scene.
void setCameraPose(const QgsCameraPose &pose)
Configures camera view.
~QgsLayoutItem3DMap() override
QString displayName() const override
overridden to show "3D Map 1" type names
QgsLayoutItem3DMap(QgsLayout *layout)
Constructor for QgsLayoutItem3DMap, with the specified parent layout.
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.
QColor backgroundColor(bool useDataDefined=true) const
Returns the background color for this item.
QgsLayoutSize sizeWithUnits() const
Returns the item's current size, including units.
QgsLayoutItem(QgsLayout *layout, bool manageZValue=true)
Constructor for QgsLayoutItem, with the specified parent layout.
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
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.
QgsTemporalRange< QDateTime > QgsDateTimeRange
QgsRange which stores a range of date times.