Changeset 461 for cafu/trunk
- Timestamp:
- 01/11/12 12:26:16 (4 months ago)
- Location:
- cafu/trunk/Libs/Models
- Files:
-
- 2 modified
-
AnimExpr.cpp (modified) (19 diffs)
-
AnimExpr.hpp (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
cafu/trunk/Libs/Models/AnimExpr.cpp
r460 r461 143 143 144 144 145 IntrusivePtrT<AnimExpressionT>AnimExprStandardT::Clone() const145 AnimExpressionPtrT AnimExprStandardT::Clone() const 146 146 { 147 147 return GetModel().GetAnimExprPool().GetStandard(m_SequNr, m_FrameNr); … … 149 149 150 150 151 bool AnimExprStandardT::IsEqual(const IntrusivePtrT<AnimExpressionT>& AE) const151 bool AnimExprStandardT::IsEqual(const AnimExpressionPtrT& AE) const 152 152 { 153 153 AnimExprStandardT* Other=dynamic_cast<AnimExprStandardT*>(AE.get()); … … 195 195 196 196 197 AnimExprFilterT::AnimExprFilterT(const CafuModelT& Model, IntrusivePtrT<AnimExpressionT>SubExpr, unsigned int ChannelNr)197 AnimExprFilterT::AnimExprFilterT(const CafuModelT& Model, AnimExpressionPtrT SubExpr, unsigned int ChannelNr) 198 198 : AnimExpressionT(Model), 199 199 m_SubExpr(SubExpr), … … 203 203 204 204 205 AnimExprFilterT::AnimExprFilterT(const CafuModelT& Model, IntrusivePtrT<AnimExpressionT>SubExpr, const std::string& ChannelName)205 AnimExprFilterT::AnimExprFilterT(const CafuModelT& Model, AnimExpressionPtrT SubExpr, const std::string& ChannelName) 206 206 : AnimExpressionT(Model), 207 207 m_SubExpr(SubExpr), … … 211 211 212 212 213 void AnimExprFilterT::ReInit( IntrusivePtrT<AnimExpressionT>SubExpr, unsigned int ChannelNr)213 void AnimExprFilterT::ReInit(AnimExpressionPtrT SubExpr, unsigned int ChannelNr) 214 214 { 215 215 if (m_SubExpr==SubExpr && m_ChannelNr==ChannelNr) return; … … 231 231 232 232 233 IntrusivePtrT<AnimExpressionT>AnimExprFilterT::Clone() const233 AnimExpressionPtrT AnimExprFilterT::Clone() const 234 234 { 235 235 return GetModel().GetAnimExprPool().GetFilter(m_SubExpr->Clone(), m_ChannelNr); … … 237 237 238 238 239 bool AnimExprFilterT::IsEqual(const IntrusivePtrT<AnimExpressionT>& AE) const239 bool AnimExprFilterT::IsEqual(const AnimExpressionPtrT& AE) const 240 240 { 241 241 AnimExprFilterT* Other=dynamic_cast<AnimExprFilterT*>(AE.get()); … … 250 250 /************************/ 251 251 252 AnimExprCombineT::AnimExprCombineT(const CafuModelT& Model, IntrusivePtrT<AnimExpressionT> A, IntrusivePtrT<AnimExpressionT>B)252 AnimExprCombineT::AnimExprCombineT(const CafuModelT& Model, AnimExpressionPtrT A, AnimExpressionPtrT B) 253 253 : AnimExpressionT(Model), 254 254 m_A(A), … … 258 258 259 259 260 void AnimExprCombineT::ReInit( IntrusivePtrT<AnimExpressionT> A, IntrusivePtrT<AnimExpressionT>B)260 void AnimExprCombineT::ReInit(AnimExpressionPtrT A, AnimExpressionPtrT B) 261 261 { 262 262 if (m_A==A && m_B==B) return; … … 296 296 297 297 298 IntrusivePtrT<AnimExpressionT>AnimExprCombineT::Clone() const298 AnimExpressionPtrT AnimExprCombineT::Clone() const 299 299 { 300 300 return GetModel().GetAnimExprPool().GetCombine(m_A->Clone(), m_B->Clone()); … … 302 302 303 303 304 bool AnimExprCombineT::IsEqual(const IntrusivePtrT<AnimExpressionT>& AE) const304 bool AnimExprCombineT::IsEqual(const AnimExpressionPtrT& AE) const 305 305 { 306 306 AnimExprCombineT* Other=dynamic_cast<AnimExprCombineT*>(AE.get()); … … 315 315 /**********************/ 316 316 317 AnimExprBlendT::AnimExprBlendT(const CafuModelT& Model, IntrusivePtrT<AnimExpressionT> A, IntrusivePtrT<AnimExpressionT>B, float Duration)317 AnimExprBlendT::AnimExprBlendT(const CafuModelT& Model, AnimExpressionPtrT A, AnimExpressionPtrT B, float Duration) 318 318 : AnimExpressionT(Model), 319 319 m_A(A), … … 325 325 326 326 327 void AnimExprBlendT::ReInit( IntrusivePtrT<AnimExpressionT> A, IntrusivePtrT<AnimExpressionT>B, float Duration)327 void AnimExprBlendT::ReInit(AnimExpressionPtrT A, AnimExpressionPtrT B, float Duration) 328 328 { 329 329 m_A=A; … … 395 395 396 396 397 IntrusivePtrT<AnimExpressionT>AnimExprBlendT::Clone() const397 AnimExpressionPtrT AnimExprBlendT::Clone() const 398 398 { 399 399 IntrusivePtrT<AnimExprBlendT> Blend=GetModel().GetAnimExprPool().GetBlend(m_A->Clone(), m_B->Clone(), m_Duration); … … 404 404 405 405 406 bool AnimExprBlendT::IsEqual(const IntrusivePtrT<AnimExpressionT>& AE) const406 bool AnimExprBlendT::IsEqual(const AnimExpressionPtrT& AE) const 407 407 { 408 408 AnimExprBlendT* Other=dynamic_cast<AnimExprBlendT*>(AE.get()); … … 457 457 458 458 459 IntrusivePtrT<AnimExprFilterT> AnimExprPoolT::GetFilter( IntrusivePtrT<AnimExpressionT>SubExpr, unsigned int ChannelNr)459 IntrusivePtrT<AnimExprFilterT> AnimExprPoolT::GetFilter(AnimExpressionPtrT SubExpr, unsigned int ChannelNr) 460 460 { 461 461 FlattenUnused(); … … 478 478 479 479 480 IntrusivePtrT<AnimExprFilterT> AnimExprPoolT::GetFilter( IntrusivePtrT<AnimExpressionT>SubExpr, const std::string& ChannelName)480 IntrusivePtrT<AnimExprFilterT> AnimExprPoolT::GetFilter(AnimExpressionPtrT SubExpr, const std::string& ChannelName) 481 481 { 482 482 return GetFilter(SubExpr, FindChannelByName(m_Model, ChannelName)); … … 484 484 485 485 486 IntrusivePtrT<AnimExprCombineT> AnimExprPoolT::GetCombine( IntrusivePtrT<AnimExpressionT> A, IntrusivePtrT<AnimExpressionT>B)486 IntrusivePtrT<AnimExprCombineT> AnimExprPoolT::GetCombine(AnimExpressionPtrT A, AnimExpressionPtrT B) 487 487 { 488 488 FlattenUnused(); … … 505 505 506 506 507 IntrusivePtrT<AnimExprBlendT> AnimExprPoolT::GetBlend( IntrusivePtrT<AnimExpressionT> A, IntrusivePtrT<AnimExpressionT>B, float Duration)507 IntrusivePtrT<AnimExprBlendT> AnimExprPoolT::GetBlend(AnimExpressionPtrT A, AnimExpressionPtrT B, float Duration) 508 508 { 509 509 FlattenUnused(); -
cafu/trunk/Libs/Models/AnimExpr.hpp
r460 r461 76 76 /// Creates a new anim expression that is an exact copy of this, even when called 77 77 /// via the base class pointer (the caller doesn't need to know the exact derived class). 78 virtual IntrusivePtrT<AnimExpressionT>Clone() const=0;78 virtual AnimExpressionPtrT Clone() const=0; 79 79 80 80 /// Returns whether this anim expression is equal to \c A. 81 81 /// Two anim expressions are equal if their GetData() methods return the same data. 82 virtual bool IsEqual(const IntrusivePtrT<AnimExpressionT>& AE) const=0;82 virtual bool IsEqual(const AnimExpressionPtrT& AE) const=0; 83 83 84 84 … … 104 104 virtual void GetData(unsigned int JointNr, float& Weight, Vector3fT& Pos, cf::math::QuaternionfT& Quat, Vector3fT& Scale) const; 105 105 virtual void AdvanceTime(float Time, bool ForceLoop=false); 106 virtual IntrusivePtrT<AnimExpressionT>Clone() const; // Unfortunately, the proper covariant return type cannot be used with smart pointers.107 virtual bool IsEqual(const IntrusivePtrT<AnimExpressionT>& AE) const;106 virtual AnimExpressionPtrT Clone() const; // Unfortunately, the proper covariant return type cannot be used with smart pointers. 107 virtual bool IsEqual(const AnimExpressionPtrT& AE) const; 108 108 109 109 /// Returns the sequence number that is currently set in this expression. … … 136 136 public: 137 137 138 AnimExprFilterT(const CafuModelT& Model, IntrusivePtrT<AnimExpressionT>SubExpr, unsigned int ChannelNr);139 AnimExprFilterT(const CafuModelT& Model, IntrusivePtrT<AnimExpressionT>SubExpr, const std::string& ChannelName);138 AnimExprFilterT(const CafuModelT& Model, AnimExpressionPtrT SubExpr, unsigned int ChannelNr); 139 AnimExprFilterT(const CafuModelT& Model, AnimExpressionPtrT SubExpr, const std::string& ChannelName); 140 140 141 141 /// Re-initializes this anim expression, so that it can be re-used with different parameters (on the same model). 142 void ReInit( IntrusivePtrT<AnimExpressionT>SubExpr, unsigned int ChannelNr);142 void ReInit(AnimExpressionPtrT SubExpr, unsigned int ChannelNr); 143 143 144 144 // Implementations and overrides for base class methods. 145 145 virtual void GetData(unsigned int JointNr, float& Weight, Vector3fT& Pos, cf::math::QuaternionfT& Quat, Vector3fT& Scale) const; 146 146 virtual void AdvanceTime(float Time, bool ForceLoop=false) { m_SubExpr->AdvanceTime(Time, ForceLoop); } 147 virtual IntrusivePtrT<AnimExpressionT>Clone() const; // Unfortunately, the proper covariant return type cannot be used with smart pointers.148 virtual bool IsEqual(const IntrusivePtrT<AnimExpressionT>& AE) const;149 150 151 private: 152 153 IntrusivePtrT<AnimExpressionT>m_SubExpr;154 unsigned int m_ChannelNr;147 virtual AnimExpressionPtrT Clone() const; // Unfortunately, the proper covariant return type cannot be used with smart pointers. 148 virtual bool IsEqual(const AnimExpressionPtrT& AE) const; 149 150 151 private: 152 153 AnimExpressionPtrT m_SubExpr; 154 unsigned int m_ChannelNr; 155 155 }; 156 156 … … 160 160 public: 161 161 162 AnimExprCombineT(const CafuModelT& Model, IntrusivePtrT<AnimExpressionT> A, IntrusivePtrT<AnimExpressionT>B);162 AnimExprCombineT(const CafuModelT& Model, AnimExpressionPtrT A, AnimExpressionPtrT B); 163 163 164 164 /// Re-initializes this anim expression, so that it can be re-used with different parameters (on the same model). 165 void ReInit( IntrusivePtrT<AnimExpressionT> A, IntrusivePtrT<AnimExpressionT>B);165 void ReInit(AnimExpressionPtrT A, AnimExpressionPtrT B); 166 166 167 167 // Implementations and overrides for base class methods. 168 168 virtual void GetData(unsigned int JointNr, float& Weight, Vector3fT& Pos, cf::math::QuaternionfT& Quat, Vector3fT& Scale) const; 169 169 virtual void AdvanceTime(float Time, bool ForceLoop=false); 170 virtual IntrusivePtrT<AnimExpressionT>Clone() const; // Unfortunately, the proper covariant return type cannot be used with smart pointers.171 virtual bool IsEqual(const IntrusivePtrT<AnimExpressionT>& AE) const;172 173 174 private: 175 176 IntrusivePtrT<AnimExpressionT>m_A;177 IntrusivePtrT<AnimExpressionT>m_B;170 virtual AnimExpressionPtrT Clone() const; // Unfortunately, the proper covariant return type cannot be used with smart pointers. 171 virtual bool IsEqual(const AnimExpressionPtrT& AE) const; 172 173 174 private: 175 176 AnimExpressionPtrT m_A; 177 AnimExpressionPtrT m_B; 178 178 }; 179 179 … … 183 183 public: 184 184 185 AnimExprBlendT(const CafuModelT& Model, IntrusivePtrT<AnimExpressionT> A, IntrusivePtrT<AnimExpressionT>B, float Duration);185 AnimExprBlendT(const CafuModelT& Model, AnimExpressionPtrT A, AnimExpressionPtrT B, float Duration); 186 186 187 187 /// Re-initializes this anim expression, so that it can be re-used with different parameters (on the same model). 188 188 /// Note that resetting \c A, \c B or \c Duration individually is not possible, because the implementation 189 189 /// may prune and drop \c A when the blend is complete. 190 void ReInit( IntrusivePtrT<AnimExpressionT> A, IntrusivePtrT<AnimExpressionT>B, float Duration);190 void ReInit(AnimExpressionPtrT A, AnimExpressionPtrT B, float Duration); 191 191 192 192 /// Returns the "blend from" sub-expression. 193 IntrusivePtrT<AnimExpressionT>GetA() const { return m_A; }193 AnimExpressionPtrT GetA() const { return m_A; } 194 194 195 195 /// Returns the "blend to" sub-expression. 196 IntrusivePtrT<AnimExpressionT>GetB() const { return m_B; }196 AnimExpressionPtrT GetB() const { return m_B; } 197 197 198 198 /// Returns how far the blend has advanced. … … 202 202 virtual void GetData(unsigned int JointNr, float& Weight, Vector3fT& Pos, cf::math::QuaternionfT& Quat, Vector3fT& Scale) const; 203 203 virtual void AdvanceTime(float Time, bool ForceLoop=false); 204 virtual IntrusivePtrT<AnimExpressionT>Clone() const; // Unfortunately, the proper covariant return type cannot be used with smart pointers.205 virtual bool IsEqual(const IntrusivePtrT<AnimExpressionT>& AE) const;206 207 208 private: 209 210 IntrusivePtrT<AnimExpressionT>m_A;211 IntrusivePtrT<AnimExpressionT>m_B;212 float m_Duration;213 float m_Frac;204 virtual AnimExpressionPtrT Clone() const; // Unfortunately, the proper covariant return type cannot be used with smart pointers. 205 virtual bool IsEqual(const AnimExpressionPtrT& AE) const; 206 207 208 private: 209 210 AnimExpressionPtrT m_A; 211 AnimExpressionPtrT m_B; 212 float m_Duration; 213 float m_Frac; 214 214 }; 215 215 … … 223 223 // These methods mimic the ctors of the anim expression classes. 224 224 IntrusivePtrT<AnimExprStandardT> GetStandard(int SequNr, float FrameNr); 225 IntrusivePtrT<AnimExprFilterT> GetFilter( IntrusivePtrT<AnimExpressionT>SubExpr, unsigned int ChannelNr);226 IntrusivePtrT<AnimExprFilterT> GetFilter( IntrusivePtrT<AnimExpressionT>SubExpr, const std::string& ChannelName);227 IntrusivePtrT<AnimExprCombineT> GetCombine( IntrusivePtrT<AnimExpressionT> A, IntrusivePtrT<AnimExpressionT>B);228 IntrusivePtrT<AnimExprBlendT> GetBlend( IntrusivePtrT<AnimExpressionT> A, IntrusivePtrT<AnimExpressionT>B, float Duration);225 IntrusivePtrT<AnimExprFilterT> GetFilter(AnimExpressionPtrT SubExpr, unsigned int ChannelNr); 226 IntrusivePtrT<AnimExprFilterT> GetFilter(AnimExpressionPtrT SubExpr, const std::string& ChannelName); 227 IntrusivePtrT<AnimExprCombineT> GetCombine(AnimExpressionPtrT A, AnimExpressionPtrT B); 228 IntrusivePtrT<AnimExprBlendT> GetBlend(AnimExpressionPtrT A, AnimExpressionPtrT B, float Duration); 229 229 230 230
