/[thuban]/trunk/thuban/Thuban/Model/layer.py
ViewVC logotype

Diff of /trunk/thuban/Thuban/Model/layer.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2339 by silke, Fri Aug 20 16:59:21 2004 UTC revision 2614 by jonathan, Fri May 6 14:16:38 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 55  class BaseLayer(TitledObject, Modifiable Line 56  class BaseLayer(TitledObject, Modifiable
56          self.issue(LAYER_VISIBILITY_CHANGED, self)          self.issue(LAYER_VISIBILITY_CHANGED, self)
57    
58      def HasClassification(self):      def HasClassification(self):
59          """Determine if this layer support classifications."""          """Determine if this layer supports classifications."""
60          return False          return False
61    
62      def HasShapes(self):      def HasShapes(self):
# Line 67  class BaseLayer(TitledObject, Modifiable Line 68  class BaseLayer(TitledObject, Modifiable
68          return self.projection          return self.projection
69    
70      def SetProjection(self, projection):      def SetProjection(self, projection):
71          """Set the layer's projection"""          """Set the layer's projection."""
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      def __init__(self, title, filename, projection = None, visible = True):      MASK_NONE  = 0
348        MASK_BIT   = 1
349        MASK_ALPHA = 2
350    
351        def __init__(self, title, filename, projection = None,
352                     visible = True, opacity = 1, masktype = MASK_BIT):
353          """Initialize the Raster Layer.          """Initialize the Raster Layer.
354    
355          title -- title for the layer.          title -- title for the layer.
# Line 360  class RasterLayer(BaseLayer): Line 372  class RasterLayer(BaseLayer):
372    
373          self.bbox = -1          self.bbox = -1
374    
375            self.mask_type = masktype
376            self.opacity = opacity
377    
378            self.image_info = None
379    
380          if resource.has_gdal_support():          if resource.has_gdal_support():
381              #              #
382              # 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 386  class RasterLayer(BaseLayer):
386              if dataset is None:              if dataset is None:
387                  raise IOError()                  raise IOError()
388    
389                #
390                # while we have the file, extract some basic information
391                # that we can display later
392                #
393                self.image_info = {}
394    
395                self.image_info["nBands"] = dataset.RasterCount
396                self.image_info["Size"] = (dataset.RasterXSize, dataset.RasterYSize)
397                self.image_info["Driver"] = dataset.GetDriver().ShortName
398    
399                # store some information about the individual bands
400                # [min_value, max_value]
401                a = self.image_info["BandData"] = []
402    
403                for i in range(1, dataset.RasterCount+1):
404                    band = dataset.GetRasterBand(i)
405                    a.append(band.ComputeRasterMinMax())
406    
407          self.UnsetModified()          self.UnsetModified()
408    
409      def BoundingBox(self):      def BoundingBox(self):
# Line 423  class RasterLayer(BaseLayer): Line 458  class RasterLayer(BaseLayer):
458    
459          return bbox          return bbox
460    
461        def Type(self):
462            return "Image"
463    
464      def GetImageFilename(self):      def GetImageFilename(self):
465          return self.filename          return self.filename
466    
467        def MaskType(self):
468            """Return True if the mask should be used when rendering the layer."""
469            return self.mask_type
470    
471        def SetMaskType(self, type):
472            """Set the type of mask to use.
473    
474            type can be one of MASK_NONE, MASK_BIT, MASK_ALPHA
475    
476            If the state changes, a LAYER_CHANGED message is sent.
477            """
478            if type not in (self.MASK_NONE, self.MASK_BIT, self.MASK_ALPHA):
479                raise ValueError("type is invalid")
480    
481            if type != self.mask_type:
482                self.mask_type = type
483                self.changed(LAYER_CHANGED, self)
484    
485        def Opacity(self):
486            """Return the level of opacity used in alpha blending.
487            """
488            return self.opacity
489    
490        def SetOpacity(self, op):
491            """Set the level of alpha opacity.
492    
493            0 <= op <= 1.
494    
495            The layer is fully opaque when op = 1.
496            """
497            if not (0 <= op <= 1):
498                raise ValueError("op out of range")
499    
500            if op != self.opacity:
501                self.opacity = op
502                self.changed(LAYER_CHANGED, self)
503    
504        def ImageInfo(self):
505            return self.image_info
506    
507      def TreeInfo(self):      def TreeInfo(self):
508          items = []          items = []
509    

Legend:
Removed from v.2339  
changed lines
  Added in v.2614

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26