From 5532fb5e50d071be08e3c37404d1755748762d7c Mon Sep 17 00:00:00 2001 From: Nicolas Schodet Date: Thu, 29 Apr 2010 23:04:20 +0200 Subject: host/simu/robots/marcel: add actuator simulation, refs #131 --- host/simu/robots/marcel/view/robot.py | 36 ++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) (limited to 'host/simu/robots/marcel/view/robot.py') diff --git a/host/simu/robots/marcel/view/robot.py b/host/simu/robots/marcel/view/robot.py index 181d348b..4e2135f2 100644 --- a/host/simu/robots/marcel/view/robot.py +++ b/host/simu/robots/marcel/view/robot.py @@ -23,14 +23,19 @@ # }}} """Marcel robot view.""" import simu.inter.drawable +from math import cos + +from simu.view.table_eurobot2010 import RED, corn_attr class Robot (simu.inter.drawable.Drawable): - def __init__ (self, onto, position_model): + def __init__ (self, onto, position_model, loader_model): """Construct and make connections.""" simu.inter.drawable.Drawable.__init__ (self, onto) self.position_model = position_model self.position_model.register (self.__position_notified) + self.loader_model = loader_model + self.loader_model.register (self.__loader_notified) def __position_notified (self): """Called on position modifications.""" @@ -38,6 +43,11 @@ class Robot (simu.inter.drawable.Drawable): self.angle = self.position_model.angle self.update () + def __loader_notified (self): + """Called on loader modifications.""" + self.clamp_pos = self.loader_model.clamp_pos + self.update () + def draw (self): """Draw the robot.""" self.reset () @@ -57,6 +67,30 @@ class Robot (simu.inter.drawable.Drawable): self.draw_line ((0, +f / 2), (0, -f / 2), fill = axes_fill) self.draw_line ((-wr, f / 2), (+wr, f / 2), fill = axes_fill) self.draw_line ((-wr, -f / 2), (+wr, -f / 2), fill = axes_fill) + # Draw robot clamp. + if (self.clamp_pos[0] is not None + and self.clamp_pos[1] is not None): + l = self.loader_model.CLAMP_LENGTH * cos ( + self.loader_model.elevator_angle) + y = self.loader_model.CLAMP_WIDTH / 2 - self.clamp_pos[0] + self.draw_line ((120, y - 10), (120 + 0.15 * l, y), + (120 + 0.85 * l, y), (120 + l, y - 10)) + y = -self.loader_model.CLAMP_WIDTH / 2 + self.clamp_pos[1] + self.draw_line ((120, y + 10), (120 + 0.15 * l, y), + (120 + 0.85 * l, y), (120 + l, y + 10)) + # Draw clamp load. + if self.loader_model.clamp_load: + elements = self.loader_model.clamp_load + tickness = sum (e.radius * 2 for e in elements) + y = tickness / 2 + for e in elements: + if hasattr (e, 'black'): + attr = corn_attr[e.black] + else: + attr = dict (fill = RED) + self.draw_circle ((120 + l / 2, y - e.radius), + e.radius, **attr) + y -= e.radius * 2 # Extends. simu.inter.drawable.Drawable.draw (self) -- cgit v1.2.3