soc-2008-mxcurioni: merged changes to revision 23516
[blender.git] / intern / itasc / kdl / frames_io.hpp
1 /***************************************************************************
2                         frames_io.h -  description
3                        -------------------------
4     begin                : June 2006
5     copyright            : (C) 2006 Erwin Aertbelien
6     email                : firstname.lastname@mech.kuleuven.ac.be
7
8  History (only major changes)( AUTHOR-Description ) :
9
10  Ruben Smits - Added output for jacobian and jntarray 06/2007
11
12  ***************************************************************************
13  *   This library is free software; you can redistribute it and/or         *
14  *   modify it under the terms of the GNU Lesser General Public            *
15  *   License as published by the Free Software Foundation; either          *
16  *   version 2.1 of the License, or (at your option) any later version.    *
17  *                                                                         *
18  *   This library is distributed in the hope that it will be useful,       *
19  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
20  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU     *
21  *   Lesser General Public License for more details.                       *
22  *                                                                         *
23  *   You should have received a copy of the GNU Lesser General Public      *
24  *   License along with this library; if not, write to the Free Software   *
25  *   Foundation, Inc., 59 Temple Place,                                    *
26  *   Suite 330, Boston, MA  02111-1307  USA                                *
27  *                                                                         *
28  ***************************************************************************/
29 /**
30 //
31 // \file
32 //      Defines routines for I/O of Frame and related objects.
33 // \verbatim
34 //      Spaces, tabs and newlines do not have any importance.
35 //      Comments are allowed C-style,C++-style, make/perl/csh -style
36 //      Description of the I/O :
37 //        Vector  : OUTPUT : e.g. [10,20,30]
38 //                  INPUT  :
39 //                         1) [10,20,30]
40 //                         2) Zero
41 //        Twist   : e.g. [1,2,3,4,5,6]
42 //           where [1,2,3] is velocity vector
43 //           where [4,5,6] is rotational velocity vector
44 //        Wrench  : e.g. [1,2,3,4,5,6]
45 //           where [1,2,3] represents a force vector
46 //           where [4,5,6] represents a torque vector
47 //        Rotation : output :
48 //                 [1,2,3;
49 //                  4,5,6;
50 //                  7,8,9] cfr definition of Rotation object.
51 //                  input :
52 //                    1) like the output
53 //                    2) EulerZYX,EulerZYZ,RPY word followed by a vector, e.g. :
54 //                        Eulerzyx[10,20,30]
55 //                   (ANGLES are always expressed in DEGREES for I/O)
56 //                   (ANGELS are always expressed in RADIANS for internal representation)
57 //                    3) Rot [1,2,3] [20]  Rotates around axis [1,2,3] with an angle
58 //                   of 20 degrees.
59 //                    4) Identity          returns identity rotation matrix.
60 //       Frames   : output : [ Rotationmatrix positionvector ]
61 //                   e.g. [ [1,0,0;0,1,0;0,0,1] [1,2,3] ]
62 //                  Input  :
63 //                     1) [ Rotationmatrix positionvector ]
64 //                     2) DH [ 10,10,50,30]  Denavit-Hartenberg representation
65 //                     ( is in fact not the representation of a Frame, but more
66 //                       limited, cfr. documentation of Frame object.)
67 //  \endverbatim
68 //
69 // \warning
70 //   You can use iostream.h or iostream header files for file I/O,
71 //   if one declares the define WANT_STD_IOSTREAM then the standard C++
72 //   iostreams headers are included instead of the compiler-dependent version
73 //
74  *
75  ****************************************************************************/
76 #ifndef FRAMES_IO_H
77 #define FRAMES_IO_H
78
79 #include "utilities/utility_io.h"
80 #include "frames.hpp"
81 #include "jntarray.hpp"
82 #include "jacobian.hpp"
83
84 namespace KDL {
85
86     //! width to be used when printing variables out with frames_io.h
87     //! global variable, can be changed.
88
89
90     // I/O to C++ stream.
91     std::ostream& operator << (std::ostream& os,const Vector& v);
92     std::ostream& operator << (std::ostream& os,const Rotation& R);
93     std::ostream& operator << (std::ostream& os,const Frame& T);
94     std::ostream& operator << (std::ostream& os,const Twist& T);
95     std::ostream& operator << (std::ostream& os,const Wrench& T);
96     std::ostream& operator << (std::ostream& os,const Vector2& v);
97     std::ostream& operator << (std::ostream& os,const Rotation2& R);
98     std::ostream& operator << (std::ostream& os,const Frame2& T);
99
100
101
102     std::istream& operator >> (std::istream& is,Vector& v);
103     std::istream& operator >> (std::istream& is,Rotation& R);
104     std::istream& operator >> (std::istream& is,Frame& T);
105     std::istream& operator >> (std::istream& os,Twist& T);
106     std::istream& operator >> (std::istream& os,Wrench& T);
107     std::istream& operator >> (std::istream& is,Vector2& v);
108     std::istream& operator >> (std::istream& is,Rotation2& R);
109     std::istream& operator >> (std::istream& is,Frame2& T);
110
111
112 } // namespace Frame
113
114 #endif