From 72513ed51038640858c57b14aee249c3a7be270d Mon Sep 17 00:00:00 2001 From: Beq Date: Fri, 3 Feb 2023 22:31:17 +0000 Subject: [PATCH] [FIRE-32604][FIRE-32681] Fix slocal mesh scale weirdness and rigged mesh Clean up handling of scaling Don't apply mesh scale to containing object. Also seems to fix weights not matching --- indra/newview/vjfloaterlocalmesh.cpp | 4 ++-- indra/newview/vjlocalmesh.cpp | 19 ++++++++++--------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/indra/newview/vjfloaterlocalmesh.cpp b/indra/newview/vjfloaterlocalmesh.cpp index b2d672af17..697a3842d9 100644 --- a/indra/newview/vjfloaterlocalmesh.cpp +++ b/indra/newview/vjfloaterlocalmesh.cpp @@ -270,7 +270,7 @@ void LLFloaterLocalMesh::onBtnApply(void* userdata) int object_idx = objectlist_combo_box->getFirstSelectedIndex(); // finally tell local mesh system to apply - LLLocalMeshSystem::getInstance()->applyVObject(selected_object_id, file_id, object_idx, true); + LLLocalMeshSystem::getInstance()->applyVObject(selected_object_id, file_id, object_idx, false); } //static @@ -411,7 +411,7 @@ bool LLFloaterLocalMesh::processPrimCreated(LLViewerObject* object) { local_id = scroll_ctrl_selected_column->getValue().asUUID(); // fill it up with local goodness - static const bool use_scale {true}; + static const bool use_scale {false}; // // make sure the selection is still valid, and if so - get id. diff --git a/indra/newview/vjlocalmesh.cpp b/indra/newview/vjlocalmesh.cpp index 98f5ac3b32..6a11c8ec16 100644 --- a/indra/newview/vjlocalmesh.cpp +++ b/indra/newview/vjlocalmesh.cpp @@ -137,22 +137,23 @@ void LLLocalMeshObject::computeObjectTransform(const LLMatrix4& scene_transform) // actual bounding box size mObjectSize = mObjectBoundingBox.second; mObjectSize -= mObjectBoundingBox.first; - for (int vec_iter = 0; vec_iter < 4; ++vec_iter) - { - // make sure it can be divided by - if (fabs(mObjectSize.mV[vec_iter]) <= F_APPROXIMATELY_ZERO) - { - mObjectSize.mV[vec_iter] = 1.0f; - } - } + // make sure all axes of mObjectSize are non zero + for (auto& axis_size : mObjectSize.mV) + { + // set size of 1.0 if < F_APPROXIMATELY_ZERO + if (axis_size <= F_APPROXIMATELY_ZERO) + { + axis_size = 1.0f; + } + } // bounding box scale in a 1Mx3 cube mObjectScale.set(1.f, 1.f, 1.f); for (int vec_iter = 0; vec_iter < 4; ++vec_iter) { mObjectScale.mV[vec_iter] = mObjectScale.mV[vec_iter] / mObjectSize.mV[vec_iter]; } - mObjectSize = mObjectSize * scene_transform; + } void LLLocalMeshObject::normalizeFaceValues(LLLocalMeshFileLOD lod_iter)