From b6370787b3009ed094705d235ce53d90ff816804 Mon Sep 17 00:00:00 2001 From: Nicolas Schodet Date: Sun, 6 May 2012 02:42:49 +0200 Subject: host/simu/model/table: handle multi level sensors --- host/simu/model/table.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'host') 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): -- cgit v1.2.3