QGIS API Documentation 4.3.0-Master (6313fb5bce0)
Loading...
Searching...
No Matches
qgstiledscenerendererregistry.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgstiledscenerendererregistry.cpp
3 ---------------------
4 begin : August 2023
5 copyright : (C) 2023 by Nyall Dawson
6 email : nyall dot dawson at gmail dot com
7 ***************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
16
18
19#include <QString>
20
21using namespace Qt::StringLiterals;
22
23// default renderers
26
28{
29 return mCreateFunc ? mCreateFunc( elem, context ).release() : nullptr;
30}
31
32
34{
35 // add default renderers
36 addRenderer( new QgsTiledSceneRendererMetadata( u"texture"_s, QObject::tr( "Textured" ), QgsTiledSceneTextureRenderer::create ) );
37 addRenderer( new QgsTiledSceneRendererMetadata( u"wireframe"_s, QObject::tr( "Wireframe" ), QgsTiledSceneWireframeRenderer::create ) );
38}
39
44
46{
47 if ( !metadata || mRenderers.contains( metadata->name() ) )
48 return false;
49
50 mRenderers[metadata->name()] = metadata;
51 mRenderersOrder << metadata->name();
52 return true;
53}
54
55bool QgsTiledSceneRendererRegistry::removeRenderer( const QString &rendererName )
56{
57 if ( !mRenderers.contains( rendererName ) )
58 return false;
59
60 delete mRenderers[rendererName];
61 mRenderers.remove( rendererName );
62 mRenderersOrder.removeAll( rendererName );
63 return true;
64}
65
67{
68 return mRenderers.value( rendererName );
69}
70
72{
73 QStringList renderers;
74 for ( const QString &renderer : mRenderersOrder )
75 {
76 QgsTiledSceneRendererAbstractMetadata *r = mRenderers.value( renderer );
77 if ( r )
78 renderers << renderer;
79 }
80 return renderers;
81}
82
83std::unique_ptr<QgsTiledSceneRenderer> QgsTiledSceneRendererRegistry::defaultRenderer( const QgsTiledSceneLayer * )
84{
85 return std::make_unique<QgsTiledSceneTextureRenderer>();
86}
A container for the context for various read/write operations on objects.
Represents a map layer supporting display of tiled scene objects.
Stores metadata about one tiled scene renderer class.
QString name() const
Returns the unique name of the renderer.
Convenience metadata class that uses static functions to create tiled scene renderer and its widget.
QgsTiledSceneRenderer * createRenderer(QDomElement &elem, const QgsReadWriteContext &context) override
Returns new instance of the renderer given the DOM element.
QgsTiledSceneRendererCreateFunc mCreateFunc
pointer to function that creates an instance of the renderer when loading project / style
QgsTiledSceneRendererAbstractMetadata * rendererMetadata(const QString &rendererName)
Returns the metadata for a specified renderer.
bool removeRenderer(const QString &rendererName)
Removes a renderer from registry.
QStringList renderersList() const
Returns a list of available renderers.
static std::unique_ptr< QgsTiledSceneRenderer > defaultRenderer(const QgsTiledSceneLayer *layer)
Returns a new default tiled scene renderer for a specified layer.
bool addRenderer(QgsTiledSceneRendererAbstractMetadata *metadata)
Adds a renderer to the registry.
Abstract base class for 2d tiled scene renderers.
static std::unique_ptr< QgsTiledSceneRenderer > create(QDomElement &element, const QgsReadWriteContext &context)
Creates a textured renderer from an XML element.
static std::unique_ptr< QgsTiledSceneRenderer > create(QDomElement &element, const QgsReadWriteContext &context)
Creates a textured renderer from an XML element.