/[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 1937 by bh, Tue Nov 11 18:16:42 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 82  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 94  class MapRenderer(BaseRenderer): Line 108  class MapRenderer(BaseRenderer):
108          return wxFont(int(round(self.resolution * 10)), wxSWISS, wxNORMAL,          return wxFont(int(round(self.resolution * 10)), wxSWISS, wxNORMAL,
109                        wxNORMAL)                        wxNORMAL)
110    
111      def draw_raster_data(self, data, format = 'BMP'):      def draw_raster_data(self, x,y, data, format = 'BMP'):
112          stream = cStringIO.StringIO(data)  
113          image = wxImageFromStream(stream, raster_format_map[format])          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    
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 129  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 235  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.1937  
changed lines
  Added in v.2562

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26