Easy3D 2.5.3
manipulated_frame.h
1/********************************************************************
2 * Copyright (C) 2015 Liangliang Nan <liangliang.nan@gmail.com>
3 * https://3d.bk.tudelft.nl/liangliang/
4 *
5 * This file is part of Easy3D. If it is useful in your research/work,
6 * I would be grateful if you show your appreciation by citing it:
7 * ------------------------------------------------------------------
8 * Liangliang Nan.
9 * Easy3D: a lightweight, easy-to-use, and efficient C++ library
10 * for processing and rendering 3D data.
11 * Journal of Open Source Software, 6(64), 3255, 2021.
12 * ------------------------------------------------------------------
13 *
14 * Easy3D is free software; you can redistribute it and/or modify
15 * it under the terms of the GNU General Public License Version 3
16 * as published by the Free Software Foundation.
17 *
18 * Easy3D is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU General Public License for more details.
22 *
23 * You should have received a copy of the GNU General Public License
24 * along with this program. If not, see <http://www.gnu.org/licenses/>.
25 ********************************************************************/
26
39#ifndef EASY3D_RENDERER_MANIPULATED_FRAME_H
40#define EASY3D_RENDERER_MANIPULATED_FRAME_H
41
42#include <easy3d/renderer/frame.h>
43
44
45namespace easy3d {
46
47
109 class ManipulatedFrame : public Frame
110 {
111 public:
114 ~ManipulatedFrame() override = default;
115
118
119
122 public:
124 void setRotationSensitivity(float sensitivity) {
125 rotationSensitivity_ = sensitivity;
126 }
128 void setTranslationSensitivity(float sensitivity) {
129 translationSensitivity_ = sensitivity;
130 }
132 void setWheelSensitivity(float sensitivity) {
133 wheelSensitivity_ = sensitivity;
134 }
136 void setZoomSensitivity(float sensitivity) { zoomSensitivity_ = sensitivity; }
137
138 public:
148 float rotationSensitivity() const { return rotationSensitivity_; }
170 float translationSensitivity() const { return translationSensitivity_; }
171
179 float zoomSensitivity() const { return zoomSensitivity_; }
188 float wheelSensitivity() const { return wheelSensitivity_; }
190
193 public:
196 virtual void action_start();
199 virtual void action_end();
200
201 enum ScreenAxis { NONE, HORIZONTAL, VERTICAL, ORTHOGONAL };
202 virtual void action_rotate(int mouse_x, int mouse_y, int mouse_dx, int mouse_dy, Camera* camera, ScreenAxis axis);
203 virtual void action_translate(int mouse_x, int mouse_y, int mouse_dx, int mouse_dy, Camera* camera, ScreenAxis axis);
204 virtual void action_zoom(int dy_wheel, Camera* camera);
205 // @}
206
207#ifndef DOXYGEN
208 protected:
211 quat deformedBallQuaternion(int x, int y, int pre_x, int pre_y, float cx, float cy, int w, int h) const;
212
213 Constraint *previousConstraint_; // When manipulation is without constraint.
214
216 float wheelDelta(int wheel_dy) const;
217
218#endif // DOXYGEN
219
220 private:
221 // Sensitivity
222 float rotationSensitivity_;
223 float translationSensitivity_;
224 float wheelSensitivity_;
225 float zoomSensitivity_;
226
227 private:
228 friend class Viewer;
229 };
230
231}
232
233
234#endif // EASY3D_RENDERER_MANIPULATED_FRAME_H
The Frame class represents a coordinate system, defined by a position and an orientation.
Definition: frame.h:152
A Frame that can be rotated and translated using the mouse.
Definition: manipulated_frame.h:110
float zoomSensitivity() const
Definition: manipulated_frame.h:179
ManipulatedFrame()
Definition: manipulated_frame.cpp:54
void setRotationSensitivity(float sensitivity)
Definition: manipulated_frame.h:124
float wheelSensitivity() const
Definition: manipulated_frame.h:188
void setZoomSensitivity(float sensitivity)
Definition: manipulated_frame.h:136
virtual void action_end()
Definition: manipulated_frame.cpp:99
virtual void action_start()
Definition: manipulated_frame.cpp:95
float translationSensitivity() const
Definition: manipulated_frame.h:170
void setTranslationSensitivity(float sensitivity)
Definition: manipulated_frame.h:128
virtual void action_rotate(int mouse_x, int mouse_y, int mouse_dx, int mouse_dy, Camera *camera, ScreenAxis axis)
Definition: manipulated_frame.cpp:113
ManipulatedFrame & operator=(const ManipulatedFrame &mf)
Definition: manipulated_frame.cpp:66
float rotationSensitivity() const
Definition: manipulated_frame.h:148
~ManipulatedFrame() override=default
void setWheelSensitivity(float sensitivity)
Definition: manipulated_frame.h:132
Definition: collider.cpp:182
Quat< float > quat
A quaternion of float type.
Definition: types.h:86