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

Diff of /branches/WIP-pyshapelib-bramz/Thuban/Model/classification.py

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

revision 679 by jonathan, Tue Apr 15 19:46:37 2003 UTC revision 873 by jonathan, Fri May 9 16:30:54 2003 UTC
# Line 23  on the mapping algorithm. Line 23  on the mapping algorithm.
23  # fix for people using python2.1  # fix for people using python2.1
24  from __future__ import nested_scopes  from __future__ import nested_scopes
25    
26  import copy  import copy, operator
27    
28  from Thuban import _  from Thuban import _
29    
30  from types import *  import types
31    
32  from messages import \  from messages import \
33      LAYER_PROJECTION_CHANGED, \      LAYER_PROJECTION_CHANGED, \
# Line 35  from messages import \ Line 35  from messages import \
35      LAYER_VISIBILITY_CHANGED      LAYER_VISIBILITY_CHANGED
36    
37  from Thuban.Model.color import Color  from Thuban.Model.color import Color
38    from Thuban.Model.range import Range
39    
40  import Thuban.Model.layer  import Thuban.Model.layer
41    
# Line 222  class Classification: Line 223  class Classification:
223    
224          lineWidth -- an integer > 0.          lineWidth -- an integer > 0.
225          """          """
226          assert isinstance(lineWidth, IntType)          assert isinstance(lineWidth, types.IntType)
227          self.GetDefaultGroup().GetProperties().SetLineWidth(lineWidth)          self.GetDefaultGroup().GetProperties().SetLineWidth(lineWidth)
228          self.__SendNotification()          self.__SendNotification()
229                    
# Line 469  class ClassGroupProperties: Line 470  class ClassGroupProperties:
470    
471          lineWidth -- the new line width. This must be > 0.          lineWidth -- the new line width. This must be > 0.
472          """          """
473          assert isinstance(lineWidth, IntType)          assert isinstance(lineWidth, types.IntType)
474          if (lineWidth < 1):          if (lineWidth < 1):
475              raise ValueError(_("lineWidth < 1"))              raise ValueError(_("lineWidth < 1"))
476    
# Line 511  class ClassGroupProperties: Line 512  class ClassGroupProperties:
512      def __deepcopy__(self):      def __deepcopy__(self):
513          return ClassGroupProperties(self)          return ClassGroupProperties(self)
514    
515        def __repr__(self):
516            return repr((self.__stroke, self.__strokeWidth, self.__fill))
517    
518  class ClassGroup:  class ClassGroup:
519      """A base class for all Groups within a Classification"""      """A base class for all Groups within a Classification"""
520    
# Line 539  class ClassGroup: Line 543  class ClassGroup:
543          label -- a string representing the Group's label. This must          label -- a string representing the Group's label. This must
544                   not be None.                   not be None.
545          """          """
546          assert isinstance(label, StringType)          assert isinstance(label, types.StringTypes)
547          self.label = label          self.label = label
548    
549      def GetDisplayText(self):      def GetDisplayText(self):
# Line 578  class ClassGroup: Line 582  class ClassGroup:
582    
583      def __eq__(self, other):      def __eq__(self, other):
584          return isinstance(other, ClassGroup) \          return isinstance(other, ClassGroup) \
585                and self.label == other.label \
586              and self.GetProperties() == other.GetProperties()              and self.GetProperties() == other.GetProperties()
587    
588      def __ne__(self, other):      def __ne__(self, other):
589          return not self.__eq__(other)          return not self.__eq__(other)
590    
591        def __repr__(self):
592            return repr(self.label) + ", " + repr(self.GetProperties())
593            
594  class ClassGroupSingleton(ClassGroup):  class ClassGroupSingleton(ClassGroup):
595      """A Group that is associated with a single value."""      """A Group that is associated with a single value."""
# Line 636  class ClassGroupSingleton(ClassGroup): Line 643  class ClassGroupSingleton(ClassGroup):
643              and isinstance(other, ClassGroupSingleton) \              and isinstance(other, ClassGroupSingleton) \
644              and self.__value == other.__value              and self.__value == other.__value
645    
646        def __repr__(self):
647            return "(" + repr(self.__value) + ", " + ClassGroup.__repr__(self) + ")"
648    
649  class ClassGroupDefault(ClassGroup):  class ClassGroupDefault(ClassGroup):
650      """The default Group. When values do not match any other      """The default Group. When values do not match any other
651         Group within a Classification, the properties from this         Group within a Classification, the properties from this
# Line 673  class ClassGroupDefault(ClassGroup): Line 683  class ClassGroupDefault(ClassGroup):
683              and isinstance(other, ClassGroupDefault) \              and isinstance(other, ClassGroupDefault) \
684              and self.GetProperties() == other.GetProperties()              and self.GetProperties() == other.GetProperties()
685    
686        def __repr__(self):
687            return "(" + ClassGroup.__repr__(self) + ")"
688    
689  class ClassGroupRange(ClassGroup):  class ClassGroupRange(ClassGroup):
690      """A Group that represents a range of values that map to the same      """A Group that represents a range of values that map to the same
691         set of properties."""         set of properties."""
# Line 694  class ClassGroupRange(ClassGroup): Line 707  class ClassGroupRange(ClassGroup):
707    
708          ClassGroup.__init__(self, label, props, group)          ClassGroup.__init__(self, label, props, group)
709    
710          self.__min = self.__max = 0          #self.__min = self.__max = 0
711            #self.__range = Range("[" + repr(float(min)) + ";" +
712                                       #repr(float(max)) + "[")
713          self.SetRange(min, max)          self.SetRange(min, max)
714    
715      def __copy__(self):      def __copy__(self):
716          return ClassGroupRange(self.GetMin(),          return ClassGroupRange(min = self.__range,
717                                 self.GetMax(),                                 max = None,
718                                 self.GetProperties(),                                 props = self.GetProperties(),
719                                 self.GetLabel())                                 label = self.GetLabel())
720    
721      def __deepcopy__(self, memo):      def __deepcopy__(self, memo):
722          return ClassGroupRange(copy.copy(self.GetMin()),          return ClassGroupRange(min = copy.copy(self.__range),
723                                 copy.copy(self.GetMax()),                                 max = copy.copy(self.GetMax()),
724                                 group = self)                                 group = self)
725    
726      def GetMin(self):      def GetMin(self):
727          """Return the range's minimum value."""          """Return the range's minimum value."""
728          return self.__min          return self.__range.GetRange()[1]
729    
730      def SetMin(self, min):      def SetMin(self, min):
731          """Set the range's minimum value.          """Set the range's minimum value.
# Line 720  class ClassGroupRange(ClassGroup): Line 734  class ClassGroupRange(ClassGroup):
734                 maximum value. Use SetRange() to change both min and max values.                 maximum value. Use SetRange() to change both min and max values.
735          """          """
736            
737          self.SetRange(min, self.__max)          self.SetRange(min, self.__range.GetRange()[2])
738    
739      def GetMax(self):      def GetMax(self):
740          """Return the range's maximum value."""          """Return the range's maximum value."""
741          return self.__max          return self.__range.GetRange()[2]
742    
743      def SetMax(self, max):      def SetMax(self, max):
744          """Set the range's maximum value.          """Set the range's maximum value.
# Line 732  class ClassGroupRange(ClassGroup): Line 746  class ClassGroupRange(ClassGroup):
746          max -- the new maximum. Note that this must be greater than the current          max -- the new maximum. Note that this must be greater than the current
747                 minimum value. Use SetRange() to change both min and max values.                 minimum value. Use SetRange() to change both min and max values.
748          """          """
749          self.SetRange(self.__min, max)          self.SetRange(self.__range.GetRange()[1], max)
750    
751      def SetRange(self, min, max):      def SetRange(self, min, max = None):
752          """Set a new range.          """Set a new range.
753    
754          Note that min must be strictly less than max.          Note that min must be strictly less than max.
# Line 743  class ClassGroupRange(ClassGroup): Line 757  class ClassGroupRange(ClassGroup):
757          min -- the new maximum value          min -- the new maximum value
758          """          """
759    
760          if min >= max:          if isinstance(min, Range):
761              raise ValueError(_("ClassGroupRange: %i(min) >= %i(max)!") %              self.__range = min
762                               (min, max))          else:
763          self.__min = min              if max is None:
764          self.__max = max                  raise ValueError()
765    
766                self.__range = Range("[" + repr(float(min)) + ";" +
767                                           repr(float(max)) + "[")
768    
769      def GetRange(self):      def GetRange(self):
770          """Return the range as a tuple (min, max)"""          """Return the range as a string"""
771          return (self.__min, self.__max)          #return (self.__min, self.__max)
772            return self.__range.string(self.__range.GetRange())
773    
774      def Matches(self, value):      def Matches(self, value):
775          """Determine if the given value lies with the current range.          """Determine if the given value lies with the current range.
# Line 759  class ClassGroupRange(ClassGroup): Line 777  class ClassGroupRange(ClassGroup):
777          The following check is used: min <= value < max.          The following check is used: min <= value < max.
778          """          """
779    
780          return self.__min <= value < self.__max          return operator.contains(self.__range, value)
781            #return self.__min <= value < self.__max
782    
783      def GetDisplayText(self):      def GetDisplayText(self):
784          label = self.GetLabel()          label = self.GetLabel()
785    
786          if label != "": return label          if label != "": return label
787    
788          return _("%s - %s") % (self.GetMin(), self.GetMax())          #return _("%s - %s") % (self.GetMin(), self.GetMax())
789            #return repr(self.__range)
790            return self.__range.string(self.__range.GetRange())
791    
792      def __eq__(self, other):      def __eq__(self, other):
793          return ClassGroup.__eq__(self, other) \          return ClassGroup.__eq__(self, other) \
794              and isinstance(other, ClassGroupRange) \              and isinstance(other, ClassGroupRange) \
795              and self.__min == other.__min \              and self.__range == other.__range
796              and self.__max == other.__max              #and self.__min == other.__min \
797                #and self.__max == other.__max
798    
799        def __repr__(self):
800            return "(" + str(self.__range) + ClassGroup.__repr__(self) + ")"
801            #return "(" + repr(self.__min) + ", " + repr(self.__max) + ", " + \
802                   #ClassGroup.__repr__(self) + ")"
803    
804  class ClassGroupMap(ClassGroup):  class ClassGroupMap(ClassGroup):
805      """Currently, this class is not used."""      """Currently, this class is not used."""

Legend:
Removed from v.679  
changed lines
  Added in v.873

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26