/[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 2394 by jan, Wed Nov 17 22:02:29 2004 UTC revision 2571 by jonathan, Fri Feb 18 14:54:17 2005 UTC
# Line 21  from Thuban import _ Line 21  from Thuban import _
21  from wxPython.wx import wxPoint, wxRect, wxPen, wxBrush, wxFont, \  from wxPython.wx import wxPoint, wxRect, wxPen, wxBrush, wxFont, \
22      wxTRANSPARENT_PEN, wxTRANSPARENT_BRUSH, \      wxTRANSPARENT_PEN, wxTRANSPARENT_BRUSH, \
23      wxBLACK_PEN, wxBLACK, wxSOLID, wxCROSS_HATCH, wxSWISS, wxNORMAL, \      wxBLACK_PEN, wxBLACK, wxSOLID, wxCROSS_HATCH, wxSWISS, wxNORMAL, \
24      wxBitmapFromImage, wxImageFromStream, wxBITMAP_TYPE_BMP, wxBITMAP_TYPE_JPEG      wxBitmapFromImage, wxImageFromStream, wxBITMAP_TYPE_BMP, \
25        wxBITMAP_TYPE_JPEG, wxBITMAP_TYPE_PNG, wxBITMAP_TYPE_TIF, \
26        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 37  import Thuban.Model.resource Line 39  import Thuban.Model.resource
39    
40  from baserenderer import BaseRenderer  from baserenderer import BaseRenderer
41    
42    from math import floor
43    
44    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
54  raster_format_map = {  raster_format_map = {
55      "BMP": wxBITMAP_TYPE_BMP,      "BMP": wxBITMAP_TYPE_BMP,
56      "JPEG": wxBITMAP_TYPE_JPEG,      "JPEG": wxBITMAP_TYPE_JPEG,
57        "PNG": wxBITMAP_TYPE_PNG,
58        "TIFF": wxBITMAP_TYPE_TIF,
59        "GIF": wxBITMAP_TYPE_GIF,
60      }      }
61    
62  class MapRenderer(BaseRenderer):  class MapRenderer(BaseRenderer):
# Line 83  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 95  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, data, format = 'BMP'):      def projected_raster_layer(self, layer, srcProj, dstProj, extents,
115          stream = cStringIO.StringIO(data)                                 resolution, dimensions, options):
116          image = wxImageFromStream(stream, raster_format_map[format])  
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':
149                image = wxEmptyImage(width, height)
150                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:
157                stream = cStringIO.StringIO(image_data)
158                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          self.dc.DrawBitmap(bitmap, 0, 0)          bitmap.SetMask(mask)
170    
171            self.dc.DrawBitmap(bitmap, int(round(x)), int(round(y)), True)
172    
173    
174  class ScreenRenderer(MapRenderer):  class ScreenRenderer(MapRenderer):
# Line 162  class ScreenRenderer(MapRenderer): Line 231  class ScreenRenderer(MapRenderer):
231    
232              # Get the size of the specific property for this              # Get the size of the specific property for this
233              # point              # point
234              if shapetype == SHAPETYPE_POINT:              if shapetype == SHAPETYPE_POINT and field is not None:
235                  value = table.ReadValue(shape.ShapeID(), field)                  value = table.ReadValue(shape.ShapeID(), field)
236                  group = lc.FindGroup(value)                  group = lc.FindGroup(value)
237                  size = group.GetProperties().GetSize()                  size = group.GetProperties().GetSize()
# Line 264  class ExportRenderer(ScreenRenderer): Line 333  class ExportRenderer(ScreenRenderer):
333          self.shifty = (mmaxy - mminy)*0.5 - (ury - lly)*0.5          self.shifty = (mmaxy - mminy)*0.5 - (ury - lly)*0.5
334    
335          self.offset = (offx+self.shiftx, offy+self.shifty)          self.offset = (offx+self.shiftx, offy+self.shifty)
336            self.region = (llx + self.shiftx, lly + self.shifty, urx, ury)
337    
338          # Draw the map          # Draw the map
339          self.dc.BeginDrawing()          self.dc.BeginDrawing()

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26