Pencil2D Animation
Download Community News Docs Contribute
  • Overview
  • Articles
  • Code
  •  
  • Class List
  • Class Index
  • Class Hierarchy
  • Class Members
  • File List
Loading...
Searching...
No Matches
  • core_lib
  • src
  • structure
camera.cpp
1/*
2
3Pencil2D - Traditional Animation Software
4Copyright (C) 2012-2020 Matthew Chiawen Chang
5
6This program is free software; you can redistribute it and/or
7modify it under the terms of the GNU General Public License
8as published by the Free Software Foundation; version 2 of the License.
9
10This program is distributed in the hope that it will be useful,
11but WITHOUT ANY WARRANTY; without even the implied warranty of
12MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13GNU General Public License for more details.
14
15*/
16
17#include "camera.h"
18
19Camera::Camera()
20{
21}
22
23Camera::Camera(QPointF translation, qreal rotation, qreal scaling)
24{
25 Q_ASSERT(scaling > 0);
26 mTranslate = translation;
27 mRotate = rotation;
28 mScale = scaling;
29 updateViewTransform();
30}
31
32Camera::Camera(QPointF translation, qreal rotation, qreal scaling, CameraEasingType type)
33{
34 mEasingType = type;
35 Camera(translation, rotation, scaling);
36}
37
38Camera::Camera(const Camera& c2) : KeyFrame(c2)
39{
40 mTranslate = c2.mTranslate;
41 mRotate = c2.mRotate;
42 mScale = c2.mScale;
43 mPathControlPoint = c2.mPathControlPoint;
44 mEasingType = c2.mEasingType;
45 mNeedUpdateView = true;
46}
47
48Camera::~Camera()
49{
50}
51
52Camera* Camera::clone() const
53{
54 return new Camera(*this);
55}
56
57void Camera::assign(const Camera& rhs)
58{
59 mTranslate = rhs.mTranslate;
60 mRotate = rhs.mRotate;
61 mScale = rhs.mScale;
62 mPathControlPoint = rhs.mPathControlPoint;
63 mEasingType = rhs.mEasingType;
64
65 mNeedUpdateView = true;
66 updateViewTransform();
67 modification();
68}
69
70QTransform Camera::getView()
71{
72 if (mNeedUpdateView)
73 updateViewTransform();
74 return mView;
75}
76
77void Camera::resetTransform()
78{
79 mTranslate = QPointF(0, 0);
80 mRotate = 0.;
81 mScale = 1.;
82 mNeedUpdateView = true;
83 modification();
84}
85
86void Camera::updateViewTransform()
87{
88 if (mNeedUpdateView)
89 {
90 QTransform t;
91 t.translate(mTranslate.x(), mTranslate.y());
92
93 QTransform r;
94 r.rotate(mRotate);
95
96 QTransform s;
97 s.scale(mScale, mScale);
98
99 mView = t * r * s;
100 }
101 mNeedUpdateView = false;
102}
103
104void Camera::translate(qreal dx, qreal dy)
105{
106 mTranslate.setX(dx);
107 mTranslate.setY(dy);
108
109 mNeedUpdateView = true;
110 modification();
111}
112
113void Camera::translate(const QPointF pt)
114{
115 translate(pt.x(), pt.y());
116}
117
118void Camera::rotate(qreal degree)
119{
120 mRotate = degree;
121 if (mRotate > 360)
122 {
123 mRotate = mRotate - 360;
124 }
125 else if (mRotate < 0)
126 {
127 mRotate = mRotate + 360;
128 }
129 mRotate = degree;
130
131 mNeedUpdateView = true;
132 modification();
133}
134
135void Camera::scale(qreal scaleValue)
136{
137 mScale = scaleValue;
138
139 mNeedUpdateView = true;
140 modification();
141}
142
143void Camera::setEasingType(CameraEasingType type)
144{
145 mEasingType = type;
146 modification();
147}
148
149void Camera::setPathControlPoint(QPointF point)
150{
151 mPathControlPoint = point;
152 modification();
153}
154
155void Camera::setPathControlPointMoved(bool moved)
156{
157 mPathControlPointMoved = moved;
158 modification();
159}
160
161bool Camera::compare(const Camera& rhs) const
162{
163 return ((mTranslate == rhs.mTranslate)
164 && qFuzzyCompare(mRotate, rhs.mRotate)
165 && qFuzzyCompare(mScale, rhs.mScale));
166}
Camera
Definition: camera.h:25
KeyFrame
Definition: keyframe.h:30
QPointF
QPointF::setX
void setX(qreal x)
QPointF::setY
void setY(qreal y)
QPointF::x
qreal x() const const
QPointF::y
qreal y() const const
QTransform
QTransform::rotate
QTransform & rotate(qreal angle, Qt::Axis axis)
QTransform::scale
QTransform & scale(qreal sx, qreal sy)
QTransform::translate
QTransform & translate(qreal dx, qreal dy)
Generated on Thu May 8 2025 04:47:53 for Pencil2D by doxygen 1.9.6 based on revision 4513250b1d5b1a3676ec0e67b06b7a885ceaae39