class SvgDrawer::Polyline

Public Class Methods

new(points, params = {}) click to toggle source
Calls superclass method SvgDrawer::Base::new
# File lib/svg_drawer/polyline.rb, line 33
def initialize(points, params = {})
  @points = points
  super(params)
end

Public Instance Methods

height() click to toggle source
# File lib/svg_drawer/polyline.rb, line 44
def height
  param(:overflow) ?
    param(:height, calc_height) :
    [param(:height, 0), calc_height].max
end
incomplete() click to toggle source
# File lib/svg_drawer/polyline.rb, line 50
def incomplete
  @points.size < 4 || @points.size.odd? ? self : nil
end
max_x() click to toggle source
# File lib/svg_drawer/polyline.rb, line 58
def max_x
  @max_x ||= @points.each_slice(2).max_by(&:first).first + cap_size
end
max_y() click to toggle source
# File lib/svg_drawer/polyline.rb, line 66
def max_y
  @max_y ||= @points.each_slice(2).max_by(&:last).last + cap_size
end
min_x() click to toggle source
# File lib/svg_drawer/polyline.rb, line 54
def min_x
  @min_x ||= @points.each_slice(2).min_by(&:first).first - cap_size
end
min_y() click to toggle source
# File lib/svg_drawer/polyline.rb, line 62
def min_y
  @min_y ||= @points.each_slice(2).min_by(&:last).last - cap_size
end
width() click to toggle source
# File lib/svg_drawer/polyline.rb, line 38
def width
  param(:overflow) ?
    param(:width, calc_width) :
    [param(:width, 0), calc_width].max
end

Private Instance Methods

_draw(parent) click to toggle source
# File lib/svg_drawer/polyline.rb, line 72
def _draw(parent)
  size = param(:scale_size) ? param(:size) : param(:size) / scale
  dotspace = param(:scale_size) ? param(:dotspace) : param(:dotspace) / scale
  dotsize = size
  style = {}

  if param(:linecap).eql?('round')
    dotsize = 0
    dotspace *= 2
  end

  # need symbol keys due to a bug in Rasem::SVGTag#write_styles
  style[:fill] = param(:fill)
  style[:stroke] = param(:stroke)
  style[:'stroke-width'] = size
  style[:'stroke-linecap'] = param(:linecap)
  style[:'stroke-linejoin'] = param(:linejoin)
  style[:'stroke-dasharray'] = "#{dotsize}, #{dotspace}" if dotspace > 0

  Utils::RasemWrapper.group(parent, class: 'polyline') do |polyline_group|
    poly = polyline_group.polyline(@points, style: style.dup)
    poly.translate(translate_x, translate_y).scale(scale, scale)
  end
end
calc_height() click to toggle source
# File lib/svg_drawer/polyline.rb, line 101
def calc_height
  calc_height_unscaled * scale
end
calc_height_unscaled() click to toggle source
# File lib/svg_drawer/polyline.rb, line 109
def calc_height_unscaled
  max_y - min_y
end
calc_width() click to toggle source
# File lib/svg_drawer/polyline.rb, line 97
def calc_width
  calc_width_unscaled * scale
end
calc_width_unscaled() click to toggle source
# File lib/svg_drawer/polyline.rb, line 105
def calc_width_unscaled
  max_x - min_x
end
cap_size() click to toggle source
# File lib/svg_drawer/polyline.rb, line 167
def cap_size
  %w[round square].include?(param(:linecap)) ? param(:size).to_d / 2 : 0
end
height_unscaled() click to toggle source
# File lib/svg_drawer/polyline.rb, line 119
def height_unscaled
  param(:overflow) ?
    param(:height, calc_height_unscaled) :
    [param(:height, 0), calc_height_unscaled].max
end
scale() click to toggle source
# File lib/svg_drawer/polyline.rb, line 125
def scale
  [scale_x, scale_y].min * param(:scale)
end
scale_x() click to toggle source
# File lib/svg_drawer/polyline.rb, line 129
def scale_x
  return 1 unless param(:width) && (param(:expand) || param(:shrink))
  scale = param(:width).to_d / calc_width_unscaled
  return 1 if (scale > 1 && !param(:expand)) || (scale < 1 && !param(:shrink))
  scale
end
scale_y() click to toggle source
# File lib/svg_drawer/polyline.rb, line 136
def scale_y
  return 1 unless param(:height) && (param(:expand) || param(:shrink))
  scale = param(:height).to_d / calc_height_unscaled
  return 1 if (scale > 1 && !param(:expand)) || (scale < 1 && !param(:shrink))
  scale
end
translate_x() click to toggle source
# File lib/svg_drawer/polyline.rb, line 143
def translate_x
  width_diff = (width - calc_width)

  case param(:x_reposition)
  when 'left' then -min_x * scale
  when 'center' then -min_x * scale + width_diff / 2
  when 'right' then -min_x * scale + width_diff
  when 'none' then 0
  else raise "Bad x_reposition: #{param(:x_reposition)}. Valid are: [left, right, center, none]"
  end
end
translate_y() click to toggle source
# File lib/svg_drawer/polyline.rb, line 155
def translate_y
  height_diff = height - calc_height

  case param(:y_reposition)
  when 'top' then -min_y * scale
  when 'middle' then -min_y * scale + height_diff / 2
  when 'bottom' then -min_y * scale + height_diff
  when 'none' then 0
  else raise "Bad y_reposition: #{param(:y_reposition)}. Valid are: [top, bottom, middle, none]"
  end
end
width_unscaled() click to toggle source
# File lib/svg_drawer/polyline.rb, line 113
def width_unscaled
  param(:overflow) ?
    param(:width, calc_width_unscaled) :
    [param(:width, 0), calc_width_unscaled].max
end