/[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 2601 by joey, Sat Apr 23 16:40:33 2005 UTC
# 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    
121            ret = None
122    
123            if Thuban.Model.resource.has_gdal_support():
124    
125                if versions['wxPython-tuple'] < (2,5,3):
126                    options = options | 4  # INVERT_MASK_BITS
127                    options = options & ~2 # ALPHA_MASK not supported
128    
129                try:
130                    ret = ProjectRasterFile(layer.GetImageFilename(),
131                                            srcProj, dstProj,
132                                            extents, resolution, dimensions,
133                                            options)
134                except (MemoryError, IOError, AttributeError, ValueError):
135                    # Why does this catch AttributeError and ValueError?
136                    # FIXME: The exception should be communicated to the user
137                    # better.
138                    traceback.print_exc()
139    
140            return ret
141    
142        def draw_raster_data(self, layer, x,y, data, format = 'BMP'):
143    
144          mask = None          mask = None
145            alpha = None
146          width = data[0]          width = data[0]
147          height = data[1]          height = data[1]
148          image_data, mask_data, alpha_data = data[2]          image_data, mask_data, alpha_data = data[2]
# Line 125  class MapRenderer(BaseRenderer): Line 157  class MapRenderer(BaseRenderer):
157                  mask = wxBitmapFromBits(mask_data, width, height, 1)                  mask = wxBitmapFromBits(mask_data, width, height, 1)
158                  mask = wxMask(mask)                  mask = wxMask(mask)
159              elif alpha_data is not None:              elif alpha_data is not None:
160                  image.SetAlphaData(alpha_data)                  # alpha_data is already in the right format
161                    alpha = alpha_data
162    
163          else:          else:
164              stream = cStringIO.StringIO(image_data)              stream = cStringIO.StringIO(image_data)
165              image = wxImageFromStream(stream, raster_format_map[format])              image = wxImageFromStream(stream, raster_format_map[format])
# Line 136  class MapRenderer(BaseRenderer): Line 170  class MapRenderer(BaseRenderer):
170              elif alpha_data is not None:              elif alpha_data is not None:
171                  stream = cStringIO.StringIO(alpha_data)                  stream = cStringIO.StringIO(alpha_data)
172                  alpha = wxImageFromStream(stream, raster_format_map[format])                  alpha = wxImageFromStream(stream, raster_format_map[format])
173                  image.SetAlpha(alpha.GetData()[:])                  alpha = alpha.GetData()[:] # XXX: do we need to copy this?
174    
175            #
176            # if we are using the alpha_data then scale down the alpha values
177            # by the layer's opacity using a string translation table
178            #
179            if alpha is not None:
180                lo = layer.Opacity()
181                if lo == 0:
182                    return
183                elif lo == 1:
184                    a = alpha
185                else:
186                    tr = [int(i*lo) for i in range(256)]
187                    table = array.array('B', tr).tostring()
188                    a = alpha.translate(table)
189    
190                image.SetAlphaData(a)
191    
192          bitmap = wxBitmapFromImage(image)          bitmap = wxBitmapFromImage(image)
193          bitmap.SetMask(mask)  
194            if mask is not None:
195                bitmap.SetMask(mask)
196    
197          self.dc.DrawBitmap(bitmap, int(round(x)), int(round(y)), True)          self.dc.DrawBitmap(bitmap, int(round(x)), int(round(y)), True)
198    

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26