require 'rvg/rvg'

Magick::RVG.dpi = 90

Border       = {:fill=>'none', :stroke=>'blue', :stroke_width=>1}
Connect      = {:fill=>'none', :stroke=>'#888', :stroke_width=>2}
SamplePath   = {:fill=>'none', :stroke=>'red',  :stroke_width=>5}
EndPoint     = {:fill=>'none', :stroke=>'#888', :stroke_width=>2}
CtlPoint     = {:fill=>'#888', :stroke=>'none'}
AutoCtlPoint = {:fill=>'none', :stroke=>'blue', :stroke_width=>4}
Label        = {:font_size=>22, :font_family=>'Verdana', :font_weight=>'normal', :font_style=>'normal'}

rvg = Magick::RVG.new(5.cm, 4.cm).viewbox(0, 0, 500, 400) do |canvas|
    canvas.title = "Example cubic01 - cubic Bezier commands in path data"
    canvas.desc = <<-END_DESC
        Picture showing a simple example of path data using both a
        "C" and an "S" command, along with annotations showing the
        control points and end points.
        END_DESC

    canvas.background_fill = 'white'
    canvas.rect(496, 395, 1, 1).styles(Border)

    canvas.polyline(100,200, 100,100).styles(Connect)
    canvas.polyline(250,100, 250,200).styles(Connect)
    canvas.polyline(250,200, 250,300).styles(Connect)
    canvas.polyline(400,300, 400,200).styles(Connect)

    canvas.path("M100,200 C100,100 250,100 250,200 S400,300 400,200").styles(SamplePath)

    canvas.circle(10, 100, 200).styles(EndPoint)
    canvas.circle(10, 250, 200).styles(EndPoint)
    canvas.circle(10, 400, 200).styles(EndPoint)
    canvas.circle(10, 100, 100).styles(CtlPoint)
    canvas.circle(10, 250, 100).styles(CtlPoint)
    canvas.circle(10, 400, 300).styles(CtlPoint)
    canvas.circle(9, 250, 300).styles(AutoCtlPoint)

    canvas.text(25, 70, 'M100,200 C100,100 250,100 250,200').styles(Label)
    canvas.text(225, 350, 'S400,300 400,200').styles(Label)

end

rvg.draw.write('cubic01.gif')

