svn merge ^/trunk/blender -r41226:41227 .
[blender.git] / intern / itasc / FixedObject.cpp
1 /** \file itasc/FixedObject.cpp
2  *  \ingroup itasc
3  */
4  * FixedObject.cpp
5  *
6  *  Created on: Feb 10, 2009
7  *      Author: benoitbolsee
8  */
9
10 #include "FixedObject.hpp"
11
12 namespace iTaSC{
13
14
15 FixedObject::FixedObject():UncontrolledObject(),
16         m_finalized(false), m_nframe(0)
17 {
18 }
19
20 FixedObject::~FixedObject() 
21 {
22         m_frameArray.clear();
23 }
24
25 int FixedObject::addFrame(const std::string& name, const Frame& frame)
26 {
27         if (m_finalized)
28                 return -1;
29         FrameList::iterator it;
30         unsigned int i;
31         for (i=0, it=m_frameArray.begin(); i<m_nframe; i++, it++) {
32                 if (it->first == name) {
33                         // this frame will replace the old frame
34                         it->second = frame;
35                         return i;
36                 }
37         }
38         m_frameArray.push_back(FrameList::value_type(name,frame));
39         return m_nframe++;
40 }
41
42 int FixedObject::addEndEffector(const std::string& name)
43 {
44         // verify that this frame name exist
45         FrameList::iterator it;
46         unsigned int i;
47         for (i=0, it=m_frameArray.begin(); i<m_nframe; i++, it++) {
48                 if (it->first == name) {
49                         return i;
50                 }
51         }
52         return -1;
53 }
54
55 void FixedObject::finalize()
56 {
57         if (m_finalized)
58                 return;
59         initialize(0, m_nframe);
60         m_finalized = true;
61 }
62
63 const Frame& FixedObject::getPose(const unsigned int frameIndex)
64 {
65         if (frameIndex < m_nframe) {
66                 return m_frameArray[frameIndex].second;
67         } else {
68                 return F_identity;
69         }
70 }
71
72 }