80 lines
2.5 KiB
Python
80 lines
2.5 KiB
Python
import pygame
|
|
from itertools import product
|
|
import pygame_widgets
|
|
from Shapes import *
|
|
from Scene import Scene
|
|
from CustomWidgets import ColorPicker
|
|
from pygame_widgets.button import Button
|
|
from AnimationExporter import scene_to_frame
|
|
|
|
|
|
# generate a list of cubes
|
|
meshes: list[Mesh] = []
|
|
for origin in product([-1, 0, 1],[-1, 0, 1],[-1, 0, 1]):
|
|
cube = Cube()
|
|
cube.scale((0.35, 0.35, 0.35))
|
|
cube.set_position(origin)
|
|
cube.set_face_color((0, 0, 0))
|
|
meshes.append(cube)
|
|
|
|
scene = Scene(meshes, 90, 5)
|
|
|
|
WINDOW_W = 500
|
|
WINDOW_H = 500
|
|
|
|
def save_frame_to_file(frame_data=""):
|
|
frame_data += scene_to_frame(scene)
|
|
print(frame_data)
|
|
with open("tools/animation-tools/output.txt", 'w') as file:
|
|
file.write(frame_data)
|
|
|
|
pygame.init()
|
|
window = pygame.display.set_mode((WINDOW_W, WINDOW_H))
|
|
colorPicker = ColorPicker(window, 20, 20, 100, 300)
|
|
save_button = Button(window, 20, WINDOW_H-40, 60, 30, text="Save",onClick=save_frame_to_file)
|
|
clock = pygame.time.Clock()
|
|
selected_meshes = []
|
|
run = True
|
|
trackMouseMotion = False
|
|
|
|
while run:
|
|
clock.tick(60)
|
|
window.fill((255, 255, 255))
|
|
events = pygame.event.get()
|
|
for event in events:
|
|
if event.type == pygame.QUIT:
|
|
run = False
|
|
elif event.type == pygame.MOUSEBUTTONDOWN:
|
|
if event.button == 2: # middle mouse click
|
|
trackMouseMotion = True
|
|
elif event.button == 1: # left click
|
|
mousePosition = pygame.mouse.get_pos()
|
|
mesh = scene.get_mesh_from_xy(mousePosition)
|
|
if mesh != None:
|
|
if mesh in selected_meshes:
|
|
mesh.set_edge_color((0,0,0))
|
|
selected_meshes.remove(mesh)
|
|
else:
|
|
mesh.set_edge_color((255,0,0))
|
|
selected_meshes.append(mesh)
|
|
|
|
pass
|
|
elif event.type == pygame.MOUSEBUTTONUP:
|
|
if event.button == 2: # middle mouse release
|
|
trackMouseMotion = False
|
|
elif trackMouseMotion and event.type == pygame.MOUSEMOTION:
|
|
mouseMovement = pygame.mouse.get_rel()
|
|
scene.euler_angles[0] -= mouseMovement[1]
|
|
scene.euler_angles[1] -= mouseMovement[0]
|
|
pygame_widgets.update(events)
|
|
|
|
|
|
if not trackMouseMotion:
|
|
pygame.mouse.get_rel()
|
|
|
|
for mesh in selected_meshes:
|
|
mesh.set_face_color(colorPicker.get_color())
|
|
scene.draw(window)
|
|
pygame.display.flip()
|
|
|
|
pygame.quit() |