void QgsSingleBandPseudoColorRendererWidget::on_mColorRampComboBox_currentIndexChanged( int index ) { Q_UNUSED( index ); QSettings settings; settings.setValue( "/Raster/defaultPalette", mColorRampComboBox->currentText() ); QgsVectorColorRampV2* ramp = mColorRampComboBox->currentColorRamp(); if ( !ramp ) return; bool enableContinuous = ( ramp->count() > 0 ); mClassificationModeComboBox->setEnabled( enableContinuous ); if ( !enableContinuous ) { mClassificationModeComboBox->setCurrentIndex( mClassificationModeComboBox->findData( EqualInterval ) ); } }
void QgsSingleBandPseudoColorRendererWidget::on_mClassifyButton_clicked() { int bandComboIndex = mBandComboBox->currentIndex(); if ( bandComboIndex == -1 || !mRasterLayer ) { return; } //int bandNr = mBandComboBox->itemData( bandComboIndex ).toInt(); //QgsRasterBandStats myRasterBandStats = mRasterLayer->dataProvider()->bandStatistics( bandNr ); int numberOfEntries = 0; QList<double> entryValues; QList<QColor> entryColors; double min = lineEditValue( mMinLineEdit ); double max = lineEditValue( mMaxLineEdit ); QgsVectorColorRampV2* colorRamp = mColorRampComboBox->currentColorRamp(); if ( mClassificationModeComboBox->itemData( mClassificationModeComboBox->currentIndex() ).toInt() == Continuous ) { if ( colorRamp ) { numberOfEntries = colorRamp->count(); entryValues.reserve( colorRamp->count() ); for ( int i = 0; i < colorRamp->count(); ++i ) { double value = colorRamp->value( i ); entryValues.push_back( min + value * ( max - min ) ); } } } else // EqualInterval { numberOfEntries = mNumberOfEntriesSpinBox->value(); //double currentValue = myRasterBandStats.minimumValue; double currentValue = min; double intervalDiff; if ( numberOfEntries > 1 ) { //because the highest value is also an entry, there are (numberOfEntries - 1) //intervals //intervalDiff = ( myRasterBandStats.maximumValue - myRasterBandStats.minimumValue ) / intervalDiff = ( max - min ) / ( numberOfEntries - 1 ); } else { //intervalDiff = myRasterBandStats.maximumValue - myRasterBandStats.minimumValue; intervalDiff = max - min; } entryValues.reserve( numberOfEntries ); for ( int i = 0; i < numberOfEntries; ++i ) { entryValues.push_back( currentValue ); currentValue += intervalDiff; } } #if 0 //hard code color range from blue -> red for now. Allow choice of ramps in future int colorDiff = 0; if ( numberOfEntries != 0 ) { colorDiff = ( int )( 255 / numberOfEntries ); } for ( int i = 0; i < numberOfEntries; ++i ) { QColor currentColor; currentColor.setRgb( colorDiff*i, 0, 255 - colorDiff * i ); entryColors.push_back( currentColor ); } #endif if ( ! colorRamp ) { //hard code color range from blue -> red (previous default) int colorDiff = 0; if ( numberOfEntries != 0 ) { colorDiff = ( int )( 255 / numberOfEntries ); } entryColors.reserve( numberOfEntries ); for ( int i = 0; i < numberOfEntries; ++i ) { QColor currentColor; int idx = mInvertCheckBox->isChecked() ? numberOfEntries - i - 1 : i; currentColor.setRgb( colorDiff*idx, 0, 255 - colorDiff * idx ); entryColors.push_back( currentColor ); } } else { entryColors.reserve( numberOfEntries ); for ( int i = 0; i < numberOfEntries; ++i ) { int idx = mInvertCheckBox->isChecked() ? numberOfEntries - i - 1 : i; entryColors.push_back( colorRamp->color((( double ) idx ) / ( numberOfEntries - 1 ) ) ); } } mColormapTreeWidget->clear(); QList<double>::const_iterator value_it = entryValues.begin(); QList<QColor>::const_iterator color_it = entryColors.begin(); for ( ; value_it != entryValues.end(); ++value_it, ++color_it ) { QTreeWidgetItem* newItem = new QTreeWidgetItem( mColormapTreeWidget ); newItem->setText( 0, QString::number( *value_it, 'f' ) ); newItem->setBackground( 1, QBrush( *color_it ) ); newItem->setText( 2, QString::number( *value_it, 'f' ) ); newItem->setFlags( Qt::ItemIsEnabled | Qt::ItemIsEditable | Qt::ItemIsSelectable ); } }