diff --git a/.hyphae_pixelflut.py.swp b/.hyphae_pixelflut.py.swp new file mode 100644 index 0000000..b0ee823 Binary files /dev/null and b/.hyphae_pixelflut.py.swp differ diff --git a/__pycache__/pixelflut.cpython-37.pyc b/__pycache__/pixelflut.cpython-37.pyc new file mode 100644 index 0000000..b9aeee5 Binary files /dev/null and b/__pycache__/pixelflut.cpython-37.pyc differ diff --git a/__pycache__/pixelflut.cpython-39.opt-1.pyc b/__pycache__/pixelflut.cpython-39.opt-1.pyc new file mode 100644 index 0000000..f90f47f Binary files /dev/null and b/__pycache__/pixelflut.cpython-39.opt-1.pyc differ diff --git a/__pycache__/pixelflut.cpython-39.pyc b/__pycache__/pixelflut.cpython-39.pyc new file mode 100644 index 0000000..2dc0829 Binary files /dev/null and b/__pycache__/pixelflut.cpython-39.pyc differ diff --git a/__pycache__/utils.cpython-37.pyc b/__pycache__/utils.cpython-37.pyc new file mode 100644 index 0000000..528e217 Binary files /dev/null and b/__pycache__/utils.cpython-37.pyc differ diff --git a/__pycache__/utils.cpython-39.opt-1.pyc b/__pycache__/utils.cpython-39.opt-1.pyc new file mode 100644 index 0000000..3d115e5 Binary files /dev/null and b/__pycache__/utils.cpython-39.opt-1.pyc differ diff --git a/__pycache__/utils.cpython-39.opt-2.pyc b/__pycache__/utils.cpython-39.opt-2.pyc new file mode 100644 index 0000000..3d115e5 Binary files /dev/null and b/__pycache__/utils.cpython-39.opt-2.pyc differ diff --git a/__pycache__/utils.cpython-39.pyc b/__pycache__/utils.cpython-39.pyc new file mode 100644 index 0000000..3d115e5 Binary files /dev/null and b/__pycache__/utils.cpython-39.pyc differ diff --git a/__pycache__/waves.cpython-37.pyc b/__pycache__/waves.cpython-37.pyc new file mode 100644 index 0000000..599507a Binary files /dev/null and b/__pycache__/waves.cpython-37.pyc differ diff --git a/__pycache__/waves.cpython-39.opt-1.pyc b/__pycache__/waves.cpython-39.opt-1.pyc new file mode 100644 index 0000000..e7b8471 Binary files /dev/null and b/__pycache__/waves.cpython-39.opt-1.pyc differ diff --git a/__pycache__/waves.cpython-39.pyc b/__pycache__/waves.cpython-39.pyc new file mode 100644 index 0000000..e7b8471 Binary files /dev/null and b/__pycache__/waves.cpython-39.pyc differ diff --git a/hyphae_pixelflut.py b/hyphae_pixelflut.py index 80fb33d..07d82f1 100644 --- a/hyphae_pixelflut.py +++ b/hyphae_pixelflut.py @@ -5,9 +5,10 @@ import math import random import threading import time +import socket from utils import circle_fill from utils import random_color -from pixelflut import surface_to_pixelflut +#from pixelflut import surface_to_pixelflut WIDTH, HEIGHT = 1920, 1080 ANGLE_RANDOM_MIN = -0.6 @@ -17,6 +18,42 @@ SHRINK = 0.00002 hitmap = list() +DRAW_MAP = None + +SERVER_IP = '192.168.178.75' +#SERVER_IP = '127.0.0.1' +SERVER_PORT = 1234 +#SERVER_PORT = 1337 + +def chunker(seq, size): + return (seq[pos:pos + size] for pos in range(0, len(seq), size)) + +def surface_to_pixelflut(): + global DRAW_MAP + while True: + data = DRAW_MAP.get_data() + pixels = data.hex() + x, y = 0, 0 + #to_send = list() + pxstr = '' + for hexpx in chunker(pixels, 8): + if x > 1919: + x = 0 + y += 1 + x += 1 + if hexpx[6:8] == '00': + continue + pxstr += f'PX {x} {y} {hexpx[:6]}\n' + #to_send.append(pxstr) + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + s.connect((SERVER_IP, SERVER_PORT)) + print('!! socket opened !!') + #for px in to_send: + # s.sendall(px.encode()) + s.sendall(pxstr.encode()) + #print(f'sent {pxstr}') + print('!! transmission to pixelflut finished !!') + class Branch(): def __init__(self, idx, ctx, x, y, r, ang): @@ -45,7 +82,7 @@ class Branch(): return False # did we hit canvas edge? # if next_x + next_r > 1 or next_x - next_r < 0: - if (math.pow(next_x - 0.5, 2) + math.pow(next_y - 0.5, 2)) > math.pow(0.5, 2): + if (math.pow(next_x - 0.5, 2) + math.pow(next_y - 0.5, 2)) > math.pow(0.4, 2): self.ended = True return False if next_y + next_r > 1 or next_y - next_r < 0: @@ -114,7 +151,7 @@ def grow_branch_until_ended(branch, branches): def grow_subs(ctx, subs, branches): source = ctx.get_source() new_subs = [] - threads = list() + #threads = list() print('spawning sub growing threads') for branch in subs: # x = threading.Thread(target=grow_sub, args=(ctx, branch, branches, new_subs)) @@ -125,13 +162,9 @@ def grow_subs(ctx, subs, branches): # thread.join() print('all threads finished') print('starting place_next threads') - pl_threads = list() + #pl_threads = list() for branch in new_subs: - x = threading.Thread(target=grow_branch_until_ended, args=(branch, branches)) - pl_threads.append(x) - x.start() - for tidx, thread in enumerate(pl_threads): - thread.join() + grow_branch_until_ended(branch, branches) print('place_next done') #while not all([branch.ended for branch in new_subs]): @@ -140,6 +173,7 @@ def grow_subs(ctx, subs, branches): return new_subs def main(): + global DRAW_MAP surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, WIDTH, HEIGHT) ctx = cairo.Context(surface) @@ -165,6 +199,9 @@ def main(): # start branching off #subs = [] subs = branches + DRAW_MAP = surface + t = threading.Thread(target=surface_to_pixelflut, daemon=True) + t.start() try: for x in range(8): if subs == None: @@ -172,16 +209,13 @@ def main(): r, g, b = random_color() ctx.set_source_rgb(r, g, b) subs = grow_subs(ctx, subs, branches) + print(f'iteration {x} done, sending to pixelflut') - x = threading.Thread(target=surface_to_pixelflut, args=(surface,)) - x.daemon = True - x.start() - x.join() - #surface_to_pixelflut(surface) + DRAW_MAP = surface #surface.write_to_png("out/hyphae.png") # Output to PNG - #input('next') finally: surface.write_to_png("out/hyphae.png") # Output to PNG + sys.exit(0) if __name__ == '__main__': main() diff --git a/out/hyphae.png b/out/hyphae.png new file mode 100644 index 0000000..dce0849 Binary files /dev/null and b/out/hyphae.png differ diff --git a/pixelflut.py b/pixelflut.py index b4161fb..ea6065e 100644 --- a/pixelflut.py +++ b/pixelflut.py @@ -5,41 +5,33 @@ import socket sys.path.append('..') from waves import create_wpotd -SERVER_IP = '192.168.178.75' +#SERVER_IP = '192.168.178.75' +SERVER_IP = '127.0.0.1' SERVER_PORT = 1234 def chunker(seq, size): return (seq[pos:pos + size] for pos in range(0, len(seq), size)) -#buf = io.BytesIO() -#surface = create_wpotd(buf) -# -#data = surface.get_data() -#pixels = data.hex() -# -#x, y = 0, 0 -#for hexpx in chunker(pixels, 8): -# if x > 1919: -# x = 0 -# y += 1 -# pxstr = f'PX {x} {y} {hexpx[:6]}' -# x += 1 -# print(pxstr) - -def surface_to_pixelflut(surface): - data = surface.get_data() - pixels = data.hex() - - x, y = 0, 0 - with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: - s.connect((SERVER_IP, SERVER_PORT)) +def surface_to_pixelflut(): + global DRAW_MAP + while True: + data = DRAW_MAP.get_data() + pixels = data.hex() + x, y = 0, 0 + to_send = list() for hexpx in chunker(pixels, 8): if x > 1919: x = 0 y += 1 - pxstr = f'PX {x} {y} {hexpx[:6]}\n' x += 1 if hexpx[6:8] == '00': continue - s.sendall(pxstr.encode()) - print('transmission to pixelflut finished') + pxstr = f'PX {x} {y} {hexpx[:6]}\n' + to_send.append(pxstr) + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: + s.connect((SERVER_IP, SERVER_PORT)) + print('!! socket opened !!') + for px in to_send: + s.sendall(px.encode()) + #print(f'sent {pxstr}') + print('!! transmission to pixelflut finished !!')