Sophie

Sophie

distrib > Mandriva > 2011.0 > i586 > by-pkgid > 81e620a13c7a2745135d6cf6c604d2d8 > files > 53

cal3d-debug-0.11.0-10mdv2011.0.i586.rpm

//****************************************************************************//
// coretrack.h                                                                //
// Copyright (C) 2001, 2002 Bruno 'Beosil' Heidelberger                       //
//****************************************************************************//
// This library is free software; you can redistribute it and/or modify it    //
// under the terms of the GNU Lesser General Public License as published by   //
// the Free Software Foundation; either version 2.1 of the License, or (at    //
// your option) any later version.                                            //
//****************************************************************************//

#ifndef CAL_CORETRACK_H
#define CAL_CORETRACK_H

//****************************************************************************//
// Includes                                                                   //
//****************************************************************************//

#include "cal3d/global.h"
#include "cal3d/matrix.h"
#include "cal3d/vector.h"
#include "cal3d/quaternion.h"

//****************************************************************************//
// Forward declarations                                                       //
//****************************************************************************//

class CalCoreBone;
class CalCoreKeyframe;

//****************************************************************************//
// Class declaration                                                          //
//****************************************************************************//

//*****************************************************************************/
//** The core track class.
//*****************************************************************************/

class CAL3D_API CalCoreTrack
{
// member variables
protected:
  /// The index of the associated CoreBone in the CoreSkeleton.
  int m_coreBoneId;

  /// List of keyframes, always sorted by time.
  std::vector<CalCoreKeyframe*> m_keyframes;

// constructors/destructor
public:
  CalCoreTrack();
  virtual ~CalCoreTrack();

  bool create();
  void destroy();

  bool getState(float time, CalVector& translation, CalQuaternion& rotation);

  /*****************************************************************************/
  /** Returns the ID of the core bone.
  *
  * This function returns the ID of the core bone to which the core track
  * instance is attached to.
  *
  * @return One of the following values:
  *         \li the \b ID of the core bone
  *         \li \b -1 if an error happend
  *****************************************************************************/
  inline int getCoreBoneId()
  {
	  return m_coreBoneId;
  }

  bool setCoreBoneId(int coreBoneId);
  
  int getCoreKeyframeCount();
  CalCoreKeyframe* getCoreKeyframe(int idx);

  bool addCoreKeyframe(CalCoreKeyframe *pCoreKeyframe);
	void removeCoreKeyFrame(int _i) { m_keyframes.erase( m_keyframes.begin() + _i); }

  void scale(float factor);

private:
  std::vector<CalCoreKeyframe*>::iterator getUpperBound(float time);
};

#endif

//****************************************************************************//