/[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 2562 by jonathan, Wed Feb 16 21:14:47 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, \
# Line 45  from types import StringType Line 49  from types import StringType
49    
50  from Thuban.version import versions  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 108  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, x,y, data, format = 'BMP'):      def projected_raster_layer(self, layer, srcProj, dstProj, extents,
119                                   resolution, dimensions, options):
120            """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          mask = None
150            alpha = None
151          width = data[0]          width = data[0]
152          height = data[1]          height = data[1]
153          image_data, mask_data, alpha_data = data[2]          image_data, mask_data, alpha_data = data[2]
# Line 125  class MapRenderer(BaseRenderer): Line 162  class MapRenderer(BaseRenderer):
162                  mask = wxBitmapFromBits(mask_data, width, height, 1)                  mask = wxBitmapFromBits(mask_data, width, height, 1)
163                  mask = wxMask(mask)                  mask = wxMask(mask)
164              elif alpha_data is not None:              elif alpha_data is not None:
165                  image.SetAlphaData(alpha_data)                  # alpha_data is already in the right format
166                    alpha = alpha_data
167    
168          else:          else:
169              stream = cStringIO.StringIO(image_data)              stream = cStringIO.StringIO(image_data)
170              image = wxImageFromStream(stream, raster_format_map[format])              image = wxImageFromStream(stream, raster_format_map[format])
171    
172              if mask_data is not None:              if mask_data is not None:
173                  stream = cStringIO.StringIO(mask_data)                  stream = cStringIO.StringIO(mask_data)
174                  mask = wxImageFromStream(stream, raster_format_map[format])                  mask = wxImageFromStream(stream, raster_format_map[format])
# Line 136  class MapRenderer(BaseRenderer): Line 176  class MapRenderer(BaseRenderer):
176              elif alpha_data is not None:              elif alpha_data is not None:
177                  stream = cStringIO.StringIO(alpha_data)                  stream = cStringIO.StringIO(alpha_data)
178                  alpha = wxImageFromStream(stream, raster_format_map[format])                  alpha = wxImageFromStream(stream, raster_format_map[format])
179                  image.SetAlpha(alpha.GetData()[:])                  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          bitmap.SetMask(mask)  
201            if mask is not None:
202                bitmap.SetMask(mask)
203    
204          self.dc.DrawBitmap(bitmap, int(round(x)), int(round(y)), True)          self.dc.DrawBitmap(bitmap, int(round(x)), int(round(y)), True)
205    
# Line 204  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.2562  
changed lines
  Added in v.2635

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26