| 67 | |
| 68 | |
| 69 | class Visualizer(StubVisualizer): |
| 70 | def __init__(self): |
| 71 | # Initialize GUI |
| 72 | try: |
| 73 | self._ps = importlib.import_module("polyscope") |
| 74 | self._gui = self._ps.imgui |
| 75 | except ModuleNotFoundError as err: |
| 76 | print(f'polyscope is not installed on your system, run "pip install polyscope"') |
| 77 | exit(1) |
| 78 | |
| 79 | self.localmap_data = LocalMapData() |
| 80 | self.registration = RegistrationVisualizer(self._ps, self._gui) |
| 81 | self.closures = ClosuresVisualizer(self._ps, self._gui, self.localmap_data) |
| 82 | self.local_maps = LocalMapVisualizer(self._ps, self._gui, self.localmap_data) |
| 83 | self.background_color = BACKGROUND_COLOR |
| 84 | self.global_view = False |
| 85 | |
| 86 | self._initialize_visualizers() |
| 87 | |
| 88 | def update_registration(self, source, local_map, frame_pose): |
| 89 | self.registration.update(source, local_map, frame_pose) |
| 90 | |
| 91 | def update_data(self, local_map, density_map, local_map_pose): |
| 92 | self.localmap_data.size += 1 |
| 93 | self.localmap_data.local_maps.append(local_map) |
| 94 | self.localmap_data.density_maps.append(density_map) |
| 95 | self.localmap_data.local_map_poses.append(local_map_pose) |
| 96 | |
| 97 | def update_closures(self, alignment_pose, closure_edge): |
| 98 | self.closures.update_closures(alignment_pose, closure_edge) |
| 99 | |
| 100 | def _initialize_visualizers(self): |
| 101 | self._ps.set_program_name("MapClosures Visualizer") |
| 102 | self._ps.init() |
| 103 | self._ps.set_ground_plane_mode("none") |
| 104 | self._ps.set_background_color(BACKGROUND_COLOR) |
| 105 | self._ps.set_verbosity(0) |
| 106 | self._ps.set_user_callback(self._main_gui_callback) |
| 107 | self._ps.set_build_default_gui_panels(False) |
| 108 | |
| 109 | # --- GUI Callbacks ------------------------------------------------ |
| 110 | def _main_gui_callback(self): |
| 111 | if not self.closures.states.toggle_view and not self.local_maps.toggle_view: |
| 112 | self.registration._start_pause_callback() |
| 113 | if not self.registration.states.play_mode: |
| 114 | self._gui.SameLine() |
| 115 | self.registration._next_frame_callback() |
| 116 | self._gui.Separator() |
| 117 | self.registration._source_callback() |
| 118 | self.registration._localmap_callback() |
| 119 | elif self.closures.states.toggle_view: |
| 120 | self.closures._previous_next_closure_callback() |
| 121 | self._gui.SameLine() |
| 122 | self.closures._density_map_callback() |
| 123 | self._gui.Separator() |
| 124 | self.closures._query_map_callback() |
| 125 | self.closures._reference_map_callback() |
| 126 | self._gui.Separator() |