label range

This commit is contained in:
Frank DeMarco 2014-01-20 00:24:09 +09:00
parent 0975a933e5
commit b5fb01b56a
1 changed files with 35 additions and 17 deletions

View File

@ -240,7 +240,7 @@ class GUI(GameChild):
index = limit
self.nodeset_index = index
self.set_nodeset_label()
self.set_axis_labels()
self.set_yrange()
self.set_markers()
def set_nodeset_label(self):
@ -250,26 +250,42 @@ class GUI(GameChild):
rect.bottomright = self.display_surface.get_rect().bottomright
self.nodeset_label, self.nodeset_label_rect = surface, rect
def set_axis_labels(self):
def set_yrange(self):
width = self.plot_rect.w
nodeset = self.get_nodeset()
labels = []
xr, yr = (nodeset[0].x, nodeset[-1].x), (nodeset[0].y, nodeset[-1].y)
count = self.axis_label_count
rect = self.plot_rect
for ii in xrange(count):
ratio = float(ii) / (count - 1)
x = self.get_formatted_measure((xr[1] - xr[0]) * ratio + xr[0])
xs = self.font.render(x, True, (0, 0, 0), (255, 255, 255))
self.yrange = yrange = [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
x += width * .01
self.set_axis_labels()
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)
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()
xsr.midtop = (rect.right - rect.left) * ratio + rect.left, \
rect.bottom
y = self.get_formatted_measure((yr[1] - yr[0]) * ratio + yr[0])
ys = self.font.render(y, True, (0, 0, 0), (255, 255, 255))
xsr.top = rect.bottom
if not ii:
xsr.left = rect.left
else:
xsr.right = rect.right
ys = render(formatted(yr[ii]), True, (0, 0, 0), (255, 255, 255))
ysr = ys.get_rect()
ysr.midright = rect.left, rect.bottom - (rect.bottom - rect.top) * \
ratio
ysr.right = rect.left
if not ii:
ysr.bottom = rect.bottom
else:
ysr.top = rect.top
labels.append(((xs, xsr), (ys, ysr)))
self.axis_labels = labels
def get_nodeset(self):
return self.parent[self.nodeset_index]
@ -322,6 +338,7 @@ class GUI(GameChild):
xp, yp = pos[0] - plot_rect.left, pos[1] - plot_rect.top
self.get_nodeset().add_node(
self.get_function_coordinates(xp, yp))
self.set_yrange()
self.set_markers()
redraw = True
elif event.button == 3:
@ -333,6 +350,7 @@ class GUI(GameChild):
marker = self.collide_markers(pos)
if marker:
self.get_nodeset().remove(marker.node)
self.set_yrange()
self.set_markers()
redraw = True
redraw and self.draw()