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')