📄 coreanimation.cpp
字号:
//****************************************************************************//// coreanimation.cpp //// 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. ////****************************************************************************//#ifdef HAVE_CONFIG_H#include "config.h"#endif#include "cal3d/coreanimation.h"#include "cal3d/coretrack.h"CalCoreAnimation::CalCoreAnimation(){}CalCoreAnimation::~CalCoreAnimation(){}/*****************************************************************************//** Adds a core track. * * This function adds a core track to the core animation instance. * * @param pCoreTrack A pointer to the core track that should be added. * * @return One of the following values: * \li \b true if successful * \li \b false if an error happend *****************************************************************************/bool CalCoreAnimation::addCoreTrack(CalCoreTrack *pCoreTrack){ m_listCoreTrack.push_back(pCoreTrack); return true;} /*****************************************************************************//** Provides access to a core track. * * This function returns the core track for a given bone ID. * * @param coreBoneId The core bone ID of the core track that should be * returned. * * @return One of the following values: * \li a pointer to the core track * \li \b 0 if an error happend *****************************************************************************/CalCoreTrack *CalCoreAnimation::getCoreTrack(int coreBoneId){ // loop through all core track std::list<CalCoreTrack *>::iterator iteratorCoreTrack; for(iteratorCoreTrack = m_listCoreTrack.begin(); iteratorCoreTrack != m_listCoreTrack.end(); ++iteratorCoreTrack) { // get the core bone CalCoreTrack *pCoreTrack; pCoreTrack = *iteratorCoreTrack; // check if we found the matching core bone if(pCoreTrack->getCoreBoneId() == coreBoneId) return pCoreTrack; } // no match found return 0;}/*****************************************************************************//** Gets the number of core tracks for this core animation. * * This function returns the number of core tracks used for this core animation. * * @return The number of core tracks *****************************************************************************/unsigned int CalCoreAnimation::getTrackCount() const{ return m_listCoreTrack.size();} /*****************************************************************************//** Returns the duration. * * This function returns the duration of the core animation instance. * * @return The duration in seconds. *****************************************************************************/float CalCoreAnimation::getDuration() const{ return m_duration;} /*****************************************************************************//** Sets the duration. * * This function sets the duration of the core animation instance. * * @param duration The duration in seconds that should be set. *****************************************************************************/void CalCoreAnimation::setDuration(float duration){ m_duration = duration;} /*****************************************************************************//** Scale the core animation. * * This function rescale all the skeleton data that are in the core animation instance * * @param factor A float with the scale factor * *****************************************************************************/void CalCoreAnimation::scale(float factor){ // loop through all core track std::list<CalCoreTrack *>::iterator iteratorCoreTrack; for(iteratorCoreTrack = m_listCoreTrack.begin(); iteratorCoreTrack != m_listCoreTrack.end(); ++iteratorCoreTrack) { (*iteratorCoreTrack)->scale(factor); }} /*****************************************************************************//** * Set the name of the file in which the core animation is stored, if any. * * @param filename The path of the file. *****************************************************************************/void CalCoreAnimation::setFilename(const std::string& filename){ m_filename = filename;} /*****************************************************************************//** * Get the name of the file in which the core animation is stored, if any. * * @return One of the following values: * \li \b empty string if the animation was not stored in a file * \li \b the path of the file * *****************************************************************************/const std::string& CalCoreAnimation::getFilename(void) const{ return m_filename;} /*****************************************************************************//** * Set the symbolic name of the core animation. * * @param name A symbolic name. *****************************************************************************/void CalCoreAnimation::setName(const std::string& name){ m_name = name;} /*****************************************************************************//** * Get the symbolic name the core animation. * * @return One of the following values: * \li \b empty string if the animation was no associated to a symbolic name * \li \b the symbolic name * *****************************************************************************/const std::string& CalCoreAnimation::getName(void) const{ return m_name;}/*****************************************************************************//** * Add a callback to the current list of callbacks for this CoreAnim. * * @param callback Ptr to a subclass of this abstract class implementing the callback function. * @param min_interval Minimum interval (in seconds) between callbacks. Specifying 0 means call every update(). * *****************************************************************************/void CalCoreAnimation::registerCallback(CalAnimationCallback *callback,float min_interval){ CallbackRecord record; record.callback = callback; record.min_interval = min_interval; m_listCallbacks.push_back(record);}/*****************************************************************************//** * Remove a callback from the current list of callbacks for this Anim. * Callback objects not removed this way will be deleted in the dtor of the Anim. * * @param callback Ptr to a subclass of this abstract class implementing the callback function to remove. * *****************************************************************************/void CalCoreAnimation::removeCallback(CalAnimationCallback *callback){ for (std::vector<CallbackRecord>::iterator i = m_listCallbacks.begin(); i != m_listCallbacks.end(); i++) { if ((*i).callback == callback) { m_listCallbacks.erase(i); return; } }}/*****************************************************************************//** Returns the core track list. * * This function returns the list that contains all core tracks of the core * animation instance. * * @return A reference to the core track list. *****************************************************************************/std::list<CalCoreTrack *>& CalCoreAnimation::getListCoreTrack(){ return m_listCoreTrack;}/*****************************************************************************//** Returns the total number of core keyframes used for this animation. * * This function returns the total number of core keyframes used for this * animation instance (i.e.: the sum of all core keyframes of all core tracks). * * @return A reference to the core track list. *****************************************************************************/unsigned int CalCoreAnimation::getTotalNumberOfKeyframes() const{ unsigned int nbKeys = 0; for (std::list<CalCoreTrack*>::const_iterator it = m_listCoreTrack.begin(); it != m_listCoreTrack.end(); ++it) { CalCoreTrack *track = *it; nbKeys += track->getCoreKeyframeCount(); } return nbKeys;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -