/[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 2343 by bernhard, Mon Sep 20 08:13:32 2004 UTC revision 2562 by jonathan, Wed Feb 16 21:14:47 2005 UTC
# Line 25  from data import SHAPETYPE_POLYGON, SHAP Line 25  from data import SHAPETYPE_POLYGON, SHAP
25    
26  import resource  import resource
27    
28    from color import Color
29    
30  shapetype_names = {SHAPETYPE_POINT: "Point",  shapetype_names = {SHAPETYPE_POINT: "Point",
31                     SHAPETYPE_ARC: "Arc",                     SHAPETYPE_ARC: "Arc",
# Line 71  class BaseLayer(TitledObject, Modifiable Line 72  class BaseLayer(TitledObject, Modifiable
72          self.projection = projection          self.projection = projection
73          self.changed(LAYER_PROJECTION_CHANGED, self)          self.changed(LAYER_PROJECTION_CHANGED, self)
74    
75        def Type(self):
76            return "Unknown"
77    
78  class Layer(BaseLayer):  class Layer(BaseLayer):
79    
80      """Represent the information of one geodata file (currently a shapefile)      """Represent the information of one geodata file (currently a shapefile)
# Line 171  class Layer(BaseLayer): Line 175  class Layer(BaseLayer):
175              bbox = self.projection.InverseBBox(bbox)              bbox = self.projection.InverseBBox(bbox)
176          return bbox          return bbox
177    
178        def Type(self):
179            return self.ShapeType();
180    
181      def ShapesBoundingBox(self, shapes):      def ShapesBoundingBox(self, shapes):
182          """Return a bounding box in lat/long coordinates for the given          """Return a bounding box in lat/long coordinates for the given
183          list of shape ids.          list of shape ids.
# Line 337  if resource.has_gdal_support(): Line 344  if resource.has_gdal_support():
344    
345  class RasterLayer(BaseLayer):  class RasterLayer(BaseLayer):
346    
347        MASK_NONE  = 0
348        MASK_BIT   = 1
349        MASK_ALPHA = 2
350    
351      def __init__(self, title, filename, projection = None, visible = True):      def __init__(self, title, filename, projection = None, visible = True):
352          """Initialize the Raster Layer.          """Initialize the Raster Layer.
353    
# Line 360  class RasterLayer(BaseLayer): Line 371  class RasterLayer(BaseLayer):
371    
372          self.bbox = -1          self.bbox = -1
373    
374            self.mask_type = self.MASK_BIT
375            self.alpha_opacity = 1
376    
377            self.image_info = None
378    
379          if resource.has_gdal_support():          if resource.has_gdal_support():
380              #              #
381              # temporarily open the file so that GDAL can test if it's valid.              # temporarily open the file so that GDAL can test if it's valid.
# Line 369  class RasterLayer(BaseLayer): Line 385  class RasterLayer(BaseLayer):
385              if dataset is None:              if dataset is None:
386                  raise IOError()                  raise IOError()
387    
388                #
389                # while we have the file, extract some basic information
390                # that we can display later
391                #
392                self.image_info = {}
393    
394                self.image_info["nBands"] = dataset.RasterCount
395                self.image_info["Size"] = (dataset.RasterXSize, dataset.RasterYSize)
396                self.image_info["Driver"] = dataset.GetDriver().ShortName
397    
398                # store some information about the individual bands
399                # [min_value, max_value]
400                a = self.image_info["BandData"] = []
401    
402                for i in range(1, dataset.RasterCount+1):
403                    band = dataset.GetRasterBand(i)
404                    a.append(band.ComputeRasterMinMax())
405    
406          self.UnsetModified()          self.UnsetModified()
407    
408      def BoundingBox(self):      def BoundingBox(self):
# Line 423  class RasterLayer(BaseLayer): Line 457  class RasterLayer(BaseLayer):
457    
458          return bbox          return bbox
459    
460        def Type(self):
461            return "Image"
462    
463      def GetImageFilename(self):      def GetImageFilename(self):
464          return self.filename          return self.filename
465    
466        def MaskType(self):
467            """Return True if the mask should be used when rendering the layer."""
468            return self.mask_type
469    
470        def SetMaskType(self, type):
471            """Set the type of mask to use.
472    
473            type can be one of MASK_NONE, MASK_BIT, MASK_ALPHA
474    
475            If the state changes, a LAYER_CHANGED message is sent.
476            """
477            if type not in (self.MASK_NONE, self.MASK_BIT, self.MASK_ALPHA):
478                raise ValueError("type is invalid")
479    
480            if type != self.mask_type:
481                self.mask_type = type
482                self.changed(LAYER_CHANGED, self)
483    
484        def AlphaOpacity(self):
485            """Return the level of opacity used in alpha blending, or None
486            if mask type is not MASK_ALPHA.
487            """
488            if self.mask_type == self.MASK_ALPHA:
489                return self.alpha_opacity
490            else:
491                return None
492    
493        def SetAlphaOpacity(self, op):
494            """Set the level of alpha opacity.
495    
496            0 <= op <= 1.
497    
498            The layer is fully opaque when op = 1.
499            """
500            if not (0 <= op <= 1):
501                raise ValueError("op out of range")
502    
503            self.alpha_opacity = op
504    
505        def ImageInfo(self):
506            return self.image_info
507    
508      def TreeInfo(self):      def TreeInfo(self):
509          items = []          items = []
510    

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26