synfig-studio  1.0.3
ducktransform_matrix.h
Go to the documentation of this file.
1 /* === S Y N F I G ========================================================= */
21 /* ========================================================================= */
22 
23 /* === S T A R T =========================================================== */
24 
25 #ifndef __SYNFIG_STUDIO_DUCK_TRANSFORM_MATRIX_H
26 #define __SYNFIG_STUDIO_DUCK_TRANSFORM_MATRIX_H
27 
28 /* === H E A D E R S ======================================================= */
29 
30 #include "duckmatic.h"
31 #include <synfig/matrix.h>
32 
33 /* === M A C R O S ========================================================= */
34 
35 /* === T Y P E D E F S ===================================================== */
36 
37 /* === C L A S S E S & S T R U C T S ======================================= */
38 
39 namespace studio {
40 
41 class Transform_Matrix : public synfig::Transform
42 {
43 private:
44  synfig::Matrix transform;
45  synfig::Matrix inverse_transform;
46 
47 public:
48  Transform_Matrix(const synfig::GUID& guid, const synfig::Matrix& matrix):
49  Transform(guid),
50  transform(matrix)
51  {
52  if (transform.is_invertible())
53  (inverse_transform = transform).invert();
54  else
55  synfig::warning("%s:%d passed a non-invertible matrix", __FILE__, __LINE__);
56  }
57 
58  synfig::Vector perform(const synfig::Vector& x)const
59  {
60  return transform.get_transformed(x);
61  }
62  synfig::Vector unperform(const synfig::Vector& x)const
63  {
64  return inverse_transform.get_transformed(x);
65  }
66 
67  synfig::String get_string()const
68  {
69  return "duck matrix";
70  }
71 };
72 
73 };
74 
75 /* === E N D =============================================================== */
76 
77 #endif