Changeset 8cf0089


Ignore:
Timestamp:
05/29/11 22:54:27 (4 years ago)
Author:
xkolman2 <xkolman2@…>
Branches:
master
Children:
ccf09b3
Parents:
654689e
git-author:
xkolman2 <xkolman2@…> (05/29/11 22:54:27)
git-committer:
xkolman2 <xkolman2@…> (05/29/11 22:54:27)
Message:

add support for showing multiple POI at once

git-svn-id: https://nlp.fi.muni.cz/svn/gps_navigace/trunk@408 0858a4d0-ffff-46e5-938e-62b5ecb34222

Location:
modules
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • modules/mod_menu.py

    rc210815 r8cf0089  
    678678    self.addItem('poi', 'POI#route to', 'generic', "ml:showPOI:setupCategoryList:%s|set:menu:POICategories" % POISelectedAction2) 
    679679    self.addItem('poi', 'search#online', 'generic', "set:menu:searchWhere") 
     680    self.addItem('poi', 'visible#clear', 'generic', "showPOI:clearVisiblePOI|set:menu:None") 
     681 
    680682 
    681683    self.addPOIPOIAddFromWhereMenu() # chain the "add from where menu" 
  • modules/mod_showPOI.py

    r4c28b5d r8cf0089  
    3333    ranaModule.__init__(self, m, d, i) 
    3434    self.activePOI = None 
     35    self.visiblePOI = [] 
    3536    self.listMenusDirty = False 
    3637    self.drawActivePOI = False 
     
    5960    if self.drawActivePOI: 
    6061      proj = self.m.get('projection', None) 
    61       if proj and self.activePOI: 
    62         lat = self.activePOI.getLat() 
    63         lon = self.activePOI.getLon() 
    64         name = self.activePOI.getName() 
    65         distanceString = "" 
    66         pos = self.get('pos', None) 
    67         units = self.m.get('units', None) 
    68         if pos and units: 
    69           (lat1,lon1) = pos # current position coordinates 
    70           kiloMetricDistance = geo.distance(lat,lon,lat1,lon1) 
    71           unitString = units.km2CurrentUnitString(kiloMetricDistance, 0, True) 
    72           distanceString = " (%s)" % unitString 
    73  
    74  
    75         text = "" + name + distanceString 
    76          
    77         (x,y) = proj.ll2xy(lat, lon) 
    78         # draw the highlighting circle 
    79         cr.set_line_width(8) 
    80         cr.set_source_rgba(0.1, 0.6, 0.1, 0.55) # highlight circle color 
    81         cr.arc(x, y, 15, 0, 2.0 * math.pi) 
    82         cr.stroke() 
    83         cr.fill() 
    84  
    85         # draw the point 
    86         cr.set_source_rgb(0.0, 0.0, 0.0) 
    87         cr.set_line_width(10) 
    88         cr.arc(x, y, 3, 0, 2.0 * math.pi) 
    89         cr.stroke() 
    90         cr.set_source_rgb(0.0, 0.0, 1.0) 
    91         cr.set_line_width(8) 
    92         cr.arc(x, y, 2, 0, 2.0 * math.pi) 
    93         cr.stroke() 
    94  
    95         # draw a caption with transparent background 
    96         cr.set_font_size(25) 
    97         extents = cr.text_extents(text) # get the text extents 
    98         (w,h) = (extents[2], extents[3]) 
    99         border = 2 
    100         cr.set_line_width(2) 
    101         cr.set_source_rgba(0.1, 0.6, 0.1, 0.45) # trasparent blue 
    102         (rx,ry,rw,rh) = (x - border+12, y + border+h*0.2 + 6, w + 4*border, -(h*1.4)) 
    103         cr.rectangle(rx,ry,rw,rh) # create the transparent background rectangle 
    104         cr.fill() 
    105  
    106         # register clickable area 
    107         click = self.m.get('clickHandler', None) 
    108         if click: 
    109           """ make the POI caption clickable""" 
    110           click.registerXYWH(rx,ry-(-rh),rw,-rh, "set:menu:POIDetail") 
    111         cr.fill() 
    112  
    113         # draw the actual text 
    114 #        cr.set_source_rgba(1, 1, 0, 0.95) # slightly trasparent white 
    115         cr.set_source_rgba(1, 1, 1, 0.95) # slightly trasparent white 
    116         cr.move_to(x+15,y+7) 
    117         cr.show_text(text) # show the trasparent result caption 
    118         cr.stroke() 
     62      if proj and self.visiblePOI: 
     63        for POI in self.visiblePOI: 
     64          id = POI.getId() 
     65          lat = POI.getLat() 
     66          lon = POI.getLon() 
     67          name = POI.getName() 
     68          distanceString = "" 
     69          pos = self.get('pos', None) 
     70          units = self.m.get('units', None) 
     71          if pos and units: 
     72            (lat1,lon1) = pos # current position coordinates 
     73            kiloMetricDistance = geo.distance(lat,lon,lat1,lon1) 
     74            unitString = units.km2CurrentUnitString(kiloMetricDistance, 0, True) 
     75            distanceString = " (%s)" % unitString 
     76 
     77          text = "" + name + distanceString 
     78 
     79          (x,y) = proj.ll2xy(lat, lon) 
     80          # draw the highlighting circle 
     81          cr.set_line_width(8) 
     82          cr.set_source_rgba(0.1, 0.6, 0.1, 0.55) # highlight circle color 
     83          cr.arc(x, y, 15, 0, 2.0 * math.pi) 
     84          cr.stroke() 
     85          cr.fill() 
     86 
     87          # draw the point 
     88          cr.set_source_rgb(0.0, 0.0, 0.0) 
     89          cr.set_line_width(10) 
     90          cr.arc(x, y, 3, 0, 2.0 * math.pi) 
     91          cr.stroke() 
     92          cr.set_source_rgb(0.0, 0.0, 1.0) 
     93          cr.set_line_width(8) 
     94          cr.arc(x, y, 2, 0, 2.0 * math.pi) 
     95          cr.stroke() 
     96 
     97          # draw a caption with transparent background 
     98          cr.set_font_size(25) 
     99          extents = cr.text_extents(text) # get the text extents 
     100          (w,h) = (extents[2], extents[3]) 
     101          border = 2 
     102          cr.set_line_width(2) 
     103          cr.set_source_rgba(0.1, 0.6, 0.1, 0.45) # trasparent blue 
     104          (rx,ry,rw,rh) = (x - border+12, y + border+h*0.2 + 6, w + 4*border, -(h*1.4)) 
     105          cr.rectangle(rx,ry,rw,rh) # create the transparent background rectangle 
     106          cr.fill() 
     107 
     108          # register clickable area 
     109          click = self.m.get('clickHandler', None) 
     110          if click: 
     111            """ make the POI caption clickable""" 
     112            click.registerXYWH(rx,ry-(-rh),rw,-rh, "ms:showPOI:setActivePOI:%d|set:menu:POIDetail" % id) 
     113          cr.fill() 
     114 
     115          # draw the actual text 
     116  #        cr.set_source_rgba(1, 1, 0, 0.95) # slightly trasparent white 
     117          cr.set_source_rgba(1, 1, 1, 0.95) # slightly trasparent white 
     118          cr.move_to(x+15,y+7) 
     119          cr.show_text(text) # show the trasparent result caption 
     120          cr.stroke() 
    119121 
    120122  def handleMessage(self, message, type, args): 
     
    290292        self.activePOI.routeFrom('currentPosition') 
    291293        self.sendMessage('mapView:recentreToPos') 
    292         self.drawActivePOIEnable() 
     294        self.makePOIVisible(self.activePOI) 
    293295        self.set('menu', None) 
    294296         
    295  
    296297      elif message == 'drawActivePOI': 
    297         self.drawActivePOIEnable() 
     298        if self.activePOI: # only add valid poi 
     299          self.makePOIVisible(self.activePOI) 
     300          # enable drawing 
     301          self.drawPOI() 
    298302 
    299303      elif message == 'dontDrawActivePOI': 
    300         self.drawActivePOIDisable() 
    301  
    302   def drawActivePOIEnable(self): 
     304        self.removePOIFromVisible(self.activePOI) 
     305 
     306      elif message == 'clearVisiblePOI': 
     307        self.clearVisiblePOI() 
     308 
     309  def makePOIVisible(self, POI): 
     310    """add a POI to the list of visible POI""" 
     311    # check if the POI is already present 
     312    if POI not in self.visiblePOI: 
     313      self.visiblePOI.append(POI) 
     314 
     315  def clearVisiblePOI(self): 
     316    """discard visible POI""" 
     317    self.dontDrawPOI() 
     318    self.visiblePOI = [] 
     319 
     320  def removePOIFromVisible(self,POI): 
     321    if POI in self.visiblePOI: 
     322      self.visiblePOI.remove(POI) 
     323 
     324  def drawPOI(self): 
    303325    """enable drawing of the active POI""" 
    304326    self.drawActivePOI = True 
    305327 
    306   def drawActivePOIDisable(self): 
     328  def dontDrawPOI(self): 
    307329    """disable drawing of the active POI""" 
    308330    self.drawActivePOI = False 
  • modules/mod_storePOI.py

    rd3be082 r8cf0089  
    161161      self.description= u'%s' % description 
    162162      self.categoryId=catId 
     163 
     164    def __str__(self): 
     165      s = "POI named: %s, lat,lon: %f,%f with id: %d" % (self.getName(),self.getLat(),self.getLon(), self.getId()) 
     166      return s 
     167 
     168    def __eq__(self, other): 
     169      return self.getId() == other.getId() 
    163170 
    164171    def getMenus(self): 
Note: See TracChangeset for help on using the changeset viewer.