Class: Magick::RVG::PathData
- Inherits:
-
Object
- Object
- Magick::RVG::PathData
- Defined in:
- lib/rvg/pathdata.rb
Overview
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 RVG::ShapeConstructors#path method.
Instance Method Summary collapse
-
#arc(abs, rx, ry, x_axis_rotation, large_arc_flag, sweep_flag, x, y) ⇒ Object
Add an
arc
command. -
#closepath(abs = true) ⇒ Object
Add a
closepath
command. -
#curveto(abs, x1, y1, x2, y2, x, y, *coords) ⇒ Object
Add a
curveto
(cubic Bezier) command. -
#deep_copy(h = nil) ⇒ Object
:nodoc:.
-
#hlineto(abs, x) ⇒ Object
Add a
horizontal lineto
command. -
#initialize ⇒ PathData
constructor
Construct an empty path.
-
#lineto(abs, x, y, *coords) ⇒ Object
Add a
lineto
command. -
#moveto(abs, x, y, *coords) ⇒ Object
Add a
moveto
command. -
#quadratic_curveto(abs, x1, y1, x, y, *coords) ⇒ Object
Add a
quadratic Bezier curveto
command. -
#smooth_curveto(abs, x2, y2, x, y, *coords) ⇒ Object
Add a
smooth curveto
(cubic Bezier) command. -
#smooth_quadratic_curveto(abs, x, y, *coords) ⇒ Object
Add a
smooth quadratic Bezier curveto
command. -
#to_s ⇒ Object
Convert the path to its string equivalent.
-
#vlineto(abs, y) ⇒ Object
Add a
vertical lineto
command.
Constructor Details
#initialize ⇒ PathData
Construct an empty path
28 29 30 |
# File 'lib/rvg/pathdata.rb', line 28 def initialize @path = '' end |
Instance Method Details
#arc(abs, rx, ry, x_axis_rotation, large_arc_flag, sweep_flag, x, y) ⇒ Object
Add an arc
command. If abs
is true
the coordinates are absolute, otherwise the coordinates are relative.
123 124 125 |
# File 'lib/rvg/pathdata.rb', line 123 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 |
#closepath(abs = true) ⇒ Object
Add a closepath
command. The abs
argument is ignored.
52 53 54 |
# File 'lib/rvg/pathdata.rb', line 52 def closepath(abs=true) @path << 'Z' # ignore `abs' end |
#curveto(abs, x1, y1, x2, y2, x, y, *coords) ⇒ Object
Add a curveto
(cubic Bezier) command. If abs
is true
the coordinates are absolute, otherwise the coordinates are relative.
84 85 86 87 88 |
# File 'lib/rvg/pathdata.rb', line 84 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 |
#deep_copy(h = nil) ⇒ Object
:nodoc:
37 38 39 |
# File 'lib/rvg/pathdata.rb', line 37 def deep_copy(h=nil) #:nodoc: @path.dup end |
#hlineto(abs, x) ⇒ Object
Add a horizontal lineto
command. If abs
is true
the coordinates are absolute, otherwise the coordinates are relative.
69 70 71 |
# File 'lib/rvg/pathdata.rb', line 69 def hlineto(abs, x) @path << sprintf("%s%g ", (abs ? 'H' : 'h'), x) end |
#lineto(abs, x, y, *coords) ⇒ Object
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.
60 61 62 63 64 |
# File 'lib/rvg/pathdata.rb', line 60 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 |
#moveto(abs, x, y, *coords) ⇒ Object
Add a moveto
command. If abs
is true
the coordinates are absolute, otherwise the coordinates are relative.
44 45 46 47 48 |
# File 'lib/rvg/pathdata.rb', line 44 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 |
#quadratic_curveto(abs, x1, y1, x, y, *coords) ⇒ Object
Add a quadratic Bezier curveto
command. If abs
is true
the coordinates are absolute, otherwise the coordinates are relative.
104 105 106 107 |
# File 'lib/rvg/pathdata.rb', line 104 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 |
#smooth_curveto(abs, x2, y2, x, y, *coords) ⇒ Object
Add a smooth curveto
(cubic Bezier) command. If abs
is true
the coordinates are absolute, otherwise the coordinates are relative.
94 95 96 97 98 |
# File 'lib/rvg/pathdata.rb', line 94 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 |
#smooth_quadratic_curveto(abs, x, y, *coords) ⇒ Object
Add a smooth quadratic Bezier curveto
command. If abs
is true
the coordinates are absolute, otherwise the coordinates are relative.
113 114 115 116 |
# File 'lib/rvg/pathdata.rb', line 113 def smooth_quadratic_curveto(abs, x, y, *coords) @path << sprintf("%s%g,%g ", (abs ? 'T' : 't'), x, y) add_points(2, *coords) end |
#to_s ⇒ Object
Convert the path to its string equivalent.
33 34 35 |
# File 'lib/rvg/pathdata.rb', line 33 def to_s @path end |
#vlineto(abs, y) ⇒ Object
Add a vertical lineto
command. If abs
is true
the coordinates are absolute, otherwise the coordinates are relative.
76 77 78 |
# File 'lib/rvg/pathdata.rb', line 76 def vlineto(abs, y) @path << sprintf("%s%g ", (abs ? 'V' : 'v'), y) end |