aboutsummaryrefslogtreecommitdiff
path: root/pixelmappers/SimpleMapper.py
blob: 4d12fe4735f20a1a1cf3522b2bc88e92a3feb208 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
from operationscore.PixelMapper import *
import util.Geo as Geo
import sys
class SimpleMapper(PixelMapper):
    def mappingFunction(self, eventLocation, screen):
        if type(eventLocation) == type(tuple()):
            bestDist = sys.maxint 
            bestPixel = None
            [x,y] = eventLocation
            for (x,pixel) in screen.pixelsInRange(x-self['CutoffDist'], \
                    x+self['CutoffDist']):
                pixelDist = Geo.dist(pixel.location, eventLocation)
                if pixelDist < bestDist:
                    bestPixel = pixel
                    bestDist = pixelDist
            return [(bestPixel,1)]
        elif type(type(str)):
            #[{x}>5,{y}<k]
            #TODO: we should probably encapsulate this somewhere
            ret = []
            eventLocation = eventLocation.replace('{x}', 'pixel.location[0]')
            eventLocation = eventLocation.replace('{y}', 'pixel.location[1]')
            for pixel in screen:
                try:
                    preValid = eval(eventLocation)
                    pixelValid = sum(preValid) == len(preValid) #TODO: some
                    #optimizations possible.  This might be slow in the long run
                    if pixelValid:
                        ret.append((pixel, 1))
                except Exception as exp:
                    raise Exception('Bad event condition')
            return ret