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, [
this]( 
double ) { minMaxChanged(); } );
 
   67  connect( mScalarMaxSpinBox, qOverload<double>( &QgsDoubleSpinBox::valueChanged ), 
this, [
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.