# ---------------------------------------------------------------------------- #
## \file gcode_7seg.py
## \author Sebastien Beaugrand
## \sa http://beaugrand.chez.com/
## \copyright CeCILL 2.1 Free Software license
# ---------------------------------------------------------------------------- #
from gcodefont import *
class Gcode7seg(GcodeFont):
def __init__(self, width, sep):
super().__init__(width, sep)
self.height = width * 2
def __uv2gcode(self, code, x, y):
print('{} X{:.2f} Y{:.2f}'.format(code, x, y))
def __segH2gcode(self, x, y):
self.__uv2gcode('G0', x, y)
print('M3')
self.__uv2gcode('G1', self.width / 8, self.width / 8)
self.__uv2gcode('G1', self.width - self.width / 4, 0)
self.__uv2gcode('G1', self.width / 8, -self.width / 8)
self.__uv2gcode('G1', -self.width / 8, -self.width / 8)
self.__uv2gcode('G1', -self.width + self.width / 4, 0)
self.__uv2gcode('G1', -self.width / 8, self.width / 8)
print('M5')
self.__uv2gcode('G0', -x, -y)
def __segV2gcode(self, x, y):
self.__uv2gcode('G0', x, y)
print('M3')
self.__uv2gcode('G1', self.width / 8, self.width / 8)
self.__uv2gcode('G1', 0, self.width - self.width / 4)
self.__uv2gcode('G1', -self.width / 8, self.width / 8)
self.__uv2gcode('G1', -self.width / 8, -self.width / 8)
self.__uv2gcode('G1', 0, -self.width + self.width / 4)
self.__uv2gcode('G1', self.width / 8, -self.width / 8)
print('M5')
self.__uv2gcode('G0', -x, -y)
def __digit2gcode(self, d):
if d != 1 and d != 4:
self.__segH2gcode(0, self.width * 2)
if d != 5 and d != 6:
self.__segV2gcode(self.width, self.width)
if d != 2:
self.__segV2gcode(self.width, 0)
if d != 1 and d != 4 and d != 7:
self.__segH2gcode(0, 0)
if d == 0 or d == 2 or d == 6 or d == 8:
self.__segV2gcode(0, 0)
if d != 1 and d != 2 and d != 3 and d != 7:
self.__segV2gcode(0, self.width)
if d != 0 and d != 1 and d != 7:
self.__segH2gcode(0, self.width)
def __draw_char(self, c):
n = ord(c) - ord('0')
if n < 0 or n > 9:
return 0
self.__digit2gcode(n)
self.__uv2gcode('G0', self.width + self.sep, 0)
return 1
def draw(self, s, x, y, a=0):
print('({})'.format(s))
self.__uv2gcode('G0', x, y)
print('G91')
l = 0
for c in s:
l += self.__draw_char(c)
#self.__uv2gcode('G0', -l * (self.width + self.sep), 0)
print('G90')