interpolator split
This commit is contained in:
parent
72bdf822bc
commit
ba48810f34
|
@ -208,7 +208,7 @@ class LinearSpline(Spline):
|
|||
|
||||
class GUI(Animation):
|
||||
|
||||
B_DUPLICATE, B_WRITE, B_DELETE, B_LINEAR, B_CUBIC = range(5)
|
||||
B_DUPLICATE, B_WRITE, B_DELETE, B_LINEAR, B_CUBIC, B_SPLIT = range(6)
|
||||
|
||||
def __init__(self, parent):
|
||||
Animation.__init__(self, parent, unfiltered=True)
|
||||
|
@ -217,6 +217,7 @@ class GUI(Animation):
|
|||
self.display_surface = self.get_display_surface()
|
||||
self.time_filter = self.get_game().time_filter
|
||||
self.delegate = self.get_delegate()
|
||||
self.split = False
|
||||
self.success_indicator_active = True
|
||||
self.success_indicator_blink_count = 0
|
||||
self.load_configuration()
|
||||
|
@ -230,7 +231,7 @@ class GUI(Animation):
|
|||
self.set_buttons()
|
||||
self.active = False
|
||||
self.set_nodeset_index()
|
||||
self.set_yrange()
|
||||
self.set_y_range()
|
||||
self.set_markers()
|
||||
self.subscribe(self.respond_to_command)
|
||||
self.subscribe(self.respond_to_mouse_down, MOUSEBUTTONDOWN)
|
||||
|
@ -285,10 +286,10 @@ class GUI(Animation):
|
|||
|
||||
def set_buttons(self):
|
||||
self.buttons = buttons = []
|
||||
text = "Duplicate", "Write", "Delete", "Linear", "Cubic"
|
||||
text = "Duplicate", "Write", "Delete", "Linear", "Cubic", "[---]"
|
||||
x = 0
|
||||
for ii in xrange(5):
|
||||
buttons.append(Button(self, text[ii], x))
|
||||
for instruction in text:
|
||||
buttons.append(Button(self, instruction, x))
|
||||
x += buttons[-1].location.w + 10
|
||||
|
||||
def set_nodeset_index(self, increment=None, index=None):
|
||||
|
@ -320,31 +321,38 @@ class GUI(Animation):
|
|||
self.set_nodeset_index(0)
|
||||
return self.parent[self.nodeset_index]
|
||||
|
||||
def set_yrange(self):
|
||||
def set_y_range(self):
|
||||
width = self.plot_rect.w
|
||||
nodeset = self.get_nodeset()
|
||||
self.yrange = yrange = [nodeset[0].y, nodeset[-1].y]
|
||||
self.y_range = y_range = [nodeset[0].y, nodeset[-1].y]
|
||||
x = 0
|
||||
while x < width:
|
||||
y = nodeset.get_y(self.get_function_coordinates(x)[0])
|
||||
if y < yrange[0]:
|
||||
yrange[0] = y
|
||||
elif y > yrange[1]:
|
||||
yrange[1] = y
|
||||
if y < y_range[0]:
|
||||
y_range[0] = y
|
||||
elif y > y_range[1]:
|
||||
y_range[1] = y
|
||||
x += width * .01
|
||||
if yrange[1] - yrange[0] == 0:
|
||||
offset = self.flat_y_range / 2.0
|
||||
yrange[0] -= offset
|
||||
yrange[1] += offset
|
||||
print yrange, offset
|
||||
if y_range[1] - y_range[0] == 0:
|
||||
y_range[1] += self.flat_y_range
|
||||
if self.split:
|
||||
self.adjust_for_split(y_range, nodeset)
|
||||
self.set_axis_labels()
|
||||
|
||||
def adjust_for_split(self, y_range, nodeset):
|
||||
middle = nodeset[0].y
|
||||
below, above = middle - y_range[0], y_range[1] - middle
|
||||
if below > above:
|
||||
y_range[1] += below - above
|
||||
else:
|
||||
y_range[0] -= above - below
|
||||
|
||||
def set_axis_labels(self):
|
||||
self.axis_labels = labels = []
|
||||
nodeset, formatted, render, rect, yr = (self.get_nodeset(),
|
||||
self.get_formatted_measure,
|
||||
self.font.render,
|
||||
self.plot_rect, self.yrange)
|
||||
self.plot_rect, self.y_range)
|
||||
for ii, node in enumerate(nodeset[0::len(nodeset) - 1]):
|
||||
xs = render(formatted(node.x), True, (0, 0, 0), (255, 255, 255))
|
||||
xsr = xs.get_rect()
|
||||
|
@ -434,6 +442,9 @@ class GUI(Animation):
|
|||
self.set_nodeset_index(1)
|
||||
self.store_in_configuration()
|
||||
redraw = True
|
||||
elif bi == self.B_SPLIT:
|
||||
self.split = not self.split
|
||||
redraw = True
|
||||
elif plot_rect.collidepoint(pos) and \
|
||||
not self.collide_markers(pos):
|
||||
xp, yp = pos[0] - plot_rect.left, pos[1] - plot_rect.top
|
||||
|
@ -453,7 +464,7 @@ class GUI(Animation):
|
|||
self.store_in_configuration()
|
||||
redraw = True
|
||||
if redraw:
|
||||
self.set_yrange()
|
||||
self.set_y_range()
|
||||
self.set_markers()
|
||||
self.draw()
|
||||
|
||||
|
@ -467,7 +478,7 @@ class GUI(Animation):
|
|||
if nodeset.add_node(map(float, result.group(1, 2))) is not None:
|
||||
nodeset.remove(old, False)
|
||||
self.store_in_configuration()
|
||||
self.set_yrange()
|
||||
self.set_y_range()
|
||||
self.set_axis_labels()
|
||||
self.set_markers()
|
||||
self.draw()
|
||||
|
@ -511,7 +522,7 @@ class GUI(Animation):
|
|||
|
||||
def get_function_coordinates(self, xp=0, yp=0):
|
||||
nodeset = self.get_nodeset()
|
||||
x_min, x_max, (y_min, y_max) = nodeset[0].x, nodeset[-1].x, self.yrange
|
||||
x_min, x_max, (y_min, y_max) = nodeset[0].x, nodeset[-1].x, self.y_range
|
||||
rect = self.plot_rect
|
||||
x = float(xp) / (rect.right - rect.left) * (x_max - x_min) + x_min
|
||||
y = float(yp) / (rect.bottom - rect.top) * (y_min - y_max) + y_max
|
||||
|
@ -525,7 +536,7 @@ class GUI(Animation):
|
|||
|
||||
def get_plot_coordinates(self, x=0, y=0):
|
||||
nodeset = self.get_nodeset()
|
||||
x_min, x_max, (y_min, y_max) = nodeset[0].x, nodeset[-1].x, self.yrange
|
||||
x_min, x_max, (y_min, y_max) = nodeset[0].x, nodeset[-1].x, self.y_range
|
||||
x_ratio = float(x - x_min) / (x_max - x_min)
|
||||
rect = self.plot_rect
|
||||
xp = x_ratio * (rect.right - rect.left) + rect.left
|
||||
|
|
Loading…
Reference in New Issue