16#include <QIntValidator>
21#include <QRegularExpression>
25#include "moc_qgsrastertransparencywidget.cpp"
41 , TRSTRING_NOT_SET( tr(
"Not Set" ) )
42 , mRasterLayer( layer )
43 , mMapCanvas( canvas )
46 connect( pbnAddValuesFromDisplay, &QToolButton::clicked,
this, &QgsRasterTransparencyWidget::pbnAddValuesFromDisplay_clicked );
47 connect( pbnAddValuesManually, &QToolButton::clicked,
this, &QgsRasterTransparencyWidget::pbnAddValuesManually_clicked );
48 connect( pbnDefaultValues, &QToolButton::clicked,
this, &QgsRasterTransparencyWidget::pbnDefaultValues_clicked );
49 connect( pbnExportTransparentPixelValues, &QToolButton::clicked,
this, &QgsRasterTransparencyWidget::pbnExportTransparentPixelValues_clicked );
50 connect( pbnImportTransparentPixelValues, &QToolButton::clicked,
this, &QgsRasterTransparencyWidget::pbnImportTransparentPixelValues_clicked );
51 connect( pbnRemoveSelectedRow, &QToolButton::clicked,
this, &QgsRasterTransparencyWidget::pbnRemoveSelectedRow_clicked );
53 mNodataColorButton->setShowNoColor(
true );
54 mNodataColorButton->setColorDialogTitle( tr(
"Select NoData Color" ) );
61 leNoDataValue->setValidator(
new QgsDoubleValidator( std::numeric_limits<double>::lowest(), std::numeric_limits<double>::max(),
this ) );
64 mPixelSelectorTool =
nullptr;
72 pbnAddValuesFromDisplay->setEnabled(
false );
89 expContext = canvas->createExpressionContext();
121 gboxNoDataValue->setEnabled(
false );
122 gboxCustomTransparency->setEnabled(
false );
125 cboxTransparencyBand->setShowNotSetOption(
true, tr(
"None" ) );
126 cboxTransparencyBand->setLayer( mRasterLayer );
133 lblSrcNoDataValue->setText( tr(
"not defined" ) );
140 mSrcNoDataValueCheckBox->setEnabled( enableSrcNoData );
141 lblSrcNoDataValue->setEnabled( enableSrcNoData );
147 mNodataColorButton->setColor( renderer->
nodataColor() );
149 mNodataColorButton->setToNull();
151 mOpacityWidget->setOpacity( renderer->
opacity() );
153 cboxTransparencyBand->setBand( renderer->
alphaBand() );
159 QgsDebugMsgLevel( QStringLiteral(
"noDataRangeList.size = %1" ).arg( noDataRangeList.size() ), 2 );
160 if ( !noDataRangeList.isEmpty() )
163 leNoDataValue->setText( QLocale().toString( v,
'g', 20 ) );
167 leNoDataValue->setText( QString() );
172 leNoDataValue->setText( QString() );
178 populateTransparencyTable( mRasterLayer->
renderer() );
181void QgsRasterTransparencyWidget::transparencyCellTextEdited(
const QString &text )
186 switch ( mCurrentMode )
188 case Mode::SingleBand:
190 QLineEdit *lineEdit = qobject_cast<QLineEdit *>( sender() );
195 for (
int r = 0; r < tableTransparency->rowCount(); r++ )
197 for (
int c = 0;
c < tableTransparency->columnCount();
c++ )
199 if ( tableTransparency->cellWidget( r,
c ) == sender() )
209 QgsDebugMsgLevel( QStringLiteral(
"row = %1 column =%2" ).arg( row ).arg( column ), 2 );
211 if ( column ==
static_cast<int>( SingleBandTableColumns::From ) )
213 QLineEdit *toLineEdit =
dynamic_cast<QLineEdit *
>( tableTransparency->cellWidget( row,
static_cast<int>( SingleBandTableColumns::To ) ) );
217 const bool toChanged = mTransparencyToEdited.value( row );
221 toLineEdit->setText( lineEdit->text() );
224 else if ( column ==
static_cast<int>( SingleBandTableColumns::To ) )
226 setTransparencyToEdited( row );
238void QgsRasterTransparencyWidget::pbnAddValuesFromDisplay_clicked()
240 if ( mMapCanvas && mPixelSelectorTool )
246void QgsRasterTransparencyWidget::pbnAddValuesManually_clicked()
254 tableTransparency->insertRow( tableTransparency->rowCount() );
257 switch ( mCurrentMode )
259 case Mode::SingleBand:
268 for (
int i = 0; i < n; i++ )
270 setTransparencyCell( tableTransparency->rowCount() - 1, i, std::numeric_limits<double>::quiet_NaN() );
273 switch ( mCurrentMode )
275 case Mode::SingleBand:
276 setTransparencyCell( tableTransparency->rowCount() - 1,
static_cast<int>( SingleBandTableColumns::Opacity ), 100 );
280 setTransparencyCell( tableTransparency->rowCount() - 1,
static_cast<int>( RgbBandTableColumns::Opacity ), 100 );
288void QgsRasterTransparencyWidget::pbnDefaultValues_clicked()
296 const int nBands = r->
usesBands().size();
298 setupTransparencyTable( nBands );
304void QgsRasterTransparencyWidget::pbnExportTransparentPixelValues_clicked()
307 const QString myLastDir = myQSettings.
value( QStringLiteral(
"lastRasterFileFilterDir" ), QDir::homePath() ).toString();
308 QString myFileName = QFileDialog::getSaveFileName(
this, tr(
"Save Pixel Values as File" ), myLastDir, tr(
"Textfile" ) +
" (*.txt)" );
309 if ( !myFileName.isEmpty() )
311 if ( !myFileName.endsWith( QLatin1String(
".txt" ), Qt::CaseInsensitive ) )
313 myFileName = myFileName +
".txt";
316 QFile myOutputFile( myFileName );
317 if ( myOutputFile.open( QFile::WriteOnly | QIODevice::Truncate ) )
319 QTextStream myOutputStream( &myOutputFile );
320 myOutputStream <<
"# " << tr(
"QGIS Generated Transparent Pixel Value Export File" ) <<
'\n';
321 switch ( mCurrentMode )
325 myOutputStream <<
"#\n#\n# " << tr(
"Red" ) <<
"\t" << tr(
"Green" ) <<
"\t" << tr(
"Blue" ) <<
"\t" << tr(
"Percent Transparent" );
326 for (
int myTableRunner = 0; myTableRunner < tableTransparency->rowCount(); myTableRunner++ )
328 myOutputStream <<
'\n'
329 << QString::number( transparencyCellValue( myTableRunner,
static_cast<int>( RgbBandTableColumns::Red ) ) ) <<
"\t"
330 << QString::number( transparencyCellValue( myTableRunner,
static_cast<int>( RgbBandTableColumns::Green ) ) ) <<
"\t"
331 << QString::number( transparencyCellValue( myTableRunner,
static_cast<int>( RgbBandTableColumns::Blue ) ) ) <<
"\t"
332 << QString::number( transparencyCellValue( myTableRunner,
static_cast<int>( RgbBandTableColumns::Opacity ) ) );
336 case Mode::SingleBand:
338 myOutputStream <<
"#\n#\n# " << tr(
"Value" ) <<
"\t" << tr(
"Percent Transparent" );
340 for (
int myTableRunner = 0; myTableRunner < tableTransparency->rowCount(); myTableRunner++ )
342 myOutputStream <<
'\n'
343 << QString::number( transparencyCellValue( myTableRunner,
static_cast<int>( SingleBandTableColumns::From ) ) ) <<
"\t"
344 << QString::number( transparencyCellValue( myTableRunner,
static_cast<int>( SingleBandTableColumns::To ) ) ) <<
"\t"
345 << QString::number( transparencyCellValue( myTableRunner,
static_cast<int>( SingleBandTableColumns::Opacity ) ) );
353 QMessageBox::warning(
this, tr(
"Save Pixel Values as File" ), tr(
"Write access denied. Adjust the file permissions and try again.\n\n" ) );
358void QgsRasterTransparencyWidget::pbnImportTransparentPixelValues_clicked()
360 int myLineCounter = 0;
361 bool myImportError =
false;
364 const QString myLastDir = myQSettings.
value( QStringLiteral(
"lastRasterFileFilterDir" ), QDir::homePath() ).toString();
365 const QString myFileName = QFileDialog::getOpenFileName(
this, tr(
"Load Pixel Values from File" ), myLastDir, tr(
"Textfile" ) +
" (*.txt)" );
366 QFile myInputFile( myFileName );
368 const thread_local QRegularExpression sRxWhitespace(
"\\s+" );
370 if ( myInputFile.open( QFile::ReadOnly ) )
372 QTextStream myInputStream( &myInputFile );
374 switch ( mCurrentMode )
378 for (
int myTableRunner = tableTransparency->rowCount() - 1; myTableRunner >= 0; myTableRunner-- )
380 tableTransparency->removeRow( myTableRunner );
383 while ( !myInputStream.atEnd() )
386 myInputLine = myInputStream.readLine();
387 if ( !myInputLine.isEmpty() )
389 if ( !myInputLine.simplified().startsWith(
'#' ) )
391 QStringList myTokens = myInputLine.split( sRxWhitespace, Qt::SkipEmptyParts );
392 if ( myTokens.count() != 4 )
394 myImportError =
true;
395 myBadLines = myBadLines + QString::number( myLineCounter ) +
":\t[" + myInputLine +
"]\n";
399 tableTransparency->insertRow( tableTransparency->rowCount() );
400 setTransparencyCell( tableTransparency->rowCount() - 1,
static_cast<int>( RgbBandTableColumns::Red ), myTokens[0].toDouble() );
401 setTransparencyCell( tableTransparency->rowCount() - 1,
static_cast<int>( RgbBandTableColumns::Green ), myTokens[1].toDouble() );
402 setTransparencyCell( tableTransparency->rowCount() - 1,
static_cast<int>( RgbBandTableColumns::Blue ), myTokens[2].toDouble() );
403 setTransparencyCell( tableTransparency->rowCount() - 1,
static_cast<int>( RgbBandTableColumns::Tolerance ), 0 );
404 setTransparencyCell( tableTransparency->rowCount() - 1,
static_cast<int>( RgbBandTableColumns::Opacity ), myTokens[3].toDouble() );
411 case Mode::SingleBand:
413 for (
int myTableRunner = tableTransparency->rowCount() - 1; myTableRunner >= 0; myTableRunner-- )
415 tableTransparency->removeRow( myTableRunner );
418 while ( !myInputStream.atEnd() )
421 myInputLine = myInputStream.readLine();
422 if ( !myInputLine.isEmpty() )
424 if ( !myInputLine.simplified().startsWith(
'#' ) )
426 QStringList myTokens = myInputLine.split( sRxWhitespace, Qt::SkipEmptyParts );
427 if ( myTokens.count() != 3 && myTokens.count() != 2 )
429 myImportError =
true;
430 myBadLines = myBadLines + QString::number( myLineCounter ) +
":\t[" + myInputLine +
"]\n";
434 if ( myTokens.count() == 2 )
436 myTokens.insert( 1, myTokens[0] );
438 tableTransparency->insertRow( tableTransparency->rowCount() );
440 setTransparencyCell( tableTransparency->rowCount() - 1,
static_cast<int>( SingleBandTableColumns::From ), myTokens[0].toDouble() );
441 setTransparencyCell( tableTransparency->rowCount() - 1,
static_cast<int>( SingleBandTableColumns::To ), myTokens[1].toDouble() );
442 setTransparencyCell( tableTransparency->rowCount() - 1,
static_cast<int>( SingleBandTableColumns::Opacity ), myTokens[2].toDouble() );
453 QMessageBox::warning(
this, tr(
"Load Pixel Values from File" ), tr(
"The following lines contained errors\n\n%1" ).arg( myBadLines ) );
456 else if ( !myFileName.isEmpty() )
458 QMessageBox::warning(
this, tr(
"Load Pixel Values from File" ), tr(
"Read access denied. Adjust the file permissions and try again.\n\n" ) );
465void QgsRasterTransparencyWidget::pbnRemoveSelectedRow_clicked()
467 if ( 0 < tableTransparency->rowCount() )
469 tableTransparency->removeRow( tableTransparency->currentRow() );
485 if ( !leNoDataValue->text().isEmpty() )
487 bool myDoubleOk =
false;
491 const QgsRasterRange myNoDataRange( myNoDataValue, myNoDataValue );
492 myNoDataRangeList << myNoDataRange;
497 for (
int bandNo = 1; bandNo <= provider->
bandCount(); bandNo++ )
507 if ( rasterRenderer )
509 rasterRenderer->
setAlphaBand( cboxTransparencyBand->currentBand() );
514 switch ( mCurrentMode )
518 QVector<QgsRasterTransparency::TransparentThreeValuePixel> myTransparentThreeValuePixelList;
519 myTransparentThreeValuePixelList.reserve( tableTransparency->rowCount() );
520 for (
int myListRunner = 0; myListRunner < tableTransparency->rowCount(); myListRunner++ )
522 const double red = transparencyCellValue( myListRunner,
static_cast<int>( RgbBandTableColumns::Red ) );
523 const double green = transparencyCellValue( myListRunner,
static_cast<int>( RgbBandTableColumns::Green ) );
524 const double blue = transparencyCellValue( myListRunner,
static_cast<int>( RgbBandTableColumns::Blue ) );
525 const double opacity = 1.0 - transparencyCellValue( myListRunner,
static_cast<int>( RgbBandTableColumns::Opacity ) ) / 100.0;
526 const double tolerance = transparencyCellValue( myListRunner,
static_cast<int>( RgbBandTableColumns::Tolerance ) );
527 myTransparentThreeValuePixelList.append(
534 case Mode::SingleBand:
536 QVector<QgsRasterTransparency::TransparentSingleValuePixel> myTransparentSingleValuePixelList;
537 myTransparentSingleValuePixelList.reserve( tableTransparency->rowCount() );
538 for (
int myListRunner = 0; myListRunner < tableTransparency->rowCount(); myListRunner++ )
540 const double min = transparencyCellValue( myListRunner,
static_cast<int>( SingleBandTableColumns::From ) );
541 const double max = transparencyCellValue( myListRunner,
static_cast<int>( SingleBandTableColumns::To ) );
542 const double opacity = 1.0 - transparencyCellValue( myListRunner,
static_cast<int>( SingleBandTableColumns::Opacity ) ) / 100.0;
544 myTransparentSingleValuePixelList.append(
556 rasterRenderer->
setOpacity( mOpacityWidget->opacity() );
562 button->blockSignals(
true );
566 button->blockSignals(
false );
571 const auto propertyOverrideButtons { findChildren<QgsPropertyOverrideButton *>() };
590void QgsRasterTransparencyWidget::updateProperty()
598void QgsRasterTransparencyWidget::pixelSelected(
const QgsPointXY &canvasPoint )
607 if ( mMapCanvas && mPixelSelectorTool && mRasterLayer->
dataProvider() )
616 const int myWidth =
static_cast<int>( mMapCanvas->
extent().
width() / mapUnitsPerPixel );
617 const int myHeight =
static_cast<int>( mMapCanvas->
extent().
height() / mapUnitsPerPixel );
621 const QList<int> bands = renderer->
usesBands();
623 QList<double> values;
624 for (
int i = 0; i < bands.size(); ++i )
626 const int bandNo = bands.value( i );
627 if ( myPixelMap.count( bandNo ) == 1 )
633 const double value = myPixelMap.value( bandNo ).toDouble();
634 QgsDebugMsgLevel( QStringLiteral(
"value = %1" ).arg( value, 0,
'g', 17 ), 2 );
635 values.append( value );
639 tableTransparency->insertRow( tableTransparency->rowCount() );
641 switch ( mCurrentMode )
643 case Mode::SingleBand:
644 setTransparencyCell( tableTransparency->rowCount() - 1,
static_cast<int>( SingleBandTableColumns::From ), values.value( 0 ) );
645 setTransparencyCell( tableTransparency->rowCount() - 1,
static_cast<int>( SingleBandTableColumns::To ), values.value( 0 ) );
646 setTransparencyCell( tableTransparency->rowCount() - 1,
static_cast<int>( SingleBandTableColumns::Opacity ), 100 );
649 setTransparencyCell( tableTransparency->rowCount() - 1,
static_cast<int>( RgbBandTableColumns::Red ), values.value( 0 ) );
650 setTransparencyCell( tableTransparency->rowCount() - 1,
static_cast<int>( RgbBandTableColumns::Green ), values.value( 1 ) );
651 setTransparencyCell( tableTransparency->rowCount() - 1,
static_cast<int>( RgbBandTableColumns::Blue ), values.value( 2 ) );
652 setTransparencyCell( tableTransparency->rowCount() - 1,
static_cast<int>( RgbBandTableColumns::Tolerance ), 0 );
653 setTransparencyCell( tableTransparency->rowCount() - 1,
static_cast<int>( RgbBandTableColumns::Opacity ), 100 );
662void QgsRasterTransparencyWidget::populateTransparencyTable(
QgsRasterRenderer *renderer )
674 const int nBands = renderer->
usesBands().size();
675 setupTransparencyTable( nBands );
678 if ( !rasterTransparency )
683 switch ( mCurrentMode )
685 case Mode::SingleBand:
688 for (
int i = 0; i < pixelList.size(); ++i )
690 tableTransparency->insertRow( i );
691 setTransparencyCell( i,
static_cast<int>( SingleBandTableColumns::From ), pixelList[i].min );
692 setTransparencyCell( i,
static_cast<int>( SingleBandTableColumns::To ), pixelList[i].max );
693 setTransparencyCell( i,
static_cast<int>( SingleBandTableColumns::Opacity ), 100 * ( 1 - pixelList[i].opacity ) );
695 if ( pixelList[i].min != pixelList[i].max )
697 setTransparencyToEdited( i );
705 for (
int i = 0; i < pixelList.size(); ++i )
707 tableTransparency->insertRow( i );
708 setTransparencyCell( i,
static_cast<int>( RgbBandTableColumns::Red ), pixelList[i].red );
709 setTransparencyCell( i,
static_cast<int>( RgbBandTableColumns::Green ), pixelList[i].green );
710 setTransparencyCell( i,
static_cast<int>( RgbBandTableColumns::Blue ), pixelList[i].blue );
711 setTransparencyCell( i,
static_cast<int>( RgbBandTableColumns::Opacity ), 100 * ( 1 - pixelList[i].opacity ) );
714 setTransparencyCell( i,
static_cast<int>( RgbBandTableColumns::Tolerance ), !
qgsDoubleNear( pixelList[i].fuzzyToleranceRed, 0 ) ? pixelList[i].fuzzyToleranceRed : 0 );
720 tableTransparency->resizeColumnsToContents();
721 tableTransparency->resizeRowsToContents();
724void QgsRasterTransparencyWidget::setupTransparencyTable(
int nBands )
726 tableTransparency->clear();
727 tableTransparency->setColumnCount( 0 );
728 tableTransparency->setRowCount( 0 );
729 mTransparencyToEdited.clear();
733 mCurrentMode = Mode::RgbBands;
734 tableTransparency->setColumnCount(
static_cast<int>( RgbBandTableColumns::ColumnCount ) );
735 tableTransparency->setHorizontalHeaderItem(
static_cast<int>( RgbBandTableColumns::Red ),
new QTableWidgetItem( tr(
"Red" ) ) );
736 tableTransparency->setHorizontalHeaderItem(
static_cast<int>( RgbBandTableColumns::Green ),
new QTableWidgetItem( tr(
"Green" ) ) );
737 tableTransparency->setHorizontalHeaderItem(
static_cast<int>( RgbBandTableColumns::Blue ),
new QTableWidgetItem( tr(
"Blue" ) ) );
738 tableTransparency->setHorizontalHeaderItem(
static_cast<int>( RgbBandTableColumns::Tolerance ),
new QTableWidgetItem( tr(
"Tolerance" ) ) );
739 tableTransparency->setHorizontalHeaderItem(
static_cast<int>( RgbBandTableColumns::Opacity ),
new QTableWidgetItem( tr(
"Percent Transparent" ) ) );
743 mCurrentMode = Mode::SingleBand;
744 tableTransparency->setColumnCount(
static_cast<int>( SingleBandTableColumns::ColumnCount ) );
745 tableTransparency->setHorizontalHeaderItem(
static_cast<int>( SingleBandTableColumns::From ),
new QTableWidgetItem( tr(
"From" ) ) );
746 tableTransparency->setHorizontalHeaderItem(
static_cast<int>( SingleBandTableColumns::To ),
new QTableWidgetItem( tr(
"To" ) ) );
747 tableTransparency->setHorizontalHeaderItem(
static_cast<int>( SingleBandTableColumns::Opacity ),
new QTableWidgetItem( tr(
"Percent Transparent" ) ) );
751void QgsRasterTransparencyWidget::setTransparencyCell(
int row,
int column,
double value )
753 QgsDebugMsgLevel( QStringLiteral(
"value = %1" ).arg( value, 0,
'g', 17 ), 2 );
758 QLineEdit *lineEdit =
new QLineEdit();
759 lineEdit->setFrame(
false );
761 lineEdit->setContentsMargins( 1, 1, 1, 1 );
763 if ( column == tableTransparency->columnCount() - 1 )
767 lineEdit->setValidator(
new QIntValidator(
nullptr ) );
768 lineEdit->setText( QString::number(
static_cast<int>( value ) ) );
780 if ( !std::isnan( value ) )
783 valueString = QLocale().toString( v );
787 lineEdit->setValidator(
new QIntValidator(
nullptr ) );
788 if ( !std::isnan( value ) )
790 valueString = QString::number(
static_cast<int>( value ) );
794 lineEdit->setText( valueString );
797 tableTransparency->setCellWidget( row, column, lineEdit );
798 adjustTransparencyCellWidth( row, column );
800 if ( mCurrentMode == Mode::SingleBand && ( column ==
static_cast<int>( SingleBandTableColumns::From ) || column ==
static_cast<int>( SingleBandTableColumns::To ) ) )
802 connect( lineEdit, &QLineEdit::textEdited,
this, &QgsRasterTransparencyWidget::transparencyCellTextEdited );
808void QgsRasterTransparencyWidget::adjustTransparencyCellWidth(
int row,
int column )
810 QLineEdit *lineEdit =
dynamic_cast<QLineEdit *
>( tableTransparency->cellWidget( row, column ) );
814 int width = std::max( lineEdit->fontMetrics().boundingRect( lineEdit->text() ).width() + 10, 100 );
815 width = std::max( width, tableTransparency->columnWidth( column ) );
817 lineEdit->setFixedWidth( width );
820void QgsRasterTransparencyWidget::setTransparencyToEdited(
int row )
822 if ( row >= mTransparencyToEdited.size() )
824 mTransparencyToEdited.resize( row + 1 );
826 mTransparencyToEdited[row] =
true;
829double QgsRasterTransparencyWidget::transparencyCellValue(
int row,
int column )
831 QLineEdit *lineEdit =
dynamic_cast<QLineEdit *
>( tableTransparency->cellWidget( row, column ) );
832 if ( !lineEdit || lineEdit->text().isEmpty() )
834 return std::numeric_limits<double>::quiet_NaN();
841 return mPixelSelectorTool;
@ Float32
Thirty two bit floating point (float)
@ ARGB32_Premultiplied
Color, alpha, red, green, blue, 4 bytes the same as QImage::Format_ARGB32_Premultiplied.
@ ARGB32
Color, alpha, red, green, blue, 4 bytes the same as QImage::Format_ARGB32.
@ Float64
Sixty four bit floating point (double)
@ Value
Numerical pixel value.
QgsDoubleValidator is a QLineEdit Validator that combines QDoubleValidator and QRegularExpressionVali...
static double toDouble(const QString &input, bool *ok)
Converts input string to double value.
Single scope for storing variables and functions for use within a QgsExpressionContext.
static QgsExpressionContextScope * projectScope(const QgsProject *project)
Creates a new scope which contains variables and functions relating to a QGIS project.
static QgsExpressionContextScope * atlasScope(const QgsLayoutAtlas *atlas)
Creates a new scope which contains variables and functions relating to a QgsLayoutAtlas.
static QgsExpressionContextScope * mapSettingsScope(const QgsMapSettings &mapSettings)
Creates a new scope which contains variables and functions relating to a QgsMapSettings object.
static QgsExpressionContextScope * layerScope(const QgsMapLayer *layer)
Creates a new scope which contains variables and functions relating to a QgsMapLayer.
static QgsExpressionContextScope * globalScope()
Creates a new scope which contains variables and functions relating to the global QGIS context.
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
void appendScope(QgsExpressionContextScope *scope)
Appends a scope to the end of the context.
Map canvas is a class for displaying all GIS data types on a canvas.
void unsetMapTool(QgsMapTool *mapTool)
Unset the current map tool or last non zoom tool.
void setMapTool(QgsMapTool *mapTool, bool clean=false)
Sets the map tool currently being used on the canvas.
double mapUnitsPerPixel() const
Returns the mapUnitsPerPixel (map units per pixel) for the canvas.
const QgsMapSettings & mapSettings() const
Gets access to properties used for map rendering.
QgsRectangle extent() const
Returns the current zoom extent of the map canvas.
The QgsMapSettings class contains configuration for rendering of the map.
QgsPointXY mapToLayerCoordinates(const QgsMapLayer *layer, QgsPointXY point) const
transform point coordinates from output CRS to layer's CRS
A class to represent a 2D point.
static QgsProject * instance()
Returns the QgsProject singleton instance.
void setProperty(int key, const QgsProperty &property)
Adds a property to the collection and takes ownership of it.
QgsProperty property(int key) const final
Returns a matching property from the collection, if one exists.
void bandChanged(int band)
Emitted when the currently selected band changes.
static QString printValue(double value, bool localized=false)
Print double value with all necessary significant digits.
Base class for raster data providers.
virtual bool sourceHasNoDataValue(int bandNo) const
Returns true if source band has no data value.
virtual bool useSourceNoDataValue(int bandNo) const
Returns the source nodata value usage.
Qgis::DataType sourceDataType(int bandNo) const override=0
Returns source data type for the band specified by number, source data type may be shorter than dataT...
virtual void setUseSourceNoDataValue(int bandNo, bool use)
Sets the source nodata value usage.
virtual double sourceNoDataValue(int bandNo) const
Value representing no data value.
Qgis::DataType dataType(int bandNo) const override=0
Returns data type for the band specified by number.
virtual QgsRasterIdentifyResult identify(const QgsPointXY &point, Qgis::RasterIdentifyFormat format, const QgsRectangle &boundingBox=QgsRectangle(), int width=0, int height=0, int dpi=96)
Identify raster value(s) found on the point position.
virtual QgsRasterRangeList userNoDataValues(int bandNo) const
Returns a list of user no data value ranges.
virtual void setUserNoDataValue(int bandNo, const QgsRasterRangeList &noData)
QMap< int, QVariant > results() const
Returns the identify results.
virtual int bandCount() const =0
Gets number of bands.
Represents a raster layer.
QgsRasterPipe * pipe()
Returns the raster pipe.
QgsRasterRenderer * renderer() const
Returns the raster's renderer.
QgsRasterDataProvider * dataProvider() override
Returns the source data provider.
QgsPropertyCollection & dataDefinedProperties()
Returns a reference to the pipe's property collection, used for data defined overrides.
Property
Data definable properties.
@ RendererOpacity
Raster renderer global opacity.
static QgsPropertiesDefinition propertyDefinitions()
Returns the definitions for data defined properties available for use in raster pipes.
void setDataDefinedProperties(const QgsPropertyCollection &collection)
Sets the pipe's property collection, used for data defined overrides.
Raster values range container.
Raster renderer pipe that applies colors to a raster.
QColor nodataColor() const
Returns the color to use for shading nodata pixels.
const QgsRasterTransparency * rasterTransparency() const
double opacity() const
Returns the opacity for the renderer, where opacity is a value between 0 (totally transparent) and 1....
virtual QList< int > usesBands() const
Returns a list of band numbers used by the renderer.
void setAlphaBand(int band)
void setOpacity(double opacity)
Sets the opacity for the renderer, where opacity is a value between 0 (totally transparent) and 1....
void setRasterTransparency(QgsRasterTransparency *t)
void setNodataColor(const QColor &color)
Sets the color to use for shading nodata pixels.
Defines the list of pixel values to be considered as transparent or semi transparent when rendering r...
void setTransparentSingleValuePixelList(const QVector< QgsRasterTransparency::TransparentSingleValuePixel > &newList)
Sets the transparent single value pixel list, replacing the whole existing list.
QVector< QgsRasterTransparency::TransparentSingleValuePixel > transparentSingleValuePixelList() const
Returns the transparent single value pixel list.
void setTransparentThreeValuePixelList(const QVector< QgsRasterTransparency::TransparentThreeValuePixel > &newList)
Sets the transparent three value pixel list, replacing the whole existing list.
QVector< QgsRasterTransparency::TransparentThreeValuePixel > transparentThreeValuePixelList() const
Returns the transparent three value pixel list.
A rectangle specified with double values.
This class is a composition of two QSettings instances:
QVariant value(const QString &key, const QVariant &defaultValue=QVariant(), Section section=NoSection) const
Returns the value for setting key.
Contains settings which reflect the context in which a symbol (or renderer) widget is shown,...
QList< QgsExpressionContextScope > additionalExpressionContextScopes() const
Returns the list of additional expression context scopes to show as available within the layer.
QgsMapCanvas * mapCanvas() const
Returns the map canvas associated with the widget.
static bool isNull(const QVariant &variant, bool silenceNullWarnings=false)
Returns true if the specified variant should be considered a NULL value.
As part of the API refactoring and improvements which landed in the Processing API was substantially reworked from the x version This was done in order to allow much of the underlying Processing framework to be ported into c
bool qgsDoubleNear(double a, double b, double epsilon=4 *std::numeric_limits< double >::epsilon())
Compare two doubles (but allow some difference)
QgsSignalBlocker< Object > whileBlocking(Object *object)
Temporarily blocks signals from a QObject while calling a single method from the object.
#define QgsDebugMsgLevel(str, level)
QList< QgsRasterRange > QgsRasterRangeList
Defines the transparency for a range of single-band pixel values.
Defines the transparency for a RGB pixel value.