diff --git a/output_module/future_relics.py b/output_module/future_relics.py new file mode 100644 index 0000000..72da7aa --- /dev/null +++ b/output_module/future_relics.py @@ -0,0 +1,144 @@ +import re # libary to search and replace strings in the postscript file +from dictionary import font_index +from random import choice +from generate_postscript import generate_postscript + + +# function with three arguments +def future_relics(previous_module, current_module, module): + + shape = module[1] + rotation = module[2] + x = module[3] + y = module[4] + graytone = module[5] + + + spike = ['spike1', 'spike2', 'spike3'] + bubble = ['bubble1', 'bubble2', 'bubble3'] + square = ['square1', 'square2', 'square3'] + fraction = ['fraction1', 'fraction2', 'fraction3'] + + text = "" + font = "" + fontsize = "" + linewidth = "" + + + if shape == "spike": + form = choice(spike) + if form == 'spike1': + text = "f/yk" + font = "Helvetica-BoldOblique" + fontsize = "60" + linewidth = "100" + elif form == 'spike2': + text = "f/yk" + font = "Helvetica-BoldOblique" + fontsize = "30" + linewidth = "100" + elif form == 'spike3': + text = "xxx" + font = "Helvetica-BoldOblique" + fontsize = "100" + linewidth = "100" + + elif shape == "bubble": + form = choice(bubble) + if form == 'bubble1': + text = "gooo" + font = "Courier" + fontsize = "160" + linewidth = "80" + elif form == 'bubble2': + text = "dP" + font = "Courier" + fontsize = "160" + linewidth = "80" + elif form == 'bubble3': + text = "oOgOö" + font = "Courier" + fontsize = "250" + linewidth = "80" + + elif shape == "square": + form = choice(square) + if form == 'square1': + text = "FRICTION" + font = "Helvetica-BoldOblique" + fontsize = "2" + linewidth = "300" + elif form == 'square2': + text = "LLL" + font = "Helvetica-BoldOblique" + fontsize = "100" + linewidth = "300" + elif form == 'square3': + text = "|||" + font = "Courier" + fontsize = "100" + linewidth = "200" + + elif shape == "fraction": + form = choice(fraction) + if form == 'fraction1': + text = "3ß" + font = "Courier" + fontsize = "100" + linewidth = "600" + elif form == 'fraction2': + text = "%?" + font = "Courier" + fontsize = "100" + linewidth = "200" + elif form == 'fraction3': + text = "WM" + font = "Courier" + fontsize = "100" + linewidth = "200" + + + + script = """ + +newpath +% FUTURE RELICS + +/"""+font+""" +% fontname + +"""+fontsize+""" selectfont +% fontsize in points, establishes the font as the current one + +"""+x+""" """+y+""" moveto +% x and y coordinates in px (origin is the lower-left corner of the page) + +"""+rotation+""" rotate +% degree of rotation, counter clockwise around the given position + +("""+text+""") true charpath +% normally text works with "show", but to use the characters in the string as a path that can be stroked and filled use "true charpath" + +gsave +% save the current path to apply stroke first and then go back to the saved path to apply fill (Both drawing commands destroy the current path) + +"""+linewidth+""" setlinewidth +% linewidth for the outline of the text + +"""+graytone+""" setgray +% graytone for the outline (0 = black, 1 = white) + +stroke +% stroke (outline) the text in parentheses + +-"""+rotation+""" rotate +% set rotation back to zero + +showpage +% print all on a page +""" + + + + + generate_postscript(previous_module, current_module, script) # call function diff --git a/output_module/generate_postscript.py b/output_module/generate_postscript.py new file mode 100644 index 0000000..466a834 --- /dev/null +++ b/output_module/generate_postscript.py @@ -0,0 +1,42 @@ +import re # libary to search and replace strings in the postscript file +import os + +def generate_postscript(previous_module, current_module, script): + + + if previous_module == "" or previous_module == "dynamic_glyph": + print("use empty.ps and write to current_module.ps") + #input file + fileInput = open("empty.ps", "rt") # rt = read text mode + #output file to write the result to + fileOutput = open(current_module + ".ps", "wt") # wt = write text mode + + # read the input file, search for a patterns, replace it with new patterns (that take the values from the input sensor) + # uses regular expressions library (re) + content = fileInput.read() + content = re.sub(r"% empty file\n\nshowpage\n% print all on a page", (script), content) + + # write the new text to the output file + fileOutput.write(content) + #close input and output files + fileInput.close() + fileOutput.close() +# time.sleep(5) + + else: + print("use previous_module.ps and write to current_module.ps") + #input file + fileInput = open(previous_module + ".ps", "rt") # a+ = read text mode and write (append) to end of file + fileOutput = open(current_module + ".ps", "wt") # wt = write text mode + + # read the input file, search for a patterns, replace it with new patterns (that take the values from the input sensor) + # uses regular expressions library (re) + content = fileInput.read() + content = re.sub(r"showpage\n% print all on a page", (script), content) + + # write the new text to the output file + fileOutput.write(content) + #close input and output files + fileInput.close() + fileOutput.close() +# time.sleep(5) diff --git a/output_module/preview_button.py b/output_module/preview_button.py new file mode 100644 index 0000000..9fde089 --- /dev/null +++ b/output_module/preview_button.py @@ -0,0 +1,19 @@ +# button setup (connect to GND and board Pin 19) +import RPi.GPIO as GPIO # GPIO pins +#import time + + +def preview_button(): + + GPIO.setmode(GPIO.BOARD) #Use the physical board number (not GPIO numbering) + GPIO.setup(19, GPIO.IN, pull_up_down=GPIO.PUD_UP) #Change pin if necessary #preview button + GPIO.setwarnings(False) #Ignore warnings + + preview_button_pressed = False + + if GPIO.input(19) == GPIO.LOW: + #time.sleep(1) + preview_button_pressed = True + GPIO.cleanup() #GPIO clean up + + return preview_button_pressed diff --git a/output_module/print_button.py b/output_module/print_button.py new file mode 100644 index 0000000..9f80f27 --- /dev/null +++ b/output_module/print_button.py @@ -0,0 +1,19 @@ +# button setup (connect to GND and board Pin 21) +import RPi.GPIO as GPIO # GPIO pins +#import time + + +def print_button(): + + GPIO.setmode(GPIO.BOARD) #Use the physical board number (not GPIO numbering) + GPIO.setup(21, GPIO.IN, pull_up_down=GPIO.PUD_UP) #Change pin if necessary #print button + GPIO.setwarnings(False) #Ignore warnings + + print_button_pressed = False + + if GPIO.input(21) == GPIO.LOW: + #time.sleep(1) + print_button_pressed = True + GPIO.cleanup() #GPIO clean up + + return print_button_pressed diff --git a/output_module/print_or_preview.py b/output_module/print_or_preview.py new file mode 100644 index 0000000..785fd99 --- /dev/null +++ b/output_module/print_or_preview.py @@ -0,0 +1,56 @@ +import time +import os # library to use bash commands +import keyboard + + + + +def preview_output(preview_button_count, last_module): + + #open last_module.ps, read its content and save it as print.ps + fileInput = open(last_module + ".ps", "rt") # rt = read text mode + #output file to write the result to + fileOutput = open("print.ps", "wt") # wt = write text mode + + # read the input file, search for a patterns, replace it with new patterns (that take the values from the input sensor) + # uses regular expressions library (re) + content = fileInput.read() + + # write the new text to the output file + fileOutput.write(content) + #close input and output files + fileInput.close() + fileOutput.close() + + #on first button press: open preview + if preview_button_count == 1: + print("start preview of print.ps") + os.system("gv -fullscreen print.ps &") # open file in ghostscript viewer in fullscreen mode + + #on additional button press: refresh preview + elif preview_button_count >= 2: + print("refresh preview of print.ps") + keyboard.send(".") # refresh file that is open in ghostscript viewer + + + +def print_output(last_module): + + #open last_module.ps, read its content and save it as print.ps + fileInput = open(last_module + ".ps", "rt") # rt = read text mode + #output file to write the result to + fileOutput = open("print.ps", "wt") # wt = write text mode + + # read the input file, search for a patterns, replace it with new patterns (that take the values from the input sensor) + # uses regular expressions library (re) + content = fileInput.read() + + # write the new text to the output file + fileOutput.write(content) + #close input and output files + fileInput.close() + fileOutput.close() + + #on button press: send to printer + print("send print.ps to printer") + os.system("lp print.ps") # lp is the bash print command