mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-18 00:03:05 -04:00
The min/max values were stored in the color ramp shader, but to my surprise these values were never persisted or copied: pseudo-color raster renderer has a separate storage for the min/max values, so we need that for mesh renderer as well. The QgsRasterShaderFunction is not really useful, and QgsColorRamp should not be derived from it, making things just more confusing.
100 lines
4.1 KiB
C++
100 lines
4.1 KiB
C++
/***************************************************************************
|
|
qgsmeshrendererscalarsettingswidget.cpp
|
|
---------------------------------------
|
|
begin : June 2018
|
|
copyright : (C) 2018 by Peter Petrik
|
|
email : zilolv at gmail dot com
|
|
***************************************************************************
|
|
* *
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
* (at your option) any later version. *
|
|
* *
|
|
***************************************************************************/
|
|
|
|
#include "qgsmeshrendererscalarsettingswidget.h"
|
|
|
|
#include "qgis.h"
|
|
#include "qgsmeshlayer.h"
|
|
#include "qgsmeshlayerutils.h"
|
|
#include "qgsmessagelog.h"
|
|
|
|
|
|
QgsMeshRendererScalarSettingsWidget::QgsMeshRendererScalarSettingsWidget( QWidget *parent )
|
|
: QWidget( parent )
|
|
|
|
{
|
|
setupUi( this );
|
|
|
|
connect( mScalarRecalculateMinMaxButton, &QPushButton::clicked, this, &QgsMeshRendererScalarSettingsWidget::recalculateMinMaxButtonClicked );
|
|
connect( mScalarMinLineEdit, &QLineEdit::textChanged, this, &QgsMeshRendererScalarSettingsWidget::minMaxChanged );
|
|
connect( mScalarMaxLineEdit, &QLineEdit::textChanged, this, &QgsMeshRendererScalarSettingsWidget::minMaxChanged );
|
|
connect( mScalarMinLineEdit, &QLineEdit::textEdited, this, &QgsMeshRendererScalarSettingsWidget::minMaxEdited );
|
|
connect( mScalarMaxLineEdit, &QLineEdit::textEdited, this, &QgsMeshRendererScalarSettingsWidget::minMaxEdited );
|
|
connect( mScalarColorRampShaderWidget, &QgsColorRampShaderWidget::widgetChanged, this, &QgsMeshRendererScalarSettingsWidget::widgetChanged );
|
|
|
|
}
|
|
|
|
void QgsMeshRendererScalarSettingsWidget::setLayer( QgsMeshLayer *layer )
|
|
{
|
|
mMeshLayer = layer;
|
|
}
|
|
|
|
QgsMeshRendererScalarSettings QgsMeshRendererScalarSettingsWidget::settings() const
|
|
{
|
|
QgsMeshRendererScalarSettings settings;
|
|
settings.setColorRampShader( mScalarColorRampShaderWidget->shader() );
|
|
settings.setClassificationMinMax( lineEditValue( mScalarMinLineEdit ), lineEditValue( mScalarMaxLineEdit ) );
|
|
return settings;
|
|
}
|
|
|
|
void QgsMeshRendererScalarSettingsWidget::syncToLayer( )
|
|
{
|
|
if ( !mMeshLayer )
|
|
return;
|
|
|
|
if ( mActiveDatasetGroup < 0 )
|
|
return;
|
|
|
|
const QgsMeshRendererSettings rendererSettings = mMeshLayer->rendererSettings();
|
|
const QgsMeshRendererScalarSettings settings = rendererSettings.scalarSettings( mActiveDatasetGroup );
|
|
const QgsColorRampShader shader = settings.colorRampShader();
|
|
whileBlocking( mScalarMinLineEdit )->setText( QString::number( settings.classificationMin() ) );
|
|
whileBlocking( mScalarMaxLineEdit )->setText( QString::number( settings.classificationMax() ) );
|
|
whileBlocking( mScalarColorRampShaderWidget )->setFromShader( shader );
|
|
}
|
|
|
|
double QgsMeshRendererScalarSettingsWidget::lineEditValue( const QLineEdit *lineEdit ) const
|
|
{
|
|
if ( lineEdit->text().isEmpty() )
|
|
{
|
|
return std::numeric_limits<double>::quiet_NaN();
|
|
}
|
|
|
|
return lineEdit->text().toDouble();
|
|
}
|
|
|
|
void QgsMeshRendererScalarSettingsWidget::minMaxChanged()
|
|
{
|
|
double min = lineEditValue( mScalarMinLineEdit );
|
|
double max = lineEditValue( mScalarMaxLineEdit );
|
|
mScalarColorRampShaderWidget->setMinimumMaximum( min, max );
|
|
}
|
|
|
|
void QgsMeshRendererScalarSettingsWidget::minMaxEdited()
|
|
{
|
|
double min = lineEditValue( mScalarMinLineEdit );
|
|
double max = lineEditValue( mScalarMaxLineEdit );
|
|
mScalarColorRampShaderWidget->setMinimumMaximumAndClassify( min, max );
|
|
}
|
|
|
|
void QgsMeshRendererScalarSettingsWidget::recalculateMinMaxButtonClicked()
|
|
{
|
|
double min, max;
|
|
QgsMeshLayerUtils::calculateMinMaxForDatasetGroup( min, max, mMeshLayer->dataProvider(), mActiveDatasetGroup );
|
|
whileBlocking( mScalarMinLineEdit )->setText( QString::number( min ) );
|
|
whileBlocking( mScalarMaxLineEdit )->setText( QString::number( max ) );
|
|
mScalarColorRampShaderWidget->setMinimumMaximumAndClassify( min, max );
|
|
}
|