/[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 2514 by frank, Mon Jan 3 16:21:17 2005 UTC revision 2635 by jan, Tue Jun 28 06:48:45 2005 UTC
# Line 1  Line 1 
1  # Copyright (c) 2001-2004 by Intevation GmbH  # Copyright (c) 2001-2005 by Intevation GmbH
2  # Authors:  # Authors:
3  # Bernhard Herzog <[email protected]> (2001-2003)  # Bernhard Herzog <[email protected]> (2001-2003)
4  # Jonathan Coles <[email protected]> (2003)  # Jonathan Coles <[email protected]> (2003)
5  # Frank Koormann <[email protected]> (2003)  # Frank Koormann <[email protected]> (2003)
6  # Jan-Oliver Wagner <[email protected]> (2003, 2004)  # Jan-Oliver Wagner <[email protected]> (2003-2005)
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 16  __version__ = "$Revision$" Line 16  __version__ = "$Revision$"
16    
17  import cStringIO  import cStringIO
18    
19    import array
20    
21    import traceback
22    
23  from Thuban import _  from Thuban import _
24    
25  from wxPython.wx import wxPoint, wxRect, wxPen, wxBrush, wxFont, \  from wxPython.wx import wxPoint, wxRect, wxPen, wxBrush, wxFont, \
26      wxTRANSPARENT_PEN, wxTRANSPARENT_BRUSH, \      wxTRANSPARENT_PEN, wxTRANSPARENT_BRUSH, \
27      wxBLACK_PEN, wxBLACK, wxSOLID, wxCROSS_HATCH, wxSWISS, wxNORMAL, \      wxBLACK_PEN, wxBLACK, wxSOLID, wxCROSS_HATCH, wxSWISS, wxNORMAL, \
28      wxBitmapFromImage, wxImageFromStream, wxBITMAP_TYPE_BMP, \      wxBitmapFromImage, wxImageFromStream, wxBITMAP_TYPE_BMP, \
29      wxBITMAP_TYPE_JPEG, wxBITMAP_TYPE_PNG, wxBITMAP_TYPE_TIF, wxBITMAP_TYPE_GIF      wxBITMAP_TYPE_JPEG, wxBITMAP_TYPE_PNG, wxBITMAP_TYPE_TIF, \
30        wxBITMAP_TYPE_GIF, wxEmptyImage, wxMask, wxBitmapFromBits
31    
32  from wxproj import draw_polygon_shape, draw_polygon_init  from wxproj import draw_polygon_shape, draw_polygon_init
33    
# Line 38  import Thuban.Model.resource Line 43  import Thuban.Model.resource
43    
44  from baserenderer import BaseRenderer  from baserenderer import BaseRenderer
45    
46    from math import floor
47    
48    from types import StringType
49    
50    from Thuban.version import versions
51    
52    if Thuban.Model.resource.has_gdal_support():
53        from gdalwarp import ProjectRasterFile
54    
55    
56  # 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
57  # method to the appropriate wxWindows constants  # method to the appropriate wxWindows constants
# Line 87  class MapRenderer(BaseRenderer): Line 101  class MapRenderer(BaseRenderer):
101          if (layer.ShapeStore().RawShapeFormat() == RAW_SHAPEFILE          if (layer.ShapeStore().RawShapeFormat() == RAW_SHAPEFILE
102              and layer.ShapeType() in (SHAPETYPE_ARC, SHAPETYPE_POLYGON)):              and layer.ShapeType() in (SHAPETYPE_ARC, SHAPETYPE_POLYGON)):
103              offx, offy = self.offset              offx, offy = self.offset
104                x = lambda a, b, c, d: None
105                #return (True, x, None)
106              return (True, draw_polygon_shape,              return (True, draw_polygon_shape,
107                      draw_polygon_init(layer.ShapeStore().Shapefile(),                      draw_polygon_init(layer.ShapeStore().Shapefile(),
108                                        self.dc, self.map.projection,                                        self.dc, self.map.projection,
# Line 99  class MapRenderer(BaseRenderer): Line 115  class MapRenderer(BaseRenderer):
115          return wxFont(int(round(self.resolution * 10)), wxSWISS, wxNORMAL,          return wxFont(int(round(self.resolution * 10)), wxSWISS, wxNORMAL,
116                        wxNORMAL)                        wxNORMAL)
117    
118      def draw_raster_data(self, data, format = 'BMP'):      def projected_raster_layer(self, layer, srcProj, dstProj, extents,
119          stream = cStringIO.StringIO(data)                                 resolution, dimensions, options):
120          image = wxImageFromStream(stream, raster_format_map[format])          """Returns a raster layer image in projected space
121    
122            Based on a given filename.  This method must be implemented in
123            classes derived from BaseRenderer.
124            """
125    
126            ret = None
127    
128            if Thuban.Model.resource.has_gdal_support():
129    
130                if versions['wxPython-tuple'] < (2,5,3):
131                    options = options | 4  # INVERT_MASK_BITS
132                    options = options & ~2 # ALPHA_MASK not supported
133    
134                try:
135                    ret = ProjectRasterFile(layer.GetImageFilename(),
136                                            srcProj, dstProj,
137                                            extents, resolution, dimensions,
138                                            options)
139                except (MemoryError, IOError, AttributeError, ValueError):
140                    # Why does this catch AttributeError and ValueError?
141                    # FIXME: The exception should be communicated to the user
142                    # better.
143                    traceback.print_exc()
144    
145            return ret
146    
147        def draw_raster_data(self, x,y, data, format = 'BMP', opacity=1.0):
148    
149            mask = None
150            alpha = None
151            width = data[0]
152            height = data[1]
153            image_data, mask_data, alpha_data = data[2]
154    
155            if versions['wxPython-tuple'] < (2,5,3):
156                alpha_data = None
157    
158            if format == 'RAW':
159                image = wxEmptyImage(width, height)
160                image.SetData(image_data)
161                if mask_data is not None:
162                    mask = wxBitmapFromBits(mask_data, width, height, 1)
163                    mask = wxMask(mask)
164                elif alpha_data is not None:
165                    # alpha_data is already in the right format
166                    alpha = alpha_data
167    
168            else:
169                stream = cStringIO.StringIO(image_data)
170                image = wxImageFromStream(stream, raster_format_map[format])
171    
172                if mask_data is not None:
173                    stream = cStringIO.StringIO(mask_data)
174                    mask = wxImageFromStream(stream, raster_format_map[format])
175                    mask = wxMask(wxBitmapFromImage(mask, 1))
176                elif alpha_data is not None:
177                    stream = cStringIO.StringIO(alpha_data)
178                    alpha = wxImageFromStream(stream, raster_format_map[format])
179                    alpha = alpha.GetData() #[:] # XXX: do we need to copy this?
180                elif image.HasAlpha():
181                    alpha = image.GetAlphaData()
182    
183            #
184            # scale down the alpha values the opacity level using a string
185            # translation table for efficiency.
186            #
187            if alpha is not None:
188                if opacity == 0:
189                    return
190                elif opacity == 1:
191                    a = alpha
192                else:
193                    tr = [int(i*opacity) for i in range(256)]
194                    table = array.array('B', tr).tostring()
195                    a = alpha.translate(table)
196    
197                image.SetAlphaData(a)
198    
199          bitmap = wxBitmapFromImage(image)          bitmap = wxBitmapFromImage(image)
200          self.dc.DrawBitmap(bitmap, 0, 0)  
201            if mask is not None:
202                bitmap.SetMask(mask)
203    
204            self.dc.DrawBitmap(bitmap, int(round(x)), int(round(y)), True)
205    
206    
207  class ScreenRenderer(MapRenderer):  class ScreenRenderer(MapRenderer):
# Line 166  class ScreenRenderer(MapRenderer): Line 264  class ScreenRenderer(MapRenderer):
264    
265              # Get the size of the specific property for this              # Get the size of the specific property for this
266              # point              # point
267              if shapetype == SHAPETYPE_POINT and field is not None:              if shapetype == SHAPETYPE_POINT:
268                  value = table.ReadValue(shape.ShapeID(), field)                  if field is not None:
269                  group = lc.FindGroup(value)                      value = table.ReadValue(shape.ShapeID(), field)
270                  size = group.GetProperties().GetSize()                      group = lc.FindGroup(value)
271                        size = group.GetProperties().GetSize()
272                    else:
273                        size = lc.GetDefaultSize()
274                  args = (pen, brush, size)                  args = (pen, brush, size)
275    
276              if useraw:              if useraw:

Legend:
Removed from v.2514  
changed lines
  Added in v.2635

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26