| 154 | return render |
| 155 | |
| 156 | class ViserViewer: |
| 157 | def __init__(self, port): |
| 158 | self.port = port |
| 159 | self.server = viser.ViserServer(port=port) |
| 160 | |
| 161 | self.need_update = False |
| 162 | |
| 163 | with self.server.gui.add_folder("Playback"): |
| 164 | self.gui_playing = self.server.gui.add_checkbox("Playing", True) |
| 165 | self.timestamp = self.server.add_slider( |
| 166 | "Timestamp", min=0, max=49, step=1, initial_value=0 |
| 167 | ) |
| 168 | self.gui_next_frame = self.server.gui.add_button("Next Frame", disabled=True) |
| 169 | self.gui_prev_frame = self.server.gui.add_button("Prev Frame", disabled=True) |
| 170 | |
| 171 | self.gui_show_depth = self.server.gui.add_checkbox( |
| 172 | "Show Depth", |
| 173 | initial_value=False, |
| 174 | ) |
| 175 | |
| 176 | @self.gui_playing.on_update |
| 177 | def _(_) -> None: |
| 178 | self.timestamp.disabled = self.gui_playing.value |
| 179 | self.gui_next_frame.disabled = self.gui_playing.value |
| 180 | self.gui_prev_frame.disabled = self.gui_playing.value |
| 181 | |
| 182 | @self.timestamp.on_update |
| 183 | def _(_): |
| 184 | self.need_update = True |
| 185 | |
| 186 | # Frame step buttons. |
| 187 | @self.gui_next_frame.on_click |
| 188 | def _(_) -> None: |
| 189 | self.timestamp.value = (self.timestamp.value + 1) % 50 |
| 190 | |
| 191 | @self.gui_prev_frame.on_click |
| 192 | def _(_) -> None: |
| 193 | self.timestamp.value = (self.timestamp.value - 1) % 50 |
| 194 | |
| 195 | @self.gui_show_depth.on_update |
| 196 | def _(_) -> None: |
| 197 | self.need_update = True |
| 198 | |
| 199 | @self.server.on_client_connect |
| 200 | def _(client: viser.ClientHandle): |
| 201 | @client.camera.on_update |
| 202 | def _(_): |
| 203 | self.need_update = True |
| 204 | |
| 205 | # self.scene_rep = DynGSRenderer(args) |
| 206 | |
| 207 | def set_scene_rep(self, scene_rep): |
| 208 | self.scene_rep = scene_rep |
| 209 | |
| 210 | def render(self, camera, timestamp): |
| 211 | if self.gui_show_depth.value: |
| 212 | return self.scene_rep.render(camera, timestamp, "ED") |
| 213 | else: |