30 connect( mRedMinLineEdit, &QLineEdit::textChanged,
this, &QgsPointCloudRgbRendererWidget::mRedMinLineEdit_textChanged );
31 connect( mRedMaxLineEdit, &QLineEdit::textChanged,
this, &QgsPointCloudRgbRendererWidget::mRedMaxLineEdit_textChanged );
32 connect( mGreenMinLineEdit, &QLineEdit::textChanged,
this, &QgsPointCloudRgbRendererWidget::mGreenMinLineEdit_textChanged );
33 connect( mGreenMaxLineEdit, &QLineEdit::textChanged,
this, &QgsPointCloudRgbRendererWidget::mGreenMaxLineEdit_textChanged );
34 connect( mBlueMinLineEdit, &QLineEdit::textChanged,
this, &QgsPointCloudRgbRendererWidget::mBlueMinLineEdit_textChanged );
35 connect( mBlueMaxLineEdit, &QLineEdit::textChanged,
this, &QgsPointCloudRgbRendererWidget::mBlueMaxLineEdit_textChanged );
38 mRedAttributeComboBox->setAllowEmptyAttributeName(
true );
39 mGreenAttributeComboBox->setAllowEmptyAttributeName(
true );
40 mBlueAttributeComboBox->setAllowEmptyAttributeName(
true );
50 mRedAttributeComboBox->setLayer( layer );
51 mGreenAttributeComboBox->setLayer( layer );
52 mBlueAttributeComboBox->setLayer( layer );
54 setFromRenderer( layer->
renderer() );
58 this, &QgsPointCloudRgbRendererWidget::redAttributeChanged );
60 this, &QgsPointCloudRgbRendererWidget::greenAttributeChanged );
62 this, &QgsPointCloudRgbRendererWidget::blueAttributeChanged );
63 connect( mContrastEnhancementAlgorithmComboBox,
static_cast<void ( QComboBox::* )(
int )
>( &QComboBox::currentIndexChanged ),
this, &QgsPointCloudRgbRendererWidget::emitWidgetChanged );
68 mBlockChangedSignal =
true;
69 redAttributeChanged();
70 greenAttributeChanged();
71 blueAttributeChanged();
72 mBlockChangedSignal =
false;
79 return new QgsPointCloudRgbRendererWidget( layer, style );
89 std::unique_ptr< QgsPointCloudRgbRenderer > renderer = std::make_unique< QgsPointCloudRgbRenderer >();
90 renderer->setRedAttribute( mRedAttributeComboBox->currentAttribute() );
91 renderer->setGreenAttribute( mGreenAttributeComboBox->currentAttribute() );
92 renderer->setBlueAttribute( mBlueAttributeComboBox->currentAttribute() );
94 setCustomMinMaxValues( renderer.get() );
95 return renderer.release();
98void QgsPointCloudRgbRendererWidget::createValidators()
115 if ( mContrastEnhancementAlgorithmComboBox->currentData().toInt() ==
128 bool redMinOk, redMaxOk;
131 if ( redMinOk && redMaxOk && !mRedAttributeComboBox->currentAttribute().isEmpty() )
138 bool greenMinOk, greenMaxOk;
141 if ( greenMinOk && greenMaxOk && !mGreenAttributeComboBox->currentAttribute().isEmpty() )
148 bool blueMinOk, blueMaxOk;
151 if ( blueMinOk && blueMaxOk && !mBlueAttributeComboBox->currentAttribute().isEmpty() )
158 if ( redEnhancement )
161 ( mContrastEnhancementAlgorithmComboBox->currentData().toInt() ) ) );
163 if ( greenEnhancement )
166 ( mContrastEnhancementAlgorithmComboBox->currentData().toInt() ) ) );
168 if ( blueEnhancement )
171 ( 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(
287void QgsPointCloudRgbRendererWidget::setMinMaxValue(
const QgsContrastEnhancement *ce, QLineEdit *minEdit, QLineEdit *maxEdit )
289 if ( !minEdit || !maxEdit )
301 minEdit->setText( QLocale().toString( ce->
minimumValue() ) );
302 maxEdit->setText( QLocale().toString( ce->
maximumValue() ) );
306 mContrastEnhancementAlgorithmComboBox->setCurrentIndex( mContrastEnhancementAlgorithmComboBox->findData(
312 mBlockChangedSignal =
true;
316 mRedAttributeComboBox->setAttribute( mbcr->
redAttribute() );
318 mBlueAttributeComboBox->setAttribute( mbcr->
blueAttribute() );
320 mDisableMinMaxWidgetRefresh++;
324 mDisableMinMaxWidgetRefresh--;
328 if ( mRedAttributeComboBox->findText( QStringLiteral(
"Red" ) ) > -1 && mRedAttributeComboBox->findText( QStringLiteral(
"Green" ) ) > -1 &&
329 mRedAttributeComboBox->findText( QStringLiteral(
"Blue" ) ) > -1 )
331 mRedAttributeComboBox->setAttribute( QStringLiteral(
"Red" ) );
332 mGreenAttributeComboBox->setAttribute( QStringLiteral(
"Green" ) );
333 mBlueAttributeComboBox->setAttribute( QStringLiteral(
"Blue" ) );
337 mRedAttributeComboBox->setCurrentIndex( mRedAttributeComboBox->count() > 1 ? 1 : 0 );
338 mGreenAttributeComboBox->setCurrentIndex( mGreenAttributeComboBox->count() > 2 ? 2 : 0 );
339 mBlueAttributeComboBox->setCurrentIndex( mBlueAttributeComboBox->count() > 3 ? 3 : 0 );
342 mBlockChangedSignal =
false;
@ UnknownDataType
Unknown or unspecified type.
Manipulates raster or point cloud pixel values so that they enhanceContrast or clip into a specified ...
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.
QgsDoubleValidator is a QLineEdit Validator that combines QDoubleValidator and QRegularExpressionVali...
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.
Class 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 ...