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 );
102 const qreal saturation1 = c1.hsvSaturationF();
103 const qreal saturation2 = c2.hsvSaturationF();
104 const qreal saturation = ( saturation1 + value * ( saturation2 - saturation1 ) );
106 const qreal value1 = c1.valueF();
107 const qreal value2 = c2.valueF();
108 const qreal valueOut = ( value1 + value * ( value2 - value1 ) );
110 const qreal alpha1 = c1.alphaF();
111 const qreal alpha2 = c2.alphaF();
112 const qreal alpha = ( alpha1 + value * ( alpha2 - alpha1 ) );
114 return QColor::fromHsvF( hue > 1 ? hue - 1 : hue, saturation, valueOut, alpha );
117static QColor _interpolateHsl(
const QColor &c1,
const QColor &c2,
const double value,
const Qgis::AngularDirection direction )
119 if ( std::isnan( value ) )
122 qreal hue1 = c1.hslHueF();
123 qreal hue2 = c2.hslHueF();
127 else if ( hue2 == -1 )
138 hue = hue1 - value * ( hue1 - hue2 );
151 hue = hue1 + value * ( hue2 - hue1 );
161 const qreal saturation1 = c1.hslSaturationF();
162 const qreal saturation2 = c2.hslSaturationF();
163 const qreal saturation = ( saturation1 + value * ( saturation2 - saturation1 ) );
165 const qreal lightness1 = c1.lightnessF();
166 const qreal lightness2 = c2.lightnessF();
167 const qreal lightness = ( lightness1 + value * ( lightness2 - lightness1 ) );
169 const qreal alpha1 = c1.alphaF();
170 const qreal alpha2 = c2.alphaF();
171 const qreal alpha = ( alpha1 + value * ( alpha2 - alpha1 ) );
173 return QColor::fromHslF( hue > 1 ? hue - 1 : hue, saturation, lightness, alpha );
182 , mFunc( _interpolateRgb )
191 switch ( mColorSpec )
194 case QColor::Invalid:
195 case QColor::ExtendedRgb:
197 mFunc = _interpolateRgb;
200 mFunc = _interpolateHsv;
203 mFunc = _interpolateHsl;
212 , mDiscrete( discrete )
214 , mFunc( _interpolateRgb )
223 if ( props.contains( QStringLiteral(
"color1" ) ) )
225 if ( props.contains( QStringLiteral(
"color2" ) ) )
230 if ( props.contains( QStringLiteral(
"stops" ) ) )
232 const auto constSplit = props[QStringLiteral(
"stops" )].toString().split(
':' );
233 for (
const QString &stop : constSplit )
235 const QStringList parts = stop.split(
';' );
236 if ( parts.size() != 2 && parts.size() != 4 )
242 if ( parts.size() == 4 )
244 if ( parts.at( 2 ).compare( QLatin1String(
"rgb" ) ) == 0 )
245 stops.last().setColorSpec( QColor::Spec::Rgb );
246 else if ( parts.at( 2 ).compare( QLatin1String(
"hsv" ) ) == 0 )
247 stops.last().setColorSpec( QColor::Spec::Hsv );
248 else if ( parts.at( 2 ).compare( QLatin1String(
"hsl" ) ) == 0 )
249 stops.last().setColorSpec( QColor::Spec::Hsl );
251 if ( parts.at( 3 ).compare( QLatin1String(
"cw" ) ) == 0 )
253 else if ( parts.at( 3 ).compare( QLatin1String(
"ccw" ) ) == 0 )
260 bool discrete =
false;
261 if ( props.contains( QStringLiteral(
"discrete" ) ) )
263 if ( props[QStringLiteral(
"discrete" )] == QLatin1String(
"1" ) )
269 for ( QVariantMap::const_iterator it = props.constBegin();
270 it != props.constEnd(); ++it )
272 if ( it.key().startsWith( QLatin1String(
"info_" ) ) )
273 info[ it.key().mid( 5 )] = it.value().toString();
279 if ( props.contains( QStringLiteral(
"spec" ) ) )
281 const QString spec = props.value( QStringLiteral(
"spec" ) ).toString().trimmed();
282 if ( spec.compare( QLatin1String(
"rgb" ) ) == 0 )
284 else if ( spec.compare( QLatin1String(
"hsv" ) ) == 0 )
286 else if ( spec.compare( QLatin1String(
"hsl" ) ) == 0 )
290 if ( props.contains( QStringLiteral(
"direction" ) ) )
292 const QString
direction = props.value( QStringLiteral(
"direction" ) ).toString().trimmed();
293 if (
direction.compare( QLatin1String(
"ccw" ) ) == 0 )
295 else if (
direction.compare( QLatin1String(
"cw" ) ) == 0 )
308 else if ( index >=
mStops.size() + 1 )
314 return mStops[index - 1].offset;
328 else if (
mStops.isEmpty() )
337 double lower = 0, upper = 0;
339 for ( QgsGradientStopsList::const_iterator it =
mStops.begin(); it !=
mStops.end(); ++it )
341 if ( it->offset >
value )
349 return qgsDoubleNear( upper, lower ) ? c1 : it->mFunc( c1, c2, (
value - lower ) / ( upper - lower ), it->mDirection );
372 newStops.reserve(
mStops.size() );
378 for (
int k =
mStops.size() - 1; k >= 1; k-- )
389 for (
int k =
mStops.size() - 1; k >= 0; k-- )
405 for (
int i = 1, j =
mStops.size() - 1; i <
mStops.size(); ++i, --j )
407 newStops[i].setColorSpec(
mStops.at( j ).colorSpec() );
435 lst.reserve(
mStops.size() );
439 stop.colorSpec() == QColor::Rgb ? QStringLiteral(
"rgb" )
440 : stop.colorSpec() == QColor::Hsv ? QStringLiteral(
"hsv" )
441 : stop.colorSpec() == QColor::Hsl ? QStringLiteral(
"hsl" ) : QString(),
444 map[QStringLiteral(
"stops" )] = lst.join( QLatin1Char(
':' ) );
447 map[QStringLiteral(
"discrete" )] =
mDiscrete ?
"1" :
"0";
449 for ( QgsStringMap::const_iterator it =
mInfo.constBegin();
450 it !=
mInfo.constEnd(); ++it )
452 map[
"info_" + it.key()] = it.value();
458 map[QStringLiteral(
"spec" ) ] = QStringLiteral(
"rgb" );
461 map[QStringLiteral(
"spec" ) ] = QStringLiteral(
"hsv" );
464 map[QStringLiteral(
"spec" ) ] = QStringLiteral(
"hsl" );
467 case QColor::Invalid:
468 case QColor::ExtendedRgb:
475 map[QStringLiteral(
"direction" ) ] = QStringLiteral(
"cw" );
478 map[QStringLiteral(
"direction" ) ] = QStringLiteral(
"ccw" );
484 map[QStringLiteral(
"rampType" )] =
type();
498 int numStops =
mStops.count() + 2;
500 for ( QgsGradientStopsList::const_iterator it =
mStops.constBegin();
501 it !=
mStops.constEnd(); ++it )
503 newStops.append(
QgsGradientStop(
static_cast< double >( i ) / numStops, it->color ) );
504 if ( i == numStops - 1 )
514 int numStops =
mStops.count() + 2;
516 for ( QgsGradientStopsList::const_iterator it =
mStops.constBegin();
517 it !=
mStops.constEnd(); ++it )
519 newStops.append(
QgsGradientStop(
static_cast< double >( i ) / ( numStops - 2 ), it->color ) );
520 if ( i == numStops - 3 )
552 gradient->setColorAt( 0,
color1 );
553 gradient->setColorAt( 1,
color2 );
555 double lastOffset = 0;
559 QColor rampColor = stop.color;
562 rampColor.setAlpha( rampColor.alpha() * opacity );
564 gradient->setColorAt( stop.offset, rampColor );
566 if ( stop.colorSpec() != QColor::Rgb )
570 for (
double offset = lastOffset + 0.05; offset < stop.offset; offset += 0.05 )
572 QColor midColor =
color( offset );
575 midColor.setAlpha( midColor.alpha() * opacity );
577 gradient->setColorAt( offset, midColor );
580 lastOffset = stop.offset;
585 for (
double offset = lastOffset + 0.05; offset < 1; offset += 0.05 )
587 QColor midColor =
color( offset );
590 midColor.setAlpha( midColor.alpha() * opacity );
592 gradient->setColorAt( offset, midColor );
603 case QColor::Invalid:
604 case QColor::ExtendedRgb:
606 mFunc = _interpolateRgb;
609 mFunc = _interpolateHsv;
612 mFunc = _interpolateHsl;
622 int satMin,
int satMax,
int valMin,
int valMax )
624 , mHueMin( hueMin ), mHueMax( hueMax )
625 , mSatMin( satMin ), mSatMax( satMax )
626 , mValMin( valMin ), mValMax( valMax )
638 if ( props.contains( QStringLiteral(
"count" ) ) )
count = props[QStringLiteral(
"count" )].toInt();
639 if ( props.contains( QStringLiteral(
"hueMin" ) ) )
hueMin = props[QStringLiteral(
"hueMin" )].toInt();
640 if ( props.contains( QStringLiteral(
"hueMax" ) ) )
hueMax = props[QStringLiteral(
"hueMax" )].toInt();
641 if ( props.contains( QStringLiteral(
"satMin" ) ) )
satMin = props[QStringLiteral(
"satMin" )].toInt();
642 if ( props.contains( QStringLiteral(
"satMax" ) ) )
satMax = props[QStringLiteral(
"satMax" )].toInt();
643 if ( props.contains( QStringLiteral(
"valMin" ) ) )
valMin = props[QStringLiteral(
"valMin" )].toInt();
644 if ( props.contains( QStringLiteral(
"valMax" ) ) )
valMax = props[QStringLiteral(
"valMax" )].toInt();
653 return static_cast< double >( index ) / (
mColors.size() - 1 );
658 if ( value < 0 || value > 1 )
661 int colorCnt =
mColors.count();
662 int colorIdx = std::min(
static_cast< int >(
value * colorCnt ), colorCnt - 1 );
664 if ( colorIdx >= 0 && colorIdx < colorCnt )
683 map[QStringLiteral(
"count" )] = QString::number(
mCount );
684 map[QStringLiteral(
"hueMin" )] = QString::number(
mHueMin );
685 map[QStringLiteral(
"hueMax" )] = QString::number(
mHueMax );
686 map[QStringLiteral(
"satMin" )] = QString::number(
mSatMin );
687 map[QStringLiteral(
"satMax" )] = QString::number(
mSatMax );
688 map[QStringLiteral(
"valMin" )] = QString::number(
mValMin );
689 map[QStringLiteral(
"valMax" )] = QString::number(
mValMax );
690 map[QStringLiteral(
"rampType" )] =
type();
695 int hueMax,
int hueMin,
int satMax,
int satMin,
int valMax,
int valMin )
698 QList<QColor> colors;
709 double currentHueAngle = 360.0 *
static_cast< double >( std::rand() ) / RAND_MAX;
711 colors.reserve(
count );
712 for (
int i = 0; i <
count; ++i )
717 currentHueAngle += 137.50776;
719 h = std::clamp( std::round( ( std::fmod( currentHueAngle, 360.0 ) / 360.0 ) * ( safeHueMax - safeHueMin ) + safeHueMin ), 0.0, 359.0 );
720 s = std::clamp( (
static_cast<int>( std::rand() ) % ( safeSatMax - safeSatMin + 1 ) ) + safeSatMin, 0, 255 );
721 v = std::clamp( (
static_cast<int>( std::rand() ) % ( safeValMax - safeValMin + 1 ) ) + safeValMin, 0, 255 );
722 colors.append( QColor::fromHsv( h, s, v ) );
751 if ( std::isnan(
value ) )
765 int h =
static_cast< int >( 360.0 * std::rand() / ( RAND_MAX + 1.0 ) );
767 int v = ( std::rand() % ( maxVal - minVal + 1 ) ) + minVal;
768 return QColor::fromHsv( h, s, v );
781 double hueOffset = ( 360.0 * std::rand() / ( RAND_MAX + 1.0 ) );
786 double hueStep = 359.0 / colorCount;
787 double currentHue = hueOffset;
790 for (
int idx = 0; idx < colorCount; ++ idx )
792 int h =
static_cast< int >( std::round( currentHue ) ) % 360;
796 currentHue += hueStep;
800 std::random_device rd;
801 std::mt19937 g( rd() );
817 return QVariantMap();
823 : mSchemeName( schemeName )
825 , mInverted( inverted )
834 bool inverted =
false;
836 if ( props.contains( QStringLiteral(
"schemeName" ) ) )
837 schemeName = props[QStringLiteral(
"schemeName" )].toString();
838 if ( props.contains( QStringLiteral(
"colors" ) ) )
839 colors = props[QStringLiteral(
"colors" )].toInt();
840 if ( props.contains( QStringLiteral(
"inverted" ) ) )
841 inverted = props[QStringLiteral(
"inverted" )].toInt();
852 QList<QColor> tmpPalette;
854 for (
int k =
mPalette.size() - 1; k >= 0; k-- )
876 return static_cast< double >( index ) / (
mPalette.size() - 1 );
881 if (
mPalette.isEmpty() || value < 0 || value > 1 || std::isnan(
value ) )
884 int paletteEntry =
static_cast< int >(
value *
mPalette.count() );
885 if ( paletteEntry >=
mPalette.count() )
886 paletteEntry =
mPalette.count() - 1;
905 map[QStringLiteral(
"colors" )] = QString::number(
mColors );
906 map[QStringLiteral(
"inverted" )] = QString::number(
mInverted );
907 map[QStringLiteral(
"rampType" )] =
type();
916 bool inverted,
bool doLoadFile )
918 , mSchemeName( schemeName )
919 , mVariantName( variantName )
920 , mInverted( inverted )
929 const QString &variantName,
bool inverted,
bool doLoadFile )
931 , mSchemeName( schemeName )
932 , mVariantName( variantName )
933 , mVariantList( variantList )
934 , mInverted( inverted )
948 bool inverted =
false;
950 if ( props.contains( QStringLiteral(
"schemeName" ) ) )
951 schemeName = props[QStringLiteral(
"schemeName" )].toString();
952 if ( props.contains( QStringLiteral(
"variantName" ) ) )
953 variantName = props[QStringLiteral(
"variantName" )].toString();
954 if ( props.contains( QStringLiteral(
"inverted" ) ) )
955 inverted = props[QStringLiteral(
"inverted" )].toInt();
1003 info[QStringLiteral(
"cpt-city-license" )] =
"<cpt-city>" + copyingFilename;
1012 map[QStringLiteral(
"schemeName" )] =
mSchemeName;
1014 map[QStringLiteral(
"inverted" )] = QString::number(
mInverted );
1015 map[QStringLiteral(
"rampType" )] =
type();
1061 if ( filename.isNull() )
1069 QMap< double, QPair<QColor, QColor> > colorMap =
1075 QMap<double, QPair<QColor, QColor> >::const_iterator it, prev;
1081 it = prev = colorMap.constBegin();
1082 while ( it != colorMap.constEnd() )
1085 if ( it != colorMap.constBegin() && ( it.value().first != it.value().second ) )
1087 if ( it.value().first == prev.value().second )
1103 it = prev = colorMap.constBegin();
1104 while ( it != colorMap.constEnd() )
1116 ( it.key() != 0.0 && it.key() != 1.0 ) )
1126 if ( !
mStops.isEmpty() &&
mStops.at( 0 ).offset == 0.0 )
1128 if ( !
mStops.isEmpty() &&
mStops.last().offset == 1.0 )
1147 const auto constColors =
colors;
1148 for (
const QColor &
color : constColors )
1153 if ( mColors.isEmpty() )
1154 mColors << qMakePair( QColor( 250, 75, 60 ), QStringLiteral(
"#fa4b3c" ) );
1161 if ( mColors.isEmpty() )
1162 mColors << qMakePair( QColor( 250, 75, 60 ), QStringLiteral(
"#fa4b3c" ) );
1170 QString colorString =
properties.
value( QStringLiteral(
"preset_color_%1" ).arg( i ), QString() ).toString();
1171 QString colorName =
properties.value( QStringLiteral(
"preset_color_name_%1" ).arg( i ), QString() ).toString();
1172 while ( !colorString.isEmpty() )
1176 colorString =
properties.value( QStringLiteral(
"preset_color_%1" ).arg( i ), QString() ).toString();
1177 colorName =
properties.value( QStringLiteral(
"preset_color_name_%1" ).arg( i ), QString() ).toString();
1186 l.reserve( mColors.count() );
1187 for (
int i = 0; i < mColors.count(); ++i )
1189 l << mColors.at( i ).first;
1196 if ( mColors.empty() )
1198 return static_cast< double >( index ) / ( mColors.size() - 1 );
1203 if ( value < 0 || value > 1 )
1206 int colorCnt = mColors.count();
1207 int colorIdx = std::min(
static_cast< int >(
value * colorCnt ), colorCnt - 1 );
1209 if ( colorIdx >= 0 && colorIdx < colorCnt )
1210 return mColors.at( colorIdx ).first;
1224 for (
int k = mColors.size() - 1; k >= 0; k-- )
1226 tmpColors << mColors.at( k );
1228 mColors = tmpColors;
1239 for (
int i = 0; i < mColors.count(); ++i )
1242 props.insert( QStringLiteral(
"preset_color_name_%1" ).arg( i ), mColors.at( i ).second );
1244 props[QStringLiteral(
"rampType" )] =
type();
1250 return mColors.count();
AngularDirection
Angular directions.
@ NoOrientation
Unknown orientation or sentinel value.
@ 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)