polyscope_rs/
camera_view.rs1use crate::{CameraParameters, CameraView, Vec3, with_context_mut};
31
32pub fn register_camera_view(name: impl Into<String>, params: CameraParameters) -> CameraViewHandle {
34 let name = name.into();
35 let camera_view = CameraView::new(name.clone(), params);
36
37 with_context_mut(|ctx| {
38 ctx.registry
39 .register(Box::new(camera_view))
40 .expect("failed to register camera view");
41 ctx.update_extents();
42 });
43
44 CameraViewHandle { name }
45}
46
47pub fn register_camera_view_look_at(
49 name: impl Into<String>,
50 position: Vec3,
51 target: Vec3,
52 up: Vec3,
53 fov_vertical_degrees: f32,
54 aspect_ratio: f32,
55) -> CameraViewHandle {
56 let params =
57 CameraParameters::look_at(position, target, up, fov_vertical_degrees, aspect_ratio);
58 register_camera_view(name, params)
59}
60
61impl_structure_accessors! {
62 get_fn = get_camera_view,
63 with_fn = with_camera_view,
64 with_ref_fn = with_camera_view_ref,
65 handle = CameraViewHandle,
66 type_name = "CameraView",
67 rust_type = CameraView,
68 doc_name = "camera view"
69}
70
71#[derive(Clone)]
73pub struct CameraViewHandle {
74 name: String,
75}
76
77impl CameraViewHandle {
78 #[must_use]
80 pub fn name(&self) -> &str {
81 &self.name
82 }
83
84 pub fn set_color(&self, color: Vec3) -> &Self {
86 with_camera_view(&self.name, |cv| {
87 cv.set_color(color);
88 });
89 self
90 }
91
92 pub fn set_widget_focal_length(&self, length: f32, is_relative: bool) -> &Self {
94 with_camera_view(&self.name, |cv| {
95 cv.set_widget_focal_length(length, is_relative);
96 });
97 self
98 }
99
100 pub fn set_widget_thickness(&self, thickness: f32) -> &Self {
102 with_camera_view(&self.name, |cv| {
103 cv.set_widget_thickness(thickness);
104 });
105 self
106 }
107
108 pub fn set_params(&self, params: CameraParameters) -> &Self {
110 with_camera_view(&self.name, |cv| {
111 cv.set_params(params);
112 });
113 self
114 }
115}