Atoms Crowd  4.1.0
AnimationClip.impl.h
1 // ===========================================================================
2 // Copyright (c) 2015 Toolchefs Ltd. All rights reserved.
3 //
4 // Use of this software is subject to the terms of the Toolchefs license
5 // agreement provided at the time of installation or download, or which
6 // otherwise accompanies this software in either electronic or hard copy form.
7 // ===========================================================================
8 
9 namespace Atoms
10 {
11  /***************************
12  JointClipData
13  ***************************/
14  const std::string& JointClipData::name() const
15  {
16  return m_name;
17  }
18 
19  void JointClipData::setName(const std::string& name)
20  {
21  m_name = name;
22  }
23 
24  void JointClipData::setTranslation(const AtomsCore::Vector3 &translation, const unsigned int frame)
25  {
26  if (m_translation.size() > frame)
27  m_translation[frame].setValue(translation);
28  }
29 
30  void JointClipData::setRotation(const AtomsCore::Quaternion &rotation, const unsigned int frame)
31  {
32  if (m_rotation.size() > frame)
33  m_rotation[frame] = rotation;
34  }
35 
36  void JointClipData::setScale(const AtomsCore::Vector3 &scale, const unsigned int frame)
37  {
38  if (m_scale.size() > frame)
39  m_scale[frame].setValue(scale);
40  }
41 
42  const AtomsCore::Vector3& JointClipData::getTranslation(const unsigned int frame) const
43  {
44  return frame > m_numberOfFrames - 1 ? m_translation[m_numberOfFrames - 1] : m_translation[frame];
45  }
46 
47  const AtomsCore::Quaternion& JointClipData::getRotation(const unsigned int frame) const
48  {
49  return frame > m_numberOfFrames - 1 ? m_rotation[m_numberOfFrames - 1] : m_rotation[frame];
50  }
51 
52  const AtomsCore::Vector3& JointClipData::getScale(const unsigned int frame) const
53  {
54  return frame > m_numberOfFrames - 1 ? m_scale[m_numberOfFrames - 1] : m_scale[frame];
55  }
56 
57  unsigned int JointClipData::getArrayMetadataType(const std::string &name) const
58  {
59  return m_metadata.at(name)->typeId();
60  }
61 
62  template <class T> inline T JointClipData::getArrayMetadataValueAtFrame(const std::string &name, const unsigned int frame) const
63  {
64  AtomsPtr<AtomsCore::TypedArrayMetadata<T>> vec = std::static_pointer_cast<AtomsCore::TypedArrayMetadata<T >> (m_metadata.at(name));
65  return vec->getBasicTypeValue(frame > m_numberOfFrames - 1 ? m_numberOfFrames - 1 : frame);
66  }
67 
68  AtomsPtr<AtomsCore::Metadata> JointClipData::getArrayMetadataAtFrame(const std::string &name, const unsigned int frame) const
69  {
70  auto metaIt = m_metadata.find(name);
71  if (metaIt != m_metadata.cend())
72  return metaIt->second->getBasicTypeMetadata(frame > m_numberOfFrames - 1 ? m_numberOfFrames - 1 : frame);
73  return nullptr;
74  }
75 
76  template <class T> void JointClipData::setArrayMetadataValue(const std::string &name, const unsigned int frame, T value)
77  {
78  AtomsPtr<AtomsCore::TypedArrayMetadata<T>> vec = std::static_pointer_cast<AtomsCore::TypedArrayMetadata<T>>( m_metadata[name] );
79  vec->get()[frame] = value;
80  }
81 
82  std::vector<std::string> JointClipData::getArrayMetadataNames() const
83  {
84  //return m_metadataNames;
85  std::vector<std::string> metadataNames;
86  metadataNames.reserve(m_metadata.size());
87  for (auto it = m_metadata.cbegin(); it != m_metadata.cend(); it++)
88  metadataNames.push_back(it->first);
89  return metadataNames;
90  }
91 
92  bool JointClipData::hasArrayMetadata(const std::string &name) const
93  {
94  return m_metadata.find(name) != m_metadata.cend();
95  }
96 
97  void JointClipData::deleteArrayMetadata(const std::string& name)
98  {
99  auto it = m_metadata.find(name);
100  if (it != m_metadata.end())
101  m_metadata.erase(it);
102  }
103 
104  template<class T> inline void JointClipData::getArrayMetadataValues(const std::string& name, std::vector<T> &values)
105  {
106  if (m_metadata.find(name) == m_metadata.end())
107  return;
108  AtomsPtr<AtomsCore::TypedArrayMetadata<T>> vec = std::static_pointer_cast<AtomsCore::TypedArrayMetadata<T>>(m_metadata[name]);
109  if (!vec)
110  return;
111  values = vec->get();
112  }
113 
114  template<class T> void JointClipData::addArrayMetadata(const std::string &name, const bool force)
115  {
116  if (m_metadata.find(name) == m_metadata.end() || force)
117  {
118  AtomsPtr<AtomsCore::Metadata> data = (AtomsCore::MetadataFactory::instance().createMetadata(T::staticTypeStr()));
119 
120  AtomsPtr<T> d = std::static_pointer_cast<T>(data);
121  d->get().resize(static_cast<unsigned int>(m_numberOfFrames));
122 
123  m_metadata[name] = d;
124 
125  // m_metadataNames.push_back(name);
126  }
127  }
128 
129  void JointClipData::addArrayMetadata(const std::string &name, AtomsPtr<AtomsCore::BaseTypedArrayMetadata>& data)
130  {
131  m_metadata[name] = data;
132  }
133 
134  std::vector<std::string> JointClipData::getStaticMetadataNames() const
135  {
136  return m_staticMetadata.getKeys();
137  }
138 
139  void JointClipData::setStaticMetadata(const std::string &name, AtomsCore::Metadata &metadata)
140  {
141  m_staticMetadata.addEntry(name, &metadata);
142  }
143 
144  AtomsPtr<AtomsCore::Metadata> JointClipData::getStaticMetadata(const std::string &name)
145  {
146  return m_staticMetadata.getEntry(name);
147  }
148 
149  AtomsPtr<const AtomsCore::Metadata> JointClipData::getStaticMetadata(const std::string &name) const
150  {
151  return m_staticMetadata.getEntry(name);
152  }
153 
154  AtomsCore::MapMetadata& JointClipData::staticMetadata()
155  {
156  return m_staticMetadata;
157  }
158 
159  const AtomsCore::MapMetadata& JointClipData::staticMetadata() const
160  {
161  return m_staticMetadata;
162  }
163 
164  std::map<std::string, AtomsPtr<AtomsCore::BaseTypedArrayMetadata>>& JointClipData::metadata()
165  {
166  return m_metadata;
167  }
168 
169  const std::map<std::string, AtomsPtr<AtomsCore::BaseTypedArrayMetadata>>& JointClipData::metadata() const
170  {
171  return m_metadata;
172  }
173 
174  bool JointClipData::isTransformAnimated() const
175  {
176  return m_isTransformAnimated;
177  }
178 
179  inline const std::vector<std::string>& JointClipData::animatedMetadata() const
180  {
181  return m_animatedMetadata;
182  }
183 
184  /***************************
185  AnimationClip
186  ***************************/
188  {
189  return static_cast<int>(m_joints.size());
190  }
191 
193  {
194  return m_numberOfFrames;
195  }
196 
197  double AnimationClip::fps() const
198  {
199  return m_fps;
200  }
201 
202  void AnimationClip::setFps(double value)
203  {
204  m_fps = value;
205  }
206 
207  unsigned int AnimationClip::mapTimeToFrame(const double time, double &reminder) const
208  {
209  double f = time * m_fps;
210  unsigned int ret = static_cast<unsigned int>(f);
211  reminder = f - ret;
212  return ret;
213  }
214 
215  void AnimationClip::setJointName(const unsigned int index, const std::string &jointName)
216  {
217  m_jointIndex[jointName] = index;
218  m_joints[index].setName(jointName);
219  }
220 
221  int AnimationClip::jointId(const std::string& jointName) const
222  {
223  auto it = m_jointIndex.find(jointName);
224  return it != m_jointIndex.end() ? it->second : -1;
225  }
226 
227  inline JointClipData& AnimationClip::operator[](unsigned short index)
228  {
229  return m_joints[index];
230  }
231 
232  inline const JointClipData& AnimationClip::operator[](unsigned short index) const
233  {
234  return m_joints[index];
235  }
236 
237  JointClipData& AnimationClip::at(unsigned short index)
238  {
239  return m_joints.at(index);
240  }
241 
242  const JointClipData& AnimationClip::at(unsigned short index) const
243  {
244  return m_joints.at(index);
245  }
246 
248  {
249  return m_metadata;
250  }
251 
253  {
254  return m_metadata;
255  }
256 
258  {
259  m_direction = direction;
260  }
261 
263  {
264  return m_direction;
265  }
266 
267  void AnimationClip::setDirectionType(unsigned int directionType)
268  {
269  m_directionType = directionType;
270  }
271 
272  unsigned int AnimationClip::directionType() const
273  {
274  return m_directionType;
275  }
276 
277  void AnimationClip::setDirectionFromJoints(unsigned int fromJoint, unsigned int toJoint)
278  {
279  m_directionFromJoints.first = fromJoint;
280  m_directionFromJoints.second = toJoint;
281  }
282 
283 
284  const std::pair<unsigned int, unsigned int>& AnimationClip::directionFromJoints() const
285  {
286  return m_directionFromJoints;
287  }
288 
290  {
291  m_isFootLockDisabled = value;
292  }
293 
295  {
296  return m_isFootLockDisabled;
297  }
298 
299  const std::vector<int>& AnimationClip::transitionFrames() const
300  {
301  return m_transitionFrames;
302  }
303 
304  unsigned int AnimationClip::additiveMode() const
305  {
306  return m_additiveMode;
307  }
308 
309  const std::string & AnimationClip::additiveReferenceClip() const
310  {
311  return m_additiveReferenceClip;
312  }
313 
314 }
Atoms::AnimationClip::directionFromJoints
const std::pair< unsigned int, unsigned int > & directionFromJoints() const
Gets the two joint ids used for evaluating the direction when the direction type is set to kJoints.
Definition: AnimationClip.impl.h:284
Atoms::JointClipData::setTranslation
void setTranslation(const AtomsCore::Vector3 &translation, const unsigned int frame)
Sets translation at frame.
Definition: AnimationClip.impl.h:24
Atoms::AnimationClip::transitionFrames
const std::vector< int > & transitionFrames() const
Gets the transition frames.
Definition: AnimationClip.impl.h:299
AtomsCore::MapMetadata::getEntry
AtomsPtr< Metadata > getEntry(const Key &key)
Get an entry.
AtomsCore::Quaternion
AtomsMath::Quaternion Quaternion
Quaternion class.
Definition: AtomsMath.h:67
Atoms::JointClipData::getRotation
const AtomsCore::Quaternion & getRotation(const unsigned int frame) const
Gets rotation at frame.
Definition: AnimationClip.impl.h:47
Atoms::AnimationClip::direction
AtomsCore::Vector3 direction() const
Gets the clip direction.
Definition: AnimationClip.impl.h:262
Atoms::AnimationClip::setDirectionType
void setDirectionType(unsigned int directionType)
Sets the clip direction type.
Definition: AnimationClip.impl.h:267
Atoms::AnimationClip::operator[]
JointClipData & operator[](unsigned short index)
Gets joint clip data.
Definition: AnimationClip.impl.h:227
Atoms::JointClipData::name
const std::string & name() const
Gets name.
Definition: AnimationClip.impl.h:14
Atoms::JointClipData::getTranslation
const AtomsCore::Vector3 & getTranslation(const unsigned int frame) const
Gets translation at frame.
Definition: AnimationClip.impl.h:42
Atoms::JointClipData::setScale
void setScale(const AtomsCore::Vector3 &scale, const unsigned int frame)
Sets scale at frame.
Definition: AnimationClip.impl.h:36
Atoms::AnimationClip::jointId
int jointId(const std::string &jointName) const
Get joint index from joint name.
Definition: AnimationClip.impl.h:221
AtomsCore::Metadata
Base Metadata class.
Definition: Metadata.h:24
Atoms::AnimationClip::setDirectionFromJoints
void setDirectionFromJoints(unsigned int fromJoint, unsigned int toJoint)
Sets the two joint ids used for evaluating the direction when the direction type is set to kJoints.
Definition: AnimationClip.impl.h:277
AtomsCore::MapMetadata::getKeys
std::vector< Key > getKeys() const
Get keys.
AtomsCore::MetadataFactory::instance
static MetadataFactory & instance()
Singleton access.
Atoms::AnimationClip::additiveMode
unsigned int additiveMode() const
Gets the clip additive mode.
Definition: AnimationClip.impl.h:304
AtomsCore::MapMetadata::addEntry
void addEntry(const Key &key, AtomsPtr< Metadata > &data, bool cloneData=true)
Add an entry.
AtomsCore::MetadataFactory::createMetadata
AtomsPtr< Metadata > createMetadata(const std::string &typeName)
Create a metadata.
AtomsCore::Vector3
AtomsMath::Vector3 Vector3
Vector3 class.
Definition: AtomsMath.h:57
Atoms::JointClipData::getScale
const AtomsCore::Vector3 & getScale(const unsigned int frame) const
Gets scale at frame.
Definition: AnimationClip.impl.h:52
Atoms::JointClipData::setName
void setName(const std::string &name)
Sets name.
Definition: AnimationClip.impl.h:19
Atoms
Atoms namespace.
Definition: Agent.h:28
Atoms::AnimationClip::isFootLockDisabled
bool isFootLockDisabled() const
Returns false if the the foot lock is disabled.
Definition: AnimationClip.impl.h:294
Atoms::AnimationClip::at
JointClipData & at(unsigned short index)
Gets joint clip data.
Definition: AnimationClip.impl.h:237
AtomsCore::MapMetadata
MapMetadata class.
Definition: MapMetadata.h:24
Atoms::AnimationClip::setJointName
void setJointName(const unsigned int index, const std::string &jointName)
Sets the joint name.
Definition: AnimationClip.impl.h:215
Atoms::AnimationClip::disableFootLock
void disableFootLock(bool value)
Sets the clip foot lock state.
Definition: AnimationClip.impl.h:289
Atoms::AnimationClip::metadata
AtomsCore::MapMetadata & metadata()
Gets metadata map.
Definition: AnimationClip.impl.h:247
Atoms::JointClipData
Joint Clip data.
Definition: AnimationClip.h:37
Atoms::AnimationClip::numFrames
int numFrames() const
Gets the number of frames.
Definition: AnimationClip.impl.h:192
Atoms::AnimationClip::setFps
void setFps(double value)
Sets the frame per second.
Definition: AnimationClip.impl.h:202
Atoms::AnimationClip::fps
double fps() const
Gets the frame per second.
Definition: AnimationClip.impl.h:197
Atoms::AnimationClip::numJoints
int numJoints() const
Gets the number of joints.
Definition: AnimationClip.impl.h:187
Atoms::AnimationClip::directionType
unsigned int directionType() const
Gets the clip direction type.
Definition: AnimationClip.impl.h:272
Atoms::AnimationClip::setDirection
void setDirection(const AtomsCore::Vector3 &direction)
Sets the clip direction.
Definition: AnimationClip.impl.h:257
Atoms::JointClipData::setRotation
void setRotation(const AtomsCore::Quaternion &rotation, const unsigned int frame)
Sets rotation at frame.
Definition: AnimationClip.impl.h:30
Atoms::AnimationClip::mapTimeToFrame
unsigned int mapTimeToFrame(const double time, double &reminder) const
Maps time to frame.
Definition: AnimationClip.impl.h:207
Atoms::AnimationClip::additiveReferenceClip
const std::string & additiveReferenceClip() const
Gets the clip additive mode.
Definition: AnimationClip.impl.h:309