Skip to content

Commit

Permalink
Add enum skybox types
Browse files Browse the repository at this point in the history
  • Loading branch information
NEDJIMAbelgacem committed Aug 2, 2020
1 parent 7678ced commit 8df6ef4
Show file tree
Hide file tree
Showing 6 changed files with 81 additions and 32 deletions.
31 changes: 16 additions & 15 deletions src/3d/qgs3dmapscene.cpp
Expand Up @@ -868,22 +868,23 @@ void Qgs3DMapScene::onSkyboxSettingsChanged()

if ( skyboxSettings.isSkyboxEnabled() )
{
if ( skyboxSettings.skyboxType() == QStringLiteral( "Textures collection" ) )
QMap<QString, QString> faces;
switch ( skyboxSettings.skyboxType() )
{
mSkybox = new QgsCubeFacesSkyboxEntity( skyboxSettings.skyboxBaseName(), skyboxSettings.skyboxExtension(), this );
}
if ( skyboxSettings.skyboxType() == QStringLiteral( "HDR texture" ) )
{
mSkybox = new QgsHDRSkyboxEntity( skyboxSettings.hdrTexturePath(), this );
}
if ( skyboxSettings.skyboxType() == QStringLiteral( "Distinct Faces" ) )
{
QMap<QString, QString> faces = skyboxSettings.cubeMapFacesPaths();
mSkybox = new QgsCubeFacesSkyboxEntity(
faces[QStringLiteral( "posX" )], faces[QStringLiteral( "posY" )], faces[QStringLiteral( "posZ" )],
faces[QStringLiteral( "negX" )], faces[QStringLiteral( "negY" )], faces[QStringLiteral( "negZ" )],
this
);
case QgsSkyboxEntity::TexturesCollectionSkybox:
mSkybox = new QgsCubeFacesSkyboxEntity( skyboxSettings.skyboxBaseName(), skyboxSettings.skyboxExtension(), this );
break;
case QgsSkyboxEntity::DistinctTexturesSkybox:
mSkybox = new QgsHDRSkyboxEntity( skyboxSettings.hdrTexturePath(), this );
break;
case QgsSkyboxEntity::HDRSkybox:
faces = skyboxSettings.cubeMapFacesPaths();
mSkybox = new QgsCubeFacesSkyboxEntity(
faces[QStringLiteral( "posX" )], faces[QStringLiteral( "posY" )], faces[QStringLiteral( "posZ" )],
faces[QStringLiteral( "negX" )], faces[QStringLiteral( "negY" )], faces[QStringLiteral( "negZ" )],
this
);
break;
}
}
}
Expand Down
2 changes: 2 additions & 0 deletions src/3d/qgsskyboxentity.cpp
Expand Up @@ -120,6 +120,7 @@ void QgsHDRSkyboxEntity::reloadTexture()

