summaryrefslogtreecommitdiff
path: root/ricky/imgrid/params.py
blob: 580c2f275da208a0b36cdfc5d7eef67757ab28ab (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
import re, 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.color import Color

from ricky.imgrid.selections import *

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

  @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 ImGridParams(Params):
    def __init__(self):
        self._params = [
           Username(name="username", required=0),
           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]),
        ]
    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