diff --git a/lindenmayer/inputHelper.py b/lindenmayer/inputHelper.py index 89e5bc8..eb010f3 100644 --- a/lindenmayer/inputHelper.py +++ b/lindenmayer/inputHelper.py @@ -3,6 +3,8 @@ import turtle import lSystems import pickle from dataclasses import dataclass +from PIL import Image +import io @dataclass class Save: @@ -76,7 +78,8 @@ l: ein Lindenmayer-System löschen b: Hintergrundfarbe ändern q: Programm beenden s: Lindenmayer-Systeme speichern -r: zuvor gespeicherte Lindenmayer-Systeme wiederherstellen""") +r: zuvor gespeicherte Lindenmayer-Systeme wiederherstellen +e: als Bilddatei exportieren""") case "d": for i, lSystem in enumerate(lSystems.LSystems): print(f"{i}: {lSystem.name}") @@ -90,7 +93,7 @@ r: zuvor gespeicherte Lindenmayer-Systeme wiederherstellen""") match input("Möchtest du das das Lindenmayer-System das ganze Fenster ausfüllt? [J/n]: ").lower(): case "j"|"": inputError = False - drawer.draw(lSystem, recursionDepth, turtle.Vec2D(0, 0), rotation, turtleObject.screen._window_size(), color) + drawer.draw(lSystem, recursionDepth, turtle.Vec2D(0, 0), rotation, turtle.Vec2D(turtleObject.screen.window_width(), turtleObject.screen.window_height()) - turtle.Vec2D(3, 3), color) takeInput(turtleObject) case "n": inputError = False @@ -128,27 +131,37 @@ r: zuvor gespeicherte Lindenmayer-Systeme wiederherstellen""") try: file = open(filepath, "wb") pickle.dump(save, file) + file.close() print("erfolgreich gespeichert") except Exception as err: print(err) - finally: - file.close() case "r": filepath = inputString("Datei, die geladen werden soll eingeben") - save: Save try: file = open(filepath, "rb") save = pickle.load(file) + file.close() + turtleObject.screen.clear() + backgroundColor = save.backgroundColor + turtleObject.screen.bgcolor(save.backgroundColor) + for drawingInfo in save.drawingInfos: + drawing = drawer.Drawing(drawingInfo, drawer.newTurtle()) + drawer.drawScaled(drawing) + except Exception as err: + print(err) + case "e": + # https://stackoverflow.com/questions/34777676/how-to-convert-a-python-tkinter-canvas-postscript-file-to-an-image-file-readable + canvas = turtleObject.screen.getcanvas() + postscript = canvas.postscript(colormode = "color") + image = Image.open(io.BytesIO(postscript.encode("utf-8"))) + filepath = inputString("Dateipfad für das zu exportierende Bild eingeben. Das Bildformat wird über die Dateiendung bestimmt") + try: + image.save(filepath) + print("Bild gespeichert") + except ValueError: + print("Fehler: unbekannte Dateiendung") except Exception as err: print(err) - finally: - file.close() - turtleObject.screen.clear() - backgroundColor = save.backgroundColor - turtleObject.screen.bgcolor(save.backgroundColor) - for drawingInfo in save.drawingInfos: - drawing = drawer.Drawing(drawingInfo, drawer.newTurtle()) - drawer.drawScaled(drawing) case _: print("unbekannter Befehl") if inputValue != "d": diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..4f3a1db --- /dev/null +++ b/setup.py @@ -0,0 +1,10 @@ +from setuptools import setup, find_packages + +setup( + name='lindenmayer', + version='0.1.0', + packages=find_packages(include=['lindenmayer']), + install_requires=[ + "pillow", + ], +)