From 352b3ae860497f36cc9bcdbc368771c58e02353b Mon Sep 17 00:00:00 2001 From: Michael Krayer Date: Wed, 28 Jul 2021 12:40:03 +0200 Subject: [PATCH] fixed camera setting functions --- visu.py | 72 +++++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 47 insertions(+), 25 deletions(-) diff --git a/visu.py b/visu.py index cf0306f..07928c2 100644 --- a/visu.py +++ b/visu.py @@ -24,34 +24,56 @@ def enable_shadows_hacked(pl): pl.renderer.SetPass(cameraP) return -def setup_camera(pl,bounds,viewvec,dist=None,parallel_projection=False, - rel_focus=(0.5,0.5,0.5),abs_focus=None,viewup=(0,1,0)): +def camera_from_view(pl,bounds,viewvec, + focus=(0.5,0.5,0.5), + viewup=(0,1,0), + is_focus_relative=True): import numpy as np - if not abs_focus: - focal_point = np.array( - (rel_focus[0]*(bounds[1]+bounds[0]), - rel_focus[1]*(bounds[3]+bounds[2]), - rel_focus[2]*(bounds[5]+bounds[4]))) - else: - focal_point = np.array(abs_focus) - viewvec = np.array(viewvec) - viewup = np.array(viewup) - if dist is None: - pl.set_focus(tuple(focal_point)) - pl.view_vector(tuple(-viewvec),tuple(viewup)) - else: - position = focal_point-viewvec/np.linalg.norm(viewvec)*dist - # https://github.com/pyvista/pyvista-support/issues/40 - pl.camera_position = ( - tuple(position), - tuple(focal_point), - tuple(viewup)) - if parallel_projection: - pl.enable_parallel_projection() - else: - pl.disable_parallel_projection() + focal_point = get_focal_point(bounds,focus,is_focus_relative) + pl.view_vector(-np.array(viewvec),viewup) + pl.set_focus(focal_point) + pl.reset_camera_clipping_range() return +def camera_from_distance(pl,bounds,viewvec,dist, + focus=(0.5,0.5,0.5), + viewup=(0,1,0), + zoom=1.0, + is_focus_relative=True): + import numpy as np + focal_point = get_focal_point(bounds,focus,is_focus_relative) + position = focal_point-viewvec/np.linalg.norm(viewvec)*dist + return camera_from_position(pl, + bounds,viewvec,position, + focus=focal_point, + viewup=viewup, + zoom=zoom, + is_focus_relative=False) + +def camera_from_position(pl,bounds,viewvec,position, + focus=(0.5,0.5,0.5), + viewup=(0,1,0), + zoom=1.0, + is_focus_relative=True): + focal_point = get_focal_point(bounds,focus,is_focus_relative) + pl.set_focus(focal_point) + pl.set_position(position) + pl.set_viewup(viewup) + pl.camera.zoom(zoom) + pl.reset_camera_clipping_range() + return + +def get_focal_point(bounds,focus,is_focus_relative=True): + import numpy as np + if is_focus_relative: + focal_point = np.array( + (focus[0]*(bounds[1]+bounds[0]), + focus[1]*(bounds[3]+bounds[2]), + focus[2]*(bounds[5]+bounds[4]))) + else: + focal_point = np.array(focus) + return focal_point + def chunk_to_pvmesh(chunk,gridg): import pyvista mesh = pyvista.UniformGrid()