ICF 3.1.1.10
Technical documentation of ICF Libraries
CAffine2d.h
Go to the documentation of this file.
1/********************************************************************************
2** This file is part of the ICF Framework. Copyright (C) Witold Gantzke & Kirill Lepskiy
3** ICF Framework may be used under the terms of the LGPL License v. 2.1 by the Free Software Foundation.
4********************************************************************************/
5
6#pragma once
7
8
9// ICF includes
10#include <i2d/CVector2d.h>
11#include <i2d/CMatrix2d.h>
12
13
14namespace i2d
15{
16
17
22{
23public:
27 CAffine2d();
28
32 CAffine2d(const CAffine2d& transform);
33
37 explicit CAffine2d(const CMatrix2d& deform, const CVector2d& translation = CVector2d(0.0, 0.0));
38
42 explicit CAffine2d(const CVector2d& translation);
43
47 const CVector2d& GetTranslation() const;
48
52 void SetTranslation(const CVector2d& translation);
53
57 const CMatrix2d& GetDeformMatrix() const;
58
64
69
73 void SetDeformMatrix(const CMatrix2d& deform);
74
75 // internal access operations
76
81
86
87 // init operations
88
92 void Reset();
93
97 void Reset(const CVector2d& translation);
98
106 void Reset(const CVector2d& translation, double angle, double scale = 1.0, bool isPosDef = true);
107
115 void Reset(const CVector2d& translation, double angle, const CVector2d& scale, bool isPosDef = true);
116
120 CVector2d GetApply(const CVector2d& position) const;
121
125 void GetApply(const CVector2d& position, CVector2d& result) const;
126
131 CVector2d GetApplyToDelta(const CVector2d& delta) const;
132
137 void GetApplyToDelta(const CVector2d& delta, CVector2d& result) const;
138
144 CAffine2d GetApply(const CAffine2d& transform) const;
145
151 void GetApply(const CAffine2d& transform, CAffine2d& result) const;
152
157 void Apply(const CAffine2d& transform);
158
163 void ApplyLeft(const CAffine2d& transform);
164
168 CVector2d GetInvertedApply(const CVector2d& position) const;
169
173 bool GetInvertedApply(const CVector2d& position, CVector2d& result) const;
174
178 CAffine2d GetTranslated(const CVector2d& delta) const;
179
183 void GetTranslated(const CVector2d& delta, CAffine2d& result) const;
184
188 void Translate(const CVector2d& delta);
189
193 CAffine2d GetInverted() const;
194
198 bool GetInverted(CAffine2d& result) const;
199
203 bool Serialize(iser::IArchive& archive);
204
205 // operators
206 bool operator==(const CAffine2d& transform) const;
207 bool operator!=(const CAffine2d& transform) const;
208 CAffine2d& operator=(const CAffine2d& transform);
209
210 // static methods
211 static const CAffine2d& GetIdentity();
212
213private:
214 CVector2d m_translation;
215 CMatrix2d m_deformMatrix;
216
217 // static members
218 static CAffine2d s_identity;
219};
220
221
222// inline methods
223
225: m_translation(0.0, 0.0),
226 m_deformMatrix(CMatrix2d::GetIdentity())
227{
228}
229
230
231inline CAffine2d::CAffine2d(const CAffine2d& transform)
232: m_translation(transform.m_translation),
233 m_deformMatrix(transform.m_deformMatrix)
234{
235}
236
237
238// access to members
239
241{
242 return m_translation;
243}
244
245
246inline void CAffine2d::SetTranslation(const CVector2d& translation)
247{
248 m_translation = translation;
249}
250
251
253{
254 return m_deformMatrix;
255}
256
257
258inline void CAffine2d::SetDeformMatrix(const CMatrix2d& deform)
259{
260 m_deformMatrix = deform;
261}
262
263
264// internal access operations
265
267{
268 return m_translation;
269}
270
271
273{
274 return m_deformMatrix;
275}
276
277
278// operations
279
280inline CVector2d CAffine2d::GetApply(const CVector2d& position) const
281{
282 CVector2d result;
283 m_deformMatrix.GetMultiplied(position, result);
284
285 return result + m_translation;
286}
287
288
289inline void CAffine2d::GetApply(const CVector2d& position, CVector2d& result) const
290{
291 m_deformMatrix.GetMultiplied(position, result);
292 result += m_translation;
293}
294
295
297{
298 CVector2d retVal;
299
300 m_deformMatrix.GetMultiplied(delta, retVal);
301
302 return retVal;
303}
304
305
306inline void CAffine2d::GetApplyToDelta(const CVector2d& delta, CVector2d& result) const
307{
308 m_deformMatrix.GetMultiplied(delta, result);
309}
310
311
313{
314 return CAffine2d(m_deformMatrix, m_translation + vector);
315}
316
317
318inline void CAffine2d::GetTranslated(const CVector2d& vector, CAffine2d& result) const
319{
320 result.GetDeformMatrixRef() = m_deformMatrix;
321 result.GetTranslationRef() = m_translation + vector;
322}
323
324
325inline void CAffine2d::Translate(const CVector2d& vector)
326{
327 m_translation += vector;
328}
329
330
332{
333 CVector2d result;
334
335 GetInvertedApply(position, result);
336
337 return result;
338}
339
340
342{
343 CAffine2d result;
344
345 GetInverted(result);
346
347 return result;
348}
349
350
351// operators
352
353inline bool CAffine2d::operator==(const CAffine2d& transform) const
354{
355 return (m_translation == transform.m_translation) && (m_deformMatrix == transform.m_deformMatrix);
356}
357
358
359inline bool CAffine2d::operator!=(const CAffine2d& transform) const
360{
361 return (m_translation != transform.m_translation) || (m_deformMatrix != transform.m_deformMatrix);
362}
363
364
365// static methods
366
368{
369 return s_identity;
370}
371
372
373} // namespace i2d
374
375
This class defines an affine 2D-transformation.
Definition CAffine2d.h:22
const CVector2d & GetTranslation() const
Get translation part of this affine transformation.
Definition CAffine2d.h:240
CVector2d & GetTranslationRef()
Get internal reference to the translation vector.
Definition CAffine2d.h:266
CAffine2d & operator=(const CAffine2d &transform)
void Reset()
Set to identity transformation.
void ApplyLeft(const CAffine2d &transform)
Combine this transformation with another transformation on the left side.
CAffine2d GetTranslated(const CVector2d &delta) const
Get some transformation combined with translation.
Definition CAffine2d.h:312
bool operator!=(const CAffine2d &transform) const
Definition CAffine2d.h:359
void SetDeformMatrix(const CMatrix2d &deform)
Set rotation, skew and scale part of this affine transformation.
Definition CAffine2d.h:258
const CMatrix2d & GetDeformMatrix() const
Get rotation, skew and scale part of this affine transformation.
Definition CAffine2d.h:252
CVector2d GetScaleVector() const
Get scale vector of this affine transformation (right-hand side matrix-vector multiplication assumed,...
bool operator==(const CAffine2d &transform) const
Definition CAffine2d.h:353
bool GetInvertedApply(const CVector2d &position, CVector2d &result) const
Inverted operation to GetApply().
void Reset(const CVector2d &translation, double angle, const CVector2d &scale, bool isPosDef=true)
Set this transformation to a given translation, rotation and both axis scaling.
void Reset(const CVector2d &translation, double angle, double scale=1.0, bool isPosDef=true)
Set this transformation to a given translation, rotation and scaling.
CVector2d GetApplyToDelta(const CVector2d &delta) const
Get difference vector after this transformation.
Definition CAffine2d.h:296
CMatrix2d GetRotationMatrix() const
Get rotational part of this affine transformation.
void Reset(const CVector2d &translation)
Set this transformation to translation.
CVector2d GetApply(const CVector2d &position) const
Calculate transformed position.
Definition CAffine2d.h:280
CAffine2d()
Constructor, parameters will be not initialized.
Definition CAffine2d.h:224
void GetApply(const CAffine2d &transform, CAffine2d &result) const
Get combined transformation.
void Apply(const CAffine2d &transform)
Combine this transformation with another transformation.
static const CAffine2d & GetIdentity()
Definition CAffine2d.h:367
CAffine2d(const CMatrix2d &deform, const CVector2d &translation=CVector2d(0.0, 0.0))
Constructs a transform using specified deformation matrix and translation.
bool Serialize(iser::IArchive &archive)
Serialize transformation parameters into/from archive.
CAffine2d GetInverted() const
Get inverted transformation.
Definition CAffine2d.h:341
void Translate(const CVector2d &delta)
Combine this transformation with translation.
Definition CAffine2d.h:325
bool GetInverted(CAffine2d &result) const
Get inverted transformation.
void SetTranslation(const CVector2d &translation)
Set translation part of this affine transformation.
Definition CAffine2d.h:246
CMatrix2d & GetDeformMatrixRef()
Get internal reference to the transformation matrix.
Definition CAffine2d.h:272
CAffine2d GetApply(const CAffine2d &transform) const
Get combined transformation.
CVector2d GetInvertedApply(const CVector2d &position) const
Inverted operation to GetApply().
Definition CAffine2d.h:331
CAffine2d(const CVector2d &translation)
Constructs a transform with translation only.
2D matrix.
Definition CMatrix2d.h:23
CVector2d GetMultiplied(const CVector2d &position) const
Definition CMatrix2d.h:187
Definition of position or mathematical vector on 2D plane.
Definition CVector2d.h:29
Represent input/output persistence archive.
Definition IArchive.h:34
Contains the 2D objects.
Definition CAffine2d.h:15

© Witold Gantzke and Kirill Lepskiy