SL-395 - can enable/disable scale lock in mesh upload UI. Feature works.
parent
34ced1aa2c
commit
6c46b3caf2
|
|
@ -671,6 +671,7 @@ LLSD LLModel::writeModel(
|
|||
const LLModel::Decomposition& decomp,
|
||||
BOOL upload_skin,
|
||||
BOOL upload_joints,
|
||||
BOOL lock_scale_if_joint_position,
|
||||
BOOL nowrite,
|
||||
BOOL as_slm,
|
||||
int submodel_id)
|
||||
|
|
@ -690,7 +691,7 @@ LLSD LLModel::writeModel(
|
|||
|
||||
if (skinning)
|
||||
{ //write skinning block
|
||||
mdl["skin"] = high->mSkinInfo.asLLSD(upload_joints);
|
||||
mdl["skin"] = high->mSkinInfo.asLLSD(upload_joints, lock_scale_if_joint_position);
|
||||
}
|
||||
|
||||
if (!decomp.mBaseHull.empty() ||
|
||||
|
|
@ -1451,11 +1452,17 @@ void LLMeshSkinInfo::fromLLSD(LLSD& skin)
|
|||
mPelvisOffset = skin["pelvis_offset"].asReal();
|
||||
}
|
||||
|
||||
// FIXME BENTO check contents of asset.
|
||||
mLockScaleIfJointPosition = true;
|
||||
if (skin.has("lock_scale_if_joint_position"))
|
||||
{
|
||||
mLockScaleIfJointPosition = skin["lock_scale_if_joint_position"].asBoolean();
|
||||
}
|
||||
else
|
||||
{
|
||||
mLockScaleIfJointPosition = false;
|
||||
}
|
||||
}
|
||||
|
||||
LLSD LLMeshSkinInfo::asLLSD(bool include_joints) const
|
||||
LLSD LLMeshSkinInfo::asLLSD(bool include_joints, bool lock_scale_if_joint_position) const
|
||||
{
|
||||
LLSD ret;
|
||||
|
||||
|
|
@ -1493,6 +1500,11 @@ LLSD LLMeshSkinInfo::asLLSD(bool include_joints) const
|
|||
}
|
||||
}
|
||||
|
||||
if (lock_scale_if_joint_position)
|
||||
{
|
||||
ret["lock_scale_if_joint_position"] = mLockScaleIfJointPosition;
|
||||
}
|
||||
|
||||
ret["pelvis_offset"] = mPelvisOffset;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -42,16 +42,17 @@ class domMesh;
|
|||
class LLMeshSkinInfo
|
||||
{
|
||||
public:
|
||||
LLMeshSkinInfo() { }
|
||||
LLMeshSkinInfo(LLSD& data);
|
||||
void fromLLSD(LLSD& data);
|
||||
LLSD asLLSD(bool include_joints, bool lock_scale_if_joint_position) const;
|
||||
|
||||
LLUUID mMeshID;
|
||||
std::vector<std::string> mJointNames;
|
||||
std::vector<LLMatrix4> mInvBindMatrix;
|
||||
std::vector<LLMatrix4> mAlternateBindMatrix;
|
||||
std::vector<U32> mJointRemap;
|
||||
|
||||
LLMeshSkinInfo() { }
|
||||
LLMeshSkinInfo(LLSD& data);
|
||||
void fromLLSD(LLSD& data);
|
||||
LLSD asLLSD(bool include_joints) const;
|
||||
LLMatrix4 mBindShapeMatrix;
|
||||
float mPelvisOffset;
|
||||
bool mLockScaleIfJointPosition;
|
||||
|
|
@ -139,6 +140,7 @@ public:
|
|||
const LLModel::Decomposition& decomp,
|
||||
BOOL upload_skin,
|
||||
BOOL upload_joints,
|
||||
BOOL lock_scale_if_joint_position,
|
||||
BOOL nowrite = FALSE,
|
||||
BOOL as_slm = FALSE,
|
||||
int submodel_id = 0);
|
||||
|
|
|
|||
|
|
@ -298,6 +298,7 @@ BOOL LLFloaterModelPreview::postBuild()
|
|||
|
||||
childSetCommitCallback("upload_skin", boost::bind(&LLFloaterModelPreview::toggleCalculateButton, this), NULL);
|
||||
childSetCommitCallback("upload_joints", boost::bind(&LLFloaterModelPreview::toggleCalculateButton, this), NULL);
|
||||
childSetCommitCallback("lock_scale_if_joint_position", boost::bind(&LLFloaterModelPreview::toggleCalculateButton, this), NULL);
|
||||
childSetCommitCallback("upload_textures", boost::bind(&LLFloaterModelPreview::toggleCalculateButton, this), NULL);
|
||||
|
||||
childSetTextArg("status", "[STATUS]", getString("status_idle"));
|
||||
|
|
@ -311,6 +312,7 @@ BOOL LLFloaterModelPreview::postBuild()
|
|||
|
||||
childSetCommitCallback("upload_skin", onUploadSkinCommit, this);
|
||||
childSetCommitCallback("upload_joints", onUploadJointsCommit, this);
|
||||
childSetCommitCallback("lock_scale_if_joint_position", onUploadJointsCommit, this);
|
||||
|
||||
childSetCommitCallback("import_scale", onImportScaleCommit, this);
|
||||
childSetCommitCallback("pelvis_offset", onPelvisOffsetCommit, this);
|
||||
|
|
@ -323,6 +325,7 @@ BOOL LLFloaterModelPreview::postBuild()
|
|||
|
||||
childDisable("upload_skin");
|
||||
childDisable("upload_joints");
|
||||
childDisable("lock_scale_if_joint_position");
|
||||
|
||||
initDecompControls();
|
||||
|
||||
|
|
@ -488,6 +491,7 @@ void LLFloaterModelPreview::onClickCalculateBtn()
|
|||
|
||||
bool upload_skinweights = childGetValue("upload_skin").asBoolean();
|
||||
bool upload_joint_positions = childGetValue("upload_joints").asBoolean();
|
||||
bool lock_scale_if_joint_position = childGetValue("lock_scale_if_joint_position").asBoolean();
|
||||
|
||||
if (upload_joint_positions)
|
||||
{
|
||||
|
|
@ -499,7 +503,8 @@ void LLFloaterModelPreview::onClickCalculateBtn()
|
|||
mUploadModelUrl.clear();
|
||||
|
||||
gMeshRepo.uploadModel(mModelPreview->mUploadData, mModelPreview->mPreviewScale,
|
||||
childGetValue("upload_textures").asBoolean(), upload_skinweights, upload_joint_positions,
|
||||
childGetValue("upload_textures").asBoolean(),
|
||||
upload_skinweights, upload_joint_positions, lock_scale_if_joint_position,
|
||||
mUploadModelUrl, false,
|
||||
getWholeModelFeeObserverHandle());
|
||||
|
||||
|
|
@ -1324,9 +1329,10 @@ U32 LLModelPreview::calcResourceCost()
|
|||
decomp,
|
||||
mFMP->childGetValue("upload_skin").asBoolean(),
|
||||
mFMP->childGetValue("upload_joints").asBoolean(),
|
||||
mFMP->childGetValue("lock_scale_if_joint_position").asBoolean(),
|
||||
TRUE,
|
||||
FALSE,
|
||||
instance.mModel->mSubmodelID);
|
||||
FALSE,
|
||||
instance.mModel->mSubmodelID);
|
||||
|
||||
num_hulls += decomp.mHull.size();
|
||||
for (U32 i = 0; i < decomp.mHull.size(); ++i)
|
||||
|
|
@ -1651,7 +1657,7 @@ void LLModelPreview::rebuildUploadData()
|
|||
|
||||
}
|
||||
|
||||
void LLModelPreview::saveUploadData(bool save_skinweights, bool save_joint_positions)
|
||||
void LLModelPreview::saveUploadData(bool save_skinweights, bool save_joint_positions, bool lock_scale_if_joint_position)
|
||||
{
|
||||
if (!mLODFile[LLModel::LOD_HIGH].empty())
|
||||
{
|
||||
|
|
@ -1660,12 +1666,13 @@ void LLModelPreview::saveUploadData(bool save_skinweights, bool save_joint_posit
|
|||
|
||||
if (LLModelLoader::getSLMFilename(filename, slm_filename))
|
||||
{
|
||||
saveUploadData(slm_filename, save_skinweights, save_joint_positions);
|
||||
saveUploadData(slm_filename, save_skinweights, save_joint_positions, lock_scale_if_joint_position);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LLModelPreview::saveUploadData(const std::string& filename, bool save_skinweights, bool save_joint_positions)
|
||||
void LLModelPreview::saveUploadData(const std::string& filename,
|
||||
bool save_skinweights, bool save_joint_positions, bool lock_scale_if_joint_position)
|
||||
{
|
||||
|
||||
std::set<LLPointer<LLModel> > meshes;
|
||||
|
|
@ -1706,7 +1713,9 @@ void LLModelPreview::saveUploadData(const std::string& filename, bool save_skinw
|
|||
instance.mLOD[LLModel::LOD_LOW],
|
||||
instance.mLOD[LLModel::LOD_IMPOSTOR],
|
||||
decomp,
|
||||
save_skinweights, save_joint_positions,
|
||||
save_skinweights,
|
||||
save_joint_positions,
|
||||
lock_scale_if_joint_position,
|
||||
FALSE, TRUE, instance.mModel->mSubmodelID);
|
||||
|
||||
data["mesh"][instance.mModel->mLocalID] = str.str();
|
||||
|
|
@ -1946,6 +1955,7 @@ void LLModelPreview::loadModelCallback(S32 loaded_lod)
|
|||
|
||||
bool skin_weights = false;
|
||||
bool joint_positions = false;
|
||||
bool lock_scale_if_joint_position = false;
|
||||
|
||||
for (S32 lod = 0; lod < LLModel::NUM_LODS; ++lod)
|
||||
{ //for each LoD
|
||||
|
|
@ -1993,6 +2003,10 @@ void LLModelPreview::loadModelCallback(S32 loaded_lod)
|
|||
{
|
||||
joint_positions = true;
|
||||
}
|
||||
if (list_iter->mModel->mSkinInfo.mLockScaleIfJointPosition)
|
||||
{
|
||||
lock_scale_if_joint_position = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -2016,6 +2030,13 @@ void LLModelPreview::loadModelCallback(S32 loaded_lod)
|
|||
mViewOption["show_joint_positions"] = true;
|
||||
fmp->childSetValue("upload_joints", true);
|
||||
}
|
||||
|
||||
if (lock_scale_if_joint_position)
|
||||
{
|
||||
fmp->enableViewOption("lock_scale_if_joint_position");
|
||||
mViewOption["lock_scale_if_joint_position"] = true;
|
||||
fmp->childSetValue("lock_scale_if_joint_position", true);
|
||||
}
|
||||
}
|
||||
|
||||
//copy high lod to base scene for LoD generation
|
||||
|
|
@ -3645,7 +3666,17 @@ BOOL LLModelPreview::render()
|
|||
mFMP->childSetValue("upload_joints", false);
|
||||
upload_joints = false;
|
||||
}
|
||||
|
||||
|
||||
if (upload_skin && upload_joints)
|
||||
{
|
||||
mFMP->childEnable("lock_scale_if_joint_position");
|
||||
}
|
||||
else
|
||||
{
|
||||
mFMP->childDisable("lock_scale_if_joint_position");
|
||||
mFMP->childSetValue("lock_scale_if_joint_position", false);
|
||||
}
|
||||
|
||||
//Only enable joint offsets if it passed the earlier critiquing
|
||||
if ( isRigValidForJointPositionUpload() )
|
||||
{
|
||||
|
|
@ -4239,15 +4270,17 @@ void LLFloaterModelPreview::onUpload(void* user_data)
|
|||
|
||||
bool upload_skinweights = mp->childGetValue("upload_skin").asBoolean();
|
||||
bool upload_joint_positions = mp->childGetValue("upload_joints").asBoolean();
|
||||
|
||||
bool lock_scale_if_joint_position = mp->childGetValue("lock_scale_if_joint_position").asBoolean();
|
||||
|
||||
if (gSavedSettings.getBOOL("MeshImportUseSLM"))
|
||||
{
|
||||
mp->mModelPreview->saveUploadData(upload_skinweights, upload_joint_positions);
|
||||
mp->mModelPreview->saveUploadData(upload_skinweights, upload_joint_positions, lock_scale_if_joint_position);
|
||||
}
|
||||
|
||||
gMeshRepo.uploadModel(mp->mModelPreview->mUploadData, mp->mModelPreview->mPreviewScale,
|
||||
mp->childGetValue("upload_textures").asBoolean(), upload_skinweights, upload_joint_positions, mp->mUploadModelUrl,
|
||||
mp->childGetValue("upload_textures").asBoolean(),
|
||||
upload_skinweights, upload_joint_positions, lock_scale_if_joint_position,
|
||||
mp->mUploadModelUrl,
|
||||
true, LLHandle<LLWholeModelFeeObserver>(), mp->getWholeModelUploadObserverHandle());
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -270,8 +270,8 @@ public:
|
|||
void restoreNormals();
|
||||
U32 calcResourceCost();
|
||||
void rebuildUploadData();
|
||||
void saveUploadData(bool save_skinweights, bool save_joint_poisitions);
|
||||
void saveUploadData(const std::string& filename, bool save_skinweights, bool save_joint_poisitions);
|
||||
void saveUploadData(bool save_skinweights, bool save_joint_positions, bool lock_scale_if_joint_position);
|
||||
void saveUploadData(const std::string& filename, bool save_skinweights, bool save_joint_positions, bool lock_scale_if_joint_position);
|
||||
void clearIncompatible(S32 lod);
|
||||
void updateStatusMessages();
|
||||
void updateLodControls(S32 lod);
|
||||
|
|
|
|||
|
|
@ -1896,7 +1896,8 @@ bool LLMeshRepoThread::physicsShapeReceived(const LLUUID& mesh_id, U8* data, S32
|
|||
}
|
||||
|
||||
LLMeshUploadThread::LLMeshUploadThread(LLMeshUploadThread::instance_list& data, LLVector3& scale, bool upload_textures,
|
||||
bool upload_skin, bool upload_joints, const std::string & upload_url, bool do_upload,
|
||||
bool upload_skin, bool upload_joints, bool lock_scale_if_joint_position,
|
||||
const std::string & upload_url, bool do_upload,
|
||||
LLHandle<LLWholeModelFeeObserver> fee_observer,
|
||||
LLHandle<LLWholeModelUploadObserver> upload_observer)
|
||||
: LLThread("mesh upload"),
|
||||
|
|
@ -1911,6 +1912,7 @@ LLMeshUploadThread::LLMeshUploadThread(LLMeshUploadThread::instance_list& data,
|
|||
mUploadTextures = upload_textures;
|
||||
mUploadSkin = upload_skin;
|
||||
mUploadJoints = upload_joints;
|
||||
mLockScaleIfJointPosition = lock_scale_if_joint_position;
|
||||
mMutex = new LLMutex(NULL);
|
||||
mPendingUploads = 0;
|
||||
mFinished = false;
|
||||
|
|
@ -2097,6 +2099,7 @@ void LLMeshUploadThread::wholeModelToLLSD(LLSD& dest, bool include_textures)
|
|||
decomp,
|
||||
mUploadSkin,
|
||||
mUploadJoints,
|
||||
mLockScaleIfJointPosition,
|
||||
FALSE,
|
||||
FALSE,
|
||||
data.mBaseModel->mSubmodelID);
|
||||
|
|
@ -2255,6 +2258,7 @@ void LLMeshUploadThread::wholeModelToLLSD(LLSD& dest, bool include_textures)
|
|||
decomp,
|
||||
mUploadSkin,
|
||||
mUploadJoints,
|
||||
mLockScaleIfJointPosition,
|
||||
FALSE,
|
||||
FALSE,
|
||||
data.mBaseModel->mSubmodelID);
|
||||
|
|
@ -3946,11 +3950,13 @@ LLSD& LLMeshRepoThread::getMeshHeader(const LLUUID& mesh_id)
|
|||
|
||||
|
||||
void LLMeshRepository::uploadModel(std::vector<LLModelInstance>& data, LLVector3& scale, bool upload_textures,
|
||||
bool upload_skin, bool upload_joints, std::string upload_url, bool do_upload,
|
||||
bool upload_skin, bool upload_joints, bool lock_scale_if_joint_position,
|
||||
std::string upload_url, bool do_upload,
|
||||
LLHandle<LLWholeModelFeeObserver> fee_observer, LLHandle<LLWholeModelUploadObserver> upload_observer)
|
||||
{
|
||||
LLMeshUploadThread* thread = new LLMeshUploadThread(data, scale, upload_textures, upload_skin, upload_joints, upload_url,
|
||||
do_upload, fee_observer, upload_observer);
|
||||
LLMeshUploadThread* thread = new LLMeshUploadThread(data, scale, upload_textures,
|
||||
upload_skin, upload_joints, lock_scale_if_joint_position,
|
||||
upload_url, do_upload, fee_observer, upload_observer);
|
||||
mUploadWaitList.push_back(thread);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -400,6 +400,7 @@ public:
|
|||
bool mUploadTextures;
|
||||
bool mUploadSkin;
|
||||
bool mUploadJoints;
|
||||
bool mLockScaleIfJointPosition;
|
||||
volatile bool mDiscarded;
|
||||
|
||||
LLHost mHost;
|
||||
|
|
@ -407,7 +408,8 @@ public:
|
|||
std::string mWholeModelUploadURL;
|
||||
|
||||
LLMeshUploadThread(instance_list& data, LLVector3& scale, bool upload_textures,
|
||||
bool upload_skin, bool upload_joints, const std::string & upload_url, bool do_upload = true,
|
||||
bool upload_skin, bool upload_joints, bool lock_scale_if_joint_position,
|
||||
const std::string & upload_url, bool do_upload = true,
|
||||
LLHandle<LLWholeModelFeeObserver> fee_observer = (LLHandle<LLWholeModelFeeObserver>()),
|
||||
LLHandle<LLWholeModelUploadObserver> upload_observer = (LLHandle<LLWholeModelUploadObserver>()));
|
||||
~LLMeshUploadThread();
|
||||
|
|
@ -510,8 +512,10 @@ public:
|
|||
LLSD& getMeshHeader(const LLUUID& mesh_id);
|
||||
|
||||
void uploadModel(std::vector<LLModelInstance>& data, LLVector3& scale, bool upload_textures,
|
||||
bool upload_skin, bool upload_joints, std::string upload_url, bool do_upload = true,
|
||||
LLHandle<LLWholeModelFeeObserver> fee_observer= (LLHandle<LLWholeModelFeeObserver>()), LLHandle<LLWholeModelUploadObserver> upload_observer = (LLHandle<LLWholeModelUploadObserver>()));
|
||||
bool upload_skin, bool upload_joints, bool lock_scale_if_joint_position,
|
||||
std::string upload_url, bool do_upload = true,
|
||||
LLHandle<LLWholeModelFeeObserver> fee_observer= (LLHandle<LLWholeModelFeeObserver>()),
|
||||
LLHandle<LLWholeModelUploadObserver> upload_observer = (LLHandle<LLWholeModelUploadObserver>()));
|
||||
|
||||
S32 getMeshSize(const LLUUID& mesh_id, S32 lod);
|
||||
|
||||
|
|
|
|||
|
|
@ -1217,6 +1217,13 @@
|
|||
label_text.text_color="White"
|
||||
name="upload_joints"
|
||||
top_pad="15"/>
|
||||
<check_box
|
||||
follows="top|left"
|
||||
height="15"
|
||||
label="Lock scale if joint position defined"
|
||||
label_text.text_color="White"
|
||||
name="lock_scale_if_joint_position"
|
||||
top_pad="15"/>
|
||||
<text
|
||||
follows="top|left"
|
||||
height="15"
|
||||
|
|
|
|||
Loading…
Reference in New Issue