COIN-OR::LEMON - Graph Library

Changeset 2398:99b999e7b775 in lemon-0.x for lemon/color.h


Ignore:
Timestamp:
03/07/07 12:57:23 (12 years ago)
Author:
Balazs Dezso
Branch:
default
Phase:
public
Convert:
svn:c9d7d8f5-90d6-0310-b91f-818b3a526b0e/lemon/trunk@3229
Message:

Little interface improvment

File:
1 edited

Legend:

Unmodified
Added
Removed
  • lemon/color.h

    r2391 r2398  
    3434
    3535
    36 /// \addtogroup misc
    37 /// @{
    38 
    39 ///Data structure representing RGB colors.
    40 
    41 ///Data structure representing RGB colors.
    42 class Color
    43 {
    44   double _r,_g,_b;
    45 public:
    46   ///Default constructor
    47   Color() {}
    48   ///Constructor
    49   Color(double r,double g,double b) :_r(r),_g(g),_b(b) {};
    50   ///Set the red component
    51   double & red() {return _r;}
    52   ///Return the red component
    53   const double & red() const {return _r;}
    54   ///Set the green component
    55   double & green() {return _g;}
    56   ///Return the green component
    57   const double & green() const {return _g;}
    58   ///Set the blue component
    59   double & blue() {return _b;}
    60   ///Return the blue component
    61   const double & blue() const {return _b;}
    62   ///Set the color components
    63   void set(double r,double g,double b) { _r=r;_g=g;_b=b; };
    64 };
     36  /// \addtogroup misc
     37  /// @{
     38
     39  ///Data structure representing RGB colors.
     40
     41  ///Data structure representing RGB colors.
     42  class Color
     43  {
     44    double _r,_g,_b;
     45  public:
     46    ///Default constructor
     47    Color() {}
     48    ///Constructor
     49    Color(double r,double g,double b) :_r(r),_g(g),_b(b) {};
     50    ///Set the red component
     51    double & red() {return _r;}
     52    ///Return the red component
     53    const double & red() const {return _r;}
     54    ///Set the green component
     55    double & green() {return _g;}
     56    ///Return the green component
     57    const double & green() const {return _g;}
     58    ///Set the blue component
     59    double & blue() {return _b;}
     60    ///Return the blue component
     61    const double & blue() const {return _b;}
     62    ///Set the color components
     63    void set(double r,double g,double b) { _r=r;_g=g;_b=b; };
     64  };
    6565
    6666  /// White color constant
     
    9595  extern const Color DARK_CYAN;
    9696
    97 ///Map <tt>int</tt>s to different \ref Color "Color"s
    98 
    99 ///This map assigns one of the predefined \ref Color "Color"s
    100 ///to each <tt>int</tt>. It is possible to change the colors as well as their
    101 ///number. The integer range is cyclically mapped to the provided set of colors.
    102 ///
    103 ///This is a true \ref concepts::ReferenceMap "reference map", so you can also
    104 ///change the actual colors.
    105 
    106 class Palette : public MapBase<int,Color>
    107 {
    108   std::vector<Color> colors;
    109 public:
    110   ///Constructor
    111 
    112   ///Constructor
    113   ///\param have_white indicates whether white is
    114   ///amongst the provided color (\c true) or not (\c false). If it is true,
    115   ///white will be assigned to \c 0.
    116   ///\param num the number of the allocated colors. If it is \c 0,
    117   ///the default color configuration is set up (26 color plus the white).
    118   ///If \c num is less then 26/27 then the default color list is cut. Otherwise
    119   ///the color list is filled repeatedly with the default color list.
    120   ///(The colors can be changed later on.)
    121   Palette(bool have_white=false,int num=0)
     97  ///Map <tt>int</tt>s to different \ref Color "Color"s
     98
     99  ///This map assigns one of the predefined \ref Color "Color"s to
     100  ///each <tt>int</tt>. It is possible to change the colors as well as
     101  ///their number. The integer range is cyclically mapped to the
     102  ///provided set of colors.
     103  ///
     104  ///This is a true \ref concepts::ReferenceMap "reference map", so
     105  ///you can also change the actual colors.
     106
     107  class Palette : public MapBase<int,Color>
    122108  {
    123     do {
    124       if(have_white) colors.push_back(Color(1,1,1));
    125 
    126       colors.push_back(Color(0,0,0));
    127       colors.push_back(Color(1,0,0));
    128       colors.push_back(Color(0,1,0));
    129       colors.push_back(Color(0,0,1));
    130       colors.push_back(Color(1,1,0));
    131       colors.push_back(Color(1,0,1));
    132       colors.push_back(Color(0,1,1));
     109    std::vector<Color> colors;
     110  public:
     111    ///Constructor
     112
     113    ///Constructor
     114    ///\param num the number of the allocated colors. If it is \c -1,
     115    ///the default color configuration is set up (26 color plus the
     116    ///white).  If \c num is less then 26/27 then the default color
     117    ///list is cut. Otherwise the color list is filled repeatedly with
     118    ///the default color list.  (The colors can be changed later on.)
     119    ///\param have_white indicates whether white is amongst the
     120    ///provided color (\c true) or not (\c false). If it is true,
     121    ///white will be assigned to \c 0.
     122    Palette(int num=-1,bool have_white=false)
     123    {
     124      if (num==0) return;
     125      do {
     126        if(have_white) colors.push_back(Color(1,1,1));
     127
     128        colors.push_back(Color(0,0,0));
     129        colors.push_back(Color(1,0,0));
     130        colors.push_back(Color(0,1,0));
     131        colors.push_back(Color(0,0,1));
     132        colors.push_back(Color(1,1,0));
     133        colors.push_back(Color(1,0,1));
     134        colors.push_back(Color(0,1,1));
    133135     
    134       colors.push_back(Color(.5,0,0));
    135       colors.push_back(Color(0,.5,0));
    136       colors.push_back(Color(0,0,.5));
    137       colors.push_back(Color(.5,.5,0));
    138       colors.push_back(Color(.5,0,.5));
    139       colors.push_back(Color(0,.5,.5));
     136        colors.push_back(Color(.5,0,0));
     137        colors.push_back(Color(0,.5,0));
     138        colors.push_back(Color(0,0,.5));
     139        colors.push_back(Color(.5,.5,0));
     140        colors.push_back(Color(.5,0,.5));
     141        colors.push_back(Color(0,.5,.5));
    140142     
    141       colors.push_back(Color(.5,.5,.5));
    142       colors.push_back(Color(1,.5,.5));
    143       colors.push_back(Color(.5,1,.5));
    144       colors.push_back(Color(.5,.5,1));
    145       colors.push_back(Color(1,1,.5));
    146       colors.push_back(Color(1,.5,1));
    147       colors.push_back(Color(.5,1,1));
     143        colors.push_back(Color(.5,.5,.5));
     144        colors.push_back(Color(1,.5,.5));
     145        colors.push_back(Color(.5,1,.5));
     146        colors.push_back(Color(.5,.5,1));
     147        colors.push_back(Color(1,1,.5));
     148        colors.push_back(Color(1,.5,1));
     149        colors.push_back(Color(.5,1,1));
    148150     
    149       colors.push_back(Color(1,.5,0));
    150       colors.push_back(Color(.5,1,0));
    151       colors.push_back(Color(1,0,.5));
    152       colors.push_back(Color(0,1,.5));
    153       colors.push_back(Color(0,.5,1));
    154       colors.push_back(Color(.5,0,1));
    155     } while(int(colors.size())<num);
    156     //    colors.push_back(Color(1,1,1));
    157     if(num>0) colors.resize(num);
     151        colors.push_back(Color(1,.5,0));
     152        colors.push_back(Color(.5,1,0));
     153        colors.push_back(Color(1,0,.5));
     154        colors.push_back(Color(0,1,.5));
     155        colors.push_back(Color(0,.5,1));
     156        colors.push_back(Color(.5,0,1));
     157      } while(int(colors.size())<num);
     158      //    colors.push_back(Color(1,1,1));
     159      if(num>=0) colors.resize(num);
     160    }
     161    ///\e
     162    Color &operator[](int i)
     163    {
     164      return colors[i%colors.size()];
     165    }
     166    ///\e
     167    const Color &operator[](int i) const
     168    {
     169      return colors[i%colors.size()];
     170    }
     171    ///\e
     172    void set(int i,const Color &c)
     173    {
     174      colors[i%colors.size()]=c;
     175    }
     176    ///\e
     177    void add(const Color &c)
     178    {
     179      colors.push_back(c);
     180    }
     181
     182    ///Sets the number of the exiting colors.
     183    void resize(int s) { colors.resize(s);}
     184    ///Returns the number of the existing colors.
     185    int size() const { return int(colors.size());}
     186  };
     187
     188  ///Returns a visible distinct \ref Color
     189
     190  ///Returns a \ref Color which is as different from the given parameter
     191  ///as it is possible.
     192  inline Color distantColor(const Color &c)
     193  {
     194    return Color(c.red()<.5?1:0,c.green()<.5?1:0,c.blue()<.5?1:0);
    158195  }
    159   ///\e
    160   Color &operator[](int i)
    161   {
    162     return colors[i%colors.size()];
     196  ///Returns black for light colors and white for the dark ones.
     197
     198  ///Returns black for light colors and white for the dark ones.
     199  inline Color distantBW(const Color &c){
     200    return (.2125*c.red()+.7154*c.green()+.0721*c.blue())<.5 ? WHITE : BLACK;
    163201  }
    164   ///\e
    165   const Color &operator[](int i) const
    166   {
    167     return colors[i%colors.size()];
    168   }
    169   ///\e
    170   void set(int i,const Color &c)
    171   {
    172     colors[i%colors.size()]=c;
    173   }
    174   ///Sets the number of the exiting colors.
    175   void resize(int s) { colors.resize(s);}
    176   ///Returns the number of the existing colors.
    177   std::size_t size() const { return colors.size();}
    178 };
    179 
    180 ///Returns a visible distinct \ref Color
    181 
    182 ///Returns a \ref Color which is as different from the given parameter
    183 ///as it is possible.
    184 inline Color distantColor(const Color &c)
    185 {
    186   return Color(c.red()<.5?1:0,c.green()<.5?1:0,c.blue()<.5?1:0);
    187 }
    188 ///Returns black for light colors and white for the dark ones.
    189 
    190 ///Returns black for light colors and white for the dark ones.
    191 inline Color distantBW(const Color &c){
    192   return (.2125*c.red()+.7154*c.green()+.0721*c.blue())<.5 ? WHITE : BLACK;
    193 }
    194 
    195 /// @}
     202
     203  /// @}
    196204
    197205} //END OF NAMESPACE LEMON
Note: See TracChangeset for help on using the changeset viewer.