Commit b2d26444 authored by Pedro Widniczck's avatar Pedro Widniczck
Browse files

Replace animate_particles.py

parent 81167d01
# -*- coding: utf-8 -*-
# particulas.py - Protótipo de animação de partículas
# planetas.py - Animação do sistema solar
# Este script cria um modelo simplificado do sistema solar
# composto pelo sol e os 3 primeiros planetas internos em orbitas circulares.
# As dimensões dos corpos estão exageradas para fins de visualização
#
# Para utilizar este script chame o blender com a opção -P e o nome do arquivo
#
# $ blender -P ./animate_particles.py
# $ blender -P ./animacao.py
import bpy
bpy.context.user_preferences.view.show_splash = False
import numpy as np
import math
import os
......@@ -15,59 +16,63 @@ import os
filename = os.path.join(os.path.basename(bpy.data.filepath), "particle.py")
exec(compile(open(filename).read(), filename, 'exec'))
t_video=10 # duração da animação em segundos
t_simulado=10
fps = 24 # quadros por segundo
N_quadros=t_video*fps # calculando numero de quadros totais
delta_t=t_simulado/N_quadros # tempo passado por quadro
# Particle radius
r_part = 0.10
# Function that creates Blender Objects from input list of particles.
## Returns a list of blender objects
def create(particles):
bpy.context.scene.render.fps=fps
bpy.context.scene.frame_start = 0
bpy.context.scene.frame_end = N_quadros
blender_particles=[]
# Create blender spheres (particles)
bpy.context.user_preferences.view.show_splash = False
t_video=10 # duração da animação em segundos
t_simulado=100 # tempo próprio da simulação em segundos
fps = 24 # quadros por segundo
N_quadros=t_video*fps # calculando numero de quadros totais
delta_t=t_simulado/N_quadros # tempo passado por quadro
r_part = 0.1
#i, x1, x2, x3, v1, v2, v3, omega = np.genfromtxt(r'dados.txt',unpack=True)
#Nevents = 1
#Ntracks = 1
#Npartics = Nevents*Ntracks
def criaobjetos(particles):
#Inicia limpando a cena - ATENÇÃO - apaga todos os objetos!!
for objeto in bpy.data.objects:
bpy.data.objects.remove(objeto)
for particle in particles:
bpy.ops.mesh.primitive_uv_sphere_add()
this_particle = bpy.context.object
this_particle.name = "part"+str(particle.iDx)
this_particle.location=((particle.x,particle.y,particle.z))
this_particle.delta_scale=(r_part,r_part,r_part)
blender_particles.append(this_particle)
part = bpy.context.object
part.name = "particula"+str(particle.iDx)
part.location=((part.x,part.y,part.z))
part.delta_scale=(r_part,r_part,r_part)
blender_particles.append(part)
return blender_particles
# Function that animates the scene using the particle propagator class
def animate(objects):
#Animate particles
#bpy.ops.object.camera_add(location=(0, 0, 10))
#bpy.ops.object.lamp_add(location=(0,0,0))#type='SUN',location=(0,0,0))
## TODO: Fazer sol não emitir sombra e adicionar lamp type='POINT' na origem
## Isto irá representar o dia/noite dos planetas
def run(objects):
for f in range(1, N_quadros):
t=delta_t*f
bpy.context.scene.render.fps=fps
bpy.context.scene.frame_current = f
for i in range(0, len(objects)):
bpy.context.scene.objects.active=objects[i]
for i in range(0,len(objects)):
bpy.contecct.scene.objects.activate=objects[i]
objects[i].location=(particles[i].Propagate(t))
objects[i].keyframe_insert(data_path='location')
# Remove cube
bpy.data.objects.remove(bpy.data.objects['Cube'])
# Create particles
particles = createNparticlesProp(1000)
particles = createNparticlesProp(10)
# Create blender objects
blender_particles = create(particles)
blender_particles = criaobjetos(particles)
#Animate Scene
animate(blender_particles)
## Todo:
## - Lamp and cameras in suitable positions
## - Configure particle and background colors
## - Configure output format and enconding (FFmpeg & H.264 works fine)
## - Add option to keep particle trails
## - Add simple geometry of the ALICE detector
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment