#!/usr/local/bin/ruby -w
require 'RMagick'

# Demonstrate the affine primitive. Transform the
# coordinate space to put the origin in the lower
# left corner.

i = Magick::ImageList.new
i.new_image 250, 250, Magick::HatchFill.new('LightCyan')

primitive = Magick::Draw.new

max_x = i.columns-1
max_y = i.rows-1

# Translate the y origin to the bottom of the window.
# Invert the y points by scaling by -1. Combine the
# two operations using the affine method. That is, the
# affine method is equivalent to:
#       primitive.translate 0, max_y
#       primitive.scale 1, -1
primitive.affine 1, 0, 0, -1, 0, max_y
# Draw up-pointing arrow.
primitive.stroke 'red'
primitive.stroke_width 3
primitive.line 1, 0, 1, max_y
primitive.line 1, max_y, 10, max_y-10

# Draw right-pointing arrow
primitive.line 0, 1, max_x, 1
primitive.line max_x, 1, max_x-10, 10
primitive.draw i

# Add labels. Use a different graphics context with a "normal"
# coordinate system so the text isn't inverted.
text_primitive = Magick::Draw.new
text_primitive.pointsize 14
text_primitive.font_weight Magick::BoldWeight
text_primitive.stroke 'transparent'

text_primitive.text 12, max_y-12, "'0,0'"
text_primitive.text max_x-20, max_y-16, "'+x'"
text_primitive.text 12, 15, "'+y'"
text_primitive.draw i

#i.display
i.write "affine.gif"
