Coin Logo http://www.sim.no
http://www.coin3d.org

SbMatrix.h
1 #ifndef COIN_SBMATRIX_H
2 #define COIN_SBMATRIX_H
3 
4 /**************************************************************************\
5  *
6  * This file is part of the Coin 3D visualization library.
7  * Copyright (C) 1998-2007 by Systems in Motion. All rights reserved.
8  *
9  * This library is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU General Public License
11  * ("GPL") version 2 as published by the Free Software Foundation.
12  * See the file LICENSE.GPL at the root directory of this source
13  * distribution for additional information about the GNU GPL.
14  *
15  * For using Coin with software that can not be combined with the GNU
16  * GPL, and for taking advantage of the additional benefits of our
17  * support services, please contact Systems in Motion about acquiring
18  * a Coin Professional Edition License.
19  *
20  * See http://www.coin3d.org/ for more information.
21  *
22  * Systems in Motion, Postboks 1283, Pirsenteret, 7462 Trondheim, NORWAY.
23  * http://www.sim.no/ sales@sim.no coin-support@coin3d.org
24  *
25 \**************************************************************************/
26 
27 #include <stdio.h>
28 #include <Inventor/SbBasic.h>
29 
30 class SbLine;
31 class SbRotation;
32 class SbVec3f;
33 class SbVec4f;
34 
35 typedef float SbMat[4][4];
36 
37 class COIN_DLL_API SbMatrix {
38 public:
39  SbMatrix(void);
40  SbMatrix(const float a11, const float a12, const float a13, const float a14,
41  const float a21, const float a22, const float a23, const float a24,
42  const float a31, const float a32, const float a33, const float a34,
43  const float a41, const float a42, const float a43, const float a44);
44  SbMatrix(const SbMat & matrix);
45  SbMatrix(const SbMat * matrix);
46  ~SbMatrix(void);
47 
48  SbMatrix & operator =(const SbMat & m);
49 
50  operator float*(void);
51  SbMatrix & operator =(const SbMatrix & m);
52  void setValue(const SbMat & m);
53  const SbMat & getValue(void) const;
54 
55  void makeIdentity(void);
56  void setRotate(const SbRotation & q);
57  SbMatrix inverse(void) const;
58  float det3(int r1, int r2, int r3,
59  int c1, int c2, int c3) const;
60  float det3(void) const;
61  float det4(void) const;
62 
63  SbBool equals(const SbMatrix & m, float tolerance) const;
64 
65 
66  operator SbMat&(void);
67  float * operator [](int i);
68  const float * operator [](int i) const;
69  SbMatrix & operator =(const SbRotation & q);
70  SbMatrix & operator *=(const SbMatrix & m);
71  friend COIN_DLL_API SbMatrix operator *(const SbMatrix & m1, const SbMatrix & m2);
72  friend COIN_DLL_API int operator ==(const SbMatrix & m1, const SbMatrix & m2);
73  friend COIN_DLL_API int operator !=(const SbMatrix & m1, const SbMatrix & m2);
74  void getValue(SbMat & m) const;
75  static SbMatrix identity(void);
76  void setScale(const float s);
77  void setScale(const SbVec3f & s);
78  void setTranslate(const SbVec3f & t);
79  void setTransform(const SbVec3f & t, const SbRotation & r, const SbVec3f & s);
80  void setTransform(const SbVec3f & t, const SbRotation & r, const SbVec3f & s,
81  const SbRotation & so);
82  void setTransform(const SbVec3f & translation,
83  const SbRotation & rotation, const SbVec3f & scaleFactor,
84  const SbRotation & scaleOrientation, const SbVec3f & center);
85  void getTransform(SbVec3f & t, SbRotation & r,
86  SbVec3f & s, SbRotation & so) const;
87  void getTransform(SbVec3f & translation, SbRotation & rotation,
88  SbVec3f & scaleFactor, SbRotation & scaleOrientation,
89  const SbVec3f & center) const;
90  SbBool factor(SbMatrix & r, SbVec3f & s, SbMatrix & u, SbVec3f & t,
91  SbMatrix & proj);
92  SbBool LUDecomposition(int index[4], float & d);
93  void LUBackSubstitution(int index[4], float b[4]) const;
94  SbMatrix transpose(void) const;
95  SbMatrix & multRight(const SbMatrix & m);
96  SbMatrix & multLeft(const SbMatrix & m);
97  void multMatrixVec(const SbVec3f & src, SbVec3f & dst) const;
98  void multVecMatrix(const SbVec3f & src, SbVec3f & dst) const;
99  void multDirMatrix(const SbVec3f & src, SbVec3f & dst) const;
100  void multLineMatrix(const SbLine & src, SbLine & dst) const;
101  void multVecMatrix(const SbVec4f & src, SbVec4f & dst) const;
102 
103  void print(FILE * fp) const;
104 
105 private:
106  float matrix[4][4];
107 
108  void operator /=(const float v);
109  void operator *=(const float v);
110 };
111 
112 COIN_DLL_API SbMatrix operator *(const SbMatrix & m1, const SbMatrix & m2);
113 COIN_DLL_API int operator ==(const SbMatrix & m1, const SbMatrix & m2);
114 COIN_DLL_API int operator !=(const SbMatrix & m1, const SbMatrix & m2);
115 
116 #endif // !COIN_SBMATRIX_H
SbRotation::getValue
const float * getValue(void) const
Definition: SbRotation.cpp:179
SbRotation
The SbRotation class represents a rotation in 3D space.
Definition: SbRotation.h:33
SbRotation::identity
static SbRotation identity(void)
Definition: SbRotation.cpp:674
SbMatrix::multLineMatrix
void multLineMatrix(const SbLine &src, SbLine &dst) const
Definition: SbMatrix.cpp:1435
SbMatrix
The SbMatrix class is a 4x4 dimensional representation of a matrix.
Definition: SbMatrix.h:37
SbMatrix::print
void print(FILE *fp) const
Definition: SbMatrix.cpp:1448
SbMatrix::equals
SbBool equals(const SbMatrix &m, float tolerance) const
Definition: SbMatrix.cpp:589
SoDebugError::post
static void post(const char *const source, const char *const format,...)
Definition: SoDebugError.cpp:314
SbMatrix::setRotate
void setRotate(const SbRotation &q)
Definition: SbMatrix.cpp:314
SbMatrix::multMatrixVec
void multMatrixVec(const SbVec3f &src, SbVec3f &dst) const
Definition: SbMatrix.cpp:1319
SbMatrix::setTransform
void setTransform(const SbVec3f &t, const SbRotation &r, const SbVec3f &s)
Definition: SbMatrix.cpp:812
SbMatrix::multVecMatrix
void multVecMatrix(const SbVec3f &src, SbVec3f &dst) const
Definition: SbMatrix.cpp:1357
SbMatrix::det3
float det3(void) const
Definition: SbMatrix.cpp:391
SbMatrix::inverse
SbMatrix inverse(void) const
Definition: SbMatrix.cpp:418
SbMatrix::multLeft
SbMatrix & multLeft(const SbMatrix &m)
Definition: SbMatrix.cpp:1280
SoDebugError::postWarning
static void postWarning(const char *const source, const char *const format,...)
Definition: SoDebugError.cpp:324
SbRotation::setValue
SbRotation & setValue(const float q0, const float q1, const float q2, const float q3)
Definition: SbRotation.cpp:204
SbMatrix::setScale
void setScale(const float s)
Definition: SbMatrix.cpp:760
SbMatrix::multRight
SbMatrix & multRight(const SbMatrix &m)
Definition: SbMatrix.cpp:1240
SbMatrix::~SbMatrix
~SbMatrix(void)
Definition: SbMatrix.cpp:244
SbMatrix::LUDecomposition
SbBool LUDecomposition(int index[4], float &d)
Definition: SbMatrix.cpp:1110
SbMatrix::transpose
SbMatrix transpose(void) const
Definition: SbMatrix.cpp:1216
SbRotation::inverse
SbRotation inverse(void) const
Definition: SbRotation.cpp:316
SbMatrix::SbMatrix
SbMatrix(void)
Definition: SbMatrix.cpp:200
SbLine::getDirection
const SbVec3f & getDirection(void) const
Definition: SbLine.cpp:315
SbMatrix::getTransform
void getTransform(SbVec3f &t, SbRotation &r, SbVec3f &s, SbRotation &so) const
Definition: SbMatrix.cpp:997
SbMatrix::multDirMatrix
void multDirMatrix(const SbVec3f &src, SbVec3f &dst) const
Definition: SbMatrix.cpp:1411
SbBox2i32::operator!=
int operator!=(const SbBox2i32 &b1, const SbBox2i32 &b2)
Definition: SbBox2i32.h:91
SbMatrix::det4
float det4(void) const
Definition: SbMatrix.cpp:400
SbVec3f
The SbVec3f class is a 3 dimensional vector with floating point coordinates.
Definition: SbVec3f.h:37
SbMatrix::makeIdentity
void makeIdentity(void)
Definition: SbMatrix.cpp:297
SbMatrix::operator*=
SbMatrix & operator*=(const SbMatrix &m)
Definition: SbMatrix.cpp:678
SbMatrix::getValue
const SbMat & getValue(void) const
Definition: SbMatrix.cpp:255
SbLine::getPosition
const SbVec3f & getPosition(void) const
Definition: SbLine.cpp:305
SbLine
The SbLine class represents a line in 3D space.
Definition: SbLine.h:32
SbMatrix::LUBackSubstitution
void LUBackSubstitution(int index[4], float b[4]) const
Definition: SbMatrix.cpp:1172
SbMatrix::factor
SbBool factor(SbMatrix &r, SbVec3f &s, SbMatrix &u, SbVec3f &t, SbMatrix &proj)
Definition: SbMatrix.cpp:1077
SbLine::setValue
void setValue(const SbVec3f &origin, const SbVec3f &point)
Definition: SbLine.cpp:88
SbMatrix::identity
static SbMatrix identity(void)
Definition: SbMatrix.cpp:748
SbBox2i32::operator==
int operator==(const SbBox2i32 &b1, const SbBox2i32 &b2)
Definition: SbBox2i32.h:87
SbMatrix::setTranslate
void setTranslate(const SbVec3f &t)
Definition: SbMatrix.cpp:790
SbMatrix::operator[]
float * operator[](int i)
Definition: SbMatrix.cpp:631
SbRotation::invert
SbRotation & invert(void)
Definition: SbRotation.cpp:290
SbMatrix::setValue
void setValue(const SbMat &m)
Definition: SbMatrix.cpp:266
SbMatrix::operator=
SbMatrix & operator=(const SbMat &m)
Definition: SbMatrix.cpp:275
SbVec4f
The SbVec4f class is a 4 dimensional vector with floating point coordinates.
Definition: SbVec4f.h:34

Copyright © 1998-2007 by Systems in Motion AS. All rights reserved.

Generated on Wed Jul 24 2019 for Coin by Doxygen. 1.8.17