Class: Scruffy::Layers::Pie
- Inherits:
-
Base
- Object
- Base
- Scruffy::Layers::Pie
- Includes:
- Helpers::LayerContainer
- Defined in:
- lib/scruffy/layers/pie.rb
Overview
Scruffy::Layers::Pie
Author |
A.J. Ostman |
Date |
August 15, 2006 |
Provides a container for pie slice.
Constant Summary
- RADIANS =
Setup Constants
Math::PI/180
Instance Attribute Summary (collapse)
-
- (Object) center_x
Returns the value of attribute center_x.
-
- (Object) center_y
Returns the value of attribute center_y.
-
- (Object) degree_offset
Returns the value of attribute degree_offset.
-
- (Object) diameter
Returns the value of attribute diameter.
-
- (Object) percent_used
Returns the value of attribute percent_used.
-
- (Object) scaler
Returns the value of attribute scaler.
Attributes inherited from Base
#color, #complexity, #height, #max_value, #min_value, #opacity, #options, #points, #preferred_color, #relevant_data, #title, #width
Instance Method Summary (collapse)
-
- (Pie) initialize(options = {}, &block)
constructor
The initialize method passes itself to the block, and since Pie is a LayerContainer, layers (pie slice) can be added just as if they were being added to Graph.
-
- (Object) legend_data
A stacked graph has many data sets.
- - (Object) points=(val)
-
- (Object) render(svg, options = {})
Overrides Base#render to fiddle with layers' points to achieve a stacked effect.
Methods included from Helpers::LayerContainer
#<<, #bottom_value, #layers, #layers=, #top_value
Methods inherited from Base
#bottom_value, #draw, #relevant_data?, #sum_values, #top_value
Constructor Details
- (Pie) initialize(options = {}, &block)
The initialize method passes itself to the block, and since Pie is a LayerContainer, layers (pie slice) can be added just as if they were being added to Graph.
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/scruffy/layers/pie.rb', line 57 def initialize( = {}, &block) super() # Allow for population of data with a block during initialization. if block block.call(self) else # Otherwise, just iterate over the points, adding the slices if @points.class == Hash @points.keys.each {|k| self.add :pie_slice, k.to_s, [@points[k]]} end if @points.class == Array @points.each {|v| self.add :pie_slice, '', [v]} end end end |
Instance Attribute Details
- (Object) center_x
Returns the value of attribute center_x
51 52 53 |
# File 'lib/scruffy/layers/pie.rb', line 51 def center_x @center_x end |
- (Object) center_y
Returns the value of attribute center_y
51 52 53 |
# File 'lib/scruffy/layers/pie.rb', line 51 def center_y @center_y end |
- (Object) degree_offset
Returns the value of attribute degree_offset
49 50 51 |
# File 'lib/scruffy/layers/pie.rb', line 49 def degree_offset @degree_offset end |
- (Object) diameter
Returns the value of attribute diameter
47 48 49 |
# File 'lib/scruffy/layers/pie.rb', line 47 def diameter @diameter end |
- (Object) percent_used
Returns the value of attribute percent_used
48 49 50 |
# File 'lib/scruffy/layers/pie.rb', line 48 def percent_used @percent_used end |
- (Object) scaler
Returns the value of attribute scaler
50 51 52 |
# File 'lib/scruffy/layers/pie.rb', line 50 def scaler @scaler end |
Instance Method Details
- (Object) legend_data
A stacked graph has many data sets. Return legend information for all of them.
107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/scruffy/layers/pie.rb', line 107 def legend_data if relevant_data? retval = [] layers.each do |layer| retval << layer.legend_data end retval else nil end end |
- (Object) points=(val)
119 120 121 |
# File 'lib/scruffy/layers/pie.rb', line 119 def points=(val) throw ArgumentsError, "Pie layers cannot accept points, only pie slices." end |
- (Object) render(svg, options = {})
Overrides Base#render to fiddle with layers' points to achieve a stacked effect.
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
# File 'lib/scruffy/layers/pie.rb', line 79 def render(svg, = {}) # #current_points = points.dup @scaler = 1 total = 0 layers.each do |layer| total += layer.sum_values end @scaler = 100.0 / total @percent_used = 30 layers.each do |layer| = .dup = .merge(@options) = .merge(layer.) [:scaler] = @scaler [:percent_used] = @percent_used @percent_used += @scaler * layer.sum_values [:color] = layer.preferred_color || layer.color || [:theme].next_color layer.render(svg, ) end end |