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

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

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

revision 1927 by bh, Mon Nov 10 16:57:35 2003 UTC revision 2562 by jonathan, Wed Feb 16 21:14:47 2005 UTC
# Line 1  Line 1 
1  # Copyright (c) 2001, 2002, 2003 by Intevation GmbH  # Copyright (c) 2001-2004 by Intevation GmbH
2  # Authors:  # Authors:
3  # Bernhard Herzog <[email protected]>  # Bernhard Herzog <[email protected]> (2001-2003)
4  # Jonathan Coles <[email protected]>  # Jonathan Coles <[email protected]> (2003)
5  # Frank Koormann <[email protected]>  # Frank Koormann <[email protected]> (2003)
6    # Jan-Oliver Wagner <[email protected]> (2003, 2004)
7  #  #
8  # This program is free software under the GPL (>=v2)  # This program is free software under the GPL (>=v2)
9  # Read the file COPYING coming with Thuban for details.  # Read the file COPYING coming with Thuban for details.
# Line 20  from Thuban import _ Line 21  from Thuban import _
21  from wxPython.wx import wxPoint, wxRect, wxPen, wxBrush, wxFont, \  from wxPython.wx import wxPoint, wxRect, wxPen, wxBrush, wxFont, \
22      wxTRANSPARENT_PEN, wxTRANSPARENT_BRUSH, \      wxTRANSPARENT_PEN, wxTRANSPARENT_BRUSH, \
23      wxBLACK_PEN, wxBLACK, wxSOLID, wxCROSS_HATCH, wxSWISS, wxNORMAL, \      wxBLACK_PEN, wxBLACK, wxSOLID, wxCROSS_HATCH, wxSWISS, wxNORMAL, \
24      wxBitmapFromImage, wxImageFromStream, wxBITMAP_TYPE_BMP, wxBITMAP_TYPE_JPEG      wxBitmapFromImage, wxImageFromStream, wxBITMAP_TYPE_BMP, \
25        wxBITMAP_TYPE_JPEG, wxBITMAP_TYPE_PNG, wxBITMAP_TYPE_TIF, \
26        wxBITMAP_TYPE_GIF, wxEmptyImage, wxMask, wxBitmapFromBits
27    
28  from wxproj import draw_polygon_shape, draw_polygon_init  from wxproj import draw_polygon_shape, draw_polygon_init
29    
# Line 36  import Thuban.Model.resource Line 39  import Thuban.Model.resource
39    
40  from baserenderer import BaseRenderer  from baserenderer import BaseRenderer
41    
42    from math import floor
43    
44    from types import StringType
45    
46    from Thuban.version import versions
47    
48    
49  # Map the strings used for the format parameter of the draw_raster_data  # Map the strings used for the format parameter of the draw_raster_data
50  # method to the appropriate wxWindows constants  # method to the appropriate wxWindows constants
51  raster_format_map = {  raster_format_map = {
52      "BMP": wxBITMAP_TYPE_BMP,      "BMP": wxBITMAP_TYPE_BMP,
53      "JPEG": wxBITMAP_TYPE_JPEG,      "JPEG": wxBITMAP_TYPE_JPEG,
54        "PNG": wxBITMAP_TYPE_PNG,
55        "TIFF": wxBITMAP_TYPE_TIF,
56        "GIF": wxBITMAP_TYPE_GIF,
57      }      }
58    
59  class MapRenderer(BaseRenderer):  class MapRenderer(BaseRenderer):
# Line 51  class MapRenderer(BaseRenderer): Line 63  class MapRenderer(BaseRenderer):
63      TRANSPARENT_PEN = wxTRANSPARENT_PEN      TRANSPARENT_PEN = wxTRANSPARENT_PEN
64      TRANSPARENT_BRUSH = wxTRANSPARENT_BRUSH      TRANSPARENT_BRUSH = wxTRANSPARENT_BRUSH
65    
66      make_point = wxPoint      def make_point(self, x, y):
67            return wxPoint(int(round(x)), int(round(y)))
68    
69      def tools_for_property(self, prop):      def tools_for_property(self, prop):
70          fill = prop.GetFill()          fill = prop.GetFill()
# Line 81  class MapRenderer(BaseRenderer): Line 94  class MapRenderer(BaseRenderer):
94          if (layer.ShapeStore().RawShapeFormat() == RAW_SHAPEFILE          if (layer.ShapeStore().RawShapeFormat() == RAW_SHAPEFILE
95              and layer.ShapeType() in (SHAPETYPE_ARC, SHAPETYPE_POLYGON)):              and layer.ShapeType() in (SHAPETYPE_ARC, SHAPETYPE_POLYGON)):
96              offx, offy = self.offset              offx, offy = self.offset
97                x = lambda a, b, c, d: None
98                #return (True, x, None)
99              return (True, draw_polygon_shape,              return (True, draw_polygon_shape,
100                      draw_polygon_init(layer.ShapeStore().Shapefile(),                      draw_polygon_init(layer.ShapeStore().Shapefile(),
101                                        self.dc, self.map.projection,                                        self.dc, self.map.projection,
# Line 90  class MapRenderer(BaseRenderer): Line 105  class MapRenderer(BaseRenderer):
105              return BaseRenderer.low_level_renderer(self, layer)              return BaseRenderer.low_level_renderer(self, layer)
106    
107      def label_font(self):      def label_font(self):
108          return wxFont(self.resolution * 10, wxSWISS, wxNORMAL, wxNORMAL)          return wxFont(int(round(self.resolution * 10)), wxSWISS, wxNORMAL,
109                          wxNORMAL)
110    
111        def draw_raster_data(self, x,y, data, format = 'BMP'):
112    
113            mask = None
114            width = data[0]
115            height = data[1]
116            image_data, mask_data, alpha_data = data[2]
117    
118            if versions['wxPython-tuple'] < (2,5,3):
119                alpha_data = None
120    
121            if format == 'RAW':
122                image = wxEmptyImage(width, height)
123                image.SetData(image_data)
124                if mask_data is not None:
125                    mask = wxBitmapFromBits(mask_data, width, height, 1)
126                    mask = wxMask(mask)
127                elif alpha_data is not None:
128                    image.SetAlphaData(alpha_data)
129            else:
130                stream = cStringIO.StringIO(image_data)
131                image = wxImageFromStream(stream, raster_format_map[format])
132                if mask_data is not None:
133                    stream = cStringIO.StringIO(mask_data)
134                    mask = wxImageFromStream(stream, raster_format_map[format])
135                    mask = wxMask(wxBitmapFromImage(mask, 1))
136                elif alpha_data is not None:
137                    stream = cStringIO.StringIO(alpha_data)
138                    alpha = wxImageFromStream(stream, raster_format_map[format])
139                    image.SetAlpha(alpha.GetData()[:])
140    
     def draw_raster_data(self, data, format = 'BMP'):  
         stream = cStringIO.StringIO(data)  
         image = wxImageFromStream(stream, raster_format_map[format])  
141          bitmap = wxBitmapFromImage(image)          bitmap = wxBitmapFromImage(image)
142          self.dc.DrawBitmap(bitmap, 0, 0)          bitmap.SetMask(mask)
143    
144            self.dc.DrawBitmap(bitmap, int(round(x)), int(round(y)), True)
145    
146    
147  class ScreenRenderer(MapRenderer):  class ScreenRenderer(MapRenderer):
# Line 127  class ScreenRenderer(MapRenderer): Line 172  class ScreenRenderer(MapRenderer):
172          return self.render_map_incrementally()          return self.render_map_incrementally()
173    
174      def draw_selection_incrementally(self, layer, selected_shapes):      def draw_selection_incrementally(self, layer, selected_shapes):
175            """Draw the selected shapes in a emphasized way (i.e.
176            with a special pen and brush.
177            The drawing is performed incrementally, that means every
178            n shapes, the user can have interactions with the map.
179            n is currently fixed to 500.
180    
181            layer -- the layer where the shapes belong to.
182            selected_shapes -- a list of the shape-ids representing the
183                               selected shapes for the given layer.
184            """
185          pen = wxPen(wxBLACK, 3, wxSOLID)          pen = wxPen(wxBLACK, 3, wxSOLID)
186          brush = wxBrush(wxBLACK, wxCROSS_HATCH)          brush = wxBrush(wxBLACK, wxCROSS_HATCH)
187    
188          shapetype = layer.ShapeType()          shapetype = layer.ShapeType()
189          useraw, func, param = self.low_level_renderer(layer)          useraw, func, param = self.low_level_renderer(layer)
190          args = (pen, brush)          args = (pen, brush)
191    
192            # for point shapes we need to find out the properties
193            # to determine the size. Based on table and field,
194            # we can find out the properties for object - see below.
195            if shapetype == SHAPETYPE_POINT:
196                lc = layer.GetClassification()
197                field = layer.GetClassificationColumn()
198                table = layer.ShapeStore().Table()
199    
200          count = 0          count = 0
201          for index in selected_shapes:          for index in selected_shapes:
202              count += 1              count += 1
203              shape = layer.Shape(index)              shape = layer.Shape(index)
204    
205                # Get the size of the specific property for this
206                # point
207                if shapetype == SHAPETYPE_POINT and field is not None:
208                    value = table.ReadValue(shape.ShapeID(), field)
209                    group = lc.FindGroup(value)
210                    size = group.GetProperties().GetSize()
211                    args = (pen, brush, size)
212    
213              if useraw:              if useraw:
214                  data = shape.RawData()                  data = shape.RawData()
215              else:              else:
# Line 233  class ExportRenderer(ScreenRenderer): Line 306  class ExportRenderer(ScreenRenderer):
306          self.shifty = (mmaxy - mminy)*0.5 - (ury - lly)*0.5          self.shifty = (mmaxy - mminy)*0.5 - (ury - lly)*0.5
307    
308          self.offset = (offx+self.shiftx, offy+self.shifty)          self.offset = (offx+self.shiftx, offy+self.shifty)
309            self.region = (llx + self.shiftx, lly + self.shifty, urx, ury)
310    
311          # Draw the map          # Draw the map
312          self.dc.BeginDrawing()          self.dc.BeginDrawing()

Legend:
Removed from v.1927  
changed lines
  Added in v.2562

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26