/[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 2537 by jonathan, Fri Jan 21 14:01:25 2005 UTC revision 2571 by jonathan, Fri Feb 18 14:54:17 2005 UTC
# Line 23  from wxPython.wx import wxPoint, wxRect, Line 23  from wxPython.wx import wxPoint, wxRect,
23      wxBLACK_PEN, wxBLACK, wxSOLID, wxCROSS_HATCH, wxSWISS, wxNORMAL, \      wxBLACK_PEN, wxBLACK, wxSOLID, wxCROSS_HATCH, wxSWISS, wxNORMAL, \
24      wxBitmapFromImage, wxImageFromStream, wxBITMAP_TYPE_BMP, \      wxBitmapFromImage, wxImageFromStream, wxBITMAP_TYPE_BMP, \
25      wxBITMAP_TYPE_JPEG, wxBITMAP_TYPE_PNG, wxBITMAP_TYPE_TIF, \      wxBITMAP_TYPE_JPEG, wxBITMAP_TYPE_PNG, wxBITMAP_TYPE_TIF, \
26      wxBITMAP_TYPE_GIF, wxEmptyImage      wxBITMAP_TYPE_GIF, wxEmptyImage, wxMask, wxBitmapFromBits
27    
28  from wxproj import draw_polygon_shape, draw_polygon_init  from wxproj import draw_polygon_shape, draw_polygon_init
29    
# Line 43  from math import floor Line 43  from math import floor
43    
44  from types import StringType  from types import StringType
45    
46    from Thuban.version import versions
47    
48    if Thuban.Model.resource.has_gdal_support():
49        from gdalwarp import ProjectRasterFile
50    
51    
52  # 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
53  # method to the appropriate wxWindows constants  # method to the appropriate wxWindows constants
# Line 92  class MapRenderer(BaseRenderer): Line 97  class MapRenderer(BaseRenderer):
97          if (layer.ShapeStore().RawShapeFormat() == RAW_SHAPEFILE          if (layer.ShapeStore().RawShapeFormat() == RAW_SHAPEFILE
98              and layer.ShapeType() in (SHAPETYPE_ARC, SHAPETYPE_POLYGON)):              and layer.ShapeType() in (SHAPETYPE_ARC, SHAPETYPE_POLYGON)):
99              offx, offy = self.offset              offx, offy = self.offset
100                x = lambda a, b, c, d: None
101                #return (True, x, None)
102              return (True, draw_polygon_shape,              return (True, draw_polygon_shape,
103                      draw_polygon_init(layer.ShapeStore().Shapefile(),                      draw_polygon_init(layer.ShapeStore().Shapefile(),
104                                        self.dc, self.map.projection,                                        self.dc, self.map.projection,
# Line 104  class MapRenderer(BaseRenderer): Line 111  class MapRenderer(BaseRenderer):
111          return wxFont(int(round(self.resolution * 10)), wxSWISS, wxNORMAL,          return wxFont(int(round(self.resolution * 10)), wxSWISS, wxNORMAL,
112                        wxNORMAL)                        wxNORMAL)
113    
114      def draw_raster_data(self, x,y, data, format = 'BMP', mask = None):      def projected_raster_layer(self, layer, srcProj, dstProj, extents,
115                                   resolution, dimensions, options):
116    
117            ret = None
118    
119            if Thuban.Model.resource.has_gdal_support():
120    
121                if versions['wxPython-tuple'] < (2,5,3):
122                    options = options | 4  # INVERT_MASK_BITS
123                    options = options & ~2 # ALPHA_MASK not supported
124    
125                try:
126                    ret = ProjectRasterFile(layer.GetImageFilename(),
127                                            srcProj, dstProj,
128                                            extents, resolution, dimensions,
129                                            options)
130                except (MemoryError, IOError, AttributeError, ValueError):
131                    # Why does this catch AttributeError and ValueError?
132                    # FIXME: The exception should be communicated to the user
133                    # better.
134                    traceback.print_exc()
135    
136            return ret
137    
138        def draw_raster_data(self, x,y, data, format = 'BMP'):
139    
140            mask = None
141            width = data[0]
142            height = data[1]
143            image_data, mask_data, alpha_data = data[2]
144    
145            if versions['wxPython-tuple'] < (2,5,3):
146                alpha_data = None
147    
148          if format == 'RAW':          if format == 'RAW':
149              image = wxEmptyImage(data[0], data[1])              image = wxEmptyImage(width, height)
150              image.SetData(data[2])              image.SetData(image_data)
151                if mask_data is not None:
152                    mask = wxBitmapFromBits(mask_data, width, height, 1)
153                    mask = wxMask(mask)
154                elif alpha_data is not None:
155                    image.SetAlphaData(alpha_data)
156          else:          else:
157              stream = cStringIO.StringIO(data[2])              stream = cStringIO.StringIO(image_data)
158              image = wxImageFromStream(stream, raster_format_map[format])              image = wxImageFromStream(stream, raster_format_map[format])
159                if mask_data is not None:
160                    stream = cStringIO.StringIO(mask_data)
161                    mask = wxImageFromStream(stream, raster_format_map[format])
162                    mask = wxMask(wxBitmapFromImage(mask, 1))
163                elif alpha_data is not None:
164                    stream = cStringIO.StringIO(alpha_data)
165                    alpha = wxImageFromStream(stream, raster_format_map[format])
166                    image.SetAlpha(alpha.GetData()[:])
167    
168          bitmap = wxBitmapFromImage(image)          bitmap = wxBitmapFromImage(image)
169            bitmap.SetMask(mask)
170    
171          if mask is None:          self.dc.DrawBitmap(bitmap, int(round(x)), int(round(y)), True)
             self.dc.DrawBitmap(bitmap, int(round(x)), int(round(y)), False)  
         else:  
             # if we are given a mask object, try to pass it to SetMaskColour,  
             # otherwise assume it's a mask image  
             try:  
                 bitmap.SetMaskColour(mask);  
                 self.dc.DrawBitmap(bitmap, int(round(x)), int(round(y)), True)  
             except (TypeError):  
                 # implement using a mask image  
                 raise NotImplementedError  
172    
173    
174  class ScreenRenderer(MapRenderer):  class ScreenRenderer(MapRenderer):

Legend:
Removed from v.2537  
changed lines
  Added in v.2571

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26