|
23 | 23 | ) |
24 | 24 | from cellier.render.cameras import construct_pygfx_camera_from_model |
25 | 25 | from cellier.render.utils import construct_pygfx_object |
| 26 | +from cellier.transform import BaseTransform |
26 | 27 | from cellier.types import ( |
27 | 28 | CameraControlsUpdateEvent, |
28 | 29 | CameraId, |
@@ -575,14 +576,42 @@ def _on_visual_model_update(self, new_state: dict): |
575 | 576 |
|
576 | 577 | visual = self._visuals.get(visual_id) |
577 | 578 | if visual is None: |
578 | | - logger.warning(f"Visual with id {visual_id} not found.") |
| 579 | + logger.warning( |
| 580 | + f"RenderManager attempted to update visual with id {visual_id}," |
| 581 | + " but it wasn't found." |
| 582 | + ) |
579 | 583 | return |
580 | 584 |
|
581 | 585 | # update the visual with the new state |
582 | 586 | if "appearance" in new_state: |
583 | 587 | visual.update_appearance(new_state["appearance"]) |
584 | 588 |
|
| 589 | + if "transform" in new_state: |
| 590 | + transform = new_state["transform"] |
| 591 | + visual.set_transform(transform) |
| 592 | + |
585 | 593 | # emit a redraw request for the canvas |
586 | 594 | scene_id = new_state.get("scene_id") |
587 | 595 | if scene_id: |
588 | 596 | self.events.redraw_canvas.emit(CanvasRedrawRequest(scene_id=scene_id)) |
| 597 | + |
| 598 | + def _on_visual_transform_update( |
| 599 | + self, |
| 600 | + scene_id: SceneId, |
| 601 | + visual_id: VisualId, |
| 602 | + transform: BaseTransform, |
| 603 | + redraw_canvas: bool = True, |
| 604 | + ): |
| 605 | + """Update the visual transform based on a change to the model.""" |
| 606 | + visual = self._visuals.get(visual_id) |
| 607 | + if visual is None: |
| 608 | + logger.warning( |
| 609 | + f"RenderManager attempted to update visual with id {visual_id}," |
| 610 | + "but it wasn't found." |
| 611 | + ) |
| 612 | + return |
| 613 | + |
| 614 | + visual.set_transform(transform) |
| 615 | + |
| 616 | + if redraw_canvas: |
| 617 | + self.events.redraw_canvas.emit(CanvasRedrawRequest(scene_id=scene_id)) |
0 commit comments