From 91980918f0341bec0145156875d22503e8beea4e Mon Sep 17 00:00:00 2001
From: prep linden <prep@lindenlab.com>
Date: Wed, 4 May 2011 17:18:31 -0400
Subject: Fix for Sh-1481

---
 indra/newview/llfloatermodelpreview.cpp | 16 +++++++---------
 indra/newview/llfloatermodelpreview.h   |  8 ++++++--
 2 files changed, 13 insertions(+), 11 deletions(-)

diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp
index ae0e1b7d46..afe57ebb70 100644
--- a/indra/newview/llfloatermodelpreview.cpp
+++ b/indra/newview/llfloatermodelpreview.cpp
@@ -1560,14 +1560,14 @@ bool LLModelLoader::doLoadModel()
 						//(which means we have all the joints that are required for an avatar versus
 						//a skinned asset attached to a node in a file that contains an entire skeleton,
 						//but does not use the skeleton).						
-						
+						buildJointToNodeMappingFromScene( root );
 						mPreview->critiqueRigForUploadApplicability( model->mSkinInfo.mJointNames );
 										
 						if ( !missingSkeletonOrScene )
 						{
 							//Set the joint translations on the avatar - if it's a full mapping
 							//The joints are reset in the dtor
-							if ( mPreview->getResetJointFlag() )
+							if ( mPreview->getRigWithSceneParity() )
 							{	
 								std::map<std::string, std::string> :: const_iterator masterJointIt = mJointMap.begin();
 								std::map<std::string, std::string> :: const_iterator masterJointItEnd = mJointMap.end();
@@ -1774,10 +1774,6 @@ bool LLModelLoader::doLoadModel()
 	
 	handlePivotPoint( root );
 
-	buildJointToNodeMappingFromScene( root );
-	
-	mPreview->critiqueJointToNodeMappingFromScene();
-
 	return true;
 }
 
@@ -2016,6 +2012,8 @@ void LLModelLoader::handlePivotPoint( daeElement* pRoot )
 //-----------------------------------------------------------------------------
 void LLModelPreview::critiqueRigForUploadApplicability( const std::vector<std::string> &jointListFromAsset )
 {
+	critiqueJointToNodeMappingFromScene();
+	
 	//Determines the following use cases for a rig:
 	//1. It is suitable for upload with skin weights & joint positions, or
 	//2. It is suitable for upload as standard av with just skin weights
@@ -2034,7 +2032,7 @@ void LLModelPreview::critiqueRigForUploadApplicability( const std::vector<std::s
 		setLegacyRigValid( true );
 	}
 
-	if ( isJointPositionUploadOK )
+	if ( getRigWithSceneParity() && isJointPositionUploadOK )
 	{
 		setResetJointFlag( true );
 	}
@@ -2078,12 +2076,11 @@ void LLModelPreview::critiqueJointToNodeMappingFromScene( void  )
 	if ( result )
 	{		
 		setResetJointFlag( true );
-		//llinfos<<"Full"<<llendl;
+		setRigWithSceneParity( true );
 	}
 	else
 	{
 		setResetJointFlag( false );
-		//llinfos<<"Partial"<<llendl;
 	}	
 }
 //-----------------------------------------------------------------------------
@@ -2650,6 +2647,7 @@ LLModelPreview::LLModelPreview(S32 width, S32 height, LLFloater* fmp)
 , mLegacyRigValid( false )
 , mRigValidJointUpload( false )
 , mResetJoints( false )
+, mRigParityWithScene( false )
 , mLastJointUpdate( false )
 {
 	mNeedsUpdate = TRUE;
diff --git a/indra/newview/llfloatermodelpreview.h b/indra/newview/llfloatermodelpreview.h
index 7927edcd36..92104c01f4 100644
--- a/indra/newview/llfloatermodelpreview.h
+++ b/indra/newview/llfloatermodelpreview.h
@@ -339,8 +339,10 @@ public:
 	U32 getLoadState() { return mLoadState; }
 	//setRestJointFlag: If an asset comes through that changes the joints, we want the reset to persist
 	void setResetJointFlag( bool state ) { if ( !mResetJoints ) mResetJoints = state; }
-	bool getResetJointFlag( void ) { return mResetJoints; }
-
+	const bool getResetJointFlag( void ) const { return mResetJoints; }
+	void setRigWithSceneParity( bool state ) { mRigParityWithScene = state; }
+	const bool getRigWithSceneParity( void ) const { return mRigParityWithScene; }
+	
 	LLVector3 getTranslationForJointOffset( std::string joint );
 
  protected:
@@ -370,6 +372,8 @@ public:
 	bool		mLoading;
 	U32			mLoadState;
 	bool		mResetJoints;
+	bool		mRigParityWithScene;
+	
 	std::map<std::string, bool> mViewOption;
 
 	//GLOD object parameters (must rebuild object if these change)
-- 
cgit v1.2.3