Swiftray  1.0
transformable-context.h
Go to the documentation of this file.
1 #include <parser/svgpp-common.h>
2 
3 #include <boost/math/constants/constants.hpp>
4 #include <boost/numeric/ublas/assignment.hpp>
5 #include <boost/numeric/ublas/io.hpp>
6 #include <boost/numeric/ublas/matrix.hpp>
7 
8 #include <QDebug>
9 
10 #pragma once
11 
12 namespace Parser {
13 
14 namespace ublas = boost::numeric::ublas;
15 typedef ublas::matrix<double> matrix_t;
16 
18 public:
19  QPointF getTransformedPos(double x, double y) {
20  // Disable this
21  return QPointF(x, y);
22  matrix_t m = ublas::identity_matrix<double>(3, 1);
23  m <<= x, y, 1;
24  matrix_t npos = ublas::prod(transform_, m);
25  return QPointF(npos(0, 0), npos(1, 0));
26  }
27 
28  QTransform qtransform() {
29  return QTransform(transform_(0, 0), transform_(1, 0), transform_(2, 0), transform_(0, 1), transform_(1, 1),
30  transform_(2, 1), transform_(0, 2), transform_(1, 2), transform_(2, 2));
31  }
32 
33  void transform_matrix(const boost::array<double, 6> &matrix) {
34  matrix_t m(3, 3);
35  m <<= matrix[0], matrix[2], matrix[4], matrix[1], matrix[3], matrix[5], 0,
36  0, 1;
37  // TODO(warn: the logic here means transforms will be joined by svgpp, but it is not guaranteed by the library)
38  transform_ = m; // should be "ublas::prod(transform_, m);"
39  }
40 
41  void transform_translate(double tx, double ty) {
42  matrix_t m = ublas::identity_matrix<double>(3, 3);
43  m(0, 2) = tx;
44  m(1, 2) = ty;
45  transform_ = ublas::prod(transform_, m);
46  qInfo() << "Transform translate";
47  }
48 
49  void transform_translate(double tx) {
50  transform_translate(tx, tx);
51  qInfo() << "Transform translate";
52  }
53 
54  void transform_scale(double sx, double sy) {
55  matrix_t m = ublas::identity_matrix<double>(3, 3);
56  m(0, 0) = sx;
57  m(1, 1) = sy;
58  transform_ = ublas::prod(transform_, m);
59  // qInfo() << "Transform scale";
60  }
61 
62  void transform_scale(double scale) {
63  transform_scale(scale, scale);
64  // qInfo() << "Transform scale";
65  }
66 
67  void transform_rotate(double angle) {
68  angle *= boost::math::constants::degree<double>();
69  matrix_t m(3, 3);
70  m <<= std::cos(angle), -std::sin(angle), 0, std::sin(angle),
71  std::cos(angle), 0, 0, 0, 1;
72  transform_ = ublas::prod(transform_, m);
73  qInfo() << "Transform rotate";
74  }
75 
76  matrix_t &transform() { return transform_; }
77 
78  matrix_t const &transform() const { return transform_; }
79 
81 };
82 
83 }
Definition: transformable-context.h:17
void transform_translate(double tx, double ty)
Definition: transformable-context.h:41
void transform_rotate(double angle)
Definition: transformable-context.h:67
QTransform qtransform()
Definition: transformable-context.h:28
void transform_scale(double scale)
Definition: transformable-context.h:62
void transform_scale(double sx, double sy)
Definition: transformable-context.h:54
void transform_matrix(const boost::array< double, 6 > &matrix)
Definition: transformable-context.h:33
matrix_t transform_
Definition: transformable-context.h:80
QPointF getTransformedPos(double x, double y)
Definition: transformable-context.h:19
matrix_t const & transform() const
Definition: transformable-context.h:78
void transform_translate(double tx)
Definition: transformable-context.h:49
matrix_t & transform()
Definition: transformable-context.h:76
Definition: base-context.h:8
ublas::matrix< double > matrix_t
Definition: shape-context.h:16