/[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 2552 by jonathan, Fri Jan 28 15:54:00 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 43  from math import floor Line 47  from math import floor
47    
48  from types import StringType  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 92  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 104  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]
147            height = data[1]
148            image_data, mask_data, alpha_data = data[2]
149    
150            if versions['wxPython-tuple'] < (2,5,3):
151                alpha_data = None
152    
153          if format == 'RAW':          if format == 'RAW':
154              image = wxEmptyImage(data[0], data[1])              image = wxEmptyImage(width, height)
155              image.SetData(data[2][0])              image.SetData(image_data)
156              if data[2][1] is not None:              if mask_data is not None:
157                  mask = wxBitmapFromBits(data[2][1], data[0], data[1], 1)                  mask = wxBitmapFromBits(mask_data, width, height, 1)
158                  mask = wxMask(mask)                  mask = wxMask(mask)
159                elif alpha_data is not None:
160                    # alpha_data is already in the right format
161                    alpha = alpha_data
162    
163          else:          else:
164              stream = cStringIO.StringIO(data[2][0])              stream = cStringIO.StringIO(image_data)
165              image = wxImageFromStream(stream, raster_format_map[format])              image = wxImageFromStream(stream, raster_format_map[format])
166              if data[2][1] is not None:              if mask_data is not None:
167                  stream = cStringIO.StringIO(data[2][1])                  stream = cStringIO.StringIO(mask_data)
168                  mask = wxImageFromStream(stream, raster_format_map[format])                  mask = wxImageFromStream(stream, raster_format_map[format])
169                  mask = wxMask(wxBitmapFromImage(mask, 1))                  mask = wxMask(wxBitmapFromImage(mask, 1))
170                elif alpha_data is not None:
171                    stream = cStringIO.StringIO(alpha_data)
172                    alpha = wxImageFromStream(stream, raster_format_map[format])
173                    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.2552  
changed lines
  Added in v.2601

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26