/[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 1105 by jonathan, Fri May 30 06:30:15 2003 UTC revision 1219 by bh, Mon Jun 16 17:42:54 2003 UTC
# Line 531  class MapCanvas(wxWindow, Publisher): Line 531  class MapCanvas(wxWindow, Publisher):
531          self.full_redraw()          self.full_redraw()
532    
533      def set_view_transform(self, scale, offset):      def set_view_transform(self, scale, offset):
534            # width/height of the projected bbox
535            llx, lly, urx, ury = bbox = self.map.ProjectedBoundingBox()
536            pwidth = float(urx - llx)
537            pheight = float(ury - lly)
538    
539            # width/height of the window
540            wwidth, wheight = self.GetSizeTuple()
541    
542            # The window's center in projected coordinates assuming the new
543            # scale/offset
544            pcenterx = (wwidth/2 - offset[0]) / scale
545            pcentery = (offset[1] - wheight/2) / scale
546    
547            # The window coordinates used when drawing the shapes must fit
548            # into 16bit signed integers.
549            max_len = max(pwidth, pheight)
550            if max_len:
551                max_scale = 32000.0 / max_len
552            else:
553                # FIXME: What to do in this case? The bbox is effectively
554                # empty so any scale should work.
555                max_scale = scale
556    
557            # The minimal scale is somewhat arbitrarily set to half that of
558            # the bbox fit into the window
559            scales = []
560            if pwidth:
561                scales.append(wwidth / pwidth)
562            if pheight:
563                scales.append(wheight / pheight)
564            if scales:
565                min_scale = 0.5 * min(scales)
566            else:
567                min_scale = scale
568    
569            if scale > max_scale:
570                scale = max_scale
571            elif scale < min_scale:
572                scale = min_scale
573    
574          self.scale = scale          self.scale = scale
575    
576          self.offset = offset          # determine new offset to preserve the center
577            self.offset = (wwidth/2 - scale * pcenterx,
578                           wheight/2 + scale * pcentery)
579          self.full_redraw()          self.full_redraw()
580          self.issue(SCALE_CHANGED, scale)          self.issue(SCALE_CHANGED, scale)
581    
# Line 903  class MapCanvas(wxWindow, Publisher): Line 945  class MapCanvas(wxWindow, Publisher):
945    
946              if shapetype == SHAPETYPE_POLYGON:              if shapetype == SHAPETYPE_POLYGON:
947                  for i in shape_ids:                  for i in shape_ids:
948                      result = point_in_polygon_shape(layer.shapefile.cobject(),                      shapefile = layer.ShapeStore().Shapefile().cobject()
949                                                      i,                      result = point_in_polygon_shape(shapefile, i,
950                                                      filled, stroked,                                                      filled, stroked,
951                                                      map_proj, layer_proj,                                                      map_proj, layer_proj,
952                                                      scale, -scale, offx, offy,                                                      scale, -scale, offx, offy,
# Line 914  class MapCanvas(wxWindow, Publisher): Line 956  class MapCanvas(wxWindow, Publisher):
956                          break                          break
957              elif shapetype == SHAPETYPE_ARC:              elif shapetype == SHAPETYPE_ARC:
958                  for i in shape_ids:                  for i in shape_ids:
959                      result = point_in_polygon_shape(layer.shapefile.cobject(),                      shapefile = layer.ShapeStore().Shapefile().cobject()
960                        result = point_in_polygon_shape(shapefile,
961                                                      i, 0, 1,                                                      i, 0, 1,
962                                                      map_proj, layer_proj,                                                      map_proj, layer_proj,
963                                                      scale, -scale, offx, offy,                                                      scale, -scale, offx, offy,
# Line 976  class MapCanvas(wxWindow, Publisher): Line 1019  class MapCanvas(wxWindow, Publisher):
1019              # a label was selected              # a label was selected
1020              label_layer.RemoveLabel(shape_index)              label_layer.RemoveLabel(shape_index)
1021          elif layer is not None:          elif layer is not None:
1022              text = labeldialog.run_label_dialog(self, layer.table, shape_index)              text = labeldialog.run_label_dialog(self,
1023                                                    layer.ShapeStore().Table(),
1024                                                    shape_index)
1025              if text:              if text:
1026                  proj = self.map.projection                  proj = self.map.projection
1027                  if proj is not None:                  if proj is not None:
# Line 991  class MapCanvas(wxWindow, Publisher): Line 1036  class MapCanvas(wxWindow, Publisher):
1036    
1037                  shapetype = layer.ShapeType()                  shapetype = layer.ShapeType()
1038                  if shapetype == SHAPETYPE_POLYGON:                  if shapetype == SHAPETYPE_POLYGON:
1039                      x, y = shape_centroid(layer.shapefile.cobject(),                      shapefile = layer.ShapeStore().Shapefile().cobject()
1040                                            shape_index,                      x, y = shape_centroid(shapefile, shape_index,
1041                                            map_proj, layer_proj, 1, 1, 0, 0)                                            map_proj, layer_proj, 1, 1, 0, 0)
1042                      if map_proj is not None:                      if map_proj is not None:
1043                          x, y = map_proj.Inverse(x, y)                          x, y = map_proj.Inverse(x, y)

Legend:
Removed from v.1105  
changed lines
  Added in v.1219

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26