/[thuban]/branches/WIP-pyshapelib-bramz/Thuban/Model/layer.py
ViewVC logotype

Diff of /branches/WIP-pyshapelib-bramz/Thuban/Model/layer.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 2644 by bh, Tue Jul 5 16:30:51 2005 UTC
# Line 1  Line 1 
1  # Copyright (c) 2001, 2002, 2003, 2004 by Intevation GmbH  # Copyright (c) 2001, 2002, 2003, 2004, 2005 by Intevation GmbH
2  # Authors:  # Authors:
3  # Bernhard Herzog <[email protected]>  # Bernhard Herzog <[email protected]>
4  # Jonathan Coles <[email protected]>  # Jonathan Coles <[email protected]>
# Line 237  class Layer(BaseLayer): Line 237  class Layer(BaseLayer):
237              # Ensure that region lies within the layer's bounding box              # Ensure that region lies within the layer's bounding box
238              # Otherwise projection of the region would lead to incorrect              # Otherwise projection of the region would lead to incorrect
239              # values.              # values.
240              clipbbox = self.ClipBoundingBox(bbox)              clipbbox = self.__mangle_bounding_box(bbox)
241              bbox = self.projection.ForwardBBox(clipbbox)              bbox = self.projection.ForwardBBox(clipbbox)
242          return self.store.ShapesInRegion(bbox)          return self.store.ShapesInRegion(bbox)
243    
# Line 314  class Layer(BaseLayer): Line 314  class Layer(BaseLayer):
314    
315          return (_("Layer '%s'") % self.Title(), items)          return (_("Layer '%s'") % self.Title(), items)
316    
317      def ClipBoundingBox(self, bbox):      def __mangle_bounding_box(self, bbox):
318          """ Clip bbox to layer's bounding box.          # FIXME: This method doesn't make much sense.
319            # See RT #2845 which effectively says:
320          Returns that part of bbox that lies within the layers bounding box.          #
321          If bbox is completely outside of the layers bounding box, bbox is          # If this method, which was originally called ClipBoundingBox,
322          returned.  It is assumed that bbox has sensible values, i.e. bminx          # is supposed to do clipping it shouldn't return the parameter
323          < bmaxx and bminy < bmaxy.          # unchanged when it lies completely outside of the bounding box.
324          """          # It would be better to return None and return an empty list in
325            # ShapesInRegion (the only caller) in that case.
326            #
327            # This method was introduced to fix a bug that IIRC had
328            # something todo with projections and bounding boxes containing
329            # NaN or INF when the parameter to ShapesInRegion covered the
330            # entire earth or something similarly large).
331          bminx, bminy, bmaxx, bmaxy = bbox          bminx, bminy, bmaxx, bmaxy = bbox
332          lminx, lminy, lmaxx, lmaxy = self.LatLongBoundingBox()          lminx, lminy, lmaxx, lmaxy = self.LatLongBoundingBox()
333          if bminx > lmaxx or bmaxx < lminx:          if bminx > lmaxx or bmaxx < lminx:
# Line 334  class Layer(BaseLayer): Line 340  class Layer(BaseLayer):
340          else:          else:
341              bottom = max(lminy, bminy)              bottom = max(lminy, bminy)
342              top = min(lmaxy, bmaxy)              top = min(lmaxy, bmaxy)
343            
344          return (left, bottom, right, top)          return (left, bottom, right, top)
345    
346    
# Line 348  class RasterLayer(BaseLayer): Line 354  class RasterLayer(BaseLayer):
354      MASK_BIT   = 1      MASK_BIT   = 1
355      MASK_ALPHA = 2      MASK_ALPHA = 2
356    
357      def __init__(self, title, filename, projection = None, visible = True):      def __init__(self, title, filename, projection = None,
358                     visible = True, opacity = 1, masktype = MASK_BIT):
359          """Initialize the Raster Layer.          """Initialize the Raster Layer.
360    
361          title -- title for the layer.          title -- title for the layer.
# Line 371  class RasterLayer(BaseLayer): Line 378  class RasterLayer(BaseLayer):
378    
379          self.bbox = -1          self.bbox = -1
380    
381          self.mask_type = self.MASK_BIT          self.mask_type = masktype
382          self.alpha_opacity = 1          self.opacity = opacity
383    
384          self.image_info = None          self.image_info = None
385    
# Line 481  class RasterLayer(BaseLayer): Line 488  class RasterLayer(BaseLayer):
488              self.mask_type = type              self.mask_type = type
489              self.changed(LAYER_CHANGED, self)              self.changed(LAYER_CHANGED, self)
490    
491      def AlphaOpacity(self):      def Opacity(self):
492          """Return the level of opacity used in alpha blending, or None          """Return the level of opacity used in alpha blending.
         if mask type is not MASK_ALPHA.  
493          """          """
494          if self.mask_type == self.MASK_ALPHA:          return self.opacity
             return self.alpha_opacity  
         else:  
             return None  
495    
496      def SetAlphaOpacity(self, op):      def SetOpacity(self, op):
497          """Set the level of alpha opacity.          """Set the level of alpha opacity.
498    
499          0 <= op <= 1.          0 <= op <= 1.
# Line 500  class RasterLayer(BaseLayer): Line 503  class RasterLayer(BaseLayer):
503          if not (0 <= op <= 1):          if not (0 <= op <= 1):
504              raise ValueError("op out of range")              raise ValueError("op out of range")
505    
506          self.alpha_opacity = op          if op != self.opacity:
507                self.opacity = op
508                self.changed(LAYER_CHANGED, self)
509    
510      def ImageInfo(self):      def ImageInfo(self):
511          return self.image_info          return self.image_info

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26