diff options
author | Thomas Jourdan <b.vehikel@googlemail.com> | 2010-01-31 16:44:47 (GMT) |
---|---|---|
committer | Thomas Jourdan <b.vehikel@googlemail.com> | 2010-01-31 16:44:47 (GMT) |
commit | c81c18ddf83a97147e1025129a65fe538c34acb7 (patch) | |
tree | 9ac7c2510bfe7dbcc4bf1bc73890cb3f4903c932 /ep_colorgamut_triadic.py | |
parent | 5997b56f004cea4d7ee344f47e6ba2f41e10f119 (diff) |
improving color scheme
Diffstat (limited to 'ep_colorgamut_triadic.py')
-rw-r--r-- | ep_colorgamut_triadic.py | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/ep_colorgamut_triadic.py b/ep_colorgamut_triadic.py new file mode 100644 index 0000000..222e49d --- /dev/null +++ b/ep_colorgamut_triadic.py @@ -0,0 +1,95 @@ +# coding: UTF-8 +# Copyright 2009 Thomas Jourdan +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +"""Extension point for color constraints. +This module handles a continuous red, green, blue and alpha color space.""" + +import random +import colorsys +import model_random +import model_locus +import exon_color +from gettext import gettext as _ + +class TriadicColorGamut(model_locus.Locus): + """Manages a series of monochromatic colors.""" + + def __init__(self, trunk): + """Color gamut constructor.""" + super(TriadicColorGamut, self).__init__(trunk) + self.hue = 0.0 + + def __eq__(self, other): + """Equality based on the gamuts components.""" + equal = isinstance(other, TriadicColorGamut) \ + and self.hue == other.hue + return equal + + def randomize(self): + """Set hue. + """ + self.hue = random.random() + + def get_randomized_color(self, path): + """Set red, green, blue and alpha to random values. + """ + hue_dircetion = random.choice([-1, 0, 1]) + hue = self._get_hue(hue_dircetion) + lightness = random.random() + saturation = random.random() + alpha = random.random() + rgb = colorsys.hls_to_rgb(hue, lightness, saturation) + color = exon_color.Color(path, rgb[0], rgb[1], rgb[2], alpha) + color.set_base_color(hue_dircetion, 0, 0) + return color + + def mutate(self): + """Make small random changes in hue. + """ + self.hue = model_random.cyclic_limit(self.hue + model_random.jitter(0.1)) + + def mutate_color(self, color): + """Adjust rgba value to mutated hue. + pre: len(color.rgba) == 4 + """ + rgba = color.rgba + dummy, lightness, saturation = colorsys.rgb_to_hls( \ + rgba[0], rgba[1], rgba[2]) + hue = self._get_hue(color.base_diff_hue) + rgb = colorsys.hls_to_rgb(hue, lightness, saturation) + color.rgba = (rgb[0], rgb[1], rgb[2], rgba[3]) + + def explain(self, formater): + formater.text_item('Triadic color scheme') + + def copy(self): + """The TriadicColorGamut copy constructor + # check for distinct references, needs to copy content, not references + post: __return__ is not self + """ + new_one = TriadicColorGamut(self.get_trunk()) + new_one.hue = self.hue + return new_one + + def _get_hue(self, hue_dircetion): + if hue_dircetion < 0: + hue = model_random.cyclic_limit(self.hue - (120.0 / 360.0)) + elif hue_dircetion > 0: + hue = model_random.cyclic_limit(self.hue + (120.0 / 360.0)) + else: + hue = self.hue + return hue |