class Magick::RVG::PathData
The PathData class provides an object-oriented way to produce an SVG path. Each of the methods corresponds to a path command. Construct a path by calling one or more methods. The path object can be passed as an argument to the Magick::RVG::ShapeConstructors#path method.
Public Class Methods
Construct an empty path
# File lib/rvg/pathdata.rb, line 26 def initialize @path = '' end
Public Instance Methods
Add an arc
command. If abs
is true
the coordinates are absolute, otherwise the coordinates are relative.
# File lib/rvg/pathdata.rb, line 121 def arc(abs, rx, ry, x_axis_rotation, large_arc_flag, sweep_flag, x, y) @path << sprintf('%s%g,%g %g %d %d %g,%g ', (abs ? 'A' : 'a'), rx, ry, x_axis_rotation, large_arc_flag, sweep_flag, x, y) end
Add a closepath
command. The abs
argument is
ignored.
# File lib/rvg/pathdata.rb, line 50 def closepath(abs = true) @path << 'Z' # ignore `abs' end
Add a curveto
(cubic Bezier) command. If
abs
is true
the coordinates are absolute,
otherwise the coordinates are relative.
# File lib/rvg/pathdata.rb, line 82 def curveto(abs, x1, y1, x2, y2, x, y, *coords) @path << sprintf('%s%g,%g %g,%g %g,%g ', (abs ? 'C' : 'c'), x1, y1, x2, y2, x, y) # "multiple sets of coordinates may be specified to draw a polybezier" add_points(6, *coords) end
Add a horizontal lineto
command. If abs
is
true
the coordinates are absolute, otherwise the coordinates
are relative.
# File lib/rvg/pathdata.rb, line 67 def hlineto(abs, x) @path << sprintf('%s%g ', (abs ? 'H' : 'h'), x) end
Add a lineto
command. Any number of x,y coordinate pairs may
be specified. If abs
is true
the coordinates are
absolute, otherwise the coordinates are relative.
# File lib/rvg/pathdata.rb, line 58 def lineto(abs, x, y, *coords) @path << sprintf('%s%g,%g ', (abs ? 'L' : 'l'), x, y) # "a number of coordinate pairs may be specified to draw a polyline" add_points(2, *coords) end
Add a moveto
command. If abs
is true
the coordinates are absolute, otherwise the coordinates are relative.
# File lib/rvg/pathdata.rb, line 42 def moveto(abs, x, y, *coords) @path << sprintf('%s%g,%g ', (abs ? 'M' : 'm'), x, y) # "subsequent pairs are treated as implicit lineto commands" add_points(2, *coords) end
Add a quadratic Bezier curveto
command. If abs
is
true
the coordinates are absolute, otherwise the coordinates
are relative.
# File lib/rvg/pathdata.rb, line 102 def quadratic_curveto(abs, x1, y1, x, y, *coords) @path << sprintf('%s%g,%g %g,%g ', (abs ? 'Q' : 'q'), x1, y1, x, y) add_points(4, *coords) end
Add a smooth curveto
(cubic Bezier) command. If
abs
is true
the coordinates are absolute,
otherwise the coordinates are relative.
# File lib/rvg/pathdata.rb, line 92 def smooth_curveto(abs, x2, y2, x, y, *coords) @path << sprintf('%s%g,%g %g,%g ', (abs ? 'S' : 's'), x2, y2, x, y) # "multiple sets of coordinates may be specified to draw a polybezier" add_points(4, *coords) end
Add a smooth quadratic Bezier curveto
command. If
abs
is true
the coordinates are absolute,
otherwise the coordinates are relative.
# File lib/rvg/pathdata.rb, line 111 def smooth_quadratic_curveto(abs, x, y, *coords) @path << sprintf('%s%g,%g ', (abs ? 'T' : 't'), x, y) add_points(2, *coords) end
Convert the path to its string equivalent.
# File lib/rvg/pathdata.rb, line 31 def to_s @path end
Add a vertical lineto
command. If abs
is
true
the coordinates are absolute, otherwise the coordinates
are relative.
# File lib/rvg/pathdata.rb, line 74 def vlineto(abs, y) @path << sprintf('%s%g ', (abs ? 'V' : 'v'), y) end
Private Instance Methods
# File lib/rvg/pathdata.rb, line 14 def add_points(req, *coords) if coords if coords.length % req != 0 fail ArgumentError, "wrong number of coordinates specified. A multiple of #{req} required, #{req+coords.length} given." end coords.each {|c| @path << ('%g' % c)} end end