summaryrefslogtreecommitdiffhomepage
path: root/host/inter
diff options
context:
space:
mode:
authorNicolas Schodet2008-04-30 13:20:03 +0200
committerNicolas Schodet2008-04-30 13:20:03 +0200
commit960a716bceeeb0fbf58dec1859725a070d486f74 (patch)
tree1e0a64c4771011ab1171d5af884971f2e31634b4 /host/inter
parentc2f9b6a00b3fd23aa01c668725638800a28c540c (diff)
* host/inter, digital/io/src:
- added computed path drawing.
Diffstat (limited to 'host/inter')
-rw-r--r--host/inter/inter_node.py14
-rw-r--r--host/inter/path.py41
2 files changed, 54 insertions, 1 deletions
diff --git a/host/inter/inter_node.py b/host/inter/inter_node.py
index c238a4d5..403e2cb9 100644
--- a/host/inter/inter_node.py
+++ b/host/inter/inter_node.py
@@ -28,6 +28,7 @@ if __name__ == '__main__':
from inter import Inter, Obstacle
from dist_sensor import DistSensor
+from path import Path
from Tkinter import *
from mex.node import Node
from mex.msg import Msg
@@ -45,6 +46,7 @@ class InterNode (Inter):
IO_COLOR = 0xb1
IO_SERVO = 0xb2
IO_SHARPS = 0xb3
+ IO_PATH = 0xb4
def __init__ (self):
Inter.__init__ (self)
@@ -55,6 +57,7 @@ class InterNode (Inter):
self.node.register (self.IO_COLOR, self.handle_IO_COLOR)
self.node.register (self.IO_SERVO, self.handle_IO_SERVO)
self.node.register (self.IO_SHARPS, self.handle_IO_SHARPS)
+ self.node.register (self.IO_PATH, self.handle_IO_PATH)
self.tk.createfilehandler (self.node, READABLE, self.read)
self.date = 0
self.synced = True
@@ -72,6 +75,9 @@ class InterNode (Inter):
s.obstacles = self.obstacles
s.hide = True
self.tableview.robot.drawn.extend (self.dist_sensors)
+ self.path = Path (self.tableview.table)
+ self.tableview.drawn.append (self.path)
+ self.tableview
def createWidgets (self):
Inter.createWidgets (self)
@@ -174,12 +180,18 @@ class InterNode (Inter):
assert v >= 0 and v < 1024
self.node.response (m)
+ def handle_IO_PATH (self, msg):
+ self.path.path = [ ]
+ while len (msg) > 4:
+ self.path.path.append (msg.pop ('hh'))
+ self.update (self.path)
+
def place_obstacle (self, ev):
pos = self.tableview.screen_coord ((ev.x, ev.y))
if self.obstacles:
self.obstacles[0].pos = pos
else:
- self.obstacles.append (Obstacle (self.tableview, pos, 150))
+ self.obstacles.append (Obstacle (self.tableview.table, pos, 150))
self.tableview.drawn.append (self.obstacles[0])
self.update (*self.obstacles)
self.update (*self.dist_sensors)
diff --git a/host/inter/path.py b/host/inter/path.py
new file mode 100644
index 00000000..f1463f33
--- /dev/null
+++ b/host/inter/path.py
@@ -0,0 +1,41 @@
+# inter - Robot simulation interface. {{{
+#
+# Copyright (C) 2008 Nicolas Schodet
+#
+# APBTeam:
+# Web: http://apbteam.org/
+# Email: team AT apbteam DOT org
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# }}}
+"""Computed path drawing."""
+
+from Tkinter import *
+from drawable import *
+
+from math import pi, cos, sin, sqrt
+
+class Path (Drawable):
+ """Computed path drawing."""
+
+ def __init__ (self, onto):
+ Drawable.__init__ (self, onto)
+ self.path = [ ]
+
+ def draw (self):
+ self.reset ()
+ if len (self.path) > 2:
+ self.draw_line (self.path, fill = 'green', arrow = LAST)