Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/pan3d/custom/contour.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,9 @@
)

from pan3d.ui.css import base, preview
from pan3d.ui.vtk_view import Pan3DView
from pan3d.utils.convert import to_float, to_image
from pan3d.utils.presets import PRESETS, set_preset
from pan3d.widgets.pan3d_view import Pan3DView
from trame.app import get_server
from trame.decorators import TrameApp, change
from trame.ui.vuetify3 import VAppLayout
Expand Down
133 changes: 34 additions & 99 deletions src/pan3d/explorers/analytics.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,13 @@
plot_options,
zonal_axes,
)
from pan3d.ui.layouts import StandardExplorerLayout
from pan3d.ui.preview import RenderingSettings
from pan3d.ui.vtk_view import Pan3DView
from pan3d.utils.common import ControlPanel, Explorer, SummaryToolbar
from pan3d.utils.common import Explorer
from pan3d.utils.convert import to_float
from pan3d.widgets.scalar_bar import ScalarBar
from pan3d.widgets.pan3d_view import Pan3DView
from pan3d.xarray.algorithm import vtkXArrayRectilinearSource
from trame.decorators import change
from trame.ui.vuetify3 import VAppLayout
from trame.widgets import html
from trame.widgets import vuetify3 as v3

Expand Down Expand Up @@ -373,107 +372,43 @@ def _build_ui(self, **kwargs):
self.state.setdefault("time_groups", 0)
self.state.setdefault("figure_height", 50)

with VAppLayout(self.server, fill_height=True) as layout:
self.ui = layout
# Save dialog
with v3.VDialog(v_model=("show_save_dialog", False)):
with v3.VCard(classes="mx-auto w-50"):
v3.VCardTitle("Save dataset to disk")
v3.VDivider()
with v3.VCardText():
v3.VTextField(
label="File path to save",
v_model=("save_dataset_path", ""),
hide_details=True,
)
with v3.VCardActions():
v3.VSpacer()
v3.VBtn(
"Save",
classes="text-none",
variant="flat",
color="primary",
click=(self.save_dataset, "[save_dataset_path]"),
)
v3.VBtn(
"Cancel",
classes="text-none",
variant="flat",
click="show_save_dialog=false",
)

# Error messages
v3.VAlert(
v_if=("data_origin_error", False),
border="start",
max_width=700,
rounded="lg",
text=("data_origin_error", ""),
title="Failed to load data",
type="error",
variant="tonal",
style="position:absolute;bottom:1rem;right:1rem;",
)
## New way to build UI
with StandardExplorerLayout(
explorer=self, title="Analytics Explorer"
) as self.ui:
with self.ui.content:
Pan3dAnalyticsView(
render_window=self.render_window,
local_rendering=self.local_rendering,
widget=[self.widget],
)
with self.ui.control_panel:
RenderingSettings(
ctx_name="rendering",
source=self.source,
update_rendering=self.update_rendering,
)

with v3.VLayout():
with v3.VMain(style="position: relative"):
with html.Div(
style="position: relative; width: 100%; height: 100%;",
):
# 3D view
Pan3dAnalyticsView(
self.render_window,
local_rendering=self.local_rendering,
widgets=[self.widget],
)

# Scalar bar
ScalarBar(
ctx_name="scalar_bar",
v_show="!control_expended",
v_if="color_by",
)

# # Summary toolbar
SummaryToolbar(
v_show="!control_expended",
v_if="slice_t_max > 0",
)

# Control panel
with ControlPanel(
enable_data_selection=(self.xarray is None),
toggle="control_expended",
load_dataset=self.load_dataset,
import_file_upload=self.import_file_upload,
export_file_download=self.export_state,
xr_update_info="xr_update_info",
panel_label="Analytics Explorer",
).ui_content:
RenderingSettings(
ctx_name="rendering",
source=self.source,
update_rendering=self.update_rendering,
)

with v3.VNavigationDrawer(
disable_resize_watcher=True,
disable_route_watcher=True,
permanent=True,
location="right",
v_model=("plot_drawer", False),
width=800,
):
self.plotting = Plotting(
source=self.source, toggle="chart_expanded"
)
with v3.VNavigationDrawer(
disable_resize_watcher=True,
disable_route_watcher=True,
permanent=True,
location="right",
v_model=("plot_drawer", False),
width=800,
):
self.plotting = Plotting(source=self.source, toggle="chart_expanded")

