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