Update SConscript.
[blender-staging.git] / intern / iksolver / intern / IK_QJacobianSolver.h
1 /**
2  * $Id$
3  * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public License
7  * as published by the Free Software Foundation; either version 2
8  * of the License, or (at your option) any later version. The Blender
9  * Foundation also sells licenses for use in proprietary software under
10  * the Blender License.  See http://www.blender.org/BL/ for information
11  * about this.
12  *
13  * This program 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
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software Foundation,
20  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
21  *
22  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
23  * All rights reserved.
24  *
25  * The Original Code is: all of this file.
26  *
27  * Original Author: Laurence
28  * Contributor(s): Brecht
29  *
30  * ***** END GPL/BL DUAL LICENSE BLOCK *****
31  */
32
33 #ifndef NAN_INCLUDED_IK_QJacobianSolver_h
34
35 #define NAN_INCLUDED_IK_QJacobianSolver_h
36
37 /**
38  * @author Laurence Bourn
39  * @date 28/6/2001
40  */
41
42 #include <vector>
43 #include <list>
44
45 #include "MT_Vector3.h"
46 #include "IK_QJacobian.h"
47 #include "IK_QSegment.h"
48 #include "IK_QTask.h"
49
50 class IK_QJacobianSolver
51 {
52 public:
53         IK_QJacobianSolver() {};
54         ~IK_QJacobianSolver() {};
55
56         // returns true if converged, false if max number of iterations was used
57
58         bool Solve(
59                 IK_QSegment *root,
60                 std::list<IK_QTask*> tasks,
61                 const MT_Scalar tolerance,
62                 const int max_iterations
63         );
64
65 private:
66         void AddSegmentList(IK_QSegment *seg);
67         bool Setup(IK_QSegment *root, std::list<IK_QTask*>& tasks);
68         bool UpdateAngles(MT_Scalar& norm);
69
70 private:
71
72         IK_QJacobian m_jacobian;
73         IK_QJacobian m_jacobian_sub;
74
75         bool m_secondary_enabled;
76
77         std::vector<IK_QSegment*> m_segments;
78 };
79
80 #endif
81