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