# 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()