19#include "moc_qgspointcloudrgbrendererwidget.cpp" 
   31  connect( mRedMinLineEdit, &QLineEdit::textChanged, 
this, &QgsPointCloudRgbRendererWidget::mRedMinLineEdit_textChanged );
 
   32  connect( mRedMaxLineEdit, &QLineEdit::textChanged, 
this, &QgsPointCloudRgbRendererWidget::mRedMaxLineEdit_textChanged );
 
   33  connect( mGreenMinLineEdit, &QLineEdit::textChanged, 
this, &QgsPointCloudRgbRendererWidget::mGreenMinLineEdit_textChanged );
 
   34  connect( mGreenMaxLineEdit, &QLineEdit::textChanged, 
this, &QgsPointCloudRgbRendererWidget::mGreenMaxLineEdit_textChanged );
 
   35  connect( mBlueMinLineEdit, &QLineEdit::textChanged, 
this, &QgsPointCloudRgbRendererWidget::mBlueMinLineEdit_textChanged );
 
   36  connect( mBlueMaxLineEdit, &QLineEdit::textChanged, 
this, &QgsPointCloudRgbRendererWidget::mBlueMaxLineEdit_textChanged );
 
   39  mRedAttributeComboBox->setAllowEmptyAttributeName( 
true );
 
   40  mGreenAttributeComboBox->setAllowEmptyAttributeName( 
true );
 
   41  mBlueAttributeComboBox->setAllowEmptyAttributeName( 
true );
 
   51    mRedAttributeComboBox->setLayer( layer );
 
   52    mGreenAttributeComboBox->setLayer( layer );
 
   53    mBlueAttributeComboBox->setLayer( layer );
 
   55    setFromRenderer( layer->
renderer() );
 
   61  connect( mContrastEnhancementAlgorithmComboBox, 
static_cast<void ( QComboBox::* )( 
int )
>( &QComboBox::currentIndexChanged ), 
this, &QgsPointCloudRgbRendererWidget::emitWidgetChanged );
 
   66    mBlockChangedSignal = 
true;
 
   67    redAttributeChanged();
 
   68    greenAttributeChanged();
 
   69    blueAttributeChanged();
 
   70    mBlockChangedSignal = 
false;
 
   77  return new QgsPointCloudRgbRendererWidget( layer, style );
 
   87  auto renderer = std::make_unique<QgsPointCloudRgbRenderer>();
 
   88  renderer->setRedAttribute( mRedAttributeComboBox->currentAttribute() );
 
   89  renderer->setGreenAttribute( mGreenAttributeComboBox->currentAttribute() );
 
   90  renderer->setBlueAttribute( mBlueAttributeComboBox->currentAttribute() );
 
   92  setCustomMinMaxValues( renderer.get() );
 
   93  return renderer.release();
 
   96void QgsPointCloudRgbRendererWidget::createValidators()
 
  125  bool redMinOk, redMaxOk;
 
  128  if ( redMinOk && redMaxOk && !mRedAttributeComboBox->currentAttribute().isEmpty() )
 
  135  bool greenMinOk, greenMaxOk;
 
  138  if ( greenMinOk && greenMaxOk && !mGreenAttributeComboBox->currentAttribute().isEmpty() )
 
  145  bool blueMinOk, blueMaxOk;
 
  148  if ( blueMinOk && blueMaxOk && !mBlueAttributeComboBox->currentAttribute().isEmpty() )
 
  155  if ( redEnhancement )
 
  158      ( mContrastEnhancementAlgorithmComboBox->currentData().toInt() )
 
  161  if ( greenEnhancement )
 
  164      ( mContrastEnhancementAlgorithmComboBox->currentData().toInt() )
 
  167  if ( blueEnhancement )
 
  170      ( mContrastEnhancementAlgorithmComboBox->currentData().toInt() )
 
  178void QgsPointCloudRgbRendererWidget::mRedMinLineEdit_textChanged( 
const QString & )
 
  183void QgsPointCloudRgbRendererWidget::mRedMaxLineEdit_textChanged( 
const QString & )
 
  188void QgsPointCloudRgbRendererWidget::mGreenMinLineEdit_textChanged( 
const QString & )
 
  193void QgsPointCloudRgbRendererWidget::mGreenMaxLineEdit_textChanged( 
const QString & )
 
  198void QgsPointCloudRgbRendererWidget::mBlueMinLineEdit_textChanged( 
const QString & )
 
  203void QgsPointCloudRgbRendererWidget::mBlueMaxLineEdit_textChanged( 
const QString & )
 
  208void QgsPointCloudRgbRendererWidget::emitWidgetChanged()
 
  210  if ( !mBlockChangedSignal )
 
  211    emit widgetChanged();
 
  214void QgsPointCloudRgbRendererWidget::redAttributeChanged()
 
  216  if ( mLayer && mLayer->dataProvider() )
 
  219    const double max = stats.
