(self)
| 688 | ) |
| 689 | |
| 690 | def animate(self): |
| 691 | with self.server.add_gui_folder("Playback"): |
| 692 | gui_timestep = self.server.add_gui_slider( |
| 693 | "Train Step", |
| 694 | min=0, |
| 695 | max=self.num_frames - 1, |
| 696 | step=1, |
| 697 | initial_value=0, |
| 698 | disabled=False, |
| 699 | ) |
| 700 | gui_next_frame = self.server.add_gui_button("Next Step", disabled=False) |
| 701 | gui_prev_frame = self.server.add_gui_button("Prev Step", disabled=False) |
| 702 | gui_playing = self.server.add_gui_checkbox("Playing", False) |
| 703 | gui_framerate = self.server.add_gui_slider( |
| 704 | "FPS", min=1, max=60, step=0.1, initial_value=1 |
| 705 | ) |
| 706 | gui_framerate_options = self.server.add_gui_button_group( |
| 707 | "FPS options", ("10", "20", "30", "60") |
| 708 | ) |
| 709 | |
| 710 | @gui_next_frame.on_click |
| 711 | def _(_) -> None: |
| 712 | gui_timestep.value = (gui_timestep.value + 1) % self.num_frames |
| 713 | |
| 714 | @gui_prev_frame.on_click |
| 715 | def _(_) -> None: |
| 716 | gui_timestep.value = (gui_timestep.value - 1) % self.num_frames |
| 717 | |
| 718 | @gui_playing.on_update |
| 719 | def _(_) -> None: |
| 720 | gui_timestep.disabled = gui_playing.value |
| 721 | gui_next_frame.disabled = gui_playing.value |
| 722 | gui_prev_frame.disabled = gui_playing.value |
| 723 | |
| 724 | @gui_framerate_options.on_click |
| 725 | def _(_) -> None: |
| 726 | gui_framerate.value = int(gui_framerate_options.value) |
| 727 | |
| 728 | prev_timestep = gui_timestep.value |
| 729 | |
| 730 | @gui_timestep.on_update |
| 731 | def _(_) -> None: |
| 732 | nonlocal prev_timestep |
| 733 | current_timestep = gui_timestep.value |
| 734 | with self.server.atomic(): |
| 735 | self.frame_nodes[current_timestep].visible = True |
| 736 | self.frame_nodes[prev_timestep].visible = False |
| 737 | prev_timestep = current_timestep |
| 738 | self.server.flush() # Optional! |
| 739 | |
| 740 | self.server.add_frame( |
| 741 | "/frames", |
| 742 | show_axes=False, |
| 743 | ) |
| 744 | self.frame_nodes = [] |
| 745 | for i in range(self.num_frames): |
| 746 | step = self.all_steps[i] |
| 747 | self.frame_nodes.append( |
no test coverage detected