From 7c08046a4711fffd6ad682a22dba2f849b8cfc02 Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Fri, 31 Jul 2020 10:52:44 +1000 Subject: [PATCH] Don't show texture controls in terrain shading widget --- .../qgsabstractmaterialsettings.py | 4 ++- .../qgsabstractmaterialsettings.sip.in | 1 + src/3d/qgsabstractmaterialsettings.h | 1 + src/3d/qgsgoochmaterialsettings.cpp | 2 ++ src/3d/qgsphongmaterialsettings.cpp | 3 ++- src/app/3d/qgs3dmapconfigwidget.cpp | 2 +- src/app/3d/qgsphongmaterialwidget.cpp | 26 +++++++++++-------- src/app/3d/qgsphongmaterialwidget.h | 6 ++--- 8 files changed, 27 insertions(+), 18 deletions(-) diff --git a/python/3d/auto_additions/qgsabstractmaterialsettings.py b/python/3d/auto_additions/qgsabstractmaterialsettings.py index cb277065e49..d8a12d8490e 100644 --- a/python/3d/auto_additions/qgsabstractmaterialsettings.py +++ b/python/3d/auto_additions/qgsabstractmaterialsettings.py @@ -9,5 +9,7 @@ QgsAbstractMaterialSettings.InstancedPoints = QgsMaterialSettingsRenderingTechni QgsAbstractMaterialSettings.InstancedPoints.__doc__ = "Instanced based rendering, requiring triangles and point data" QgsAbstractMaterialSettings.Points = QgsMaterialSettingsRenderingTechnique.Points QgsAbstractMaterialSettings.Points.__doc__ = "Point based rendering, requires point data" -QgsMaterialSettingsRenderingTechnique.__doc__ = 'Material rendering techniques\n\n.. versionadded:: 3.16\n\n' + '* ``Triangles``: ' + QgsMaterialSettingsRenderingTechnique.Triangles.__doc__ + '\n' + '* ``Lines``: ' + QgsMaterialSettingsRenderingTechnique.Lines.__doc__ + '\n' + '* ``InstancedPoints``: ' + QgsMaterialSettingsRenderingTechnique.InstancedPoints.__doc__ + '\n' + '* ``Points``: ' + QgsMaterialSettingsRenderingTechnique.Points.__doc__ +QgsAbstractMaterialSettings.Terrain = QgsMaterialSettingsRenderingTechnique.Terrain +QgsAbstractMaterialSettings.Terrain.__doc__ = "Terrain rendering" +QgsMaterialSettingsRenderingTechnique.__doc__ = 'Material rendering techniques\n\n.. versionadded:: 3.16\n\n' + '* ``Triangles``: ' + QgsMaterialSettingsRenderingTechnique.Triangles.__doc__ + '\n' + '* ``Lines``: ' + QgsMaterialSettingsRenderingTechnique.Lines.__doc__ + '\n' + '* ``InstancedPoints``: ' + QgsMaterialSettingsRenderingTechnique.InstancedPoints.__doc__ + '\n' + '* ``Points``: ' + QgsMaterialSettingsRenderingTechnique.Points.__doc__ + '\n' + '* ``Terrain``: ' + QgsMaterialSettingsRenderingTechnique.Terrain.__doc__ # -- diff --git a/python/3d/auto_generated/qgsabstractmaterialsettings.sip.in b/python/3d/auto_generated/qgsabstractmaterialsettings.sip.in index 08b8f16052c..16c83369c7e 100644 --- a/python/3d/auto_generated/qgsabstractmaterialsettings.sip.in +++ b/python/3d/auto_generated/qgsabstractmaterialsettings.sip.in @@ -17,6 +17,7 @@ enum class QgsMaterialSettingsRenderingTechnique Lines, InstancedPoints, Points, + Terrain, }; diff --git a/src/3d/qgsabstractmaterialsettings.h b/src/3d/qgsabstractmaterialsettings.h index eff3bfdfefb..5e9777c05bf 100644 --- a/src/3d/qgsabstractmaterialsettings.h +++ b/src/3d/qgsabstractmaterialsettings.h @@ -38,6 +38,7 @@ enum class QgsMaterialSettingsRenderingTechnique SIP_MONKEYPATCH_SCOPEENUM_UNNES Lines, //!< Line based rendering, requires line data InstancedPoints, //!< Instanced based rendering, requiring triangles and point data Points, //!< Point based rendering, requires point data + Terrain, //!< Terrain rendering }; diff --git a/src/3d/qgsgoochmaterialsettings.cpp b/src/3d/qgsgoochmaterialsettings.cpp index 7320b52328c..d71e8ad82f8 100644 --- a/src/3d/qgsgoochmaterialsettings.cpp +++ b/src/3d/qgsgoochmaterialsettings.cpp @@ -34,6 +34,7 @@ bool QgsGoochMaterialSettings::supportsTechnique( QgsMaterialSettingsRenderingTe switch ( technique ) { case QgsMaterialSettingsRenderingTechnique::Triangles: + case QgsMaterialSettingsRenderingTechnique::Terrain: return true; case QgsMaterialSettingsRenderingTechnique::Lines: @@ -81,6 +82,7 @@ Qt3DRender::QMaterial *QgsGoochMaterialSettings::toMaterial( QgsMaterialSettings switch ( technique ) { case QgsMaterialSettingsRenderingTechnique::Triangles: + case QgsMaterialSettingsRenderingTechnique::Terrain: { Qt3DExtras::QGoochMaterial *material = new Qt3DExtras::QGoochMaterial; material->setDiffuse( mDiffuse ); diff --git a/src/3d/qgsphongmaterialsettings.cpp b/src/3d/qgsphongmaterialsettings.cpp index 7babbc4d987..cd1080c302b 100644 --- a/src/3d/qgsphongmaterialsettings.cpp +++ b/src/3d/qgsphongmaterialsettings.cpp @@ -41,6 +41,7 @@ bool QgsPhongMaterialSettings::supportsTechnique( QgsMaterialSettingsRenderingTe case QgsMaterialSettingsRenderingTechnique::Lines: case QgsMaterialSettingsRenderingTechnique::InstancedPoints: case QgsMaterialSettingsRenderingTechnique::Points: + case QgsMaterialSettingsRenderingTechnique::Terrain: return true; } return false; @@ -120,8 +121,8 @@ Qt3DRender::QMaterial *QgsPhongMaterialSettings::toMaterial( QgsMaterialSettings case QgsMaterialSettingsRenderingTechnique::Triangles: case QgsMaterialSettingsRenderingTechnique::InstancedPoints: case QgsMaterialSettingsRenderingTechnique::Points: + case QgsMaterialSettingsRenderingTechnique::Terrain: { - bool fitsInCache = false; QImage textureSourceImage; diff --git a/src/app/3d/qgs3dmapconfigwidget.cpp b/src/app/3d/qgs3dmapconfigwidget.cpp index e172de9b7ed..3ac7d4bf4aa 100644 --- a/src/app/3d/qgs3dmapconfigwidget.cpp +++ b/src/app/3d/qgs3dmapconfigwidget.cpp @@ -105,7 +105,7 @@ Qgs3DMapConfigWidget::Qgs3DMapConfigWidget( Qgs3DMapSettings *map, QgsMapCanvas chkShowLightSourceOrigins->setChecked( mMap->showLightSourceOrigins() ); groupTerrainShading->setChecked( mMap->isTerrainShadingEnabled() ); - widgetTerrainMaterial->setDiffuseVisible( false ); + widgetTerrainMaterial->setTechnique( QgsMaterialSettingsRenderingTechnique::Terrain ); QgsPhongMaterialSettings terrainShadingMaterial = mMap->terrainShadingMaterial(); widgetTerrainMaterial->setSettings( &terrainShadingMaterial, nullptr ); diff --git a/src/app/3d/qgsphongmaterialwidget.cpp b/src/app/3d/qgsphongmaterialwidget.cpp index 2aa94f2dc88..42dd09229d9 100644 --- a/src/app/3d/qgsphongmaterialwidget.cpp +++ b/src/app/3d/qgsphongmaterialwidget.cpp @@ -64,6 +64,21 @@ void QgsPhongMaterialWidget::setTechnique( QgsMaterialSettingsRenderingTechnique break; } + case QgsMaterialSettingsRenderingTechnique::Terrain: + { + lblAmbient->setVisible( true ); + btnAmbient->setVisible( true ); + lblDiffuse->setVisible( false ); + btnDiffuse->setVisible( false ); + lblSpecular->setVisible( true ); + btnSpecular->setVisible( true ); + lblShininess->setVisible( true ); + spinShininess->setVisible( true ); + + activateTexturingUI( false ); + break; + } + case QgsMaterialSettingsRenderingTechnique::Lines: { lblAmbient->setVisible( true ); @@ -97,17 +112,6 @@ void QgsPhongMaterialWidget::setTechnique( QgsMaterialSettingsRenderingTechnique } } -void QgsPhongMaterialWidget::setDiffuseVisible( bool visible ) -{ - lblDiffuse->setVisible( visible ); - btnDiffuse->setVisible( visible ); -} - -bool QgsPhongMaterialWidget::isDiffuseVisible() const -{ - return btnDiffuse->isVisible(); -} - void QgsPhongMaterialWidget::setSettings( const QgsAbstractMaterialSettings *settings, QgsVectorLayer * ) { const QgsPhongMaterialSettings *phongMaterial = dynamic_cast< const QgsPhongMaterialSettings * >( settings ); diff --git a/src/app/3d/qgsphongmaterialwidget.h b/src/app/3d/qgsphongmaterialwidget.h index 260ba015510..12076c84584 100644 --- a/src/app/3d/qgsphongmaterialwidget.h +++ b/src/app/3d/qgsphongmaterialwidget.h @@ -34,13 +34,11 @@ class QgsPhongMaterialWidget : public QgsMaterialSettingsWidget, private Ui::Pho static QgsMaterialSettingsWidget *create(); void setTechnique( QgsMaterialSettingsRenderingTechnique technique ) override; - - void setDiffuseVisible( bool visible ); - bool isDiffuseVisible() const; - void setSettings( const QgsAbstractMaterialSettings *settings, QgsVectorLayer *layer ) override; QgsAbstractMaterialSettings *settings() override; + private: + //! activates the texturing UI (to make sure texturing UI isn't visible when the user doesn't need it like in the 3D configuration window) void activateTexturingUI( bool activated );