SL-10163 - allow joint aliases in animation uploads. Names are canonicalized before sending to simulator.
# Conflicts: # indra/newview/llviewerassetupload.cpp # indra/newview/llvoavatar.cpp # scripts/content_tools/anim_tool.pymeow-7.2.2
parent
4413f9be87
commit
307db06310
|
|
@ -1453,6 +1453,7 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp, const LLUUID& asset_id, boo
|
|||
if (joint)
|
||||
{
|
||||
S32 joint_num = joint->getJointNum();
|
||||
joint_name = joint->getName(); // canonical name in case this is an alias.
|
||||
// LL_INFOS() << " joint: " << joint_name << LL_ENDL;
|
||||
if ((joint_num >= (S32)LL_CHARACTER_MAX_ANIMATED_JOINTS) || (joint_num < 0))
|
||||
{
|
||||
|
|
@ -2109,8 +2110,9 @@ U32 LLKeyframeMotion::getFileSize()
|
|||
//-----------------------------------------------------------------------------
|
||||
// dumpToFile()
|
||||
//-----------------------------------------------------------------------------
|
||||
void LLKeyframeMotion::dumpToFile(const std::string& name)
|
||||
bool LLKeyframeMotion::dumpToFile(const std::string& name)
|
||||
{
|
||||
bool succ = false;
|
||||
if (isLoaded())
|
||||
{
|
||||
std::string outfile_base;
|
||||
|
|
@ -2127,10 +2129,24 @@ void LLKeyframeMotion::dumpToFile(const std::string& name)
|
|||
const LLUUID& id = getID();
|
||||
outfile_base = id.asString();
|
||||
}
|
||||
std::string outfilename = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,outfile_base + ".anim");
|
||||
|
||||
if (gDirUtilp->getExtension(outfile_base).empty())
|
||||
{
|
||||
outfile_base += ".anim";
|
||||
}
|
||||
std::string outfilename;
|
||||
if (gDirUtilp->getDirName(outfile_base).empty())
|
||||
{
|
||||
outfilename = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,outfile_base);
|
||||
}
|
||||
else
|
||||
{
|
||||
outfilename = outfile_base;
|
||||
}
|
||||
if (LLFile::isfile(outfilename))
|
||||
{
|
||||
return;
|
||||
LL_WARNS() << outfilename << " already exists, write failed" << LL_ENDL;
|
||||
return false;
|
||||
}
|
||||
|
||||
S32 file_size = getFileSize();
|
||||
|
|
@ -2144,11 +2160,13 @@ void LLKeyframeMotion::dumpToFile(const std::string& name)
|
|||
outfile.open(outfilename, LL_APR_WPB);
|
||||
if (outfile.getFileHandle())
|
||||
{
|
||||
outfile.write(buffer, file_size);
|
||||
S32 wrote_bytes = outfile.write(buffer, file_size);
|
||||
succ = (wrote_bytes == file_size);
|
||||
}
|
||||
}
|
||||
delete [] buffer;
|
||||
}
|
||||
return succ;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -158,7 +158,7 @@ public:
|
|||
BOOL serialize(LLDataPacker& dp) const;
|
||||
BOOL deserialize(LLDataPacker& dp, const LLUUID& asset_id, bool allow_invalid_joints = true);
|
||||
BOOL isLoaded() { return mJointMotionList != NULL; }
|
||||
void dumpToFile(const std::string& name);
|
||||
bool dumpToFile(const std::string& name);
|
||||
|
||||
|
||||
// setters for modifying a keyframe animation
|
||||
|
|
@ -432,6 +432,9 @@ protected:
|
|||
F32 mLastUpdateTime;
|
||||
F32 mLastLoopedTime;
|
||||
AssetStatus mAssetStatus;
|
||||
|
||||
public:
|
||||
void setCharacter(LLCharacter* character) { mCharacter = character; }
|
||||
};
|
||||
|
||||
class LLKeyframeDataCache
|
||||
|
|
|
|||
|
|
@ -50,6 +50,10 @@
|
|||
#include "llpreviewnotecard.h"
|
||||
#include "llpreviewgesture.h"
|
||||
#include "llcoproceduremanager.h"
|
||||
#include "llthread.h"
|
||||
#include "llkeyframemotion.h"
|
||||
#include "lldatapacker.h"
|
||||
#include "llvoavatarself.h"
|
||||
|
||||
void dialog_refresh_all();
|
||||
|
||||
|
|
|
|||
|
|
@ -6145,7 +6145,11 @@ LLJoint *LLVOAvatar::getJoint( const std::string &name )
|
|||
LLJoint* jointp = NULL;
|
||||
|
||||
if (iter == mJointMap.end() || iter->second == NULL)
|
||||
{
|
||||
{ //search for joint and cache found joint in lookup table
|
||||
if (mJointAliasMap.empty())
|
||||
{
|
||||
getJointAliases();
|
||||
}
|
||||
joint_alias_map_t::const_iterator alias_iter = mJointAliasMap.find(name);
|
||||
std::string canonical_name;
|
||||
if (alias_iter != mJointAliasMap.end())
|
||||
|
|
|
|||
|
|
@ -637,6 +637,7 @@ def main(*argv):
|
|||
parser.add_argument("--no_hud", help="omit hud joints from list of attachments", action="store_true")
|
||||
parser.add_argument("--base_priority", help="set base priority", type=int)
|
||||
parser.add_argument("--joint_priority", help="set joint priority for all joints", type=int)
|
||||
parser.add_argument("--force_joints", help="don't check validity of joint names", action="store_true")
|
||||
parser.add_argument("infilename", help="name of a .anim file to input")
|
||||
parser.add_argument("outfilename", nargs="?", help="name of a .anim file to output")
|
||||
args = parser.parse_args(argv)
|
||||
|
|
@ -661,7 +662,12 @@ def main(*argv):
|
|||
if lad_tree is None:
|
||||
raise Error("failed to parse " + args.lad)
|
||||
if args.joints:
|
||||
joints = resolve_joints(args.joints, skel_tree, lad_tree, args.no_hud)
|
||||
if args.force_joints:
|
||||
joints = args.joints
|
||||
else:
|
||||
joints = resolve_joints(args.joints, skel_tree, lad_tree, args.no_hud)
|
||||
if args.use_aliases:
|
||||
joints = map(lambda name: "avatar_" + name, joints)
|
||||
if args.verbose:
|
||||
print("joints resolved to",joints)
|
||||
for name in joints:
|
||||
|
|
|
|||
Loading…
Reference in New Issue