diff --git a/app/components/VeaseViewToolbar.vue b/app/components/VeaseViewToolbar.vue index 195094e2..54ec2619 100644 --- a/app/components/VeaseViewToolbar.vue +++ b/app/components/VeaseViewToolbar.vue @@ -8,6 +8,8 @@ import ZScaling from "@ogw_front/components/ZScaling"; import { useHybridViewerStore } from "@ogw_front/stores/hybrid_viewer"; import { useViewerStore } from "@ogw_front/stores/viewer"; +import vtkCubeAxesActor from "@kitware/vtk.js/Rendering/Core/CubeAxesActor"; + const hybridViewerStore = useHybridViewerStore(); const viewerStore = useViewerStore(); const take_screenshot = ref(false); @@ -52,6 +54,12 @@ const camera_options = [ { response_function: () => { grid_scale.value = !grid_scale.value; + const renderer = hybridViewerStore.genericRenderWindow.value.getRenderer(); + const cubeAxes = vtkCubeAxesActor.newInstance(); + const bounds = renderer.computeVisiblePropBounds(); + cubeAxes.setDataBounds(bounds); + cubeAxes.setCamera(renderer.getActiveCamera()); + renderer.addActor(cubeAxes); hybridViewerStore.remoteRender(); }, }, diff --git a/app/stores/hybrid_viewer.js b/app/stores/hybrid_viewer.js index 40bc1982..1b535334 100644 --- a/app/stores/hybrid_viewer.js +++ b/app/stores/hybrid_viewer.js @@ -24,6 +24,8 @@ const ACTOR_COLOR = [ ACTOR_DARK_VALUE / RGB_MAX, ]; const WHEEL_TIME_OUT_MS = 600; +const CLIPPING_RANGE_EXPANSION = 0.05; +const NEAR_CLIPPING_PLANE_TOLERANCE = 0.01; export const useHybridViewerStore = defineStore("hybridViewer", () => { const dataStore = useDataStore(); @@ -62,6 +64,10 @@ export const useHybridViewerStore = defineStore("hybridViewer", () => { imageStyle.opacity = 1; }); + const renderer = genericRenderWindow.value.getRenderer(); + renderer.setClippingRangeExpansion(CLIPPING_RANGE_EXPANSION); + renderer.setNearClippingPlaneTolerance(NEAR_CLIPPING_PLANE_TOLERANCE); + status.value = Status.CREATED; } @@ -98,13 +104,20 @@ export const useHybridViewerStore = defineStore("hybridViewer", () => { delete hybridDb[id]; } - function setVisibility(id, visibility) { + async function setVisibility(id, visibility) { if (!hybridDb[id]) { return; } hybridDb[id].actor.setVisibility(visibility); - const renderWindow = genericRenderWindow.value.getRenderWindow(); - renderWindow.render(); + const renderer = genericRenderWindow.value.getRenderer(); + renderer.resetCameraClippingRange(); + genericRenderWindow.value.getRenderWindow().render(); + const item = await dataStore.item(id); + const schema = viewer_schemas?.opengeodeweb_viewer?.[item.viewer_type]?.visibility; + if (schema) { + await viewerStore.request(schema, { id, visibility }); + } + syncRemoteCamera(); } async function setZScaling(z_scale) { zScale.value = z_scale; @@ -149,6 +162,7 @@ export const useHybridViewerStore = defineStore("hybridViewer", () => { distance: camera.getDistance(), }, }; + console.log({ params }); viewerStore.request(viewer_schemas.opengeodeweb_viewer.viewer.update_camera, params, { response_function: () => { remoteRender();