Project

drawsvg

0.0
No commit activity in last 3 years
No release in over 3 years
A ruby layer built on top of the rasem gem to make drawing SVGs easier.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 1.6
>= 0

Runtime

>= 0
 Project Readme

DrawSvg

A ruby layer to make drawing SVGs easier. Uses rasem under the hood.

  • A Canvas holds all the Items to be drawn.
  • Group related shapes into an Item.
  • Items can have sub-Items.
  • The Canvas can be scaled (ie. zoom in/out).
  • Individual Items can be scaled.
  • Use coordinates as if you are drawing on the first Cartesian quadrant.
  • Shapes can be snapped or unsnapped to each other (do they stay together or drift apart when scaled).
  • Lines are drawn with a starting point, length and angle (versus two points).

Installation

Add this line to your application's Gemfile:

gem 'drawsvg'

And then execute:

$ bundle

Or install it yourself as:

$ gem install drawsvg

Usage

require 'drawsvg'
include DrawSvg

class StickMan < Item
  def draw
    @left_leg = Line.new(self, [0,0], 40, 60, stroke: 'red')
    @right_leg = Line.new(self, @left_leg.p2, 40, -60)
    @body = Line.new(self, @left_leg.p2, 30, 90)
    @left_arm = Line.new(self, @body.p2-[0, 8], 30, 180+45)
    @right_arm = Line.new(self, @left_arm.p1, 30, 20)
    @box = Rectangle.new(self, @right_arm.p2, [10,15], fill: 'white', draw_from: :bottom_left)
    @head = Circle.new(self, @body.p2, 15, draw_from: :bottom, stroke: %w[orange blue red].sample, fill: 'white')
  end
end

class MyCanvas < Canvas
  def draw
    30.times do
      StickMan.new(self, Point[(0..475).to_a.sample, (0..475).to_a.sample], scale: (50..150).to_a.sample.to_f/100)
    end
  end
end

canvas = MyCanvas.new(501, 501, nil, scale: [1.1, 1.0])
File.write("/tmp/image.svg", canvas.to_svg)

Contributing

  1. Fork it ( https://github.com/bdiz/drawsvg/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request