tahoma2d/toonz/sources/include/toonz/ikengine.h
2016-06-15 15:43:10 +09:00

67 lines
1.3 KiB
C++

#pragma once
#ifndef IKENGINE_H
#define IKENGINE_H
#include "ikskeleton.h"
#undef DVAPI
#undef DVVAR
#ifdef TOONZLIB_EXPORTS
#define DVAPI DV_EXPORT_API
#define DVVAR DV_EXPORT_VAR
#else
#define DVAPI DV_IMPORT_API
#define DVVAR DV_IMPORT_VAR
#endif
class Jacobian;
class DVAPI IKEngine {
IKSkeleton m_skeleton;
public:
IKEngine();
// n.b. root index == 0
void setRoot(const TPointD &pos);
int addJoint(const TPointD &pos, int parentIndex);
void lock(int index);
void unlock(int index);
bool isLocked(int index);
void clear() {
m_skeleton.clear();
target.clear();
}
int getJointCount() const { return m_skeleton.getNodeCount(); }
const TPointD getJoint(int index) const {
assert(0 <= index && index < (int)m_skeleton.getNodeCount());
TPointD jointPos = m_skeleton.getNode(index)->getPos();
return jointPos;
}
int getJointParent(int index) const {
assert(index > -1 && index < m_skeleton.getNodeCount());
IKNode *node = m_skeleton.getNode(index)->getParent();
return node ? node->getIndex() : -1;
}
double getJointAngle(int index);
// trascino il punto index
void drag(TPointD &pos);
private:
std::vector<TPointD> target;
void doUpdateStep(Jacobian &jacobian);
void setSequenceJoints();
};
//#endif
#endif // IKENGINE_H