dust3d/src/ccdikresolver.h

36 lines
806 B
C
Raw Normal View History

#ifndef CCD_IK_SOLVER_H
#define CCD_IK_SOLVER_H
#include <vector>
#include <QVector3D>
#include <QQuaternion>
2018-06-30 10:46:23 +00:00
#include "jointconstraint.h"
struct CCDIKNode
{
QVector3D position;
2018-06-30 10:46:23 +00:00
JointConstraint constraint;
bool hasConstraint = false;
};
class CCDIKSolver
{
public:
CCDIKSolver();
void setMaxRound(int maxRound);
void setDistanceThreshod(float threshold);
2018-06-30 10:46:23 +00:00
int addNodeInOrder(const QVector3D &position, const JointConstraint *constraint=nullptr);
void solveTo(const QVector3D &position);
const QVector3D &getNodeSolvedPosition(int index);
int getNodeCount(void);
private:
void iterate();
private:
std::vector<CCDIKNode> m_nodes;
QVector3D m_destination;
int m_maxRound;
float m_distanceThreshold2;
float m_distanceCeaseThreshold2;
};
#endif