Loading src/ctscan_viz/views/visualization_panel.py +18 −8 Original line number Diff line number Diff line """PyVista plotter for CT scans.""" from asyncio import create_task from asyncio import get_running_loop from concurrent.futures import ThreadPoolExecutor from time import time from typing import Any, Optional from pyvista import Plotter, themes from pyvista.trame.ui import get_viewer from trame.app import asynchronous from trame_server.core import Server from trame_server.state import State Loading @@ -24,6 +26,7 @@ class VisualizationPanel: self.vm.render_bind.connect(self.render) self.plotter = self.create_plotter() self.loading = False self.create_ui() @property Loading @@ -46,15 +49,22 @@ class VisualizationPanel: view = get_viewer(self.plotter) view.ui(mode="server", style="height: 66vh;") async def render_in_background(self) -> None: def render_in_background(self) -> None: start = time() self.plotter.add_volume( self.vm.get_volume(), clim=self.vm.get_clim(), mapper="gpu", opacity=self.vm.get_opacity() self.vm.get_volume(), clim=self.vm.get_clim(), mapper="gpu", opacity=self.vm.get_opacity(), render=False ) self.plotter.view_isometric(self.plotter) print(f"PyVista volume rendering: {time() - start:.2f}s", flush=True) print(f"Added volume to scene: {time() - start:.2f}s", flush=True) self.vm.update_view() @asynchronous.task async def render(self, _: Optional[Any] = None) -> None: loop = get_running_loop() with ThreadPoolExecutor() as executor: await loop.run_in_executor(executor, self.render_in_background) def render(self, _: Optional[Any] = None) -> None: self.render_thread = create_task(self.render_in_background()) start = time() self.plotter.render() self.plotter.view_isometric() # type: ignore self.vm.update_view() print(f"PyVista rendering: {time() - start:.2f}s", flush=True) Loading
src/ctscan_viz/views/visualization_panel.py +18 −8 Original line number Diff line number Diff line """PyVista plotter for CT scans.""" from asyncio import create_task from asyncio import get_running_loop from concurrent.futures import ThreadPoolExecutor from time import time from typing import Any, Optional from pyvista import Plotter, themes from pyvista.trame.ui import get_viewer from trame.app import asynchronous from trame_server.core import Server from trame_server.state import State Loading @@ -24,6 +26,7 @@ class VisualizationPanel: self.vm.render_bind.connect(self.render) self.plotter = self.create_plotter() self.loading = False self.create_ui() @property Loading @@ -46,15 +49,22 @@ class VisualizationPanel: view = get_viewer(self.plotter) view.ui(mode="server", style="height: 66vh;") async def render_in_background(self) -> None: def render_in_background(self) -> None: start = time() self.plotter.add_volume( self.vm.get_volume(), clim=self.vm.get_clim(), mapper="gpu", opacity=self.vm.get_opacity() self.vm.get_volume(), clim=self.vm.get_clim(), mapper="gpu", opacity=self.vm.get_opacity(), render=False ) self.plotter.view_isometric(self.plotter) print(f"PyVista volume rendering: {time() - start:.2f}s", flush=True) print(f"Added volume to scene: {time() - start:.2f}s", flush=True) self.vm.update_view() @asynchronous.task async def render(self, _: Optional[Any] = None) -> None: loop = get_running_loop() with ThreadPoolExecutor() as executor: await loop.run_in_executor(executor, self.render_in_background) def render(self, _: Optional[Any] = None) -> None: self.render_thread = create_task(self.render_in_background()) start = time() self.plotter.render() self.plotter.view_isometric() # type: ignore self.vm.update_view() print(f"PyVista rendering: {time() - start:.2f}s", flush=True)