class SvgDrawer::Multipolyline

Public Class Methods

new(strokes, params = {}) click to toggle source
Calls superclass method SvgDrawer::Base::new
# File lib/svg_drawer/multipolyline.rb, line 20
def initialize(strokes, params = {})
  super(params)
  @polylines = strokes.map { |stroke| Polyline.new(stroke, child_params) }
end

Public Instance Methods

height() click to toggle source
# File lib/svg_drawer/multipolyline.rb, line 31
def height
  param(:overflow) ?
    param(:height, calc_height) :
    [param(:height, 0), calc_height].max
end
incomplete() click to toggle source
# File lib/svg_drawer/multipolyline.rb, line 37
def incomplete
  @polylines.none? ? self : @polylines.find(&:incomplete)
end
width() click to toggle source
# File lib/svg_drawer/multipolyline.rb, line 25
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/multipolyline.rb, line 43
def _draw(parent)
  unless param(:scale_size)
    @polylines.each { |p| p.update_params!(size: param(:size) / scale) }
  end

  Utils::RasemWrapper.group(parent, class: 'multi_polyline') do |mpoly_group|
    # Need a sub-group to prevent parents from overwriting translate()
    grouped = Utils::RasemWrapper.group(mpoly_group) do |g|
      @polylines.each { |p| p.draw(g, debug: @debug) }
    end

    grouped.translate(translate_x, translate_y).scale(scale, scale)
  end
end
calc_height() click to toggle source
# File lib/svg_drawer/multipolyline.rb, line 78
def calc_height
  calc_height_unscaled * scale
end
calc_height_unscaled() click to toggle source
# File lib/svg_drawer/multipolyline.rb, line 86
def calc_height_unscaled
  max_y - min_y
end
calc_width() click to toggle source
# File lib/svg_drawer/multipolyline.rb, line 74
def calc_width
  calc_width_unscaled * scale
end
calc_width_unscaled() click to toggle source
# File lib/svg_drawer/multipolyline.rb, line 82
def calc_width_unscaled
  max_x - min_x
end
height_unscaled() click to toggle source
# File lib/svg_drawer/multipolyline.rb, line 96
def height_unscaled
  param(:overflow) ?
    param(:height, calc_height_unscaled) :
    [param(:height, 0), calc_height_unscaled].max
end
max_x() click to toggle source
# File lib/svg_drawer/multipolyline.rb, line 62
def max_x
  @max_x ||= @polylines.max_by(&:max_x).max_x
end
max_y() click to toggle source
# File lib/svg_drawer/multipolyline.rb, line 70
def max_y
  @max_y ||= @polylines.max_by(&:max_y).max_y
end
min_x() click to toggle source
# File lib/svg_drawer/multipolyline.rb, line 58
def min_x
  @min_x ||= @polylines.min_by(&:min_x).min_x
end
min_y() click to toggle source
# File lib/svg_drawer/multipolyline.rb, line 66
def min_y
  @min_y ||= @polylines.min_by(&:min_y).min_y
end
scale() click to toggle source
# File lib/svg_drawer/multipolyline.rb, line 102
def scale
  [scale_x, scale_y].min * param(:scale)
end
scale_x() click to toggle source
# File lib/svg_drawer/multipolyline.rb, line 106
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/multipolyline.rb, line 113
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/multipolyline.rb, line 120
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/multipolyline.rb, line 132
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/multipolyline.rb, line 90
def width_unscaled
  param(:overflow) ?
    param(:width, calc_width_unscaled) :
    [param(:width, 0), calc_width_unscaled].max
end