Raw File
Motion.h
#pragma once

#include <json/json.h>
#include "KinTree.h"

class cMotion
{
public:
	enum eFrameParams
	{
		eFrameTime,
		eFrameMax
	};

	typedef Eigen::VectorXd tFrame;

	cMotion();
	virtual ~cMotion();

	virtual void Clear();
	virtual bool Load(const std::string& file);
	virtual bool IsValid() const;

	virtual int GetNumFrames() const;
	virtual int GetNumDof() const;
	virtual tFrame GetFrame(int i) const;
	virtual tFrame BlendFrames(int a, int b, double lerp) const;

	virtual tFrame CalcFrame(double time) const;
	virtual double GetDuration() const;

	virtual int CalcCycleCount(double time) const;
	virtual void CalcIndexPhase(double time, int& out_idx, double& out_phase) const;

protected:
	bool mLoop;
	Eigen::MatrixXd mFrames;

	virtual bool LoadJson(const Json::Value& root);
	virtual bool ParseFrameJson(const Json::Value& root, Eigen::VectorXd& out_frame) const;

	virtual double GetFrameTime(int i) const;
	virtual void PostProcessFrames(Eigen::MatrixXd& frames) const;
	virtual int GetFrameSize() const;
};
back to top