11 #ifndef hifi_AnimPoleVectorConstraint_h
12 #define hifi_AnimPoleVectorConstraint_h
15 #include "AnimChain.h"
19 class AnimPoleVectorConstraint :
public AnimNode {
21 friend class AnimTests;
23 AnimPoleVectorConstraint(
const QString&
id,
bool enabled, glm::vec3 referenceVector,
24 const QString& baseJointName,
const QString& midJointName,
const QString& tipJointName,
25 const QString& enabledVar,
const QString& poleVectorVar);
26 virtual ~AnimPoleVectorConstraint()
override;
28 virtual const AnimPoseVec& evaluate(
const AnimVariantMap& animVars,
const AnimContext& context,
float dt, AnimVariantMap& triggersOut)
override;
32 enum class InterpType {
40 virtual const AnimPoseVec& getPosesInternal()
const override;
41 virtual void setSkeletonInternal(AnimSkeleton::ConstPointer skeleton)
override;
44 void beginInterp(InterpType interpType,
const AnimChain& chain);
49 glm::vec3 _referenceVector;
51 QString _baseJointName;
52 QString _midJointName;
53 QString _tipJointName;
56 QString _poleVectorVar;
58 int _baseParentJointIndex { -1 };
59 int _baseJointIndex { -1 };
60 int _midJointIndex { -1 };
61 int _tipJointIndex { -1 };
63 InterpType _interpType { InterpType::None };
64 float _interpAlphaVel { 0.0f };
65 float _interpAlpha { 0.0f };
67 AnimChain _snapshotChain;
70 AnimPoleVectorConstraint(
const AnimPoleVectorConstraint&) =
delete;
71 AnimPoleVectorConstraint& operator=(
const AnimPoleVectorConstraint&) =
delete;