rplot

rplot is a C extension for Ruby of GNU libplot.

GNU libplot is a free function library for drawing two-dimensional vector graphics. It can produce smooth, double-buffered animations for the X Window System, and can export files in many graphics file formats. It is ‘device-independent’ in the sense that its API (application programming interface) is to a large extent independent of the display type or output format. Rplot is a C extension for Ruby of GNU libplot.

Requirements

  • libplot-dev

For Debian/Ubuntu users: apt-get install libplot-dev.

For Max OS X users use port: port install plotutils.

Installation

gem install rplot

Usage

Here two little examples.

The first invokes rplot operations to draw vector graphics. It draws an intricate and beautiful path (Bill Gosper’s “C” curve, discussed as Item #135 in HAKMEM, MIT Artificial Intelligence Laboratory Memo #239, 1972). As the numeric constant MAXORDER (here equal to 12) is increased, the path will take on the shape of a curly letter “C”, which is the envelope of a myriad of epicyclic octagons.

require 'rubygems'
require 'rplot'

module MyCurve
  MAXORDER = 12
  def draw_curve(dx, dy, order)
    if order >= MAXORDER
      self.cont(dx, dy, :rel => true)
    else
      self.draw_curve(0.5*(dx-dy), 0.5*(dx+dy), order+1)
      self.draw_curve(0.5*(dx+dy), 0.5*(dy-dx), order+1)
    end
  end
end
Plotter.send(:include, MyCurve)

Plotter.params(:pagesize => 'letter')

Plotter.draw('png', 'RUBYtest3.png')do |p|
  p.space(0,0, 1000,1000)
  p.linewidth(0.25)
  p.pencolor('red')
  p.move(600, 300)
  p.draw_curve(0, 400, 0)
end

The second example creates a simple animated pseudo-GIF, 150 pixels wide and 100 pixels high.

require 'rubygems'
require 'rplot'

Plotter.params(:bitmapsize => '150x100',
               :bg_color => 'orange',
               :transparent_color => 'orange',
               :gif_iterations => 100,
               :gif_delay => 5)
p = Plotter.new('gif', 'image.gif')
p.open
p.space(0,0,149,99)
p.pencolor('red')
p.linewidth(5)
p.filltype(1)
p.fillcolor('black')
i = 0
while i < 180
  p.erase
  p.erase
  p.ellipse(75,50,40,20,i)
  i += 15
end
p.delete

the complete documentation with API[http://pioz.github.com/rplot/Plotter.html].

Questions or problems?

If you have any issues with rplot please add an issue on GitHub or fork the project and send a pull request.

Copyright © 2010 Enrico Pilotto. See LICENSE for details.