# Sketch - A Python-based interactive drawing program
# Copyright (C) 1998, 1999, 2000 by Bernhard Herzog
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Library General Public
# License as published by the Free Software Foundation; either
# version 2 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Library General Public License for more details.
#
# You should have received a copy of the GNU Library General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
###Sketch Config
#type = PluginCompound
#class_name = 'LCDText'
#menu_text = 'LCD Text'
#parameters = (\
# ('text', 'text', '0', None, 'Text'), \
# ('size', 'length', 10.0, (0.0, None), 'Size'))
#standard_messages = 1
###End
(''"LCD Text")
(''"Text")
(''"Size")
from Sketch import Scale,TrafoPlugin,PolyBezier,CreatePath
segments = ((( 0, 18), (10, 18), ( 8, 16), ( 2, 16), ( 0, 18)),
(( 0, 18), ( 2, 16), ( 2, 10), ( 0, 9), ( 0, 18)),
((10, 18), (10, 9), ( 8, 10), ( 8, 16), (10, 18)),
(( 0, 9), ( 2, 10), ( 8, 10), (10, 9), ( 8, 8), (2, 8), (0, 9)),
(( 0, 9), ( 2, 8), ( 2, 2), ( 0, 0), ( 0, 9)),
((10, 9), (10, 0), ( 8, 2), ( 8, 8), (10, 9)),
(( 0, 0), ( 2, 2), ( 8, 2), (10, 0), ( 0, 0)))
chardefs = (('0DO', (0, 1, 2, 4, 5, 6)),
('1Il', (2, 5)),
('2Zz', (0, 2, 3, 4, 6)),
('3', (0, 2, 3, 5, 6)),
('4', (1, 2, 3, 5)),
('5Ss', (0, 1, 3, 5, 6)),
('6G', (0, 1, 3, 4, 5, 6)),
('7', (0, 2, 5)),
('8BQ', (0, 1, 2, 3, 4, 5, 6)),
('9gq', (0, 1, 2, 3, 5, 6)),
('AR', (0, 1, 2, 3, 4, 5)),
('C([{', (0, 1, 4, 6)),
('E', (0, 1, 3, 4, 6)),
('Ff', (0, 1, 3, 4)),
('HKMNWXkmwx', (1, 2, 3, 4, 5)),
('J', (2, 4, 5, 6)),
('L', (1, 4, 6)),
('Pp', (0, 1, 2, 3, 4)),
('T', (0, 1, 4)),
('UV', (1, 2, 4, 5, 6)),
('Yy', (1, 2, 3, 4)),
('b', (1, 3, 4, 5, 6)),
('c', (3, 4, 6)),
('d', (2, 3, 4, 5, 6)),
('e', (0, 1, 2, 3, 4, 6)),
('h', (1, 3, 4, 5)),
('i', (5,)),
('j', (5, 6)),
('n', (3, 4, 5)),
('oa', (3, 4, 5, 6)),
('r', (3, 4)),
('t', (1, 3, 4, 6)),
('uv', (4, 5, 6)),
("'", (2,)),
("`", (1,)),
('"', (1, 2)),
('-', (3,)),
(' ', ()),
('_', (6,)),
(')]}', (0, 2, 5, 6)),
(',', (4,)),
('?', (0, 2, 3, 4)),
)
char_segs = {}
for chars, segs in chardefs:
for char in chars:
char_segs[char] = segs
char_width = 11
char_scale = 18
class LCDText(TrafoPlugin):
class_name = 'LCDText'
is_curve = 1
def __init__(self, text = '0', size = 12.0, trafo = None, loading = 0,
duplicate = None):
TrafoPlugin.__init__(self, trafo = trafo, duplicate = duplicate)
if duplicate is not None:
self.text = duplicate.text
self.size = duplicate.size
else:
self.text = text
self.size = size
if not loading:
self.recompute()
def recompute(self):
paths = []
trafo = self.trafo(Scale(self.size / float(char_scale)))
width = 0
for char in self.text:
segs = char_segs.get(char)
if segs is not None:
for seg in segs:
path = CreatePath()
map(path.AppendLine, segments[seg])
path.ClosePath()
path.Translate(width, 0)
path.Transform(trafo)
paths.append(path)
width = width + char_width
paths = tuple(paths)
if self.objects:
self.objects[0].SetPaths(paths)
else:
self.set_objects([PolyBezier(paths)])
def Text(self):
return self.text
def Size(self):
return self.size
def SaveToFile(self, file):
TrafoPlugin.SaveToFile(self, file, self.text, self.size,
self.trafo.coeff())
def Info(self):
return _("LCD Text: `%(text)s', size %(size)g") % self.__dict__
def AsBezier(self):
return self.objects[0].AsBezier()
def Paths(self):
return self.objects[0].Paths()
|