QGIS API Documentation  3.26.3-Buenos Aires (65e4edfdad)
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 
20 #include "qgsapplication.h"
21 #include "qgs3drendererregistry.h"
22 
23 #include "qgsabstract3drenderer.h"
24 #include "qgs3drendererregistry.h"
25 #include "qgsrulebased3drenderer.h"
27 #include "qgsmeshlayer3drenderer.h"
29 #include "qgs3dsymbolregistry.h"
30 #include "qgspoint3dsymbol.h"
31 #include "qgsline3dsymbol.h"
32 #include "qgspolygon3dsymbol.h"
33 #include "qgsmaterialregistry.h"
34 
35 #include "qgspolygon3dsymbol_p.h"
36 #include "qgspoint3dsymbol_p.h"
37 #include "qgsline3dsymbol_p.h"
42 
43 #include "qgsstyle.h"
44 
46 {
47  static Qgs3D *sInstance( new Qgs3D() );
48  return sInstance;
49 }
50 
52 {
53 }
54 
56 {
57  if ( instance()->mInitialized )
58  return;
59 
60  instance()->mInitialized = true;
61 
66 
67  QgsApplication::symbol3DRegistry()->addSymbolType( new Qgs3DSymbolMetadata( QStringLiteral( "point" ), QObject::tr( "Point" ),
68  &QgsPoint3DSymbol::create, nullptr, Qgs3DSymbolImpl::handlerForPoint3DSymbol ) );
69  QgsApplication::symbol3DRegistry()->addSymbolType( new Qgs3DSymbolMetadata( QStringLiteral( "line" ), QObject::tr( "Line" ),
70  &QgsLine3DSymbol::create, nullptr, Qgs3DSymbolImpl::handlerForLine3DSymbol ) );
71  QgsApplication::symbol3DRegistry()->addSymbolType( new Qgs3DSymbolMetadata( QStringLiteral( "polygon" ), QObject::tr( "Polygon" ),
72  &QgsPolygon3DSymbol::create, nullptr, Qgs3DSymbolImpl::handlerForPolygon3DSymbol ) );
73 
74  Qgs3D::materialRegistry()->addMaterialSettingsType( new QgsMaterialSettingsMetadata( QStringLiteral( "null" ), QObject::tr( "Embedded Textures" ),
75  QgsNullMaterialSettings::create, QgsNullMaterialSettings::supportsTechnique, nullptr, QgsApplication::getThemeIcon( QStringLiteral( "/mIconPhongTexturedMaterial.svg" ) ) ) );
76  Qgs3D::materialRegistry()->addMaterialSettingsType( new QgsMaterialSettingsMetadata( QStringLiteral( "phong" ), QObject::tr( "Realistic (Phong)" ),
77  QgsPhongMaterialSettings::create, QgsPhongMaterialSettings::supportsTechnique, nullptr, QgsApplication::getThemeIcon( QStringLiteral( "/mIconPhongMaterial.svg" ) ) ) );
78  Qgs3D::materialRegistry()->addMaterialSettingsType( new QgsMaterialSettingsMetadata( QStringLiteral( "phongtextured" ), QObject::tr( "Realistic Textured (Phong)" ),
80  Qgs3D::materialRegistry()->addMaterialSettingsType( new QgsMaterialSettingsMetadata( QStringLiteral( "simpleline" ), QObject::tr( "Single Color (Unlit)" ),
81  QgsSimpleLineMaterialSettings::create, QgsSimpleLineMaterialSettings::supportsTechnique, nullptr, QgsApplication::getThemeIcon( QStringLiteral( "/mIconSimpleLineMaterial.svg" ) ) ) );
82  Qgs3D::materialRegistry()->addMaterialSettingsType( new QgsMaterialSettingsMetadata( QStringLiteral( "gooch" ), QObject::tr( "CAD (Gooch)" ),
83  QgsGoochMaterialSettings::create, QgsGoochMaterialSettings::supportsTechnique, nullptr, QgsApplication::getThemeIcon( QStringLiteral( "/mIconGoochMaterial.svg" ) ) ) );
84 
85  // because we are usually populating the 3d registry AFTER QgsApplication initialization, we need to defer creation
86  // of 3d symbols in the default style until now
87  QgsStyle::defaultStyle()->handleDeferred3DSymbolCreation();
88 }
89 
91 {
92  return instance()->mMaterialRegistry;
93 }
94 
95 Qgs3D::Qgs3D()
96 {
97  mMaterialRegistry = new QgsMaterialRegistry();
98 }
Qgs3D::instance
static Qgs3D * instance()
Returns a pointer to the singleton instance.
Definition: qgs3d.cpp:45
qgsgoochmaterialsettings.h
QgsPhongTexturedMaterialSettings::supportsTechnique
static bool supportsTechnique(QgsMaterialSettingsRenderingTechnique technique)
Returns true if the specified technique is supported by the Phong material.
Definition: qgsphongtexturedmaterialsettings.cpp:36
qgs3d.h
QgsPhongTexturedMaterialSettings::create
static QgsAbstractMaterialSettings * create()
Returns a new instance of QgsPhongTexturedMaterialSettings.
Definition: qgsphongtexturedmaterialsettings.cpp:54
qgsline3dsymbol.h
Qgs3D::materialRegistry
static QgsMaterialRegistry * materialRegistry()
Returns the material registry, used for managing 3D materials.
Definition: qgs3d.cpp:90
qgsmaterialregistry.h
qgsphongtexturedmaterialsettings.h
QgsPointCloudLayer3DRendererMetadata
Metadata for point cloud layer 3D renderer to allow creation of its instances from XML.
Definition: qgspointcloudlayer3drenderer.h:211
QgsNullMaterialSettings::create
static QgsAbstractMaterialSettings * create()
Returns a new instance of QgsNullMaterialSettings.
Definition: qgsnullmaterialsettings.cpp:43
QgsApplication::symbol3DRegistry
static Qgs3DSymbolRegistry * symbol3DRegistry()
Returns registry of available 3D symbols.
Definition: qgsapplication.cpp:2490
QgsVectorLayer3DRendererMetadata
Metadata for vector layer 3D renderer to allow creation of its instances from XML.
Definition: qgsvectorlayer3drenderer.h:43
QgsSimpleLineMaterialSettings::create
static QgsAbstractMaterialSettings * create()
Returns a new instance of QgsSimpleLineMaterialSettings.
Definition: qgssimplelinematerialsettings.cpp:48
qgsabstract3drenderer.h
QgsMaterialRegistry
Registry of available 3d material settings classes.
Definition: qgsmaterialregistry.h:185
qgs3dsymbolregistry.h
Qgs3DRendererRegistry::addRenderer
void addRenderer(Qgs3DRendererAbstractMetadata *metadata)
Registers a new 3D renderer type.
Definition: qgs3drendererregistry.cpp:38
QgsSimpleLineMaterialSettings::supportsTechnique
static bool supportsTechnique(QgsMaterialSettingsRenderingTechnique technique)
Returns true if the specified technique is supported by the material.
Definition: qgssimplelinematerialsettings.cpp:30
QgsStyle::defaultStyle
static QgsStyle * defaultStyle()
Returns default application-wide style.
Definition: qgsstyle.cpp:145
qgsapplication.h
QgsMaterialSettingsMetadata
Convenience metadata class that uses static functions to create a 3D material settings object and its...
Definition: qgsmaterialregistry.h:121
qgsmeshlayer3drenderer.h
QgsPoint3DSymbol::create
static QgsAbstract3DSymbol * create() SIP_FACTORY
Creates a new QgsPoint3DSymbol.
Definition: qgspoint3dsymbol.cpp:35
qgsnullmaterialsettings.h
qgssimplelinematerialsettings.h
QgsMaterialRegistry::addMaterialSettingsType
bool addMaterialSettingsType(QgsMaterialSettingsAbstractMetadata *metadata)
Registers a new material settings type. Takes ownership of the metadata instance.
Definition: qgsmaterialregistry.cpp:28
QgsMeshLayer3DRendererMetadata
Metadata for mesh layer 3D renderer to allow creation of its instances from XML.
Definition: qgsmeshlayer3drenderer.h:44
qgs3drendererregistry.h
QgsPhongMaterialSettings::create
static QgsAbstractMaterialSettings * create()
Returns a new instance of QgsPhongMaterialSettings.
Definition: qgsphongmaterialsettings.cpp:55
qgsstyle.h
qgspolygon3dsymbol_p.h
qgspolygon3dsymbol.h
QgsLine3DSymbol::create
static QgsAbstract3DSymbol * create() SIP_FACTORY
Creates a new QgsLine3DSymbol.
Definition: qgsline3dsymbol.cpp:116
QgsApplication::renderer3DRegistry
static Qgs3DRendererRegistry * renderer3DRegistry()
Returns registry of available 3D renderers.
Definition: qgsapplication.cpp:2485
QgsNullMaterialSettings::supportsTechnique
static bool supportsTechnique(QgsMaterialSettingsRenderingTechnique technique)
Returns true if the specified technique is supported by the material.
Definition: qgsnullmaterialsettings.cpp:25
qgsrulebased3drenderer.h
qgspoint3dsymbol.h
QgsPolygon3DSymbol::create
static QgsAbstract3DSymbol * create() SIP_FACTORY
Creates a new QgsPolygon3DSymbol.
Definition: qgspolygon3dsymbol.cpp:153
QgsGoochMaterialSettings::create
static QgsAbstractMaterialSettings * create()
Returns a new instance of QgsGoochMaterialSettings.
Definition: qgsgoochmaterialsettings.cpp:35
qgsvectorlayer3drenderer.h
Qgs3DSymbolRegistry::addSymbolType
bool addSymbolType(Qgs3DSymbolAbstractMetadata *metadata)
Registers a new symbol type. Takes ownership of the metadata instance.
Definition: qgs3dsymbolregistry.cpp:28
QgsGoochMaterialSettings::supportsTechnique
static bool supportsTechnique(QgsMaterialSettingsRenderingTechnique technique)
Returns true if the specified technique is supported by the Gooch material.
Definition: qgsgoochmaterialsettings.cpp:40
QgsApplication::getThemeIcon
static QIcon getThemeIcon(const QString &name, const QColor &fillColor=QColor(), const QColor &strokeColor=QColor())
Helper to get a theme icon.
Definition: qgsapplication.cpp:693
Qgs3D::~Qgs3D
~Qgs3D()
Definition: qgs3d.cpp:51
Qgs3D::initialize
static void initialize()
Initializes the 3D framework.
Definition: qgs3d.cpp:55
qgsline3dsymbol_p.h
Qgs3D
Qgs3D is a singleton class containing various registries and other global members related to 3D class...
Definition: qgs3d.h:32
qgspoint3dsymbol_p.h
QgsPhongMaterialSettings::supportsTechnique
static bool supportsTechnique(QgsMaterialSettingsRenderingTechnique technique)
Returns true if the specified technique is supported by the Phong material.
Definition: qgsphongmaterialsettings.cpp:37
qgspointcloudlayer3drenderer.h
Qgs3DSymbolMetadata
Convenience metadata class that uses static functions to create a 3D symbol and its widget.
Definition: qgs3dsymbolregistry.h:117
QgsRuleBased3DRendererMetadata
Metadata for rule-based 3D renderer to allow creation of its instances from XML.
Definition: qgsrulebased3drenderer.h:40