maximum( mRedAttributeComboBox->currentAttribute() );
 
  220    if ( !std::isnan( max ) )
 
  222      mDisableMinMaxWidgetRefresh++;
 
  223      mRedMinLineEdit->setText( QLocale().toString( 0 ) );
 
  227      mRedMaxLineEdit->setText( QLocale().toString( max > 255 ? 65535 : 255 ) );
 
  228      mDisableMinMaxWidgetRefresh--;
 
  234void QgsPointCloudRgbRendererWidget::greenAttributeChanged()
 
  236  if ( mLayer && mLayer->dataProvider() )
 
  239    const double max = stats.
maximum( mGreenAttributeComboBox->currentAttribute() );
 
  240    if ( !std::isnan( max ) )
 
  242      mDisableMinMaxWidgetRefresh++;
 
  243      mGreenMinLineEdit->setText( QLocale().toString( 0 ) );
 
  247      mGreenMaxLineEdit->setText( QLocale().toString( max > 255 ? 65535 : 255 ) );
 
  248      mDisableMinMaxWidgetRefresh--;
 
  254void QgsPointCloudRgbRendererWidget::blueAttributeChanged()
 
  256  if ( mLayer && mLayer->dataProvider() )
 
  259    const double max = stats.
maximum( mBlueAttributeComboBox->currentAttribute() );
 
  260    if ( !std::isnan( max ) )
 
  262      mDisableMinMaxWidgetRefresh++;
 
  263      mBlueMinLineEdit->setText( QLocale().toString( 0 ) );
 
  267      mBlueMaxLineEdit->setText( QLocale().toString( max > 255 ? 65535 : 255 ) );
 
  268      mDisableMinMaxWidgetRefresh--;
 
  274void QgsPointCloudRgbRendererWidget::minMaxModified()
 
  276  if ( !mDisableMinMaxWidgetRefresh )
 
  280      mContrastEnhancementAlgorithmComboBox->setCurrentIndex(
 
  288void QgsPointCloudRgbRendererWidget::setMinMaxValue( 
const QgsContrastEnhancement *ce, QLineEdit *minEdit, QLineEdit *maxEdit )
 
  290  if ( !minEdit || !maxEdit )
 
  302  minEdit->setText( QLocale().toString( ce->
minimumValue() ) );
 
  303  maxEdit->setText( QLocale().toString( ce->
maximumValue() ) );
 
  307  mContrastEnhancementAlgorithmComboBox->setCurrentIndex( mContrastEnhancementAlgorithmComboBox->findData(
 
  314  mBlockChangedSignal = 
true;
 
  318    mRedAttributeComboBox->setAttribute( mbcr->
redAttribute() );
 
  320    mBlueAttributeComboBox->setAttribute( mbcr->
blueAttribute() );
 
  322    mDisableMinMaxWidgetRefresh++;
 
  326    mDisableMinMaxWidgetRefresh--;
 
  330    if ( mRedAttributeComboBox->findText( QStringLiteral( 
"Red" ) ) > -1 && mRedAttributeComboBox->findText( QStringLiteral( 
"Green" ) ) > -1 && mRedAttributeComboBox->findText( QStringLiteral( 
"Blue" ) ) > -1 )
 
  332      mRedAttributeComboBox->setAttribute( QStringLiteral( 
"Red" ) );
 
  333      mGreenAttributeComboBox->setAttribute( QStringLiteral( 
"Green" ) );
 
  334      mBlueAttributeComboBox->setAttribute( QStringLiteral( 
"Blue" ) );
 
  338      mRedAttributeComboBox->setCurrentIndex( mRedAttributeComboBox->count() > 1 ? 1 : 0 );
 
  339      mGreenAttributeComboBox->setCurrentIndex( mGreenAttributeComboBox->count() > 2 ? 2 : 0 );
 
  340      mBlueAttributeComboBox->setCurrentIndex( mBlueAttributeComboBox->count() > 3 ? 3 : 0 );
 
  343  mBlockChangedSignal = 
false;
 
@ UnknownDataType
Unknown or unspecified type.
 
Handles contrast enhancement and clipping.
 
ContrastEnhancementAlgorithm
This enumerator describes the types of contrast enhancement algorithms that can be used.
 
@ StretchToMinimumMaximum
Linear histogram.
 
@ StretchAndClipToMinimumMaximum
 
@ NoEnhancement
Default color scaling algorithm, no scaling is applied.
 
void setMinimumValue(double value, bool generateTable=true)
Sets the minimum value for the contrast enhancement range.
 
void setContrastEnhancementAlgorithm(ContrastEnhancementAlgorithm algorithm, bool generateTable=true)
Sets the contrast enhancement algorithm.
 
double minimumValue() const
Returns the minimum value for the contrast enhancement range.
 
ContrastEnhancementAlgorithm contrastEnhancementAlgorithm() const
 
void setMaximumValue(double value, bool generateTable=true)
Sets the maximum value for the contrast enhancement range.
 
double maximumValue() const
Returns the maximum value for the contrast enhancement range.
 
A custom validator which allows entry of doubles in a locale-tolerant way.
 
static double toDouble(const QString &input, bool *ok)
Converts input string to double value.
 
void attributeChanged(const QString &name)
Emitted when the currently selected attribute changes.
 
Represents a map layer supporting display of point clouds.
 
QgsPointCloudRenderer * renderer()
Returns the 2D renderer for the point cloud.
 
Abstract base class for 2d point cloud renderers.
 
An RGB renderer for 2d visualisation of point clouds using embedded red, green and blue attributes.
 
void setRedContrastEnhancement(QgsContrastEnhancement *enhancement)
Sets the contrast enhancement to use for the red channel.
 
QString redAttribute() const
Returns the attribute to use for the red channel.
 
QString greenAttribute() const
Returns the attribute to use for the green channel.
 
void setBlueContrastEnhancement(QgsContrastEnhancement *enhancement)
Sets the contrast enhancement to use for the blue channel.
 
const QgsContrastEnhancement * greenContrastEnhancement() const
Returns the contrast enhancement to use for the green channel.
 
QString blueAttribute() const
Returns the attribute to use for the blue channel.
 
void setGreenContrastEnhancement(QgsContrastEnhancement *enhancement)
Sets the contrast enhancement to use for the green channel.
 
const QgsContrastEnhancement * blueContrastEnhancement() const
Returns the contrast enhancement to use for the blue channel.
 
const QgsContrastEnhancement * redContrastEnhancement() const
Returns the contrast enhancement to use for the red channel.
 
Used to store statistics of a point cloud dataset.
 
double maximum(const QString &attribute) const
Returns the maximum value for the attribute attribute If no matching statistic is available then NaN ...
 
A database of saved style entities, including symbols, color ramps, text formats and others.