+++ /dev/null
-# define the length of things
-from __future__ import division
-import SVGdraw
-
-class Ruler:
- def __init__(self, scale=None, units=None,
- ruler_height=None, ruler_length=None):
-
- # default values come from OLPC
- self.scale = scale or 78.740
- self.units = units or 'centimeters'
- self.ruler_height = ruler_height or 200
- self.ruler_length = ruler_length or 15
-
- font_height = 22
-
- self.drawing = SVGdraw.drawing()
- self.svg = SVGdraw.svg()
-
- # create the body of the ruler
- body = SVGdraw.rect(0, 0,
- (self.scale * self.ruler_length),
- self.ruler_height, "white", "black", 2)
- self.svg.addElement(body)
-
- # add a units label
- units = SVGdraw.text((self.scale / 2),
- (self.ruler_height - self.scale / 5),
- self.units, font_height)
- self.svg.addElement(units)
-
- self.point = 0.0
-
-
- # find the appropriate subunit marker
- self.subunit_marks = 1
-
- while self.scale / self.subunit_marks >= font_height * 3:
- if self.subunit_marks == 1:
- self.subunit_marks += 3
- else:
- self.subunit_marks = self.subunit_marks * 2
-
- # for every unit
- for i in range(self.ruler_length):
-
- # place subunit marks
- for i2 in range(self.subunit_marks):
- self.__drawline(0.3)
-
- self.__drawline(0.6)
- self.svg.addElement(SVGdraw.text((self.point - font_height * 1.4),
- (self.ruler_height * 0.6 - 5),
- str(i + 1), font_height))
-
-
- self.drawing.setSVG(self.svg)
-
- def output(self):
- import cStringIO
- xml = cStringIO.StringIO()
- xml.write("<?xml version='1.0' encoding='UTF-8'?>\n")
- xml.write("<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.0//EN\" \"http://www .w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd \">\n")
- self.svg.toXml(0,xml)
-
- return(xml.getvalue())
-
- def write_svg_to_file(self, filename='output.svg'):
- self.drawing.toXml(filename)
-
- def __drawline(self, size):
-
- self.point = self.point + (self.scale / (1 + self.subunit_marks))
- line = SVGdraw.line(self.point, 0, self.point,
- (self.ruler_height * size), "black", 2)
- self.svg.addElement(line)
-
-