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`
|
.. 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
|
.. versionadded:: 3.38
|
||||||
%End
|
%End
|
||||||
|
|
||||||
|
@ -112,6 +112,8 @@ A fixed size forces the selected elevation range to have a matching difference b
|
|||||||
the upper and lower elevation.
|
the upper and lower elevation.
|
||||||
|
|
||||||
.. seealso:: :py:func:`fixedRangeSize`
|
.. seealso:: :py:func:`fixedRangeSize`
|
||||||
|
|
||||||
|
.. seealso:: :py:func:`fixedRangeSizeChanged`
|
||||||
%End
|
%End
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
@ -123,6 +125,15 @@ Emitted when the visible range from the widget is changed.
|
|||||||
.. seealso:: :py:func:`setRange`
|
.. seealso:: :py:func:`setRange`
|
||||||
|
|
||||||
.. seealso:: :py:func:`range`
|
.. 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
|
%End
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -84,6 +84,34 @@ elevation limits associated with the project.
|
|||||||
.. seealso:: :py:func:`elevationRangeChanged`
|
.. 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
|
.. versionadded:: 3.38
|
||||||
%End
|
%End
|
||||||
|
|
||||||
|
@ -112,6 +112,8 @@ A fixed size forces the selected elevation range to have a matching difference b
|
|||||||
the upper and lower elevation.
|
the upper and lower elevation.
|
||||||
|
|
||||||
.. seealso:: :py:func:`fixedRangeSize`
|
.. seealso:: :py:func:`fixedRangeSize`
|
||||||
|
|
||||||
|
.. seealso:: :py:func:`fixedRangeSizeChanged`
|
||||||
%End
|
%End
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
@ -123,6 +125,15 @@ Emitted when the visible range from the widget is changed.
|
|||||||
.. seealso:: :py:func:`setRange`
|
.. seealso:: :py:func:`setRange`
|
||||||
|
|
||||||
.. seealso:: :py:func:`range`
|
.. 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
|
%End
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
|
|
||||||
#include "qgsappcanvasfiltering.h"
|
#include "qgsappcanvasfiltering.h"
|
||||||
#include "qgselevationcontrollerwidget.h"
|
#include "qgselevationcontrollerwidget.h"
|
||||||
|
#include "qgsprojectelevationproperties.h"
|
||||||
#include "qgsmapcanvas.h"
|
#include "qgsmapcanvas.h"
|
||||||
#include "qgisapp.h"
|
#include "qgisapp.h"
|
||||||
#include <QInputDialog>
|
#include <QInputDialog>
|
||||||
@ -58,6 +59,16 @@ void QgsAppCanvasFiltering::setupElevationControllerAction( QAction *action, Qgs
|
|||||||
{
|
{
|
||||||
mCanvasElevationControllerMap.remove( canvas );
|
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
|
else
|
||||||
{
|
{
|
||||||
|
@ -76,6 +76,10 @@ bool QgsProjectElevationProperties::readXml( const QDomElement &element, const Q
|
|||||||
rangeUpper = storedRangeUpper;
|
rangeUpper = storedRangeUpper;
|
||||||
mElevationRange = QgsDoubleRange( rangeLower, rangeUpper );
|
mElevationRange = QgsDoubleRange( rangeLower, rangeUpper );
|
||||||
|
|
||||||
|
mElevationFilterRangeSize = element.attribute( QStringLiteral( "FilterRangeSize" ) ).toDouble( &ok );
|
||||||
|
if ( !ok )
|
||||||
|
mElevationFilterRangeSize = -1;
|
||||||
|
|
||||||
emit changed();
|
emit changed();
|
||||||
emit elevationRangeChanged( mElevationRange );
|
emit elevationRangeChanged( mElevationRange );
|
||||||
return true;
|
return true;
|
||||||
@ -98,6 +102,10 @@ QDomElement QgsProjectElevationProperties::writeXml( QDomDocument &document, con
|
|||||||
if ( mElevationRange.upper() != std::numeric_limits< double >::max() )
|
if ( mElevationRange.upper() != std::numeric_limits< double >::max() )
|
||||||
element.setAttribute( QStringLiteral( "RangeUpper" ), qgsDoubleToString( mElevationRange.upper() ) );
|
element.setAttribute( QStringLiteral( "RangeUpper" ), qgsDoubleToString( mElevationRange.upper() ) );
|
||||||
|
|
||||||
|
if ( mElevationFilterRangeSize >= 0 )
|
||||||
|
{
|
||||||
|
element.setAttribute( QStringLiteral( "FilterRangeSize" ), mElevationFilterRangeSize );
|
||||||
|
}
|
||||||
return element;
|
return element;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -118,6 +126,15 @@ void QgsProjectElevationProperties::setTerrainProvider( QgsAbstractTerrainProvid
|
|||||||
emit changed();
|
emit changed();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void QgsProjectElevationProperties::setElevationFilterRangeSize( double size )
|
||||||
|
{
|
||||||
|
if ( mElevationFilterRangeSize == size )
|
||||||
|
return;
|
||||||
|
|
||||||
|
mElevationFilterRangeSize = size;
|
||||||
|
emit changed();
|
||||||
|
}
|
||||||
|
|
||||||
void QgsProjectElevationProperties::setElevationRange( const QgsDoubleRange &range )
|
void QgsProjectElevationProperties::setElevationRange( const QgsDoubleRange &range )
|
||||||
{
|
{
|
||||||
if ( mElevationRange == range )
|
if ( mElevationRange == range )
|
||||||
|
@ -100,6 +100,34 @@ class CORE_EXPORT QgsProjectElevationProperties : public QObject
|
|||||||
*/
|
*/
|
||||||
QgsDoubleRange elevationRange() const { return mElevationRange; }
|
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:
|
public slots:
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -140,6 +168,7 @@ class CORE_EXPORT QgsProjectElevationProperties : public QObject
|
|||||||
|
|
||||||
std::unique_ptr< QgsAbstractTerrainProvider > mTerrainProvider;
|
std::unique_ptr< QgsAbstractTerrainProvider > mTerrainProvider;
|
||||||
QgsDoubleRange mElevationRange;
|
QgsDoubleRange mElevationRange;
|
||||||
|
double mElevationFilterRangeSize = -1;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -49,11 +49,11 @@ QgsElevationControllerWidget::QgsElevationControllerWidget( QWidget *parent )
|
|||||||
mMenu = new QMenu( this );
|
mMenu = new QMenu( this );
|
||||||
mConfigureButton->setMenu( mMenu );
|
mConfigureButton->setMenu( mMenu );
|
||||||
|
|
||||||
QgsElevationControllerSettingsAction *settingsAction = new QgsElevationControllerSettingsAction( mMenu );
|
mSettingsAction = new QgsElevationControllerSettingsAction( mMenu );
|
||||||
mMenu->addAction( settingsAction );
|
mMenu->addAction( mSettingsAction );
|
||||||
|
|
||||||
settingsAction->sizeSpin()->clear();
|
mSettingsAction->sizeSpin()->clear();
|
||||||
connect( settingsAction->sizeSpin(), qOverload< double >( &QgsDoubleSpinBox::valueChanged ), this, [this]( double size )
|
connect( mSettingsAction->sizeSpin(), qOverload< double >( &QgsDoubleSpinBox::valueChanged ), this, [this]( double size )
|
||||||
{
|
{
|
||||||
setFixedRangeSize( size < 0 ? -1 : size );
|
setFixedRangeSize( size < 0 ? -1 : size );
|
||||||
} );
|
} );
|
||||||
@ -225,6 +225,9 @@ void QgsElevationControllerWidget::setFixedRangeSize( double size )
|
|||||||
{
|
{
|
||||||
mSlider->setFixedRangeSize( static_cast< int >( std::round( mFixedRangeSize * mSliderPrecision ) ) );
|
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.
|
* the upper and lower elevation.
|
||||||
*
|
*
|
||||||
* \see fixedRangeSize()
|
* \see fixedRangeSize()
|
||||||
|
* \see fixedRangeSizeChanged()
|
||||||
*/
|
*/
|
||||||
void setFixedRangeSize( double size );
|
void setFixedRangeSize( double size );
|
||||||
|
|
||||||
@ -162,11 +163,20 @@ class GUI_EXPORT QgsElevationControllerWidget : public QWidget
|
|||||||
*/
|
*/
|
||||||
void rangeChanged( const QgsDoubleRange &range );
|
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:
|
private:
|
||||||
|
|
||||||
void updateWidgetMask();
|
void updateWidgetMask();
|
||||||
|
|
||||||
QToolButton *mConfigureButton = nullptr;
|
QToolButton *mConfigureButton = nullptr;
|
||||||
|
QgsElevationControllerSettingsAction *mSettingsAction = nullptr;
|
||||||
QMenu *mMenu = nullptr;
|
QMenu *mMenu = nullptr;
|
||||||
QgsRangeSlider *mSlider = nullptr;
|
QgsRangeSlider *mSlider = nullptr;
|
||||||
QgsElevationControllerLabels *mSliderLabels = nullptr;
|
QgsElevationControllerLabels *mSliderLabels = nullptr;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user