/[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 2587 by jonathan, Wed Mar 23 15:30:27 2005 UTC
# Line 16  __version__ = "$Revision$" Line 16  __version__ = "$Revision$"
16    
17  import cStringIO  import cStringIO
18    
19    import array
20    
21  from Thuban import _  from Thuban import _
22    
23  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 45  from math import floor
45    
46  from types import StringType  from types import StringType
47    
48    from Thuban.version import versions
49    
50    if Thuban.Model.resource.has_gdal_support():
51        from gdalwarp import ProjectRasterFile
52    
53    
54  # 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
55  # method to the appropriate wxWindows constants  # method to the appropriate wxWindows constants
# Line 92  class MapRenderer(BaseRenderer): Line 99  class MapRenderer(BaseRenderer):
99          if (layer.ShapeStore().RawShapeFormat() == RAW_SHAPEFILE          if (layer.ShapeStore().RawShapeFormat() == RAW_SHAPEFILE
100              and layer.ShapeType() in (SHAPETYPE_ARC, SHAPETYPE_POLYGON)):              and layer.ShapeType() in (SHAPETYPE_ARC, SHAPETYPE_POLYGON)):
101              offx, offy = self.offset              offx, offy = self.offset
102                x = lambda a, b, c, d: None
103                #return (True, x, None)
104              return (True, draw_polygon_shape,              return (True, draw_polygon_shape,
105                      draw_polygon_init(layer.ShapeStore().Shapefile(),                      draw_polygon_init(layer.ShapeStore().Shapefile(),
106                                        self.dc, self.map.projection,                                        self.dc, self.map.projection,
# Line 104  class MapRenderer(BaseRenderer): Line 113  class MapRenderer(BaseRenderer):
113          return wxFont(int(round(self.resolution * 10)), wxSWISS, wxNORMAL,          return wxFont(int(round(self.resolution * 10)), wxSWISS, wxNORMAL,
114                        wxNORMAL)                        wxNORMAL)
115    
116      def draw_raster_data(self, x,y, data, format = 'BMP'):      def projected_raster_layer(self, layer, srcProj, dstProj, extents,
117                                   resolution, dimensions, options):
118    
119            ret = None
120    
121            if Thuban.Model.resource.has_gdal_support():
122    
123                if versions['wxPython-tuple'] < (2,5,3):
124                    options = options | 4  # INVERT_MASK_BITS
125                    options = options & ~2 # ALPHA_MASK not supported
126    
127                try:
128                    ret = ProjectRasterFile(layer.GetImageFilename(),
129                                            srcProj, dstProj,
130                                            extents, resolution, dimensions,
131                                            options)
132                except (MemoryError, IOError, AttributeError, ValueError):
133                    # Why does this catch AttributeError and ValueError?
134                    # FIXME: The exception should be communicated to the user
135                    # better.
136                    traceback.print_exc()
137    
138            return ret
139    
140        def draw_raster_data(self, layer, x,y, data, format = 'BMP'):
141    
142          mask = None          mask = None
143            alpha = None
144            width = data[0]
145            height = data[1]
146            image_data, mask_data, alpha_data = data[2]
147    
148            if versions['wxPython-tuple'] < (2,5,3):
149                alpha_data = None
150    
151          if format == 'RAW':          if format == 'RAW':
152              image = wxEmptyImage(data[0], data[1])              image = wxEmptyImage(width, height)
153              image.SetData(data[2][0])              image.SetData(image_data)
154              if data[2][1] is not None:              if mask_data is not None:
155                  mask = wxBitmapFromBits(data[2][1], data[0], data[1], 1)                  mask = wxBitmapFromBits(mask_data, width, height, 1)
156                  mask = wxMask(mask)                  mask = wxMask(mask)
157                elif alpha_data is not None:
158                    # alpha_data is already in the right format
159                    alpha = alpha_data
160    
161          else:          else:
162              stream = cStringIO.StringIO(data[2][0])              stream = cStringIO.StringIO(image_data)
163              image = wxImageFromStream(stream, raster_format_map[format])              image = wxImageFromStream(stream, raster_format_map[format])
164              if data[2][1] is not None:              if mask_data is not None:
165                  stream = cStringIO.StringIO(data[2][1])                  stream = cStringIO.StringIO(mask_data)
166                  mask = wxImageFromStream(stream, raster_format_map[format])                  mask = wxImageFromStream(stream, raster_format_map[format])
167                  mask = wxMask(wxBitmapFromImage(mask, 1))                  mask = wxMask(wxBitmapFromImage(mask, 1))
168                elif alpha_data is not None:
169                    stream = cStringIO.StringIO(alpha_data)
170                    alpha = wxImageFromStream(stream, raster_format_map[format])
171                    alpha = alpha.GetData()[:] # XXX: do we need to copy this?
172    
173            #
174            # if we are using the alpha_data then scale down the alpha values
175            # by the layer's opacity using a string translation table
176            #
177            if alpha is not None:
178                lo = layer.Opacity()
179                if lo == 0:
180                    return
181                elif lo == 1:
182                    a = alpha
183                else:
184                    tr = [int(i*lo) for i in range(256)]
185                    table = array.array('B', tr).tostring()
186                    a = alpha.translate(table)
187    
188                image.SetAlphaData(a)
189    
190          bitmap = wxBitmapFromImage(image)          bitmap = wxBitmapFromImage(image)
191          bitmap.SetMask(mask)  
192            if mask is not None:
193                bitmap.SetMask(mask)
194    
195          self.dc.DrawBitmap(bitmap, int(round(x)), int(round(y)), True)          self.dc.DrawBitmap(bitmap, int(round(x)), int(round(y)), True)
196    

Legend:
Removed from v.2552  
changed lines
  Added in v.2587

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26