Merge of itasc branch. Project files, scons and cmake should be working. Makefile...
[blender.git] / intern / itasc / kdl / jacobian.hpp
1 // Copyright  (C)  2007  Ruben Smits <ruben dot smits at mech dot kuleuven dot be>
2
3 // Version: 1.0
4 // Author: Ruben Smits <ruben dot smits at mech dot kuleuven dot be>
5 // Maintainer: Ruben Smits <ruben dot smits at mech dot kuleuven dot be>
6 // URL: http://www.orocos.org/kdl
7
8 // This library is free software; you can redistribute it and/or
9 // modify it under the terms of the GNU Lesser General Public
10 // License as published by the Free Software Foundation; either
11 // version 2.1 of the License, or (at your option) any later version.
12
13 // This library is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16 // Lesser General Public License for more details.
17
18 // You should have received a copy of the GNU Lesser General Public
19 // License along with this library; if not, write to the Free Software
20 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
21
22 #ifndef KDL_JACOBIAN_HPP
23 #define KDL_JACOBIAN_HPP
24
25 #include "frames.hpp"
26
27 namespace KDL
28 {
29     //Forward declaration
30     class ChainJntToJacSolver;
31
32     class Jacobian
33     {
34         friend class ChainJntToJacSolver;
35     private:
36         unsigned int size;
37         unsigned int nr_blocks;
38     public:
39         Twist* twists;
40         Jacobian(unsigned int size,unsigned int nr=1);
41         Jacobian(const Jacobian& arg);
42
43         Jacobian& operator=(const Jacobian& arg);
44
45         bool operator ==(const Jacobian& arg);
46         bool operator !=(const Jacobian& arg);
47         
48         friend bool Equal(const Jacobian& a,const Jacobian& b,double eps=epsilon);
49         
50
51         ~Jacobian();
52
53         double operator()(int i,int j)const;
54         double& operator()(int i,int j);
55         unsigned int rows()const;
56         unsigned int columns()const;
57
58         friend void SetToZero(Jacobian& jac);
59
60         friend void changeRefPoint(const Jacobian& src1, const Vector& base_AB, Jacobian& dest);
61         friend void changeBase(const Jacobian& src1, const Rotation& rot, Jacobian& dest);
62         friend void changeRefFrame(const Jacobian& src1,const Frame& frame, Jacobian& dest);
63
64
65     };
66 }
67
68 #endif