def main
border = 8
width = height = 256
canvas = Art::Canvas.new(width + 2 * border, height + 2 * border, Art::Canvas::Color::WHITE, Art::Canvas::ALPHA_MASK)
context = Art::Canvas::Context.new({:affine_transform => Art::Affine.translate(border, border) * Art::Affine.scale(width, height)})
box = Art::Vpath.rectangle(0.0, 0.0, 1.0, 1.0)
box_fill_context = context.with({:color => Art::Canvas::Color::WHITE})
canvas.render_vpath_with_context(box, box_fill_context)
box_outline_context = context.with({:stroke => true, :line_width => 4, :color => Art::Canvas::Color::BLACK})
canvas.render_vpath_with_context(box, box_outline_context)
circle_context = context.with({:affine_transform => context[:affine_transform] * Art::Affine.translate(0.0, 0.0) * Art::Affine.scale(0.45, 0.45)})
canvas.render_vpath_with_context(Art::Vpath.circle(0.5, 0.4, 0.25), circle_context.with({:color => Art::Canvas.color(1.0, 0.0, 0.0, 0.5)}))
canvas.render_vpath_with_context(Art::Vpath.circle(0.4, 0.55, 0.25), circle_context.with({:color => Art::Canvas.color(0.0, 1.0, 0.0, 0.5)}))
canvas.render_vpath_with_context(Art::Vpath.circle(0.6, 0.55, 0.25), circle_context.with({:color => Art::Canvas.color(0.0, 0.0, 1.0, 0.5)}))
lines_context = context.with({:affine_transform => context[:affine_transform] * Art::Affine.translate(0.5, 0.0) * Art::Affine.scale(0.45, 0.45), :stroke => true, :line_width => 8, :miter_limit => 0.5})
line = Art::Vpath.new([[Art::MOVETO, 0.3, 0.2], [Art::LINETO, 0.0, 0.3], [Art::LINETO, 0.3, 0.6], [Art::LINETO, 0.0, 0.8], [Art::END]])
canvas.render_vpath_with_context(line.affine_transform(Art::Affine.translate(0.0, 0.0)), lines_context.with({:cap => Art::PATH_STROKE_CAP_ROUND, :join => Art::PATH_STROKE_JOIN_ROUND, :color => Art::Canvas.color(0.5, 0.0, 0.0)}))
canvas.render_vpath_with_context(line.affine_transform(Art::Affine.translate(0.3, 0.0)), lines_context.with({:cap => Art::PATH_STROKE_CAP_BUTT, :join => Art::PATH_STROKE_JOIN_MITER, :color => Art::Canvas.color(0.0, 0.5, 0.0)}))
canvas.render_vpath_with_context(line.affine_transform(Art::Affine.translate(0.6, 0.0)), lines_context.with({:cap => Art::PATH_STROKE_CAP_SQUARE, :join => Art::PATH_STROKE_JOIN_BEVEL, :color => Art::Canvas.color(0.0, 0.0, 0.5)}))
overlap_context = context.with({:affine_transform => context[:affine_transform] * Art::Affine.translate(0.0, 0.5) * Art::Affine.scale(0.45, 0.45)})
shape1 = Art::Vpath.rectangle(0.25, 0.25, 0.75, 0.75)
shape2 = Art::Vpath.circle(0.7, 0.7, 0.15)
shape3 = Art::Vpath.circle(0.3, 0.3, 0.15)
shape4 = Art::Vpath.rectangle(0.0, 0.0, 1.0, 1.0)
shape5 = Art::Vpath.circle(0.7, 0.3, 0.15)
shape6 = Art::Vpath.circle(0.3, 0.7, 0.15)
overlap = ((shape1.to_svp ^ shape2.to_svp | shape3.to_svp) & (shape4.to_svp ^ shape5.to_svp ^ shape6.to_svp)).to_vpath
canvas.render_vpath_with_context(overlap, overlap_context.with({:color => Art::Canvas::Color::MAGENTA}))
pie_context = context.with({:affine_transform => context[:affine_transform] * Art::Affine.translate(0.5, 0.5) * Art::Affine.scale(0.45, 0.45)})
line_context = pie_context.with({:stroke => true, :line_width => 1, :color => Art::Canvas.color(0.0, 0.0, 0.25)})
canvas.render_vpath_with_context(Art::Vpath.line(0.5, 0.0, 0.5, 1.0), line_context)
canvas.render_vpath_with_context(Art::Vpath.line(0.0, 0.5, 1.0, 0.5), line_context)
canvas.render_vpath_with_context(Art::Vpath.circle(0.5, 0.5, 0.4), line_context)
slice = Art::Vpath.slice(0.5, 0.5, 0.45, -30.0, 135.0)
canvas.render_vpath_with_context(slice, pie_context.with({:color => Art::Canvas.color(0.5, 0.5, 1.0)}))
canvas.render_vpath_with_context(slice, line_context)
File.open('testlibart2.png', 'wb') do |file|
file.write(canvas.to_png(Art::Canvas::PNG_INTERLACE_ADAM7))
end
File.open('testlibart2.jpeg', 'wb') do |file|
file.write(canvas.to_jpeg)
end
end