| 22 | |
| 23 | |
| 24 | class VisualiseProcess(Process): |
| 25 | |
| 26 | def __init__(self): |
| 27 | logger.debug("Renderer3D initialising") |
| 28 | super().__init__() |
| 29 | self._vis = None |
| 30 | self._input_queue = Queue3D() |
| 31 | self._exit_event = Event() |
| 32 | self.point_cloud = None |
| 33 | self.line_set = None |
| 34 | self.strip_set = None |
| 35 | self.daemon = True |
| 36 | logger.debug("Renderer3D initialised") |
| 37 | |
| 38 | def get_input_queue(self) -> Queue3D: |
| 39 | return self._input_queue |
| 40 | |
| 41 | def stop(self): |
| 42 | self._exit_event.set() |
| 43 | |
| 44 | def run(self): |
| 45 | logger.debug("Renderer3D process starting") |
| 46 | initialised = False |
| 47 | |
| 48 | while not self._exit_event.is_set(): |
| 49 | |
| 50 | if not self._input_queue.empty(): |
| 51 | leds = self._input_queue.get() |
| 52 | if len(leds) < 9: |
| 53 | continue |
| 54 | |
| 55 | if not initialised: |
| 56 | self.initialise_visualiser__() |
| 57 | self.reload_geometry__(leds, True) |
| 58 | initialised = True |
| 59 | else: |
| 60 | self.reload_geometry__(leds) |
| 61 | |
| 62 | if initialised: |
| 63 | self._vis.poll_events() |
| 64 | self._vis.update_renderer() |
| 65 | time.sleep(1 / 60) |
| 66 | else: |
| 67 | time.sleep(1) |
| 68 | |
| 69 | def initialise_visualiser__(self): |
| 70 | logger.debug("Renderer3D process initialising visualiser") |
| 71 | |
| 72 | self._vis = ( |
| 73 | open3d.visualization.Visualizer() |
| 74 | ) # This needs to be updated to O3DVisualizer |
| 75 | self._vis.create_window( |
| 76 | window_name="MariMapper", |
| 77 | width=640, |
| 78 | height=640, |
| 79 | ) |
| 80 | |
| 81 | view_ctl = ( |