Skip to content

Commit

Permalink
qgsmesh3dsymbolwidget: Add an option to set culling mode
Browse files Browse the repository at this point in the history
  • Loading branch information
ptitjano authored and nyalldawson committed Oct 6, 2023
1 parent 1b8cb6a commit beb28f6
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 0 deletions.
13 changes: 13 additions & 0 deletions src/app/3d/qgsmesh3dsymbolwidget.cpp
Expand Up @@ -14,6 +14,7 @@
***************************************************************************/

#include "qgsmesh3dsymbolwidget.h"
#include "qgs3dtypes.h"
#include "qgsmeshlayer.h"
#include "qgstriangularmesh.h"
#include "qgsmeshdataprovider.h"
Expand All @@ -32,10 +33,20 @@ QgsMesh3DSymbolWidget::QgsMesh3DSymbolWidget( QgsMeshLayer *meshLayer, QWidget *
mComboBoxTextureType->addItem( tr( "Single Color" ), QgsMesh3DSymbol::SingleColor );
mComboBoxTextureType->setCurrentIndex( 0 );

mCullingMode->addItem( tr( "No Culling" ), Qgs3DTypes::NoCulling );
mCullingMode->addItem( tr( "Front" ), Qgs3DTypes::Front );
mCullingMode->addItem( tr( "Back" ), Qgs3DTypes::Back );

mCullingMode->setItemData( 0, tr( "Both sides of the mesh are visible" ), Qt::ToolTipRole );
mCullingMode->setItemData( 1, tr( "Only the back of the mesh is visible" ), Qt::ToolTipRole );
mCullingMode->setItemData( 2, tr( "Only the front of the mesh is visible" ), Qt::ToolTipRole );

mDatasetGroupListModel = new QgsMeshDatasetGroupListModel( this );
mComboBoxDatasetVertical->setModel( mDatasetGroupListModel );
setLayer( meshLayer );

connect( mCullingMode, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsMesh3DSymbolWidget::changed );

connect( mChkSmoothTriangles, &QCheckBox::clicked, this, &QgsMesh3DSymbolWidget::changed );
connect( mGroupBoxWireframe, &QGroupBox::toggled, this, &QgsMesh3DSymbolWidget::changed );
connect( mColorButtonWireframe, &QgsColorButton::colorChanged, this, &QgsMesh3DSymbolWidget::changed );
Expand Down Expand Up @@ -77,6 +88,7 @@ QgsMesh3DSymbolWidget::QgsMesh3DSymbolWidget( QgsMeshLayer *meshLayer, QWidget *
void QgsMesh3DSymbolWidget::setSymbol( const QgsMesh3DSymbol *symbol )
{
mSymbol.reset( symbol->clone() );
mCullingMode->setCurrentIndex( mCullingMode->findData( symbol->cullingMode() ) );
mChkSmoothTriangles->setChecked( symbol->smoothedTriangles() );
mGroupBoxWireframe->setChecked( symbol->wireframeEnabled() );
mColorButtonWireframe->setColor( symbol->wireframeLineColor() );
Expand Down Expand Up @@ -179,6 +191,7 @@ std::unique_ptr<QgsMesh3DSymbol> QgsMesh3DSymbolWidget::symbol() const
{
std::unique_ptr< QgsMesh3DSymbol > sym( mSymbol->clone() );

sym->setCullingMode( static_cast<Qgs3DTypes::CullingMode>( mCullingMode->currentData().toInt() ) );
sym->setSmoothedTriangles( mChkSmoothTriangles->isChecked() );
sym->setWireframeEnabled( mGroupBoxWireframe->isChecked() );
sym->setWireframeLineColor( mColorButtonWireframe->color() );
Expand Down
15 changes: 15 additions & 0 deletions src/ui/3d/qgsmesh3dpropswidget.ui
Expand Up @@ -26,6 +26,20 @@
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<layout class="QFormLayout" name="cullingModeFormLayout">
<item row="0" column="0">
<widget class="QLabel" name="mCullingModeLabel">
<property name="text">
<string>Culling mode</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="mCullingMode"/>
</item>
</layout>
</item>
<item>
<widget class="QgsCollapsibleGroupBox" name="mGroupBoxTrianglesSettings">
<property name="title">
Expand Down Expand Up @@ -449,6 +463,7 @@
</customwidget>
</customwidgets>
<tabstops>
<tabstop>mCullingMode</tabstop>
<tabstop>mChkSmoothTriangles</tabstop>
<tabstop>mGroupBoxWireframe</tabstop>
<tabstop>mSpinBoxWireframeLineWidth</tabstop>
Expand Down

0 comments on commit beb28f6

Please sign in to comment.