Commit dc810420199b1cf789b9546533df22f5a11d808c
1 parent
d5bc030b
Exists in
master
Added comments and docstrings
Showing
1 changed file
with
17 additions
and
12 deletions
Show diff stats
telemetry/code/monitor/graph_plotter_rewrite.py
| 1 | 1 | #!/usr/bin/env python |
| 2 | 2 | |
| 3 | +# Tool to draw live graphs of data coming in from serial port | |
| 4 | +# Written as a telemetry tool by: | |
| 5 | +# The UoN Robot Wars Project, 2018 | |
| 6 | + | |
| 7 | +# This code is incomplete, and is missing core features | |
| 8 | + | |
| 3 | 9 | import pyglet |
| 4 | 10 | #import math |
| 5 | 11 | #import time |
| ... | ... | @@ -19,12 +25,14 @@ timeout=1 |
| 19 | 25 | |
| 20 | 26 | class Series: |
| 21 | 27 | def __init__(self, points=100, title="Series title", xname="x-axis name", yname="y-axis name"): |
| 28 | + """Set up an object to store a 2D data series""" | |
| 22 | 29 | self.title = title |
| 23 | 30 | self.xname = xname |
| 24 | 31 | self.yname = yname |
| 25 | 32 | self.data = [] |
| 26 | 33 | self.points = points |
| 27 | 34 | def addpoint(self, point): |
| 35 | + """Add a point to the dataset, and remove the oldest, if necessary""" | |
| 28 | 36 | self.data.append(point) |
| 29 | 37 | if len(self.data) > self.points: |
| 30 | 38 | del self.data[0] |
| ... | ... | @@ -41,6 +49,7 @@ class Plot(pyglet.window.Window): |
| 41 | 49 | self.set_caption(self.series.title) |
| 42 | 50 | |
| 43 | 51 | def on_resize(self, width, height): |
| 52 | + """Handle a resize event from the pyglet event loop""" | |
| 44 | 53 | self.bounds = ((int(self.width * self.margins[0]), int(self.width * (1 - self.margins[0]))), |
| 45 | 54 | (int(self.height * self.margins[1]), int(self.height * (1 - self.margins[1])))) |
| 46 | 55 | pyglet.window.Window.on_resize(self, width, height) |
| ... | ... | @@ -66,6 +75,7 @@ class Plot(pyglet.window.Window): |
| 66 | 75 | heading.draw() |
| 67 | 76 | |
| 68 | 77 | def drawAxis(self, axis): # axis=0 is x, 1 is y |
| 78 | + """Draw the gridlines and labels for one axis, specified in the last argument""" | |
| 69 | 79 | limita = self.bounds[1-axis][1] |
| 70 | 80 | limitb = self.bounds[1-axis][0] |
| 71 | 81 | start = self.bounds[axis][0] |
| ... | ... | @@ -97,23 +107,17 @@ class Plot(pyglet.window.Window): |
| 97 | 107 | font_name=self.font, font_size=self.height*self.margins[axis]*0.3, |
| 98 | 108 | x=0, y=self.height/2, |
| 99 | 109 | anchor_x='center', anchor_y='top') |
| 100 | - pyglet.gl.glPushMatrix() | |
| 110 | + pyglet.gl.glPushMatrix() # Set up a new context to avoid confusing the main one | |
| 111 | + # Tranformation to rotate label, and ensure it ends up in the right place | |
| 101 | 112 | pyglet.gl.glTranslatef(self.height//2, self.height//2, 0.0) |
| 102 | - pyglet.gl.glRotatef(90.0, 0.0, 0.0, 1.0) | |
| 113 | + pyglet.gl.glRotatef(90.0, 0.0, 0.0, 1.0) | |
| 114 | + # Draw the axis title using the rotated coordinate system | |
| 103 | 115 | axistitle.draw() |
| 116 | + # Return everything to its previous state | |
| 104 | 117 | pyglet.gl.glPopMatrix() |
| 105 | - #pyglet.gl.glRotatef(-90.0, 0.0, 0.0, 1.0) | |
| 106 | - #pyglet.gl.glTranslatef(-self.width//2, -self.height//2, 0.0) | |
| 107 | 118 | |
| 108 | 119 | tag.draw() |
| 109 | 120 | |
| 110 | - | |
| 111 | - | |
| 112 | - | |
| 113 | - | |
| 114 | - | |
| 115 | - | |
| 116 | - | |
| 117 | 121 | testseries = Series() |
| 118 | 122 | |
| 119 | 123 | plots = [] |
| ... | ... | @@ -121,10 +125,11 @@ plots.append(Plot(testseries)) |
| 121 | 125 | |
| 122 | 126 | def pollSerial(elapsed): |
| 123 | 127 | """Check serial port for incoming data""" |
| 124 | - # Note, elapsed is time since last call of this function | |
| 128 | + # Note: 'elapsed' is time since last call of this function | |
| 125 | 129 | values = datafeed.readline().strip().split(", ") |
| 126 | 130 | testseries.addpoint(values) |
| 127 | 131 | |
| 132 | +# Pyglet looks after the main event loop, but this ensures that data keeps being read in | |
| 128 | 133 | pyglet.clock.schedule_interval(pollSerial, 0.1) |
| 129 | 134 | |
| 130 | 135 | pyglet.app.run() |
| 131 | 136 | \ No newline at end of file | ... | ... |