self.ctx.save_dialog.save_callback = self._save_dataset
if self.source and self.source.input is not None:
self.ctx.rendering.update_from_source(self.source)

# -----------------------------------------------------
# State change callbacks
# -----------------------------------------------------

@change("color_by")
def _on_color_by_change(self, **kwargs):
@change("color_by", "color_preset", "color_min", "color_max", "nan_color")
def _on_color_properties_change(self, **kwargs):
super()._on_color_properties_change(**kwargs)
self.plotting.update_plot()

Expand Down
112 changes: 25 additions & 87 deletions src/pan3d/explorers/contour.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,12 @@
)

from pan3d.ui.contour import ContourRenderingSettings
from pan3d.ui.vtk_view import Pan3DView
from pan3d.utils.common import ControlPanel, Explorer, SummaryToolbar
from pan3d.ui.layouts import StandardExplorerLayout
from pan3d.utils.common import Explorer
from pan3d.utils.convert import to_float
from pan3d.widgets.scalar_bar import ScalarBar
from pan3d.widgets.pan3d_view import Pan3DView
from pan3d.xarray.algorithm import vtkXArrayRectilinearSource
from trame.decorators import change
from trame.ui.vuetify3 import VAppLayout
from trame.widgets import vuetify3 as v3


class ContourExplorer(Explorer):
Expand All @@ -45,10 +43,6 @@ def __init__(
input=self.xarray
) # To initialize the pipeline

# setup
self.last_field = None
self.last_preset = None

self._setup_vtk(pipeline)
self._build_ui()

Expand Down Expand Up @@ -134,93 +128,37 @@ def _build_ui(self, **_):
"scale_z": 0.01,
}
)
with VAppLayout(self.server, fill_height=True) as layout:
self.ui = layout

# 3D view
Pan3DView(
self.render_window,
local_rendering=self.local_rendering,
widgets=[self.widget],
)

# Scalar bar
ScalarBar(
ctx_name="scalar_bar",
v_show="!control_expended",
v_if="color_by",
)

# Save dialog
with v3.VDialog(v_model=("show_save_dialog", False)):
with v3.VCard(classes="mx-auto w-50"):
v3.VCardTitle("Save dataset to disk")
v3.VDivider()
with v3.VCardText():
v3.VTextField(
label="File path to save",
v_model=("save_dataset_path", ""),
hide_details=True,
)
with v3.VCardActions():
v3.VSpacer()
v3.VBtn(
"Save",
classes="text-none",
variant="flat",
color="primary",
click=(self.save_dataset, "[save_dataset_path]"),
)
v3.VBtn(
"Cancel",
classes="text-none",
variant="flat",
click="show_save_dialog=false",
)

# Error messages
v3.VAlert(
v_if=("data_origin_error", False),
border="start",
max_width=700,
rounded="lg",
text=("data_origin_error", ""),
title="Failed to load data",
type="error",
variant="tonal",
style="position:absolute;bottom:1rem;right:1rem;",
)

# Summary toolbar
SummaryToolbar(
v_show="!control_expended",
v_if="slice_t_max > 0",
)

# Control panel
with ControlPanel(
enable_data_selection=(self.xarray is None),
source=self.source,
toggle="control_expended",
load_dataset=self.load_dataset,
import_file_upload=self.import_file_upload,
export_file_download=self.export_state,
xr_update_info="xr_update_info",
panel_label="Contour Explorer",
).ui_content:

# Use the standard UI creation method
with StandardExplorerLayout(explorer=self, title="Contour Explorer") as self.ui:
with self.ui.content:
Pan3DView(
render_window=self.render_window,
local_rendering=self.local_rendering,
widget=[self.widget],
)
with self.ui.control_panel:
ContourRenderingSettings(
ctx_name="rendering",
source=self.source,
update_rendering=self.update_rendering,
)

def update_rendering(self, reset_camera=False):
self.renderer.ResetCamera()
self.state.dirty_data = False

if self.local_rendering:
self.ctrl.view_update(push_camera=True)
# Ensure actors are visible
if self.actor.GetVisibility() == 0:
self.actor.SetVisibility(1)
if self.actor_lines.GetVisibility() == 0:
self.actor_lines.SetVisibility(1)

self.ctrl.view_reset_camera()
self.renderer.ResetCamera()

if reset_camera:
self.ctrl.view_reset_camera()
else:
self.ctrl.view_update()

# -----------------------------------------------------
# State change callbacks
Expand Down
Loading
Loading