diff options
Diffstat (limited to 'ep_colorconstraint_bw.py')
-rw-r--r-- | ep_colorconstraint_bw.py | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/ep_colorconstraint_bw.py b/ep_colorconstraint_bw.py new file mode 100644 index 0000000..a55c511 --- /dev/null +++ b/ep_colorconstraint_bw.py @@ -0,0 +1,62 @@ +# coding: UTF8 +# 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 + +import random +import model_locus + +EPSILON = 0.00001 + +class BwColorConstraint(model_locus.Locus): + """BwColorConstraint + """ + + def __init__(self, trunk): + """Color constraint constructor + """ + super(BwColorConstraint, self).__init__(trunk) + + def filter(self, rgba): + """Set constraint to red, green, blue and alpha values. + post: len(__return__) == 4 + """ + gray = round((rgba[0] + rgba[1] + rgba[2]) / 3.0) + alpha = round(rgba[3]) + return (gray, gray, gray, alpha) + + def randomize(self): + """Set black or white and alpha to random values. + post: len(__return__) == 4 + post: __return__[0] == 0 or __return__[0] == 1 + post: __return__[3] == 0 or __return__[3] == 1 + """ + gray = 1.0*random.randint(0, 1) + alpha = 1.0*random.randint(0, 1) + return (gray, gray, gray, alpha) + + def mutate(self, rgba): + """Make random switch between black and white. + post: len(__return__) == 4 + """ + return self.randomize() + + def explain(self, rgba, alfa=True): + """ + pre: len(rgba) == 4 + """ + part1 = 'black' if abs(rgba[0]) < EPSILON else 'white' + part2 = ', %d%% opaque' % (100*rgba[3]) if alfa else '' + return part1 + part2 |