QgsCubeFacesSkyboxEntity::QgsCubeFacesSkyboxEntity( const QString &posX, const QString &posY, const QString &posZ, const QString &negX, const QString &negY, const QString &negZ, Qt3DCore::QNode *parent )
: QgsSkyboxEntity( parent )
, mType( SkyboxType::DistinctTexturesSkybox )
, mGlShader( new Qt3DRender::QShaderProgram() )
, mCubeMap( new Qt3DRender::QTextureCubeMap( this ) )
{
Expand All @@ -135,6 +136,7 @@ QgsCubeFacesSkyboxEntity::QgsCubeFacesSkyboxEntity( const QString &posX, const Q

QgsCubeFacesSkyboxEntity::QgsCubeFacesSkyboxEntity( const QString &baseName, const QString &extension, Qt3DCore::QNode *parent )
: QgsSkyboxEntity( parent )
, mType( SkyboxType::TexturesCollectionSkybox )
, mGlShader( new Qt3DRender::QShaderProgram() )
, mCubeMap( new Qt3DRender::QTextureCubeMap( this ) )
{
Expand Down
16 changes: 16 additions & 0 deletions src/3d/qgsskyboxentity.h
Expand Up @@ -39,10 +39,19 @@
class _3D_EXPORT QgsSkyboxEntity : public Qt3DCore::QEntity
{
Q_OBJECT
public:
enum SkyboxType
{
HDRSkybox,
TexturesCollectionSkybox,
DistinctTexturesSkybox
};
public:
//! Constructor
QgsSkyboxEntity( QNode *parent = nullptr );

virtual SkyboxType type() const = 0;

protected:
Qt3DRender::QEffect *mEffect = nullptr;
Qt3DRender::QMaterial *mMaterial = nullptr;
Expand All @@ -67,6 +76,9 @@ class _3D_EXPORT QgsHDRSkyboxEntity : public QgsSkyboxEntity

//! Returns the path of the current texture in use
QString hdrTexturePath() const { return mHDRTexturePath; }
//! Returns the type of the current skybox
SkyboxType type() const override { return SkyboxType::HDRSkybox; }

private:
void reloadTexture();
private:
Expand All @@ -93,10 +105,14 @@ class _3D_EXPORT QgsCubeFacesSkyboxEntity : public QgsSkyboxEntity
*/
QgsCubeFacesSkyboxEntity( const QString &baseName, const QString &extension, Qt3DCore::QNode *parent = nullptr );

//! Returns the type of the current skybox
SkyboxType type() const override { return mType; }

private:
void init();
void reloadTexture();
private:
SkyboxType mType;
QMap<Qt3DRender::QTextureCubeMap::CubeMapFace, QString> mCubeFacesPaths;
Qt3DRender::QShaderProgram *mGlShader;
QVector<Qt3DRender::QTextureImage *> mFacesTextureImages;
Expand Down
21 changes: 19 additions & 2 deletions src/3d/qgsskyboxsettings.cpp
Expand Up @@ -24,7 +24,13 @@ void QgsSkyboxSettings::readXml( const QDomElement &element, const QgsReadWriteC
{
Q_UNUSED( context );
mIsSkyboxEnabled = element.attribute( QStringLiteral( "skybox-enabled" ) ).toInt();
mSkyboxType = element.attribute( QStringLiteral( "skybox-type" ) );
QString skyboxTypeStr = element.attribute( QStringLiteral( "skybox-type" ) );
if ( skyboxTypeStr == QStringLiteral( "Textures collection" ) )
mSkyboxType = QgsSkyboxEntity::TexturesCollectionSkybox;
else if ( skyboxTypeStr == QStringLiteral( "Distinct Faces" ) )
mSkyboxType = QgsSkyboxEntity::DistinctTexturesSkybox;
else if ( skyboxTypeStr == QStringLiteral( "HDR texture" ) )
mSkyboxType = QgsSkyboxEntity::HDRSkybox;
mSkyboxBaseName = element.attribute( QStringLiteral( "base-name" ) );
mSkyboxExt = element.attribute( QStringLiteral( "extension" ) );
mHDRTexturePath = element.attribute( QStringLiteral( "HDR-texture-path" ) );
Expand All @@ -41,7 +47,18 @@ void QgsSkyboxSettings::writeXml( QDomElement &element, const QgsReadWriteContex
{
Q_UNUSED( context );
element.setAttribute( QStringLiteral( "skybox-enabled" ), mIsSkyboxEnabled );
element.setAttribute( QStringLiteral( "skybox-type" ), mSkyboxType );
switch ( mSkyboxType )
{
case QgsSkyboxEntity::TexturesCollectionSkybox:
element.setAttribute( QStringLiteral( "skybox-type" ), QStringLiteral( "Textures collection" ) );
break;
case QgsSkyboxEntity::DistinctTexturesSkybox:
element.setAttribute( QStringLiteral( "skybox-type" ), QStringLiteral( "Distinct Faces" ) );
break;
case QgsSkyboxEntity::HDRSkybox:
element.setAttribute( QStringLiteral( "skybox-type" ), QStringLiteral( "HDR texture" ) );
break;
}
element.setAttribute( QStringLiteral( "base-name" ), mSkyboxBaseName );
element.setAttribute( QStringLiteral( "extension" ), mSkyboxExt );
element.setAttribute( QStringLiteral( "HDR-texture-path" ), mHDRTexturePath );
Expand Down
19 changes: 6 additions & 13 deletions src/3d/qgsskyboxsettings.h
Expand Up @@ -20,6 +20,7 @@
#include <QMap>

#include "qgis_3d.h"
#include "qgsskyboxentity.h"

class QgsReadWriteContext;
class QDomElement;
Expand All @@ -35,7 +36,6 @@ class _3D_EXPORT QgsSkyboxSettings

//! Reads settings from a DOM \a element
void readXml( const QDomElement &element, const QgsReadWriteContext &context );

//! Writes settings to a DOM \a element
void writeXml( QDomElement &element, const QgsReadWriteContext &context ) const;

Expand All @@ -44,17 +44,10 @@ class _3D_EXPORT QgsSkyboxSettings
//! Sets whether the skybox is enabled
void setIsSkyboxEnabled( bool enabled ) { mIsSkyboxEnabled = enabled; }

/**
* Returns the type of the skybox
* This can be one of 3 types: "Textures collection", "HDR texture", "Distinct Faces"
*/
QString skyboxType() const { return mSkyboxType; }

/**
* Sets the type of the skybox
* the type can be one of 3 types: "Textures collection", "HDR texture", "Distinct Faces"
*/
void setSkyboxType( const QString &type ) { mSkyboxType = type; }
//! Returns the type of the skybox
QgsSkyboxEntity::SkyboxType skyboxType() const { return mSkyboxType; }
//! Sets the type of the skybox
void setSkyboxType( QgsSkyboxEntity::SkyboxType type ) { mSkyboxType = type; }

//! Returns the base name of a skybox of type "Textures collection"
QString skyboxBaseName() const { return mSkyboxBaseName; }
Expand Down Expand Up @@ -85,7 +78,7 @@ class _3D_EXPORT QgsSkyboxSettings

private:
bool mIsSkyboxEnabled = false;
QString mSkyboxType;
QgsSkyboxEntity::SkyboxType mSkyboxType;
//
QString mSkyboxBaseName;
QString mSkyboxExt;
Expand Down
24 changes: 22 additions & 2 deletions src/app/3d/qgsskyboxrenderingsettingswidget.cpp
Expand Up @@ -48,7 +48,20 @@ QgsSkyboxRenderingSettingsWidget::QgsSkyboxRenderingSettingsWidget( QWidget *par
void QgsSkyboxRenderingSettingsWidget::setSkyboxSettings( const QgsSkyboxSettings &skyboxSettings )
{
skyboxEnabledCheckBox->setCheckState( skyboxSettings.isSkyboxEnabled() ? Qt::CheckState::Checked : Qt::CheckState::Unchecked );
skyboxTypeComboBox->setCurrentText( skyboxSettings.skyboxType() );

switch ( skyboxSettings.skyboxType() )
{
case QgsSkyboxEntity::TexturesCollectionSkybox:
skyboxTypeComboBox->setCurrentText( QStringLiteral( "Textures collection" ) );
break;
case QgsSkyboxEntity::DistinctTexturesSkybox:
skyboxTypeComboBox->setCurrentText( QStringLiteral( "Distinct Faces" ) );
break;
case QgsSkyboxEntity::HDRSkybox:
skyboxTypeComboBox->setCurrentText( QStringLiteral( "HDR texture" ) );
break;
}

skyboxBaseNameLineEdit->setText( skyboxSettings.skyboxBaseName() );
skyboxExtensionLineEdit->setText( skyboxSettings.skyboxExtension() );
hdrTextureImageSource->setSource( skyboxSettings.hdrTexturePath() );
Expand All @@ -65,7 +78,14 @@ QgsSkyboxSettings QgsSkyboxRenderingSettingsWidget::toSkyboxSettings()
{
QgsSkyboxSettings settings;
settings.setIsSkyboxEnabled( skyboxEnabledCheckBox->checkState() == Qt::CheckState::Checked );
settings.setSkyboxType( skyboxTypeComboBox->currentText() );

if ( skyboxTypeComboBox->currentText() == QStringLiteral( "Textures collection" ) )
settings.setSkyboxType( QgsSkyboxEntity::TexturesCollectionSkybox );
else if ( skyboxTypeComboBox->currentText() == QStringLiteral( "Distinct Faces" ) )
settings.setSkyboxType( QgsSkyboxEntity::DistinctTexturesSkybox );
else if ( skyboxTypeComboBox->currentText() == QStringLiteral( "HDR texture" ) )
settings.setSkyboxType( QgsSkyboxEntity::HDRSkybox );

settings.setSkyboxBaseName( skyboxBaseNameLineEdit->text() );
settings.setSkyboxExtension( skyboxExtensionLineEdit->text() );
settings.setHdrTexturePath( hdrTextureImageSource->source() );
Expand Down

0 comments on commit 8df6ef4

Please sign in to comment.