QgsRasterRenderer* QgsSingleBandPseudoColorRenderer::create( const QDomElement& elem, QgsRasterInterface* input ) { if ( elem.isNull() ) { return nullptr; } int band = elem.attribute( QStringLiteral( "band" ), QStringLiteral( "-1" ) ).toInt(); QgsRasterShader* shader = nullptr; QDomElement rasterShaderElem = elem.firstChildElement( QStringLiteral( "rastershader" ) ); if ( !rasterShaderElem.isNull() ) { shader = new QgsRasterShader(); shader->readXml( rasterShaderElem ); } QgsSingleBandPseudoColorRenderer* r = new QgsSingleBandPseudoColorRenderer( input, band, shader ); r->readXml( elem ); // TODO: add _readXML in superclass? r->setClassificationMin( elem.attribute( QStringLiteral( "classificationMin" ), QStringLiteral( "NaN" ) ).toDouble() ); r->setClassificationMax( elem.attribute( QStringLiteral( "classificationMax" ), QStringLiteral( "NaN" ) ).toDouble() ); r->setClassificationMinMaxOrigin( QgsRasterRenderer::minMaxOriginFromName( elem.attribute( QStringLiteral( "classificationMinMaxOrigin" ), QStringLiteral( "Unknown" ) ) ) ); return r; }
QgsRasterRenderer* QgsSingleBandPseudoColorRendererWidget::renderer() { QgsRasterShader* rasterShader = new QgsRasterShader(); QgsColorRampShader* colorRampShader = new QgsColorRampShader(); colorRampShader->setClip( mClipCheckBox->isChecked() ); //iterate through mColormapTreeWidget and set colormap info of layer QList<QgsColorRampShader::ColorRampItem> colorRampItems; int topLevelItemCount = mColormapTreeWidget->topLevelItemCount(); QTreeWidgetItem* currentItem; for ( int i = 0; i < topLevelItemCount; ++i ) { currentItem = mColormapTreeWidget->topLevelItem( i ); if ( !currentItem ) { continue; } QgsColorRampShader::ColorRampItem newColorRampItem; newColorRampItem.value = currentItem->text( 0 ).toDouble(); newColorRampItem.color = currentItem->background( 1 ).color(); newColorRampItem.label = currentItem->text( 2 ); colorRampItems.append( newColorRampItem ); } // sort the shader items qSort( colorRampItems ); colorRampShader->setColorRampItemList( colorRampItems ); if ( mColorInterpolationComboBox->currentText() == tr( "Linear" ) ) { colorRampShader->setColorRampType( QgsColorRampShader::INTERPOLATED ); } else if ( mColorInterpolationComboBox->currentText() == tr( "Discrete" ) ) { colorRampShader->setColorRampType( QgsColorRampShader::DISCRETE ); } else { colorRampShader->setColorRampType( QgsColorRampShader::EXACT ); } rasterShader->setRasterShaderFunction( colorRampShader ); int bandNumber = mBandComboBox->itemData( mBandComboBox->currentIndex() ).toInt(); QgsSingleBandPseudoColorRenderer *renderer = new QgsSingleBandPseudoColorRenderer( mRasterLayer->dataProvider(), bandNumber, rasterShader ); renderer->setClassificationMin( lineEditValue( mMinLineEdit ) ); renderer->setClassificationMax( lineEditValue( mMaxLineEdit ) ); renderer->setClassificationMinMaxOrigin( mMinMaxOrigin ); return renderer; }