|
20 | 20 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21 | 21 | # SOFTWARE.
|
22 | 22 | """Module for using `trame <https://kitware.github.io/trame/index.html>`_ for visualization."""
|
| 23 | +from beartype.typing import TYPE_CHECKING, Union |
| 24 | +import pyvista as pv |
| 25 | + |
| 26 | +from ansys.geometry.core import LOG as logger |
| 27 | +from ansys.geometry.core.plotting.plotter import Plotter |
| 28 | + |
| 29 | +if TYPE_CHECKING: |
| 30 | + from ansys.geometry.core.plotting.plotter_helper import PlotterHelper |
| 31 | + |
23 | 32 | try:
|
24 | 33 | from pyvista.trame.ui import plotter_ui
|
25 | 34 | from trame.app import get_server
|
26 |
| - from trame.ui.vuetify import SinglePageLayout |
| 35 | + from trame.ui import vuetify, vuetify3 |
27 | 36 |
|
28 | 37 | _HAS_TRAME = True
|
29 | 38 |
|
|
32 | 41 |
|
33 | 42 |
|
34 | 43 | class TrameVisualizer:
|
35 |
| - """Defines the trame layout view.""" |
| 44 | + """ |
| 45 | + Defines the trame layout view. |
36 | 46 |
|
37 |
| - def __init__(self) -> None: |
| 47 | + Parameters |
| 48 | + ---------- |
| 49 | + client_type : str, optional |
| 50 | + Client type to use for the trame server. Options are 'vue2' and 'vue3'. |
| 51 | + Default is 'vue3'. |
| 52 | + """ |
| 53 | + |
| 54 | + def __init__(self, client_type: str = "vue3") -> None: |
38 | 55 | """Initialize the trame server and server-related variables."""
|
39 | 56 | if not _HAS_TRAME: # pragma: no cover
|
40 | 57 | raise ModuleNotFoundError(
|
41 | 58 | "The package 'pyvista[trame]' is required to use this function."
|
42 | 59 | )
|
| 60 | + self._client_type = client_type |
| 61 | + if client_type not in ["vue2", "vue3"]: |
| 62 | + self._client_type = "vue3" |
| 63 | + logger.warning("Invalid client type {}. Defaulting to 'vue3'.", client_type) |
43 | 64 |
|
44 |
| - self.server = get_server() |
| 65 | + self.server = get_server(client_type=client_type) |
45 | 66 | self.state, self.ctrl = self.server.state, self.server.controller
|
46 | 67 |
|
47 |
| - def set_scene(self, plotter): |
| 68 | + def set_scene(self, plotter: Union["pv.Plotter", Plotter, "PlotterHelper"]): |
48 | 69 | """
|
49 | 70 | Set the trame layout view and the mesh to show through the PyVista plotter.
|
50 | 71 |
|
51 | 72 | Parameters
|
52 | 73 | ----------
|
53 |
| - plotter : ~pyvista.Plotter |
54 |
| - PyVista plotter with the rendered mesh. |
| 74 | + plotter : Union[~pyvista.Plotter, ~Plotter, ~PlotterHelper] |
| 75 | + PyVista plotter or PyAnsys plotter to render. |
55 | 76 | """
|
| 77 | + from ansys.geometry.core.plotting.plotter_helper import PlotterHelper |
| 78 | + |
| 79 | + if isinstance(plotter, PlotterHelper): |
| 80 | + pv_plotter = plotter._pl.scene |
| 81 | + elif isinstance(plotter, Plotter): |
| 82 | + pv_plotter = plotter.scene |
| 83 | + elif isinstance(plotter, pv.Plotter): |
| 84 | + pv_plotter = plotter |
| 85 | + else: |
| 86 | + logger.warning("Invalid plotter type. Expected PyVista plotter or PyAnsys plotter.") |
| 87 | + |
56 | 88 | self.state.trame__title = "PyAnsys Geometry Viewer"
|
| 89 | + if self._client_type == "vue3": |
| 90 | + page_layout = vuetify3.SinglePageLayout(self.server) |
| 91 | + else: |
| 92 | + page_layout = vuetify.SinglePageLayout(self.server) |
57 | 93 |
|
58 |
| - with SinglePageLayout(self.server) as layout: |
| 94 | + with page_layout as layout: |
59 | 95 | layout.icon.click = self.ctrl.view_reset_camera
|
60 | 96 | layout.title.set_text("PyAnsys Geometry")
|
61 | 97 |
|
62 | 98 | with layout.content:
|
63 | 99 | # Use PyVista UI template for Plotters
|
64 |
| - view = plotter_ui(plotter.scene) |
| 100 | + view = plotter_ui(pv_plotter) |
65 | 101 | self.ctrl.view_update = view.update
|
66 | 102 |
|
67 | 103 | # hide footer with trame watermark
|
|
0 commit comments