Line data Source code
1 : /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 : /* libmspub
3 : * Version: MPL 1.1 / GPLv2+ / LGPLv2+
4 : *
5 : * The contents of this file are subject to the Mozilla Public License Version
6 : * 1.1 (the "License"); you may not use this file except in compliance with
7 : * the License or as specified alternatively below. You may obtain a copy of
8 : * the License at http://www.mozilla.org/MPL/
9 : *
10 : * Software distributed under the License is distributed on an "AS IS" basis,
11 : * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
12 : * for the specific language governing rights and limitations under the
13 : * License.
14 : *
15 : * Major Contributor(s):
16 : * Copyright (C) 2012 Brennan Vincent <brennanv@email.arizona.edu>
17 : *
18 : * All Rights Reserved.
19 : *
20 : * For minor contributions see the git repository.
21 : *
22 : * Alternatively, the contents of this file may be used under the terms of
23 : * either the GNU General Public License Version 2 or later (the "GPLv2+"), or
24 : * the GNU Lesser General Public License Version 2 or later (the "LGPLv2+"),
25 : * in which case the provisions of the GPLv2+ or the LGPLv2+ are applicable
26 : * instead of those above.
27 : */
28 :
29 : #ifndef __VECTORTRANSFORMATION2D_H__
30 : #define __VECTORTRANSFORMATION2D_H__
31 :
32 : namespace libmspub
33 : {
34 : struct Vector2D
35 : {
36 : double m_x;
37 : double m_y;
38 0 : Vector2D(double x, double y) : m_x(x), m_y(y)
39 : {
40 0 : }
41 : };
42 : Vector2D operator+(const Vector2D &l, const Vector2D &r);
43 : Vector2D operator-(const Vector2D &l, const Vector2D &r);
44 : class VectorTransformation2D
45 : {
46 : double m_m11, m_m12, m_m21, m_m22;
47 : double m_x, m_y;
48 : public:
49 : VectorTransformation2D();
50 : Vector2D transform(Vector2D original) const;
51 : Vector2D transformWithOrigin(Vector2D v, Vector2D origin) const;
52 : double getRotation() const;
53 : double getHorizontalScaling() const;
54 : double getVerticalScaling() const;
55 : bool orientationReversing() const;
56 : friend VectorTransformation2D operator*(const VectorTransformation2D &l, const VectorTransformation2D &r);
57 : static VectorTransformation2D fromFlips(bool flipH, bool flipV);
58 : static VectorTransformation2D fromTranslate(double x, double y);
59 : static VectorTransformation2D fromCounterRadians(double theta);
60 : };
61 : VectorTransformation2D operator*(const VectorTransformation2D &l, const VectorTransformation2D &r);
62 : } // namespace libmspub
63 :
64 : #endif /* __VECTORTRANSFORMATION2D_H__ */
65 : /* vim:set shiftwidth=2 softtabstop=2 expandtab: */
|