Easy3D 2.5.3
constraint.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_CONSTRAINT_H
40#define EASY3D_RENDERER_CONSTRAINT_H
41
42#include <easy3d/core/types.h>
43
44
45namespace easy3d {
46
47
48 class Frame;
49 class Camera;
50
140 {
141 public:
143 virtual ~Constraint() = default;
144
157 virtual void constrainTranslation(vec3 &translation, Frame *const frame) {
158 (void)translation;
159 (void)frame;
160 }
169 virtual void constrainRotation(quat &rotation, Frame *const frame) {
170 (void)(rotation);
171 (void)(frame);
172 }
173 };
174
202 public:
205 ~AxisPlaneConstraint() override = default;
206
243 enum Type { FREE, AXIS, PLANE, FORBIDDEN };
244
248 void constrainTranslation(vec3 &translation, Frame *const frame) override {
249 (void)(translation);
250 (void)(frame);
251 }
252
253 void setTranslationConstraint(Type type, const vec3 &direction);
257 translationConstraintType_ = type;
258 };
259 void setTranslationConstraintDirection(const vec3 &direction);
260
271 Type translationConstraintType() const { return translationConstraintType_; };
284 return translationConstraintDir_;
285 };
287
291 void constrainRotation(quat &rotation, Frame *const frame) override {
292 (void)(rotation);
293 (void)(frame);
294 }
295
296 void setRotationConstraint(Type type, const vec3 &direction);
298 void setRotationConstraintDirection(const vec3 &direction);
299
301 Type rotationConstraintType() const { return rotationConstraintType_; };
311 vec3 rotationConstraintDirection() const { return rotationConstraintDir_; };
313
314 private:
315 // int and not Type to allow for overloading and new types definition.
316 Type translationConstraintType_;
317 Type rotationConstraintType_;
318
319 vec3 translationConstraintDir_;
320 vec3 rotationConstraintDir_;
321 };
322
332 public:
334 ~LocalConstraint() override = default;
335
336 void constrainTranslation(vec3 &translation, Frame *const frame) override;
337 void constrainRotation(quat &rotation, Frame *const frame) override;
338 };
339
350 public:
352 ~WorldConstraint() override = default;
353
354 void constrainTranslation(vec3 &translation, Frame *const frame) override;
355 void constrainRotation(quat &rotation, Frame *const frame) override;
356 };
357
368 public:
369 explicit CameraConstraint(const Camera *const camera);
371 ~CameraConstraint() override = default;
372
373 void constrainTranslation(vec3 &translation, Frame *const frame) override;
374 void constrainRotation(quat &rotation, Frame *const frame) override;
375
378 const Camera *camera() const { return camera_; };
379
380 private:
381 const Camera *const camera_;
382 };
383
384
385}
386
387#endif // EASY3D_RENDERER_CONSTRAINT_H
An abstract class for Frame Constraints defined by an axis or a plane.
Definition: constraint.h:201
void setTranslationConstraintType(Type type)
Definition: constraint.h:256
AxisPlaneConstraint()
Definition: constraint.cpp:72
~AxisPlaneConstraint() override=default
Type translationConstraintType() const
Definition: constraint.h:271
Type
Definition: constraint.h:243
void setRotationConstraintDirection(const vec3 &direction)
Definition: constraint.cpp:111
vec3 translationConstraintDirection() const
Definition: constraint.h:283
void constrainTranslation(vec3 &translation, Frame *const frame) override
Definition: constraint.h:248
void setRotationConstraintType(Type type)
Definition: constraint.cpp:138
void setRotationConstraint(Type type, const vec3 &direction)
Definition: constraint.cpp:103
void setTranslationConstraint(Type type, const vec3 &direction)
Definition: constraint.cpp:79
Type rotationConstraintType() const
Definition: constraint.h:301
void setTranslationConstraintDirection(const vec3 &direction)
Definition: constraint.cpp:86
void constrainRotation(quat &rotation, Frame *const frame) override
Definition: constraint.h:291
vec3 rotationConstraintDirection() const
Definition: constraint.h:311
An AxisPlaneConstraint defined in the camera coordinate system.
Definition: constraint.h:367
CameraConstraint(const Camera *const camera)
Definition: constraint.cpp:258
const Camera * camera() const
Definition: constraint.h:378
void constrainTranslation(vec3 &translation, Frame *const frame) override
Definition: constraint.cpp:264
~CameraConstraint() override=default
void constrainRotation(quat &rotation, Frame *const frame) override
Definition: constraint.cpp:291
A perspective or orthographic camera.
Definition: camera.h:116
An interface class for Frame constraints.
Definition: constraint.h:140
virtual void constrainTranslation(vec3 &translation, Frame *const frame)
Definition: constraint.h:157
virtual void constrainRotation(quat &rotation, Frame *const frame)
Definition: constraint.h:169
virtual ~Constraint()=default
The Frame class represents a coordinate system, defined by a position and an orientation.
Definition: frame.h:152
An AxisPlaneConstraint defined in the Frame local coordinate system.
Definition: constraint.h:331
~LocalConstraint() override=default
void constrainTranslation(vec3 &translation, Frame *const frame) override
Definition: constraint.cpp:155
void constrainRotation(quat &rotation, Frame *const frame) override
Definition: constraint.cpp:178
An AxisPlaneConstraint defined in the world coordinate system.
Definition: constraint.h:349
void constrainTranslation(vec3 &translation, Frame *const frame) override
Definition: constraint.cpp:202
~WorldConstraint() override=default
void constrainRotation(quat &rotation, Frame *const frame) override
Definition: constraint.cpp:233
Definition: collider.cpp:182