17#include "moc_qgsmeshrendererscalarsettingswidget.cpp"
19#include "QDialogButtonBox"
35 mScalarMinSpinBox->setSpecialValueText( QString() );
37 mScalarMaxSpinBox->setSpecialValueText( QString() );
39 mScalarMinSpinBox->setEnabled(
true );
40 mScalarMaxSpinBox->setEnabled(
true );
45 mScalarInterpolationTypeComboBox->setCurrentIndex( 0 );
50 mMinMaxValueTypeComboBox->setCurrentIndex( 0 );
52 mUserDefinedRadioButton->setChecked(
true );
53 mMinMaxValueTypeComboBox->setEnabled(
false );
55 mScalarEdgeStrokeWidthUnitSelectionWidget->setUnits(
65 connect( mScalarRecalculateMinMaxButton, &QPushButton::clicked,
this, &QgsMeshRendererScalarSettingsWidget::recalculateMinMaxButtonClicked );
66 connect( mScalarMinSpinBox, qOverload<double>( &QgsDoubleSpinBox::valueChanged ),
this, [=](
double ) { minMaxChanged(); } );
67 connect( mScalarMaxSpinBox, qOverload<double>( &QgsDoubleSpinBox::valueChanged ),
this, [=](
double ) { minMaxChanged(); } );
68 connect( mScalarEdgeStrokeWidthVariableRadioButton, &QRadioButton::toggled,
this, &QgsMeshRendererScalarSettingsWidget::onEdgeStrokeWidthMethodChanged );
80 connect( mUserDefinedRadioButton, &QRadioButton::toggled,
this, &QgsMeshRendererScalarSettingsWidget::mUserDefinedRadioButton_toggled );
81 connect( mMinMaxRadioButton, &QRadioButton::toggled,
this, &QgsMeshRendererScalarSettingsWidget::mMinMaxRadioButton_toggled );
83 connect( mMinMaxValueTypeComboBox, qOverload<int>( &QComboBox::currentIndexChanged ),
this, &QgsMeshRendererScalarSettingsWidget::recalculateMinMax );
90 mScalarInterpolationTypeComboBox->setEnabled( !dataIsDefinedOnEdges() );
95 mActiveDatasetGroup = groupIndex;
96 mScalarInterpolationTypeComboBox->setEnabled( !dataIsDefinedOnEdges() );
109 if ( mUserDefinedRadioButton->isChecked() )
122 edgeStrokeWidth.
setIsVariableWidth( mScalarEdgeStrokeWidthVariableRadioButton->isChecked() );
136 if ( mActiveDatasetGroup < 0 )
146 if ( std::abs( max ) < 1e-2 )
148 mScalarMinSpinBox->setDecimals( 8 );
149 mScalarMaxSpinBox->setDecimals( 8 );
153 mScalarMinSpinBox->setDecimals( 2 );
154 mScalarMaxSpinBox->setDecimals( 2 );
160 whileBlocking( mMinMaxValueTypeComboBox )->setCurrentIndex( mMinMaxValueTypeComboBox->findData( QVariant::fromValue(
settings.
extent() ) ) );
164 whileBlocking( mUserDefinedRadioButton )->setChecked(
false );
166 mScalarMinSpinBox->setEnabled(
false );
167 mScalarMaxSpinBox->setEnabled(
false );
168 mMinMaxValueTypeComboBox->setEnabled(
true );
172 whileBlocking( mUserDefinedRadioButton )->setChecked(
true );
174 mScalarMinSpinBox->setEnabled(
true );
175 mScalarMaxSpinBox->setEnabled(
true );
176 mMinMaxValueTypeComboBox->setEnabled(
false );
179 whileBlocking( mScalarColorRampShaderWidget )->setFromShader( shader );
180 whileBlocking( mScalarColorRampShaderWidget )->setMinimumMaximum( min, max );
183 whileBlocking( mScalarInterpolationTypeComboBox )->setCurrentIndex( index );
188 mScalarResamplingWidget->setVisible( hasFaces );
190 mEdgeWidthGroupBox->setVisible( hasEdges );
195 whileBlocking( mScalarEdgeStrokeWidthVariablePushButton )->setVariableStrokeWidth( edgeStrokeWidth );
200 mOpacityContainerWidget->setVisible(
false );
203 const double min = metadata.
minimum();
204 const double max = metadata.
maximum();
205 mScalarEdgeStrokeWidthVariablePushButton->setDefaultMinMaxValue( min, max );
208 onEdgeStrokeWidthMethodChanged();
211double QgsMeshRendererScalarSettingsWidget::spinBoxValue(
const QgsDoubleSpinBox *spinBox )
const
213 if ( spinBox->value() == spinBox->
clearValue() )
215 return std::numeric_limits<double>::quiet_NaN();
218 return spinBox->value();
221void QgsMeshRendererScalarSettingsWidget::minMaxChanged()
223 const double min = spinBoxValue( mScalarMinSpinBox );
224 const double max = spinBoxValue( mScalarMaxSpinBox );
225 mScalarColorRampShaderWidget->setMinimumMaximumAndClassify( min, max );
228void QgsMeshRendererScalarSettingsWidget::recalculateMinMaxButtonClicked()
231 const double min = metadata.
minimum();
232 const double max = metadata.
maximum();
234 if ( std::abs( max ) < 1e-2 )
236 mScalarMinSpinBox->setDecimals( 8 );
237 mScalarMaxSpinBox->setDecimals( 8 );
241 mScalarMinSpinBox->setDecimals( 2 );
242 mScalarMaxSpinBox->setDecimals( 2 );
247 mScalarColorRampShaderWidget->setMinimumMaximumAndClassify( min, max );
250void QgsMeshRendererScalarSettingsWidget::onEdgeStrokeWidthMethodChanged()
252 const bool variableWidth = mScalarEdgeStrokeWidthVariableRadioButton->isChecked();
253 mScalarEdgeStrokeWidthVariablePushButton->setVisible( variableWidth );
254 mScalarEdgeStrokeWidthSpinBox->setVisible( !variableWidth );
259 const int data = mScalarInterpolationTypeComboBox->currentData().toInt();
264bool QgsMeshRendererScalarSettingsWidget::dataIsDefinedOnFaces()
const
269 if ( mActiveDatasetGroup < 0 )
277bool QgsMeshRendererScalarSettingsWidget::dataIsDefinedOnEdges()
const
282 if ( mActiveDatasetGroup < 0 )
295void QgsMeshRendererScalarSettingsWidget::recalculateMinMax()
301 switch ( extentRange )
305 searchExtent = mMeshLayer->
extent();
312 searchExtent = mCanvas->
extent();
315 searchExtent = ct.
transform( searchExtent );
321 searchExtent = mMeshLayer->
extent();
345void QgsMeshRendererScalarSettingsWidget::mUserDefinedRadioButton_toggled(
bool toggled )
347 mMinMaxValueTypeComboBox->setEnabled( !toggled );
348 mScalarMinSpinBox->setEnabled( toggled );
349 mScalarMaxSpinBox->setEnabled( toggled );
350 mScalarRecalculateMinMaxButton->setEnabled( toggled );
354void QgsMeshRendererScalarSettingsWidget::mMinMaxRadioButton_toggled(
bool toggled )
356 mMinMaxValueTypeComboBox->setEnabled( toggled );
357 mScalarMinSpinBox->setEnabled( !toggled );
358 mScalarMaxSpinBox->setEnabled( !toggled );
359 mScalarRecalculateMinMaxButton->setEnabled( !toggled );
@ MinimumMaximum
Real min-max values.
MeshRangeExtent
Describes the extent used to compute mesh ranges (min/max values).
@ UpdatedCanvas
Constantly updated extent of the canvas is used to compute statistics.
@ WholeMesh
Whole mesh is used to compute statistics.
@ FixedCanvas
Current extent of the canvas (at the time of computation) is used to compute statistics.
@ Millimeters
Millimeters.
@ Points
Points (e.g., for font sizes)
@ MetersInMapUnits
Meters value as Map units.
A ramp shader will color a raster pixel based on a list of values ranges in a ramp.
Custom exception class for Coordinate Reference System related exceptions.
The QgsSpinBox is a spin box with a clear button that will set the value to the defined clear value.
@ MinimumValue
Reset value to minimum()
Represents a width that can vary depending on values.
void setFixedStrokeWidth(double fixedWidth)
Sets the fixed width.
void setIsVariableWidth(bool isVariableWidth)
Returns whether the width is variable.
double fixedStrokeWidth() const
Returns the fixed width.
bool isVariableWidth() const
Returns whether the width is variable.
Map canvas is a class for displaying all GIS data types on a canvas.
const QgsDateTimeRange & temporalRange() const
Returns map canvas datetime range.
const QgsMapSettings & mapSettings() const
Gets access to properties used for map rendering.
QgsRectangle extent() const
Returns the current zoom extent of the map canvas.
QgsCoordinateReferenceSystem crs
QgsCoordinateReferenceSystem destinationCrs() const
Returns the destination coordinate reference system for the map render.
An index that identifies the dataset group (e.g.
Represents a mesh layer supporting display of data on structured or unstructured meshes.
QgsRectangle extent() const override
Returns the extent of the layer.
bool contains(const QgsMesh::ElementType &type) const
Returns whether the mesh contains at mesh elements of given type.
QgsMeshRendererSettings rendererSettings() const
Returns renderer settings.
bool minimumMaximumActiveScalarDataset(const QgsRectangle &extent, const QgsMeshDatasetIndex &datasetIndex, double &min, double &max)
Extracts minimum and maximum value for active scalar dataset on mesh faces.
QgsMeshDatasetIndex activeScalarDatasetAtTime(const QgsDateTimeRange &timeRange, int group=-1) const
Returns dataset index from active scalar group depending on the time range.
QgsMeshDatasetGroupMetadata datasetGroupMetadata(const QgsMeshDatasetIndex &index) const
Returns the dataset groups metadata.
Represents a mesh renderer settings for scalar datasets.
void setClassificationMinimumMaximum(double minimum, double maximum)
Sets min/max values used for creation of the color ramp shader.
Qgis::MeshRangeExtent extent() const
Returns the mesh extent for minimum maximum calculation.
double opacity() const
Returns opacity.
void setEdgeStrokeWidthUnit(Qgis::RenderUnit edgeStrokeWidthUnit)
Sets the stroke width unit used to render edges scalar dataset.
void setColorRampShader(const QgsColorRampShader &shader)
Sets color ramp shader function.
Qgis::MeshRangeLimit limits() const
Returns the range limits type for minimum maximum calculation.
QgsColorRampShader colorRampShader() const
Returns color ramp shader function.
void setExtent(Qgis::MeshRangeExtent extent)
Sets the mesh extent for minimum maximum calculation.
double classificationMinimum() const
Returns min value used for creation of the color ramp shader.
void setOpacity(double opacity)
Sets opacity.
DataResamplingMethod
Resampling of value from dataset.
@ NoResampling
Does not use resampling.
@ NeighbourAverage
Does a simple average of values defined for all surrounding faces/vertices.
Qgis::RenderUnit edgeStrokeWidthUnit() const
Returns the stroke width unit used to render edges scalar dataset.
DataResamplingMethod dataResamplingMethod() const
Returns the type of interpolation to use to convert face defined datasets to values on vertices.
void setEdgeStrokeWidth(const QgsInterpolatedLineWidth &strokeWidth)
Sets the stroke width used to render edges scalar dataset.
double classificationMaximum() const
Returns max value used for creation of the color ramp shader.
void setLimits(Qgis::MeshRangeLimit limits)
Sets the range limits type for minimum maximum calculation.
QgsInterpolatedLineWidth edgeStrokeWidth() const
Returns the stroke width used to render edges scalar dataset.
void setDataResamplingMethod(const DataResamplingMethod &dataResamplingMethod)
Sets data interpolation method.
Represents all mesh renderer settings.
QgsMeshRendererScalarSettings scalarSettings(int groupIndex) const
Returns renderer settings.
static void logMessage(const QString &message, const QString &tag=QString(), Qgis::MessageLevel level=Qgis::MessageLevel::Warning, bool notifyUser=true, const char *file=__builtin_FILE(), const char *function=__builtin_FUNCTION(), int line=__builtin_LINE())
Adds a message to the log instance (and creates it if necessary).
static QgsProject * instance()
Returns the QgsProject singleton instance.
A rectangle specified with double values.
QgsSignalBlocker< Object > whileBlocking(Object *object)
Temporarily blocks signals from a QObject while calling a single method from the object.