summaryrefslogtreecommitdiff
path: root/ricky/imgrid/params.py
diff options
context:
space:
mode:
Diffstat (limited to 'ricky/imgrid/params.py')
-rw-r--r--ricky/imgrid/params.py214
1 files changed, 131 insertions, 83 deletions
diff --git a/ricky/imgrid/params.py b/ricky/imgrid/params.py
index 580c2f2..5740ebc 100644
--- a/ricky/imgrid/params.py
+++ b/ricky/imgrid/params.py
@@ -1,61 +1,92 @@
-import re, random
+import random
from ricky.params import Params
-from ricky.param import Param
-from ricky.param.selection import Selection
-from ricky.param.selections import Selections
from ricky.param.username import Username
from ricky.param.imageurl import ImageUrl
from ricky.param.multiselect import MultiSelect
-from ricky.param.numberrange import NumberRange
+from ricky.param.constrainednumber import ConstrainedNumber
from ricky.param.color import Color
+from ricky.param.bool import Bool
-from ricky.imgrid.selections import *
+_TRANSITION_OPTIONS = [
+ "background",
+ "dither",
+ "random",
+ "tile",
+ "edge"
+]
-class Param_Zoom(NumberRange):
- def __init__(self, **kwargs):
- super(Param_Zoom, self).__init__(**kwargs)
- self.exclusion_range = kwargs['exclusion_range']
- def test_value(self):
- return not ((self.value > self.exclusion_range[0]) and (self.value < self.exclusion_range[1]))
- def randomize(self):
- weights_total = sum(map(lambda x: x["weight"], self.selections())) + 10
- choice = random.randint(0, weights_total)
- position = 0
- for elem in self.selections():
- position += elem["weight"]
- if position >= choice:
- self.value = elem["value"]
- return
- max_tries = 10000
- while(max_tries):
- self.value = round(random.uniform(self.range_max, self.range_min), 2)
- if self.test_value: return
- max_tries -= 1;
- raise ValueError
+_FILETYPE_OPTIONS = [
+ "png",
+ "jpg",
+ "gif",
+]
- @property
- def value(self):
- return super(MultiSelect, self).value_get()
- @value.setter
- def value(self, value):
- self._value = value
- if not self._value is None:
- self.is_ready = 1
- self.set_by_user = 1
-class Param_Opacity(NumberRange):
- def __init__(self, **kwargs):
- super(Param_Opacity, self).__init__(**kwargs)
- def randomize(self):
- weights_total = sum(map(lambda x: x["weight"], self.selections()) + self.range_max - self.range_min)
- choice = random.randint(0, weights_total)
- position = 0
- for elem in self.selections():
- position += elem["weight"]
- if position >= choice:
- self.value = elem["value"]
- return
- self.value = round(random.uniform(self.range_min,range_max), 2),
+class Param_Zoom(ConstrainedNumber):
+ def __init__(self, **kwargs):
+ super(Param_Zoom, self).__init__(**kwargs)
+ self.exclusion_range = kwargs['exclusion_range']
+
+ def test_value(self):
+ return not (
+ (self.value > self.exclusion_range[0]) and
+ (self.value < self.exclusion_range[1])
+ )
+
+ def randomize(self):
+ weights_total = sum(
+ map(lambda x: x["weight"], self.probabilities())
+ ) + 10
+ choice = random.randint(0, weights_total)
+ position = 0
+ for elem in self.probabilities():
+ position += elem["weight"]
+ if position >= choice:
+ self.value = elem["value"]
+ return
+ max_tries = 10000
+ while(max_tries):
+ self.value = round(
+ random.uniform(self.range_max, self.range_min), 2
+ )
+ if self.test_value:
+ return
+ max_tries -= 1
+ raise ValueError
+
+ @property
+ def value(self):
+ return super(MultiSelect, self).value_get()
+
+ @value.setter
+ def value(self, value):
+ self._value = value
+ if self._value is not None:
+ self.is_ready = 1
+ self.set_by_user = 1
+
+
+class Param_Opacity(ConstrainedNumber):
+ def __init__(self, **kwargs):
+ super(Param_Opacity, self).__init__(**kwargs)
+
+ def randomize(self):
+ weights_total = sum(
+ map(
+ lambda x: x["weight"], self.probabilities()
+ ) + self.range_max - self.range_min
+ )
+ choice = random.randint(0, weights_total)
+ position = 0
+ for elem in self.probabilities():
+ position += elem["weight"]
+ if position >= choice:
+ self.value = elem["value"]
+ return
+ self.value = round(
+ random.uniform(self.range_min, self.range_max), 2
+ )
+
class ImGridParams(Params):
def __init__(self):
@@ -64,48 +95,65 @@ class ImGridParams(Params):
ImageUrl(name="bgimage", required=0),
ImageUrl(name="imageinstead", required=0),
ImageUrl(name="planebgimage", required=0),
- MultiSelect(name="format", required=0, selections=format_selections),
- MultiSelect(name="transition", required=1, selections=transition_selections),
- Color(name="skycolor", required=0, selections=skycolor_colors),
- Color(name="planebgcolor", required=0, selections=planebgcolor_colors),
- Color(name="bgcolor", required=0, selections=bgcolor_colors),
- Color(name="linecolor", required=0, selections=linecolor_colors),
- NumberRange(name="swing", required=0, selections=swing_selections, min=-170, max=170),
- NumberRange(name="tilt", required=0, selections=tilt_selections, min=-170, max=170),
- NumberRange(name="roll", required=0, selections=roll_selections, min=-170, max=170),
- NumberRange(name="width", required=0, selections=width_selections, min=100, max=800),
- NumberRange(name="height", required=0, selections=height_selections, min=100, max=800),
- NumberRange(name="linethickness", required=0, selections=linethickness_selections, min=1, max=30),
- NumberRange(name="opacity", required=0, selections=opacity_selections, min=0, max=1),
- NumberRange(name="spacing", required=0, selections=spacing_selections, min=2, max=100),
- MultiSelect(name="vlines", required=0, selections=vlines_selections),
- MultiSelect(name="hlines", required=0, selections=hlines_selections),
- MultiSelect(name="trim", required=0, selections=trim_selections),
- MultiSelect(name="shadow", required=0, selections=shadow_selections),
- Param_Zoom(name="zoom", required=0, selections=zoom_selections, min=-12, max=12, exclusion_range=[-1.1, 1.1]),
+ MultiSelect(
+ name="format",
+ required=False,
+ options=_FILETYPE_OPTIONS
+ ),
+ MultiSelect(
+ name="transition",
+ required=1,
+ options=_TRANSITION_OPTIONS
+ ),
+ Color(name="skycolor", required=False),
+ Color(name="planebgcolor", required=False),
+ Color(name="bgcolor", required=False),
+ Color(name="linecolor", required=False),
+ ConstrainedNumber(name="swing", required=False, min=-170, max=170),
+ ConstrainedNumber(name="tilt", required=False, min=-170, max=170),
+ ConstrainedNumber(name="roll", required=False, min=-170, max=170),
+ ConstrainedNumber(name="width", required=False, min=100, max=800),
+ ConstrainedNumber(name="height", required=False, min=100, max=800),
+ ConstrainedNumber(
+ name="linethickness",
+ required=False,
+ min=1,
+ max=30
+ ),
+ ConstrainedNumber(name="opacity", required=False, min=0, max=1),
+ ConstrainedNumber(name="spacing", required=False, min=2, max=100),
+ Bool(name="vlines", required=False),
+ Bool(name="hlines", required=False),
+ Bool(name="trim", required=False),
+ Bool(name="shadow", required=False),
+ Param_Zoom(
+ name="zoom",
+ required=False,
+ min=-12,
+ max=12,
+ exclusion_range=[-1.1, 1.1]
+ )
]
+
def test_values(self):
- p = self.params
return not any([
(self.param('spacing').value > self.param('width').value),
(self.param('spacing').value > self.param('height').value),
(self.param('linethickness').value > self.param('width').value),
(self.param('linethickness').value > self.param('height').value),
])
+
def randomize(self):
p = self.params
for el in p:
- if el in ['spacing', 'linethickness']:
- continue
- if el.set_by_user:
- continue
- el.randomize()
- for name in ['spacing', 'linethickness']:
- max_tries = 10000
- while(max_tries):
- self.param(name).randomize()
- if self.test_values():
- return
- max_tries -= 1
- raise ValueError
-
+ if el in ['spacing', 'linethickness']:
+ continue
+ el.randomize()
+ for name in ['spacing', 'linethickness']:
+ max_tries = 10000
+ while(max_tries):
+ self.param(name).randomize()
+ if self.test_values():
+ return
+ max_tries -= 1
+ raise ValueError