diff --git a/src/app/3d/qgs3dmapcanvaswidget.cpp b/src/app/3d/qgs3dmapcanvaswidget.cpp index a7671f8938d1..8aef8102f600 100644 --- a/src/app/3d/qgs3dmapcanvaswidget.cpp +++ b/src/app/3d/qgs3dmapcanvaswidget.cpp @@ -508,7 +508,11 @@ void Qgs3DMapCanvasWidget::configure() || map->terrainGenerator()->type() == QgsTerrainGenerator::Mesh ); }; - connect( buttons, &QDialogButtonBox::rejected, mConfigureDialog, &QDialog::reject ); + connect( buttons, &QDialogButtonBox::rejected, mConfigureDialog, [ = ]() + { + configWidget->reject(); + mConfigureDialog->reject(); + } ); connect( buttons, &QDialogButtonBox::clicked, mConfigureDialog, [ = ]( QAbstractButton * button ) { if ( button == buttons->button( QDialogButtonBox::Apply ) || button == buttons->button( QDialogButtonBox::Ok ) ) diff --git a/src/app/3d/qgs3dmapconfigwidget.cpp b/src/app/3d/qgs3dmapconfigwidget.cpp index 6e9bcd59c9bb..36c21a37d8ce 100644 --- a/src/app/3d/qgs3dmapconfigwidget.cpp +++ b/src/app/3d/qgs3dmapconfigwidget.cpp @@ -17,6 +17,7 @@ #include "qgs3dmapsettings.h" #include "qgsdemterraingenerator.h" +#include "qgsextent3dwidget.h" #include "qgsflatterraingenerator.h" #include "qgsonlineterraingenerator.h" #include "qgsmeshterraingenerator.h" @@ -244,11 +245,31 @@ Qgs3DMapConfigWidget::Qgs3DMapConfigWidget( Qgs3DMapSettings *map, QgsMapCanvas // ================== // Page: General + mOldRotation = mMap->orientation(); + mOldExtent = mMap->extent(); + mExtent3D->setDefaultExtent( mMap->extent(), mMap->crs() ); mExtent3D->setMapCanvas( mMainCanvas ); mExtent3D->setRotation( mMap->orientation() ); mExtent3D->setShowIn2DView( mMap->showExtentIn2DView() ); + connect( mExtent3D, &QgsExtent3DWidget::extentChanged, this, [ = ] + { + mMap->setExtent( mExtent3D->extent() ); + updateTerrain(); + } ); + + connect( mExtent3D, &QgsExtent3DWidget::rotationChanged, this, [ = ] + { + mMap->setOrientation( mExtent3D->rotation() ); + updateTerrain(); + } ); + + connect( mExtent3D, &QgsExtent3DWidget::showIn2DViewChanged, this, [ = ] + { + mMap->setShowExtentIn2DView( mExtent3D->showIn2DView() ); + } ); + onTerrainTypeChanged(); } @@ -335,6 +356,17 @@ void Qgs3DMapConfigWidget::updateTerrain() } } +void Qgs3DMapConfigWidget::reject() +{ + if ( mExtent3D->extent() == mOldExtent && mExtent3D->rotation() == mOldRotation ) + return; + + mMap->setExtent( mOldExtent ); + mMap->setOrientation( mOldRotation ); + + updateTerrain(); +} + void Qgs3DMapConfigWidget::apply() { mMap->setExtent( mExtent3D->extent() ); diff --git a/src/app/3d/qgs3dmapconfigwidget.h b/src/app/3d/qgs3dmapconfigwidget.h index 822cb35a47b8..fba4dd9e57a3 100644 --- a/src/app/3d/qgs3dmapconfigwidget.h +++ b/src/app/3d/qgs3dmapconfigwidget.h @@ -40,6 +40,8 @@ class Qgs3DMapConfigWidget : public QWidget, private Ui::Map3DConfigWidget void apply(); + void reject(); + signals: void isValidChanged( bool valid ); @@ -60,6 +62,9 @@ class Qgs3DMapConfigWidget : public QWidget, private Ui::Map3DConfigWidget QgsShadowRenderingSettingsWidget *mShadowSettingsWidget = nullptr; QCheckBox *mShowExtentIn2DViewCheckbox = nullptr; + double mOldRotation; + QgsRectangle mOldExtent; + void init3DAxisPage(); void updateTerrain(); }; diff --git a/src/app/3d/qgsextent3dwidget.cpp b/src/app/3d/qgsextent3dwidget.cpp index a745866409d2..5957d94815bf 100644 --- a/src/app/3d/qgsextent3dwidget.cpp +++ b/src/app/3d/qgsextent3dwidget.cpp @@ -83,6 +83,7 @@ QgsExtent3DWidget::QgsExtent3DWidget( QWidget *parent ) connect( mRotationSpinBox, qOverload( &QgsSpinBox::valueChanged ), this, &QgsExtent3DWidget::onRotationChanged ); connect( mRotationSlider, &QSlider::valueChanged, this, &QgsExtent3DWidget::onRotationChanged ); + connect( mPreviewExtentCheckBox, &QCheckBox::toggled, this, [ = ] { emit showIn2DViewChanged(); } ); } void QgsExtent3DWidget::setMapCanvas( QgsMapCanvas *canvas ) @@ -320,6 +321,7 @@ void QgsExtent3DWidget::setOutputExtent( const QgsRectangle &rectangle, const Qg } updateTitle( state ); + emit extentChanged(); } void QgsExtent3DWidget::updateTitle( const QgsExtentWidget::ExtentState &state ) @@ -359,6 +361,7 @@ QgsRectangle QgsExtent3DWidget::extent() const void QgsExtent3DWidget::onRotationChanged( int rotation ) { setRotation( rotation ); + emit rotationChanged(); } void QgsExtent3DWidget::setRotation( double rotation ) diff --git a/src/app/3d/qgsextent3dwidget.h b/src/app/3d/qgsextent3dwidget.h index acd89678c371..46fefdd6110a 100644 --- a/src/app/3d/qgsextent3dwidget.h +++ b/src/app/3d/qgsextent3dwidget.h @@ -68,6 +68,9 @@ class QgsExtent3DWidget : public QgsCollapsibleGroupBox, private Ui::QgsExtent3D signals: void toggleDialogVisibility( bool visible ); + void extentChanged(); + void rotationChanged(); + void showIn2DViewChanged(); private slots: