fixed camera setting functions

This commit is contained in:
Michael Krayer 2021-07-28 12:40:03 +02:00
parent 5466f67c1c
commit 352b3ae860
1 changed files with 47 additions and 25 deletions

72
visu.py
View File

@ -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()