78 lines
2.1 KiB
Python
78 lines
2.1 KiB
Python
import pygame
|
|
from pythonosc import dispatcher, osc_server
|
|
import threading
|
|
#python test_touch_area.py
|
|
SCREEN_WIDTH = 900
|
|
SCREEN_HEIGHT = 500
|
|
|
|
# Letzter Touchpunkt
|
|
touch_pos = None
|
|
|
|
def osc_touch(address, x, y):
|
|
global touch_pos
|
|
touch_pos = (int(x), int(y))
|
|
print("Touch empfangen:", touch_pos)
|
|
|
|
|
|
def start_osc():
|
|
disp = dispatcher.Dispatcher()
|
|
disp.map("/touch", osc_touch)
|
|
|
|
server = osc_server.ThreadingOSCUDPServer(("127.0.0.1", 5005), disp)
|
|
print("🔌 OSC Touch-Test läuft auf Port 5005")
|
|
server.serve_forever()
|
|
|
|
|
|
def draw_quadrants(screen):
|
|
"""Farbliche Quadranten zur Orientierung."""
|
|
colors = [(50, 50, 200), (200, 50, 50), (50, 180, 50), (200, 200, 50)]
|
|
rects = [
|
|
pygame.Rect(0, 0, SCREEN_WIDTH//2, SCREEN_HEIGHT//2),
|
|
pygame.Rect(SCREEN_WIDTH//2, 0, SCREEN_WIDTH//2, SCREEN_HEIGHT//2),
|
|
pygame.Rect(0, SCREEN_HEIGHT//2, SCREEN_WIDTH//2, SCREEN_HEIGHT//2),
|
|
pygame.Rect(SCREEN_WIDTH//2, SCREEN_HEIGHT//2, SCREEN_WIDTH//2, SCREEN_HEIGHT//2),
|
|
]
|
|
for i, r in enumerate(rects):
|
|
pygame.draw.rect(screen, colors[i], r)
|
|
pygame.draw.rect(screen, (0,0,0), r, 2)
|
|
|
|
|
|
def main():
|
|
pygame.init()
|
|
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
|
|
pygame.display.set_caption("🧪 Touch-Testfläche")
|
|
|
|
font = pygame.font.SysFont(None, 28)
|
|
|
|
clock = pygame.time.Clock()
|
|
|
|
# OSC starten
|
|
threading.Thread(target=start_osc, daemon=True).start()
|
|
|
|
global touch_pos
|
|
|
|
while True:
|
|
for event in pygame.event.get():
|
|
if event.type == pygame.QUIT:
|
|
return
|
|
|
|
screen.fill((30, 30, 30))
|
|
|
|
# Quadranten zeigen
|
|
draw_quadrants(screen)
|
|
|
|
# Touch anzeigen
|
|
if touch_pos is not None:
|
|
pygame.draw.circle(screen, (255, 255, 255), touch_pos, 12)
|
|
pygame.draw.circle(screen, (0, 0, 0), touch_pos, 12, 2)
|
|
|
|
txt = font.render(f"{touch_pos[0]}, {touch_pos[1]}", True, (255, 255, 255))
|
|
screen.blit(txt, (touch_pos[0] + 15, touch_pos[1] - 10))
|
|
|
|
pygame.display.flip()
|
|
clock.tick(60)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|