diff options
| -rwxr-xr-x | indra/llcharacter/lljoint.cpp | 8 | ||||
| -rwxr-xr-x | indra/llcharacter/lljoint.h | 1 | ||||
| -rwxr-xr-x | indra/newview/llvoavatar.cpp | 21 | ||||
| -rwxr-xr-x | 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 @@ -340,6 +340,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()  //--------------------------------------------------------------------  void LLJoint::updatePos(const std::string& av_info) 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<joint_offset name=\"%s\" position=\"%f %f %f\" mesh_id=\"%s\"/>\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<pelvis_fixup z=\"%f\" mesh_id=\"%s\"/>\n",  +						 pelvis_fixup, mesh_id.asString().c_str()); +	} +  	apr_file_printf( file, "\t</archetype>\n" );  	apr_file_printf( file, "\n</linden_genepool>\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;											 +									}  								}							  							}  						} | 
