summaryrefslogtreecommitdiff
path: root/host/simu/model/table.py
diff options
context:
space:
mode:
authorNicolas Schodet2012-05-06 02:42:49 +0200
committerNicolas Schodet2012-05-06 11:06:37 +0200
commitb6370787b3009ed094705d235ce53d90ff816804 (patch)
tree6d2cc8ba82c0514aea8807710c067e137cf6273d /host/simu/model/table.py
parent84bcdfe2f6ada6a6baf3a49c4274f761fcb8732d (diff)
host/simu/model/table: handle multi level sensors
Diffstat (limited to 'host/simu/model/table.py')
-rw-r--r--host/simu/model/table.py16
1 files changed, 14 insertions, 2 deletions
diff --git a/host/simu/model/table.py b/host/simu/model/table.py
index 23b1fcb4..5a5550cf 100644
--- a/host/simu/model/table.py
+++ b/host/simu/model/table.py
@@ -36,10 +36,21 @@ class Table (Observable):
Observable.__init__ (self)
self.obstacles = [ ]
+ def __level (self, level):
+ if level is None:
+ return None
+ try:
+ 0 in level
+ except TypeError:
+ return (level, )
+ else:
+ return level
+
def intersect (self, a, b, level = None, comp = None, exclude = None):
+ level = self.__level (level)
i = None
for o in self.obstacles:
- if ((level is None or level == o.level)
+ if ((level is None or o.level in level)
and (exclude is None or not exclude (o))):
d = o.intersect (a, b)
if d is not None and (i is None or comp (d, i.distance)):
@@ -50,10 +61,11 @@ class Table (Observable):
def nearest (self, pos, level = None, max = None, exclude = None):
"""Return nearest object."""
+ level = self.__level (level)
no = None
nds = None
for o in self.obstacles:
- if (o.pos is not None and (level is None or level == o.level)
+ if (o.pos is not None and (level is None or o.level in level)
and (exclude is None or not exclude (o))):
ds = (pos[0] - o.pos[0]) ** 2 + (pos[1] - o.pos[1]) ** 2
if (max is None or ds < max ** 2) and (nds is None or ds < nds):