mirror of
https://github.com/qgis/QGIS.git
synced 2025-10-15 00:02:52 -04:00
Store elevation filter fixed range size in project
Remember this setting between sessions for a project
This commit is contained in:
parent
d5dea0721c
commit
1698bd3391
@ -84,6 +84,34 @@ elevation limits associated with the project.
|
||||
.. seealso:: :py:func:`elevationRangeChanged`
|
||||
|
||||
|
||||
.. versionadded:: 3.38
|
||||
%End
|
||||
|
||||
void setElevationFilterRangeSize( double size );
|
||||
%Docstring
|
||||
Sets the fixed size for elevation range filtering in the project, used when interactively filtering by elevation.
|
||||
|
||||
Set to -1 if no fixed elevation range size is desired.
|
||||
|
||||
A fixed size forces the selected elevation range to have a matching difference between
|
||||
the upper and lower elevation.
|
||||
|
||||
.. seealso:: :py:func:`elevationFilterRangeSize`
|
||||
|
||||
.. versionadded:: 3.38
|
||||
%End
|
||||
|
||||
double elevationFilterRangeSize() const;
|
||||
%Docstring
|
||||
Returns the fixed size for elevation range filtering in the project, used when interactively filtering by elevation.
|
||||
|
||||
Returns -1 if no fixed elevation range size is desired.
|
||||
|
||||
A fixed size forces the selected elevation range to have a matching difference between
|
||||
the upper and lower elevation.
|
||||
|
||||
.. seealso:: :py:func:`setElevationFilterRangeSize`
|
||||
|
||||
.. versionadded:: 3.38
|
||||
%End
|
||||
|
||||
|
@ -112,6 +112,8 @@ A fixed size forces the selected elevation range to have a matching difference b
|
||||
the upper and lower elevation.
|
||||
|
||||
.. seealso:: :py:func:`fixedRangeSize`
|
||||
|
||||
.. seealso:: :py:func:`fixedRangeSizeChanged`
|
||||
%End
|
||||
|
||||
signals:
|
||||
@ -123,6 +125,15 @@ Emitted when the visible range from the widget is changed.
|
||||
.. seealso:: :py:func:`setRange`
|
||||
|
||||
.. seealso:: :py:func:`range`
|
||||
%End
|
||||
|
||||
void fixedRangeSizeChanged( double size );
|
||||
%Docstring
|
||||
Emitted when the fixed range size is changed from the widget.
|
||||
|
||||
.. seealso:: :py:func:`fixedRangeSize`
|
||||
|
||||
.. seealso:: :py:func:`setFixedRangeSize`
|
||||
%End
|
||||
|
||||
};
|
||||
|
@ -84,6 +84,34 @@ elevation limits associated with the project.
|
||||
.. seealso:: :py:func:`elevationRangeChanged`
|
||||
|
||||
|
||||
.. versionadded:: 3.38
|
||||
%End
|
||||
|
||||
void setElevationFilterRangeSize( double size );
|
||||
%Docstring
|
||||
Sets the fixed size for elevation range filtering in the project, used when interactively filtering by elevation.
|
||||
|
||||
Set to -1 if no fixed elevation range size is desired.
|
||||
|
||||
A fixed size forces the selected elevation range to have a matching difference between
|
||||
the upper and lower elevation.
|
||||
|
||||
.. seealso:: :py:func:`elevationFilterRangeSize`
|
||||
|
||||
.. versionadded:: 3.38
|
||||
%End
|
||||
|
||||
double elevationFilterRangeSize() const;
|
||||
%Docstring
|
||||
Returns the fixed size for elevation range filtering in the project, used when interactively filtering by elevation.
|
||||
|
||||
Returns -1 if no fixed elevation range size is desired.
|
||||
|
||||
A fixed size forces the selected elevation range to have a matching difference between
|
||||
the upper and lower elevation.
|
||||
|
||||
.. seealso:: :py:func:`setElevationFilterRangeSize`
|
||||
|
||||
.. versionadded:: 3.38
|
||||
%End
|
||||
|
||||
|
@ -112,6 +112,8 @@ A fixed size forces the selected elevation range to have a matching difference b
|
||||
the upper and lower elevation.
|
||||
|
||||
.. seealso:: :py:func:`fixedRangeSize`
|
||||
|
||||
.. seealso:: :py:func:`fixedRangeSizeChanged`
|
||||
%End
|
||||
|
||||
signals:
|
||||
@ -123,6 +125,15 @@ Emitted when the visible range from the widget is changed.
|
||||
.. seealso:: :py:func:`setRange`
|
||||
|
||||
.. seealso:: :py:func:`range`
|
||||
%End
|
||||
|
||||
void fixedRangeSizeChanged( double size );
|
||||
%Docstring
|
||||
Emitted when the fixed range size is changed from the widget.
|
||||
|
||||
.. seealso:: :py:func:`fixedRangeSize`
|
||||
|
||||
.. seealso:: :py:func:`setFixedRangeSize`
|
||||
%End
|
||||
|
||||
};
|
||||
|
@ -15,6 +15,7 @@
|
||||
|
||||
#include "qgsappcanvasfiltering.h"
|
||||
#include "qgselevationcontrollerwidget.h"
|
||||
#include "qgsprojectelevationproperties.h"
|
||||
#include "qgsmapcanvas.h"
|
||||
#include "qgisapp.h"
|
||||
#include <QInputDialog>
|
||||
@ -58,6 +59,16 @@ void QgsAppCanvasFiltering::setupElevationControllerAction( QAction *action, Qgs
|
||||
{
|
||||
mCanvasElevationControllerMap.remove( canvas );
|
||||
} );
|
||||
|
||||
if ( canvas == QgisApp::instance()->mapCanvas() )
|
||||
{
|
||||
// for main canvas, attach settings to project settings
|
||||
controller->setFixedRangeSize( QgsProject::instance()->elevationProperties()->elevationFilterRangeSize() );
|
||||
connect( controller, &QgsElevationControllerWidget::fixedRangeSizeChanged, this, []( double size )
|
||||
{
|
||||
QgsProject::instance()->elevationProperties()->setElevationFilterRangeSize( size );
|
||||
} );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -76,6 +76,10 @@ bool QgsProjectElevationProperties::readXml( const QDomElement &element, const Q
|
||||
rangeUpper = storedRangeUpper;
|
||||
mElevationRange = QgsDoubleRange( rangeLower, rangeUpper );
|
||||
|
||||
mElevationFilterRangeSize = element.attribute( QStringLiteral( "FilterRangeSize" ) ).toDouble( &ok );
|
||||
if ( !ok )
|
||||
mElevationFilterRangeSize = -1;
|
||||
|
||||
emit changed();
|
||||
emit elevationRangeChanged( mElevationRange );
|
||||
return true;
|
||||
@ -98,6 +102,10 @@ QDomElement QgsProjectElevationProperties::writeXml( QDomDocument &document, con
|
||||
if ( mElevationRange.upper() != std::numeric_limits< double >::max() )
|
||||
element.setAttribute( QStringLiteral( "RangeUpper" ), qgsDoubleToString( mElevationRange.upper() ) );
|
||||
|
||||
if ( mElevationFilterRangeSize >= 0 )
|
||||
{
|
||||
element.setAttribute( QStringLiteral( "FilterRangeSize" ), mElevationFilterRangeSize );
|
||||
}
|
||||
return element;
|
||||
}
|
||||
|
||||
@ -118,6 +126,15 @@ void QgsProjectElevationProperties::setTerrainProvider( QgsAbstractTerrainProvid
|
||||
emit changed();
|
||||
}
|
||||
|
||||
void QgsProjectElevationProperties::setElevationFilterRangeSize( double size )
|
||||
{
|
||||
if ( mElevationFilterRangeSize == size )
|
||||
return;
|
||||
|
||||
mElevationFilterRangeSize = size;
|
||||
emit changed();
|
||||
}
|
||||
|
||||
void QgsProjectElevationProperties::setElevationRange( const QgsDoubleRange &range )
|
||||
{
|
||||
if ( mElevationRange == range )
|
||||
|
@ -100,6 +100,34 @@ class CORE_EXPORT QgsProjectElevationProperties : public QObject
|
||||
*/
|
||||
QgsDoubleRange elevationRange() const { return mElevationRange; }
|
||||
|
||||
/**
|
||||
* Sets the fixed size for elevation range filtering in the project, used when interactively filtering by elevation.
|
||||
*
|
||||
* Set to -1 if no fixed elevation range size is desired.
|
||||
*
|
||||
* A fixed size forces the selected elevation range to have a matching difference between
|
||||
* the upper and lower elevation.
|
||||
*
|
||||
* \see elevationFilterRangeSize()
|
||||
*
|
||||
* \since QGIS 3.38
|
||||
*/
|
||||
void setElevationFilterRangeSize( double size );
|
||||
|
||||
/**
|
||||
* Returns the fixed size for elevation range filtering in the project, used when interactively filtering by elevation.
|
||||
*
|
||||
* Returns -1 if no fixed elevation range size is desired.
|
||||
*
|
||||
* A fixed size forces the selected elevation range to have a matching difference between
|
||||
* the upper and lower elevation.
|
||||
*
|
||||
* \see setElevationFilterRangeSize()
|
||||
*
|
||||
* \since QGIS 3.38
|
||||
*/
|
||||
double elevationFilterRangeSize() const { return mElevationFilterRangeSize; }
|
||||
|
||||
public slots:
|
||||
|
||||
/**
|
||||
@ -140,6 +168,7 @@ class CORE_EXPORT QgsProjectElevationProperties : public QObject
|
||||
|
||||
std::unique_ptr< QgsAbstractTerrainProvider > mTerrainProvider;
|
||||
QgsDoubleRange mElevationRange;
|
||||
double mElevationFilterRangeSize = -1;
|
||||
|
||||
};
|
||||
|
||||
|
@ -49,11 +49,11 @@ QgsElevationControllerWidget::QgsElevationControllerWidget( QWidget *parent )
|
||||
mMenu = new QMenu( this );
|
||||
mConfigureButton->setMenu( mMenu );
|
||||
|
||||
QgsElevationControllerSettingsAction *settingsAction = new QgsElevationControllerSettingsAction( mMenu );
|
||||
mMenu->addAction( settingsAction );
|
||||
mSettingsAction = new QgsElevationControllerSettingsAction( mMenu );
|
||||
mMenu->addAction( mSettingsAction );
|
||||
|
||||
settingsAction->sizeSpin()->clear();
|
||||
connect( settingsAction->sizeSpin(), qOverload< double >( &QgsDoubleSpinBox::valueChanged ), this, [this]( double size )
|
||||
mSettingsAction->sizeSpin()->clear();
|
||||
connect( mSettingsAction->sizeSpin(), qOverload< double >( &QgsDoubleSpinBox::valueChanged ), this, [this]( double size )
|
||||
{
|
||||
setFixedRangeSize( size < 0 ? -1 : size );
|
||||
} );
|
||||
@ -225,6 +225,9 @@ void QgsElevationControllerWidget::setFixedRangeSize( double size )
|
||||
{
|
||||
mSlider->setFixedRangeSize( static_cast< int >( std::round( mFixedRangeSize * mSliderPrecision ) ) );
|
||||
}
|
||||
if ( mFixedRangeSize != mSettingsAction->sizeSpin()->value() )
|
||||
mSettingsAction->sizeSpin()->setValue( mFixedRangeSize );
|
||||
emit fixedRangeSizeChanged( mFixedRangeSize );
|
||||
}
|
||||
|
||||
//
|
||||
|
@ -149,6 +149,7 @@ class GUI_EXPORT QgsElevationControllerWidget : public QWidget
|
||||
* the upper and lower elevation.
|
||||
*
|
||||
* \see fixedRangeSize()
|
||||
* \see fixedRangeSizeChanged()
|
||||
*/
|
||||
void setFixedRangeSize( double size );
|
||||
|
||||
@ -162,11 +163,20 @@ class GUI_EXPORT QgsElevationControllerWidget : public QWidget
|
||||
*/
|
||||
void rangeChanged( const QgsDoubleRange &range );
|
||||
|
||||
/**
|
||||
* Emitted when the fixed range size is changed from the widget.
|
||||
*
|
||||
* \see fixedRangeSize()
|
||||
* \see setFixedRangeSize()
|
||||
*/
|
||||
void fixedRangeSizeChanged( double size );
|
||||
|
||||
private:
|
||||
|
||||
void updateWidgetMask();
|
||||
|
||||
QToolButton *mConfigureButton = nullptr;
|
||||
QgsElevationControllerSettingsAction *mSettingsAction = nullptr;
|
||||
QMenu *mMenu = nullptr;
|
||||
QgsRangeSlider *mSlider = nullptr;
|
||||
QgsElevationControllerLabels *mSliderLabels = nullptr;
|
||||
|
Loading…
x
Reference in New Issue
Block a user