QGIS API Documentation  2.17.0-Master (973e4b0)
qgsvectorcolorrampv2.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgsvectorcolorrampv2.h
3  ---------------------
4  begin : November 2009
5  copyright : (C) 2009 by Martin Dobias
6  email : wonder dot sk at gmail dot com
7  ***************************************************************************
8  * *
9  * This program is free software; you can redistribute it and/or modify *
10  * it under the terms of the GNU General Public License as published by *
11  * the Free Software Foundation; either version 2 of the License, or *
12  * (at your option) any later version. *
13  * *
14  ***************************************************************************/
15 
16 #ifndef QGSVECTORCOLORRAMPV2_H
17 #define QGSVECTORCOLORRAMPV2_H
18 
19 #include <QColor>
20 #include <QGradient>
21 
22 #include "qgssymbollayerv2.h" // for QgsStringMap
23 #include "qgslogger.h"
24 
29 //TODO QGIS 3.0 - rename to QgsColorRamp, since this is used by much more than just vectors
30 class CORE_EXPORT QgsVectorColorRampV2
31 {
32  public:
33 
34  virtual ~QgsVectorColorRampV2() {}
35 
38  virtual int count() const = 0;
39 
42  virtual double value( int index ) const = 0;
43 
48  virtual QColor color( double value ) const = 0;
49 
52  virtual QString type() const = 0;
53 
56  virtual QgsVectorColorRampV2* clone() const = 0;
57 
60  virtual QgsStringMap properties() const = 0;
61 };
62 
67 class CORE_EXPORT QgsGradientStop
68 {
69  public:
70 
75  QgsGradientStop( double o, const QColor& c )
76  : offset( o )
77  , color( c )
78  { }
79 
81  double offset;
84 
85  bool operator==( const QgsGradientStop& other ) const
86  {
87  return other.color == color && qgsDoubleNear( other.offset, offset );
88  }
89 };
90 
93 
94 #define DEFAULT_GRADIENT_COLOR1 QColor(0,0,255)
95 #define DEFAULT_GRADIENT_COLOR2 QColor(0,255,0)
96 
102 //TODO QGIS 3.0 - rename to QgsGradientColorRamp, since this is used by much more than just vectors
104 {
105  public:
106 
115  const QColor& color2 = DEFAULT_GRADIENT_COLOR2,
116  bool discrete = false,
117  const QgsGradientStopsList& stops = QgsGradientStopsList() );
118 
120  static QgsVectorColorRampV2* create( const QgsStringMap& properties = QgsStringMap() );
121 
122  virtual int count() const override { return mStops.count() + 2; }
123  virtual double value( int index ) const override;
124  virtual QColor color( double value ) const override;
125  virtual QString type() const override { return "gradient"; }
126  virtual QgsVectorGradientColorRampV2* clone() const override;
127  virtual QgsStringMap properties() const override;
128 
133  QColor color1() const { return mColor1; }
134 
139  QColor color2() const { return mColor2; }
140 
146  void setColor1( const QColor& color ) { mColor1 = color; }
147 
153  void setColor2( const QColor& color ) { mColor2 = color; }
154 
159  bool isDiscrete() const { return mDiscrete; }
160 
167  void setDiscrete( bool discrete ) { mDiscrete = discrete; }
168 
175  void convertToDiscrete( bool discrete );
176 
183  void setStops( const QgsGradientStopsList& stops );
184 
188  QgsGradientStopsList stops() const { return mStops; }
189 
193  QgsStringMap info() const { return mInfo; }
194 
199  void setInfo( const QgsStringMap& info ) { mInfo = info; }
200 
207  void addStopsToGradient( QGradient* gradient, double alpha = 1 );
208 
209  protected:
212  bool mDiscrete;
215 };
216 
217 #define DEFAULT_RANDOM_COUNT 10
218 #define DEFAULT_RANDOM_HUE_MIN 0
219 #define DEFAULT_RANDOM_HUE_MAX 359
220 #define DEFAULT_RANDOM_VAL_MIN 200
221 #define DEFAULT_RANDOM_VAL_MAX 240
222 #define DEFAULT_RANDOM_SAT_MIN 100
223 #define DEFAULT_RANDOM_SAT_MAX 240
224 
229 //TODO QGIS 3.0 - rename to QgsRandomColorRamp, since this is used by much more than just vectors
231 {
232  public:
234  int hueMin = DEFAULT_RANDOM_HUE_MIN, int hueMax = DEFAULT_RANDOM_HUE_MAX,
235  int satMin = DEFAULT_RANDOM_SAT_MIN, int satMax = DEFAULT_RANDOM_SAT_MAX,
236  int valMin = DEFAULT_RANDOM_VAL_MIN, int valMax = DEFAULT_RANDOM_VAL_MAX );
237 
238  static QgsVectorColorRampV2* create( const QgsStringMap& properties = QgsStringMap() );
239 
240  virtual double value( int index ) const override;
241 
242  virtual QColor color( double value ) const override;
243 
244  virtual QString type() const override { return "random"; }
245 
246  virtual QgsVectorRandomColorRampV2* clone() const override;
247 
248  virtual QgsStringMap properties() const override;
249 
253  static QList<QColor> randomColors( int count,
254  int hueMax = DEFAULT_RANDOM_HUE_MAX, int hueMin = DEFAULT_RANDOM_HUE_MIN,
255  int satMax = DEFAULT_RANDOM_SAT_MAX, int satMin = DEFAULT_RANDOM_SAT_MIN,
256  int valMax = DEFAULT_RANDOM_VAL_MAX, int valMin = DEFAULT_RANDOM_VAL_MIN );
257 
258  void updateColors();
259 
260  int count() const override { return mCount; }
261  int hueMin() const { return mHueMin; }
262  int hueMax() const { return mHueMax; }
263  int satMin() const { return mSatMin; }
264  int satMax() const { return mSatMax; }
265  int valMin() const { return mValMin; }
266  int valMax() const { return mValMax; }
267 
268  void setCount( int val ) { mCount = val; }
269  void setHueMin( int val ) { mHueMin = val; }
270  void setHueMax( int val ) { mHueMax = val; }
271  void setSatMin( int val ) { mSatMin = val; }
272  void setSatMax( int val ) { mSatMax = val; }
273  void setValMin( int val ) { mValMin = val; }
274  void setValMax( int val ) { mValMax = val; }
275 
276  protected:
277  int mCount;
278  int mHueMin, mHueMax, mSatMin, mSatMax, mValMin, mValMax;
280 };
281 
285 class CORE_EXPORT QgsRandomColorsV2: public QgsVectorColorRampV2
286 {
287  public:
290 
291  int count() const override;
292 
293  double value( int index ) const override;
294 
295  QColor color( double value ) const override;
296 
303  virtual void setTotalColorCount( const int colorCount );
304 
305  QString type() const override;
306 
307  QgsRandomColorsV2* clone() const override;
308 
309  QgsStringMap properties() const override;
310 
311  protected:
312 
315 
316 };
317 
318 
319 #define DEFAULT_COLORBREWER_SCHEMENAME "Spectral"
320 #define DEFAULT_COLORBREWER_COLORS 5
321 
326 {
327  public:
329  int colors = DEFAULT_COLORBREWER_COLORS );
330 
331  static QgsVectorColorRampV2* create( const QgsStringMap& properties = QgsStringMap() );
332 
333  virtual double value( int index ) const override;
334 
335  virtual QColor color( double value ) const override;
336 
337  virtual QString type() const override { return "colorbrewer"; }
338 
339  virtual QgsVectorColorBrewerColorRampV2* clone() const override;
340 
341  virtual QgsStringMap properties() const override;
342 
343  QString schemeName() const { return mSchemeName; }
344  virtual int count() const override { return mColors; }
345  int colors() const { return mColors; }
346 
347  void setSchemeName( const QString& schemeName ) { mSchemeName = schemeName; loadPalette(); }
348  void setColors( int colors ) { mColors = colors; loadPalette(); }
349 
350  static QStringList listSchemeNames();
351  static QList<int> listSchemeVariants( const QString& schemeName );
352 
353  protected:
354 
355  void loadPalette();
356 
358  int mColors;
360 };
361 
362 
363 #define DEFAULT_CPTCITY_SCHEMENAME "cb/div/BrBG_" //change this
364 #define DEFAULT_CPTCITY_VARIANTNAME "05"
365 
370 {
371  public:
373  const QString& variantName = DEFAULT_CPTCITY_VARIANTNAME,
374  bool doLoadFile = true );
375  QgsCptCityColorRampV2( const QString& schemeName, const QStringList& variantList,
376  const QString& variantName = QString(), bool doLoadFile = true );
377 
378  static QgsVectorColorRampV2* create( const QgsStringMap& properties = QgsStringMap() );
379 
380  virtual QString type() const override { return "cpt-city"; }
381 
382  virtual QgsCptCityColorRampV2* clone() const override;
383  void copy( const QgsCptCityColorRampV2* other );
384  QgsVectorGradientColorRampV2* cloneGradientRamp() const;
385 
386  virtual QgsStringMap properties() const override;
387 
388  QString schemeName() const { return mSchemeName; }
389  QString variantName() const { return mVariantName; }
390  QStringList variantList() const { return mVariantList; }
391 
392  /* lazy loading - have to call loadPalette() explicitly */
393  void setSchemeName( const QString& schemeName ) { mSchemeName = schemeName; mFileLoaded = false; }
394  void setVariantName( const QString& variantName ) { mVariantName = variantName; mFileLoaded = false; }
395  void setVariantList( const QStringList& variantList ) { mVariantList = variantList; }
396  void setName( const QString& schemeName, const QString& variantName = "", const QStringList& variantList = QStringList() )
397  { mSchemeName = schemeName; mVariantName = variantName; mVariantList = variantList; mFileLoaded = false; }
398 
399  void loadPalette() { loadFile(); }
400  bool hasMultiStops() const { return mMultiStops; }
401 
402  QString fileName() const;
403  bool loadFile();
404  bool fileLoaded() const { return mFileLoaded; }
405 
406  QString copyingFileName() const;
407  QString descFileName() const;
408  QgsStringMap copyingInfo() const;
409 
410  protected:
411 
417 };
418 
419 
420 #endif
static unsigned index
int count() const override
Returns number of defined colors, or -1 if undefined.
virtual QString type() const =0
Returns a string representing the color ramp type.
void setName(const QString &schemeName, const QString &variantName="", const QStringList &variantList=QStringList())
#define DEFAULT_CPTCITY_VARIANTNAME
Represents a color stop within a gradient color ramp.
bool operator==(const QgsGradientStop &other) const
#define DEFAULT_COLORBREWER_SCHEMENAME
#define DEFAULT_RANDOM_HUE_MIN
void setInfo(const QgsStringMap &info)
Sets additional info to attach to the gradient ramp (eg authorship notes)
virtual QgsVectorGradientColorRampV2 * clone() const override
Creates a clone of the color ramp.
virtual QgsStringMap properties() const =0
Returns a string map containing all the color ramp&#39;s properties.
#define DEFAULT_CPTCITY_SCHEMENAME
void setColor2(const QColor &color)
Sets the gradient end color.
virtual QString type() const override
Returns a string representing the color ramp type.
QMap< QString, QString > QgsStringMap
Definition: qgis.h:492
#define DEFAULT_RANDOM_SAT_MAX
bool qgsDoubleNear(double a, double b, double epsilon=4 *DBL_EPSILON)
Compare two doubles (but allow some difference)
Definition: qgis.h:353
QgsStringMap info() const
Returns any additional info attached to the gradient ramp (eg authorship notes)
void setColor1(const QColor &color)
Sets the gradient start color.
virtual QgsStringMap properties() const override
Returns a string map containing all the color ramp&#39;s properties.
virtual int count() const override
Returns number of defined colors, or -1 if undefined.
QString variantName() const
void setVariantName(const QString &variantName)
QStringList variantList() const
#define DEFAULT_GRADIENT_COLOR2
void setSchemeName(const QString &schemeName)
virtual double value(int index) const =0
Returns relative value between [0,1] of color at specified index.
virtual QgsVectorColorRampV2 * clone() const =0
Creates a clone of the color ramp.
double offset
Relative positional offset, between 0 and 1.
virtual QString type() const override
Returns a string representing the color ramp type.
#define DEFAULT_GRADIENT_COLOR1
#define DEFAULT_RANDOM_VAL_MAX
virtual QColor color(double value) const =0
Returns the color corresponding to a specified value.
QgsGradientStop(double o, const QColor &c)
Constructor for QgsGradientStop.
virtual QString type() const override
Returns a string representing the color ramp type.
#define DEFAULT_RANDOM_SAT_MIN
QgsGradientStopsList stops() const
Returns the list of intermediate gradient stops for the ramp.
static QgsVectorColorRampV2 * create(const QgsStringMap &properties=QgsStringMap())
Creates a new QgsVectorColorRampV2 from a map of properties.
Random color ramp, which returns random colors based on preset parameters.
virtual int count() const =0
Returns number of defined colors, or -1 if undefined.
QList< QgsGradientStop > QgsGradientStopsList
List of gradient stops.
void setSchemeName(const QString &schemeName)
virtual QString type() const override
Returns a string representing the color ramp type.
#define DEFAULT_COLORBREWER_COLORS
bool isDiscrete() const
Returns true if the gradient is using discrete interpolation, rather than smoothly interpolating betw...
QList< QColor > mPrecalculatedColors
#define DEFAULT_RANDOM_HUE_MAX
#define DEFAULT_RANDOM_VAL_MIN
Abstract base class for color ramps.
void setVariantList(const QStringList &variantList)
Gradient color ramp, which smoothly interpolates between two colors and also supports optional extra ...
QColor color2() const
Returns the gradient end color.
QColor color1() const
Returns the gradient start color.
virtual int count() const override
Returns number of defined colors, or -1 if undefined.
void setDiscrete(bool discrete)
Sets whether the gradient should use discrete interpolation, rather than smoothly interpolating betwe...
#define DEFAULT_RANDOM_COUNT
QColor color
Gradient color at stop.