Skip to content

Commit

Permalink
[BUG][MESH][3D] fix enable/disable mesh 3D rendering (#34999)
Browse files Browse the repository at this point in the history
fixes #34985 and fixes #34986 (mesh 3d gui)
  • Loading branch information
vcloarec committed Mar 13, 2020
1 parent b133b81 commit e6fa6c8
Show file tree
Hide file tree
Showing 7 changed files with 45 additions and 21 deletions.
3 changes: 2 additions & 1 deletion src/3d/qgsmeshlayer3drenderer.cpp
Expand Up @@ -77,7 +77,8 @@ Qt3DCore::QEntity *QgsMeshLayer3DRenderer::createEntity( const Qgs3DMapSettings
if ( !meshLayer || !meshLayer->dataProvider() ) if ( !meshLayer || !meshLayer->dataProvider() )
return nullptr; return nullptr;


if ( meshLayer->dataProvider()->contains( QgsMesh::ElementType::Edge ) ) if ( meshLayer->dataProvider()->contains( QgsMesh::ElementType::Edge ) ||
!mSymbol->isEnabled() )
{ {
// 3D not implemented for 1D meshes // 3D not implemented for 1D meshes
return nullptr; return nullptr;
Expand Down
12 changes: 12 additions & 0 deletions src/3d/symbols/qgsmesh3dsymbol.cpp
Expand Up @@ -41,6 +41,7 @@ void QgsMesh3DSymbol::writeXml( QDomElement &elem, const QgsReadWriteContext &co


//Advanced symbol //Advanced symbol
QDomElement elemAdvancedSettings = doc.createElement( QStringLiteral( "advanced-settings" ) ); QDomElement elemAdvancedSettings = doc.createElement( QStringLiteral( "advanced-settings" ) );
elemAdvancedSettings.setAttribute( QStringLiteral( "renderer-3d-enabled" ), mEnabled ? QStringLiteral( "1" ) : QStringLiteral( "0" ) );
elemAdvancedSettings.setAttribute( QStringLiteral( "smoothed-triangle" ), mSmoothedTriangles ? QStringLiteral( "1" ) : QStringLiteral( "0" ) ); elemAdvancedSettings.setAttribute( QStringLiteral( "smoothed-triangle" ), mSmoothedTriangles ? QStringLiteral( "1" ) : QStringLiteral( "0" ) );
elemAdvancedSettings.setAttribute( QStringLiteral( "wireframe-enabled" ), mWireframeEnabled ? QStringLiteral( "1" ) : QStringLiteral( "0" ) ); elemAdvancedSettings.setAttribute( QStringLiteral( "wireframe-enabled" ), mWireframeEnabled ? QStringLiteral( "1" ) : QStringLiteral( "0" ) );
elemAdvancedSettings.setAttribute( QStringLiteral( "wireframe-line-width" ), mWireframeLineWidth ); elemAdvancedSettings.setAttribute( QStringLiteral( "wireframe-line-width" ), mWireframeLineWidth );
Expand Down Expand Up @@ -78,6 +79,7 @@ void QgsMesh3DSymbol::readXml( const QDomElement &elem, const QgsReadWriteContex


//Advanced symbol //Advanced symbol
QDomElement elemAdvancedSettings = elem.firstChildElement( QStringLiteral( "advanced-settings" ) ); QDomElement elemAdvancedSettings = elem.firstChildElement( QStringLiteral( "advanced-settings" ) );
mEnabled = elemAdvancedSettings.attribute( QStringLiteral( "renderer-3d-enabled" ) ).toInt();
mSmoothedTriangles = elemAdvancedSettings.attribute( QStringLiteral( "smoothed-triangle" ) ).toInt(); mSmoothedTriangles = elemAdvancedSettings.attribute( QStringLiteral( "smoothed-triangle" ) ).toInt();
mWireframeEnabled = elemAdvancedSettings.attribute( QStringLiteral( "wireframe-enabled" ) ).toInt(); mWireframeEnabled = elemAdvancedSettings.attribute( QStringLiteral( "wireframe-enabled" ) ).toInt();
mWireframeLineWidth = elemAdvancedSettings.attribute( QStringLiteral( "wireframe-line-width" ) ).toDouble(); mWireframeLineWidth = elemAdvancedSettings.attribute( QStringLiteral( "wireframe-line-width" ) ).toDouble();
Expand Down Expand Up @@ -237,3 +239,13 @@ void QgsMesh3DSymbol::setArrowsFixedSize( bool arrowsFixeSize )
{ {
mArrowsFixedSize = arrowsFixeSize; mArrowsFixedSize = arrowsFixeSize;
} }

bool QgsMesh3DSymbol::isEnabled() const
{
return mEnabled;
}

void QgsMesh3DSymbol::setEnabled( bool enabled )
{
mEnabled = enabled;
}
16 changes: 16 additions & 0 deletions src/3d/symbols/qgsmesh3dsymbol.h
Expand Up @@ -76,6 +76,20 @@ class _3D_EXPORT QgsMesh3DSymbol : public QgsAbstract3DSymbol
void writeXml( QDomElement &elem, const QgsReadWriteContext &context ) const override; void writeXml( QDomElement &elem, const QgsReadWriteContext &context ) const override;
void readXml( const QDomElement &elem, const QgsReadWriteContext &context ) override; void readXml( const QDomElement &elem, const QgsReadWriteContext &context ) override;


/**
* Returns if the 3d rendering is enabled
*
* \since QGIS 3.14
*/
bool isEnabled() const;

/**
* Sets if the 3d rendering is enabled
*
* \since QGIS 3.14
*/
void setEnabled( bool enabled );

//! Returns method that determines altitude (whether to clamp to feature to terrain) //! Returns method that determines altitude (whether to clamp to feature to terrain)
Qgs3DTypes::AltitudeClamping altitudeClamping() const { return mAltClamping; } Qgs3DTypes::AltitudeClamping altitudeClamping() const { return mAltClamping; }
//! Sets method that determines altitude (whether to clamp to feature to terrain) //! Sets method that determines altitude (whether to clamp to feature to terrain)
Expand Down Expand Up @@ -309,6 +323,8 @@ class _3D_EXPORT QgsMesh3DSymbol : public QgsAbstract3DSymbol
QgsPhongMaterialSettings mMaterial; //!< Defines appearance of objects QgsPhongMaterialSettings mMaterial; //!< Defines appearance of objects
bool mAddBackFaces = false; bool mAddBackFaces = false;


bool mEnabled = true;

//! Triangles settings //! Triangles settings
bool mSmoothedTriangles = false; bool mSmoothedTriangles = false;
bool mWireframeEnabled = false; bool mWireframeEnabled = false;
Expand Down
4 changes: 2 additions & 2 deletions src/app/3d/qgsmesh3dsymbolwidget.cpp
Expand Up @@ -71,7 +71,7 @@ QgsMesh3dSymbolWidget::QgsMesh3dSymbolWidget( QgsMeshLayer *meshLayer, QWidget *


void QgsMesh3dSymbolWidget::setSymbol( const QgsMesh3DSymbol &symbol ) void QgsMesh3dSymbolWidget::setSymbol( const QgsMesh3DSymbol &symbol )
{ {
// Advanced symbology mSymbol = symbol;
mChkSmoothTriangles->setChecked( symbol.smoothedTriangles() ); mChkSmoothTriangles->setChecked( symbol.smoothedTriangles() );
mChkWireframe->setChecked( symbol.wireframeEnabled() ); mChkWireframe->setChecked( symbol.wireframeEnabled() );
mColorButtonWireframe->setColor( symbol.wireframeLineColor() ); mColorButtonWireframe->setColor( symbol.wireframeLineColor() );
Expand Down Expand Up @@ -143,7 +143,7 @@ double QgsMesh3dSymbolWidget::lineEditValue( const QLineEdit *lineEdit ) const


QgsMesh3DSymbol QgsMesh3dSymbolWidget::symbol() const QgsMesh3DSymbol QgsMesh3dSymbolWidget::symbol() const
{ {
QgsMesh3DSymbol sym; QgsMesh3DSymbol sym = mSymbol;


sym.setSmoothedTriangles( mChkSmoothTriangles->isChecked() ); sym.setSmoothedTriangles( mChkSmoothTriangles->isChecked() );
sym.setWireframeEnabled( mChkWireframe->isChecked() ); sym.setWireframeEnabled( mChkWireframe->isChecked() );
Expand Down
2 changes: 2 additions & 0 deletions src/app/3d/qgsmesh3dsymbolwidget.h
Expand Up @@ -18,6 +18,7 @@


#include <QWidget> #include <QWidget>


#include "qgsmesh3dsymbol.h"
#include "ui_qgsmesh3dpropswidget.h" #include "ui_qgsmesh3dpropswidget.h"


class QgsMeshDatasetGroupListModel; class QgsMeshDatasetGroupListModel;
Expand Down Expand Up @@ -57,6 +58,7 @@ class QgsMesh3dSymbolWidget : public QWidget, private Ui::QgsMesh3dPropsWidget
void setColorRampMinMax( double min, double max ); void setColorRampMinMax( double min, double max );
QgsMeshLayer *mLayer = nullptr; QgsMeshLayer *mLayer = nullptr;
QgsMeshDatasetGroupListModel *mDatasetGroupListModel = nullptr; QgsMeshDatasetGroupListModel *mDatasetGroupListModel = nullptr;
QgsMesh3DSymbol mSymbol;


}; };


Expand Down
27 changes: 10 additions & 17 deletions src/app/3d/qgsmeshlayer3drendererwidget.cpp
Expand Up @@ -31,14 +31,14 @@ QgsMeshLayer3DRendererWidget::QgsMeshLayer3DRendererWidget( QgsMeshLayer *layer,


QVBoxLayout *layout = new QVBoxLayout( this ); QVBoxLayout *layout = new QVBoxLayout( this );
layout->setContentsMargins( 0, 0, 0, 0 ); layout->setContentsMargins( 0, 0, 0, 0 );
chkEnabled = new QCheckBox( tr( "Enable 3D Renderer" ), this ); mChkEnabled = new QCheckBox( tr( "Enable 3D Renderer" ), this );
layout->addWidget( chkEnabled ); layout->addWidget( mChkEnabled );


mWidgetMesh = new QgsMesh3dSymbolWidget( layer, this ); mWidgetMesh = new QgsMesh3dSymbolWidget( layer, this );
mWidgetMesh->configureForDataset(); mWidgetMesh->configureForDataset();
layout->addWidget( mWidgetMesh ); layout->addWidget( mWidgetMesh );


connect( chkEnabled, &QCheckBox::clicked, this, &QgsMeshLayer3DRendererWidget::onEnabledClicked ); connect( mChkEnabled, &QCheckBox::clicked, this, &QgsMeshLayer3DRendererWidget::onEnabledClicked );
connect( mWidgetMesh, &QgsMesh3dSymbolWidget::changed, this, &QgsMeshLayer3DRendererWidget::widgetChanged ); connect( mWidgetMesh, &QgsMesh3dSymbolWidget::changed, this, &QgsMeshLayer3DRendererWidget::widgetChanged );
} }


Expand All @@ -52,6 +52,7 @@ void QgsMeshLayer3DRendererWidget::setLayer( QgsMeshLayer *layer )
{ {
QgsMeshLayer3DRenderer *meshRenderer = static_cast<QgsMeshLayer3DRenderer *>( r ); QgsMeshLayer3DRenderer *meshRenderer = static_cast<QgsMeshLayer3DRenderer *>( r );
setRenderer( meshRenderer ); setRenderer( meshRenderer );
mWidgetMesh->setEnabled( meshRenderer->symbol()->isEnabled() );
} }
else else
{ {
Expand All @@ -62,23 +63,15 @@ void QgsMeshLayer3DRendererWidget::setLayer( QgsMeshLayer *layer )
void QgsMeshLayer3DRendererWidget::setRenderer( const QgsMeshLayer3DRenderer *renderer ) void QgsMeshLayer3DRendererWidget::setRenderer( const QgsMeshLayer3DRenderer *renderer )
{ {
mRenderer.reset( renderer ? renderer->clone() : nullptr ); mRenderer.reset( renderer ? renderer->clone() : nullptr );
whileBlocking( chkEnabled )->setChecked( ( bool )mRenderer ); whileBlocking( mChkEnabled )->setChecked( renderer ? renderer->symbol()->isEnabled() : false );
} }


QgsMeshLayer3DRenderer *QgsMeshLayer3DRendererWidget::renderer() QgsMeshLayer3DRenderer *QgsMeshLayer3DRendererWidget::renderer()
{ {
if ( chkEnabled->isChecked() ) QgsMesh3DSymbol *sym = new QgsMesh3DSymbol( mWidgetMesh->symbol() );
{ sym->setEnabled( mChkEnabled->isChecked() );
QgsMesh3DSymbol *sym = new QgsMesh3DSymbol( mWidgetMesh->symbol() ); mRenderer.reset( new QgsMeshLayer3DRenderer( sym ) );
QgsMeshLayer3DRenderer *r = new QgsMeshLayer3DRenderer( sym ); mRenderer->setLayer( qobject_cast<QgsMeshLayer *>( mLayer ) );
r->setLayer( qobject_cast<QgsMeshLayer *>( mLayer ) );
mRenderer.reset( r );
}
else
{
mRenderer.reset();
}

return mRenderer.get(); return mRenderer.get();
} }


Expand All @@ -90,6 +83,6 @@ void QgsMeshLayer3DRendererWidget::apply()


void QgsMeshLayer3DRendererWidget::onEnabledClicked() void QgsMeshLayer3DRendererWidget::onEnabledClicked()
{ {
mWidgetMesh->setEnabled( chkEnabled->isChecked() ); mWidgetMesh->setEnabled( mChkEnabled->isChecked() );
emit widgetChanged(); emit widgetChanged();
} }
2 changes: 1 addition & 1 deletion src/app/3d/qgsmeshlayer3drendererwidget.h
Expand Up @@ -49,7 +49,7 @@ class QgsMeshLayer3DRendererWidget : public QgsMapLayerConfigWidget
void onEnabledClicked(); void onEnabledClicked();


private: private:
QCheckBox *chkEnabled = nullptr; QCheckBox *mChkEnabled = nullptr;
QgsMesh3dSymbolWidget *mWidgetMesh = nullptr; QgsMesh3dSymbolWidget *mWidgetMesh = nullptr;
std::unique_ptr<QgsMeshLayer3DRenderer> mRenderer; std::unique_ptr<QgsMeshLayer3DRenderer> mRenderer;
}; };
Expand Down

0 comments on commit e6fa6c8

Please sign in to comment.