Blender
V3.3
|
Go to the source code of this file.
Macros | |
#define | IK_STRETCH_STIFF_EPS 0.01f |
#define | IK_STRETCH_STIFF_MIN 0.001f |
#define | IK_STRETCH_STIFF_MAX 1e10 |
Typedefs | |
typedef void | IK_Segment |
typedef enum IK_SegmentAxis | IK_SegmentAxis |
typedef void | IK_Solver |
Enumerations | |
enum | IK_SegmentFlag { IK_XDOF = 1 , IK_YDOF = 2 , IK_ZDOF = 4 , IK_SWING = 8 , IK_REVOLUTE = 16 , IK_TRANSY = 32 , IK_XDOF = 1 , IK_YDOF = 2 , IK_ZDOF = 4 , IK_TRANS_XDOF = 8 , IK_TRANS_YDOF = 16 , IK_TRANS_ZDOF = 32 } |
enum | IK_SegmentAxis { IK_X = 0 , IK_Y = 1 , IK_Z = 2 , IK_TRANS_X = 3 , IK_TRANS_Y = 4 , IK_TRANS_Z = 5 , IK_X = 0 , IK_Y = 1 , IK_Z = 2 , IK_TRANS_X = 3 , IK_TRANS_Y = 4 , IK_TRANS_Z = 5 } |
#define IK_STRETCH_STIFF_EPS 0.01f |
Definition at line 144 of file IK_solver.h.
#define IK_STRETCH_STIFF_MAX 1e10 |
Definition at line 146 of file IK_solver.h.
#define IK_STRETCH_STIFF_MIN 0.001f |
Definition at line 145 of file IK_solver.h.
typedef void IK_Segment |
Typical order of calls for solving an IK problem:
The local transformation is then defined as: start * rest_basis * basis * basis_change * translation_change * translate(0,length,0)
Definition at line 79 of file IK_solver.h.
typedef enum IK_SegmentAxis IK_SegmentAxis |
An IK_Solver must be created to be able to execute the solver.
An arbitray number of goals can be created, stating that a given end effector must have a given position or rotation. If multiple goals are specified, they can be weighted (range 0..1) to get some control over their importance.
IK_Solve will execute the solver, that will run until either the system converges, or a maximum number of iterations is reached. It returns 1 if the system converged, 0 otherwise.
Definition at line 124 of file IK_solver.h.
enum IK_SegmentAxis |
Enumerator | |
---|---|
IK_X | |
IK_Y | |
IK_Z | |
IK_TRANS_X | |
IK_TRANS_Y | |
IK_TRANS_Z | |
IK_X | |
IK_Y | |
IK_Z | |
IK_TRANS_X | |
IK_TRANS_Y | |
IK_TRANS_Z |
Definition at line 90 of file IK_solver.h.
enum IK_SegmentFlag |
Enumerator | |
---|---|
IK_XDOF | |
IK_YDOF | |
IK_ZDOF | |
IK_SWING | |
IK_REVOLUTE | |
IK_TRANSY | |
IK_XDOF | |
IK_YDOF | |
IK_ZDOF | |
IK_TRANS_XDOF | |
IK_TRANS_YDOF | |
IK_TRANS_ZDOF |
Definition at line 81 of file IK_solver.h.
IK_Segment* IK_CreateSegment | ( | int | flag | ) |
Definition at line 87 of file IK_Solver.cpp.
References CreateSegment(), NULL, rot, IK_QSegment::SetComposite(), and IK_QSegment::SetParent().
Referenced by execute_posetree().
IK_Solver* IK_CreateSolver | ( | IK_Segment * | root | ) |
Definition at line 259 of file IK_Solver.cpp.
References NULL, and IK_QSolver::root.
Referenced by execute_posetree().
void IK_FreeSegment | ( | IK_Segment * | seg | ) |
Definition at line 112 of file IK_Solver.cpp.
References IK_QSegment::Composite().
Referenced by execute_posetree().
Definition at line 270 of file IK_Solver.cpp.
References NULL, blender::compositor::task, and IK_QSolver::tasks.
Referenced by execute_posetree().
void IK_GetBasisChange | ( | IK_Segment * | seg, |
float | basis_change[][3] | ||
) |
Definition at line 224 of file IK_Solver.cpp.
References IK_QSegment::BasisChange(), IK_QSegment::Composite(), float(), and IK_QSegment::Translational().
Referenced by execute_posetree().
void IK_GetTranslationChange | ( | IK_Segment * | seg, |
float * | translation_change | ||
) |
Definition at line 245 of file IK_Solver.cpp.
References IK_QSegment::Composite(), float(), IK_QSegment::Translational(), and IK_QSegment::TranslationChange().
Referenced by execute_posetree().
void IK_SetLimit | ( | IK_Segment * | seg, |
IK_SegmentAxis | axis, | ||
float | lmin, | ||
float | lmax | ||
) |
Definition at line 171 of file IK_Solver.cpp.
References IK_QSegment::Composite(), IK_TRANS_X, IK_TRANS_Y, IK_X, IK_Y, IK_Z, IK_QSegment::SetLimit(), and IK_QSegment::Translational().
Referenced by execute_posetree().
void IK_SetParent | ( | IK_Segment * | seg, |
IK_Segment * | parent | ||
) |
Definition at line 121 of file IK_Solver.cpp.
References IK_QSegment::Composite(), and IK_QSegment::SetParent().
Referenced by execute_posetree().
void IK_SetStiffness | ( | IK_Segment * | seg, |
IK_SegmentAxis | axis, | ||
float | stiffness | ||
) |
Definition at line 194 of file IK_Solver.cpp.
References IK_QSegment::Composite(), IK_STRETCH_STIFF_EPS, IK_TRANS_X, IK_TRANS_Y, IK_X, IK_Y, IK_Z, IK_QSegment::SetWeight(), and IK_QSegment::Translational().
Referenced by execute_posetree().
void IK_SetTransform | ( | IK_Segment * | seg, |
float | start[3], | ||
float | rest_basis[][3], | ||
float | basis[][3], | ||
float | length | ||
) |
Definition at line 132 of file IK_Solver.cpp.
References IK_QSegment::Composite(), CreateMatrix(), blender::math::length(), and IK_QSegment::SetTransform().
Referenced by execute_posetree().
Definition at line 386 of file IK_Solver.cpp.
References NULL, result, IK_QSolver::root, IK_QJacobianSolver::Setup(), IK_QJacobianSolver::Solve(), IK_QSolver::solver, and IK_QSolver::tasks.
Referenced by execute_posetree().
void IK_SolverAddGoal | ( | IK_Solver * | solver, |
IK_Segment * | tip, | ||
float | goal[3], | ||
float | weight | ||
) |
Definition at line 285 of file IK_Solver.cpp.
References IK_QSegment::Composite(), NULL, pos, IK_QTask::SetWeight(), and IK_QSolver::tasks.
Referenced by execute_posetree().
void IK_SolverAddGoalOrientation | ( | IK_Solver * | solver, |
IK_Segment * | tip, | ||
float | goal[][3], | ||
float | weight | ||
) |
Definition at line 304 of file IK_Solver.cpp.
References IK_QSegment::Composite(), CreateMatrix(), NULL, rot, IK_QTask::SetWeight(), and IK_QSolver::tasks.
Referenced by execute_posetree().
Definition at line 355 of file IK_Solver.cpp.
References IK_QJacobianSolver::GetPoleAngle(), NULL, and IK_QSolver::solver.
Referenced by execute_posetree().
void IK_SolverSetPoleVectorConstraint | ( | IK_Solver * | solver, |
IK_Segment * | tip, | ||
float | goal[3], | ||
float | polegoal[3], | ||
float | poleangle, | ||
int | getangle | ||
) |
Definition at line 332 of file IK_Solver.cpp.
References IK_QSegment::Composite(), NULL, IK_QJacobianSolver::SetPoleVectorConstraint(), and IK_QSolver::solver.
Referenced by execute_posetree().