summaryrefslogtreecommitdiffstats
path: root/src/libnr/nr-matrix.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/libnr/nr-matrix.h')
-rw-r--r--src/libnr/nr-matrix.h313
1 files changed, 0 insertions, 313 deletions
diff --git a/src/libnr/nr-matrix.h b/src/libnr/nr-matrix.h
deleted file mode 100644
index 5d62dfafe..000000000
--- a/src/libnr/nr-matrix.h
+++ /dev/null
@@ -1,313 +0,0 @@
-#ifndef __NR_MATRIX_H__
-#define __NR_MATRIX_H__
-
-/** \file
- * Definition of NR::Matrix type.
- *
- * \note Operator functions (e.g. Matrix * Matrix etc.) are mostly in
- * libnr/nr-matrix-ops.h. See end of file for discussion.
- *
- * Main authors:
- * Lauris Kaplinski <lauris@kaplinski.com>:
- * Original NRMatrix definition and related macros.
- *
- * Nathan Hurst <njh@mail.csse.monash.edu.au>:
- * NR::Matrix class version of the above.
- *
- * This code is in public domain.
- */
-
-#include <glib.h> // g_assert()
-#include <glib/gmessages.h>
-
-#include "libnr/nr-coord.h"
-#include "libnr/nr-values.h"
-#include <libnr/nr-rotate.h>
-#include <libnr/nr-scale.h>
-#include <libnr/nr-translate.h>
-#include <2geom/affine.h>
-
-namespace NR {
-
-/**
- * The Matrix class.
- *
- * For purposes of multiplication, points should be thought of as row vectors
- *
- * p = ( p[X] p[Y] 1 )
- *
- * to be right-multiplied by transformation matrices
- * \verbatim
- c[] = | c[0] c[1] 0 |
- | c[2] c[3] 0 |
- | c[4] c[5] 1 | \endverbatim
- *
- * (so the columns of the matrix correspond to the columns (elements) of the result,
- * and the rows of the matrix correspond to columns (elements) of the "input").
- */
-class Matrix {
-
-
- public:
-
- /**
- * Various forms of constructor
- */
-
- /**
- *
- */
- explicit Matrix() { }
-
-
- /**
- *
- */
- Matrix(Matrix const &m) {
-
- NR::Coord const *src = m._c;
- NR::Coord *dest = _c;
-
- *dest++ = *src++; //0
- *dest++ = *src++; //1
- *dest++ = *src++; //2
- *dest++ = *src++; //3
- *dest++ = *src++; //4
- *dest = *src ; //5
-
- }
-
-
- Matrix(Geom::Affine const &m) {
- NR::Coord *dest = _c;
-
- *dest++ = m[0];
- *dest++ = m[1];
- *dest++ = m[2];
- *dest++ = m[3];
- *dest++ = m[4];
- *dest = m[5];
- }
-
- /**
- *
- */
- Matrix(double c0, double c1,
- double c2, double c3,
- double c4, double c5) {
-
- NR::Coord *dest = _c;
-
- *dest++ = c0; //0
- *dest++ = c1; //1
- *dest++ = c2; //2
- *dest++ = c3; //3
- *dest++ = c4; //4
- *dest = c5; //5
-
- }
-
-
-
- /**
- *
- */
- Matrix &operator=(Matrix const &m) {
-
- NR::Coord const *src = m._c;
- NR::Coord *dest = _c;
-
- *dest++ = *src++; //0
- *dest++ = *src++; //1
- *dest++ = *src++; //2
- *dest++ = *src++; //3
- *dest++ = *src++; //4
- *dest = *src ; //5
-
- return *this;
- }
-
-
-
-
- /**
- *
- */
- explicit Matrix(scale const &sm) {
-
- NR::Coord *dest = _c;
-
- *dest++ = sm[X]; //0
- *dest++ = 0.0; //1
- *dest++ = 0.0; //2
- *dest++ = sm[Y]; //3
- *dest++ = 0.0; //4
- *dest = 0.0; //5
-
- }
-
-
-
-
-
-
- /**
- *
- */
- explicit Matrix(rotate const &r) {
-
- NR::Coord *dest = _c;
-
- *dest++ = r.vec[X]; //0
- *dest++ = r.vec[Y]; //1
- *dest++ = -r.vec[Y]; //2
- *dest++ = r.vec[X]; //3
- *dest++ = 0.0; //4
- *dest = 0.0; //5
-
- }
-
-
-
-
- /**
- *
- */
- explicit Matrix(translate const &tm) {
-
- NR::Coord *dest = _c;
-
- *dest++ = 1.0; //0
- *dest++ = 0.0; //1
- *dest++ = 0.0; //2
- *dest++ = 1.0; //3
- *dest++ = tm[X]; //4
- *dest = tm[Y]; //5
- }
-
-
- /**
- *
- */
- bool test_identity() const;
-
-
- /**
- *
- */
- bool is_translation(Coord const eps = 1e-6) const;
-
- /**
- *
- */
- bool is_scale(Coord const eps = 1e-6) const;
-
- /**
- *
- */
- bool is_rotation(Coord const eps = 1e-6) const;
-
-
- /**
- *
- */
- Matrix inverse() const;
-
-
-
- /**
- *
- */
- inline Coord &operator[](int const i) {
- return _c[i];
- }
-
-
-
- /**
- *
- */
- inline Coord operator[](int const i) const {
- return _c[i];
- }
-
- inline operator Geom::Affine() const {
- return Geom::Affine(_c[0], _c[1], _c[2], _c[3], _c[4], _c[5]);
- }
-
- /**
- *
- */
- void set_identity();
-
- /**
- *
- */
- Coord det() const;
-
-
- /**
- *
- */
- Coord descrim2() const;
-
-
- /**
- *
- */
- Coord descrim() const;
-
-
- private:
-
-
- NR::Coord _c[6];
-};
-
-/** A function to print out the Matrix (for debugging) */
-inline std::ostream &operator<< (std::ostream &out_file, const NR::Matrix &m) {
- out_file << "A: " << m[0] << " C: " << m[2] << " E: " << m[4] << "\n";
- out_file << "B: " << m[1] << " D: " << m[3] << " F: " << m[5] << "\n";
- return out_file;
-}
-
-} /* namespace NR */
-
-
-
-
-
-
-
-/** \note
- * Discussion of splitting up nr-matrix.h into lots of little files:
- *
- * Advantages:
- *
- * - Reducing amount of recompilation necessary when anything changes.
- *
- * - Hopefully also reducing compilation time by reducing the number of inline
- * function definitions encountered by the compiler for a given .o file.
- * (No timing comparisons done yet. On systems without much memory available
- * for caching, this may be outweighed by additional I/O costs.)
- *
- * Disadvantages:
- *
- * - More #include lines necessary per file. If a compile fails due to
- * not having all the necessary #include lines, then the developer needs
- * to spend some time working out what #include to add.
- */
-
-#endif /* !__NR_MATRIX_H__ */
-
-
-/*
- Local Variables:
- mode:c++
- c-file-style:"stroustrup"
- c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
- indent-tabs-mode:nil
- fill-column:99
- End:
-*/
-// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :