Module: Magick::RVG::Transformable
- Included in:
- Magick::RVG, Group, Image, Shape, Use
- Defined in:
- lib/rvg/transformable.rb
Overview
Transformations are operations on the coordinate system. All the transformations defined within a container (an RVG object or a group) are applied before drawing any shapes or text. All transformations are applied in the order they were defined. Note: This means that
g.translate(10,20).scale(2)
is not the same as
g.scale(2).translate(10,20)
Instance Method Summary collapse
-
#matrix(sx, rx, ry, sy, tx, ty) {|_self| ... } ⇒ Object
Applies the transformation matrix [sx, rx, ry, sy, tx, ty].
-
#rotate(angle, *args) {|_self| ... } ⇒ Object
This method can take either of two argument lists: [rotate(angle)] rotate by
angle
degrees [rotate(angle, cx, cy)] rotate byangle
degrees about the point [cx
,cy
]. -
#scale(sx, sy = nil) {|_self| ... } ⇒ Object
Multiply the x-coordinates by
sx
and the y-coordinates bysy
. -
#skewX(angle) {|_self| ... } ⇒ Object
Skew the X-axis by
angle
degrees. -
#skewY(angle) {|_self| ... } ⇒ Object
Skew the Y-axis by
angle
degrees. -
#translate(tx, ty = nil) {|_self| ... } ⇒ Object
Add
tx
to all x-coordinates andty
to all y-coordinates.
Instance Method Details
#matrix(sx, rx, ry, sy, tx, ty) {|_self| ... } ⇒ Object
Applies the transformation matrix [sx, rx, ry, sy, tx, ty]
46 47 48 49 50 51 52 53 54 |
# File 'lib/rvg/transformable.rb', line 46 def matrix(sx, rx, ry, sy, tx, ty) begin @transforms << [:affine, [Float(sx), Float(rx), Float(ry), Float(sy), Float(tx), Float(ty)]] rescue ArgumentError raise ArgumentError, "arguments must be convertable to float (got #{sx.class}, #{rx.class}, #{ry.class}, #{sy.class}, #{sx.class}, #{sx.class}, #{tx.class}, #{ty.class})" end yield(self) if block_given? self end |
#rotate(angle, *args) {|_self| ... } ⇒ Object
This method can take either of two argument lists:
- rotate(angle)
-
rotate by
angle
degrees - rotate(angle, cx, cy)
-
rotate by
angle
degrees about the point [cx
,cy
].
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/rvg/transformable.rb', line 87 def rotate(angle, *args) begin case args.length when 0 @transforms << [:rotate, [Float(angle)]] when 2 cx, cy = Float(args[0]), Float(args[1]) @transforms << [:translate, [cx, cy]] @transforms << [:rotate, [angle]] @transforms << [:translate, [-cx, -cy]] else raise ArgumentError, "wrong number of arguments (#{args.length} for 1 or 3)" end rescue ArgumentError raise ArgumentError, "arguments must be convertable to float (got #{[angle, *args].collect {|a| a.class}.join(', ')})" end yield(self) if block_given? self end |
#scale(sx, sy = nil) {|_self| ... } ⇒ Object
Multiply the x-coordinates by sx
and the y-coordinates by sy
. If sy
is omitted it defaults to sx
.
72 73 74 75 76 77 78 79 80 81 |
# File 'lib/rvg/transformable.rb', line 72 def scale(sx, sy=nil) sy ||= sx begin @transforms << [:scale, [Float(sx), Float(sy)]] rescue ArgumentError raise ArgumentError, "arguments must be convertable to float (got #{sx.class}, #{sy.class})" end yield(self) if block_given? self end |
#skewX(angle) {|_self| ... } ⇒ Object
Skew the X-axis by angle
degrees.
108 109 110 111 112 113 114 115 116 |
# File 'lib/rvg/transformable.rb', line 108 def skewX(angle) begin @transforms << [:skewx, [Float(angle)]] rescue ArgumentError raise ArgumentError, "argument must be convertable to float (got #{angle.class})" end yield(self) if block_given? self end |
#skewY(angle) {|_self| ... } ⇒ Object
Skew the Y-axis by angle
degrees.
119 120 121 122 123 124 125 126 127 |
# File 'lib/rvg/transformable.rb', line 119 def skewY(angle) begin @transforms << [:skewy, [Float(angle)]] rescue ArgumentError raise ArgumentError, "argument must be convertable to float (got #{angle.class})" end yield(self) if block_given? self end |
#translate(tx, ty = nil) {|_self| ... } ⇒ Object
Add tx
to all x-coordinates and ty
to all y-coordinates. If ty
is omitted it defaults to tx
.
59 60 61 62 63 64 65 66 67 68 |
# File 'lib/rvg/transformable.rb', line 59 def translate(tx, ty=nil) ty ||= tx begin @transforms << [:translate, [Float(tx), Float(ty)]] rescue ArgumentError raise ArgumentError, "arguments must be convertable to float (got #{tx.class}, #{ty.class})" end yield(self) if block_given? self end |