Module: Rubyvis::Layout::Fill

Defined in:
lib/rubyvis/layout/hierarchy.rb

Overview

end class

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#_hObject

Returns the value of attribute _h.



129
130
131
# File 'lib/rubyvis/layout/hierarchy.rb', line 129

def _h
  @_h
end

#_orObject

Returns the value of attribute _or.



129
130
131
# File 'lib/rubyvis/layout/hierarchy.rb', line 129

def _or
  @_or
end

#_orientObject

Returns the value of attribute _orient.



129
130
131
# File 'lib/rubyvis/layout/hierarchy.rb', line 129

def _orient
  @_orient
end

#_wObject

Returns the value of attribute _w.



129
130
131
# File 'lib/rubyvis/layout/hierarchy.rb', line 129

def _w
  @_w
end

#irObject

Returns the value of attribute ir.



129
130
131
# File 'lib/rubyvis/layout/hierarchy.rb', line 129

def ir
  @ir
end

Instance Method Details

#angle(n) ⇒ Object



244
245
246
# File 'lib/rubyvis/layout/hierarchy.rb', line 244

def angle(n)
  (n.parent_node ? n.max_breadth - n.min_breadth : 1 ) * 2 * Math::PI
end

#dx(n) ⇒ Object

end method



213
214
215
216
217
218
219
220
221
# File 'lib/rubyvis/layout/hierarchy.rb', line 213

def dx(n)
  if @_orient=='left' or @_orient=='right'
    (n.max_depth - n.min_depth) / (1.0 + @_depth) * @_w
  elsif @_orient=='top' or @_orient=='bottom'
    (n.max_breadth - n.min_breadth) * @_w
  elsif @_orient=='radial'
    n.parent_node ? (n.inner_radius + n.outer_radius) * Math.cos(n.mid_angle) : 0
  end          
end

#dy(n) ⇒ Object



223
224
225
226
227
228
229
230
231
# File 'lib/rubyvis/layout/hierarchy.rb', line 223

def dy(n)
  if @_orient=='left' or @_orient=='right'
    (n.max_breadth - n.min_breadth) * @_h
  elsif @_orient=='top' or @_orient=='bottom'
    (n.max_depth - n.min_depth) / (1.0 + @_depth) * @_h
  elsif orient=='radial'
    n.parent_node ? (n.inner_radius + n.outer_radius) * Math.sin(n.mid_angle) : 0
  end        
end

#fill_build_implied(s) ⇒ Object



148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
# File 'lib/rubyvis/layout/hierarchy.rb', line 148

def fill_build_implied(s)
  nodes = s.nodes
  @_orient= s.orient
  @_orient=~/^(top|bottom)$/
  horizontal = !$1.nil?
  @_w = s.width
  @_h = s.height
  @_depth = -nodes[0].min_depth
  if @_orient == "radial"
    @_ir = s.inner_radius
    @_or = s.outer_radius
    @_ir||=0
    @_depth = @_depth * 2 if @_ir!=0
    @_or||=[@_w,@_h].min / 2.0
  end
  nodes.each_with_index {|n,i|
    n.x = fill_x(n)
    n.y = fill_y(n)
    if @_orient == "radial"
      n.inner_radius = inner_radius(n);
      n.outer_radius = outer_radius(n);
      n.start_angle = start_angle(n);
      n.angle = angle(n);
      n.mid_angle = n.start_angle + n.angle / 2.0
    else 
      n.mid_angle = horizontal ? -Math::PI / 2.0 : 0
    end
    n.dx = dx(n)
    n.dy = dy(n)
  }
  false
end

#fill_constructorObject



130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
# File 'lib/rubyvis/layout/hierarchy.rb', line 130

def fill_constructor
  @node.stroke_style("#fff").
    fill_style("#ccc").
    width(lambda {|n| n.dx}).
    height(lambda {|n| n.dy}).
    inner_radius(lambda {|n| n.inner_radius}).
    outer_radius(lambda {|n| n.outer_radius}).
    start_angle(lambda {|n| n.start_angle}).
    angle(lambda {|n| n.angle})
  
    @node_label.
      text_align("center").
      left(lambda {|n| n.x+ (n.dx / 2.0) }).
      top(lambda {|n| n.y+(n.dy / 2.0)})
    @link=nil
  
end

#fill_scale(d, depth) ⇒ Object



181
182
183
# File 'lib/rubyvis/layout/hierarchy.rb', line 181

def fill_scale(d, depth)
  (d + depth) / (1 + depth).to_f
end

#fill_x(n) ⇒ Object



184
185
186
187
188
189
190
191
192
193
194
195
196
197
# File 'lib/rubyvis/layout/hierarchy.rb', line 184

def fill_x(n)
  case @_orient
    when "left"
      fill_scale(n.min_depth,@_depth)*@_w
    when "right"
      (1-fill_scale(n.max_depth,@_depth))*@_w
    when "top"
      n.min_breadth*@_w
    when "bottom"
      (1-n.max_breath)*@_w
    when "radial"
      @_w / 2.0
  end
end

#fill_y(n) ⇒ Object



198
199
200
201
202
203
204
205
206
207
208
209
210
211
# File 'lib/rubyvis/layout/hierarchy.rb', line 198

def fill_y(n)
  case @_orient
    when "left"
      n.min_breadth*@_h
    when "right"
      (1-n.max_breadth)*@_h
    when "top"
      fill_scale(n.min_depth, @_depth) * @_h            
    when "bottom"
      (1-fill_scale(n.max_depth, @_depth)) * @_h
    when "radial"
      @_h / 2.0
  end # end case
end

#inner_radius(n) ⇒ Object



233
234
235
# File 'lib/rubyvis/layout/hierarchy.rb', line 233

def inner_radius(n)
  [0, fill_scale(n.min_depth, @_depth/2.0)].max * (@_or - @_ir) + @_ir
end

#outer_radius(n) ⇒ Object



237
238
239
# File 'lib/rubyvis/layout/hierarchy.rb', line 237

def outer_radius(n)
  fill_scale(n.max_depth, @_depth / 2.0) * (@_or - @_ir) + @_ir
end

#start_angle(n) ⇒ Object



241
242
243
# File 'lib/rubyvis/layout/hierarchy.rb', line 241

def start_angle(n)
  (n.parent_node ? n.min_breadth - 0.25 : 0) * 2 * Math::PI
end