/[thuban]/branches/WIP-pyshapelib-bramz/Thuban/UI/view.py
ViewVC logotype

Diff of /branches/WIP-pyshapelib-bramz/Thuban/UI/view.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 158 by bh, Tue May 7 16:41:07 2002 UTC revision 159 by bh, Wed May 8 13:46:15 2002 UTC
# Line 167  class PanTool(Tool): Line 167  class PanTool(Tool):
167    
168      def MouseMove(self, event):      def MouseMove(self, event):
169          if self.dragging:          if self.dragging:
             x0, y0 = self.current  
170              Tool.MouseMove(self, event)              Tool.MouseMove(self, event)
171                sx, sy = self.start
172              x, y = self.current              x, y = self.current
173              width, height = self.view.GetSizeTuple()              width, height = self.view.GetSizeTuple()
174    
175                bitmapdc = wx.wxMemoryDC()
176                bitmapdc.SelectObject(self.view.bitmap)
177    
178              dc = self.view.drag_dc              dc = self.view.drag_dc
179              dc.Blit(0, 0, width, height, dc, x0 - x, y0 - y)              dc.Blit(0, 0, width, height, bitmapdc, sx - x, sy - y)
180    
181      def MouseUp(self, event):      def MouseUp(self, event):
182          if self.dragging:          if self.dragging:
# Line 580  class MapCanvas(wxWindow, Publisher): Line 584  class MapCanvas(wxWindow, Publisher):
584      def shape_selected(self, layer, shape):      def shape_selected(self, layer, shape):
585          self.full_redraw()          self.full_redraw()
586    
587        def unprojected_rect_around_point(self, x, y):
588            """return a rect a few pixels around (x, y) in unprojected corrdinates
589    
590            The return value is a tuple (minx, miny, maxx, maxy) suitable a
591            parameter to a layer's ShapesInRegion method.
592            """
593            map_proj = self.map.projection
594            if map_proj is not None:
595                inverse = map_proj.Inverse
596            else:
597                inverse = None
598    
599            xs = []
600            ys = []
601            for dx, dy in ((-1, -1), (1, -1), (1, 1), (-1, 1)):
602                px, py = self.win_to_proj(x + dx, y + dy)
603                if inverse:
604                    px, py = inverse(px, py)
605                xs.append(px)
606                ys.append(py)
607            return (min(xs), min(ys), max(xs), max(ys))
608    
609      def find_shape_at(self, px, py, select_labels = 0, selected_layer = 1):      def find_shape_at(self, px, py, select_labels = 0, selected_layer = 1):
610          """Determine the shape at point px, py in window coords          """Determine the shape at point px, py in window coords
611    
# Line 602  class MapCanvas(wxWindow, Publisher): Line 628  class MapCanvas(wxWindow, Publisher):
628          scale = self.scale          scale = self.scale
629          offx, offy = self.offset          offx, offy = self.offset
630    
631            box = self.unprojected_rect_around_point(px, py)
632    
633          if select_labels:          if select_labels:
634              labels = self.map.LabelLayer().Labels()              labels = self.map.LabelLayer().Labels()
635                            
# Line 666  class MapCanvas(wxWindow, Publisher): Line 694  class MapCanvas(wxWindow, Publisher):
694              shapetype = layer.ShapeType()              shapetype = layer.ShapeType()
695    
696              select_shape = -1              select_shape = -1
697    
698                shape_ids = layer.ShapesInRegion(box)
699                shape_ids.reverse()
700    
701              if shapetype == SHAPETYPE_POLYGON:              if shapetype == SHAPETYPE_POLYGON:
702                  for i in range(layer.NumShapes() - 1, -1, -1):                  for i in shape_ids:
703                      result = point_in_polygon_shape(layer.shapefile.cobject(),                      result = point_in_polygon_shape(layer.shapefile.cobject(),
704                                                      i,                                                      i,
705                                                      filled, stroked,                                                      filled, stroked,
# Line 678  class MapCanvas(wxWindow, Publisher): Line 710  class MapCanvas(wxWindow, Publisher):
710                          select_shape = i                          select_shape = i
711                          break                          break
712              elif shapetype == SHAPETYPE_ARC:              elif shapetype == SHAPETYPE_ARC:
713                  for i in range(layer.NumShapes() - 1, -1, -1):                  for i in shape_ids:
714                      result = point_in_polygon_shape(layer.shapefile.cobject(),                      result = point_in_polygon_shape(layer.shapefile.cobject(),
715                                                      i, 0, 1,                                                      i, 0, 1,
716                                                      map_proj, layer_proj,                                                      map_proj, layer_proj,
# Line 688  class MapCanvas(wxWindow, Publisher): Line 720  class MapCanvas(wxWindow, Publisher):
720                          select_shape = i                          select_shape = i
721                          break                          break
722              elif shapetype == SHAPETYPE_POINT:              elif shapetype == SHAPETYPE_POINT:
723                  for i in range(layer.NumShapes() - 1, -1, -1):                  for i in shape_ids:
724                      shape = layer.Shape(i)                      shape = layer.Shape(i)
725                      x, y = shape.Points()[0]                      x, y = shape.Points()[0]
726                      if inverse:                      if inverse:

Legend:
Removed from v.158  
changed lines
  Added in v.159

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26