3 #include <cgv/math/fvec.h>
4 #include <cgv/math/fmat.h>
5 #include <cgv/defines/deprecated.h>
38 double y_extent_at_focus;
47 const dvec3& get_focus()
const;
49 virtual void set_focus(
const dvec3& foc);
50 void set_focus(
const vec3& foc) { set_focus(
dvec3(foc)); }
52 void set_focus(
double x,
double y,
double z);
57 const dvec3& get_view_dir()
const;
59 virtual void set_view_dir(
const dvec3& vd);
60 void set_view_dir(
const vec3& vd) { set_view_dir(dvec3(vd)); }
62 void set_view_dir(
double x,
double y,
double z);
64 dvec3& ref_view_dir();
67 const dvec3& get_view_up_dir()
const;
69 virtual void set_view_up_dir(
const dvec3& vud);
70 void set_view_up_dir(
const vec3& vud) { set_view_up_dir(dvec3(vud)); }
72 void set_view_up_dir(
double x,
double y,
double z);
74 dvec3& ref_view_up_dir();
76 double& ref_y_extent_at_focus();
79 double get_y_view_angle()
const;
81 virtual void set_y_view_angle(
double angle);
83 double get_y_extent_at_focus()
const;
85 virtual void set_y_extent_at_focus(
double ext);
87 double& ref_y_view_angle();
92 double get_tan_of_half_of_fovy(
bool ensure_non_zero)
const;
95 double get_y_extent_at_depth(
double depth,
bool ensure_non_zero)
const;
97 double get_depth_of_focus()
const;
101 void put_coordinate_system(dvec3& x, dvec3& y, dvec3& z)
const;
102 void put_coordinate_system(vec3& x, vec3& y, vec3& z)
const;
105 int compute_axis_and_angle(
const dvec3& target_view_dir,
const dvec3& target_view_up_dir, dvec3& axis,
double& angle);
107 bool is_parallel()
const;
111 const dvec3 get_eye()
const;
116 bool set_eye_keep_extent(
const dvec3& eye);
121 bool set_eye_keep_view_angle(
const dvec3& eye);
123 void view_look_at_keep_view_angle(
const dvec3& eye,
const dvec3& foc,
const dvec3& vud);
125 void view_look_at_keep_extent(
const dvec3& eye,
const dvec3& foc,
const dvec3& vud);
130 void roll(
double angle);
138 void rotate(
double axis_direction_x,
double axis_direction_y,
double axis_point_depth);
140 void move(
double step);
142 void pan(
double step_x,
double step_y);
144 void zoom(
double factor);
149 virtual void enable_viewport_splitting(
unsigned nr_cols,
unsigned nr_rows);
152 virtual bool is_viewport_splitting_enabled(
unsigned* nr_cols_ptr = 0,
unsigned* nr_rows_ptr = 0)
const;
154 virtual void disable_viewport_splitting();
156 virtual void activate_split_viewport(context& ctx,
unsigned col_index,
unsigned row_index);
158 virtual void deactivate_split_viewport(context& ctx);
160 virtual void enable_viewport_individual_view(
unsigned col_index,
unsigned row_index,
bool enable =
true);
162 virtual bool does_viewport_use_individual_view(
unsigned col_index,
unsigned row_index)
const;
164 virtual view& ref_viewport_view(
unsigned col_index,
unsigned row_index);
182 virtual int get_modelview_projection_window_matrices(
int x,
int y,
int width,
int height,
183 const dmat4** MPW_pptr,
184 const dmat4** MPW_other_pptr = 0,
int* x_other_ptr = 0,
int* y_other_ptr = 0,
185 int* vp_col_idx_ptr = 0,
int* vp_row_idx_ptr = 0,
186 int* vp_width_ptr = 0,
int *vp_height_ptr = 0,
187 int* vp_center_x_ptr = 0,
int* vp_center_y_ptr = 0,
188 int* vp_center_x_other_ptr = 0,
int* vp_center_y_other_ptr = 0)
const;
190 DEPRECATED(
"deprecated, use get_modelview_projection_window_matrices() instead.") virtual
int get_modelview_projection_device_matrices(
int x,
int y,
int width,
int height,
191 const dmat4** MVPD_pptr,
192 const dmat4** MVPD_other_pptr = 0,
int* x_other_ptr = 0,
int* y_other_ptr = 0,
193 int* vp_col_idx_ptr = 0,
int* vp_row_idx_ptr = 0,
194 int* vp_width_ptr = 0,
int *vp_height_ptr = 0,
195 int* vp_center_x_ptr = 0,
int* vp_center_y_ptr = 0,
196 int* vp_center_x_other_ptr = 0,
int* vp_center_y_other_ptr = 0)
const {
197 return get_modelview_projection_window_matrices(x,y,width,height,MVPD_pptr,MVPD_other_pptr,
198 x_other_ptr,y_other_ptr,vp_col_idx_ptr, vp_row_idx_ptr, vp_width_ptr, vp_height_ptr,
199 vp_center_x_ptr, vp_center_y_ptr, vp_center_x_other_ptr, vp_center_y_other_ptr);
204 virtual double get_z_and_unproject(context& ctx,
int x,
int y, dvec3& p);
205 double get_z_and_unproject(context& ctx,
int x,
int y, vec3& p);
207 void compute_screen_rectangle(std::vector<dvec3>& rect,
double depth,
double aspect)
const;
208 void compute_screen_rectangle(std::vector<vec3>& rect,
double depth,
double aspect)
const;
215 #include <cgv/config/lib_end.h>