File size: 1,691 Bytes
ffbf761
 
 
 
44a5fb8
 
ffbf761
 
 
 
674aded
 
ffbf761
 
 
 
674aded
 
ffbf761
 
 
 
 
 
 
 
7dd5acf
 
ffbf761
7dd5acf
 
91a1fff
ffbf761
7dd5acf
 
 
 
15db7ce
7dd5acf
 
15db7ce
2477854
7dd5acf
 
 
 
 
ffbf761
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import tempfile
import os
import spaces
from typing import Optional
from data.loader import load_simulation_data
from visualization.logger import SimulationLogger
import rerun as rr


@spaces.GPU
def visualize_simulation(file, simulation_index: Optional[int]) -> Optional[str]:
    if file is None or simulation_index is None:
        return None

    try:
        simulations, _ = load_simulation_data(file)
        if not simulations or not isinstance(simulation_index, int) or simulation_index < 0 or simulation_index >= len(simulations):
            print(f"Invalid simulation data or index: {simulation_index}")
            return None

        temp_dir = tempfile.mkdtemp()
        rrd_path = os.path.join(temp_dir, "simulation.rrd")

        simulation = simulations[simulation_index]

        logger = SimulationLogger()

        # Log metadata
        logger.log_metadata(simulation['instructions'])

        # Log subjects (individual frames)
        logger.log_subjects(simulation['subjects'])

        # Log subject trajectories (full center path)
        logger.log_subject_trajectories(simulation['subjects'])

        # Log camera trajectory (full path)
        logger.log_camera_trajectory(simulation['cameraFrames'])

        # Log individual camera frames
        logger.log_camera_frames(simulation['cameraFrames'])

        # Log helper keyframes if available
        if 'helper_keyframes' in simulation:
            logger.log_helper_keyframes(simulation['helper_keyframes'])

        # Save the visualization data
        rr.save(rrd_path)

        return rrd_path

    except Exception as e:
        print(f"Error processing simulation: {str(e)}")
        return None