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

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

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

revision 1387 by jonathan, Thu Jul 10 14:53:03 2003 UTC revision 1525 by jonathan, Wed Jul 30 15:42:56 2003 UTC
# Line 20  from range import Range Line 20  from range import Range
20  from classification import Classification, ClassGroupSingleton, \  from classification import Classification, ClassGroupSingleton, \
21      ClassGroupRange, ClassGroupProperties      ClassGroupRange, ClassGroupProperties
22    
23  def generate_singletons(_list, ramp, fixes=(None, None, None)):  def generate_singletons(_list, ramp):
24      """Generate a new classification consisting solely of singletons.      """Generate a new classification consisting solely of singletons.
25    
26      The resulting classification will consist of one group for each      The resulting classification will consist of one group for each
# Line 29  def generate_singletons(_list, ramp, fix Line 29  def generate_singletons(_list, ramp, fix
29      _list -- a list of values for each singleton      _list -- a list of values for each singleton
30    
31      ramp -- an object which implements the CustomRamp interface      ramp -- an object which implements the CustomRamp interface
   
     fixes -- a tuple (lineColor, lineWidth, fillColor) such that  
              if any item is not None, the appropriate property will  
              be fixed to that item value.  
32      """      """
33    
34      clazz = Classification()      clazz = Classification()
# Line 43  def generate_singletons(_list, ramp, fix Line 39  def generate_singletons(_list, ramp, fix
39    
40      for value in _list:      for value in _list:
41          prop = ramp.GetProperties(i / maxValue)          prop = ramp.GetProperties(i / maxValue)
         if fixes[0] is not None: prop.SetLineColor(fixes[0])  
         if fixes[1] is not None: prop.SetLineWidth(fixes[1])  
         if fixes[2] is not None: prop.SetFill(fixes[2])  
42          clazz.AppendGroup(ClassGroupSingleton(value, prop))          clazz.AppendGroup(ClassGroupSingleton(value, prop))
43          i += 1          i += 1
44    
45      return clazz      return clazz
46    
47  def generate_uniform_distribution(min, max, numGroups, ramp, intStep = False,  def generate_uniform_distribution(min, max, numGroups, ramp, intStep = False):
                                   fixes = (None, None, None)):  
48      """Generate a classification with numGroups range groups      """Generate a classification with numGroups range groups
49      each with the same interval.      each with the same interval.
50    
# Line 60  def generate_uniform_distribution(min, m Line 52  def generate_uniform_distribution(min, m
52                 Useful if the values are integers but the                 Useful if the values are integers but the
53                 number of groups specified doesn't evenly                 number of groups specified doesn't evenly
54                 divide (max - min).                 divide (max - min).
   
     fixes -- a tuple (lineColor, lineWidth, fillColor) such that  
              if any item is not None, the appropriate property will  
              be fixed to that item value.  
55      """      """
56    
57      clazz = Classification()      clazz = Classification()
# Line 92  def generate_uniform_distribution(min, m Line 80  def generate_uniform_distribution(min, m
80          else:          else:
81              _range = Range(("[", cur_min, cur_max, end))              _range = Range(("[", cur_min, cur_max, end))
82    
         if fixes[0] is not None: prop.SetLineColor(fixes[0])  
         if fixes[1] is not None: prop.SetLineWidth(fixes[1])  
         if fixes[2] is not None: prop.SetFill(fixes[2])  
   
83          clazz.AppendGroup(ClassGroupRange(_range, prop))          clazz.AppendGroup(ClassGroupRange(_range, prop))
84    
85          cur_min = cur_max          cur_min = cur_max
86    
87      return clazz      return clazz
88    
89  def generate_quantiles(_list, percents, ramp, _range, fixes=(None, None, None)):  def generate_quantiles(_list, percents, ramp, _range):
90      """Generates a Classification which has groups of ranges that      """Generates a Classification which has groups of ranges that
91      represent quantiles of _list at the percentages given in percents.      represent quantiles of _list at the percentages given in percents.
92      Only the values that fall within _range are considered.      Only the values that fall within _range are considered.
# Line 122  def generate_quantiles(_list, percents, Line 106  def generate_quantiles(_list, percents,
106    
107      _range -- a Range object      _range -- a Range object
108    
     fixes -- a tuple (lineColor, lineWidth, fillColor) such that  
              if any item is not None, the appropriate property will  
              be fixed to that item value.  
   
109      Raises a Value Error if 'percents' has fewer than two items, or      Raises a Value Error if 'percents' has fewer than two items, or
110      does not cover the entire range.      does not cover the entire range.
111      """      """
# Line 160  def generate_quantiles(_list, percents, Line 140  def generate_quantiles(_list, percents,
140                  else:                  else:
141                      max = _list[q]                      max = _list[q]
142    
                 if fixes[0] is not None: prop.SetLineColor(fixes[0])  
                 if fixes[1] is not None: prop.SetLineWidth(fixes[1])  
                 if fixes[2] is not None: prop.SetFill(fixes[2])  
   
143                  group = ClassGroupRange(Range((start, min, max, end)), prop)                  group = ClassGroupRange(Range((start, min, max, end)), prop)
144            
145                  group.SetLabel("%s%% - %s%%" % (round(oldp*100, 2),                  group.SetLabel("%s%% - %s%%" % (round(oldp*100, 2),
# Line 401  def calculate_quantiles(_list, percents, Line 377  def calculate_quantiles(_list, percents,
377  class CustomRamp:  class CustomRamp:
378    
379      def __init__(self, prop1, prop2):      def __init__(self, prop1, prop2):
380            """Create a ramp between prop1 and prop2."""
381          self.prop1 = prop1          self.prop1 = prop1
382          self.prop2 = prop2          self.prop2 = prop2
383    
384      def GetRamp(self):      def GetRamp(self):
385            """Return this ramp."""
386          return self          return self
387    
388      def GetProperties(self, index):      def GetProperties(self, index):
# Line 434  class CustomRamp: Line 412  class CustomRamp:
412          return newProps          return newProps
413    
414      def __SetProperty(self, color1, color2, index, setf):      def __SetProperty(self, color1, color2, index, setf):
415            """Use setf to set the appropriate property for the point
416            index percent between color1 and color2. setf is a function
417            to call that accepts a Color object or Transparent.
418            """
419    
420          if color1 is Transparent and color2 is Transparent:          if color1 is Transparent and color2 is Transparent:
421              setf(Transparent)              setf(Transparent)
# Line 454  class CustomRamp: Line 436  class CustomRamp:
436                  (color2.blue  - color1.blue)  * index + color1.blue))                  (color2.blue  - color1.blue)  * index + color1.blue))
437    
438  class MonochromaticRamp(CustomRamp):  class MonochromaticRamp(CustomRamp):
439        """Helper class to make ramps between two colors."""
440    
441      def __init__(self, start, end):      def __init__(self, start, end):
442            """Create a Monochromatic Ramp.
443    
444            start -- starting Color
445    
446            end -- ending Color
447            """
448          sp = ClassGroupProperties()          sp = ClassGroupProperties()
449          sp.SetLineColor(start)          sp.SetLineColor(start)
450          sp.SetFill(start)          sp.SetFill(start)
# Line 465  class MonochromaticRamp(CustomRamp): Line 455  class MonochromaticRamp(CustomRamp):
455    
456          CustomRamp.__init__(self, sp, ep)          CustomRamp.__init__(self, sp, ep)
457    
458  GreyRamp       = MonochromaticRamp(Color(1, 1, 1),  Color(0, 0, 0))  grey_ramp         = MonochromaticRamp(Color(1, 1, 1),  Color(0, 0, 0))
459  RedRamp        = MonochromaticRamp(Color(1, 1, 1),  Color(.8, 0, 0))  red_ramp          = MonochromaticRamp(Color(1, 1, 1),  Color(.8, 0, 0))
460  GreenRamp      = MonochromaticRamp(Color(1, 1, 1),  Color(0, .8, 0))  green_ramp        = MonochromaticRamp(Color(1, 1, 1),  Color(0, .8, 0))
461  BlueRamp       = MonochromaticRamp(Color(1, 1, 1),  Color(0, 0, .8))  blue_ramp         = MonochromaticRamp(Color(1, 1, 1),  Color(0, 0, .8))
462  GreenToRedRamp = MonochromaticRamp(Color(0, .8, 0), Color(1, 0, 0))  green_to_red_ramp = MonochromaticRamp(Color(0, .8, 0), Color(1, 0, 0))
463    
464  class HotToColdRamp:  class HotToColdRamp:
465        """A ramp that generates properties with colors ranging from
466        'hot' colors (e.g. red, orange) to 'cold' colors (e.g. green, blue)
467        """
468    
469      def GetRamp(self):      def GetRamp(self):
470            """Return this ramp."""
471          return self          return self
472    
473      def GetProperties(self, index):      def GetProperties(self, index):
# Line 504  class HotToColdRamp: Line 498  class HotToColdRamp:
498    
499          return prop          return prop
500    
501    class FixedRamp:
502        """FixedRamp allows particular properties of a ramp to be
503        held constant over the ramp.
504        """
505    
506        def __init__(self, ramp, fixes):
507            """
508            ramp -- a source ramp to get the default properties
509    
510            fixes -- a tuple (lineColor, lineWidth, fillColor) such that
511                 if any item is not None, the appropriate property will
512                 be fixed to that item value.
513            """
514    
515            self.fixes = fixes
516            self.ramp = ramp
517    
518        def GetRamp(self):
519            """Return this ramp."""
520            return self
521    
522        def GetProperties(self, index):
523            """Return a ClassGroupProperties object whose properties
524            represent a point at 'index' between the properties in
525            the ramp that initialized this FixedRamp.
526    
527            index -- a value such that 0 <= index <= 1
528            """
529    
530            props = self.ramp.GetProperties(index)
531            if self.fixes[0] is not None: props.SetLineColor(self.fixes[0])
532            if self.fixes[1] is not None: props.SetLineWidth(self.fixes[1])
533            if self.fixes[2] is not None: props.SetFill(self.fixes[2])
534    
535            return props

Legend:
Removed from v.1387  
changed lines
  Added in v.1525

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26