From 7fec81b102e92e1a4e5a36fde077ef9b82cc7123 Mon Sep 17 00:00:00 2001 From: "Brad Payne (Vir Linden)" Date: Mon, 3 Nov 2014 05:46:31 -0500 Subject: SL-93 WIP - pelvis fixup offsets --- indra/llcharacter/lljoint.cpp | 8 ++++++++ indra/llcharacter/lljoint.h | 1 + indra/newview/llvoavatar.cpp | 21 +++++++++++++++++++++ indra/newview/llvovolume.cpp | 9 ++++++--- 4 files changed, 36 insertions(+), 3 deletions(-) diff --git a/indra/llcharacter/lljoint.cpp b/indra/llcharacter/lljoint.cpp index 5e54215739..af5393ef03 100755 --- a/indra/llcharacter/lljoint.cpp +++ b/indra/llcharacter/lljoint.cpp @@ -339,6 +339,14 @@ void LLJoint::removeAttachmentPosOverride( const LLUUID& mesh_id, const std::str } +//-------------------------------------------------------------------- + // hasAttachmentPosOverride() + //-------------------------------------------------------------------- +bool LLJoint::hasAttachmentPosOverride( LLVector3& pos, LLUUID& mesh_id ) const +{ + return m_attachmentOverrides.findActiveOverride(mesh_id,pos); +} + //-------------------------------------------------------------------- // updatePos() //-------------------------------------------------------------------- diff --git a/indra/llcharacter/lljoint.h b/indra/llcharacter/lljoint.h index f8639af3de..56da8e83b2 100755 --- a/indra/llcharacter/lljoint.h +++ b/indra/llcharacter/lljoint.h @@ -201,6 +201,7 @@ public: void addAttachmentPosOverride( const LLVector3& pos, const LLUUID& mesh_id, const std::string& av_info ); void removeAttachmentPosOverride( const LLUUID& mesh_id, const std::string& av_info ); + bool hasAttachmentPosOverride( LLVector3& pos, LLUUID& mesh_id ) const; //Accessor for the joint id LLUUID getId( void ) { return mId; } diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index fb25a2ddec..dd5941191a 100755 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -7674,6 +7674,27 @@ void LLVOAvatar::dumpArchetypeXML(const std::string& prefix, bool group_by_weara pJoint->getName().c_str(), pos[0], pos[1], pos[2], scale[0], scale[1], scale[2]); } + for (iter = mSkeleton.begin(); iter != end; ++iter) + { + LLJoint* pJoint = (*iter); + + LLVector3 pos; + LLUUID mesh_id; + + if (pJoint->hasAttachmentPosOverride(pos,mesh_id)) + { + apr_file_printf( file, "\t\t\n", + pJoint->getName().c_str(), pos[0], pos[1], pos[2], mesh_id.asString().c_str()); + } + } + F32 pelvis_fixup; + LLUUID mesh_id; + if (hasPelvisFixup(pelvis_fixup, mesh_id)) + { + apr_file_printf( file, "\t\t\n", + pelvis_fixup, mesh_id.asString().c_str()); + } + apr_file_printf( file, "\t\n" ); apr_file_printf( file, "\n\n" ); diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 7c9bdc19a6..aebd9f470d 100755 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -4613,6 +4613,7 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group) { const int jointCnt = pSkinData->mJointNames.size(); const F32 pelvisZOffset = pSkinData->mPelvisOffset; + const LLUUID& mesh_id = pSkinData->mMeshID; bool fullRig = (jointCnt>=JOINT_COUNT_REQUIRED_FOR_FULLRIG) ? true : false; if ( fullRig ) { @@ -4626,18 +4627,20 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group) const LLVector3& jointPos = pSkinData->mAlternateBindMatrix[i].getTranslation(); //Set the joint position - const LLUUID& mesh_id = pSkinData->mMeshID; pJoint->addAttachmentPosOverride( jointPos, mesh_id, pAvatarVO->avString() ); //If joint is a pelvis then handle old/new pelvis to foot values if ( lookingForJoint == "mPelvis" ) { - // FIXME move - pAvatarVO->addPelvisFixup( pelvisZOffset, mesh_id ); pelvisGotSet = true; } } } + if (pelvisZOffset != 0.0F) + { + pAvatarVO->addPelvisFixup( pelvisZOffset, mesh_id ); + pelvisGotSet = true; + } } } } -- cgit v1.2.3