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