QGIS API Documentation 3.99.0-Master (d270888f95f)
Loading...
Searching...
No Matches
qgs3d.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgs3d.cpp
3 ----------
4 begin : July 2020
5 copyright : (C) 2020 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
18#include "qgs3d.h"
19
21#include "qgs3dsymbolregistry.h"
25#include "qgsapplication.h"
27#include "qgsline3dsymbol.h"
28#include "qgsline3dsymbol_p.h"
29#include "qgsmaterialregistry.h"
34#include "qgspoint3dsymbol.h"
35#include "qgspoint3dsymbol_p.h"
37#include "qgspolygon3dsymbol.h"
41#include "qgsstyle.h"
44
45#include <QString>
46
47using namespace Qt::StringLiterals;
48
50{
51 static Qgs3D *sInstance( new Qgs3D() );
52 return sInstance;
53}
54
56{
57}
58
60{
61 if ( instance()->mInitialized )
62 return;
63
64 instance()->mInitialized = true;
65
72
73 QgsApplication::symbol3DRegistry()->addSymbolType( new Qgs3DSymbolMetadata( u"point"_s, QObject::tr( "Point" ), &QgsPoint3DSymbol::create, nullptr, Qgs3DSymbolImpl::handlerForPoint3DSymbol ) );
74 QgsApplication::symbol3DRegistry()->addSymbolType( new Qgs3DSymbolMetadata( u"line"_s, QObject::tr( "Line" ), &QgsLine3DSymbol::create, nullptr, Qgs3DSymbolImpl::handlerForLine3DSymbol ) );
75 QgsApplication::symbol3DRegistry()->addSymbolType( new Qgs3DSymbolMetadata( u"polygon"_s, QObject::tr( "Polygon" ), &QgsPolygon3DSymbol::create, nullptr, Qgs3DSymbolImpl::handlerForPolygon3DSymbol ) );
76
77 Qgs3D::materialRegistry()->addMaterialSettingsType( new QgsMaterialSettingsMetadata( u"null"_s, QObject::tr( "Embedded Textures" ), QgsNullMaterialSettings::create, QgsNullMaterialSettings::supportsTechnique, nullptr, QgsApplication::getThemeIcon( u"/mIconPhongTexturedMaterial.svg"_s ) ) );
79 Qgs3D::materialRegistry()->addMaterialSettingsType( new QgsMaterialSettingsMetadata( u"phongtextured"_s, QObject::tr( "Realistic Textured (Phong)" ), QgsPhongTexturedMaterialSettings::create, QgsPhongTexturedMaterialSettings::supportsTechnique, nullptr, QgsApplication::getThemeIcon( u"/mIconPhongTexturedMaterial.svg"_s ) ) );
80 Qgs3D::materialRegistry()->addMaterialSettingsType( new QgsMaterialSettingsMetadata( u"simpleline"_s, QObject::tr( "Single Color (Unlit)" ), QgsSimpleLineMaterialSettings::create, QgsSimpleLineMaterialSettings::supportsTechnique, nullptr, QgsApplication::getThemeIcon( u"/mIconSimpleLineMaterial.svg"_s ) ) );
83
84 // because we are usually populating the 3d registry AFTER QgsApplication initialization, we need to defer creation
85 // of 3d symbols in the default style until now
86 QgsStyle::defaultStyle()->handleDeferred3DSymbolCreation();
87}
88
90{
91 return instance()->mMaterialRegistry;
92}
93
95{
96 return instance()->mTerrainRegistry;
97}
98
100{
101 mMaterialRegistry = new QgsMaterialRegistry();
102 mTerrainRegistry = new Qgs3DTerrainRegistry();
103}
void addRenderer(Qgs3DRendererAbstractMetadata *metadata)
Registers a new 3D renderer type.
Convenience metadata class that uses static functions to create a 3D symbol and its widget.
bool addSymbolType(Qgs3DSymbolAbstractMetadata *metadata)
Registers a new symbol type. Takes ownership of the metadata instance.
Registry of available 3d terrain classes.
static void initialize()
Initializes the 3D framework.
Definition qgs3d.cpp:59
static Qgs3DTerrainRegistry * terrainRegistry()
Returns the terrain registry, used for managing 3D terrains.
Definition qgs3d.cpp:94
static QgsMaterialRegistry * materialRegistry()
Returns the material registry, used for managing 3D materials.
Definition qgs3d.cpp:89
static Qgs3D * instance()
Returns a pointer to the singleton instance.
Definition qgs3d.cpp:49
Qgs3D(const Qgs3D &other)=delete
~Qgs3D()
Definition qgs3d.cpp:55
Metadata for annotation layer 3D renderer to allow creation of its instances from XML.
static QIcon getThemeIcon(const QString &name, const QColor &fillColor=QColor(), const QColor &strokeColor=QColor())
Helper to get a theme icon.
static Qgs3DSymbolRegistry * symbol3DRegistry()
Returns registry of available 3D symbols.
static Qgs3DRendererRegistry * renderer3DRegistry()
Returns registry of available 3D renderers.
static QgsAbstractMaterialSettings * create()
Returns a new instance of QgsGoochMaterialSettings.
static bool supportsTechnique(QgsMaterialSettingsRenderingTechnique technique)
Returns true if the specified technique is supported by the Gooch material.
static QgsAbstract3DSymbol * create() SIP_FACTORY
Creates a new QgsLine3DSymbol.
Registry of available 3d material settings classes.
bool addMaterialSettingsType(QgsMaterialSettingsAbstractMetadata *metadata)
Registers a new material settings type. Takes ownership of the metadata instance.
Convenience metadata class that uses static functions to create a 3D material settings object and its...
Metadata for mesh layer 3D renderer to allow creation of its instances from XML.
static QgsAbstractMaterialSettings * create()
Returns a new instance of QgsMetalRoughMaterialSettings.
static bool supportsTechnique(QgsMaterialSettingsRenderingTechnique technique)
Returns true if the specified technique is supported by the metal rough material.
static QgsAbstractMaterialSettings * create()
Returns a new instance of QgsNullMaterialSettings.
static bool supportsTechnique(QgsMaterialSettingsRenderingTechnique technique)
Returns true if the specified technique is supported by the material.
static QgsAbstractMaterialSettings * create()
Returns a new instance of QgsPhongMaterialSettings.
static bool supportsTechnique(QgsMaterialSettingsRenderingTechnique technique)
Returns true if the specified technique is supported by the Phong material.
static bool supportsTechnique(QgsMaterialSettingsRenderingTechnique technique)
Returns true if the specified technique is supported by the Phong material.
static QgsAbstractMaterialSettings * create()
Returns a new instance of QgsPhongTexturedMaterialSettings.
static QgsAbstract3DSymbol * create()
Creates a new QgsPoint3DSymbol.
Metadata for point cloud layer 3D renderer to allow creation of its instances from XML.
static QgsAbstract3DSymbol * create() SIP_FACTORY
Creates a new QgsPolygon3DSymbol.
Metadata for rule-based 3D renderer to allow creation of its instances from XML.
static bool supportsTechnique(QgsMaterialSettingsRenderingTechnique technique)
Returns true if the specified technique is supported by the material.
static QgsAbstractMaterialSettings * create()
Returns a new instance of QgsSimpleLineMaterialSettings.
static QgsStyle * defaultStyle(bool initialize=true)
Returns the default application-wide style.
Definition qgsstyle.cpp:150
Metadata for tiled scene layer 3D renderer to allow creation of its instances from XML.
Metadata for vector layer 3D renderer to allow creation of its instances from XML.