diff options
author | prep linden <prep@lindenlab.com> | 2010-10-05 14:14:37 -0400 |
---|---|---|
committer | prep linden <prep@lindenlab.com> | 2010-10-05 14:14:37 -0400 |
commit | 70b2ace13130b3a0d881fb87cff0167ed811f560 (patch) | |
tree | c9360245f9757c6c2698d40fbd8db4e1efe74ddb /indra/llcharacter | |
parent | 7be98bc20f53d6c418e01842da89c62c4002991d (diff) |
Reset joint positions after detaching a rigged model
Diffstat (limited to 'indra/llcharacter')
-rw-r--r-- | indra/llcharacter/lljoint.cpp | 19 | ||||
-rw-r--r-- | indra/llcharacter/lljoint.h | 8 |
2 files changed, 26 insertions, 1 deletions
diff --git a/indra/llcharacter/lljoint.cpp b/indra/llcharacter/lljoint.cpp index 2449b01e15..522d760c7d 100644 --- a/indra/llcharacter/lljoint.cpp +++ b/indra/llcharacter/lljoint.cpp @@ -239,6 +239,17 @@ void LLJoint::setPosition( const LLVector3& pos ) } } + +//-------------------------------------------------------------------- +// setPosition() +//-------------------------------------------------------------------- +void LLJoint::setDefaultFromCurrentXform( void ) +{ + mDefaultXform = mXform; + touch(MATRIX_DIRTY | POSITION_DIRTY); + +} + //-------------------------------------------------------------------- // storeCurrentXform() //-------------------------------------------------------------------- @@ -254,6 +265,14 @@ void LLJoint::restoreOldXform( void ) { mXform = mOldXform; } +//-------------------------------------------------------------------- +// restoreOldXform() +//-------------------------------------------------------------------- +void LLJoint::restoreToDefaultXform( void ) +{ + mXform = mDefaultXform; + setPosition( mXform.getPosition() ); +} //-------------------------------------------------------------------- // getWorldPosition() diff --git a/indra/llcharacter/lljoint.h b/indra/llcharacter/lljoint.h index cf644e899f..6506f8ad03 100644 --- a/indra/llcharacter/lljoint.h +++ b/indra/llcharacter/lljoint.h @@ -87,6 +87,7 @@ protected: // explicit transformation members LLXformMatrix mXform; LLXformMatrix mOldXform; + LLXformMatrix mDefaultXform; public: U32 mDirtyFlags; @@ -137,7 +138,9 @@ public: // get/set local position const LLVector3& getPosition(); void setPosition( const LLVector3& pos ); - + + void setDefaultPosition( const LLVector3& pos ); + // get/set world position LLVector3 getWorldPosition(); LLVector3 getLastWorldPosition(); @@ -181,6 +184,9 @@ public: void setJointNum(S32 joint_num) { mJointNum = joint_num; } void restoreOldXform( void ); + void restoreToDefaultXform( void ); + void setDefaultFromCurrentXform( void ); + void storeCurrentXform( const LLVector3& pos ); }; #endif // LL_LLJOINT_H |