34static QColor _interpolateRgb(
const QColor &c1,
const QColor &c2,
const double value,
const Qgis::AngularDirection )
36 if ( std::isnan( value ) )
39 const qreal red1 = c1.redF();
40 const qreal red2 = c2.redF();
41 const qreal red = ( red1 + value * ( red2 - red1 ) );
43 const qreal green1 = c1.greenF();
44 const qreal green2 = c2.greenF();
45 const qreal green = ( green1 + value * ( green2 - green1 ) );
47 const qreal blue1 = c1.blueF();
48 const qreal blue2 = c2.blueF();
49 const qreal blue = ( blue1 + value * ( blue2 - blue1 ) );
51 const qreal alpha1 = c1.alphaF();
52 const qreal alpha2 = c2.alphaF();
53 const qreal alpha = ( alpha1 + value * ( alpha2 - alpha1 ) );
55 return QColor::fromRgbF( red, green, blue, alpha );
58static QColor _interpolateHsv(
const QColor &c1,
const QColor &c2,
const double value,
const Qgis::AngularDirection direction )
60 if ( std::isnan( value ) )
63 qreal hue1 = c1.hsvHueF();
64 qreal hue2 = c2.hsvHueF();
68 else if ( hue2 == -1 )
79 hue = hue1 - value * ( hue1 - hue2 );
92 hue = hue1 + value * ( hue2 - hue1 );
100 const qreal saturation1 = c1.hsvSaturationF();
101 const qreal saturation2 = c2.hsvSaturationF();
102 const qreal saturation = ( saturation1 + value * ( saturation2 - saturation1 ) );
104 const qreal value1 = c1.valueF();
105 const qreal value2 = c2.valueF();
106 const qreal valueOut = ( value1 + value * ( value2 - value1 ) );
108 const qreal alpha1 = c1.alphaF();
109 const qreal alpha2 = c2.alphaF();
110 const qreal alpha = ( alpha1 + value * ( alpha2 - alpha1 ) );
112 return QColor::fromHsvF( hue > 1 ? hue - 1 : hue, saturation, valueOut, alpha );
115static QColor _interpolateHsl(
const QColor &c1,
const QColor &c2,
const double value,
const Qgis::AngularDirection direction )
117 if ( std::isnan( value ) )
120 qreal hue1 = c1.hslHueF();
121 qreal hue2 = c2.hslHueF();
125 else if ( hue2 == -1 )
136 hue = hue1 - value * ( hue1 - hue2 );
149 hue = hue1 + value * ( hue2 - hue1 );
157 const qreal saturation1 = c1.hslSaturationF();
158 const qreal saturation2 = c2.hslSaturationF();
159 const qreal saturation = ( saturation1 + value * ( saturation2 - saturation1 ) );
161 const qreal lightness1 = c1.lightnessF();
162 const qreal lightness2 = c2.lightnessF();
163 const qreal lightness = ( lightness1 + value * ( lightness2 - lightness1 ) );
165 const qreal alpha1 = c1.alphaF();
166 const qreal alpha2 = c2.alphaF();
167 const qreal alpha = ( alpha1 + value * ( alpha2 - alpha1 ) );
169 return QColor::fromHslF( hue > 1 ? hue - 1 : hue, saturation, lightness, alpha );
178 , mFunc( _interpolateRgb )
187 switch ( mColorSpec )
190 case QColor::Invalid:
191 case QColor::ExtendedRgb:
193 mFunc = _interpolateRgb;
196 mFunc = _interpolateHsv;
199 mFunc = _interpolateHsl;
208 , mDiscrete( discrete )
210 , mFunc( _interpolateRgb )
219 if ( props.contains( QStringLiteral(
"color1" ) ) )
221 if ( props.contains( QStringLiteral(
"color2" ) ) )
226 if ( props.contains( QStringLiteral(
"stops" ) ) )
228 const auto constSplit = props[QStringLiteral(
"stops" )].toString().split(
':' );
229 for (
const QString &stop : constSplit )
231 const QStringList parts = stop.split(
';' );
232 if ( parts.size() != 2 && parts.size() != 4 )
238 if ( parts.size() == 4 )
240 if ( parts.at( 2 ).compare( QLatin1String(
"rgb" ) ) == 0 )
241 stops.last().setColorSpec( QColor::Spec::Rgb );
242 else if ( parts.at( 2 ).compare( QLatin1String(
"hsv" ) ) == 0 )
243 stops.last().setColorSpec( QColor::Spec::Hsv );
244 else if ( parts.at( 2 ).compare( QLatin1String(
"hsl" ) ) == 0 )
245 stops.last().setColorSpec( QColor::Spec::Hsl );
247 if ( parts.at( 3 ).compare( QLatin1String(
"cw" ) ) == 0 )
249 else if ( parts.at( 3 ).compare( QLatin1String(
"ccw" ) ) == 0 )
256 bool discrete =
false;
257 if ( props.contains( QStringLiteral(
"discrete" ) ) )
259 if ( props[QStringLiteral(
"discrete" )] == QLatin1String(
"1" ) )
265 for ( QVariantMap::const_iterator it = props.constBegin();
266 it != props.constEnd(); ++it )
268 if ( it.key().startsWith( QLatin1String(
"info_" ) ) )
269 info[ it.key().mid( 5 )] = it.value().toString();
275 if ( props.contains( QStringLiteral(
"spec" ) ) )
277 const QString spec = props.value( QStringLiteral(
"spec" ) ).toString().trimmed();
278 if ( spec.compare( QLatin1String(
"rgb" ) ) == 0 )
280 else if ( spec.compare( QLatin1String(
"hsv" ) ) == 0 )
282 else if ( spec.compare( QLatin1String(
"hsl" ) ) == 0 )
286 if ( props.contains( QStringLiteral(
"direction" ) ) )
288 const QString
direction = props.value( QStringLiteral(
"direction" ) ).toString().trimmed();
289 if (
direction.compare( QLatin1String(
"ccw" ) ) == 0 )
291 else if (
direction.compare( QLatin1String(
"cw" ) ) == 0 )
304 else if ( index >=
mStops.size() + 1 )
310 return mStops[index - 1].offset;
324 else if (
mStops.isEmpty() )
333 double lower = 0, upper = 0;
335 for ( QgsGradientStopsList::const_iterator it =
mStops.begin(); it !=
mStops.end(); ++it )
337 if ( it->offset >
value )
345 return qgsDoubleNear( upper, lower ) ? c1 : it->mFunc( c1, c2, (
value - lower ) / ( upper - lower ), it->mDirection );
368 newStops.reserve(
mStops.size() );
374 for (
int k =
mStops.size() - 1; k >= 1; k-- )
385 for (
int k =
mStops.size() - 1; k >= 0; k-- )
401 for (
int i = 1, j =
mStops.size() - 1; i <
mStops.size(); ++i, --j )
403 newStops[i].setColorSpec(
mStops.at( j ).colorSpec() );
431 lst.reserve(
mStops.size() );
435 stop.colorSpec() == QColor::Rgb ? QStringLiteral(
"rgb" )
436 : stop.colorSpec() == QColor::Hsv ? QStringLiteral(
"hsv" )
437 : stop.colorSpec() == QColor::Hsl ? QStringLiteral(
"hsl" ) : QString(),
440 map[QStringLiteral(
"stops" )] = lst.join( QLatin1Char(
':' ) );
443 map[QStringLiteral(
"discrete" )] =
mDiscrete ?
"1" :
"0";
445 for ( QgsStringMap::const_iterator it =
mInfo.constBegin();
446 it !=
mInfo.constEnd(); ++it )
448 map[
"info_" + it.key()] = it.value();
454 map[QStringLiteral(
"spec" ) ] = QStringLiteral(
"rgb" );
457 map[QStringLiteral(
"spec" ) ] = QStringLiteral(
"hsv" );
460 map[QStringLiteral(
"spec" ) ] = QStringLiteral(
"hsl" );
463 case QColor::Invalid:
464 case QColor::ExtendedRgb:
471 map[QStringLiteral(
"direction" ) ] = QStringLiteral(
"cw" );
474 map[QStringLiteral(
"direction" ) ] = QStringLiteral(
"ccw" );
478 map[QStringLiteral(
"rampType" )] =
type();
492 int numStops =
mStops.count() + 2;
494 for ( QgsGradientStopsList::const_iterator it =
mStops.constBegin();
495 it !=
mStops.constEnd(); ++it )
497 newStops.append(
QgsGradientStop(
static_cast< double >( i ) / numStops, it->color ) );
498 if ( i == numStops - 1 )
508 int numStops =
mStops.count() + 2;
510 for ( QgsGradientStopsList::const_iterator it =
mStops.constBegin();
511 it !=
mStops.constEnd(); ++it )
513 newStops.append(
QgsGradientStop(
static_cast< double >( i ) / ( numStops - 2 ), it->color ) );
514 if ( i == numStops - 3 )
546 gradient->setColorAt( 0,
color1 );
547 gradient->setColorAt( 1,
color2 );
549 double lastOffset = 0;
553 QColor rampColor = stop.color;
556 rampColor.setAlpha( rampColor.alpha() * opacity );
558 gradient->setColorAt( stop.offset, rampColor );
560 if ( stop.colorSpec() != QColor::Rgb )
564 for (
double offset = lastOffset + 0.05; offset < stop.offset; offset += 0.05 )
566 QColor midColor =
color( offset );
569 midColor.setAlpha( midColor.alpha() * opacity );
571 gradient->setColorAt( offset, midColor );
574 lastOffset = stop.offset;
579 for (
double offset = lastOffset + 0.05; offset < 1; offset += 0.05 )
581 QColor midColor =
color( offset );
584 midColor.setAlpha( midColor.alpha() * opacity );
586 gradient->setColorAt( offset, midColor );
597 case QColor::Invalid:
598 case QColor::ExtendedRgb:
600 mFunc = _interpolateRgb;
603 mFunc = _interpolateHsv;
606 mFunc = _interpolateHsl;
616 int satMin,
int satMax,
int valMin,
int valMax )
618 , mHueMin( hueMin ), mHueMax( hueMax )
619 , mSatMin( satMin ), mSatMax( satMax )
620 , mValMin( valMin ), mValMax( valMax )
632 if ( props.contains( QStringLiteral(
"count" ) ) )
count = props[QStringLiteral(
"count" )].toInt();
633 if ( props.contains( QStringLiteral(
"hueMin" ) ) )
hueMin = props[QStringLiteral(
"hueMin" )].toInt();
634 if ( props.contains( QStringLiteral(
"hueMax" ) ) )
hueMax = props[QStringLiteral(
"hueMax" )].toInt();
635 if ( props.contains( QStringLiteral(
"satMin" ) ) )
satMin = props[QStringLiteral(
"satMin" )].toInt();
636 if ( props.contains( QStringLiteral(
"satMax" ) ) )
satMax = props[QStringLiteral(
"satMax" )].toInt();
637 if ( props.contains( QStringLiteral(
"valMin" ) ) )
valMin = props[QStringLiteral(
"valMin" )].toInt();
638 if ( props.contains( QStringLiteral(
"valMax" ) ) )
valMax = props[QStringLiteral(
"valMax" )].toInt();
647 return static_cast< double >( index ) / (
mColors.size() - 1 );
652 if ( value < 0 || value > 1 )
655 int colorCnt =
mColors.count();
656 int colorIdx = std::min(
static_cast< int >(
value * colorCnt ), colorCnt - 1 );
658 if ( colorIdx >= 0 && colorIdx < colorCnt )
677 map[QStringLiteral(
"count" )] = QString::number(
mCount );
678 map[QStringLiteral(
"hueMin" )] = QString::number(
mHueMin );
679 map[QStringLiteral(
"hueMax" )] = QString::number(
mHueMax );
680 map[QStringLiteral(
"satMin" )] = QString::number(
mSatMin );
681 map[QStringLiteral(
"satMax" )] = QString::number(
mSatMax );
682 map[QStringLiteral(
"valMin" )] = QString::number(
mValMin );
683 map[QStringLiteral(
"valMax" )] = QString::number(
mValMax );
684 map[QStringLiteral(
"rampType" )] =
type();
689 int hueMax,
int hueMin,
int satMax,
int satMin,
int valMax,
int valMin )
692 QList<QColor> colors;
703 double currentHueAngle = 360.0 *
static_cast< double >( std::rand() ) / RAND_MAX;
705 colors.reserve(
count );
706 for (
int i = 0; i <
count; ++i )
711 currentHueAngle += 137.50776;
713 h = std::clamp( std::round( ( std::fmod( currentHueAngle, 360.0 ) / 360.0 ) * ( safeHueMax - safeHueMin ) + safeHueMin ), 0.0, 359.0 );
714 s = std::clamp( (
static_cast<int>( std::rand() ) % ( safeSatMax - safeSatMin + 1 ) ) + safeSatMin, 0, 255 );
715 v = std::clamp( (
static_cast<int>( std::rand() ) % ( safeValMax - safeValMin + 1 ) ) + safeValMin, 0, 255 );
716 colors.append( QColor::fromHsv( h, s, v ) );
745 if ( std::isnan(
value ) )
759 int h =
static_cast< int >( 360.0 * std::rand() / ( RAND_MAX + 1.0 ) );
761 int v = ( std::rand() % ( maxVal - minVal + 1 ) ) + minVal;
762 return QColor::fromHsv( h, s, v );
775 double hueOffset = ( 360.0 * std::rand() / ( RAND_MAX + 1.0 ) );
780 double hueStep = 359.0 / colorCount;
781 double currentHue = hueOffset;
784 for (
int idx = 0; idx < colorCount; ++ idx )
786 int h =
static_cast< int >( std::round( currentHue ) ) % 360;
790 currentHue += hueStep;
794 std::random_device rd;
795 std::mt19937 g( rd() );
811 return QVariantMap();
817 : mSchemeName( schemeName )
819 , mInverted( inverted )
828 bool inverted =
false;
830 if ( props.contains( QStringLiteral(
"schemeName" ) ) )
831 schemeName = props[QStringLiteral(
"schemeName" )].toString();
832 if ( props.contains( QStringLiteral(
"colors" ) ) )
833 colors = props[QStringLiteral(
"colors" )].toInt();
834 if ( props.contains( QStringLiteral(
"inverted" ) ) )
835 inverted = props[QStringLiteral(
"inverted" )].toInt();
846 QList<QColor> tmpPalette;
848 for (
int k =
mPalette.size() - 1; k >= 0; k-- )
870 return static_cast< double >( index ) / (
mPalette.size() - 1 );
875 if (
mPalette.isEmpty() || value < 0 || value > 1 || std::isnan(
value ) )
878 int paletteEntry =
static_cast< int >(
value *
mPalette.count() );
879 if ( paletteEntry >=
mPalette.count() )
880 paletteEntry =
mPalette.count() - 1;
899 map[QStringLiteral(
"colors" )] = QString::number(
mColors );
900 map[QStringLiteral(
"inverted" )] = QString::number(
mInverted );
901 map[QStringLiteral(
"rampType" )] =
type();
910 bool inverted,
bool doLoadFile )
912 , mSchemeName( schemeName )
913 , mVariantName( variantName )
914 , mInverted( inverted )
923 const QString &variantName,
bool inverted,
bool doLoadFile )
925 , mSchemeName( schemeName )
926 , mVariantName( variantName )
927 , mVariantList( variantList )
928 , mInverted( inverted )
942 bool inverted =
false;
944 if ( props.contains( QStringLiteral(
"schemeName" ) ) )
945 schemeName = props[QStringLiteral(
"schemeName" )].toString();
946 if ( props.contains( QStringLiteral(
"variantName" ) ) )
947 variantName = props[QStringLiteral(
"variantName" )].toString();
948 if ( props.contains( QStringLiteral(
"inverted" ) ) )
949 inverted = props[QStringLiteral(
"inverted" )].toInt();
997 info[QStringLiteral(
"cpt-city-license" )] =
"<cpt-city>" + copyingFilename;
1006 map[QStringLiteral(
"schemeName" )] =
mSchemeName;
1008 map[QStringLiteral(
"inverted" )] = QString::number(
mInverted );
1009 map[QStringLiteral(
"rampType" )] =
type();
1055 if ( filename.isNull() )
1063 QMap< double, QPair<QColor, QColor> > colorMap =
1069 QMap<double, QPair<QColor, QColor> >::const_iterator it, prev;
1075 it = prev = colorMap.constBegin();
1076 while ( it != colorMap.constEnd() )
1079 if ( it != colorMap.constBegin() && ( it.value().first != it.value().second ) )
1081 if ( it.value().first == prev.value().second )
1097 it = prev = colorMap.constBegin();
1098 while ( it != colorMap.constEnd() )
1110 ( it.key() != 0.0 && it.key() != 1.0 ) )
1120 if ( !
mStops.isEmpty() &&
mStops.at( 0 ).offset == 0.0 )
1122 if ( !
mStops.isEmpty() &&
mStops.last().offset == 1.0 )
1141 const auto constColors =
colors;
1142 for (
const QColor &
color : constColors )
1147 if ( mColors.isEmpty() )
1148 mColors << qMakePair( QColor( 250, 75, 60 ), QStringLiteral(
"#fa4b3c" ) );
1155 if ( mColors.isEmpty() )
1156 mColors << qMakePair( QColor( 250, 75, 60 ), QStringLiteral(
"#fa4b3c" ) );
1164 QString colorString =
properties.
value( QStringLiteral(
"preset_color_%1" ).arg( i ), QString() ).toString();
1165 QString colorName =
properties.value( QStringLiteral(
"preset_color_name_%1" ).arg( i ), QString() ).toString();
1166 while ( !colorString.isEmpty() )
1170 colorString =
properties.value( QStringLiteral(
"preset_color_%1" ).arg( i ), QString() ).toString();
1171 colorName =
properties.value( QStringLiteral(
"preset_color_name_%1" ).arg( i ), QString() ).toString();
1180 l.reserve( mColors.count() );
1181 for (
int i = 0; i < mColors.count(); ++i )
1183 l << mColors.at( i ).first;
1190 if ( mColors.empty() )
1192 return static_cast< double >( index ) / ( mColors.size() - 1 );
1197 if ( value < 0 || value > 1 )
1200 int colorCnt = mColors.count();
1201 int colorIdx = std::min(
static_cast< int >(
value * colorCnt ), colorCnt - 1 );
1203 if ( colorIdx >= 0 && colorIdx < colorCnt )
1204 return mColors.at( colorIdx ).first;
1218 for (
int k = mColors.size() - 1; k >= 0; k-- )
1220 tmpColors << mColors.at( k );
1222 mColors = tmpColors;
1233 for (
int i = 0; i < mColors.count(); ++i )
1236 props.insert( QStringLiteral(
"preset_color_name_%1" ).arg( i ), mColors.at( i ).second );
1238 props[QStringLiteral(
"rampType" )] =
type();
1244 return mColors.count();
AngularDirection
Angular directions.
@ CounterClockwise
Counter-clockwise direction.
@ Clockwise
Clockwise direction.
Color ramp utilising "Color Brewer" preset color schemes.
void invert() override
Inverts the ordering of the color ramp.
static QList< int > listSchemeVariants(const QString &schemeName)
Returns a list of the valid variants (numbers of colors) for a specified color brewer scheme name.
QColor color(double value) const override
Returns the color corresponding to a specified value.
QgsColorBrewerColorRamp * clone() const override
Creates a clone of the color ramp.
static QgsColorRamp * create(const QVariantMap &properties=QVariantMap())
Returns a new QgsColorBrewerColorRamp color ramp created using the properties encoded in a string map...
static QStringList listSchemeNames()
Returns a list of all valid color brewer scheme names.
QString type() const override
Returns a string representing the color ramp type.
double value(int index) const override
Returns relative value between [0,1] of color at specified index.
QString schemeName() const
Returns the name of the color brewer color scheme.
int colors() const
Returns the number of colors in the ramp.
QVariantMap properties() const override
Returns a string map containing all the color ramp's properties.
QgsColorBrewerColorRamp(const QString &schemeName=DEFAULT_COLORBREWER_SCHEMENAME, int colors=DEFAULT_COLORBREWER_COLORS, bool inverted=false)
Constructor for QgsColorBrewerColorRamp.
void loadPalette()
Generates the scheme using the current name and number of colors.
static QStringList listSchemes()
static QList< QColor > listSchemeColors(const QString &schemeName, int colors)
static QList< int > listSchemeVariants(const QString &schemeName)
Abstract base class for color ramps.
virtual double value(int index) const =0
Returns relative value between [0,1] of color at specified index.
static QString defaultBaseDir()
static QMap< QString, QString > copyingInfo(const QString &fileName)
static QString findFileName(const QString &target, const QString &startDir, const QString &baseDir)
static QMap< double, QPair< QColor, QColor > > gradientColorMap(const QString &fileName)
QgsCptCityColorRamp * clone() const override
Creates a clone of the color ramp.
QgsStringMap copyingInfo() const
QVariantMap properties() const override
Returns a string map containing all the color ramp's properties.
QgsCptCityColorRamp(const QString &schemeName=DEFAULT_CPTCITY_SCHEMENAME, const QString &variantName=DEFAULT_CPTCITY_VARIANTNAME, bool inverted=false, bool doLoadFile=true)
Constructor for QgsCptCityColorRamp.
static QgsColorRamp * create(const QVariantMap &properties=QVariantMap())
Creates the symbol layer.
QStringList variantList() const
void copy(const QgsCptCityColorRamp *other)
static QString fileNameForVariant(const QString &schema, const QString &variant)
Returns the source file name for a CPT schema and variant.
static QString typeString()
Returns the string identifier for QgsCptCityColorRamp.
QString descFileName() const
QgsGradientColorRamp * cloneGradientRamp() const
QString copyingFileName() const
void invert() override
Inverts the ordering of the color ramp.
QString type() const override
Returns a string representing the color ramp type.
QString schemeName() const
QString variantName() const
Gradient color ramp, which smoothly interpolates between two colors and also supports optional extra ...
QgsGradientStopsList mStops
void setInfo(const QgsStringMap &info)
Sets additional info to attach to the gradient ramp (e.g., authorship notes)
bool isDiscrete() const
Returns true if the gradient is using discrete interpolation, rather than smoothly interpolating betw...
void setColorSpec(QColor::Spec spec)
Sets the color specification in which the color component interpolation will occur.
QVariantMap properties() const override
Returns a string map containing all the color ramp's properties.
static QgsColorRamp * create(const QVariantMap &properties=QVariantMap())
Creates a new QgsColorRamp from a map of properties.
QgsStringMap info() const
Returns any additional info attached to the gradient ramp (e.g., authorship notes)
void convertToDiscrete(bool discrete)
Converts a gradient with existing color stops to or from discrete interpolation.
Qgis::AngularDirection mDirection
QColor color(double value) const override
Returns the color corresponding to a specified value.
static QString typeString()
Returns the string identifier for QgsGradientColorRamp.
void setStops(const QgsGradientStopsList &stops)
Sets the list of intermediate gradient stops for the ramp.
QString type() const override
Returns a string representing the color ramp type.
QgsGradientColorRamp(const QColor &color1=DEFAULT_GRADIENT_COLOR1, const QColor &color2=DEFAULT_GRADIENT_COLOR2, bool discrete=false, const QgsGradientStopsList &stops=QgsGradientStopsList())
Constructor for QgsGradientColorRamp.
QColor color1() const
Returns the gradient start color.
void setDirection(Qgis::AngularDirection direction)
Sets the direction to traverse the color wheel using when interpolating hue-based color specification...
Qgis::AngularDirection direction() const
Returns the direction to traverse the color wheel using when interpolating hue-based color specificat...
void invert() override
Inverts the ordering of the color ramp.
void addStopsToGradient(QGradient *gradient, double opacity=1) const
Copy color ramp stops to a QGradient.
QgsGradientStopsList stops() const
Returns the list of intermediate gradient stops for the ramp.
double value(int index) const override
Returns relative value between [0,1] of color at specified index.
QgsGradientColorRamp * clone() const override
Creates a clone of the color ramp.
InterpolateColorFunc mFunc
QColor color2() const
Returns the gradient end color.
Represents a color stop within a QgsGradientColorRamp color ramp.
void setColorSpec(QColor::Spec spec)
Sets the color specification in which the color component interpolation will occur.
double offset
Relative positional offset, between 0 and 1.
QgsGradientStop(double offset, const QColor &color)
Constructor for QgsGradientStop.
Constrained random color ramp, which returns random colors based on preset parameters.
static QString typeString()
Returns the string identifier for QgsLimitedRandomColorRamp.
void updateColors()
Must be called after changing the properties of the color ramp to regenerate the list of random color...
static QList< QColor > randomColors(int count, int hueMax=DEFAULT_RANDOM_HUE_MAX, int hueMin=DEFAULT_RANDOM_HUE_MIN, int satMax=DEFAULT_RANDOM_SAT_MAX, int satMin=DEFAULT_RANDOM_SAT_MIN, int valMax=DEFAULT_RANDOM_VAL_MAX, int valMin=DEFAULT_RANDOM_VAL_MIN)
Gets a list of random colors.
int count() const override
Returns number of defined colors, or -1 if undefined.
QColor color(double value) const override
Returns the color corresponding to a specified value.
double value(int index) const override
Returns relative value between [0,1] of color at specified index.
QVariantMap properties() const override
Returns a string map containing all the color ramp's properties.
int valMax() const
Returns the maximum value for generated colors.
QString type() const override
Returns a string representing the color ramp type.
int satMax() const
Returns the maximum saturation for generated colors.
static QgsColorRamp * create(const QVariantMap &properties=QVariantMap())
Returns a new QgsLimitedRandomColorRamp color ramp created using the properties encoded in a string m...
QgsLimitedRandomColorRamp * clone() const override
Creates a clone of the color ramp.
int hueMax() const
Returns the maximum hue for generated colors.
int hueMin() const
Returns the minimum hue for generated colors.
int valMin() const
Returns the minimum value for generated colors.
QgsLimitedRandomColorRamp(int count=DEFAULT_RANDOM_COUNT, int hueMin=DEFAULT_RANDOM_HUE_MIN, int hueMax=DEFAULT_RANDOM_HUE_MAX, int satMin=DEFAULT_RANDOM_SAT_MIN, int satMax=DEFAULT_RANDOM_SAT_MAX, int valMin=DEFAULT_RANDOM_VAL_MIN, int valMax=DEFAULT_RANDOM_VAL_MAX)
Constructor for QgsLimitedRandomColorRamp.
int satMin() const
Returns the minimum saturation for generated colors.
A scheme based color ramp consisting of a list of predefined colors.
double value(int index) const override
Returns relative value between [0,1] of color at specified index.
QColor color(double value) const override
Returns the color corresponding to a specified value.
QString type() const override
Returns a string representing the color ramp type.
QList< QColor > colors() const
Returns the list of colors used by the ramp.
static QString typeString()
Returns the string identifier for QgsPresetSchemeColorRamp.
void invert() override
Inverts the ordering of the color ramp.
QVariantMap properties() const override
Returns a string map containing all the color ramp's properties.
static QgsColorRamp * create(const QVariantMap &properties=QVariantMap())
Returns a new QgsPresetSchemeColorRamp color ramp created using the properties encoded in a string ma...
int count() const override
Returns number of defined colors, or -1 if undefined.
QgsPresetSchemeColorRamp(const QList< QColor > &colors=QList< QColor >())
Constructor for QgsPresetSchemeColorRamp.
QgsNamedColorList fetchColors(const QString &context=QString(), const QColor &baseColor=QColor()) override
Gets a list of colors from the scheme.
QgsPresetSchemeColorRamp * clone() const override
Creates a clone of the color ramp.
Totally random color ramp.
double value(int index) const override
Returns relative value between [0,1] of color at specified index.
QList< QColor > mPrecalculatedColors
QgsRandomColorRamp * clone() const override
Creates a clone of the color ramp.
QgsRandomColorRamp()=default
Constructor for QgsRandomColorRamp.
static QString typeString()
Returns the string identifier for QgsRandomColorRamp.
int count() const override
Returns number of defined colors, or -1 if undefined.
QString type() const override
Returns a string representing the color ramp type.
virtual void setTotalColorCount(int colorCount)
Sets the desired total number of unique colors for the resultant ramp.
QVariantMap properties() const override
Returns a string map containing all the color ramp's properties.
QColor color(double value) const override
Returns the color corresponding to a specified value.
static QColor decodeColor(const QString &str)
static QString encodeColor(const QColor &color)
QList< QPair< QColor, QString > > QgsNamedColorList
List of colors paired with a friendly display name identifying the color.
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)
QMap< QString, QString > QgsStringMap
bool stopLessThan(const QgsGradientStop &s1, const QgsGradientStop &s2)
#define DEFAULT_COLORBREWER_COLORS
#define DEFAULT_COLORBREWER_SCHEMENAME
#define DEFAULT_RANDOM_HUE_MAX
#define DEFAULT_CPTCITY_SCHEMENAME
#define DEFAULT_RANDOM_HUE_MIN
#define DEFAULT_RANDOM_COUNT
#define DEFAULT_RANDOM_SAT_MAX
#define DEFAULT_RANDOM_SAT_MIN
#define DEFAULT_CPTCITY_VARIANTNAME
#define DEFAULT_GRADIENT_COLOR1
#define DEFAULT_RANDOM_VAL_MIN
QList< QgsGradientStop > QgsGradientStopsList
List of gradient stops.
#define DEFAULT_GRADIENT_COLOR2
#define DEFAULT_RANDOM_VAL_MAX
#define QgsDebugMsgLevel(str, level)