QGIS API Documentation 3.99.0-Master (26c88405ac0)
Loading...
Searching...
No Matches
qgsmaterialregistry.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsmaterialregistry.h
3 --------------------------------------
4 Date : July 2020
5 Copyright : (C) 2020 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 ***************************************************************************/
15
16#ifndef QGSMATERIALREGISTRY_H
17#define QGSMATERIALREGISTRY_H
18
19#include "qgis_3d.h"
20#include "qgis_sip.h"
21
22#include <QDomElement>
23#include <QIcon>
24#include <QMap>
25
30
41{
42 public:
43
49 QgsMaterialSettingsAbstractMetadata( const QString &type, const QString &visibleName, const QIcon &icon = QIcon() )
50 : mType( type )
51 , mVisibleName( visibleName )
52 , mIcon( icon )
53 {}
54
56
60 QString type() const { return mType; }
61
65 QString visibleName() const { return mVisibleName; }
66
70 QIcon icon() const { return mIcon; }
71
78
82 virtual bool supportsTechnique( QgsMaterialSettingsRenderingTechnique technique ) const = 0;
83
84#ifndef SIP_RUN
85
93 virtual QgsMaterialSettingsWidget *createWidget() SIP_FACTORY { return nullptr; }
94#endif
95
96 private:
97 QString mType;
98 QString mVisibleName;
99 QIcon mIcon;
100};
101
103typedef QgsAbstractMaterialSettings *( *QgsMaterialSettingsCreateFunc )() SIP_SKIP;
104
106typedef QgsMaterialSettingsWidget *( *QgsMaterialSettingsWidgetFunc )() SIP_SKIP;
107
110
111#ifndef SIP_RUN
112
122{
123 public:
124
133 QgsMaterialSettingsMetadata( const QString &type, const QString &visibleName, QgsMaterialSettingsCreateFunc pfCreate, QgsMaterialSettingsSupportsTechniqueFunc pfSupportsTechnique, QgsMaterialSettingsWidgetFunc pfWidget = nullptr, const QIcon &icon = QIcon() )
135 , mCreateFunc( pfCreate )
136 , mSupportsTechniqueFunc( pfSupportsTechnique )
137 , mWidgetFunc( pfWidget )
138 {}
139
143 QgsMaterialSettingsCreateFunc createFunction() const { return mCreateFunc; }
144
150 QgsMaterialSettingsWidgetFunc widgetFunction() const { return mWidgetFunc; }
151
157 void setWidgetFunction( QgsMaterialSettingsWidgetFunc function ) { mWidgetFunc = function; }
158
159 QgsAbstractMaterialSettings *create() override SIP_FACTORY { return mCreateFunc ? mCreateFunc() : nullptr; }
160 bool supportsTechnique( QgsMaterialSettingsRenderingTechnique technique ) const override { return mSupportsTechniqueFunc ? mSupportsTechniqueFunc( technique ) : true; }
161 QgsMaterialSettingsWidget *createWidget() override SIP_FACTORY { return mWidgetFunc ? mWidgetFunc() : nullptr; }
162
163 private:
165 QgsMaterialSettingsSupportsTechniqueFunc mSupportsTechniqueFunc;
167};
168#endif
169
170
180class _3D_EXPORT QgsMaterialRegistry
181{
182 public:
185
188
191
195 QStringList materialSettingsTypes() const;
196
199
208
209 private:
210#ifdef SIP_RUN
212#endif
213
214 QMap<QString, QgsMaterialSettingsAbstractMetadata *> mMetadata;
216 QStringList mMaterialsOrder;
217};
218
219
220#endif // QGSMATERIALREGISTRY_H
Abstract base class for material settings.
QgsMaterialRegistry(const QgsMaterialRegistry &rh)=delete
bool addMaterialSettingsType(QgsMaterialSettingsAbstractMetadata *metadata)
Registers a new material settings type. Takes ownership of the metadata instance.
QgsMaterialSettingsAbstractMetadata * materialSettingsMetadata(const QString &type) const
Returns metadata for specified material settings type. Returns nullptr if not found.
QgsAbstractMaterialSettings * createMaterialSettings(const QString &type) const
Creates a new instance of the material settings of the specified type.
QStringList materialSettingsTypes() const
Returns a list of all available material settings types.
QgsMaterialRegistry & operator=(const QgsMaterialRegistry &rh)=delete
Stores metadata about one 3D material settings class.
QString visibleName() const
Returns the material's visible (translated) name.
QString type() const
Returns the unique material type string.
virtual bool supportsTechnique(QgsMaterialSettingsRenderingTechnique technique) const =0
Returns true if the material type supports the specified rendering technique.
virtual ~QgsMaterialSettingsAbstractMetadata()=default
QgsMaterialSettingsAbstractMetadata(const QString &type, const QString &visibleName, const QIcon &icon=QIcon())
Constructor for QgsMaterialSettingsAbstractMetadata, with the specified type and visibleName.
QIcon icon() const
Returns an icon representing the material type, if available.
virtual QgsAbstractMaterialSettings * create()=0
Creates a new instance of this material settings type.
virtual QgsMaterialSettingsWidget * createWidget()
Create a widget for configuring a material of this type.
QgsAbstractMaterialSettings * create() override
Creates a new instance of this material settings type.
void setWidgetFunction(QgsMaterialSettingsWidgetFunc function)
Sets the material settings's widget creation function.
QgsMaterialSettingsWidgetFunc widgetFunction() const
Returns the material settings's widget creation function.
QgsMaterialSettingsWidget * createWidget() override
Create a widget for configuring a material of this type.
QgsMaterialSettingsMetadata(const QString &type, const QString &visibleName, QgsMaterialSettingsCreateFunc pfCreate, QgsMaterialSettingsSupportsTechniqueFunc pfSupportsTechnique, QgsMaterialSettingsWidgetFunc pfWidget=nullptr, const QIcon &icon=QIcon())
Constructor for QgsMaterialSettingsMetadata, with the specified type and visibleName.
QgsMaterialSettingsCreateFunc createFunction() const
Returns the material setting's creation function.
bool supportsTechnique(QgsMaterialSettingsRenderingTechnique technique) const override
Returns true if the material type supports the specified rendering technique.
Base class for 3D material settings widgets.
A container for the context for various read/write operations on objects.
QgsMaterialSettingsRenderingTechnique
Material rendering techniques.
#define SIP_EXTERNAL
Definition qgis_sip.h:124
#define SIP_SKIP
Definition qgis_sip.h:134
#define SIP_TRANSFER
Definition qgis_sip.h:36
#define SIP_FACTORY
Definition qgis_sip.h:84
QgsMaterialSettingsWidget *(* QgsMaterialSettingsWidgetFunc)()
Material settings widget creation function.
bool(* QgsMaterialSettingsSupportsTechniqueFunc)(QgsMaterialSettingsRenderingTechnique)
Material settings supports technique function.
QgsAbstractMaterialSettings *(* QgsMaterialSettingsCreateFunc)()
Material settings creation function.