Blender V2.61 - r43446

KX_BlenderScalarInterpolator.cpp

Go to the documentation of this file.
00001 /*
00002  * ***** BEGIN GPL LICENSE BLOCK *****
00003  *
00004  * This program is free software; you can redistribute it and/or
00005  * modify it under the terms of the GNU General Public License
00006  * as published by the Free Software Foundation; either version 2
00007  * of the License, or (at your option) any later version.
00008  *
00009  * This program is distributed in the hope that it will be useful,
00010  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00011  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00012  * GNU General Public License for more details.
00013  *
00014  * You should have received a copy of the GNU General Public License
00015  * along with this program; if not, write to the Free Software Foundation,
00016  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
00017  *
00018  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
00019  * All rights reserved.
00020  *
00021  * The Original Code is: all of this file.
00022  *
00023  * Contributor(s): none yet.
00024  *
00025  * ***** END GPL LICENSE BLOCK *****
00026  */
00027 
00033 #include "KX_BlenderScalarInterpolator.h"
00034 
00035 #include <cstring>
00036 
00037 extern "C" {
00038 #include "DNA_ipo_types.h"
00039 #include "DNA_action_types.h"
00040 #include "DNA_anim_types.h"
00041 #include "BKE_fcurve.h"
00042 }
00043 
00044 float BL_ScalarInterpolator::GetValue(float currentTime) const {
00045     // XXX 2.4x IPO_GetFloatValue(m_blender_adt, m_channel, currentTime);
00046     return evaluate_fcurve(m_fcu, currentTime);
00047 }
00048 
00049 BL_InterpolatorList::BL_InterpolatorList(bAction *action) {
00050     if(action==NULL)
00051         return;
00052     
00053     for(FCurve *fcu= (FCurve *)action->curves.first; fcu; fcu= (FCurve *)fcu->next) {
00054         if(fcu->rna_path) {
00055             BL_ScalarInterpolator *new_ipo = new BL_ScalarInterpolator(fcu); 
00056             //assert(new_ipo);
00057             push_back(new_ipo);
00058         }
00059     }
00060 }
00061 
00062 BL_InterpolatorList::~BL_InterpolatorList() {
00063     BL_InterpolatorList::iterator i;
00064     for (i = begin(); !(i == end()); ++i) {
00065         delete *i;
00066     }
00067 }
00068 
00069 KX_IScalarInterpolator *BL_InterpolatorList::GetScalarInterpolator(const char *rna_path, int array_index)
00070 {
00071     for(BL_InterpolatorList::iterator i = begin(); (i != end()) ; i++ )
00072     {
00073         FCurve *fcu= (static_cast<BL_ScalarInterpolator *>(*i))->GetFCurve();
00074         if(array_index==fcu->array_index && strcmp(rna_path, fcu->rna_path)==0)
00075             return *i;
00076     }
00077     return NULL;
00078 }   
00079