summaryrefslogtreecommitdiff
path: root/host/simu/robots/guybrush/view
diff options
context:
space:
mode:
Diffstat (limited to 'host/simu/robots/guybrush/view')
-rw-r--r--host/simu/robots/guybrush/view/clamps.py33
-rw-r--r--host/simu/robots/guybrush/view/robot.py43
2 files changed, 73 insertions, 3 deletions
diff --git a/host/simu/robots/guybrush/view/clamps.py b/host/simu/robots/guybrush/view/clamps.py
index bdcb08a4..25d3f107 100644
--- a/host/simu/robots/guybrush/view/clamps.py
+++ b/host/simu/robots/guybrush/view/clamps.py
@@ -23,7 +23,8 @@
# }}}
"""Guybrush clamps."""
from simu.inter.drawable import Drawable
-from math import pi
+from math import pi, cos, sin, radians
+from simu.view.table_eurobot2012 import YELLOW
GREY = '#808080'
BLACK = '#000000'
@@ -63,3 +64,33 @@ class ClampsSide (Drawable):
if not i:
self.trans_rotate (pi)
self.trans_pop ()
+ # Draw upper clamp.
+ ud = self.model.upper_clamp_up_down
+ c = self.model.upper_clamp_clamping
+ io = self.model.upper_clamp_in_out
+ if (ud is not None and c is not None and io is not None):
+ self.trans_push ()
+ # Approximation: map cylinder extension to angle.
+ a = radians (ud * 75 + 87)
+ x = 40 + 188 * cos (a)
+ y = 75 + 188 * sin (a)
+ self.trans_translate ((x, y))
+ self.trans_rotate ((1 - ud) * 0.5 * pi)
+ self.draw_line ((0, 56), (0, -25), fill = GREY)
+ # Draw level 2 clamp.
+ for e, y, in self.model.upper_clamp_content:
+ if e.level == 2:
+ self.draw_polygon ((-15, -15), (-15 - 70, -15),
+ (-15 - 13 - 44, -15 + 48.5),
+ (-15 - 13, -15 + 48.8), fill = YELLOW,
+ outline = BLACK)
+ break
+ self.draw_line ((-15, -10 + c * 5), (-15 - 70, -10 + c * 5))
+ # Draw level 3 clamp.
+ for e, y in self.model.upper_clamp_content:
+ if e.level == 3:
+ self.draw_rectangle ((-12 * io - e.radius * 2, 54),
+ (-12 * io, 50), fill = GREY)
+ self.draw_line ((-12 * io - 35, 55), (-12 * io, 55),
+ (-12 * io, 55 - c * 33), (-12 * io - 35, 55 - c * 33))
+ self.trans_pop ()
diff --git a/host/simu/robots/guybrush/view/robot.py b/host/simu/robots/guybrush/view/robot.py
index 79c61d15..a7377a66 100644
--- a/host/simu/robots/guybrush/view/robot.py
+++ b/host/simu/robots/guybrush/view/robot.py
@@ -23,12 +23,14 @@
# }}}
"""Guybrush robot view."""
import simu.inter.drawable
-from math import pi, cos
-from simu.view.table_eurobot2012 import WHITE, BLACK
+from math import pi, cos, sin, radians
+from simu.view.table_eurobot2012 import WHITE, BLACK, YELLOW
COLOR_ROBOT = '#000000'
COLOR_AXES = '#202040'
+GREY = '#808080'
+
class Robot (simu.inter.drawable.Drawable):
def __init__ (self, onto, position_model, clamps_model):
@@ -62,6 +64,43 @@ class Robot (simu.inter.drawable.Drawable):
self.draw_oval ((x, y), sx * e.radius, e.radius,
fill = color)
sx = - sx
+ # Draw upper clamps.
+ ud = self.clamps_model.upper_clamp_up_down
+ c = self.clamps_model.upper_clamp_clamping
+ io = self.clamps_model.upper_clamp_in_out
+ if (ud is not None and c is not None and io is not None
+ and ud > 0.1):
+ self.trans_push ()
+ # Approximation: map cylinder extension to angle.
+ cx = -cos (radians (ud * 75 + 87))
+ x = -40 + 188 * cx
+ self.trans_translate ((x, 0))
+ # Draw level 2 clamp.
+ for e, y, in self.clamps_model.upper_clamp_content:
+ if e.level == 2:
+ self.draw_rectangle ((15 * cx, 75), (85 * cx, -75),
+ fill = YELLOW)
+ self.draw_rectangle ((28 * cx, 62), (72 * cx, -62),
+ fill = YELLOW)
+ break
+ self.draw_line ((15 * cx, 80 - c * 10), (85 * cx, 80 - c * 10))
+ self.draw_line ((15 * cx, -80 + c * 10), (85 * cx, -80 + c * 10))
+ # Draw level 3 clamp.
+ for side in (1, -1):
+ a = side * -0.61 * (1 - io)
+ rx, ry = cos (a), sin (a)
+ for e, y in self.clamps_model.upper_clamp_content:
+ if e.level == 3 and y * side > 0:
+ color = WHITE if e.value else BLACK
+ y = 80 - y * side
+ self.draw_oval ((rx * 72 + ry * y, ry * 72 + rx * y + side * 80),
+ e.radius * cx, e.radius, fill = color)
+ self.trans_push ()
+ self.trans_translate ((0, side * 80))
+ self.trans_rotate (a)
+ self.draw_rectangle ((12, -4 * side), (12 + 35, 43 * side), fill = GREY)
+ self.trans_pop ()
+ self.trans_pop ()
# Draw robot body.
self.draw_polygon ((150, 171.5), (-80, 171.5), (-130, 121.5),
(-130, -121.5), (-80, -171.5), (150, -171.5),