Merge branch 'FirestormViewer:master' into FIRE-34968
commit
450c9ee6bc
|
|
@ -127,3 +127,5 @@ firestorm.code-workspace
|
|||
*-compiled.glsl
|
||||
|
||||
.github/release.yaml
|
||||
|
||||
checks.json
|
||||
|
|
|
|||
|
|
@ -2132,6 +2132,14 @@ set_source_files_properties(${viewer_PY_SCRIPTS}
|
|||
list(APPEND viewer_SOURCE_FILES ${viewer_PY_SCRIPTS})
|
||||
# </FS:Ansariel>
|
||||
|
||||
# <FS:AR> Add Poser Presets
|
||||
file(GLOB viewer_POSER_PRESET_FILES poses/hand_presets/*.xml)
|
||||
source_group("Poser Presets" FILES ${viewer_POSER_PRESET_FILES})
|
||||
set_source_files_properties(${viewer_POSER_PRESET_FILES}
|
||||
PROPERTIES HEADER_FILE_ONLY TRUE)
|
||||
list(APPEND viewer_SOURCE_FILES ${viewer_POSER_PRESET_FILES})
|
||||
# </FS:AR> Poser presets
|
||||
|
||||
if (WINDOWS)
|
||||
file(GLOB viewer_INSTALLER_FILES installers/windows/*.nsi)
|
||||
|
||||
|
|
|
|||
|
|
@ -8067,6 +8067,17 @@
|
|||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>FSPoserSaveExternalFileAlso</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Whether to save to an external format (like BVH or ANIM) file as well when saving a pose.</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>FSPoserResetBaseRotationOnEdit</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
@ -25119,6 +25130,41 @@ Change of this parameter will affect the layout of buttons in notification toast
|
|||
<key>SanityComment</key>
|
||||
<string>This value needs to be greater than 0 for a fading effect.</string>
|
||||
</map>
|
||||
<!-- <FS:minerjr> [FIRE-35019] Add LLHUDNameTag background to floating text and hover highlights -->
|
||||
<key>FSHudTextShowBackground</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Displays a black/white background behind the prim floating text to make the text more readable</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>S32</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>FSHudTextBackgroundOpacity</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Opacity of floating text background (0.0 = completely transparent, 1.0 = completely opaque)</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>F32</string>
|
||||
<key>Value</key>
|
||||
<real>0.75</real>
|
||||
</map>
|
||||
<key>FSHudTextUseHoverHighlight</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>When an object is being hovered over, highlight the HUD text by moving to the foreground and disable alpha</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<!-- </FS:minerjr> [FIRE-35019] -->
|
||||
<key>FSStartupClearBrowserCache</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
|
|||
|
|
@ -41,20 +41,25 @@
|
|||
#include "llviewerwindow.h"
|
||||
#include "llwindow.h"
|
||||
#include "llvoavatarself.h"
|
||||
#include "llinventoryfunctions.h"
|
||||
|
||||
namespace
|
||||
{
|
||||
constexpr char POSE_INTERNAL_FORMAT_FILE_MASK[] = "*.xml";
|
||||
constexpr char POSE_INTERNAL_FORMAT_FILE_EXT[] = ".xml";
|
||||
constexpr char POSE_EXTERNAL_FORMAT_FILE_EXT[] = ".bvh";
|
||||
constexpr char POSE_SAVE_SUBDIRECTORY[] = "poses";
|
||||
constexpr std::string_view POSE_PRESETS_HANDS_SUBDIRECTORY = "hand_presets";
|
||||
constexpr char XML_LIST_HEADER_STRING_PREFIX[] = "header_";
|
||||
constexpr char XML_LIST_TITLE_STRING_PREFIX[] = "title_";
|
||||
constexpr char XML_JOINT_TRANSFORM_STRING_PREFIX[] = "joint_transform_";
|
||||
constexpr char XML_JOINT_DELTAROT_STRING_PREFIX[] = "joint_delta_rotate_";
|
||||
constexpr char BVH_JOINT_TRANSFORM_STRING_PREFIX[] = "bvh_joint_transform_";
|
||||
constexpr std::string_view POSER_ADVANCEDWINDOWSTATE_SAVE_KEY = "FSPoserAdvancedWindowState";
|
||||
constexpr std::string_view POSER_TRACKPAD_SENSITIVITY_SAVE_KEY = "FSPoserTrackpadSensitivity";
|
||||
constexpr std::string_view POSER_STOPPOSINGWHENCLOSED_SAVE_KEY = "FSPoserStopPosingWhenClosed";
|
||||
constexpr std::string_view POSER_RESETBASEROTONEDIT_SAVE_KEY = "FSPoserResetBaseRotationOnEdit";
|
||||
constexpr std::string_view POSER_SAVEEXTERNALFORMAT_SAVE_KEY = "FSPoserSaveExternalFileAlso";
|
||||
} // namespace
|
||||
|
||||
/// <summary>
|
||||
|
|
@ -75,7 +80,6 @@ FSFloaterPoser::FSFloaterPoser(const LLSD& key) : LLFloater(key)
|
|||
mCommitCallbackRegistrar.add("Poser.RedoLastRotation", [this](LLUICtrl*, const LLSD&) { onRedoLastRotation(); });
|
||||
mCommitCallbackRegistrar.add("Poser.ToggleMirrorChanges", [this](LLUICtrl*, const LLSD&) { onToggleMirrorChange(); });
|
||||
mCommitCallbackRegistrar.add("Poser.ToggleSympatheticChanges", [this](LLUICtrl*, const LLSD&) { onToggleSympatheticChange(); });
|
||||
mCommitCallbackRegistrar.add("Poser.ToggleDeltaModeChanges", [this](LLUICtrl*, const LLSD &) { onToggleDeltaModeChange(); });
|
||||
mCommitCallbackRegistrar.add("Poser.AdjustTrackPadSensitivity", [this](LLUICtrl*, const LLSD&) { onAdjustTrackpadSensitivity(); });
|
||||
|
||||
mCommitCallbackRegistrar.add("Poser.PositionSet", [this](LLUICtrl*, const LLSD&) { onAvatarPositionSet(); });
|
||||
|
|
@ -109,20 +113,20 @@ bool FSFloaterPoser::postBuild()
|
|||
mAvatarTrackball->setCommitCallback([this](LLUICtrl *, const LLSD &) { onLimbTrackballChanged(); });
|
||||
|
||||
mLimbYawSlider = getChild<LLSliderCtrl>("limb_yaw");
|
||||
mLimbYawSlider->setCommitCallback([this](LLUICtrl *, const LLSD &) { onLimbYawPitchRollChanged(); });
|
||||
mLimbYawSlider->setCommitCallback([this](LLUICtrl *, const LLSD &) { onYawPitchRollSliderChanged(); });
|
||||
|
||||
mLimbPitchSlider = getChild<LLSliderCtrl>("limb_pitch");
|
||||
mLimbPitchSlider->setCommitCallback([this](LLUICtrl *, const LLSD &) { onLimbYawPitchRollChanged(); });
|
||||
mLimbPitchSlider->setCommitCallback([this](LLUICtrl *, const LLSD &) { onYawPitchRollSliderChanged(); });
|
||||
|
||||
mLimbRollSlider = getChild<LLSliderCtrl>("limb_roll");
|
||||
mLimbRollSlider->setCommitCallback([this](LLUICtrl *, const LLSD &) { onLimbYawPitchRollChanged(); });
|
||||
mLimbRollSlider->setCommitCallback([this](LLUICtrl *, const LLSD &) { onYawPitchRollSliderChanged(); });
|
||||
|
||||
mJointsTabs = getChild<LLTabContainer>("joints_tabs");
|
||||
mJointsTabs->setCommitCallback(
|
||||
[this](LLUICtrl*, const LLSD&)
|
||||
{
|
||||
onJointTabSelect();
|
||||
setRotationChangeButtons(false, false, false);
|
||||
setRotationChangeButtons(false, false);
|
||||
});
|
||||
|
||||
mAvatarSelectionScrollList = getChild<LLScrollListCtrl>("avatarSelection_scroll");
|
||||
|
|
@ -208,11 +212,16 @@ bool FSFloaterPoser::postBuild()
|
|||
mMiscJointsPnl = getChild<LLPanel>("misc_joints_panel");
|
||||
mCollisionVolumesPnl = getChild<LLPanel>("collision_volumes_panel");
|
||||
|
||||
mAlsoSaveBvhCbx = getChild<LLCheckBoxCtrl>("also_save_bvh_checkbox");
|
||||
mResetBaseRotCbx = getChild<LLCheckBoxCtrl>("reset_base_rotation_on_edit_checkbox");
|
||||
mResetBaseRotCbx->setCommitCallback([this](LLUICtrl*, const LLSD&) { onClickSetBaseRotZero(); });
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void FSFloaterPoser::onOpen(const LLSD& key)
|
||||
{
|
||||
createUserPoseDirectoryIfNeeded();
|
||||
onAvatarsRefresh();
|
||||
refreshJointScrollListMembers();
|
||||
onJointTabSelect();
|
||||
|
|
@ -319,10 +328,56 @@ void FSFloaterPoser::onClickPoseSave()
|
|||
{
|
||||
refreshPoseScroll(mPosesScrollList);
|
||||
setUiSelectedAvatarSaveFileName(filename);
|
||||
|
||||
if (getSavingToBvh())
|
||||
savePoseToBvh(avatar, filename);
|
||||
|
||||
// TODO: provide feedback for save
|
||||
}
|
||||
}
|
||||
|
||||
void FSFloaterPoser::createUserPoseDirectoryIfNeeded()
|
||||
{
|
||||
std::string userPath =
|
||||
gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, POSE_SAVE_SUBDIRECTORY);
|
||||
|
||||
userPath = userPath + gDirUtilp->getDirDelimiter() + std::string(POSE_PRESETS_HANDS_SUBDIRECTORY);
|
||||
if (gDirUtilp->fileExists(userPath))
|
||||
return;
|
||||
|
||||
try
|
||||
{
|
||||
if (!gDirUtilp->fileExists(userPath))
|
||||
{
|
||||
LL_WARNS("Poser") << "Couldn't find folder: " << userPath << " - creating one." << LL_ENDL;
|
||||
LLFile::mkdir(userPath);
|
||||
}
|
||||
|
||||
LL_WARNS("Poser") << "Couldn't find folder: " << userPath << " - creating one." << LL_ENDL;
|
||||
LLFile::mkdir(userPath);
|
||||
|
||||
std::string sourcePresetPath =
|
||||
gDirUtilp->getExpandedFilename(LL_PATH_EXECUTABLE, POSE_SAVE_SUBDIRECTORY, std::string(POSE_PRESETS_HANDS_SUBDIRECTORY));
|
||||
|
||||
if (!gDirUtilp->fileExists(sourcePresetPath))
|
||||
return;
|
||||
|
||||
auto posesToCopy = gDirUtilp->getFilesInDir(sourcePresetPath);
|
||||
for (auto pose : posesToCopy)
|
||||
{
|
||||
std::string source = sourcePresetPath + gDirUtilp->getDirDelimiter() + pose;
|
||||
std::string destination = userPath + gDirUtilp->getDirDelimiter() + pose;
|
||||
|
||||
if (!LLFile::copy(source, destination))
|
||||
LL_WARNS("LLDiskCache") << "Failed to copy " << source << " to " << destination << LL_ENDL;
|
||||
}
|
||||
}
|
||||
catch (const std::exception& e)
|
||||
{
|
||||
LL_WARNS("Posing") << "Exception caught trying to create: " << userPath << e.what() << LL_ENDL;
|
||||
}
|
||||
}
|
||||
|
||||
bool FSFloaterPoser::savePoseToXml(LLVOAvatar* avatar, const std::string& poseFileName)
|
||||
{
|
||||
if (poseFileName.empty())
|
||||
|
|
@ -331,20 +386,11 @@ bool FSFloaterPoser::savePoseToXml(LLVOAvatar* avatar, const std::string& poseFi
|
|||
if (!mPoserAnimator.isPosingAvatar(avatar))
|
||||
return false;
|
||||
|
||||
createUserPoseDirectoryIfNeeded();
|
||||
|
||||
try
|
||||
{
|
||||
std::string pathname = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, POSE_SAVE_SUBDIRECTORY);
|
||||
if (!gDirUtilp->fileExists(pathname))
|
||||
{
|
||||
LL_WARNS("Poser") << "Couldn't find folder: " << pathname << " - creating one." << LL_ENDL;
|
||||
LLFile::mkdir(pathname);
|
||||
}
|
||||
|
||||
std::string fullSavePath =
|
||||
gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, POSE_SAVE_SUBDIRECTORY, poseFileName + POSE_INTERNAL_FORMAT_FILE_EXT);
|
||||
|
||||
bool savingDiff = !mPoserAnimator.allBaseRotationsAreZero(avatar);
|
||||
|
||||
LLSD record;
|
||||
record["version"]["value"] = (S32)5;
|
||||
record["startFromTeePose"]["value"] = !savingDiff;
|
||||
|
|
@ -376,6 +422,9 @@ bool FSFloaterPoser::savePoseToXml(LLVOAvatar* avatar, const std::string& poseFi
|
|||
record[bone_name]["scale"] = scale.getValue();
|
||||
}
|
||||
|
||||
std::string fullSavePath =
|
||||
gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, POSE_SAVE_SUBDIRECTORY, poseFileName + POSE_INTERNAL_FORMAT_FILE_EXT);
|
||||
|
||||
llofstream file;
|
||||
file.open(fullSavePath.c_str());
|
||||
if (!file.is_open())
|
||||
|
|
@ -508,10 +557,9 @@ void FSFloaterPoser::onClickRecaptureSelectedBones()
|
|||
|
||||
void FSFloaterPoser::onClickBrowsePoseCache()
|
||||
{
|
||||
std::string pathname = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, POSE_SAVE_SUBDIRECTORY);
|
||||
if (!gDirUtilp->fileExists(pathname))
|
||||
LLFile::mkdir(pathname);
|
||||
createUserPoseDirectoryIfNeeded();
|
||||
|
||||
std::string pathname = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, POSE_SAVE_SUBDIRECTORY);
|
||||
gViewerWindow->getWindow()->openFile(pathname);
|
||||
}
|
||||
|
||||
|
|
@ -540,6 +588,7 @@ void FSFloaterPoser::onPoseJointsReset()
|
|||
|
||||
refreshRotationSliders();
|
||||
refreshTrackpadCursor();
|
||||
refreshAvatarPositionSliders();
|
||||
}
|
||||
|
||||
void FSFloaterPoser::onPoseMenuAction(const LLSD& param)
|
||||
|
|
@ -569,6 +618,10 @@ void FSFloaterPoser::onPoseMenuAction(const LLSD& param)
|
|||
loadType = POSITIONS_AND_SCALES;
|
||||
else if (loadStyle == "all")
|
||||
loadType = ROT_POS_AND_SCALES;
|
||||
else if (loadStyle == "selective")
|
||||
loadType = SELECTIVE;
|
||||
else if (loadStyle == "selective_rot")
|
||||
loadType = SELECTIVE_ROT;
|
||||
|
||||
LLVOAvatar* avatar = getUiSelectedAvatar();
|
||||
if (!avatar)
|
||||
|
|
@ -666,7 +719,6 @@ void FSFloaterPoser::onClickLoadHandPose(bool isRightHand)
|
|||
{
|
||||
LL_WARNS("Posing") << "Threw an exception trying to load a hand pose: " << poseName << " exception: " << e.what() << LL_ENDL;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
bool FSFloaterPoser::poseFileStartsFromTeePose(const std::string& poseFileName)
|
||||
|
|
@ -724,11 +776,12 @@ void FSFloaterPoser::loadPoseFromXml(LLVOAvatar* avatar, const std::string& pose
|
|||
gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, POSE_SAVE_SUBDIRECTORY, poseFileName + POSE_INTERNAL_FORMAT_FILE_EXT);
|
||||
|
||||
bool loadRotations = loadMethod == ROTATIONS || loadMethod == ROTATIONS_AND_POSITIONS || loadMethod == ROTATIONS_AND_SCALES ||
|
||||
loadMethod == ROT_POS_AND_SCALES;
|
||||
loadMethod == ROT_POS_AND_SCALES || loadMethod == SELECTIVE || loadMethod == SELECTIVE_ROT;
|
||||
bool loadPositions = loadMethod == POSITIONS || loadMethod == ROTATIONS_AND_POSITIONS || loadMethod == POSITIONS_AND_SCALES ||
|
||||
loadMethod == ROT_POS_AND_SCALES;
|
||||
loadMethod == ROT_POS_AND_SCALES || loadMethod == SELECTIVE;
|
||||
bool loadScales = loadMethod == SCALES || loadMethod == POSITIONS_AND_SCALES || loadMethod == ROTATIONS_AND_SCALES ||
|
||||
loadMethod == ROT_POS_AND_SCALES;
|
||||
loadMethod == ROT_POS_AND_SCALES || loadMethod == SELECTIVE;
|
||||
bool loadSelective = loadMethod == SELECTIVE || loadMethod == SELECTIVE_ROT;
|
||||
|
||||
try
|
||||
{
|
||||
|
|
@ -779,10 +832,13 @@ void FSFloaterPoser::loadPoseFromXml(LLVOAvatar* avatar, const std::string& pose
|
|||
if (!poserJoint)
|
||||
continue;
|
||||
|
||||
if (loadSelective && mPoserAnimator.isPosingAvatarJoint(avatar, *poserJoint))
|
||||
continue;
|
||||
|
||||
if (control_map.has("enabled"))
|
||||
{
|
||||
enabled = control_map["enabled"].asBoolean();
|
||||
mPoserAnimator.setPosingAvatarJoint(avatar, *poserJoint, enabled);
|
||||
mPoserAnimator.setPosingAvatarJoint(avatar, *poserJoint, enabled || loadSelective);
|
||||
}
|
||||
|
||||
if (control_map.has("jointBaseRotationIsZero"))
|
||||
|
|
@ -1046,30 +1102,22 @@ void FSFloaterPoser::onToggleLoadSavePanel()
|
|||
|
||||
void FSFloaterPoser::onToggleMirrorChange()
|
||||
{
|
||||
setRotationChangeButtons(true, false, false);
|
||||
setRotationChangeButtons(true, false);
|
||||
}
|
||||
|
||||
void FSFloaterPoser::onToggleSympatheticChange()
|
||||
{
|
||||
setRotationChangeButtons(false, true, false);
|
||||
setRotationChangeButtons(false, true);
|
||||
}
|
||||
|
||||
void FSFloaterPoser::onToggleDeltaModeChange()
|
||||
void FSFloaterPoser::setRotationChangeButtons(bool togglingMirror, bool togglingSympathetic)
|
||||
{
|
||||
setRotationChangeButtons(false, false, true);
|
||||
}
|
||||
|
||||
void FSFloaterPoser::setRotationChangeButtons(bool togglingMirror, bool togglingSympathetic, bool togglingDelta)
|
||||
{
|
||||
if (togglingSympathetic || togglingDelta)
|
||||
if (togglingSympathetic)
|
||||
mToggleMirrorRotationBtn->setValue(false);
|
||||
|
||||
if (togglingMirror || togglingDelta)
|
||||
if (togglingMirror)
|
||||
mToggleSympatheticRotationBtn->setValue(false);
|
||||
|
||||
if (togglingMirror || togglingSympathetic)
|
||||
mToggleDeltaModeBtn->setValue(false);
|
||||
|
||||
refreshTrackpadCursor();
|
||||
}
|
||||
|
||||
|
|
@ -1352,6 +1400,7 @@ std::vector<FSPoserAnimator::FSPoserJoint*> FSFloaterPoser::getUiSelectedPoserJo
|
|||
|
||||
if (activeTab == mPositionRotationPnl)
|
||||
{
|
||||
mEntireAvJointScroll->selectFirstItem();
|
||||
scrollList = mEntireAvJointScroll;
|
||||
}
|
||||
else if (activeTab == mBodyJointsPnl)
|
||||
|
|
@ -1401,18 +1450,33 @@ std::vector<FSPoserAnimator::FSPoserJoint*> FSFloaterPoser::getUiSelectedPoserJo
|
|||
return joints;
|
||||
}
|
||||
|
||||
E_RotationStyle FSFloaterPoser::getUiSelectedBoneRotationStyle(const std::string& jointName) const
|
||||
{
|
||||
if (jointName.empty())
|
||||
return ABSOLUTE_ROT;
|
||||
|
||||
bool hasRotationStylePreferenceParameter = hasString(XML_JOINT_DELTAROT_STRING_PREFIX + jointName);
|
||||
if (!hasRotationStylePreferenceParameter)
|
||||
return ABSOLUTE_ROT;
|
||||
|
||||
std::string paramValue = getString(XML_JOINT_DELTAROT_STRING_PREFIX + jointName);
|
||||
if (paramValue == "true")
|
||||
return DELTAIC_ROT;
|
||||
|
||||
return ABSOLUTE_ROT;
|
||||
}
|
||||
|
||||
E_BoneDeflectionStyles FSFloaterPoser::getUiSelectedBoneDeflectionStyle() const
|
||||
{
|
||||
bool isDelta = mToggleDeltaModeBtn->getValue().asBoolean();
|
||||
|
||||
if (mToggleMirrorRotationBtn->getValue().asBoolean())
|
||||
return MIRROR;
|
||||
return isDelta ? MIRROR_DELTA : MIRROR;
|
||||
|
||||
if (mToggleSympatheticRotationBtn->getValue().asBoolean())
|
||||
return SYMPATHETIC;
|
||||
return isDelta ? SYMPATHETIC_DELTA : SYMPATHETIC;
|
||||
|
||||
if (mToggleDeltaModeBtn->getValue().asBoolean())
|
||||
return DELTAMODE;
|
||||
|
||||
return NONE;
|
||||
return isDelta ? DELTAMODE : NONE;
|
||||
}
|
||||
|
||||
LLVOAvatar* FSFloaterPoser::getUiSelectedAvatar() const
|
||||
|
|
@ -1494,9 +1558,9 @@ LLVOAvatar* FSFloaterPoser::getAvatarByUuid(const LLUUID& avatarToFind) const
|
|||
|
||||
void FSFloaterPoser::onAdvancedPositionSet()
|
||||
{
|
||||
F32 posX = (F32)mAdvPosXSlider->getValue().asReal();
|
||||
F32 posY = (F32)mAdvPosYSlider->getValue().asReal();
|
||||
F32 posZ = (F32)mAdvPosZSlider->getValue().asReal();
|
||||
F32 posX = mAdvPosXSlider->getValueF32();
|
||||
F32 posY = mAdvPosYSlider->getValueF32();
|
||||
F32 posZ = mAdvPosZSlider->getValueF32();
|
||||
|
||||
setSelectedJointsPosition(posX, posY, posZ);
|
||||
refreshAvatarPositionSliders();
|
||||
|
|
@ -1504,18 +1568,18 @@ void FSFloaterPoser::onAdvancedPositionSet()
|
|||
|
||||
void FSFloaterPoser::onAdvancedScaleSet()
|
||||
{
|
||||
F32 scX = (F32)mAdvScaleXSlider->getValue().asReal();
|
||||
F32 scY = (F32)mAdvScaleYSlider->getValue().asReal();
|
||||
F32 scZ = (F32)mAdvScaleZSlider->getValue().asReal();
|
||||
F32 scX = mAdvScaleXSlider->getValueF32();
|
||||
F32 scY = mAdvScaleYSlider->getValueF32();
|
||||
F32 scZ = mAdvScaleZSlider->getValueF32();
|
||||
|
||||
setSelectedJointsScale(scX, scY, scZ);
|
||||
}
|
||||
|
||||
void FSFloaterPoser::onAvatarPositionSet()
|
||||
{
|
||||
F32 posX = (F32)mPosXSlider->getValue().asReal();
|
||||
F32 posY = (F32)mPosYSlider->getValue().asReal();
|
||||
F32 posZ = (F32)mPosZSlider->getValue().asReal();
|
||||
F32 posX = mPosXSlider->getValueF32();
|
||||
F32 posY = mPosYSlider->getValueF32();
|
||||
F32 posZ = mPosZSlider->getValueF32();
|
||||
|
||||
setSelectedJointsPosition(posX, posY, posZ);
|
||||
refreshAdvancedPositionSliders();
|
||||
|
|
@ -1523,55 +1587,40 @@ void FSFloaterPoser::onAvatarPositionSet()
|
|||
|
||||
void FSFloaterPoser::onLimbTrackballChanged()
|
||||
{
|
||||
LLVector3 trackPadPos;
|
||||
LLSD position = mAvatarTrackball->getValue();
|
||||
if (position.isArray() && position.size() == 3)
|
||||
LLVector3 trackPadPos, trackPadDeltaPos;
|
||||
LLSD position = mAvatarTrackball->getValue();
|
||||
LLSD deltaPosition = mAvatarTrackball->getValueDelta();
|
||||
|
||||
if (position.isArray() && position.size() == 3 && deltaPosition.isArray() && deltaPosition.size() == 3)
|
||||
{
|
||||
trackPadPos.setValue(position);
|
||||
trackPadDeltaPos.setValue(deltaPosition);
|
||||
}
|
||||
else
|
||||
return;
|
||||
|
||||
F32 yaw, pitch, roll;
|
||||
yaw = trackPadPos.mV[VX];
|
||||
pitch = trackPadPos.mV[VY];
|
||||
roll = trackPadPos.mV[VZ];
|
||||
|
||||
F32 trackPadSensitivity = llmax(gSavedSettings.getF32(POSER_TRACKPAD_SENSITIVITY_SAVE_KEY), 0.0001f);
|
||||
yaw *= trackPadSensitivity;
|
||||
pitch *= trackPadSensitivity;
|
||||
|
||||
yaw = unWrapScale(yaw) * NormalTrackpadRangeInRads;
|
||||
pitch = unWrapScale(pitch) * NormalTrackpadRangeInRads;
|
||||
roll = unWrapScale(roll) * NormalTrackpadRangeInRads;
|
||||
trackPadPos.mV[VX] *= trackPadSensitivity;
|
||||
trackPadPos.mV[VY] *= trackPadSensitivity;
|
||||
|
||||
if (mToggleDeltaModeBtn->getValue().asBoolean())
|
||||
{
|
||||
F32 deltaYaw, deltaPitch, deltaRoll;
|
||||
LLSD deltaPosition = mAvatarTrackball->getValueDelta();
|
||||
LLVector3 trackPadDeltaPos;
|
||||
if (deltaPosition.isArray() && deltaPosition.size() == 3)
|
||||
{
|
||||
trackPadDeltaPos.setValue(deltaPosition);
|
||||
deltaYaw = trackPadDeltaPos[VX] * NormalTrackpadRangeInRads;
|
||||
deltaPitch = trackPadDeltaPos[VY] * NormalTrackpadRangeInRads;
|
||||
deltaRoll = trackPadDeltaPos[VZ] * NormalTrackpadRangeInRads;
|
||||
deltaYaw *= trackPadSensitivity;
|
||||
deltaPitch *= trackPadSensitivity;
|
||||
|
||||
setSelectedJointsRotation(deltaYaw, deltaPitch, deltaRoll);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
setSelectedJointsRotation(yaw, pitch, roll);
|
||||
}
|
||||
trackPadPos.mV[VX] = unWrapScale(trackPadPos.mV[VX]) * NormalTrackpadRangeInRads;
|
||||
trackPadPos.mV[VY] = unWrapScale(trackPadPos.mV[VY]) * NormalTrackpadRangeInRads;
|
||||
trackPadPos.mV[VZ] = unWrapScale(trackPadPos.mV[VZ]) * NormalTrackpadRangeInRads;
|
||||
|
||||
trackPadDeltaPos[VX] *= NormalTrackpadRangeInRads * trackPadSensitivity;
|
||||
trackPadDeltaPos[VY] *= NormalTrackpadRangeInRads * trackPadSensitivity;
|
||||
trackPadDeltaPos[VZ] *= NormalTrackpadRangeInRads;
|
||||
|
||||
setSelectedJointsRotation(trackPadPos, trackPadDeltaPos);
|
||||
|
||||
// WARNING!
|
||||
// as tempting as it is to refactor the following to refreshRotationSliders(), don't.
|
||||
// getRotationOfFirstSelectedJoint/setSelectedJointsRotation are
|
||||
// not necessarily symmetric functions (see their remarks).
|
||||
mLimbYawSlider->setValue(yaw *= RAD_TO_DEG);
|
||||
mLimbPitchSlider->setValue(pitch *= RAD_TO_DEG);
|
||||
mLimbRollSlider->setValue(roll *= RAD_TO_DEG);
|
||||
mLimbYawSlider->setValue(trackPadPos.mV[VX] *= RAD_TO_DEG);
|
||||
mLimbPitchSlider->setValue(trackPadPos.mV[VY] *= RAD_TO_DEG);
|
||||
mLimbRollSlider->setValue(trackPadPos.mV[VZ] *= RAD_TO_DEG);
|
||||
}
|
||||
|
||||
F32 FSFloaterPoser::unWrapScale(F32 scale)
|
||||
|
|
@ -1588,52 +1637,44 @@ F32 FSFloaterPoser::unWrapScale(F32 scale)
|
|||
return result;
|
||||
}
|
||||
|
||||
void FSFloaterPoser::onLimbYawPitchRollChanged()
|
||||
void FSFloaterPoser::onYawPitchRollSliderChanged()
|
||||
{
|
||||
F32 yaw = (F32)mLimbYawSlider->getValue().asReal();
|
||||
F32 pitch = (F32)mLimbPitchSlider->getValue().asReal();
|
||||
F32 roll = (F32)mLimbRollSlider->getValue().asReal();
|
||||
LLVector3 absoluteRotation, deltaRotation;
|
||||
absoluteRotation.mV[VX] = mLimbYawSlider->getValueF32() * DEG_TO_RAD;
|
||||
absoluteRotation.mV[VY] = mLimbPitchSlider->getValueF32() * DEG_TO_RAD;
|
||||
absoluteRotation.mV[VZ] = mLimbRollSlider->getValueF32() * DEG_TO_RAD;
|
||||
|
||||
yaw *= DEG_TO_RAD;
|
||||
pitch *= DEG_TO_RAD;
|
||||
roll *= DEG_TO_RAD;
|
||||
deltaRotation = absoluteRotation - mLastSliderRotation;
|
||||
mLastSliderRotation = absoluteRotation;
|
||||
|
||||
setSelectedJointsRotation(yaw, pitch, roll);
|
||||
setSelectedJointsRotation(absoluteRotation, deltaRotation);
|
||||
|
||||
// WARNING!
|
||||
// as tempting as it is to refactor the following to refreshTrackpadCursor(), don't.
|
||||
// getRotationOfFirstSelectedJoint/setSelectedJointsRotation are
|
||||
// not necessarily symmetric functions (see their remarks).
|
||||
F32 trackPadSensitivity = llmax(gSavedSettings.getF32(POSER_TRACKPAD_SENSITIVITY_SAVE_KEY), 0.0001f);
|
||||
yaw /= trackPadSensitivity;
|
||||
pitch /= trackPadSensitivity;
|
||||
absoluteRotation.mV[VX] /= trackPadSensitivity;
|
||||
absoluteRotation.mV[VY] /= trackPadSensitivity;
|
||||
|
||||
yaw /= NormalTrackpadRangeInRads;
|
||||
pitch /= NormalTrackpadRangeInRads;
|
||||
roll /= NormalTrackpadRangeInRads;
|
||||
absoluteRotation.mV[VX] /= NormalTrackpadRangeInRads;
|
||||
absoluteRotation.mV[VY] /= NormalTrackpadRangeInRads;
|
||||
absoluteRotation.mV[VZ] /= NormalTrackpadRangeInRads;
|
||||
|
||||
mAvatarTrackball->setValue(yaw, pitch, roll);
|
||||
mAvatarTrackball->setValue(absoluteRotation.getValue());
|
||||
}
|
||||
|
||||
void FSFloaterPoser::onAdjustTrackpadSensitivity()
|
||||
{
|
||||
gSavedSettings.setF32(POSER_TRACKPAD_SENSITIVITY_SAVE_KEY, (F32)mTrackpadSensitivitySlider->getValue().asReal());
|
||||
gSavedSettings.setF32(POSER_TRACKPAD_SENSITIVITY_SAVE_KEY, mTrackpadSensitivitySlider->getValueF32());
|
||||
refreshTrackpadCursor();
|
||||
}
|
||||
|
||||
void FSFloaterPoser::refreshTrackpadCursor()
|
||||
{
|
||||
F32 axis1 = (F32)mLimbYawSlider->getValue().asReal();
|
||||
F32 axis2 = (F32)mLimbPitchSlider->getValue().asReal();
|
||||
F32 axis3 = (F32)mLimbRollSlider->getValue().asReal();
|
||||
|
||||
axis1 *= DEG_TO_RAD;
|
||||
axis2 *= DEG_TO_RAD;
|
||||
axis3 *= DEG_TO_RAD;
|
||||
|
||||
axis1 /= NormalTrackpadRangeInRads;
|
||||
axis2 /= NormalTrackpadRangeInRads;
|
||||
axis3 /= NormalTrackpadRangeInRads;
|
||||
F32 axis1 = mLimbYawSlider->getValueF32() * DEG_TO_RAD / NormalTrackpadRangeInRads;
|
||||
F32 axis2 = mLimbPitchSlider->getValueF32() * DEG_TO_RAD / NormalTrackpadRangeInRads;
|
||||
F32 axis3 = mLimbRollSlider->getValueF32() * DEG_TO_RAD / NormalTrackpadRangeInRads;
|
||||
|
||||
F32 trackPadSensitivity = llmax(gSavedSettings.getF32(POSER_TRACKPAD_SENSITIVITY_SAVE_KEY), 0.0001f);
|
||||
axis1 /= trackPadSensitivity;
|
||||
|
|
@ -1664,6 +1705,7 @@ void FSFloaterPoser::refreshRotationSliders()
|
|||
{
|
||||
LLVector3 rotation = getRotationOfFirstSelectedJoint();
|
||||
|
||||
mLastSliderRotation = rotation;
|
||||
mLimbYawSlider->setValue(rotation.mV[VX] *= RAD_TO_DEG);
|
||||
mLimbPitchSlider->setValue(rotation.mV[VY] *= RAD_TO_DEG);
|
||||
mLimbRollSlider->setValue(rotation.mV[VZ] *= RAD_TO_DEG);
|
||||
|
|
@ -1696,8 +1738,8 @@ void FSFloaterPoser::setSelectedJointsPosition(F32 x, F32 y, F32 z)
|
|||
if (!mPoserAnimator.isPosingAvatar(avatar))
|
||||
return;
|
||||
|
||||
LLVector3 vec3 = LLVector3(x, y, z);
|
||||
E_BoneDeflectionStyles defl = getUiSelectedBoneDeflectionStyle();
|
||||
LLVector3 vec3 = LLVector3(x, y, z);
|
||||
|
||||
for (auto item : getUiSelectedPoserJoints())
|
||||
{
|
||||
|
|
@ -1709,7 +1751,7 @@ void FSFloaterPoser::setSelectedJointsPosition(F32 x, F32 y, F32 z)
|
|||
}
|
||||
}
|
||||
|
||||
void FSFloaterPoser::setSelectedJointsRotation(F32 yawInRadians, F32 pitchInRadians, F32 rollInRadians)
|
||||
void FSFloaterPoser::setSelectedJointsRotation(const LLVector3& absoluteRot, const LLVector3& deltaRot)
|
||||
{
|
||||
LLVOAvatar *avatar = getUiSelectedAvatar();
|
||||
if (!avatar)
|
||||
|
|
@ -1718,10 +1760,9 @@ void FSFloaterPoser::setSelectedJointsRotation(F32 yawInRadians, F32 pitchInRadi
|
|||
if (!mPoserAnimator.isPosingAvatar(avatar))
|
||||
return;
|
||||
|
||||
E_BoneDeflectionStyles defl = getUiSelectedBoneDeflectionStyle();
|
||||
LLVector3 vec3 = LLVector3(yawInRadians, pitchInRadians, rollInRadians);
|
||||
auto selectedJoints = getUiSelectedPoserJoints();
|
||||
bool savingToExternal = getWhetherToResetBaseRotationOnEdit();
|
||||
E_BoneDeflectionStyles defl = getUiSelectedBoneDeflectionStyle();
|
||||
|
||||
for (auto item : selectedJoints)
|
||||
{
|
||||
|
|
@ -1735,12 +1776,14 @@ void FSFloaterPoser::setSelectedJointsRotation(F32 yawInRadians, F32 pitchInRadi
|
|||
bool oppositeJointAlsoSelectedOnUi =
|
||||
std::find(selectedJoints.begin(), selectedJoints.end(), oppositeJoint) != selectedJoints.end();
|
||||
|
||||
if (oppositeJointAlsoSelectedOnUi && item->dontFlipOnMirror())
|
||||
bool deflectionDoesOppositeLimbs = !(defl == NONE || defl == DELTAMODE);
|
||||
if (oppositeJointAlsoSelectedOnUi && deflectionDoesOppositeLimbs && item->dontFlipOnMirror())
|
||||
continue;
|
||||
}
|
||||
|
||||
mPoserAnimator.setJointRotation(avatar, item, vec3, defl, getJointTranslation(item->jointName()),
|
||||
getJointNegation(item->jointName()), savingToExternal);
|
||||
mPoserAnimator.setJointRotation(avatar, item, absoluteRot, deltaRot, defl,
|
||||
getJointTranslation(item->jointName()), getJointNegation(item->jointName()), savingToExternal,
|
||||
getUiSelectedBoneRotationStyle(item->jointName()));
|
||||
}
|
||||
|
||||
if (savingToExternal)
|
||||
|
|
@ -1756,8 +1799,8 @@ void FSFloaterPoser::setSelectedJointsScale(F32 x, F32 y, F32 z)
|
|||
if (!mPoserAnimator.isPosingAvatar(avatar))
|
||||
return;
|
||||
|
||||
E_BoneDeflectionStyles defl = getUiSelectedBoneDeflectionStyle();
|
||||
LLVector3 vec3 = LLVector3(x, y, z);
|
||||
E_BoneDeflectionStyles defl = getUiSelectedBoneDeflectionStyle();
|
||||
|
||||
for (auto item : getUiSelectedPoserJoints())
|
||||
{
|
||||
|
|
@ -1831,6 +1874,7 @@ void FSFloaterPoser::onJointTabSelect()
|
|||
refreshRotationSliders();
|
||||
refreshTrackpadCursor();
|
||||
enableOrDisableRedoButton();
|
||||
onClickSetBaseRotZero();
|
||||
|
||||
if (mToggleAdvancedPanelBtn->getValue().asBoolean())
|
||||
{
|
||||
|
|
@ -2024,12 +2068,17 @@ void FSFloaterPoser::onAvatarsRefresh()
|
|||
if (!couldAnimateAvatar(avatar))
|
||||
continue;
|
||||
|
||||
LLAvatarName av_name;
|
||||
std::string animeshName = getControlAvatarName(avatar);
|
||||
if (animeshName.empty())
|
||||
animeshName = avatar->getFullname();
|
||||
|
||||
LLSD row;
|
||||
row["columns"][COL_ICON]["column"] = "icon";
|
||||
row["columns"][COL_ICON]["type"] = "icon";
|
||||
row["columns"][COL_ICON]["value"] = iconObjectName;
|
||||
row["columns"][COL_NAME]["column"] = "name";
|
||||
row["columns"][COL_NAME]["value"] = avatar->getFullname();
|
||||
row["columns"][COL_NAME]["value"] = animeshName;
|
||||
row["columns"][COL_UUID]["column"] = "uuid";
|
||||
row["columns"][COL_UUID]["value"] = avatar->getID();
|
||||
row["columns"][COL_SAVE]["column"] = "saveFileName";
|
||||
|
|
@ -2041,6 +2090,25 @@ void FSFloaterPoser::onAvatarsRefresh()
|
|||
refreshTextHighlightingOnAvatarScrollList();
|
||||
}
|
||||
|
||||
std::string FSFloaterPoser::getControlAvatarName(const LLControlAvatar* avatar)
|
||||
{
|
||||
if (!avatar)
|
||||
return "";
|
||||
|
||||
const LLVOVolume* rootVolume = avatar->mRootVolp;
|
||||
const LLViewerObject* rootEditObject = (rootVolume) ? rootVolume->getRootEdit() : NULL;
|
||||
if (!rootEditObject)
|
||||
return "";
|
||||
|
||||
const LLViewerInventoryItem* attachedItem =
|
||||
(rootEditObject->isAttachment()) ? gInventory.getItem(rootEditObject->getAttachmentItemID()) : NULL;
|
||||
|
||||
if (attachedItem)
|
||||
return attachedItem->getName();
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
void FSFloaterPoser::refreshTextHighlightingOnAvatarScrollList()
|
||||
{
|
||||
for (auto listItem : mAvatarSelectionScrollList->getAllData())
|
||||
|
|
@ -2128,4 +2196,256 @@ void FSFloaterPoser::addBoldToScrollList(LLScrollListCtrl* list, LLVOAvatar* ava
|
|||
}
|
||||
}
|
||||
|
||||
bool FSFloaterPoser::savePoseToBvh(LLVOAvatar* avatar, const std::string& poseFileName)
|
||||
{
|
||||
if (poseFileName.empty())
|
||||
return false;
|
||||
|
||||
if (!mPoserAnimator.isPosingAvatar(avatar))
|
||||
return false;
|
||||
|
||||
bool writeSuccess = false;
|
||||
|
||||
try
|
||||
{
|
||||
std::string pathname = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, POSE_SAVE_SUBDIRECTORY);
|
||||
if (!gDirUtilp->fileExists(pathname))
|
||||
{
|
||||
LL_WARNS("Poser") << "Couldn't find folder: " << pathname << " - creating one." << LL_ENDL;
|
||||
LLFile::mkdir(pathname);
|
||||
}
|
||||
|
||||
std::string fullSavePath =
|
||||
gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, POSE_SAVE_SUBDIRECTORY, poseFileName + POSE_EXTERNAL_FORMAT_FILE_EXT);
|
||||
|
||||
llofstream file;
|
||||
file.open(fullSavePath.c_str());
|
||||
if (!file.is_open())
|
||||
{
|
||||
LL_WARNS("Poser") << "Unable to save pose!" << LL_ENDL;
|
||||
return false;
|
||||
}
|
||||
|
||||
writeSuccess = writePoseAsBvh(&file, avatar);
|
||||
|
||||
file.close();
|
||||
}
|
||||
catch (const std::exception& e)
|
||||
{
|
||||
LL_WARNS("Posing") << "Exception caught in SaveToBVH: " << e.what() << LL_ENDL;
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool FSFloaterPoser::writePoseAsBvh(llofstream* fileStream, LLVOAvatar* avatar)
|
||||
{
|
||||
if (!fileStream || !avatar)
|
||||
return false;
|
||||
|
||||
*fileStream << "HIERARCHY" << std::endl;
|
||||
auto startingJoint = mPoserAnimator.getPoserJointByName("mPelvis");
|
||||
writeBvhFragment(fileStream, avatar, startingJoint, 0);
|
||||
*fileStream << "MOTION" << std::endl;
|
||||
*fileStream << "Frames: 2" << std::endl;
|
||||
*fileStream << "Frame Time: 1" << std::endl;
|
||||
*fileStream << "0.000000 0.000000 0.000000 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0" << std::endl;
|
||||
writeBvhMotion(fileStream, avatar, startingJoint);
|
||||
*fileStream << std::endl;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool FSFloaterPoser::writeBvhFragment(llofstream* fileStream, LLVOAvatar* avatar, const FSPoserAnimator::FSPoserJoint* joint, S32 tabStops)
|
||||
{
|
||||
if (!joint)
|
||||
return false;
|
||||
|
||||
auto position = mPoserAnimator.getJointPosition(avatar, *joint);
|
||||
auto saveAxis = getBvhJointTranslation(joint->jointName());
|
||||
|
||||
switch (joint->boneType())
|
||||
{
|
||||
case WHOLEAVATAR:
|
||||
*fileStream << "ROOT " + joint->jointName() << std::endl;
|
||||
*fileStream << "{" << std::endl;
|
||||
*fileStream << getTabs(tabStops + 1) + "OFFSET " + joint->bvhOffset() << std::endl;
|
||||
*fileStream << getTabs(tabStops + 1) + "CHANNELS 6 Xposition Yposition Zposition Xrotation Zrotation Yrotation" << std::endl;
|
||||
break;
|
||||
|
||||
default:
|
||||
*fileStream << getTabs(tabStops) + "JOINT " + joint->jointName() << std::endl;
|
||||
*fileStream << getTabs(tabStops) + "{" << std::endl;
|
||||
*fileStream << getTabs(tabStops + 1) + "OFFSET " + joint->bvhOffset() << std::endl;
|
||||
|
||||
switch (saveAxis)
|
||||
{
|
||||
default:
|
||||
case SWAP_NOTHING:
|
||||
*fileStream << getTabs(tabStops + 1) + "CHANNELS 3 Xrotation Yrotation Zrotation" << std::endl;
|
||||
break;
|
||||
|
||||
case SWAP_YAW_AND_ROLL:
|
||||
*fileStream << getTabs(tabStops + 1) + "CHANNELS 3 Zrotation Yrotation Xrotation" << std::endl;
|
||||
break;
|
||||
|
||||
case SWAP_ROLL_AND_PITCH:
|
||||
*fileStream << getTabs(tabStops + 1) + "CHANNELS 3 Xrotation Zrotation Yrotation" << std::endl;
|
||||
break;
|
||||
|
||||
case SWAP_X2Z_Y2X_Z2Y:
|
||||
*fileStream << getTabs(tabStops + 1) + "CHANNELS 3 Yrotation Zrotation Xrotation" << std::endl;
|
||||
break;
|
||||
|
||||
case SWAP_X2Y_Y2Z_Z2X:
|
||||
*fileStream << getTabs(tabStops + 1) + "CHANNELS 3 Zrotation Xrotation Yrotation" << std::endl;
|
||||
break;
|
||||
|
||||
case SWAP_YAW_AND_PITCH:
|
||||
*fileStream << getTabs(tabStops + 1) + "CHANNELS 3 Yrotation Xrotation Zrotation" << std::endl;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
size_t numberOfBvhChildNodes = joint->bvhChildren().size();
|
||||
if (numberOfBvhChildNodes > 0)
|
||||
{
|
||||
for (size_t index = 0; index != numberOfBvhChildNodes; ++index)
|
||||
{
|
||||
auto nextJoint = mPoserAnimator.getPoserJointByName(joint->bvhChildren()[index]);
|
||||
writeBvhFragment(fileStream, avatar, nextJoint, tabStops + 1);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
*fileStream << getTabs(tabStops + 1) + "End Site" << std::endl;
|
||||
*fileStream << getTabs(tabStops + 1) + "{" << std::endl;
|
||||
|
||||
// append the 'end knot' magic number
|
||||
if (strstr(joint->jointName().c_str(), "mHead"))
|
||||
*fileStream << getTabs(tabStops + 2) + "OFFSET 0.000000 3.148289 0.000000" << std::endl;
|
||||
if (strstr(joint->jointName().c_str(), "mWristLeft"))
|
||||
*fileStream << getTabs(tabStops + 2) + "OFFSET 4.106464 0.000000 0.000000" << std::endl;
|
||||
if (strstr(joint->jointName().c_str(), "mWristRight"))
|
||||
*fileStream << getTabs(tabStops + 2) + "OFFSET -4.106464 0.000000 0.000000" << std::endl;
|
||||
if (strstr(joint->jointName().c_str(), "mAnkleLeft"))
|
||||
*fileStream << getTabs(tabStops + 2) + "OFFSET 0.000000 -2.463878 4.653993" << std::endl;
|
||||
if (strstr(joint->jointName().c_str(), "mAnkleRight"))
|
||||
*fileStream << getTabs(tabStops + 2) + "OFFSET 0.000000 -2.463878 4.653993" << std::endl;
|
||||
|
||||
*fileStream << getTabs(tabStops + 1) + "}" << std::endl;
|
||||
}
|
||||
|
||||
*fileStream << getTabs(tabStops) + "}" << std::endl;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool FSFloaterPoser::writeBvhMotion(llofstream* fileStream, LLVOAvatar* avatar, const FSPoserAnimator::FSPoserJoint* joint)
|
||||
{
|
||||
if (!joint)
|
||||
return false;
|
||||
|
||||
auto rotation = mPoserAnimator.getJointRotation(avatar, *joint, SWAP_NOTHING, NEGATE_NOTHING);
|
||||
auto position = mPoserAnimator.getJointPosition(avatar, *joint);
|
||||
|
||||
switch (joint->boneType())
|
||||
{
|
||||
case WHOLEAVATAR:
|
||||
*fileStream << vec3ToXYZString(position) + " " + rotationToString(rotation);
|
||||
break;
|
||||
|
||||
default:
|
||||
*fileStream << " " + rotationToString(rotation);
|
||||
break;
|
||||
}
|
||||
|
||||
size_t numberOfBvhChildNodes = joint->bvhChildren().size();
|
||||
for (size_t index = 0; index != numberOfBvhChildNodes; ++index)
|
||||
{
|
||||
auto nextJoint = mPoserAnimator.getPoserJointByName(joint->bvhChildren()[index]);
|
||||
writeBvhMotion(fileStream, avatar, nextJoint);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
std::string FSFloaterPoser::vec3ToXYZString(const LLVector3& val)
|
||||
{
|
||||
return std::to_string(val[VX]) + " " + std::to_string(val[VY]) + " " + std::to_string(val[VZ]);
|
||||
}
|
||||
|
||||
std::string FSFloaterPoser::rotationToString(const LLVector3& val)
|
||||
{
|
||||
return std::to_string(val[VX] * RAD_TO_DEG) + " " + std::to_string(val[VY] * RAD_TO_DEG) + " " + std::to_string(val[VZ] * RAD_TO_DEG);
|
||||
}
|
||||
|
||||
std::string FSFloaterPoser::getTabs(S32 numOfTabstops)
|
||||
{
|
||||
std::string tabSpaces;
|
||||
for (S32 i = 0; i < numOfTabstops; i++)
|
||||
tabSpaces += "\t";
|
||||
|
||||
return tabSpaces;
|
||||
}
|
||||
|
||||
E_BoneAxisTranslation FSFloaterPoser::getBvhJointTranslation(const std::string& jointName) const
|
||||
{
|
||||
if (jointName.empty())
|
||||
return SWAP_X2Y_Y2Z_Z2X;
|
||||
|
||||
bool hasTransformParameter = hasString(BVH_JOINT_TRANSFORM_STRING_PREFIX + jointName);
|
||||
if (!hasTransformParameter)
|
||||
return SWAP_X2Y_Y2Z_Z2X;
|
||||
|
||||
std::string paramValue = getString(BVH_JOINT_TRANSFORM_STRING_PREFIX + jointName);
|
||||
|
||||
if (strstr(paramValue.c_str(), "SWAP_YAW_AND_ROLL"))
|
||||
return SWAP_YAW_AND_ROLL;
|
||||
else if (strstr(paramValue.c_str(), "SWAP_YAW_AND_PITCH"))
|
||||
return SWAP_YAW_AND_PITCH;
|
||||
else if (strstr(paramValue.c_str(), "SWAP_ROLL_AND_PITCH"))
|
||||
return SWAP_ROLL_AND_PITCH;
|
||||
else if (strstr(paramValue.c_str(), "SWAP_X2Y_Y2Z_Z2X"))
|
||||
return SWAP_X2Y_Y2Z_Z2X;
|
||||
else if (strstr(paramValue.c_str(), "SWAP_X2Z_Y2X_Z2Y"))
|
||||
return SWAP_X2Z_Y2X_Z2Y;
|
||||
else
|
||||
return SWAP_NOTHING;
|
||||
}
|
||||
|
||||
S32 FSFloaterPoser::getBvhJointNegation(const std::string& jointName) const
|
||||
{
|
||||
S32 result = NEGATE_NOTHING;
|
||||
|
||||
if (jointName.empty())
|
||||
return result;
|
||||
|
||||
bool hasTransformParameter = hasString(BVH_JOINT_TRANSFORM_STRING_PREFIX + jointName);
|
||||
if (!hasTransformParameter)
|
||||
return result;
|
||||
|
||||
std::string paramValue = getString(BVH_JOINT_TRANSFORM_STRING_PREFIX + jointName);
|
||||
|
||||
if (strstr(paramValue.c_str(), "NEGATE_YAW"))
|
||||
result |= NEGATE_YAW;
|
||||
if (strstr(paramValue.c_str(), "NEGATE_PITCH"))
|
||||
result |= NEGATE_PITCH;
|
||||
if (strstr(paramValue.c_str(), "NEGATE_ROLL"))
|
||||
result |= NEGATE_ROLL;
|
||||
if (strstr(paramValue.c_str(), "NEGATE_ALL"))
|
||||
return NEGATE_ALL;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
bool FSFloaterPoser::getWhetherToResetBaseRotationOnEdit() { return gSavedSettings.getBOOL(POSER_RESETBASEROTONEDIT_SAVE_KEY); }
|
||||
void FSFloaterPoser::onClickSetBaseRotZero() { mAlsoSaveBvhCbx->setEnabled(getWhetherToResetBaseRotationOnEdit()); }
|
||||
|
||||
bool FSFloaterPoser::getSavingToBvh()
|
||||
{
|
||||
return getWhetherToResetBaseRotationOnEdit() && gSavedSettings.getBOOL(POSER_RESETBASEROTONEDIT_SAVE_KEY);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -54,6 +54,8 @@ typedef enum E_LoadPoseMethods
|
|||
HAND_RIGHT = 8,
|
||||
HAND_LEFT = 9,
|
||||
FACE_ONLY = 10,
|
||||
SELECTIVE = 11,
|
||||
SELECTIVE_ROT = 12,
|
||||
} E_LoadPoseMethods;
|
||||
|
||||
/// <summary>
|
||||
|
|
@ -148,6 +150,14 @@ class FSFloaterPoser : public LLFloater
|
|||
/// <returns>A E_BoneDeflectionStyles member.</returns>
|
||||
E_BoneDeflectionStyles getUiSelectedBoneDeflectionStyle() const;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the means by which the rotation should be applied to the supplied joint name.
|
||||
/// Such as: fiddle the opposite joint too.
|
||||
/// </summary>
|
||||
/// <param name="jointName">The well-known joint name of the joint to add the row for, eg: mChest.</param>
|
||||
/// <returns>A E_RotationStyle member.</returns>
|
||||
E_RotationStyle getUiSelectedBoneRotationStyle(const std::string& jointName) const;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the collection of UUIDs for nearby avatars.
|
||||
/// </summary>
|
||||
|
|
@ -176,7 +186,7 @@ class FSFloaterPoser : public LLFloater
|
|||
/// There may be +/- PI difference two axes, because harmonics.
|
||||
/// Thus keep your UI synced with less gets.
|
||||
/// </remarks>
|
||||
void setSelectedJointsRotation(F32 yawInRadians, F32 pitchInRadians, F32 rollInRadians);
|
||||
void setSelectedJointsRotation(const LLVector3& absoluteRot, const LLVector3& deltaRot);
|
||||
void setSelectedJointsPosition(F32 x, F32 y, F32 z);
|
||||
void setSelectedJointsScale(F32 x, F32 y, F32 z);
|
||||
|
||||
|
|
@ -193,10 +203,12 @@ class FSFloaterPoser : public LLFloater
|
|||
LLVector3 getScaleOfFirstSelectedJoint() const;
|
||||
|
||||
// Pose load/save
|
||||
void createUserPoseDirectoryIfNeeded();
|
||||
void onToggleLoadSavePanel();
|
||||
void onClickPoseSave();
|
||||
void onPoseFileSelect();
|
||||
bool savePoseToXml(LLVOAvatar* avatar, const std::string& posePath);
|
||||
bool savePoseToBvh(LLVOAvatar* avatar, const std::string& posePath);
|
||||
void onClickBrowsePoseCache();
|
||||
void onPoseMenuAction(const LLSD& param);
|
||||
void loadPoseFromXml(LLVOAvatar* avatar, const std::string& poseFileName, E_LoadPoseMethods loadMethod);
|
||||
|
|
@ -211,8 +223,7 @@ class FSFloaterPoser : public LLFloater
|
|||
void onToggleAdvancedPanel();
|
||||
void onToggleMirrorChange();
|
||||
void onToggleSympatheticChange();
|
||||
void onToggleDeltaModeChange();
|
||||
void setRotationChangeButtons(bool mirror, bool sympathetic, bool togglingDelta);
|
||||
void setRotationChangeButtons(bool mirror, bool sympathetic);
|
||||
void onUndoLastRotation();
|
||||
void onRedoLastRotation();
|
||||
void onUndoLastPosition();
|
||||
|
|
@ -227,7 +238,7 @@ class FSFloaterPoser : public LLFloater
|
|||
void startPosingSelf();
|
||||
void stopPosingSelf();
|
||||
void onLimbTrackballChanged();
|
||||
void onLimbYawPitchRollChanged();
|
||||
void onYawPitchRollSliderChanged();
|
||||
void onAvatarPositionSet();
|
||||
void onAdvancedPositionSet();
|
||||
void onAdvancedScaleSet();
|
||||
|
|
@ -241,6 +252,7 @@ class FSFloaterPoser : public LLFloater
|
|||
void onClickLoadLeftHandPose();
|
||||
void onClickLoadRightHandPose();
|
||||
void onClickLoadHandPose(bool isRightHand);
|
||||
void onClickSetBaseRotZero();
|
||||
|
||||
// UI Refreshments
|
||||
void refreshRotationSliders();
|
||||
|
|
@ -291,6 +303,15 @@ class FSFloaterPoser : public LLFloater
|
|||
/// <returns>The kind of axis transformation to perform.</returns>
|
||||
S32 getJointNegation(const std::string& jointName) const;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the axial translation required for joints when saving to BVH.
|
||||
/// </summary>
|
||||
/// <param name="jointName">The name of the joint to get the transformation for.</param>
|
||||
/// <returns>The axial translation required.</returns>
|
||||
E_BoneAxisTranslation getBvhJointTranslation(const std::string& jointName) const;
|
||||
|
||||
S32 getBvhJointNegation(const std::string& jointName) const;
|
||||
|
||||
/// <summary>
|
||||
/// Refreshes the text on the avatars scroll list based on their state.
|
||||
/// </summary>
|
||||
|
|
@ -333,6 +354,70 @@ class FSFloaterPoser : public LLFloater
|
|||
/// </remarks>
|
||||
bool getWhetherToResetBaseRotationOnEdit();
|
||||
|
||||
/// <summary>
|
||||
/// Gets the name of an item from the supplied object ID.
|
||||
/// </summary>
|
||||
/// <param name="avatar">The control avatar to get the name for.</param>
|
||||
/// <returns>The name of the supplied object.</returns>
|
||||
/// <devnotes>
|
||||
/// Getting the name for an arbitrary item appears to involve sending system message and creating a
|
||||
/// callback, making for unwanted dependencies and conflict-risk; so not implemented.
|
||||
/// </devnotes>
|
||||
std::string getControlAvatarName(const LLControlAvatar* avatar);
|
||||
|
||||
/// Gets whether the pose should also write a BVH file when saved.
|
||||
/// </summary>
|
||||
/// <returns>True if the user wants to additionally save a BVH file, otherwise false.</returns>
|
||||
bool getSavingToBvh();
|
||||
|
||||
/// <summary>
|
||||
/// Writes the current pose in BVH-format to the supplied stream.
|
||||
/// </summary>
|
||||
/// <param name="fileStream">The stream to write the pose to.</param>
|
||||
/// <param name="avatar">The avatar whose pose should be saved.</param>
|
||||
/// <returns>True if the pose saved successfully as a BVH, otherwise false.</returns>
|
||||
/// <remarks>
|
||||
/// Only joints with a zero base-rotation should export to BVH.
|
||||
/// </remarks>
|
||||
bool writePoseAsBvh(llofstream* fileStream, LLVOAvatar* avatar);
|
||||
|
||||
/// <summary>
|
||||
/// Recursively writes a fragment of a BVH file format representation of the supplied joint, then that joints BVH child(ren).
|
||||
/// None of what is written here matters a jot; it's just here so it parses on read.
|
||||
/// </summary>
|
||||
/// <param name="fileStream">The stream to write the fragment to.</param>
|
||||
/// <param name="avatar">The avatar owning the supplied joint.</param>
|
||||
/// <param name="joint">The joint whose fragment should be written, and whose child(ren) will also be written.</param>
|
||||
/// <param name="tabStops">The number of tab-stops to include for formatting purpose.</param>
|
||||
/// <returns>True if the fragment wrote successfully, otherwise false.</returns>
|
||||
bool writeBvhFragment(llofstream* fileStream, LLVOAvatar* avatar, const FSPoserAnimator::FSPoserJoint* joint, S32 tabStops);
|
||||
|
||||
/// <summary>
|
||||
/// Writes a fragment of the 'single line' representing an animation frame within the BVH file respresenting the positions and/or
|
||||
/// rotations.
|
||||
/// </summary>
|
||||
/// <param name="fileStream">The stream to write the position and/or rotation to.</param>
|
||||
/// <param name="avatar">The avatar owning the supplied joint.</param>
|
||||
/// <param name="joint">The joint whose position and/or rotation should be written.</param>
|
||||
/// <returns></returns>
|
||||
bool writeBvhMotion(llofstream* fileStream, LLVOAvatar* avatar, const FSPoserAnimator::FSPoserJoint* joint);
|
||||
|
||||
/// <summary>
|
||||
/// Generates a string with the supplied number of tab-chars.
|
||||
/// </summary>
|
||||
std::string static getTabs(S32 numOfTabstops);
|
||||
|
||||
/// <summary>
|
||||
/// Transforms a rotation such that llbvhloader.cpp can resolve it to something vaguely approximating the supplied angle.
|
||||
/// When I say vague, I mean, it's numbers, buuuuut.
|
||||
/// </summary>
|
||||
std::string static rotationToString(const LLVector3& val);
|
||||
|
||||
/// <summary>
|
||||
/// Transforms the supplied vector into a string of three numbers, format suiting to writing into a BVH file.
|
||||
/// </summary>
|
||||
std::string static vec3ToXYZString(const LLVector3& val);
|
||||
|
||||
/// <summary>
|
||||
/// The time when the last click of a button was made.
|
||||
/// Utilized for controls needing a 'double click do' function.
|
||||
|
|
@ -355,6 +440,7 @@ class FSFloaterPoser : public LLFloater
|
|||
/// </remarks>
|
||||
static F32 unWrapScale(F32 scale);
|
||||
|
||||
LLVector3 mLastSliderRotation;
|
||||
FSVirtualTrackpad* mAvatarTrackball{ nullptr };
|
||||
|
||||
LLSliderCtrl* mTrackpadSensitivitySlider{ nullptr };
|
||||
|
|
@ -412,6 +498,9 @@ class FSFloaterPoser : public LLFloater
|
|||
LLPanel* mMiscJointsPnl{ nullptr };
|
||||
LLPanel* mCollisionVolumesPnl{ nullptr };
|
||||
LLPanel* mPosesLoadSavePnl{ nullptr };
|
||||
|
||||
LLCheckBoxCtrl* mResetBaseRotCbx{ nullptr };
|
||||
LLCheckBoxCtrl* mAlsoSaveBvhCbx{ nullptr };
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -29,12 +29,15 @@
|
|||
#include "fsposingmotion.h"
|
||||
#include "llcharacter.h"
|
||||
|
||||
/// <summary>
|
||||
/// The maximum length of any undo queue; adding new members preens older ones.
|
||||
/// </summary>
|
||||
constexpr size_t MaximumUndoQueueLength = 20;
|
||||
|
||||
/// <summary>
|
||||
/// The constant time interval, in seconds, specifying whether an 'undo' value should be added.
|
||||
/// </summary>
|
||||
constexpr std::chrono::duration<double> UndoUpdateInterval = std::chrono::duration<double>(0.3);
|
||||
constexpr std::chrono::duration<double> UndoUpdateInterval = std::chrono::duration<double>(0.8);
|
||||
|
||||
FSJointPose::FSJointPose(LLJoint* joint, U32 usage, bool isCollisionVolume)
|
||||
{
|
||||
|
|
@ -166,13 +169,31 @@ void FSJointPose::swapRotationWith(FSJointPose* oppositeJoint)
|
|||
if (mIsCollisionVolume)
|
||||
return;
|
||||
|
||||
LLJoint* joint = mJointState->getJoint();
|
||||
if (!joint)
|
||||
auto tempRot = FSJointRotation(mRotation);
|
||||
mRotation = FSJointRotation(oppositeJoint->mRotation);
|
||||
oppositeJoint->mRotation = tempRot;
|
||||
}
|
||||
|
||||
void FSJointPose::cloneRotationFrom(FSJointPose* fromJoint)
|
||||
{
|
||||
if (!fromJoint)
|
||||
return;
|
||||
|
||||
auto tempRot = FSJointRotation(mRotation);
|
||||
mRotation = FSJointRotation(oppositeJoint->mRotation);
|
||||
oppositeJoint->mRotation = tempRot;
|
||||
addToUndo(mRotation, &mUndoneRotationIndex, &mLastSetRotationDeltas, &mTimeLastUpdatedRotation);
|
||||
mRotation = FSJointRotation(fromJoint->mRotation);
|
||||
}
|
||||
|
||||
void FSJointPose::mirrorRotationFrom(FSJointPose* fromJoint)
|
||||
{
|
||||
if (!fromJoint)
|
||||
return;
|
||||
|
||||
cloneRotationFrom(fromJoint);
|
||||
|
||||
mRotation.baseRotation = LLQuaternion(-mRotation.baseRotation.mQ[VX], mRotation.baseRotation.mQ[VY], -mRotation.baseRotation.mQ[VZ],
|
||||
mRotation.baseRotation.mQ[VW]);
|
||||
mRotation.deltaRotation = LLQuaternion(-mRotation.deltaRotation.mQ[VX], mRotation.deltaRotation.mQ[VY], -mRotation.deltaRotation.mQ[VZ],
|
||||
mRotation.deltaRotation.mQ[VW]);
|
||||
}
|
||||
|
||||
void FSJointPose::revertJointScale()
|
||||
|
|
|
|||
|
|
@ -147,6 +147,16 @@ class FSJointPose
|
|||
/// </summary>
|
||||
void swapRotationWith(FSJointPose* oppositeJoint);
|
||||
|
||||
/// <summary>
|
||||
/// Clones the rotation to this from the supplied joint.
|
||||
/// </summary>
|
||||
void cloneRotationFrom(FSJointPose* fromJoint);
|
||||
|
||||
/// <summary>
|
||||
/// Mirrors the rotation to this from the supplied joint.
|
||||
/// </summary>
|
||||
void mirrorRotationFrom(FSJointPose* fromJoint);
|
||||
|
||||
/// <summary>
|
||||
/// Resets the beginning properties of the joint this represents.
|
||||
/// </summary>
|
||||
|
|
|
|||
|
|
@ -116,7 +116,7 @@ void FSPoserAnimator::undoLastJointRotation(LLVOAvatar* avatar, const FSPoserJoi
|
|||
|
||||
jointPose->undoLastRotationChange();
|
||||
|
||||
if (style == NONE)
|
||||
if (style == NONE || style == DELTAMODE)
|
||||
return;
|
||||
|
||||
FSJointPose* oppositeJointPose = posingMotion->getJointPoseByJointName(joint.mirrorJointName());
|
||||
|
|
@ -144,7 +144,7 @@ void FSPoserAnimator::undoLastJointPosition(LLVOAvatar* avatar, const FSPoserJoi
|
|||
|
||||
jointPose->undoLastPositionChange();
|
||||
|
||||
if (style == NONE)
|
||||
if (style == NONE || style == DELTAMODE)
|
||||
return;
|
||||
|
||||
FSJointPose* oppositeJointPose = posingMotion->getJointPoseByJointName(joint.mirrorJointName());
|
||||
|
|
@ -172,7 +172,7 @@ void FSPoserAnimator::undoLastJointScale(LLVOAvatar* avatar, const FSPoserJoint&
|
|||
|
||||
jointPose->undoLastScaleChange();
|
||||
|
||||
if (style == NONE)
|
||||
if (style == NONE || style == DELTAMODE)
|
||||
return;
|
||||
|
||||
FSJointPose* oppositeJointPose = posingMotion->getJointPoseByJointName(joint.mirrorJointName());
|
||||
|
|
@ -200,7 +200,7 @@ void FSPoserAnimator::resetJointPosition(LLVOAvatar* avatar, const FSPoserJoint&
|
|||
|
||||
jointPose->setPositionDelta(LLVector3());
|
||||
|
||||
if (style == NONE)
|
||||
if (style == NONE || style == DELTAMODE)
|
||||
return;
|
||||
|
||||
FSJointPose* oppositeJointPose = posingMotion->getJointPoseByJointName(joint.mirrorJointName());
|
||||
|
|
@ -228,7 +228,7 @@ void FSPoserAnimator::resetJointScale(LLVOAvatar* avatar, const FSPoserJoint& jo
|
|||
|
||||
jointPose->setScaleDelta(LLVector3());
|
||||
|
||||
if (style == NONE)
|
||||
if (style == NONE || style == DELTAMODE)
|
||||
return;
|
||||
|
||||
FSJointPose* oppositeJointPose = posingMotion->getJointPoseByJointName(joint.mirrorJointName());
|
||||
|
|
@ -275,7 +275,7 @@ void FSPoserAnimator::redoLastJointRotation(LLVOAvatar* avatar, const FSPoserJoi
|
|||
|
||||
jointPose->redoLastRotationChange();
|
||||
|
||||
if (style == NONE)
|
||||
if (style == NONE || style == DELTAMODE)
|
||||
return;
|
||||
|
||||
FSJointPose* oppositeJointPose = posingMotion->getJointPoseByJointName(joint.mirrorJointName());
|
||||
|
|
@ -303,7 +303,7 @@ void FSPoserAnimator::redoLastJointPosition(LLVOAvatar* avatar, const FSPoserJoi
|
|||
|
||||
jointPose->redoLastPositionChange();
|
||||
|
||||
if (style == NONE)
|
||||
if (style == NONE || style == DELTAMODE)
|
||||
return;
|
||||
|
||||
FSJointPose* oppositeJointPose = posingMotion->getJointPoseByJointName(joint.mirrorJointName());
|
||||
|
|
@ -331,7 +331,7 @@ void FSPoserAnimator::redoLastJointScale(LLVOAvatar* avatar, const FSPoserJoint&
|
|||
|
||||
jointPose->redoLastScaleChange();
|
||||
|
||||
if (style == NONE)
|
||||
if (style == NONE || style == DELTAMODE)
|
||||
return;
|
||||
|
||||
FSJointPose* oppositeJointPose = posingMotion->getJointPoseByJointName(joint.mirrorJointName());
|
||||
|
|
@ -377,29 +377,40 @@ void FSPoserAnimator::setJointPosition(LLVOAvatar* avatar, const FSPoserJoint* j
|
|||
if (!jointPose)
|
||||
return;
|
||||
|
||||
if (style == NONE)
|
||||
{
|
||||
jointPose->setPositionDelta(position);
|
||||
return;
|
||||
}
|
||||
|
||||
LLVector3 positionDelta = jointPose->getPositionDelta() - position;
|
||||
|
||||
switch (style)
|
||||
{
|
||||
case MIRROR:
|
||||
case MIRROR_DELTA:
|
||||
case SYMPATHETIC_DELTA:
|
||||
case SYMPATHETIC:
|
||||
jointPose->setPositionDelta(position);
|
||||
break;
|
||||
|
||||
case DELTAMODE:
|
||||
case NONE:
|
||||
default:
|
||||
jointPose->setPositionDelta(position);
|
||||
return;
|
||||
}
|
||||
|
||||
FSJointPose* oppositeJointPose = posingMotion->getJointPoseByJointName(joint->mirrorJointName());
|
||||
if (!oppositeJointPose)
|
||||
return;
|
||||
|
||||
LLVector3 oppositeJointPosition = oppositeJointPose->getPositionDelta();
|
||||
|
||||
switch (style)
|
||||
{
|
||||
case SYMPATHETIC:
|
||||
jointPose->setPositionDelta(position);
|
||||
oppositeJointPose->setPositionDelta(oppositeJointPosition - positionDelta);
|
||||
case MIRROR:
|
||||
case MIRROR_DELTA:
|
||||
oppositeJointPose->setPositionDelta(oppositeJointPosition + positionDelta);
|
||||
break;
|
||||
|
||||
case MIRROR:
|
||||
jointPose->setPositionDelta(position);
|
||||
oppositeJointPose->setPositionDelta(oppositeJointPosition + positionDelta);
|
||||
case SYMPATHETIC_DELTA:
|
||||
case SYMPATHETIC:
|
||||
oppositeJointPose->setPositionDelta(oppositeJointPosition - positionDelta);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
|
@ -485,8 +496,9 @@ LLVector3 FSPoserAnimator::getJointRotation(LLVOAvatar* avatar, const FSPoserJoi
|
|||
return translateRotationFromQuaternion(translation, negation, jointPose->getRotationDelta());
|
||||
}
|
||||
|
||||
void FSPoserAnimator::setJointRotation(LLVOAvatar* avatar, const FSPoserJoint* joint, const LLVector3& rotation, E_BoneDeflectionStyles style, E_BoneAxisTranslation translation, S32 negation,
|
||||
bool resetBaseRotationToZero)
|
||||
void FSPoserAnimator::setJointRotation(LLVOAvatar* avatar, const FSPoserJoint* joint, const LLVector3& absRotation,
|
||||
const LLVector3& deltaRotation, E_BoneDeflectionStyles deflectionStyle,
|
||||
E_BoneAxisTranslation translation, S32 negation, bool resetBaseRotationToZero, E_RotationStyle rotationStyle)
|
||||
{
|
||||
if (!isAvatarSafeToUse(avatar))
|
||||
return;
|
||||
|
|
@ -504,21 +516,35 @@ void FSPoserAnimator::setJointRotation(LLVOAvatar* avatar, const FSPoserJoint* j
|
|||
if (resetBaseRotationToZero)
|
||||
jointPose->zeroBaseRotation();
|
||||
|
||||
LLQuaternion rot_quat = translateRotationToQuaternion(translation, negation, rotation);
|
||||
switch (style)
|
||||
LLQuaternion absRot = translateRotationToQuaternion(translation, negation, absRotation);
|
||||
LLQuaternion deltaRot = translateRotationToQuaternion(translation, negation, deltaRotation);
|
||||
switch (deflectionStyle)
|
||||
{
|
||||
case SYMPATHETIC:
|
||||
case MIRROR:
|
||||
jointPose->setRotationDelta(rot_quat);
|
||||
if (rotationStyle == DELTAIC_ROT)
|
||||
jointPose->setRotationDelta(deltaRot * jointPose->getRotationDelta());
|
||||
else
|
||||
jointPose->setRotationDelta(absRot);
|
||||
|
||||
break;
|
||||
|
||||
case SYMPATHETIC_DELTA:
|
||||
case MIRROR_DELTA:
|
||||
jointPose->setRotationDelta(deltaRot * jointPose->getRotationDelta());
|
||||
break;
|
||||
|
||||
case DELTAMODE:
|
||||
jointPose->setRotationDelta(rot_quat * jointPose->getRotationDelta());
|
||||
break;
|
||||
jointPose->setRotationDelta(deltaRot * jointPose->getRotationDelta());
|
||||
return;
|
||||
|
||||
case NONE:
|
||||
default:
|
||||
jointPose->setRotationDelta(rot_quat);
|
||||
if (rotationStyle == DELTAIC_ROT)
|
||||
jointPose->setRotationDelta(deltaRot * jointPose->getRotationDelta());
|
||||
else
|
||||
jointPose->setRotationDelta(absRot);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -526,23 +552,24 @@ void FSPoserAnimator::setJointRotation(LLVOAvatar* avatar, const FSPoserJoint* j
|
|||
if (!oppositeJointPose)
|
||||
return;
|
||||
|
||||
if (resetBaseRotationToZero)
|
||||
oppositeJointPose->zeroBaseRotation();
|
||||
|
||||
LLQuaternion inv_quat;
|
||||
switch (style)
|
||||
switch (deflectionStyle)
|
||||
{
|
||||
case SYMPATHETIC:
|
||||
oppositeJointPose->setRotationDelta(rot_quat);
|
||||
oppositeJointPose->cloneRotationFrom(jointPose);
|
||||
break;
|
||||
|
||||
case SYMPATHETIC_DELTA:
|
||||
oppositeJointPose->setRotationDelta(deltaRot * oppositeJointPose->getRotationDelta());
|
||||
break;
|
||||
|
||||
case MIRROR:
|
||||
inv_quat = LLQuaternion(-rot_quat.mQ[VX], rot_quat.mQ[VY], -rot_quat.mQ[VZ], rot_quat.mQ[VW]);
|
||||
oppositeJointPose->setRotationDelta(inv_quat);
|
||||
oppositeJointPose->mirrorRotationFrom(jointPose);
|
||||
break;
|
||||
|
||||
case DELTAMODE:
|
||||
oppositeJointPose->setRotationDelta(rot_quat * oppositeJointPose->getRotationDelta());
|
||||
case MIRROR_DELTA:
|
||||
inv_quat = LLQuaternion(-deltaRot.mQ[VX], deltaRot.mQ[VY], -deltaRot.mQ[VZ], deltaRot.mQ[VW]);
|
||||
oppositeJointPose->setRotationDelta(inv_quat * oppositeJointPose->getRotationDelta());
|
||||
break;
|
||||
|
||||
default:
|
||||
|
|
@ -652,6 +679,7 @@ LLQuaternion FSPoserAnimator::translateRotationToQuaternion(E_BoneAxisTranslatio
|
|||
|
||||
LLQuaternion rot_quat;
|
||||
rot_quat = LLQuaternion(rot_mat) * rot_quat;
|
||||
rot_quat.normalize();
|
||||
|
||||
return rot_quat;
|
||||
}
|
||||
|
|
@ -745,15 +773,24 @@ void FSPoserAnimator::setJointScale(LLVOAvatar* avatar, const FSPoserJoint* join
|
|||
return;
|
||||
|
||||
jointPose->setScaleDelta(scale);
|
||||
|
||||
if (style == NONE)
|
||||
return;
|
||||
|
||||
FSJointPose* oppositeJointPose = posingMotion->getJointPoseByJointName(joint->mirrorJointName());
|
||||
if (!oppositeJointPose)
|
||||
return;
|
||||
|
||||
oppositeJointPose->setScaleDelta(scale);
|
||||
switch (style)
|
||||
{
|
||||
case SYMPATHETIC:
|
||||
case MIRROR:
|
||||
case SYMPATHETIC_DELTA:
|
||||
case MIRROR_DELTA:
|
||||
oppositeJointPose->setScaleDelta(scale);
|
||||
break;
|
||||
|
||||
case DELTAMODE:
|
||||
case NONE:
|
||||
default:
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
bool FSPoserAnimator::tryGetJointSaveVectors(LLVOAvatar* avatar, const FSPoserJoint& joint, LLVector3* rot, LLVector3* pos,
|
||||
|
|
|
|||
|
|
@ -50,12 +50,28 @@ typedef enum E_BoneTypes
|
|||
/// </summary>
|
||||
typedef enum E_BoneDeflectionStyles
|
||||
{
|
||||
NONE = 0, // do nothing additional
|
||||
MIRROR = 1, // change the other joint, like in a mirror, eg: one left one right
|
||||
SYMPATHETIC = 2, // change the other joint, but opposite to a mirrored way, eg: both go right or both go left
|
||||
DELTAMODE = 3, // each selected joint changes by the same supplied amount relative to their current
|
||||
NONE = 0, // do nothing additional
|
||||
MIRROR = 1, // change the other joint, like in a mirror, eg: one left one right
|
||||
SYMPATHETIC = 2, // change the other joint, but opposite to a mirrored way, eg: both go right or both go left
|
||||
DELTAMODE = 3, // each selected joint changes by the same supplied amount relative to their current
|
||||
MIRROR_DELTA = 4, // Applies a MIRROR delta, this limb and its opposite change by opposite amount
|
||||
SYMPATHETIC_DELTA = 5, // Applies a SYMPATHETIC delta, this limb and the opposite change by the same amount
|
||||
} E_BoneDeflectionStyles;
|
||||
|
||||
/// <summary>
|
||||
/// Joints may have rotations applied by applying an absolute value or a delta value.
|
||||
/// When applying a rotation as absolutes, feedback via the UI can tend to Gimbal lock control of the quaternion.
|
||||
/// For certain joints, particularly "down the centreline", absolute rotations provide the best feel.
|
||||
/// For other joints, such as hips, knees, elbows and wrists, Gimbal lock readily occurs (sitting poses particularly), and
|
||||
/// applying small angle changes directly to the quaternion (rather than going via the locked absolute) makes for
|
||||
/// a more sensible user experience.
|
||||
/// </summary>
|
||||
typedef enum E_RotationStyle
|
||||
{
|
||||
ABSOLUTE_ROT = 0, // The rotation should be applied as an absolute value because while it can Gimbal lock, it doesn't happen often.
|
||||
DELTAIC_ROT = 1, // The rotation should be applied as a delta value because it is apt to Gimbal lock.
|
||||
} E_RotationStyle;
|
||||
|
||||
/// <summary>
|
||||
/// When we're going from bone-rotation to the UI sliders, some of the axes need swapping so they make sense in UI-terms.
|
||||
/// eg: for one bone, the X-axis may mean up and down, but for another bone, the x-axis might be left-right.
|
||||
|
|
@ -98,11 +114,12 @@ public:
|
|||
/// </summary>
|
||||
class FSPoserJoint
|
||||
{
|
||||
std::string mJointName; // expected to be a match to LLJoint.getName() for a joint implementation.
|
||||
std::string mMirrorJointName;
|
||||
E_BoneTypes mBoneList;
|
||||
std::string mJointName; // expected to be a match to LLJoint.getName() for a joint implementation.
|
||||
std::string mMirrorJointName;
|
||||
E_BoneTypes mBoneList;
|
||||
std::vector<std::string> mBvhChildren;
|
||||
bool mDontFlipOnMirror = false;
|
||||
std::string bvhOffsetMagicNumber;
|
||||
bool mDontFlipOnMirror = false;
|
||||
|
||||
public:
|
||||
/// <summary>
|
||||
|
|
@ -130,6 +147,11 @@ public:
|
|||
/// </summary>
|
||||
std::vector<std::string> bvhChildren() const { return mBvhChildren; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the bvh offset magic number for this joint.
|
||||
/// </summary>
|
||||
std::string bvhOffset() const { return bvhOffsetMagicNumber; }
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new instance of a PoserJoint.
|
||||
/// </summary>
|
||||
|
|
@ -142,13 +164,15 @@ public:
|
|||
/// <param name="bone_list">The type of bone, often determining with which other bones the new instance would appear with.</param>
|
||||
/// <param name="bhv_children">The optional array of joints, needed for BVH saving, which are the direct decendent(s) of this joint.</param>
|
||||
/// <param name="dont_flip_on_mirror">The option for whether this joint should rotation-flip it counterpart when mirroring the pose of the entire body.</param>
|
||||
FSPoserJoint(std::string joint_name, std::string mirror_joint_name, E_BoneTypes bone_list, std::vector<std::string> bhv_children = {}, bool dont_flip_on_mirror = false)
|
||||
FSPoserJoint(std::string joint_name, std::string mirror_joint_name, E_BoneTypes bone_list,
|
||||
std::vector<std::string> bhv_children = {}, std::string bvhOffset = "", bool dont_flip_on_mirror = false)
|
||||
{
|
||||
mJointName = joint_name;
|
||||
mMirrorJointName = mirror_joint_name;
|
||||
mBoneList = bone_list;
|
||||
mBvhChildren = bhv_children;
|
||||
mDontFlipOnMirror = dont_flip_on_mirror;
|
||||
mJointName = joint_name;
|
||||
mMirrorJointName = mirror_joint_name;
|
||||
mBoneList = bone_list;
|
||||
mBvhChildren = bhv_children;
|
||||
bvhOffsetMagicNumber = bvhOffset;
|
||||
mDontFlipOnMirror = dont_flip_on_mirror;
|
||||
}
|
||||
};
|
||||
|
||||
|
|
@ -162,66 +186,66 @@ public:
|
|||
/// </remarks>
|
||||
const std::vector<FSPoserJoint> PoserJoints{
|
||||
// head, torso, legs
|
||||
{ "mHead", "", BODY },
|
||||
{ "mNeck", "", BODY, { "mHead" } },
|
||||
{ "mPelvis", "", WHOLEAVATAR, { "mTorso", "mHipLeft", "mHipRight" } },
|
||||
{ "mChest", "", BODY, { "mNeck", "mCollarLeft", "mCollarRight", "mWingsRoot" } },
|
||||
{ "mTorso", "", BODY, { "mChest" } },
|
||||
{ "mCollarLeft", "mCollarRight", BODY, { "mShoulderLeft" } },
|
||||
{ "mShoulderLeft", "mShoulderRight", BODY, { "mElbowLeft" } },
|
||||
{ "mElbowLeft", "mElbowRight", BODY, { "mWristLeft" } },
|
||||
{ "mWristLeft", "mWristRight", BODY },
|
||||
{ "mCollarRight", "mCollarLeft", BODY, { "mShoulderRight" }, true },
|
||||
{ "mShoulderRight", "mShoulderLeft", BODY, { "mElbowRight" }, true },
|
||||
{ "mElbowRight", "mElbowLeft", BODY, { "mWristRight" }, true },
|
||||
{ "mWristRight", "mWristLeft", BODY, {}, true },
|
||||
{ "mHipLeft", "mHipRight", BODY, { "mKneeLeft" } },
|
||||
{ "mKneeLeft", "mKneeRight", BODY, { "mAnkleLeft" } },
|
||||
{ "mAnkleLeft", "mAnkleRight", BODY },
|
||||
{ "mHipRight", "mHipLeft", BODY, { "mKneeRight" }, true },
|
||||
{ "mKneeRight", "mKneeLeft", BODY, { "mAnkleRight" }, true },
|
||||
{ "mAnkleRight", "mAnkleLeft", BODY, {}, true },
|
||||
{ "mHead", "", BODY, {}, "0.000000 3.148285 0.000000" },
|
||||
{ "mNeck", "", BODY, { "mHead" }, "0.000000 10.266162 -0.273764" },
|
||||
{ "mPelvis", "", WHOLEAVATAR, { "mTorso", "mHipLeft", "mHipRight" }, "0.000000 0.000000 0.000000" },
|
||||
{ "mChest", "", BODY, { "mNeck", "mCollarLeft", "mCollarRight" }, "0.000000 8.486693 -0.684411" },
|
||||
{ "mTorso", "", BODY, { "mChest" }, "0.000000 3.422050 0.000000" },
|
||||
{ "mCollarLeft", "mCollarRight", BODY, { "mShoulderLeft" }, "3.422053 6.707223 -0.821293" },
|
||||
{ "mShoulderLeft", "mShoulderRight", BODY, { "mElbowLeft" }, "3.285171 0.000000 0.000000" },
|
||||
{ "mElbowLeft", "mElbowRight", BODY, { "mWristLeft" }, "10.129278 0.000000 0.000000" },
|
||||
{ "mWristLeft", "mWristRight", BODY, {}, "8.486692 0.000000 0.000000" },
|
||||
{ "mCollarRight", "mCollarLeft", BODY, { "mShoulderRight" }, "-3.558935 6.707223 -0.821293", true },
|
||||
{ "mShoulderRight", "mShoulderLeft", BODY, { "mElbowRight" }, "-3.148289 0.000000 0.000000", true },
|
||||
{ "mElbowRight", "mElbowLeft", BODY, { "mWristRight" }, "-10.266159 0.000000 0.000000", true },
|
||||
{ "mWristRight", "mWristLeft", BODY, {}, "-8.349810 0.000000 0.000000", true },
|
||||
{ "mHipLeft", "mHipRight", BODY, { "mKneeLeft" }, "5.338403 -1.642589 1.368821" },
|
||||
{ "mKneeLeft", "mKneeRight", BODY, { "mAnkleLeft" }, "-2.053232 -20.121670 0.000000" },
|
||||
{ "mAnkleLeft", "mAnkleRight", BODY, {}, "0.000000 -19.300380 -1.231939" },
|
||||
{ "mHipRight", "mHipLeft", BODY, { "mKneeRight" }, "-5.338403 -1.642589 1.368821", true },
|
||||
{ "mKneeRight", "mKneeLeft", BODY, { "mAnkleRight" }, "2.053232 -20.121670 0.000000", true },
|
||||
{ "mAnkleRight", "mAnkleLeft", BODY, {}, "0.000000 -19.300380 -1.231939", true },
|
||||
|
||||
// face
|
||||
{ "mFaceForeheadLeft", "mFaceForeheadRight", FACE },
|
||||
{ "mFaceForeheadCenter", "", FACE },
|
||||
{ "mFaceForeheadRight", "mFaceForeheadLeft", FACE, {}, true },
|
||||
{ "mFaceForeheadRight", "mFaceForeheadLeft", FACE, {}, "", true },
|
||||
{ "mFaceEyebrowOuterLeft", "mFaceEyebrowOuterRight", FACE },
|
||||
{ "mFaceEyebrowCenterLeft", "mFaceEyebrowCenterRight", FACE },
|
||||
{ "mFaceEyebrowInnerLeft", "mFaceEyebrowInnerRight", FACE },
|
||||
{ "mFaceEyebrowOuterRight", "mFaceEyebrowOuterLeft", FACE, {}, true },
|
||||
{ "mFaceEyebrowCenterRight", "mFaceEyebrowCenterLeft", FACE, {}, true },
|
||||
{ "mFaceEyebrowInnerRight", "mFaceEyebrowInnerLeft", FACE, {}, true },
|
||||
{ "mFaceEyebrowOuterRight", "mFaceEyebrowOuterLeft", FACE, {}, "", true },
|
||||
{ "mFaceEyebrowCenterRight", "mFaceEyebrowCenterLeft", FACE, {}, "", true },
|
||||
{ "mFaceEyebrowInnerRight", "mFaceEyebrowInnerLeft", FACE, {}, "", true },
|
||||
|
||||
{ "mEyeLeft", "mEyeRight", FACE },
|
||||
{ "mEyeRight", "mEyeLeft", FACE, {}, true },
|
||||
{ "mEyeRight", "mEyeLeft", FACE, {}, "", true },
|
||||
{ "mFaceEyeLidUpperLeft", "mFaceEyeLidUpperRight", FACE },
|
||||
{ "mFaceEyeLidLowerLeft", "mFaceEyeLidLowerRight", FACE },
|
||||
{ "mFaceEyeLidUpperRight", "mFaceEyeLidUpperLeft", FACE, {}, true },
|
||||
{ "mFaceEyeLidLowerRight", "mFaceEyeLidLowerLeft", FACE, {}, true },
|
||||
{ "mFaceEyeLidUpperRight", "mFaceEyeLidUpperLeft", FACE, {}, "", true },
|
||||
{ "mFaceEyeLidLowerRight", "mFaceEyeLidLowerLeft", FACE, {}, "", true },
|
||||
|
||||
{ "mFaceEar1Left", "mFaceEar1Right", FACE },
|
||||
{ "mFaceEar2Left", "mFaceEar2Right", FACE },
|
||||
{ "mFaceEar1Right", "mFaceEar1Left", FACE, {}, true },
|
||||
{ "mFaceEar2Right", "mFaceEar2Left", FACE, {}, true },
|
||||
{ "mFaceEar1Right", "mFaceEar1Left", FACE, {}, "", true },
|
||||
{ "mFaceEar2Right", "mFaceEar2Left", FACE, {}, "", true },
|
||||
{ "mFaceNoseLeft", "mFaceNoseRight", FACE },
|
||||
{ "mFaceNoseCenter", "", FACE },
|
||||
{ "mFaceNoseRight", "mFaceNoseLeft", FACE, {}, true },
|
||||
{ "mFaceNoseRight", "mFaceNoseLeft", FACE, {}, "", true },
|
||||
|
||||
{ "mFaceCheekUpperLeft", "mFaceCheekUpperRight", FACE },
|
||||
{ "mFaceCheekLowerLeft", "mFaceCheekLowerRight", FACE },
|
||||
{ "mFaceCheekUpperRight", "mFaceCheekUpperLeft", FACE, {}, true },
|
||||
{ "mFaceCheekLowerRight", "mFaceCheekLowerLeft", FACE, {}, true },
|
||||
{ "mFaceCheekUpperRight", "mFaceCheekUpperLeft", FACE, {}, "", true },
|
||||
{ "mFaceCheekLowerRight", "mFaceCheekLowerLeft", FACE, {}, "", true },
|
||||
{ "mFaceLipUpperLeft", "mFaceLipUpperRight", FACE },
|
||||
{ "mFaceLipUpperCenter", "", FACE },
|
||||
{ "mFaceLipUpperRight", "mFaceLipUpperLeft", FACE, {}, true },
|
||||
{ "mFaceLipUpperRight", "mFaceLipUpperLeft", FACE, {}, "", true },
|
||||
{ "mFaceLipCornerLeft", "mFaceLipCornerRight", FACE },
|
||||
{ "mFaceLipCornerRight", "mFaceLipCornerLeft", FACE, {}, true },
|
||||
{ "mFaceLipCornerRight", "mFaceLipCornerLeft", FACE, {}, "", true },
|
||||
{ "mFaceTongueBase", "", FACE },
|
||||
{ "mFaceTongueTip", "", FACE, {}, true },
|
||||
{ "mFaceTongueTip", "", FACE, {}, "", true },
|
||||
{ "mFaceLipLowerLeft", "mFaceLipLowerRight", FACE },
|
||||
{ "mFaceLipLowerCenter", "", FACE },
|
||||
{ "mFaceLipLowerRight", "mFaceLipLowerLeft", FACE, {}, true },
|
||||
{ "mFaceLipLowerRight", "mFaceLipLowerLeft", FACE, {}, "", true },
|
||||
{ "mFaceJaw", "", FACE },
|
||||
|
||||
// left hand
|
||||
|
|
@ -242,21 +266,21 @@ public:
|
|||
{ "mHandPinky3Left", "mHandPinky3Right", HANDS },
|
||||
|
||||
// right hand
|
||||
{ "mHandThumb1Right", "mHandThumb1Left", HANDS, {}, true },
|
||||
{ "mHandThumb2Right", "mHandThumb2Left", HANDS, {}, true },
|
||||
{ "mHandThumb3Right", "mHandThumb3Left", HANDS, {}, true },
|
||||
{ "mHandIndex1Right", "mHandIndex1Left", HANDS, {}, true },
|
||||
{ "mHandIndex2Right", "mHandIndex2Left", HANDS, {}, true },
|
||||
{ "mHandIndex3Right", "mHandIndex3Left", HANDS, {}, true },
|
||||
{ "mHandMiddle1Right", "mHandMiddle1Left", HANDS, {}, true },
|
||||
{ "mHandMiddle2Right", "mHandMiddle2Left", HANDS, {}, true },
|
||||
{ "mHandMiddle3Right", "mHandMiddle3Left", HANDS, {}, true },
|
||||
{ "mHandRing1Right", "mHandRing1Left", HANDS, {}, true },
|
||||
{ "mHandRing2Right", "mHandRing2Left", HANDS, {}, true },
|
||||
{ "mHandRing3Right", "mHandRing3Left", HANDS, {}, true },
|
||||
{ "mHandPinky1Right", "mHandPinky1Left", HANDS, {}, true },
|
||||
{ "mHandPinky2Right", "mHandPinky2Left", HANDS, {}, true },
|
||||
{ "mHandPinky3Right", "mHandPinky3Left", HANDS, {}, true },
|
||||
{ "mHandThumb1Right", "mHandThumb1Left", HANDS, {}, "", true },
|
||||
{ "mHandThumb2Right", "mHandThumb2Left", HANDS, {}, "", true },
|
||||
{ "mHandThumb3Right", "mHandThumb3Left", HANDS, {}, "", true },
|
||||
{ "mHandIndex1Right", "mHandIndex1Left", HANDS, {}, "", true },
|
||||
{ "mHandIndex2Right", "mHandIndex2Left", HANDS, {}, "", true },
|
||||
{ "mHandIndex3Right", "mHandIndex3Left", HANDS, {}, "", true },
|
||||
{ "mHandMiddle1Right", "mHandMiddle1Left", HANDS, {}, "", true },
|
||||
{ "mHandMiddle2Right", "mHandMiddle2Left", HANDS, {}, "", true },
|
||||
{ "mHandMiddle3Right", "mHandMiddle3Left", HANDS, {}, "", true },
|
||||
{ "mHandRing1Right", "mHandRing1Left", HANDS, {}, "", true },
|
||||
{ "mHandRing2Right", "mHandRing2Left", HANDS, {}, "", true },
|
||||
{ "mHandRing3Right", "mHandRing3Left", HANDS, {}, "", true },
|
||||
{ "mHandPinky1Right", "mHandPinky1Left", HANDS, {}, "", true },
|
||||
{ "mHandPinky2Right", "mHandPinky2Left", HANDS, {}, "", true },
|
||||
{ "mHandPinky3Right", "mHandPinky3Left", HANDS, {}, "", true },
|
||||
|
||||
// tail and hind limbs
|
||||
{ "mTail1", "", MISC },
|
||||
|
|
@ -271,10 +295,10 @@ public:
|
|||
{ "mHindLimb2Left", "mHindLimb2Right", MISC },
|
||||
{ "mHindLimb3Left", "mHindLimb3Right", MISC },
|
||||
{ "mHindLimb4Left", "mHindLimb4Right", MISC },
|
||||
{ "mHindLimb1Right", "mHindLimb1Left", MISC, {}, true },
|
||||
{ "mHindLimb2Right", "mHindLimb2Left", MISC, {}, true },
|
||||
{ "mHindLimb3Right", "mHindLimb3Left", MISC, {}, true },
|
||||
{ "mHindLimb4Right", "mHindLimb4Left", MISC, {}, true },
|
||||
{ "mHindLimb1Right", "mHindLimb1Left", MISC, {}, "", true },
|
||||
{ "mHindLimb2Right", "mHindLimb2Left", MISC, {}, "", true },
|
||||
{ "mHindLimb3Right", "mHindLimb3Left", MISC, {}, "", true },
|
||||
{ "mHindLimb4Right", "mHindLimb4Left", MISC, {}, "", true },
|
||||
|
||||
// wings
|
||||
{ "mWingsRoot", "", MISC },
|
||||
|
|
@ -283,15 +307,15 @@ public:
|
|||
{ "mWing3Left", "mWing3Right", MISC },
|
||||
{ "mWing4Left", "mWing4Right", MISC },
|
||||
{ "mWing4FanLeft", "mWing4FanRight", MISC },
|
||||
{ "mWing1Right", "mWing1Left", MISC, {}, true },
|
||||
{ "mWing2Right", "mWing2Left", MISC, {}, true },
|
||||
{ "mWing3Right", "mWing3Left", MISC, {}, true },
|
||||
{ "mWing4Right", "mWing4Left", MISC, {}, true },
|
||||
{ "mWing4FanRight", "mWing4FanLeft", MISC, {}, true },
|
||||
{ "mWing1Right", "mWing1Left", MISC, {}, "", true },
|
||||
{ "mWing2Right", "mWing2Left", MISC, {}, "", true },
|
||||
{ "mWing3Right", "mWing3Left", MISC, {}, "", true },
|
||||
{ "mWing4Right", "mWing4Left", MISC, {}, "", true },
|
||||
{ "mWing4FanRight", "mWing4FanLeft", MISC, {}, "", true },
|
||||
|
||||
// Collision Volumes
|
||||
{ "LEFT_PEC", "RIGHT_PEC", COL_VOLUMES },
|
||||
{ "RIGHT_PEC", "LEFT_PEC", COL_VOLUMES, {}, true },
|
||||
{ "RIGHT_PEC", "LEFT_PEC", COL_VOLUMES, {}, "", true },
|
||||
{ "BELLY", "", COL_VOLUMES },
|
||||
{ "BUTT", "", COL_VOLUMES },
|
||||
};
|
||||
|
|
@ -447,13 +471,15 @@ public:
|
|||
/// </summary>
|
||||
/// <param name="avatar">The avatar whose joint is to be set.</param>
|
||||
/// <param name="joint">The joint to set.</param>
|
||||
/// <param name="rotation">The rotation to set the joint to.</param>
|
||||
/// <param name="absRotation">The absolute rotation to apply to the joint, if appropriate.</param>
|
||||
/// <param name="deltaRotation">The delta of rotation to apply to the joint, if appropriate.</param>
|
||||
/// <param name="style">Any ancilliary action to be taken with the change to be made.</param>
|
||||
/// <param name="translation">The axial translation form the supplied joint.</param>
|
||||
/// <param name="negation">The style of negation to apply to the set.</param>
|
||||
/// <param name="resetBaseRotationToZero">Whether to set the base rotation to zero on setting the rotation.</param>
|
||||
void setJointRotation(LLVOAvatar* avatar, const FSPoserJoint* joint, const LLVector3& rotation, E_BoneDeflectionStyles style,
|
||||
E_BoneAxisTranslation translation, S32 negation, bool resetBaseRotationToZero);
|
||||
/// <param name="rotationStyle">Whether to apply the supplied rotation as a delta to the supplied joint.</param>
|
||||
void setJointRotation(LLVOAvatar* avatar, const FSPoserJoint* joint, const LLVector3& absRotation, const LLVector3& deltaRotation, E_BoneDeflectionStyles style,
|
||||
E_BoneAxisTranslation translation, S32 negation, bool resetBaseRotationToZero, E_RotationStyle rotationStyle);
|
||||
|
||||
/// <summary>
|
||||
/// Gets the scale of a joint for the supplied avatar.
|
||||
|
|
|
|||
|
|
@ -95,19 +95,19 @@ bool FSPosingMotion::onUpdate(F32 time, U8* joint_mask)
|
|||
targetPosition = jointPose.getTargetPosition();
|
||||
targetScale = jointPose.getTargetScale();
|
||||
|
||||
if (currentPosition != targetPosition)
|
||||
if (vectorsNotQuiteEqual(currentPosition, targetPosition))
|
||||
{
|
||||
currentPosition = lerp(currentPosition, targetPosition, mInterpolationTime);
|
||||
jointPose.getJointState()->setPosition(currentPosition);
|
||||
}
|
||||
|
||||
if (currentRotation != targetRotation)
|
||||
if (quatsNotQuiteEqual(currentRotation, targetRotation))
|
||||
{
|
||||
currentRotation = slerp(mInterpolationTime, currentRotation, targetRotation);
|
||||
jointPose.getJointState()->setRotation(currentRotation);
|
||||
}
|
||||
|
||||
if (currentScale != targetScale)
|
||||
if (vectorsNotQuiteEqual(currentScale, targetScale))
|
||||
{
|
||||
currentScale = lerp(currentScale, targetScale, mInterpolationTime);
|
||||
jointPose.getJointState()->setScale(currentScale);
|
||||
|
|
@ -266,12 +266,35 @@ bool FSPosingMotion::allStartingRotationsAreZero() const
|
|||
void FSPosingMotion::setAllRotationsToZero()
|
||||
{
|
||||
for (auto poserJoint_iter = mJointPoses.begin(); poserJoint_iter != mJointPoses.end(); ++poserJoint_iter)
|
||||
{
|
||||
poserJoint_iter->zeroBaseRotation();
|
||||
poserJoint_iter->setRotationDelta(LLQuaternion::DEFAULT);
|
||||
}
|
||||
}
|
||||
|
||||
constexpr size_t MaximumUndoQueueLength = 20;
|
||||
bool FSPosingMotion::vectorsNotQuiteEqual(LLVector3 v1, LLVector3 v2) const
|
||||
{
|
||||
if (vectorAxesAlmostEqual(v1.mV[VX], v2.mV[VX]) &&
|
||||
vectorAxesAlmostEqual(v1.mV[VY], v2.mV[VY]) &&
|
||||
vectorAxesAlmostEqual(v1.mV[VZ], v2.mV[VZ]))
|
||||
return false;
|
||||
|
||||
/// <summary>
|
||||
/// The constant time interval, in seconds, specifying whether an 'undo' value should be added.
|
||||
/// </summary>
|
||||
constexpr std::chrono::duration<double> UndoUpdateInterval = std::chrono::duration<double>(0.3);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool FSPosingMotion::quatsNotQuiteEqual(const LLQuaternion& q1, const LLQuaternion& q2) const
|
||||
{
|
||||
if (vectorAxesAlmostEqual(q1.mQ[VW], q2.mQ[VW]) &&
|
||||
vectorAxesAlmostEqual(q1.mQ[VX], q2.mQ[VX]) &&
|
||||
vectorAxesAlmostEqual(q1.mQ[VY], q2.mQ[VY]) &&
|
||||
vectorAxesAlmostEqual(q1.mQ[VZ], q2.mQ[VZ]))
|
||||
return false;
|
||||
|
||||
if (vectorAxesAlmostEqual(q1.mQ[VW], -q2.mQ[VW]) &&
|
||||
vectorAxesAlmostEqual(q1.mQ[VX], -q2.mQ[VX]) &&
|
||||
vectorAxesAlmostEqual(q1.mQ[VY], -q2.mQ[VY]) &&
|
||||
vectorAxesAlmostEqual(q1.mQ[VZ], -q2.mQ[VZ]))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -124,6 +124,17 @@ public:
|
|||
void setAllRotationsToZero();
|
||||
|
||||
private:
|
||||
/// <summary>
|
||||
/// The axial difference considered close enough to be the same.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// This is intended to minimize lerps and slerps, preventing wasted CPU time over fractionally small rotation/position/scale differences.
|
||||
/// Too small and it's inefficient. Too large and there is noticeable error in the pose.
|
||||
/// This takes advantage of how the actual vector migrates to equality with the target vector.
|
||||
/// Certain physics settings (bouncing whatnots) account for some longer term work, but as this is applied per joint, it tends to reduce a lot of work.
|
||||
/// </remarks>
|
||||
const F32 closeEnough = 1e-6;
|
||||
|
||||
/// <summary>
|
||||
/// The kind of joint state this animation is concerned with changing.
|
||||
/// </summary>
|
||||
|
|
@ -181,6 +192,24 @@ private:
|
|||
/// </summary>
|
||||
/// <param name="joint">The joint to stop animating.</param>
|
||||
void removeJointFromState(LLJoint* joint);
|
||||
|
||||
/// <summary>
|
||||
/// Determines if two vectors are near enough to equal.
|
||||
/// </summary>
|
||||
/// <param name="v1">The first vector to compare.</param>
|
||||
/// <param name="v2">The sceond vector to compare.</param>
|
||||
/// <returns>true if the vectors are "close enough", otherwise false.</returns>
|
||||
bool vectorsNotQuiteEqual(LLVector3 v1, LLVector3 v2) const;
|
||||
|
||||
/// <summary>
|
||||
/// Determines if two quaternions are near enough to equal.
|
||||
/// </summary>
|
||||
/// <param name="v1">The first quaternion to compare.</param>
|
||||
/// <param name="v2">The sceond quaternion to compare.</param>
|
||||
/// <returns>true if the quaternion are "close enough", otherwise false.</returns>
|
||||
bool quatsNotQuiteEqual(const LLQuaternion& q1, const LLQuaternion& q2) const;
|
||||
|
||||
bool vectorAxesAlmostEqual(F32 qA, F32 qB) const { return llabs(qA - qB) < closeEnough; }
|
||||
};
|
||||
|
||||
#endif // FS_POSINGMOTION_H
|
||||
|
|
|
|||
|
|
@ -306,26 +306,29 @@ bool FSVirtualTrackpad::handleHover(S32 x, S32 y, MASK mask)
|
|||
if (!hasMouseCapture())
|
||||
return true;
|
||||
|
||||
S32 deltaX, deltaY;
|
||||
getHoverMovementDeltas(x, y, mask, &deltaX, &deltaY);
|
||||
S32 deltaX, deltaY, deltaZ;
|
||||
getHoverMovementDeltas(x, y, mask, &deltaX, &deltaY, &deltaZ);
|
||||
applyHoverMovementDeltas(deltaX, deltaY, mask);
|
||||
applyDeltasToValues(deltaX, deltaY, mask);
|
||||
applyDeltasToDeltaValues(deltaX, deltaY, mask);
|
||||
applyDeltasToDeltaValues(deltaX, deltaY, deltaZ, mask);
|
||||
|
||||
onCommit();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void FSVirtualTrackpad::getHoverMovementDeltas(S32 x, S32 y, MASK mask, S32* deltaX, S32* deltaY)
|
||||
void FSVirtualTrackpad::getHoverMovementDeltas(S32 x, S32 y, MASK mask, S32* deltaX, S32* deltaY, S32* deltaZ)
|
||||
{
|
||||
if (!deltaX || !deltaY)
|
||||
if (!deltaX || !deltaY || !deltaZ)
|
||||
return;
|
||||
|
||||
S32 fromX, fromY;
|
||||
fromX = mDoingPinchMode ? mPinchCursorValueX : mCursorValueX;
|
||||
fromY = mDoingPinchMode ? mPinchCursorValueY : mCursorValueY;
|
||||
|
||||
*deltaZ = mWheelClicksSinceLastDelta;
|
||||
mWheelClicksSinceLastDelta = 0;
|
||||
|
||||
if (mask & MASK_CONTROL)
|
||||
{
|
||||
if (!mHeldDownControlBefore)
|
||||
|
|
@ -427,48 +430,48 @@ void FSVirtualTrackpad::applyDeltasToValues(S32 deltaX, S32 deltaY, MASK mask)
|
|||
}
|
||||
}
|
||||
|
||||
void FSVirtualTrackpad::applyDeltasToDeltaValues(S32 deltaX, S32 deltaY, MASK mask)
|
||||
void FSVirtualTrackpad::applyDeltasToDeltaValues(S32 deltaX, S32 deltaY, S32 deltaZ, MASK mask)
|
||||
{
|
||||
if (mDoingPinchMode)
|
||||
{
|
||||
if ((mask & (MASK_SHIFT | MASK_ALT)) == MASK_ALT)
|
||||
{
|
||||
mPinchValueDeltaX = 0;
|
||||
mPinchValueDeltaX = deltaZ;
|
||||
mPinchValueDeltaY = deltaY;
|
||||
mPinchValueDeltaZ = deltaX;
|
||||
}
|
||||
else if ((mask & (MASK_SHIFT | MASK_ALT)) == MASK_SHIFT)
|
||||
{
|
||||
mPinchValueDeltaX = deltaX;
|
||||
mPinchValueDeltaY = 0;
|
||||
mPinchValueDeltaY = deltaZ;
|
||||
mPinchValueDeltaZ = deltaY;
|
||||
}
|
||||
else
|
||||
{
|
||||
mPinchValueDeltaX = deltaX;
|
||||
mPinchValueDeltaY = deltaY;
|
||||
mPinchValueDeltaZ = 0;
|
||||
mPinchValueDeltaZ = deltaZ;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((mask & (MASK_SHIFT | MASK_ALT)) == MASK_ALT)
|
||||
{
|
||||
mValueDeltaX = 0;
|
||||
mValueDeltaX = deltaZ;
|
||||
mValueDeltaY = deltaY;
|
||||
mValueDeltaZ = deltaX;
|
||||
}
|
||||
else if ((mask & (MASK_SHIFT | MASK_ALT)) == MASK_SHIFT)
|
||||
{
|
||||
mValueDeltaX = deltaX;
|
||||
mValueDeltaY = 0;
|
||||
mValueDeltaY = deltaZ;
|
||||
mValueDeltaZ = deltaY;
|
||||
}
|
||||
else
|
||||
{
|
||||
mValueDeltaX = deltaX;
|
||||
mValueDeltaY = deltaY;
|
||||
mValueDeltaZ = 0;
|
||||
mValueDeltaZ = deltaZ;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -602,23 +605,43 @@ bool FSVirtualTrackpad::handleScrollWheel(S32 x, S32 y, S32 clicks)
|
|||
if (mask & MASK_CONTROL)
|
||||
changeAmount /= 5;
|
||||
|
||||
mWheelClicksSinceLastDelta = -1 * clicks * changeAmount;
|
||||
|
||||
if (mDoingPinchMode)
|
||||
{
|
||||
if ((mask & (MASK_SHIFT | MASK_ALT)) == MASK_ALT)
|
||||
mPinchValueX -= clicks * changeAmount;
|
||||
{
|
||||
mPinchValueX += mWheelClicksSinceLastDelta;
|
||||
mPinchValueDeltaX = mWheelClicksSinceLastDelta;
|
||||
}
|
||||
else if ((mask & (MASK_SHIFT | MASK_ALT)) == MASK_SHIFT)
|
||||
mPinchValueY -= clicks * changeAmount;
|
||||
{
|
||||
mPinchValueY += mWheelClicksSinceLastDelta;
|
||||
mPinchValueDeltaY = mWheelClicksSinceLastDelta;
|
||||
}
|
||||
else
|
||||
mPinchValueZ -= clicks * changeAmount;
|
||||
{
|
||||
mPinchValueZ += mWheelClicksSinceLastDelta;
|
||||
mPinchValueDeltaZ = mWheelClicksSinceLastDelta;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((mask & (MASK_SHIFT | MASK_ALT)) == MASK_ALT)
|
||||
mValueX -= clicks * changeAmount;
|
||||
{
|
||||
mValueX += mWheelClicksSinceLastDelta;
|
||||
mValueDeltaX = mWheelClicksSinceLastDelta;
|
||||
}
|
||||
else if ((mask & (MASK_SHIFT | MASK_ALT)) == MASK_SHIFT)
|
||||
mValueY -= clicks * changeAmount;
|
||||
{
|
||||
mValueY += mWheelClicksSinceLastDelta;
|
||||
mValueDeltaY = mWheelClicksSinceLastDelta;
|
||||
}
|
||||
else
|
||||
mValueZ -= clicks * changeAmount;
|
||||
{
|
||||
mValueZ += mWheelClicksSinceLastDelta;
|
||||
mValueDeltaZ = mWheelClicksSinceLastDelta;
|
||||
}
|
||||
}
|
||||
|
||||
if (!hasMouseCapture())
|
||||
|
|
|
|||
|
|
@ -119,10 +119,10 @@ private:
|
|||
LLVector3 normalizePixelPos(S32 x, S32 y, S32 z) const;
|
||||
LLVector3 normalizeDelta(S32 x, S32 y, S32 z) const;
|
||||
|
||||
void getHoverMovementDeltas(S32 x, S32 y, MASK mask, S32* deltaX, S32* deltaY);
|
||||
void getHoverMovementDeltas(S32 x, S32 y, MASK mask, S32* deltaX, S32* deltaY, S32* deltaZ);
|
||||
void applyHoverMovementDeltas(S32 deltaX, S32 deltaY, MASK mask);
|
||||
void applyDeltasToValues(S32 deltaX, S32 deltaY, MASK mask);
|
||||
void applyDeltasToDeltaValues(S32 deltaX, S32 deltaY, MASK mask);
|
||||
void applyDeltasToDeltaValues(S32 deltaX, S32 deltaY, S32 deltaZ, MASK mask);
|
||||
|
||||
LLUIImage* mImgMoonBack{ nullptr };
|
||||
LLUIImage* mImgMoonFront{ nullptr };
|
||||
|
|
@ -152,6 +152,11 @@ private:
|
|||
|
||||
bool mHeldDownControlBefore{ false };
|
||||
|
||||
/// <summary>
|
||||
/// The values the owner will get and set.
|
||||
/// </summary>
|
||||
S32 mWheelClicksSinceLastDelta{ 0 };
|
||||
|
||||
/// <summary>
|
||||
/// The values the owner will get and set.
|
||||
/// </summary>
|
||||
|
|
|
|||
|
|
@ -52,6 +52,25 @@ struct hud_object_further_away
|
|||
|
||||
bool hud_object_further_away::operator()(const LLPointer<LLHUDObject>& lhs, const LLPointer<LLHUDObject>& rhs) const
|
||||
{
|
||||
// <FS:minerjr> [FIRE-35019] Add LLHUDNameTag background to floating text and hover highlights
|
||||
// This overrides distance comparision if either of the objects is highlighted.
|
||||
// Get the FSHudTextUseHoverHighlight value from the saved settings and if it is enabled, then check if either object is highlighed
|
||||
static LLCachedControl<bool> mbUseHoverHighlight(*LLControlGroup::getInstance("Global"), "FSHudTextUseHoverHighlight");
|
||||
if (mbUseHoverHighlight)
|
||||
{
|
||||
// If the left object is highlighted then return false to force it be closer to the screen.
|
||||
if (lhs->getIsHighlighted())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
// Else if the right object is highlighted, then return true to force it to be closer to the screen.
|
||||
else if (rhs->getIsHighlighted())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
// Otherwise, neither object is heighlighted, so fall back to the normal distance comparison.
|
||||
// </FS:minerjr> [FIRE-35019]
|
||||
return lhs->getDistance() > rhs->getDistance();
|
||||
}
|
||||
|
||||
|
|
@ -64,6 +83,9 @@ LLHUDObject::LLHUDObject(const U8 type) :
|
|||
mVisible = true;
|
||||
mType = type;
|
||||
mDead = false;
|
||||
// <FS:minerjr> [FIRE-35019] Add LLHUDNameTag background to floating text and hover highlights
|
||||
mbIsHighlighted = false; // Default is off
|
||||
// </FS:minerjr> [FIRE-35019]
|
||||
}
|
||||
|
||||
LLHUDObject::~LLHUDObject()
|
||||
|
|
|
|||
|
|
@ -60,6 +60,11 @@ public:
|
|||
|
||||
bool isVisible() const { return mVisible; }
|
||||
|
||||
// <FS:minerjr> [FIRE-35019] Add LLHUDNameTag background to floating text and hover highlights
|
||||
// Accessor methods for indicating if the HUB object is highlighted
|
||||
void setIsHighlighted(bool isHighlighted) { mbIsHighlighted = isHighlighted; }
|
||||
bool getIsHighlighted() const { return mbIsHighlighted; }
|
||||
// </FS:minerjr> [FIRE-35019]
|
||||
U8 getType() const { return mType; }
|
||||
|
||||
LLVector3d getPositionGlobal() const { return mPositionGlobal; }
|
||||
|
|
@ -111,6 +116,9 @@ protected:
|
|||
U8 mType;
|
||||
bool mDead;
|
||||
bool mVisible;
|
||||
// <FS:minerjr> [FIRE-35019] Add LLHUDNameTag background to floating text and hover highlights
|
||||
bool mbIsHighlighted; // Flag to determine if the object is currently highlighted by hover
|
||||
// </FS:minerjr> [FIRE-35019]
|
||||
LLVector3d mPositionGlobal;
|
||||
LLPointer<LLViewerObject> mSourceObject;
|
||||
LLPointer<LLViewerObject> mTargetObject;
|
||||
|
|
|
|||
|
|
@ -55,6 +55,12 @@ const F32 HORIZONTAL_PADDING = 15.f;
|
|||
const F32 VERTICAL_PADDING = 12.f;
|
||||
const F32 BUFFER_SIZE = 2.f;
|
||||
const F32 HUD_TEXT_MAX_WIDTH = 190.f;
|
||||
// <FS:minerjr> [FIRE-35019] Add LLHUDNameTag background to floating text and hover highlights
|
||||
const F32 LINE_PADDING = 3.f; // aka "leading" - Taken from LLHUDNameTag
|
||||
const S32 SHOW_BACKGROUND_NONE = 0; // Default value and disables the LLHUDText background
|
||||
const S32 SHOW_BACKGROUND_ONLY_HIGHLIGHTED = 1; // Only LLHUDText that is part of the highlighted prim will have a background
|
||||
const S32 SHOW_BACKGROUND_ALL = 2; // All prims that have a LLHUDText will have a background, but the highlighted prim will have a non-transparent background.
|
||||
// </FS:minerjr> [FIRE-35019]
|
||||
const F32 HUD_TEXT_MAX_WIDTH_NO_BUBBLE = 1000.f;
|
||||
const F32 MAX_DRAW_DISTANCE = 300.f;
|
||||
|
||||
|
|
@ -93,11 +99,20 @@ LLHUDText::LLHUDText(const U8 type) :
|
|||
mFadeDistance = gSavedSettings.getF32("FSHudTextFadeDistance");
|
||||
mFadeRange = gSavedSettings.getF32("FSHudTextFadeRange");
|
||||
// </FS:Ansariel>
|
||||
// <FS:minerjr> [FIRE-35019] Add LLHUDNameTag background to floating text and hover highlights
|
||||
mLastDistance = 0.0f; // Just to get rid of a compiler warning
|
||||
// </FS:minerjr> [FIRE-35019]
|
||||
mZCompare = true;
|
||||
mOffscreen = false;
|
||||
mRadius = 0.1f;
|
||||
LLPointer<LLHUDText> ptr(this);
|
||||
sTextObjects.insert(ptr);
|
||||
// <FS:minerjr> [FIRE-35019] Add LLHUDNameTag background to floating text and hover highlights
|
||||
mRoundedRectImgp = LLUI::getUIImage("Rounded_Rect"); // Taken from LLHUDNameTag, uses the existing art asset
|
||||
mBackgroundHeight = 0.0f; // Default background height to 0.0
|
||||
mBackgroundOffsetY = 0.0f; // Default background Y offset to 0.0
|
||||
mLuminance = 1.0f; // Default luminance is 1.0 as the default color is white (1.0, 1.0, 1.0, 1.0)
|
||||
// </FS:minerjr> [FIRE-35019]
|
||||
}
|
||||
|
||||
LLHUDText::~LLHUDText()
|
||||
|
|
@ -108,7 +123,21 @@ void LLHUDText::render()
|
|||
{
|
||||
if (!mOnHUDAttachment && sDisplayText)
|
||||
{
|
||||
LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE);
|
||||
// <FS:minerjr> [FIRE-35019] Add LLHUDNameTag background to floating text and hover highlights
|
||||
//LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE);
|
||||
// If the current text object is highighed and the use hover highlight feature is enabled, then
|
||||
// disable writing to the depth buffer
|
||||
static LLCachedControl<bool> mbUseHoverHighlight(gSavedSettings, "FSHudTextUseHoverHighlight");
|
||||
if (mbUseHoverHighlight && mbIsHighlighted)
|
||||
{
|
||||
LLGLDepthTest gls_depth(GL_FALSE, GL_FALSE);
|
||||
}
|
||||
//Else, use the standard method of writing to the depth buffer for all other non-highlighted text objects
|
||||
else
|
||||
{
|
||||
LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE);
|
||||
}
|
||||
// </FS:minerjr> [FIRE-35019]
|
||||
//LLGLDisable gls_stencil(GL_STENCIL_TEST);
|
||||
renderText();
|
||||
}
|
||||
|
|
@ -128,7 +157,13 @@ void LLHUDText::renderText()
|
|||
LLColor4 shadow_color(0.f, 0.f, 0.f, 1.f);
|
||||
F32 alpha_factor = 1.f;
|
||||
LLColor4 text_color = mColor;
|
||||
if (mDoFade)
|
||||
// <FS:minerjr> [FIRE-35019] Add LLHUDNameTag background to floating text and hover highlights
|
||||
//if (mDoFade)
|
||||
static LLCachedControl<bool> mbUseHoverHighlight(gSavedSettings, "FSHudTextUseHoverHighlight"); // Flag to indicate if hover highlight of prims is enabled
|
||||
static LLCachedControl<S32> mShowBackground(gSavedSettings, "FSHudTextShowBackground"); // Show background values (0 - off, 1 - only highlighted prims, 2 - all prims)
|
||||
// Support fading the text if the text is not highlighted and only if use hover highlight flag is set
|
||||
if (mDoFade && (!mbUseHoverHighlight || (mbUseHoverHighlight && !mbIsHighlighted)))
|
||||
// </FS:minerjr> [FIRE-35019]
|
||||
{
|
||||
// <FS:Ansariel> FIRE-17393: Control HUD text fading by options
|
||||
//if (mLastDistance > mFadeDistance)
|
||||
|
|
@ -143,15 +178,43 @@ void LLHUDText::renderText()
|
|||
{
|
||||
return;
|
||||
}
|
||||
// <FS:minerjr> [FIRE-35019] Add LLHUDNameTag background to floating text and hover highlights
|
||||
//If there is only 1 string and it is blank, don't render as it could add a background on a prim with no text
|
||||
if ((S32)mTextSegments.size() == 1 && mTextSegments[0].isBlank())
|
||||
{
|
||||
return;
|
||||
}
|
||||
// </FS:minerjr> [FIRE-35019]
|
||||
shadow_color.mV[3] = text_color.mV[3];
|
||||
|
||||
mOffsetY = lltrunc(mHeight * ((mVertAlignment == ALIGN_VERT_CENTER) ? 0.5f : 1.f));
|
||||
|
||||
// *TODO: make this a per-text setting
|
||||
static LLCachedControl<F32> bubble_opacity(gSavedSettings, "ChatBubbleOpacity");
|
||||
static LLUIColor nametag_bg_color = LLUIColorTable::instance().getColor("ObjectBubbleColor");
|
||||
LLColor4 bg_color = nametag_bg_color;
|
||||
bg_color.setAlpha(bubble_opacity * alpha_factor);
|
||||
// <FS:minerjr> [FIRE-35019] Add LLHUDNameTag background to floating text and hover highlights
|
||||
// static LLCachedControl<F32> bubble_opacity(gSavedSettings, "ChatBubbleOpacity");
|
||||
// static LLUIColor nametag_bg_color = LLUIColorTable::instance().getColor("ObjectBubbleColor");
|
||||
// LLColor4 bg_color = nametag_bg_color;
|
||||
// bg_color.setAlpha(bubble_opacity * alpha_factor);
|
||||
// Use new background opacity value, independant of the LLHUDNameTag value
|
||||
static LLCachedControl<F32> background_opacity(gSavedSettings, "FSHudTextBackgroundOpacity"); // Can be modified under Preferences->Colors->Floating Text tab
|
||||
LLColor4 bg_color = LLColor4::black; // Default the background to black color
|
||||
bg_color.setAlpha(background_opacity * alpha_factor);
|
||||
// If the show background flag is set, so change the background color depending on the luminance
|
||||
if (mShowBackground)
|
||||
{
|
||||
// If the luminance is below 40%, then use white background color
|
||||
if (mLuminance <= 0.4f)
|
||||
{
|
||||
bg_color.set(LLColor3::white); // Set background color keep the alpha
|
||||
}
|
||||
// If hover highlight is enabled and the text object is highlighted then, change the alpha value (Background Opacity if only highlighted objects
|
||||
// have a background, otherwise, use the alpha value (which should be 1.0))
|
||||
if (mbUseHoverHighlight && mbIsHighlighted)
|
||||
{
|
||||
bg_color.setAlpha(mShowBackground == SHOW_BACKGROUND_ONLY_HIGHLIGHTED ? background_opacity : alpha_factor);
|
||||
}
|
||||
}
|
||||
// </FS:minerjr> [FIRE-35019]
|
||||
|
||||
const S32 border_height = 16;
|
||||
const S32 border_width = 16;
|
||||
|
|
@ -199,6 +262,21 @@ void LLHUDText::renderText()
|
|||
F32 y_offset = (F32)mOffsetY;
|
||||
|
||||
// Render label
|
||||
// <FS:minerjr> [FIRE-35019] Add LLHUDNameTag background to floating text and hover highlights
|
||||
// Render text window background
|
||||
// Don't add if the parent object is attached (clothing on player avatar: as some cloths have blank text and render a background...)
|
||||
// Also, only show the background if it is show all is checked, or if on highlight, only if use hover highlight is enabled.
|
||||
if ((mShowBackground == SHOW_BACKGROUND_ALL ||
|
||||
mShowBackground == SHOW_BACKGROUND_ONLY_HIGHLIGHTED && mbIsHighlighted && mbUseHoverHighlight) &&
|
||||
(mSourceObject.notNull() && mSourceObject->getAttachmentState() == 0))
|
||||
{
|
||||
LLRect screen_rect;
|
||||
screen_rect.setCenterAndSize(0, static_cast<S32>(lltrunc(-mBackgroundHeight / 2 + mOffsetY + mBackgroundOffsetY)),
|
||||
static_cast<S32>(lltrunc(mWidth)),
|
||||
static_cast<S32>(lltrunc(mBackgroundHeight)));
|
||||
mRoundedRectImgp->draw3D(render_position, x_pixel_vec, y_pixel_vec, screen_rect, bg_color);
|
||||
}
|
||||
// </FS:minerjr> [FIRE-35019]
|
||||
|
||||
// Render text
|
||||
{
|
||||
|
|
@ -219,7 +297,11 @@ void LLHUDText::renderText()
|
|||
segment_iter != mTextSegments.end(); ++segment_iter )
|
||||
{
|
||||
const LLFontGL* fontp = segment_iter->mFont;
|
||||
y_offset -= fontp->getLineHeight() - 1; // correction factor to match legacy font metrics
|
||||
// <FS:minerjr> [FIRE-35019] Add LLHUDNameTag background to floating text and hover highlights
|
||||
//y_offset -= fontp->getLineHeight() - 1; // correction factor to match legacy font metrics
|
||||
y_offset -= fontp->getLineHeight(); // Match the same positioning as LLHUDNameTag as the windows don't line up otherwise.
|
||||
y_offset -= LINE_PADDING;
|
||||
// </FS:minerjr> [FIRE-35019]
|
||||
|
||||
U8 style = segment_iter->mStyle;
|
||||
LLFontGL::ShadowType shadow = LLFontGL::DROP_SHADOW;
|
||||
|
|
@ -232,6 +314,10 @@ void LLHUDText::renderText()
|
|||
else // ALIGN_LEFT
|
||||
{
|
||||
x_offset = -0.5f * mWidth + (HORIZONTAL_PADDING / 2.f);
|
||||
// <FS:minerjr> [FIRE-35019] Add LLHUDNameTag background to floating text and hover highlights
|
||||
// *HACK -> borrowed from LLHUDNameTag to match
|
||||
x_offset += 1;
|
||||
// </FS:minerjr> [FIRE-35019]
|
||||
}
|
||||
|
||||
text_color = segment_iter->mColor;
|
||||
|
|
@ -240,6 +326,13 @@ void LLHUDText::renderText()
|
|||
text_color = linearColor4(text_color);
|
||||
}
|
||||
text_color.mV[VALPHA] *= alpha_factor;
|
||||
// <FS:minerjr> [FIRE-35019] Add LLHUDNameTag background to floating text and hover highlights
|
||||
// If the text object is highlighted and use hover highlight is enabled, then reset the alpha factor (1.0f)
|
||||
if (mbUseHoverHighlight && mbIsHighlighted)
|
||||
{
|
||||
text_color.mV[VALPHA] = alpha_factor;
|
||||
}
|
||||
// </FS:minerjr> [FIRE-35019]
|
||||
|
||||
hud_render_text(segment_iter->getText(), render_position, *fontp, style, shadow, x_offset, y_offset, text_color, mOnHUDAttachment);
|
||||
}
|
||||
|
|
@ -336,6 +429,13 @@ void LLHUDText::setFont(const LLFontGL* font)
|
|||
void LLHUDText::setColor(const LLColor4 &color)
|
||||
{
|
||||
mColor = color;
|
||||
// <FS:minerjr> [FIRE-35019] Add LLHUDNameTag background to floating text and hover highlights
|
||||
// Added luminance value for the text color to determine if the background should be white or black
|
||||
// Based upon https://stackoverflow.com/questions/596216/formula-to-determine-perceived-brightness-of-rgb-color
|
||||
// used Digital ITU BT.601 (gives more weight to the R and B components):
|
||||
// Y = 0.299 R + 0.587 G + 0.114 B
|
||||
mLuminance = 0.299f * mColor.mV[0] + 0.587f * mColor.mV[1] + 0.114f * mColor.mV[2];
|
||||
// </FS:minerjr> [FIRE-35019]
|
||||
for (std::vector<LLHUDTextSegment>::iterator segment_iter = mTextSegments.begin();
|
||||
segment_iter != mTextSegments.end(); ++segment_iter )
|
||||
{
|
||||
|
|
@ -361,6 +461,15 @@ void LLHUDText::setDoFade(const bool do_fade)
|
|||
|
||||
void LLHUDText::updateVisibility()
|
||||
{
|
||||
// <FS:minerjr> [FIRE-35019] Add LLHUDNameTag background to floating text and hover highlights
|
||||
// Create local doFade flag based upon member doFade flag and overide it if the object is highlighted and hover highlight is enabled.
|
||||
bool doFade = mDoFade;
|
||||
static LLCachedControl<bool> mbUseHoverHighlight(gSavedSettings, "FSHudTextUseHoverHighlight");
|
||||
if (mbUseHoverHighlight && mbIsHighlighted)
|
||||
{
|
||||
doFade = false;
|
||||
}
|
||||
// </FS:minerjr> [FIRE-35019]
|
||||
if (mSourceObject)
|
||||
{
|
||||
mSourceObject->updateText();
|
||||
|
|
@ -421,7 +530,11 @@ void LLHUDText::updateVisibility()
|
|||
|
||||
mLastDistance = (mPositionAgent - LLViewerCamera::getInstance()->getOrigin()).magVec();
|
||||
|
||||
if (!mTextSegments.size() || (mDoFade && (mLastDistance > mFadeDistance + mFadeRange)))
|
||||
// <FS:minerjr> [FIRE-35019] Add LLHUDNameTag background to floating text and hover highlights
|
||||
//if (!mTextSegments.size() || (mDoFade && (mLastDistance > mFadeDistance + mFadeRange)))
|
||||
// Use local do fade check to allow highlighed objects to force text to be visible
|
||||
if (!mTextSegments.size() || (doFade && (mLastDistance > mFadeDistance + mFadeRange)))
|
||||
// </FS:minerjr> [FIRE-35019]
|
||||
{
|
||||
mVisible = false;
|
||||
return;
|
||||
|
|
@ -523,6 +636,14 @@ void LLHUDText::updateSize()
|
|||
F32 height = 0.f;
|
||||
F32 width = 0.f;
|
||||
|
||||
// <FS:minerjr> [FIRE-35019] Add LLHUDNameTag background to floating text and hover highlights
|
||||
// We want to create a background that fits just the visible text area only, otherwise a llsetstring('Hello, World\n\n\n') will have a text
|
||||
// box that covers 4 lines, but only the top line is visible to the user.
|
||||
// Another example is llsetstring('\n\n\nHello, World'), which would also have a 4 line high window, but the text be visible only on the last line.
|
||||
F32 backgroundFirstNoneBlankPosition = 0.0f; // Stores the position just above the first non blank line
|
||||
F32 backgroundLastNoneBlankPosition = 0.0f; // Stores the position just below the last none blank line
|
||||
bool firstNoneBlank = true; // Flag to determine that if the first blank line has been reached and to store the first none black position
|
||||
// <FS:minerjr> [FIRE-35019]
|
||||
S32 max_lines = getMaxLines();
|
||||
|
||||
S32 start_segment;
|
||||
|
|
@ -533,11 +654,41 @@ void LLHUDText::updateSize()
|
|||
while (iter != mTextSegments.end())
|
||||
{
|
||||
const LLFontGL* fontp = iter->mFont;
|
||||
height += fontp->getLineHeight() - 1; // correction factor to match legacy font metrics
|
||||
width = llmax(width, llmin(iter->getWidth(fontp), HUD_TEXT_MAX_WIDTH));
|
||||
// <FS:minerjr> [FIRE-35019] Add LLHUDNameTag background to floating text and hover highlights
|
||||
//height += fontp->getLineHeight() - 1; // correction factor to match legacy font metrics
|
||||
//width = llmax(width, llmin(iter->getWidth(fontp), HUD_TEXT_MAX_WIDTH));
|
||||
|
||||
//If there is no blank on the current line, skip over it so that we don't make the window cover the empty space above or below a blank text box.
|
||||
if (!iter->isBlank())
|
||||
{
|
||||
//If this is the first line without a blank, get the height above current line (0.0 for line 1, previous height if not the first line
|
||||
if (firstNoneBlank)
|
||||
{
|
||||
backgroundFirstNoneBlankPosition = height;
|
||||
firstNoneBlank = false;
|
||||
}
|
||||
//Always get the position below the non-blank line
|
||||
backgroundLastNoneBlankPosition = height + fontp->getLineHeight() + LINE_PADDING;
|
||||
}
|
||||
// </FS:minerjr>
|
||||
height += fontp->getLineHeight(); // Taken from LLHUBNameTa::UpdateSize
|
||||
height += LINE_PADDING; // Taken from LLHUBNameTa::UpdateSize
|
||||
// The max width of the text is set to HUD_TEXT_MAX_WIDTH_NO_BUBBLE and not HUD_TEXT_MAX_WIDTH, so the window would be limited but the text could spill over...
|
||||
width = llmax(width, llmin(iter->getWidth(fontp), HUD_TEXT_MAX_WIDTH_NO_BUBBLE));
|
||||
// <FS:minerjr> [FIRE-35019]
|
||||
++iter;
|
||||
}
|
||||
|
||||
// <FS:minerjr> [FIRE-35019] Add LLHUDNameTag background to floating text and hover highlights
|
||||
// Don't want line spacing under the last line (Taken from LLHUBNameTa::UpdateSize)
|
||||
if (height > 0.f)
|
||||
{
|
||||
height -= LINE_PADDING;
|
||||
// Also update the background last non blank position by the LINE_PADDING
|
||||
backgroundLastNoneBlankPosition -= LINE_PADDING;
|
||||
}
|
||||
// <FS:minerjr> [FIRE-35019]
|
||||
|
||||
if (width == 0.f)
|
||||
{
|
||||
return;
|
||||
|
|
@ -550,6 +701,11 @@ void LLHUDText::updateSize()
|
|||
F32 u = 1.f;
|
||||
mWidth = llmax(width, lerp(mWidth, (F32)width, u));
|
||||
mHeight = llmax(height, lerp(mHeight, (F32)height, u));
|
||||
// <FS:minerjr> [FIRE-35019] Add LLHUDNameTag background to floating text and hover highlights
|
||||
backgroundLastNoneBlankPosition += VERTICAL_PADDING; // Add the vertical padding to the last non-blank position
|
||||
mBackgroundOffsetY = backgroundFirstNoneBlankPosition; // Set the background Y offset to the top of the first blank
|
||||
mBackgroundHeight = backgroundLastNoneBlankPosition - backgroundFirstNoneBlankPosition; // Set the background height to the difference between the top of the first non-blank, and bottom of the last non-blank line
|
||||
// <FS:minerjr> [FIRE-35019]
|
||||
}
|
||||
|
||||
void LLHUDText::updateAll()
|
||||
|
|
|
|||
|
|
@ -59,11 +59,30 @@ protected:
|
|||
mStyle(style),
|
||||
mText(text),
|
||||
mFont(font)
|
||||
{}
|
||||
// <FS:minerjr> [FIRE-35019] Add LLHUDNameTag background to floating text and hover highlights
|
||||
//{}
|
||||
{
|
||||
// Added a bool check to see if the current line is blank (empty, or has only a single space character stored.
|
||||
// There are issues with users using "Hello World \n \n \n \n" as strings which would create a 4 text segments, but only 1 had actual text
|
||||
// and the background would cover all 4, and would not look nice. So store a flag on each segment to see if it is blank, so we don't have to
|
||||
// do the check every frame for every text segment.
|
||||
if (text.length() == 0 || text.find_first_not_of(utf8str_to_wstring(" "), 0) == std::string::npos)
|
||||
{
|
||||
mbIsBlank = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
mbIsBlank = false;
|
||||
}
|
||||
}
|
||||
// </FS:minerjr> [FIRE-35019]
|
||||
F32 getWidth(const LLFontGL* font);
|
||||
const LLWString& getText() const { return mText; }
|
||||
void clearFontWidthMap() { mFontWidthMap.clear(); }
|
||||
|
||||
// <FS:minerjr> [FIRE-35019] Add LLHUDNameTag background to floating text and hover highlights
|
||||
bool isBlank() { return mbIsBlank; } // Accessor method for checking to see if the current Text Segment is blank
|
||||
// </FS:minerjr> [FIRE-35019]
|
||||
LLColor4 mColor;
|
||||
LLFontGL::StyleFlags mStyle;
|
||||
const LLFontGL* mFont;
|
||||
|
|
@ -71,6 +90,9 @@ protected:
|
|||
private:
|
||||
LLWString mText;
|
||||
std::map<const LLFontGL*, F32> mFontWidthMap;
|
||||
// <FS:minerjr> [FIRE-35019] Add LLHUDNameTag background to floating text and hover highlights
|
||||
bool mbIsBlank; // True if mText length is 0, or only contains " " characters, otherwise false
|
||||
// <FS:minerjr> [FIRE-35019]
|
||||
};
|
||||
|
||||
public:
|
||||
|
|
@ -178,6 +200,12 @@ private:
|
|||
std::string mObjText;
|
||||
// [/RLVa:KB]
|
||||
|
||||
// <FS:minerjr> [FIRE-35019] Add LLHUDNameTag background to floating text and hover highlights
|
||||
LLPointer<LLUIImage> mRoundedRectImgp; // Added background rect image from LLHUDNameTag
|
||||
F32 mBackgroundHeight; // Store the actual height of the background image (calculated from the visible text segments)
|
||||
F32 mBackgroundOffsetY; // Store the offset of the top of the first visible text segment
|
||||
F32 mLuminance; // Store the luminance of the text (used to determine if the background should be white or black for higher contrast)
|
||||
// </FS:minerjr> [FIRE-35019]
|
||||
static bool sDisplayText ;
|
||||
static std::set<LLPointer<LLHUDText> > sTextObjects;
|
||||
static std::vector<LLPointer<LLHUDText> > sVisibleTextObjects;
|
||||
|
|
|
|||
|
|
@ -99,6 +99,11 @@ public:
|
|||
void onCreatorSelfFilterCommit();
|
||||
void onCreatorOtherFilterCommit();
|
||||
|
||||
// <FS:minerjr> [FIRE-35042] Inventory - Only Coalesced Filter - More accessible
|
||||
void onOnlyCoalescedFilterCommit(); // Commit method for the Only Coalesced Filter checkbox
|
||||
void onShowLinksFilterCommit(); // Commit method for the Show Links Filter combo box
|
||||
// </FS:minerjr> [FIRE-35042]
|
||||
|
||||
void onPermissionsChanged(); // <FS:Zi> FIRE-1175 - Filter Permissions Menu
|
||||
|
||||
static void onTimeAgo(LLUICtrl*, void *);
|
||||
|
|
@ -115,6 +120,10 @@ private:
|
|||
LLCheckBoxCtrl* mCreatorSelf;
|
||||
LLCheckBoxCtrl* mCreatorOthers;
|
||||
LLInventoryFilter* mFilter;
|
||||
// <FS:minerjr> [FIRE-35042] Inventory - Only Coalesced Filter - More accessible
|
||||
LLCheckBoxCtrl* mOnlyCoalescedFilterCheck; // Stores the pointer to the Only Coalesced filter checkbox
|
||||
LLComboBox* mShowLinksFilterCombo; // Stores the pointer to the Show Links filter combo box
|
||||
// </FS:minerjr> [FIRE-35042]
|
||||
};
|
||||
|
||||
///----------------------------------------------------------------------------
|
||||
|
|
@ -191,6 +200,12 @@ LLPanelMainInventory::LLPanelMainInventory(const LLPanel::Params& p)
|
|||
mEnableCallbackRegistrar.add("Inventory.GearDefault.Visible", boost::bind(&LLPanelMainInventory::isActionVisible, this, _2));
|
||||
// </FS:Ansariel>
|
||||
|
||||
// <FS:minerjr> [FIRE-35042] Inventory - Only Coalesced Filter - More accessible
|
||||
// Added new button to show all filters, not just Only Coalesced Filter
|
||||
// Add a call back on the existing Inventory ShowFilters Check on the show_filters_inv_btn
|
||||
mEnableCallbackRegistrar.add("Inventory.ShowFilters.Check", boost::bind(&LLPanelMainInventory::isAnyFilterChecked, this, _2));
|
||||
// </FS:minerjr> [FIRE-35042]
|
||||
|
||||
mSavedFolderState = new LLSaveFolderState();
|
||||
mSavedFolderState->setApply(false);
|
||||
|
||||
|
|
@ -908,6 +923,31 @@ bool LLPanelMainInventory::isSortByChecked(const LLSD& userdata)
|
|||
}
|
||||
// </FS:Zi> Sort By menu handlers
|
||||
|
||||
// <FS:minerjr> [FIRE-35042] Inventory - Only Coalesced Filter - More accessible
|
||||
// Callback method used to update the Show Filter button on the inventory bottom UI
|
||||
bool LLPanelMainInventory::isAnyFilterChecked(const LLSD& userdata)
|
||||
{
|
||||
// Validate that the command came from the right check box (Show Filters Modified)
|
||||
const std::string command_name = userdata.asString();
|
||||
if (command_name == "show_filters_modified")
|
||||
{
|
||||
// Only use thte active panel if it is valid
|
||||
if (mActivePanel)
|
||||
{
|
||||
// Get the current filter object
|
||||
LLInventoryFilter& filter = getCurrentFilter();
|
||||
// If either of the three filter checks are true, Is Not Default, Filter Creator Type is not set to all creators,
|
||||
// and Show Folder State is set to show folder state then we need to turn on the Show Filter Button check higlight,
|
||||
// so return true if any of these are true.
|
||||
return filter.isNotDefault() || filter.getFilterCreatorType() != LLInventoryFilter::FILTERCREATOR_ALL ||
|
||||
filter.getShowFolderState() == LLInventoryFilter::SHOW_ALL_FOLDERS;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
// </FS:minerjr> [FIRE-35042]
|
||||
|
||||
// static
|
||||
bool LLPanelMainInventory::filtersVisible(void* user_data)
|
||||
{
|
||||
|
|
@ -1074,6 +1114,17 @@ void LLPanelMainInventory::onFilterTypeSelected(const std::string& filter_type_n
|
|||
|
||||
return;
|
||||
}
|
||||
// <FS:minerjr> [FIRE-35042] Inventory - Only Coalesced Filter - More accessible
|
||||
// Special treatment for "coalesced" filter
|
||||
else if (filter_type_name == "filter_type_coalesced")
|
||||
{
|
||||
// Turn on Only Coalesced filter. This will also trigger the button "only_coalesced_inv_btn"
|
||||
// and menu item check "inventory_filter_coalesced_objects_only" toggle states.
|
||||
getActivePanel()->setFilterCoalescedObjects(true);
|
||||
// As all Coalesced objects are only objects, then set the filter type to filter_type_objects
|
||||
filterTypes = mFilterMap["filter_type_objects"];
|
||||
}
|
||||
// </FS:minerjr> [FIRE-35042]
|
||||
// invalid selection (broken XML?)
|
||||
else
|
||||
{
|
||||
|
|
@ -1522,6 +1573,25 @@ bool LLFloaterInventoryFinder::postBuild()
|
|||
mCreatorSelf->setCommitCallback(boost::bind(&LLFloaterInventoryFinder::onCreatorSelfFilterCommit, this));
|
||||
mCreatorOthers->setCommitCallback(boost::bind(&LLFloaterInventoryFinder::onCreatorOtherFilterCommit, this));
|
||||
|
||||
// <FS:minerjr> [FIRE-35042] Inventory - Only Coalesced Filter - More accessible
|
||||
// Get the Finder's Only Coalesced check box for use later on, instead of calling getChild everytime accessing it
|
||||
mOnlyCoalescedFilterCheck = getChild<LLCheckBoxCtrl>("check_only_coalesced");
|
||||
// If the checkbox could be found, then set the commit callback to onOnlyCoalescedFilterCommit to update the mFilter object
|
||||
// with the value in the checkbox.
|
||||
if (mOnlyCoalescedFilterCheck)
|
||||
{
|
||||
mOnlyCoalescedFilterCheck->setCommitCallback(boost::bind(&LLFloaterInventoryFinder::onOnlyCoalescedFilterCommit, this));
|
||||
}
|
||||
// Get the Finder's Show Links Filter combobox for use later as well to also prevent having to call get child everytime accessing it.
|
||||
mShowLinksFilterCombo = getChild<LLComboBox>("inventory_filter_show_links_combo");
|
||||
// If the combobox could be found, then set the commit callback to onShowLinksFilterCommit to update the mFilter object
|
||||
// with the value in the checkbox.
|
||||
if (mShowLinksFilterCombo)
|
||||
{
|
||||
mShowLinksFilterCombo->setCommitCallback(boost::bind(&LLFloaterInventoryFinder::onShowLinksFilterCommit, this));
|
||||
}
|
||||
// </FS:minerjr> [FIRE-35042]
|
||||
|
||||
childSetAction("Close", onCloseBtn, this);
|
||||
|
||||
// <FS:Ansariel> FIRE-5160: Don't reset inventory filter when clearing search term
|
||||
|
|
@ -1635,6 +1705,26 @@ void LLFloaterInventoryFinder::updateElementsFromFilter()
|
|||
getChild<LLUICtrl>("check_copy")->setValue((bool) (mFilter->getFilterPermissions() & PERM_COPY));
|
||||
getChild<LLUICtrl>("check_transfer")->setValue((bool) (mFilter->getFilterPermissions() & PERM_TRANSFER));
|
||||
// </FS:Zi>
|
||||
|
||||
// <FS:minerjr> [FIRE-35042] Inventory - Only Coalesced Filter - More accessible
|
||||
// Sync the Only Coalesced Filter Checkbox with the value from the mFilter
|
||||
// Make sure the Only Coalseced Filter checkbox and the filter are valid before accessing them.
|
||||
if (mOnlyCoalescedFilterCheck && mFilter)
|
||||
{
|
||||
// Set the check value to the value of the UI to the Only Coalesced Objects of the mFilter
|
||||
mOnlyCoalescedFilterCheck->set(mFilter->getFilterCoalescedObjects());
|
||||
}
|
||||
// Sync the Show Links Filter combo box with the value from the mFilter
|
||||
// Make sure the Show Links Filter combo box and filter are both valid
|
||||
if (mShowLinksFilterCombo && mFilter)
|
||||
{
|
||||
// Set the combo box value to the value of the FitlerLinks of the mFilter
|
||||
// In the UI, the choices match the same values as the filter values
|
||||
// 0 - Show Links, 2 Show Links Only, 1 = Hide Links
|
||||
// So we convert from the filters from U64 to LLSD (integer) as the SelectByValue takes a LLSD object as an input
|
||||
mShowLinksFilterCombo->selectByValue(LLSD(mFilter->getFilterLinks()));
|
||||
}
|
||||
// </FS:minerjr> [FIRE-35042]
|
||||
}
|
||||
|
||||
void LLFloaterInventoryFinder::draw()
|
||||
|
|
@ -1855,6 +1945,30 @@ void LLFloaterInventoryFinder::onPermissionsChanged()
|
|||
}
|
||||
// </FS:Zi>
|
||||
|
||||
// <FS:minerjr> [FIRE-35042] Inventory - Only Coalesced Filter - More accessible
|
||||
// Callback method used to update the mFilter's Only Coalesced filter and syncs with the main inventory filter
|
||||
void LLFloaterInventoryFinder::onOnlyCoalescedFilterCommit()
|
||||
{
|
||||
// This will sync the Filter panels value with the value of the mFilter object
|
||||
if (mOnlyCoalescedFilterCheck && mFilter)
|
||||
{
|
||||
// Set the mFilter's Filter Coalesced Objects value to the Only Coalesced Filter Checkbox value
|
||||
mFilter->setFilterCoalescedObjects(mOnlyCoalescedFilterCheck->getValue());
|
||||
}
|
||||
}
|
||||
// Callback method used to update the mFilter's Show Links filter and syncs with the main inventory filter
|
||||
void LLFloaterInventoryFinder::onShowLinksFilterCommit()
|
||||
{
|
||||
// This will sync the Show Links combo box with the value of the main inventory filter
|
||||
if (mShowLinksFilterCombo)
|
||||
{
|
||||
// Set the mFilter's Filter Links value to the selected value of the Show Links Filter Combo.
|
||||
// The values match up to the bit values that are used by the filter (0 = Show Links, 1 = Show Links Only, 2 = Hide Links)
|
||||
mFilter->setFilterLinks((U64)mShowLinksFilterCombo->getSelectedValue().asInteger());
|
||||
}
|
||||
}
|
||||
// </FS:minerjr> [FIRE-35042]
|
||||
|
||||
bool LLFloaterInventoryFinder::getCheckShowEmpty()
|
||||
{
|
||||
return getChild<LLUICtrl>("check_show_empty")->getValue();
|
||||
|
|
@ -2741,6 +2855,14 @@ void LLPanelMainInventory::onCoalescedObjectsToggled(const LLSD& userdata)
|
|||
{
|
||||
getActivePanel()->setFilterCoalescedObjects(!getActivePanel()->getFilterCoalescedObjects());
|
||||
}
|
||||
|
||||
// <FS:minerjr> [FIRE-35042] Inventory - Only Coalesced Filter - More accessible
|
||||
// Update the Filter Finder window with the change to the filters, so they can sync
|
||||
if (getFinder())
|
||||
{
|
||||
getFinder()->updateElementsFromFilter();
|
||||
}
|
||||
// <FS:minerjr> [FIRE-35042]
|
||||
}
|
||||
|
||||
bool LLPanelMainInventory::isCoalescedObjectsChecked(const LLSD& userdata)
|
||||
|
|
@ -2773,6 +2895,13 @@ void LLPanelMainInventory::onFilterLinksChecked(const LLSD& userdata)
|
|||
{
|
||||
getActivePanel()->setFilterLinks(LLInventoryFilter::FILTERLINK_EXCLUDE_LINKS);
|
||||
}
|
||||
// <FS:minerjr> [FIRE-35042] Inventory - Only Coalesced Filter - More accessible
|
||||
// Update the Filter Finder window with the change to the filters, so they can sync
|
||||
if (getFinder())
|
||||
{
|
||||
getFinder()->updateElementsFromFilter();
|
||||
}
|
||||
// <FS:minerjr> [FIRE-35042]
|
||||
}
|
||||
|
||||
bool LLPanelMainInventory::isFilterLinksChecked(const LLSD& userdata)
|
||||
|
|
|
|||
|
|
@ -189,6 +189,12 @@ protected:
|
|||
bool isSortByChecked(const LLSD& userdata);
|
||||
// </FS:Zi> Sort By menu handlers
|
||||
|
||||
// <FS:minerjr> [FIRE-35042] Inventory - Only Coalesced Filter - More accessible
|
||||
// Callback method for the new Show Filter button on the bottom button panel of the main inventory.
|
||||
// Stays highlighted if any filter is enabled.
|
||||
bool isAnyFilterChecked(const LLSD& userdata);
|
||||
// </FS:minerjr> [FIRE-35042]
|
||||
|
||||
void saveTexture(const LLSD& userdata);
|
||||
bool isSaveTextureEnabled(const LLSD& userdata);
|
||||
void updateItemcountText();
|
||||
|
|
|
|||
|
|
@ -848,6 +848,26 @@ void LLToolPie::selectionPropertiesReceived()
|
|||
bool LLToolPie::handleHover(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
bool pick_rigged = false; //gSavedSettings.getBOOL("AnimatedObjectsAllowLeftClick");
|
||||
// <FS:minerjr> [FIRE-35019] Add LLHUDNameTag background to floating text and hover highlights
|
||||
// We want to unhighlight the previous hover object's parent before we get the next hover pick and lose the reference
|
||||
// (Possible optimization - check if the current object and previous ones are the same, and if so, don't set the text is highlighed flag to false)
|
||||
LLViewerObject* oldObject = NULL;
|
||||
LLViewerObject* oldParent = NULL;
|
||||
// If the previous mHoverPick object is valid, then try to set the Text Is Highlighted flag to false to clear it.
|
||||
if (mHoverPick.isValid())
|
||||
{
|
||||
oldObject = mHoverPick.getObject();
|
||||
if (oldObject)
|
||||
{
|
||||
oldParent = oldObject->getRootEdit();
|
||||
if (oldParent)
|
||||
{
|
||||
// We want to set the parent object's flag to false, and it will recursively change until it finds a valid mText object.
|
||||
oldParent->setTextIsHighlighted(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
// <FS:minerjr> [FIRE-35019]
|
||||
mHoverPick = gViewerWindow->pickImmediate(x, y, false, pick_rigged);
|
||||
LLViewerObject *parent = NULL;
|
||||
LLViewerObject *object = mHoverPick.getObject();
|
||||
|
|
@ -940,6 +960,17 @@ bool LLToolPie::handleHover(S32 x, S32 y, MASK mask)
|
|||
{
|
||||
LLViewerMediaFocus::getInstance()->clearHover();
|
||||
}
|
||||
// <FS:minerjr> [FIRE-35019] Add LLHUDNameTag background to floating text and hover highlights
|
||||
// If there is an object that was hovered over, set the root of the object to have the text highlighted.
|
||||
// This will work if the parent does not have a LLHUDText object, but a child does.
|
||||
else
|
||||
{
|
||||
if (parent)
|
||||
{
|
||||
parent->setTextIsHighlighted(true);
|
||||
}
|
||||
}
|
||||
// </FS:minerjr> [FIRE-35019]
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11767,7 +11767,7 @@ class LLWorldEnvSettings : public view_listener_t
|
|||
// <FS:Beq> Add legacy noon to the manually selected environments that can have a user defined transition time.
|
||||
// LLEnvironment::instance().setEnvironment(LLEnvironment::ENV_LOCAL, LLEnvironment::KNOWN_SKY_LEGACY_MIDDAY, LLEnvironment::TRANSITION_INSTANT);
|
||||
// LLEnvironment::instance().setSelectedEnvironment(LLEnvironment::ENV_LOCAL, LLEnvironment::TRANSITION_INSTANT);
|
||||
LLEnvironment::instance().setEnvironment(LLEnvironment::ENV_LOCAL, LLEnvironment::KNOWN_SKY_LEGACY_MIDDAY);
|
||||
LLEnvironment::instance().setManualEnvironment(LLEnvironment::ENV_LOCAL, LLEnvironment::KNOWN_SKY_LEGACY_MIDDAY);
|
||||
LLEnvironment::instance().setSelectedEnvironment(LLEnvironment::ENV_LOCAL);
|
||||
// </FS:Beq>
|
||||
defocusEnvFloaters();
|
||||
|
|
|
|||
|
|
@ -6141,6 +6141,36 @@ void LLViewerObject::updateText()
|
|||
}
|
||||
}
|
||||
|
||||
// <FS:minerjr> [FIRE-35019] Add LLHUDNameTag background to floating text and hover highlights
|
||||
// Method that sets the current viewer object's mText to be highlighted or the objects children if there is no mText.
|
||||
void LLViewerObject::setTextIsHighlighted(bool is_highlighted)
|
||||
{
|
||||
// If the object it not dead, try to set the highlight value
|
||||
if (!isDead())
|
||||
{
|
||||
// Check to see if the current LLHUDText object is not null, most of the time the root object contains the floating text.
|
||||
if (mText.notNull())
|
||||
{
|
||||
mText->setIsHighlighted(is_highlighted);
|
||||
}
|
||||
// But in case the current object does not, try to set all the children to use the flag
|
||||
else
|
||||
{
|
||||
// Else, there may be children with the LLHUDText objects..
|
||||
for (child_list_t::const_iterator iter = mChildList.begin(); iter != mChildList.end(); iter++)
|
||||
{
|
||||
LLViewerObject* child = *iter;
|
||||
// If the child is not an avatar, then try to set it's text is highlighed flag, which should recussivly get to all sub children. (Kind of hope not a lot of prims with this setup)
|
||||
if (!child->isAvatar())
|
||||
{
|
||||
child->setTextIsHighlighted(is_highlighted);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// </FS:minerjr> [FIRE-35019]
|
||||
|
||||
bool LLViewerObject::isOwnerInMuteList(LLUUID id)
|
||||
{
|
||||
LLUUID owner_id = id.isNull() ? mOwnerID : id;
|
||||
|
|
|
|||
|
|
@ -498,6 +498,10 @@ public:
|
|||
|
||||
void updatePositionCaches() const; // Update the global and region position caches from the object (and parent's) xform.
|
||||
void updateText(); // update text label position
|
||||
// <FS:minerjr> [FIRE-35019] Add LLHUDNameTag background to floating text and hover highlights
|
||||
// Method that sets the current viewer object's mText to be highlighted or the objects children if there is no mText.
|
||||
void setTextIsHighlighted(bool is_highlighted);
|
||||
// </FS:minerjr> [FIRE-35019]
|
||||
virtual void updateDrawable(bool force_damped); // force updates on static objects
|
||||
|
||||
bool isOwnerInMuteList(LLUUID item_id = LLUUID());
|
||||
|
|
|
|||
|
|
@ -0,0 +1,764 @@
|
|||
<llsd>
|
||||
<map>
|
||||
<key>mHandIndex1Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.03285325691103935241699219</real>
|
||||
<real>-4.65661342818890489070327e-10</real>
|
||||
<real>0.2496847659349441528320312</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandIndex1Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.03285325691103935241699219</real>
|
||||
<real>-4.65661342818890489070327e-10</real>
|
||||
<real>-0.2496847659349441528320312</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandIndex2Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.03285326063632965087890625</real>
|
||||
<real>1.455191696309032778344772e-11</real>
|
||||
<real>-0.01314130239188671112060547</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandIndex2Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.03285326063632965087890625</real>
|
||||
<real>1.455191696309032778344772e-11</real>
|
||||
<real>0.01314130239188671112060547</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandIndex3Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.01971195824444293975830078</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandIndex3Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.01971195824444293975830078</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandMiddle1Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.006570651195943355560302734</real>
|
||||
<real>0</real>
|
||||
<real>-0.05913586542010307312011719</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandMiddle1Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.006570651195943355560302734</real>
|
||||
<real>0</real>
|
||||
<real>0.05913586542010307312011719</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandMiddle2Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.03285325691103935241699219</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandMiddle2Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.03285325691103935241699219</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandMiddle3Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.01971195638179779052734375</real>
|
||||
<real>2.910383392618065556689544e-11</real>
|
||||
<real>-0.04599456489086151123046875</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandMiddle3Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.01971195638179779052734375</real>
|
||||
<real>2.910383392618065556689544e-11</real>
|
||||
<real>0.04599456489086151123046875</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandPinky1Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.1576956361532211303710938</real>
|
||||
<real>-0.21991145610809326171875</real>
|
||||
<real>-0.545364081859588623046875</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandPinky1Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.1576956361532211303710938</real>
|
||||
<real>-0.21991145610809326171875</real>
|
||||
<real>0.545364081859588623046875</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandPinky2Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.03942390903830528259277344</real>
|
||||
<real>0.03141593188047409057617188</real>
|
||||
<real>-0.03285326063632965087890625</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandPinky2Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.03942390903830528259277344</real>
|
||||
<real>0.03141593188047409057617188</real>
|
||||
<real>0.03285326063632965087890625</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandPinky3Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.0131413042545318603515625</real>
|
||||
<real>5.820767479125521504101926e-11</real>
|
||||
<real>0.1051304414868354797363281</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandPinky3Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.0131413042545318603515625</real>
|
||||
<real>5.820767479125521504101926e-11</real>
|
||||
<real>-0.1051304414868354797363281</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandRing1Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.02628260292112827301025391</real>
|
||||
<real>0</real>
|
||||
<real>-0.2365434616804122924804688</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandRing1Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.02628260292112827301025391</real>
|
||||
<real>0</real>
|
||||
<real>0.2365434616804122924804688</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandRing2Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.03942390903830528259277344</real>
|
||||
<real>1.746229966181900294941443e-10</real>
|
||||
<real>-0.03285325691103935241699219</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandRing2Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.03942390903830528259277344</real>
|
||||
<real>1.746229966181900294941443e-10</real>
|
||||
<real>0.03285325691103935241699219</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandRing3Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.01971195451915264129638672</real>
|
||||
<real>7.27595848154516389172386e-12</real>
|
||||
<real>-0.006570650730282068252563477</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandRing3Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.01971195451915264129638672</real>
|
||||
<real>7.27595848154516389172386e-12</real>
|
||||
<real>0.006570650730282068252563477</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandThumb1Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.01314130239188671112060547</real>
|
||||
<real>0</real>
|
||||
<real>-0.006570651195943355560302734</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandThumb1Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.01314130239188671112060547</real>
|
||||
<real>0</real>
|
||||
<real>0.006570651195943355560302734</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandThumb2Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.03942390531301498413085938</real>
|
||||
<real>5.82076609134674072265625e-11</real>
|
||||
<real>0.01971195451915264129638672</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandThumb2Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.03942390531301498413085938</real>
|
||||
<real>5.82076609134674072265625e-11</real>
|
||||
<real>-0.01971195451915264129638672</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandThumb3Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.03285325691103935241699219</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandThumb3Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.03285325691103935241699219</real>
|
||||
<real>0</real>
|
||||
<real>-0</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>startFromTeePose</key>
|
||||
<map>
|
||||
<key>value</key>
|
||||
<boolean>1</boolean>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<map>
|
||||
<key>value</key>
|
||||
<integer>5</integer>
|
||||
</map>
|
||||
</map>
|
||||
</llsd>
|
||||
|
|
@ -0,0 +1,764 @@
|
|||
<llsd>
|
||||
<map>
|
||||
<key>mHandIndex1Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.183978259563446044921875</real>
|
||||
<real>0</real>
|
||||
<real>0.4796575605869293212890625</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandIndex1Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.183978259563446044921875</real>
|
||||
<real>0</real>
|
||||
<real>-0.4796575605869293212890625</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandIndex2Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.7096302509307861328125</real>
|
||||
<real>0.3141592442989349365234375</real>
|
||||
<real>-0.03285326436161994934082031</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandIndex2Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.7096302509307861328125</real>
|
||||
<real>0.3141592442989349365234375</real>
|
||||
<real>0.03285326436161994934082031</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandIndex3Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.51908147335052490234375</real>
|
||||
<real>0.2199114710092544555664062</real>
|
||||
<real>-0.1576956659555435180664062</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandIndex3Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.51908147335052490234375</real>
|
||||
<real>0.2199114710092544555664062</real>
|
||||
<real>0.1576956659555435180664062</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandMiddle1Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.499369442462921142578125</real>
|
||||
<real>-0.0628318488597869873046875</real>
|
||||
<real>0.006570651195943355560302734</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandMiddle1Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.499369442462921142578125</real>
|
||||
<real>-0.0628318488597869873046875</real>
|
||||
<real>-0.006570651195943355560302734</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandMiddle2Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.663635790348052978515625</real>
|
||||
<real>-4.656612873077392578125e-10</real>
|
||||
<real>-0.01971195638179779052734375</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandMiddle2Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.663635790348052978515625</real>
|
||||
<real>-4.656612873077392578125e-10</real>
|
||||
<real>0.01971195638179779052734375</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandMiddle3Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.814760744571685791015625</real>
|
||||
<real>-0.09424778074026107788085938</real>
|
||||
<real>-0.308820664882659912109375</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandMiddle3Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.814760744571685791015625</real>
|
||||
<real>-0.09424778074026107788085938</real>
|
||||
<real>0.308820664882659912109375</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandPinky1Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.57821738719940185546875</real>
|
||||
<real>-0.628318607807159423828125</real>
|
||||
<real>-0.57164680957794189453125</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandPinky1Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.57821738719940185546875</real>
|
||||
<real>-0.628318607807159423828125</real>
|
||||
<real>0.57164680957794189453125</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandPinky2Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.4796575605869293212890625</real>
|
||||
<real>-0.502654850482940673828125</real>
|
||||
<real>0.229972779750823974609375</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandPinky2Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.4796575605869293212890625</real>
|
||||
<real>-0.502654850482940673828125</real>
|
||||
<real>-0.229972779750823974609375</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandPinky3Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.210260808467864990234375</real>
|
||||
<real>-0.1884955465793609619140625</real>
|
||||
<real>0.1248423606157302856445312</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandPinky3Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.210260808467864990234375</real>
|
||||
<real>-0.1884955465793609619140625</real>
|
||||
<real>-0.1248423606157302856445312</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandRing1Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.519081413745880126953125</real>
|
||||
<real>-0.1256636828184127807617188</real>
|
||||
<real>-0.2431140989065170288085938</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandRing1Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.519081413745880126953125</real>
|
||||
<real>-0.1256636828184127807617188</real>
|
||||
<real>0.2431140989065170288085938</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandRing2Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.7293422222137451171875</real>
|
||||
<real>-0.2199114859104156494140625</real>
|
||||
<real>-0.08541847020387649536132812</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandRing2Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.7293422222137451171875</real>
|
||||
<real>-0.2199114859104156494140625</real>
|
||||
<real>0.08541847020387649536132812</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandRing3Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.676777184009552001953125</real>
|
||||
<real>-0.3455752432346343994140625</real>
|
||||
<real>-0.2299728244543075561523438</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandRing3Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.676777184009552001953125</real>
|
||||
<real>-0.3455752432346343994140625</real>
|
||||
<real>0.2299728244543075561523438</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandThumb1Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.01971195451915264129638672</real>
|
||||
<real>1.09955751895904541015625</real>
|
||||
<real>0.03285326063632965087890625</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandThumb1Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.01971195451915264129638672</real>
|
||||
<real>1.09955751895904541015625</real>
|
||||
<real>-0.03285326063632965087890625</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandThumb2Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.1182717159390449523925781</real>
|
||||
<real>0.28274333477020263671875</real>
|
||||
<real>-0.2365434169769287109375</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandThumb2Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.1182717159390449523925781</real>
|
||||
<real>0.28274333477020263671875</real>
|
||||
<real>0.2365434169769287109375</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandThumb3Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.03285324946045875549316406</real>
|
||||
<real>1.16415321826934814453125e-10</real>
|
||||
<real>0.05256520211696624755859375</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandThumb3Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.03285324946045875549316406</real>
|
||||
<real>1.16415321826934814453125e-10</real>
|
||||
<real>-0.05256520211696624755859375</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>startFromTeePose</key>
|
||||
<map>
|
||||
<key>value</key>
|
||||
<boolean>1</boolean>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<map>
|
||||
<key>value</key>
|
||||
<integer>5</integer>
|
||||
</map>
|
||||
</map>
|
||||
</llsd>
|
||||
|
|
@ -0,0 +1,764 @@
|
|||
<llsd>
|
||||
<map>
|
||||
<key>mHandIndex1Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.19054889678955078125</real>
|
||||
<real>0</real>
|
||||
<real>0.2956793308258056640625</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandIndex1Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.19054889678955078125</real>
|
||||
<real>0</real>
|
||||
<real>-0.2956793308258056640625</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandIndex2Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.01971195451915264129638672</real>
|
||||
<real>-7.27595848154516389172386e-12</real>
|
||||
<real>0.006570650730282068252563477</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandIndex2Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.01971195451915264129638672</real>
|
||||
<real>-7.27595848154516389172386e-12</real>
|
||||
<real>-0.006570650730282068252563477</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandIndex3Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.01971195824444293975830078</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandIndex3Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.01971195824444293975830078</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandMiddle1Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.3548151552677154541015625</real>
|
||||
<real>-9.31322685637780978140654e-10</real>
|
||||
<real>-0.07227716594934463500976562</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandMiddle1Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.3548151552677154541015625</real>
|
||||
<real>-9.31322685637780978140654e-10</real>
|
||||
<real>0.07227716594934463500976562</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandMiddle2Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-1.6755158901214599609375</real>
|
||||
<real>-0.1256637275218963623046875</real>
|
||||
<real>-0.1051304340362548828125</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandMiddle2Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>1.6755158901214599609375</real>
|
||||
<real>-0.1256637275218963623046875</real>
|
||||
<real>0.1051304340362548828125</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandMiddle3Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.887037813663482666015625</real>
|
||||
<real>0.06283186376094818115234375</real>
|
||||
<real>0.07884781807661056518554688</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandMiddle3Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.887037813663482666015625</real>
|
||||
<real>0.06283186376094818115234375</real>
|
||||
<real>-0.07884781807661056518554688</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandPinky1Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.1445543617010116577148438</real>
|
||||
<real>-0.53407084941864013671875</real>
|
||||
<real>-0.591358661651611328125</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandPinky1Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.1445543617010116577148438</real>
|
||||
<real>-0.53407084941864013671875</real>
|
||||
<real>0.591358661651611328125</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandPinky2Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.07884781807661056518554688</real>
|
||||
<real>0.03141593188047409057617188</real>
|
||||
<real>0.006570651661604642868041992</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandPinky2Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.07884781807661056518554688</real>
|
||||
<real>0.03141593188047409057617188</real>
|
||||
<real>-0.006570651661604642868041992</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandPinky3Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.0131413042545318603515625</real>
|
||||
<real>5.820767479125521504101926e-11</real>
|
||||
<real>0.1051304414868354797363281</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandPinky3Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.0131413042545318603515625</real>
|
||||
<real>5.820767479125521504101926e-11</real>
|
||||
<real>-0.1051304414868354797363281</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandRing1Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.289108574390411376953125</real>
|
||||
<real>0.03141591325402259826660156</real>
|
||||
<real>-0.45337498188018798828125</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandRing1Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.289108574390411376953125</real>
|
||||
<real>0.03141591325402259826660156</real>
|
||||
<real>0.45337498188018798828125</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandRing2Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-1.62295067310333251953125</real>
|
||||
<real>-0.6911504268646240234375</real>
|
||||
<real>-0.3810977935791015625</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandRing2Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>1.62295067310333251953125</real>
|
||||
<real>-0.6911504268646240234375</real>
|
||||
<real>0.3810977935791015625</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandRing3Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-1.0775868892669677734375</real>
|
||||
<real>-0.188495576381683349609375</real>
|
||||
<real>-0.01314130146056413650512695</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandRing3Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>1.0775868892669677734375</real>
|
||||
<real>-0.188495576381683349609375</real>
|
||||
<real>0.01314130146056413650512695</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandThumb1Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.02628260292112827301025391</real>
|
||||
<real>0.56548678874969482421875</real>
|
||||
<real>0.164266288280487060546875</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandThumb1Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.02628260292112827301025391</real>
|
||||
<real>0.56548678874969482421875</real>
|
||||
<real>-0.164266288280487060546875</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandThumb2Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.131413042545318603515625</real>
|
||||
<real>0.4084071218967437744140625</real>
|
||||
<real>0.249684751033782958984375</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandThumb2Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.131413042545318603515625</real>
|
||||
<real>0.4084071218967437744140625</real>
|
||||
<real>-0.249684751033782958984375</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandThumb3Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-1.08415758609771728515625</real>
|
||||
<real>-2.980232594040899130050093e-08</real>
|
||||
<real>0.735913097858428955078125</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandThumb3Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>1.08415758609771728515625</real>
|
||||
<real>-2.980232594040899130050093e-08</real>
|
||||
<real>-0.735913097858428955078125</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>startFromTeePose</key>
|
||||
<map>
|
||||
<key>value</key>
|
||||
<boolean>1</boolean>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<map>
|
||||
<key>value</key>
|
||||
<integer>5</integer>
|
||||
</map>
|
||||
</map>
|
||||
</llsd>
|
||||
|
|
@ -0,0 +1,764 @@
|
|||
<llsd>
|
||||
<map>
|
||||
<key>mHandIndex1Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.47965753078460693359375</real>
|
||||
<real>0.1884955614805221557617188</real>
|
||||
<real>0.39423906803131103515625</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandIndex1Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.47965753078460693359375</real>
|
||||
<real>0.1884955614805221557617188</real>
|
||||
<real>-0.39423906803131103515625</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandIndex2Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.79504883289337158203125</real>
|
||||
<real>0.125663697719573974609375</real>
|
||||
<real>-0.1051304116845130920410156</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandIndex2Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.79504883289337158203125</real>
|
||||
<real>0.125663697719573974609375</real>
|
||||
<real>0.1051304116845130920410156</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandIndex3Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.749054431915283203125</real>
|
||||
<real>0.628318488597869873046875</real>
|
||||
<real>-0.08541847020387649536132812</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandIndex3Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.749054431915283203125</real>
|
||||
<real>0.628318488597869873046875</real>
|
||||
<real>0.08541847020387649536132812</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandMiddle1Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.177407562732696533203125</real>
|
||||
<real>-0.0628318488597869873046875</real>
|
||||
<real>0.01314130239188671112060547</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandMiddle1Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.177407562732696533203125</real>
|
||||
<real>-0.0628318488597869873046875</real>
|
||||
<real>-0.01314130239188671112060547</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandMiddle2Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.926461756229400634765625</real>
|
||||
<real>-0.0628318488597869873046875</real>
|
||||
<real>0.05913585051894187927246094</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandMiddle2Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.926461756229400634765625</real>
|
||||
<real>-0.0628318488597869873046875</real>
|
||||
<real>-0.05913585051894187927246094</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandMiddle3Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.69648897647857666015625</real>
|
||||
<real>0.1256637126207351684570312</real>
|
||||
<real>-0.006570654921233654022216797</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandMiddle3Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.69648897647857666015625</real>
|
||||
<real>0.1256637126207351684570312</real>
|
||||
<real>0.006570654921233654022216797</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandPinky1Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.01314130704849958419799805</real>
|
||||
<real>-0.502654850482940673828125</real>
|
||||
<real>-0.742483675479888916015625</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandPinky1Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.01314130704849958419799805</real>
|
||||
<real>-0.502654850482940673828125</real>
|
||||
<real>0.742483675479888916015625</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandPinky2Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.2891086637973785400390625</real>
|
||||
<real>-0.1884955614805221557617188</real>
|
||||
<real>0.183978259563446044921875</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandPinky2Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.2891086637973785400390625</real>
|
||||
<real>-0.1884955614805221557617188</real>
|
||||
<real>-0.183978259563446044921875</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandPinky3Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.06570651382207870483398438</real>
|
||||
<real>-0.188495576381683349609375</real>
|
||||
<real>0.0722771584987640380859375</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandPinky3Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.06570651382207870483398438</real>
|
||||
<real>-0.188495576381683349609375</real>
|
||||
<real>-0.0722771584987640380859375</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandRing1Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.0657065212726593017578125</real>
|
||||
<real>-0.09424778074026107788085938</real>
|
||||
<real>-0.3219619095325469970703125</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandRing1Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.0657065212726593017578125</real>
|
||||
<real>-0.09424778074026107788085938</real>
|
||||
<real>0.3219619095325469970703125</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandRing2Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.3285325467586517333984375</real>
|
||||
<real>-0.2827433645725250244140625</real>
|
||||
<real>0.08541848510503768920898438</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandRing2Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.3285325467586517333984375</real>
|
||||
<real>-0.2827433645725250244140625</real>
|
||||
<real>-0.08541848510503768920898438</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandRing3Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.45337498188018798828125</real>
|
||||
<real>0.03141593188047409057617188</real>
|
||||
<real>4.658912144961391277320217e-10</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandRing3Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.45337498188018798828125</real>
|
||||
<real>0.03141593188047409057617188</real>
|
||||
<real>-4.658912144961391277320217e-10</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandThumb1Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.15769565105438232421875</real>
|
||||
<real>0.785398185253143310546875</real>
|
||||
<real>0.2956793606281280517578125</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandThumb1Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.15769565105438232421875</real>
|
||||
<real>0.785398185253143310546875</real>
|
||||
<real>-0.2956793606281280517578125</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandThumb2Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.624211966991424560546875</real>
|
||||
<real>0.87964594364166259765625</real>
|
||||
<real>-0.59135878086090087890625</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandThumb2Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.624211966991424560546875</real>
|
||||
<real>0.87964594364166259765625</real>
|
||||
<real>0.59135878086090087890625</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandThumb3Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.1051304042339324951171875</real>
|
||||
<real>9.31322685637780978140654e-10</real>
|
||||
<real>0.1182717159390449523925781</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandThumb3Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.1051304042339324951171875</real>
|
||||
<real>9.31322685637780978140654e-10</real>
|
||||
<real>-0.1182717159390449523925781</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>startFromTeePose</key>
|
||||
<map>
|
||||
<key>value</key>
|
||||
<boolean>1</boolean>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<map>
|
||||
<key>value</key>
|
||||
<integer>5</integer>
|
||||
</map>
|
||||
</map>
|
||||
</llsd>
|
||||
|
|
@ -0,0 +1,764 @@
|
|||
<llsd>
|
||||
<map>
|
||||
<key>mHandIndex1Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.08541845530271530151367188</real>
|
||||
<real>-1.862645371275561956281308e-09</real>
|
||||
<real>0.387668430805206298828125</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandIndex1Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.08541845530271530151367188</real>
|
||||
<real>-1.862645371275561956281308e-09</real>
|
||||
<real>-0.387668430805206298828125</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandIndex2Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.05256521329283714294433594</real>
|
||||
<real>0</real>
|
||||
<real>0.006570651195943355560302734</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandIndex2Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.05256521329283714294433594</real>
|
||||
<real>0</real>
|
||||
<real>-0.006570651195943355560302734</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandIndex3Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandIndex3Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandMiddle1Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.86075532436370849609375</real>
|
||||
<real>-0.1884955614805221557617188</real>
|
||||
<real>0.06570651382207870483398438</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandMiddle1Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.86075532436370849609375</real>
|
||||
<real>-0.1884955614805221557617188</real>
|
||||
<real>-0.06570651382207870483398438</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandMiddle2Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-1.386407375335693359375</real>
|
||||
<real>0.188495576381683349609375</real>
|
||||
<real>-0.01314130052924156188964844</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandMiddle2Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>1.386407375335693359375</real>
|
||||
<real>0.188495576381683349609375</real>
|
||||
<real>0.01314130052924156188964844</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandMiddle3Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-1.1104400157928466796875</real>
|
||||
<real>0</real>
|
||||
<real>-0.0657065212726593017578125</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandMiddle3Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>1.1104400157928466796875</real>
|
||||
<real>0</real>
|
||||
<real>0.0657065212726593017578125</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandPinky1Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.8081901073455810546875</real>
|
||||
<real>-0.50265491008758544921875</real>
|
||||
<real>-0.880467355251312255859375</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandPinky1Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.8081901073455810546875</real>
|
||||
<real>-0.50265491008758544921875</real>
|
||||
<real>0.880467355251312255859375</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandPinky2Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-1.7543637752532958984375</real>
|
||||
<real>-1.09955751895904541015625</real>
|
||||
<real>-0.505940258502960205078125</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandPinky2Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>1.7543637752532958984375</real>
|
||||
<real>-1.09955751895904541015625</real>
|
||||
<real>0.505940258502960205078125</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandPinky3Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.972456395626068115234375</real>
|
||||
<real>-0.53407084941864013671875</real>
|
||||
<real>-0.03942396119236946105957031</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandPinky3Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.972456395626068115234375</real>
|
||||
<real>-0.53407084941864013671875</real>
|
||||
<real>0.03942396119236946105957031</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandRing1Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.94617378711700439453125</real>
|
||||
<real>-0.094247758388519287109375</real>
|
||||
<real>-0.3613858520984649658203125</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandRing1Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.94617378711700439453125</real>
|
||||
<real>-0.094247758388519287109375</real>
|
||||
<real>0.3613858520984649658203125</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandRing2Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-1.32727146148681640625</real>
|
||||
<real>-0.6283185482025146484375</real>
|
||||
<real>-0.275967419147491455078125</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandRing2Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>1.32727146148681640625</real>
|
||||
<real>-0.6283185482025146484375</real>
|
||||
<real>0.275967419147491455078125</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandRing3Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.93960297107696533203125</real>
|
||||
<real>-0.2513274252414703369140625</real>
|
||||
<real>1.538449367899374919943511e-08</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandRing3Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.93960297107696533203125</real>
|
||||
<real>-0.2513274252414703369140625</real>
|
||||
<real>-1.538449367899374919943511e-08</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandThumb1Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.26939666271209716796875</real>
|
||||
<real>0.879645764827728271484375</real>
|
||||
<real>-0.02628259360790252685546875</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandThumb1Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.26939666271209716796875</real>
|
||||
<real>0.879645764827728271484375</real>
|
||||
<real>0.02628259360790252685546875</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandThumb2Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.4993695318698883056640625</real>
|
||||
<real>-1.490116297020449565025046e-08</real>
|
||||
<real>0.58478796482086181640625</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandThumb2Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.4993695318698883056640625</real>
|
||||
<real>-1.490116297020449565025046e-08</real>
|
||||
<real>-0.58478796482086181640625</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandThumb3Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.08541847765445709228515625</real>
|
||||
<real>-0.2199115008115768432617188</real>
|
||||
<real>-0.2496847659349441528320312</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandThumb3Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.08541847765445709228515625</real>
|
||||
<real>-0.2199115008115768432617188</real>
|
||||
<real>0.2496847659349441528320312</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>startFromTeePose</key>
|
||||
<map>
|
||||
<key>value</key>
|
||||
<boolean>1</boolean>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<map>
|
||||
<key>value</key>
|
||||
<integer>5</integer>
|
||||
</map>
|
||||
</map>
|
||||
</llsd>
|
||||
|
|
@ -0,0 +1,764 @@
|
|||
<llsd>
|
||||
<map>
|
||||
<key>mHandIndex1Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.07884781807661056518554688</real>
|
||||
<real>-1.862645371275561956281308e-09</real>
|
||||
<real>0.4139510691165924072265625</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandIndex1Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.07884781807661056518554688</real>
|
||||
<real>-1.862645371275561956281308e-09</real>
|
||||
<real>-0.4139510691165924072265625</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandIndex2Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.4665162563323974609375</real>
|
||||
<real>0.314159333705902099609375</real>
|
||||
<real>-0.01314130146056413650512695</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandIndex2Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.4665162563323974609375</real>
|
||||
<real>0.314159333705902099609375</real>
|
||||
<real>0.01314130146056413650512695</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandIndex3Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.1511249989271163940429688</real>
|
||||
<real>0.2199115008115768432617188</real>
|
||||
<real>-0.04599456116557121276855469</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandIndex3Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.1511249989271163940429688</real>
|
||||
<real>0.2199115008115768432617188</real>
|
||||
<real>0.04599456116557121276855469</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandMiddle1Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.01971195451915264129638672</real>
|
||||
<real>0.06283185631036758422851562</real>
|
||||
<real>-0.006570650730282068252563477</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandMiddle1Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.01971195451915264129638672</real>
|
||||
<real>0.06283185631036758422851562</real>
|
||||
<real>0.006570650730282068252563477</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandMiddle2Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.3088206350803375244140625</real>
|
||||
<real>-9.31322685637780978140654e-10</real>
|
||||
<real>-0.07227717339992523193359375</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandMiddle2Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.3088206350803375244140625</real>
|
||||
<real>-9.31322685637780978140654e-10</real>
|
||||
<real>0.07227717339992523193359375</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandMiddle3Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.3088206350803375244140625</real>
|
||||
<real>-9.31322685637780978140654e-10</real>
|
||||
<real>-0.07227717339992523193359375</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandMiddle3Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.3088206350803375244140625</real>
|
||||
<real>-9.31322685637780978140654e-10</real>
|
||||
<real>0.07227717339992523193359375</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandPinky1Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.1576956361532211303710938</real>
|
||||
<real>-0.21991145610809326171875</real>
|
||||
<real>-0.545364081859588623046875</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandPinky1Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.1576956361532211303710938</real>
|
||||
<real>-0.21991145610809326171875</real>
|
||||
<real>0.545364081859588623046875</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandPinky2Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.210260808467864990234375</real>
|
||||
<real>-0.1884955465793609619140625</real>
|
||||
<real>0.1248423606157302856445312</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandPinky2Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.210260808467864990234375</real>
|
||||
<real>-0.1884955465793609619140625</real>
|
||||
<real>-0.1248423606157302856445312</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandPinky3Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.210260808467864990234375</real>
|
||||
<real>-0.1884955465793609619140625</real>
|
||||
<real>0.1248423606157302856445312</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandPinky3Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.210260808467864990234375</real>
|
||||
<real>-0.1884955465793609619140625</real>
|
||||
<real>-0.1248423606157302856445312</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandRing1Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.078847825527191162109375</real>
|
||||
<real>-0.06283185631036758422851562</real>
|
||||
<real>-0.249684751033782958984375</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandRing1Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.078847825527191162109375</real>
|
||||
<real>-0.06283185631036758422851562</real>
|
||||
<real>0.249684751033782958984375</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandRing2Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.2562553882598876953125</real>
|
||||
<real>-0.03141593188047409057617188</real>
|
||||
<real>-0.05256520584225654602050781</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandRing2Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.2562553882598876953125</real>
|
||||
<real>-0.03141593188047409057617188</real>
|
||||
<real>0.05256520584225654602050781</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandRing3Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.2431140840053558349609375</real>
|
||||
<real>-0.1570796519517898559570312</real>
|
||||
<real>-0.03942390903830528259277344</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandRing3Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.2431140840053558349609375</real>
|
||||
<real>-0.1570796519517898559570312</real>
|
||||
<real>0.03942390903830528259277344</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandThumb1Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.3548151552677154541015625</real>
|
||||
<real>0.69115030765533447265625</real>
|
||||
<real>0.03285327181220054626464844</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandThumb1Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.3548151552677154541015625</real>
|
||||
<real>0.69115030765533447265625</real>
|
||||
<real>-0.03285327181220054626464844</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandThumb2Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.07227717339992523193359375</real>
|
||||
<real>0.282743394374847412109375</real>
|
||||
<real>0.0985597670078277587890625</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandThumb2Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.07227717339992523193359375</real>
|
||||
<real>0.282743394374847412109375</real>
|
||||
<real>-0.0985597670078277587890625</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandThumb3Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.03285324946045875549316406</real>
|
||||
<real>1.16415321826934814453125e-10</real>
|
||||
<real>0.05256520211696624755859375</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandThumb3Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.03285324946045875549316406</real>
|
||||
<real>1.16415321826934814453125e-10</real>
|
||||
<real>-0.05256520211696624755859375</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>startFromTeePose</key>
|
||||
<map>
|
||||
<key>value</key>
|
||||
<boolean>1</boolean>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<map>
|
||||
<key>value</key>
|
||||
<integer>5</integer>
|
||||
</map>
|
||||
</map>
|
||||
</llsd>
|
||||
|
|
@ -0,0 +1,764 @@
|
|||
<llsd>
|
||||
<map>
|
||||
<key>mHandIndex1Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-1.16957604885101318359375</real>
|
||||
<real>0.3141593039035797119140625</real>
|
||||
<real>0.275967419147491455078125</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandIndex1Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>1.16957604885101318359375</real>
|
||||
<real>0.3141593039035797119140625</real>
|
||||
<real>-0.275967419147491455078125</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandIndex2Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-1.6426627635955810546875</real>
|
||||
<real>0.4712389409542083740234375</real>
|
||||
<real>0.19711959362030029296875</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandIndex2Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>1.6426627635955810546875</real>
|
||||
<real>0.4712389409542083740234375</real>
|
||||
<real>-0.19711959362030029296875</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandIndex3Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.2693967521190643310546875</real>
|
||||
<real>0.502654969692230224609375</real>
|
||||
<real>-0.059135854244232177734375</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandIndex3Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.2693967521190643310546875</real>
|
||||
<real>0.502654969692230224609375</real>
|
||||
<real>0.059135854244232177734375</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandMiddle1Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-1.18928778171539306640625</real>
|
||||
<real>0.157079637050628662109375</real>
|
||||
<real>-0.2234021276235580444335938</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandMiddle1Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>1.18928778171539306640625</real>
|
||||
<real>0.157079637050628662109375</real>
|
||||
<real>0.2234021276235580444335938</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandMiddle2Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-1.57695615291595458984375</real>
|
||||
<real>-1.490116297020449565025046e-08</real>
|
||||
<real>-0.1576956212520599365234375</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandMiddle2Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>1.57695615291595458984375</real>
|
||||
<real>-1.490116297020449565025046e-08</real>
|
||||
<real>0.1576956212520599365234375</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandMiddle3Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.3876684010028839111328125</real>
|
||||
<real>-1.86264514923095703125e-09</real>
|
||||
<real>-0.07884781062602996826171875</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandMiddle3Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.3876684010028839111328125</real>
|
||||
<real>-1.86264514923095703125e-09</real>
|
||||
<real>0.07884781062602996826171875</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandPinky1Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-1.2287118434906005859375</real>
|
||||
<real>-0.34557521343231201171875</real>
|
||||
<real>-1.04473364353179931640625</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandPinky1Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>1.2287118434906005859375</real>
|
||||
<real>-0.34557521343231201171875</real>
|
||||
<real>1.04473364353179931640625</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandPinky2Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-1.7477934360504150390625</real>
|
||||
<real>-1.13097345829010009765625</real>
|
||||
<real>-0.749054491519927978515625</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandPinky2Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>1.7477934360504150390625</real>
|
||||
<real>-1.13097345829010009765625</real>
|
||||
<real>0.749054491519927978515625</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandPinky3Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.01314130052924156188964844</real>
|
||||
<real>-0.2199115008115768432617188</real>
|
||||
<real>0.269396722316741943359375</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandPinky3Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.01314130052924156188964844</real>
|
||||
<real>-0.2199115008115768432617188</real>
|
||||
<real>-0.269396722316741943359375</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandRing1Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-1.14986383914947509765625</real>
|
||||
<real>0.1256636530160903930664062</real>
|
||||
<real>-0.62421190738677978515625</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandRing1Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>1.14986383914947509765625</real>
|
||||
<real>0.1256636530160903930664062</real>
|
||||
<real>0.62421190738677978515625</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandRing2Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-1.48496711254119873046875</real>
|
||||
<real>-0.40840709209442138671875</real>
|
||||
<real>-0.420521676540374755859375</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandRing2Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>1.48496711254119873046875</real>
|
||||
<real>-0.40840709209442138671875</real>
|
||||
<real>0.420521676540374755859375</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandRing3Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.519081413745880126953125</real>
|
||||
<real>-0.2513274252414703369140625</real>
|
||||
<real>-0.1117010787129402160644531</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandRing3Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.519081413745880126953125</real>
|
||||
<real>-0.2513274252414703369140625</real>
|
||||
<real>0.1117010787129402160644531</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandThumb1Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.3219619095325469970703125</real>
|
||||
<real>0.188495576381683349609375</real>
|
||||
<real>0.170836925506591796875</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandThumb1Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.3219619095325469970703125</real>
|
||||
<real>0.188495576381683349609375</real>
|
||||
<real>-0.170836925506591796875</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandThumb2Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.01971196010708808898925781</real>
|
||||
<real>0.1256637126207351684570312</real>
|
||||
<real>-0.2036901861429214477539062</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandThumb2Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.01971196010708808898925781</real>
|
||||
<real>0.1256637126207351684570312</real>
|
||||
<real>0.2036901861429214477539062</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandThumb3Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.2891086041927337646484375</real>
|
||||
<real>-0.09424777328968048095703125</real>
|
||||
<real>-0.3219619095325469970703125</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandThumb3Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.2891086041927337646484375</real>
|
||||
<real>-0.09424777328968048095703125</real>
|
||||
<real>0.3219619095325469970703125</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>startFromTeePose</key>
|
||||
<map>
|
||||
<key>value</key>
|
||||
<boolean>1</boolean>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<map>
|
||||
<key>value</key>
|
||||
<integer>5</integer>
|
||||
</map>
|
||||
</map>
|
||||
</llsd>
|
||||
|
|
@ -0,0 +1,764 @@
|
|||
<llsd>
|
||||
<map>
|
||||
<key>mHandIndex1Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.630782604217529296875</real>
|
||||
<real>0.2199114859104156494140625</real>
|
||||
<real>0.492798864841461181640625</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandIndex1Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.630782604217529296875</real>
|
||||
<real>0.2199114859104156494140625</real>
|
||||
<real>-0.492798864841461181640625</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandIndex2Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-1.19585859775543212890625</real>
|
||||
<real>0.534070789813995361328125</real>
|
||||
<real>0.04599459096789360046386719</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandIndex2Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>1.19585859775543212890625</real>
|
||||
<real>0.534070789813995361328125</real>
|
||||
<real>-0.04599459096789360046386719</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandIndex3Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-1.27470624446868896484375</real>
|
||||
<real>0.785398185253143310546875</real>
|
||||
<real>0.07227708399295806884765625</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandIndex3Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>1.27470624446868896484375</real>
|
||||
<real>0.785398185253143310546875</real>
|
||||
<real>-0.07227708399295806884765625</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandMiddle1Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.86075532436370849609375</real>
|
||||
<real>-0.1884955614805221557617188</real>
|
||||
<real>0.06570651382207870483398438</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandMiddle1Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.86075532436370849609375</real>
|
||||
<real>-0.1884955614805221557617188</real>
|
||||
<real>-0.06570651382207870483398438</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandMiddle2Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-1.386407375335693359375</real>
|
||||
<real>0.188495576381683349609375</real>
|
||||
<real>-0.01314130052924156188964844</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandMiddle2Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>1.386407375335693359375</real>
|
||||
<real>0.188495576381683349609375</real>
|
||||
<real>0.01314130052924156188964844</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandMiddle3Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-1.1104400157928466796875</real>
|
||||
<real>0</real>
|
||||
<real>-0.0657065212726593017578125</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandMiddle3Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>1.1104400157928466796875</real>
|
||||
<real>0</real>
|
||||
<real>0.0657065212726593017578125</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandPinky1Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.8081901073455810546875</real>
|
||||
<real>-0.50265491008758544921875</real>
|
||||
<real>-0.880467355251312255859375</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandPinky1Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.8081901073455810546875</real>
|
||||
<real>-0.50265491008758544921875</real>
|
||||
<real>0.880467355251312255859375</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandPinky2Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-1.7543637752532958984375</real>
|
||||
<real>-1.09955751895904541015625</real>
|
||||
<real>-0.505940258502960205078125</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandPinky2Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>1.7543637752532958984375</real>
|
||||
<real>-1.09955751895904541015625</real>
|
||||
<real>0.505940258502960205078125</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandPinky3Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.972456395626068115234375</real>
|
||||
<real>-0.53407084941864013671875</real>
|
||||
<real>-0.03942396119236946105957031</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandPinky3Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.972456395626068115234375</real>
|
||||
<real>-0.53407084941864013671875</real>
|
||||
<real>0.03942396119236946105957031</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandRing1Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.94617378711700439453125</real>
|
||||
<real>-0.094247758388519287109375</real>
|
||||
<real>-0.3613858520984649658203125</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandRing1Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.94617378711700439453125</real>
|
||||
<real>-0.094247758388519287109375</real>
|
||||
<real>0.3613858520984649658203125</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandRing2Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-1.32727146148681640625</real>
|
||||
<real>-0.6283185482025146484375</real>
|
||||
<real>-0.275967419147491455078125</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandRing2Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>1.32727146148681640625</real>
|
||||
<real>-0.6283185482025146484375</real>
|
||||
<real>0.275967419147491455078125</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandRing3Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.93960297107696533203125</real>
|
||||
<real>-0.2513274252414703369140625</real>
|
||||
<real>1.538449367899374919943511e-08</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandRing3Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.93960297107696533203125</real>
|
||||
<real>-0.2513274252414703369140625</real>
|
||||
<real>-1.538449367899374919943511e-08</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandThumb1Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.006570653989911079406738281</real>
|
||||
<real>0.848230063915252685546875</real>
|
||||
<real>-0.03942391648888587951660156</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandThumb1Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.006570653989911079406738281</real>
|
||||
<real>0.848230063915252685546875</real>
|
||||
<real>0.03942391648888587951660156</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandThumb2Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.3416738212108612060546875</real>
|
||||
<real>0.40840709209442138671875</real>
|
||||
<real>0.440233647823333740234375</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandThumb2Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.3416738212108612060546875</real>
|
||||
<real>0.40840709209442138671875</real>
|
||||
<real>-0.440233647823333740234375</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandThumb3Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.08541847765445709228515625</real>
|
||||
<real>-0.2199115008115768432617188</real>
|
||||
<real>-0.2496847659349441528320312</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandThumb3Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.08541847765445709228515625</real>
|
||||
<real>-0.2199115008115768432617188</real>
|
||||
<real>0.2496847659349441528320312</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>startFromTeePose</key>
|
||||
<map>
|
||||
<key>value</key>
|
||||
<boolean>1</boolean>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<map>
|
||||
<key>value</key>
|
||||
<integer>5</integer>
|
||||
</map>
|
||||
</map>
|
||||
</llsd>
|
||||
|
|
@ -0,0 +1,764 @@
|
|||
<llsd>
|
||||
<map>
|
||||
<key>mHandIndex1Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.07227716594934463500976562</real>
|
||||
<real>0.2199114710092544555664062</real>
|
||||
<real>0.2693966925144195556640625</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandIndex1Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.05256520584225654602050781</real>
|
||||
<real>0.1256637275218963623046875</real>
|
||||
<real>-0.4665162861347198486328125</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandIndex2Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.03285326063632965087890625</real>
|
||||
<real>1.455191696309032778344772e-11</real>
|
||||
<real>-0.01314130239188671112060547</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandIndex2Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.03285326063632965087890625</real>
|
||||
<real>1.455191696309032778344772e-11</real>
|
||||
<real>0.01314130239188671112060547</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandIndex3Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.01971195824444293975830078</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandIndex3Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.01971195824444293975830078</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandMiddle1Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.04599455744028091430664062</real>
|
||||
<real>-4.65661342818890489070327e-10</real>
|
||||
<real>0.06570650637149810791015625</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandMiddle1Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.09855977445840835571289062</real>
|
||||
<real>0</real>
|
||||
<real>0.006570650730282068252563477</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandMiddle2Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.03285325691103935241699219</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandMiddle2Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.03285325691103935241699219</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandMiddle3Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.01971195638179779052734375</real>
|
||||
<real>2.910383392618065556689544e-11</real>
|
||||
<real>-0.04599456489086151123046875</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandMiddle3Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.01971195638179779052734375</real>
|
||||
<real>2.910383392618065556689544e-11</real>
|
||||
<real>0.04599456489086151123046875</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandPinky1Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.749054372310638427734375</real>
|
||||
<real>-0.543495595455169677734375</real>
|
||||
<real>-0.913320600986480712890625</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandPinky1Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-1.42372357845306396484375</real>
|
||||
<real>-0.589437425136566162109375</real>
|
||||
<real>-0.1377763897180557250976562</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandPinky2Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-2.0171897411346435546875</real>
|
||||
<real>-1.099557399749755859375</real>
|
||||
<real>-0.64392375946044921875</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandPinky2Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.03942390903830528259277344</real>
|
||||
<real>0.03141593188047409057617188</real>
|
||||
<real>0.03285326063632965087890625</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandPinky3Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.558505475521087646484375</real>
|
||||
<real>-0.56548678874969482421875</real>
|
||||
<real>-0.05256522819399833679199219</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandPinky3Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.0131413042545318603515625</real>
|
||||
<real>5.820767479125521504101926e-11</real>
|
||||
<real>-0.1051304414868354797363281</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandRing1Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.987495481967926025390625</real>
|
||||
<real>0.01987109147012233734130859</real>
|
||||
<real>-0.498646259307861328125</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandRing1Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-1.4442241191864013671875</real>
|
||||
<real>-0.281714916229248046875</real>
|
||||
<real>-0.3864487111568450927734375</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandRing2Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-1.96462452411651611328125</real>
|
||||
<real>-0.4084071218967437744140625</real>
|
||||
<real>-0.551934778690338134765625</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandRing2Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.03285326063632965087890625</real>
|
||||
<real>2.910383392618065556689544e-11</real>
|
||||
<real>-0.01971195451915264129638672</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandRing3Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.2431140989065170288085938</real>
|
||||
<real>0</real>
|
||||
<real>-0.0722771584987640380859375</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandRing3Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.01971195451915264129638672</real>
|
||||
<real>7.27595848154516389172386e-12</real>
|
||||
<real>0.006570650730282068252563477</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandThumb1Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.1576956808567047119140625</real>
|
||||
<real>1.07128322124481201171875</real>
|
||||
<real>0.1379837095737457275390625</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandThumb1Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.01314130239188671112060547</real>
|
||||
<real>0</real>
|
||||
<real>0.006570651195943355560302734</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandThumb2Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-1.32070124149322509765625</real>
|
||||
<real>1.22522127628326416015625</real>
|
||||
<real>1.018451213836669921875</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandThumb2Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.03942390531301498413085938</real>
|
||||
<real>5.82076609134674072265625e-11</real>
|
||||
<real>-0.01971195451915264129638672</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandThumb3Left</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>-0.597929298877716064453125</real>
|
||||
<real>-0.251327455043792724609375</real>
|
||||
<real>-0.08541848510503768920898438</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>mHandThumb3Right</key>
|
||||
<map>
|
||||
<key>enabled</key>
|
||||
<boolean>1</boolean>
|
||||
<key>jointBaseRotationIsZero</key>
|
||||
<boolean>1</boolean>
|
||||
<key>position</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
<key>rotation</key>
|
||||
<array>
|
||||
<real>0.03285325691103935241699219</real>
|
||||
<real>0</real>
|
||||
<real>-0</real>
|
||||
</array>
|
||||
<key>scale</key>
|
||||
<array>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
<real>0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>startFromTeePose</key>
|
||||
<map>
|
||||
<key>value</key>
|
||||
<boolean>1</boolean>
|
||||
</map>
|
||||
<key>version</key>
|
||||
<map>
|
||||
<key>value</key>
|
||||
<integer>5</integer>
|
||||
</map>
|
||||
</map>
|
||||
</llsd>
|
||||
|
|
@ -112,7 +112,7 @@
|
|||
<combo_box.item value="filter_type_snapshots" label="Fotos" />
|
||||
<combo_box.item value="filter_type_settings" label="Einstellungen" />
|
||||
<combo_box.item value="filter_type_materials" label="Materialien" />
|
||||
<combo_box.item value="filter_separator" label="------------" />
|
||||
<combo_box.item value="filter_type_coalesced" label="Nur verbundene Objekte"/>
|
||||
<combo_box.item value="filter_type_custom" label="Benutzerdefiniert..." />
|
||||
</combo_box>
|
||||
<menu_button name="options_visibility_btn" tool_tip="Sichtbarkeitseinstellungen für Suchergebnisse anzeigen"/>
|
||||
|
|
|
|||
|
|
@ -739,6 +739,8 @@
|
|||
<combo_box.item value="filter_type_materials" label="Materials" />
|
||||
<combo_box.item value="filter_type_settings" label="Settings" />
|
||||
<combo_box.item value="filter_separator" label="------------" enabled="false" />
|
||||
<combo_box.item value="filter_type_coalesced" label="Only Coalesced"/>
|
||||
<combo_box.item value="filter_separator" label="------------" enabled="false" />
|
||||
<combo_box.item value="filter_type_custom" label="Custom..." />
|
||||
</combo_box>
|
||||
|
||||
|
|
|
|||
Binary file not shown.
|
After Width: | Height: | Size: 1.2 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 645 B |
|
|
@ -844,7 +844,7 @@ with the same filename but different name
|
|||
<texture name="TrashItem_Disabled" file_name="icons/TrashItem_Disabled.png" preload="true" />
|
||||
<texture name="TrashItem_Off" file_name="icons/TrashItem_Off.png" preload="true" />
|
||||
<texture name="TrashItem_Press" file_name="icons/TrashItem_Press.png" preload="true" />
|
||||
|
||||
<texture name="show_filters_18" file_name="bottomtray/show_filters_18.png" preload="true" />
|
||||
<texture name="inventory_18" file_name="bottomtray/inventory_18.png" preload="true" />
|
||||
<texture name="chatbar_18" file_name="bottomtray/chatbar_18.png" preload="true" />
|
||||
<texture name="nearbychat_18" file_name="toolbar_icons/nearbychat.png" preload="true" />
|
||||
|
|
|
|||
|
|
@ -223,6 +223,7 @@
|
|||
<slider name="trackpad_sensitivity_slider" tool_tip="Stellt die Sensitivität der Steuerkugel ein"/>
|
||||
<check_box name="stop_posing_on_close_checkbox" label="Beim Schließen stoppen" tool_tip="Die Pose beim Schließen nicht zu stoppen kann hilfreich sein, um die bisher getätigte Arbeit nicht zu verlieren."/>
|
||||
<check_box name="reset_base_rotation_on_edit_checkbox" label="Basis-Rot. beim Edit. zurück." tool_tip="Wenn das erste Mal eine Pose bearbeitet wird, diese auf Null zurücksetzen. Hierdurch eine eine komplette Pose und nicht nur die Differenz gespeichert werden. Ein grüner Haken erscheint neben jedem Gelenk, dass auf Null-basierend exportiert wurde."/>
|
||||
<check_box name="also_save_bvh_checkbox" label="BHV beim Speichern erst." tool_tip="Wenn die Pose gespeichert wird, wird ebenfalls eine BHV-Datei erstellt, die via Bauen > Hochladen > Animation hochgeladen und zum Posieren vom eigenen Avatar oder anderen Avataren verwendet werden kann. Hierzu muss die Basis der Gelenke auf Null gesetzt werden, da BHV nicht von anderen Posen abgeleitet wird."/>
|
||||
</panel>
|
||||
</tab_container>
|
||||
</panel>
|
||||
|
|
@ -235,7 +236,7 @@
|
|||
<button name="undo_change" tool_tip="Letzte Rotationsänderung rückgängig machen"/>
|
||||
<button name="button_redo_change" tool_tip="Letzte Rotationsänderung wiederherstellen"/>
|
||||
<button name="refresh_avatars" tool_tip="Doppelklicken, um alle ausgewählten Körperteile auf die Ursprungswerte zurückzusetzen."/>
|
||||
<button name="delta_mode_toggle" tool_tip="Falls mehrere Gelenke geändert werden, diese um denselben Wert ändern anstatt in dieselbe Rotation zu versetzen."/>
|
||||
<button name="delta_mode_toggle" tool_tip="Falls mehrere Gelenke geändert werden, diese um denselben Wert ändern anstatt in dieselbe Rotation zu versetzen. Wird auch zur Verhinderung von Gimbal Lock verwendet."/>
|
||||
<button label="Spieg." name="button_toggleMirrorRotation" tool_tip="Änderungen an gegenüberliegendem Gelenk spiegeln."/>
|
||||
<button label="Sym." name="button_toggleSympatheticRotation" tool_tip="Gegenüberliegendes Gelenk gleichermaßen anpassen."/>
|
||||
</panel>
|
||||
|
|
@ -261,7 +262,7 @@
|
|||
<button name="toggleAdvancedPanel" tool_tip="Erweiterte Einstellungen aktivieren/deaktivieren"/>
|
||||
<button name="FlipPose_avatar" tool_tip="Komplette Pose links/rechts umschalten"/>
|
||||
<button name="FlipJoint_avatar" tool_tip="Ausgewählte Körperteile links/rechts spiegeln"/>
|
||||
<button label="Ausw." name="button_RecaptureParts" tool_tip="Falls ausgewählte Körperteile nicht posiert werden, werden die Werte der aktuellen Pose erfasst. Diese Schaltfläche ist deaktiviert, wenn aus einer T-Pose heraus gestartet wird."/>
|
||||
<button label="Ausw." name="button_RecaptureParts" tool_tip="Falls ausgewählte Körperteile nicht posiert werden, werden die Werte der aktuellen Pose erfasst."/>
|
||||
<button label="Teile an/aus" name="toggle_PosingSelectedBones" tool_tip="Schaltet Poser für ausgewählte Körperteile an bzw. aus. Falls aus, werden die entsprechenden Körperteile normal animiert (z.B. via AO, Poseball usw.)."/>
|
||||
<button label="Eigene Posen" name="toggleLoadSavePanel" tool_tip="Laden, speichern under verwalten der eigenen erstellten Posen"/>
|
||||
<button tool_tip="Posen-Verzeichnis verwalten" name="open_poseDir_button"/>
|
||||
|
|
|
|||
|
|
@ -20,6 +20,12 @@
|
|||
<check_box label="Kop" name="check_copy"/>
|
||||
<check_box label="Trans" name="check_transfer"/>
|
||||
<check_box label="Ordner immer anzeig." name="check_show_empty"/>
|
||||
<check_box label="Nur verbundene" name="check_only_coalesced" width="110"/>
|
||||
<combo_box tool_tip="Verknüpfte Objekte filtern" name="inventory_filter_show_links_combo">
|
||||
<combo_box.item name="show_links" label="Verknüpfungen anzeigen"/>
|
||||
<combo_box.item name="show_links_only" label="Nur Verknüpfungen anzeigen"/>
|
||||
<combo_box.item name="hide_links" label="Verknüpfungen verstecken"/>
|
||||
</combo_box>
|
||||
<check_box label="Von mir erstellt" name="check_created_by_me"/>
|
||||
<check_box label="Von anderen erstellt" name="check_created_by_others"/>
|
||||
<check_box label="Seit Abmeldung" name="check_since_logoff"/>
|
||||
|
|
|
|||
|
|
@ -1,10 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
|
||||
<toggleable_menu name="Settings">
|
||||
<menu_item_call label="Nur Rotationen laden" name="rotations"/>
|
||||
<menu_item_call label="Nur Positionen laden" name="positions"/>
|
||||
<menu_item_call label="Nur Skalierung laden" name="scale"/>
|
||||
<menu_item_call label="Rotationen & Positionen laden" name="rotations_positions"/>
|
||||
<menu_item_call label="Rotationen & Skalierung laden" name="rotations_scales"/>
|
||||
<menu_item_call label="Positionen und Skalierung laden" name="positions_scales"/>
|
||||
<menu_item_call label="Alles laden" name="load_all"/>
|
||||
<menu_item_call label="Selektiv laden" tool_tip="Lädt nur deaktivierte Gelenke und aktiviert diese" name="rotations_positions"/>
|
||||
<menu_item_call label="Selektiv laden - Nur Rotation" tool_tip="Lädt nur Rotationen von deaktivierten Gelenken und aktiviert diese" name="rotations_positions"/>
|
||||
<menu_item_call label="Laden - Nur Rotationen" tool_tip="Lädt nur Rotationen. Gut für Posen die für andere Avatare/Körperformen erstellt wurden." name="rotations"/>
|
||||
<menu_item_call label="Laden" tool_tip="Lädt Rotationen, Position und Skalierung." name="load_all"/>
|
||||
</toggleable_menu>
|
||||
|
|
|
|||
|
|
@ -109,6 +109,7 @@
|
|||
<menu_item_check label="Unterhaltungsprotokoll..." name="Conversation Log..."/>
|
||||
<menu_item_check label="Stimmen in der Nähe" name="Nearby Voice"/>
|
||||
<menu_item_call label="Blockierliste" name="Block List"/>
|
||||
<menu_item_check label="Chat-Konsole anzeigen" name="Show On-screen Console"/>
|
||||
</menu>
|
||||
<menu label="Welt" name="World">
|
||||
<menu_item_call label="Animationen synchronisieren" name="Resync Animations"/>
|
||||
|
|
|
|||
|
|
@ -42,8 +42,8 @@
|
|||
<combo_box.item value="filter_type_textures" label="Texturen" />
|
||||
<combo_box.item value="filter_type_snapshots" label="Fotos" />
|
||||
<combo_box.item value="filter_type_materials" label="Materialien" />
|
||||
<combo_box.item value="filter_type_coalesced" label="Nur verbundene Objekte"/>
|
||||
<combo_box.item value="filter_type_settings" label="Einstellungen" />
|
||||
<combo_box.item value="filter_separator" label="------------" />
|
||||
<combo_box.item value="filter_type_custom" label="Benutzerdefiniert..." />
|
||||
</combo_box>
|
||||
<menu_button name="options_visibility_btn" tool_tip="Sichtbarkeitseinstellungen für Suchergebnisse anzeigen"/>
|
||||
|
|
@ -67,6 +67,9 @@
|
|||
<panel name="new_inventory_panel">
|
||||
<button name="new_inv_btn" tool_tip="Zusätzliches Inventar-Fenster"/>
|
||||
</panel>
|
||||
<panel name="show_filters_panel">
|
||||
<button name="show_filters_inv_btn" tool_tip="Filter anzeigen - Zeigt Filter-Fenster wenn ausgewählt. Wird hervorgehoben, wenn ein Filter aktiv ist."/>
|
||||
</panel>
|
||||
<panel name="view_mode_panel">
|
||||
<button name="view_mode_btn" tool_tip="Zwischen Ansichten umschalten"/>
|
||||
</panel>
|
||||
|
|
|
|||
|
|
@ -27,8 +27,20 @@
|
|||
<text name="ObjectInspectorTooltipDelay_text">
|
||||
Sekunden
|
||||
</text>
|
||||
<text name="FSHudTextLabel">
|
||||
Optionen für Schwebetext:
|
||||
</text>
|
||||
<slider label_width="230" label="Schwebetext-Ausblendentfernung (in m):" tool_tip="Legt die Entfernung fest, ab der Schwebetext ausgeblendet wird." name="FSHudTextFadeDistance"/>
|
||||
<slider label_width="230" label="Schwebetext-Ausblendbereich (in m):" tool_tip="Legt die Entfernung fest, auf der ein Schwebetext von vollständig sichtbar bis komplett unsichtbar ausgeblendet wird." name="FSHudTextFadeRange"/>
|
||||
<check_box name="FSHudTextUseHoverHighlight" label="Schwebetext von Objekten hervorheben:" tool_tip="Wenn mit der Maus über ein Objekt gefahren wird, wird der Schwebetext von Objekten (falls vorhanden) hervorgehoben, indem der Text in den Vordergrund geholt und der durchsichtige Hintergrund deaktiviert wird."/>
|
||||
<text name="FSHudTextShowBackgroundLabel" width="220">
|
||||
Hintergrund von Schwebetext anzeigen:
|
||||
</text>
|
||||
<combo_box name="FSHudTextShowBackgroundDropdown" tool_tip="Zeigt einen schwarz/weißen Hintergrund hinter Schwebetext an, um ihn besser lesbar zu machen. Die Deckkraft kann unter Farben > Sonstige angepasst werden">
|
||||
<combo_box.item label="Deaktiviert" name="ScriptDialogOption_0"/>
|
||||
<combo_box.item label="Nur hervorgehobenes Object" name="ScriptDialogOption_1"/>
|
||||
<combo_box.item label="Alle Objekte" name="ScriptDialogOption_2"/>
|
||||
</combo_box>
|
||||
</panel>
|
||||
|
||||
<!--2D Overlay-->
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@
|
|||
<check_box label="Chat in der Nähe" name="show_timestamps_nearby_chat" width="120"/>
|
||||
<check_box label="Instant Messages" name="show_timestamps_im" width="120"/>
|
||||
<check_box label="Verlauf" name="show_timestamps_transcripts"/>
|
||||
<check_box label="Chat-Konsole anzeigen" tool_tip="Chat in Konsole anzeigen/verstecken, falls das Gespräche-Fenster nicht angezeigt wird" name="FSShowOnscreenConsole"/>
|
||||
<check_box name="FSConsoleClassicDrawMode" label="Klassischen Anzeigemodus für Konsole verwenden" tool_tip="Im klassischen Anzeigemodus wird der Hintergrund der Konsole als einzelner Block über alle Zeilen und mit der Breite der längsten Zeile dargestellt."/>
|
||||
<check_box name="ChatFullWidth" label="Bildschirmbreite für Konsole verwenden" width="240"/>
|
||||
<spinner label="Chat ausblenden nach:" label_width="130" name="fade_chat_time" width="180" />
|
||||
|
|
|
|||
|
|
@ -199,6 +199,7 @@
|
|||
</text>
|
||||
<color_swatch name="console_background" tool_tip="Hintergrundfarbe der Konsole auswählen"/>
|
||||
<slider name="console_background_opacity" label="Deckkraft:" tool_tip="Deckkraft für Konsole auswählen"/>
|
||||
<slider label="Deckkraft für Schwebe-Text:" name="FSHudTextBackgroundOpacity" tool_tip="Deckkraft für Hintergrund von Schwebe-Text festlegen"/>
|
||||
<text name="preferences_search_label">
|
||||
Farbe für Einstellungssuche:
|
||||
</text>
|
||||
|
|
|
|||
|
|
@ -165,7 +165,7 @@ Additional code generously contributed to Firestorm by:
|
|||
top_pad="4"
|
||||
width="450"
|
||||
wrap="true">
|
||||
Albatroz Hird, Alexie Birman, Andromeda Rage, Angeldark Raymaker, Angus Boyd, Animats, Armin Weatherwax, Casper Warden, Chalice Yao, Chaser Zaks, Chorazin Allen, Cron Stardust, Damian Zhaoying, Dan Threebeards, Dawa Gurbux, Denver Maksim, Dragonborn Forzane, Drake Arconis, Felyza Wishbringer, f0rbidden, Fractured Crystal, Geenz Spad, Gibson Firehawk, Hitomi Tiponi, humbletim, Inusaito Sayori, Jean Severine, Katharine Berry, Kittin Ninetails, Kool Koolhoven, Lance Corrimal, Lassie, Latif Khalifa, Laurent Bechir, Magne Metaverse LLC, Magus Freston, Makidoll, Manami Hokkigai, MartinRJ Fayray, McCabe Maxstead, Melancholy Lemon, Melysmile, Mimika Oh, Mister Acacia, MorganMegan, Morgan Pennent, Mysty Saunders, Nagi Michinaga, Name Short, nhede Core, NiranV Dean, Nogardrevlis Lectar, Oren Hurvitz, paperwork, Penny Patton, Peyton Menges, programmtest, Qwerty Venom, Rebecca Ashbourne, Revolution Smythe, Romka Swallowtail, Sahkolihaa Contepomi, sal Kaligawa, Samm Florian, Satomi Ahn, Sei Lisa, Sempervirens Oddfellow, Shin Wasp, Shyotl Kuhr, Sione Lomu, Skills Hak, StarlightShining, Sunset Faulkes, Tapple Gao, Testicular Slingshot, Thickbrick Sleaford, Ubit Umarov, Vaalith Jinn, Vincent Sylvester, Whirly Fizzle, Xenhat Liamano, 小滢 Zi Ying, Zwagoth Klaar and others.
|
||||
Albatroz Hird, Alexie Birman, Andromeda Rage, Angeldark Raymaker, Angus Boyd, Animats, Armin Weatherwax, Casper Warden, Chalice Yao, Chaser Zaks, Chorazin Allen, Cron Stardust, Damian Zhaoying, Dan Threebeards, Dawa Gurbux, Denver Maksim, Dragonborn Forzane, Drake Arconis, Felyza Wishbringer, f0rbidden, Fractured Crystal, Geenz Spad, Gibson Firehawk, Hitomi Tiponi, humbletim, Inusaito Sayori, Jean Severine, Katharine Berry, Kittin Ninetails, Kool Koolhoven, Lance Corrimal, Lassie, Latif Khalifa, Laurent Bechir, Magne Metaverse LLC, Magus Freston, Makidoll, Manami Hokkigai, MartinRJ Fayray, McCabe Maxstead, Melancholy Lemon, Melysmile, Mimika Oh, minerjr, Mister Acacia, MorganMegan, Morgan Pennent, Mysty Saunders, Nagi Michinaga, Name Short, nhede Core, NiranV Dean, Nogardrevlis Lectar, Oren Hurvitz, paperwork, Penny Patton, Peyton Menges, programmtest, Qwerty Venom, Rebecca Ashbourne, Revolution Smythe, Romka Swallowtail, Sahkolihaa Contepomi, sal Kaligawa, Samm Florian, Satomi Ahn, Sei Lisa, Sempervirens Oddfellow, Shin Wasp, Shyotl Kuhr, Sione Lomu, Skills Hak, StarlightShining, Sunset Faulkes, Tapple Gao, Testicular Slingshot, Thickbrick Sleaford, Ubit Umarov, Vaalith Jinn, Vincent Sylvester, Whirly Fizzle, Xenhat Liamano, 小滢 Zi Ying, Zwagoth Klaar and others.
|
||||
</text>
|
||||
<text
|
||||
follows="top|left"
|
||||
|
|
|
|||
|
|
@ -17,30 +17,35 @@ width="403">
|
|||
<!-- You may also add any number of NEGATE_YAW NEGATE_PITCH NEGATE_ROLL and/or NEGATE_ALL to 'flip' the behaviour of the axes (so the trackpad up is down left is right etc.)-->
|
||||
<!-- These values are all CaSe SeNsiTiVe!! (use all caps plz or you get default behaviour) Whitespace is ignored, that's just for you non-robots-->
|
||||
<string name="joint_transform_mPelvis" translate="false">SWAP_YAW_AND_ROLL NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mTorso" translate="false">SWAP_YAW_AND_ROLL NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mChest" translate="false">SWAP_YAW_AND_ROLL NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mNeck" translate="false">SWAP_YAW_AND_ROLL NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mHead" translate="false">SWAP_YAW_AND_ROLL NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mTorso" translate="false">SWAP_YAW_AND_ROLL NEGATE_PITCH NEGATE_ROLL</string>
|
||||
<string name="joint_transform_mChest" translate="false">SWAP_YAW_AND_ROLL NEGATE_PITCH NEGATE_ROLL</string>
|
||||
<string name="joint_transform_mNeck" translate="false">SWAP_YAW_AND_ROLL NEGATE_PITCH NEGATE_ROLL</string>
|
||||
<string name="joint_transform_mHead" translate="false">SWAP_YAW_AND_ROLL NEGATE_PITCH NEGATE_ROLL</string>
|
||||
<string name="joint_transform_mCollarLeft" translate="false">NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mShoulderLeft" translate="false">SWAP_ROLL_AND_PITCH NEGATE_ROLL</string>
|
||||
<string name="joint_transform_mShoulderRight" translate="false">SWAP_ROLL_AND_PITCH NEGATE_ROLL</string>
|
||||
<string name="joint_transform_mElbowLeft" translate="false">SWAP_X2Y_Y2Z_Z2X NEGATE_PITCH NEGATE_YAW</string>
|
||||
<string name="joint_transform_mWristLeft" translate="false">SWAP_X2Z_Y2X_Z2Y</string>
|
||||
<string name="joint_transform_mWristRight" translate="false">SWAP_X2Z_Y2X_Z2Y NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mElbowRight" translate="false">SWAP_X2Y_Y2Z_Z2X</string>
|
||||
<string name="joint_transform_mCollarRight" translate="false">NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mShoulderLeft" translate="false">SWAP_ROLL_AND_PITCH NEGATE_ROLL NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mShoulderRight" translate="false">SWAP_ROLL_AND_PITCH</string>
|
||||
<string name="joint_transform_mElbowLeft" translate="false">SWAP_ROLL_AND_PITCH NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mElbowRight" translate="false">SWAP_ROLL_AND_PITCH</string>
|
||||
<string name="joint_transform_mWristLeft" translate="false">SWAP_ROLL_AND_PITCH NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mWristRight" translate="false">SWAP_ROLL_AND_PITCH NEGATE_ROLL</string>
|
||||
<string name="joint_transform_mFaceJaw" translate="false">NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mEyeRight" translate="false">SWAP_YAW_AND_ROLL NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mEyeLeft" translate="false">SWAP_YAW_AND_ROLL NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mHipLeft" translate="false">NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mKneeLeft" translate="false">NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mKneeLeft" translate="false">NEGATE_PITCH NEGATE_ROLL</string>
|
||||
<string name="joint_transform_mAnkleLeft" translate="false">NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mHipRight" translate="false">NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mKneeRight" translate="false">NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mKneeRight" translate="false">NEGATE_PITCH NEGATE_ROLL</string>
|
||||
<string name="joint_transform_mAnkleRight" translate="false">NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mFaceLipCornerRight" translate="false">SWAP_YAW_AND_ROLL NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mFaceLipCornerLeft" translate="false">SWAP_YAW_AND_ROLL NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mFaceLipUpperLeft" translate="false">SWAP_YAW_AND_ROLL NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mFaceLipUpperCenter" translate="false">SWAP_YAW_AND_ROLL NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mFaceLipUpperRight" translate="false">SWAP_YAW_AND_ROLL NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mFaceLipLowerLeft" translate="false">SWAP_YAW_AND_ROLL NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mFaceLipLowerCenter" translate="false">SWAP_YAW_AND_ROLL NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mFaceLipLowerRight" translate="false">SWAP_YAW_AND_ROLL NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mFaceEyeLidUpperLeft" translate="false">NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mFaceEyeLidUpperRight" translate="false">NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mFaceEyeLidLowerLeft" translate="false">NEGATE_PITCH</string>
|
||||
|
|
@ -57,35 +62,35 @@ width="403">
|
|||
<string name="joint_transform_mFaceCheekLowerRight" translate="false">SWAP_YAW_AND_ROLL NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mFaceLipUpperLeft" translate="false">SWAP_YAW_AND_ROLL NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mFaceLipUpperRight" translate="false">SWAP_YAW_AND_ROLL NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mHandThumb1Left" translate="false">SWAP_ROLL_AND_PITCH NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mHandThumb1Left" translate="false">SWAP_ROLL_AND_PITCH</string>
|
||||
<string name="joint_transform_mHandThumb1Right" translate="false">SWAP_ROLL_AND_PITCH NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mHandThumb2Left" translate="false">SWAP_ROLL_AND_PITCH NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mHandThumb2Left" translate="false">SWAP_ROLL_AND_PITCH</string>
|
||||
<string name="joint_transform_mHandThumb2Right" translate="false">SWAP_ROLL_AND_PITCH NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mHandThumb3Left" translate="false">SWAP_ROLL_AND_PITCH NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mHandThumb3Left" translate="false">SWAP_ROLL_AND_PITCH</string>
|
||||
<string name="joint_transform_mHandThumb3Right" translate="false">SWAP_ROLL_AND_PITCH NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mHandIndex1Left" translate="false">SWAP_X2Z_Y2X_Z2Y NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mHandIndex1Left" translate="false">SWAP_X2Z_Y2X_Z2Y</string>
|
||||
<string name="joint_transform_mHandIndex1Right" translate="false">SWAP_X2Z_Y2X_Z2Y NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mHandIndex2Left" translate="false">SWAP_X2Z_Y2X_Z2Y NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mHandIndex2Left" translate="false">SWAP_X2Z_Y2X_Z2Y</string>
|
||||
<string name="joint_transform_mHandIndex2Right" translate="false">SWAP_X2Z_Y2X_Z2Y NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mHandIndex3Left" translate="false">SWAP_X2Z_Y2X_Z2Y NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mHandIndex3Left" translate="false">SWAP_X2Z_Y2X_Z2Y</string>
|
||||
<string name="joint_transform_mHandIndex3Right" translate="false">SWAP_X2Z_Y2X_Z2Y NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mHandMiddle1Left" translate="false">SWAP_X2Z_Y2X_Z2Y NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mHandMiddle1Left" translate="false">SWAP_X2Z_Y2X_Z2Y</string>
|
||||
<string name="joint_transform_mHandMiddle1Right" translate="false">SWAP_X2Z_Y2X_Z2Y NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mHandMiddle2Left" translate="false">SWAP_X2Z_Y2X_Z2Y NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mHandMiddle2Left" translate="false">SWAP_X2Z_Y2X_Z2Y</string>
|
||||
<string name="joint_transform_mHandMiddle2Right" translate="false">SWAP_X2Z_Y2X_Z2Y NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mHandMiddle3Left" translate="false">SWAP_X2Z_Y2X_Z2Y NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mHandMiddle3Left" translate="false">SWAP_X2Z_Y2X_Z2Y</string>
|
||||
<string name="joint_transform_mHandMiddle3Right" translate="false">SWAP_X2Z_Y2X_Z2Y NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mHandRing1Left" translate="false">SWAP_X2Z_Y2X_Z2Y NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mHandRing1Left" translate="false">SWAP_X2Z_Y2X_Z2Y</string>
|
||||
<string name="joint_transform_mHandRing1Right" translate="false">SWAP_X2Z_Y2X_Z2Y NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mHandRing2Left" translate="false">SWAP_X2Z_Y2X_Z2Y NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mHandRing2Left" translate="false">SWAP_X2Z_Y2X_Z2Y</string>
|
||||
<string name="joint_transform_mHandRing2Right" translate="false">SWAP_X2Z_Y2X_Z2Y NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mHandRing3Left" translate="false">SWAP_X2Z_Y2X_Z2Y NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mHandRing3Left" translate="false">SWAP_X2Z_Y2X_Z2Y</string>
|
||||
<string name="joint_transform_mHandRing3Right" translate="false">SWAP_X2Z_Y2X_Z2Y NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mHandPinky1Left" translate="false">SWAP_X2Z_Y2X_Z2Y NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mHandPinky1Left" translate="false">SWAP_X2Z_Y2X_Z2Y</string>
|
||||
<string name="joint_transform_mHandPinky1Right" translate="false">SWAP_X2Z_Y2X_Z2Y NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mHandPinky2Left" translate="false">SWAP_X2Z_Y2X_Z2Y NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mHandPinky2Left" translate="false">SWAP_X2Z_Y2X_Z2Y</string>
|
||||
<string name="joint_transform_mHandPinky2Right" translate="false">SWAP_X2Z_Y2X_Z2Y NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mHandPinky3Left" translate="false">SWAP_X2Z_Y2X_Z2Y NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mHandPinky3Left" translate="false">SWAP_X2Z_Y2X_Z2Y</string>
|
||||
<string name="joint_transform_mHandPinky3Right" translate="false">SWAP_X2Z_Y2X_Z2Y NEGATE_PITCH</string>
|
||||
<string name="joint_transform_LEFT_PEC" translate="false">SWAP_YAW_AND_ROLL NEGATE_PITCH</string>
|
||||
<string name="joint_transform_RIGHT_PEC" translate="false">SWAP_YAW_AND_ROLL NEGATE_PITCH</string>
|
||||
|
|
@ -105,6 +110,19 @@ width="403">
|
|||
<string name="joint_transform_mFaceNoseLeft" translate="false">SWAP_YAW_AND_ROLL NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mFaceNoseCenter" translate="false">SWAP_YAW_AND_ROLL NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mFaceNoseRight" translate="false">SWAP_YAW_AND_ROLL NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mFaceForeheadLeft" translate="false">SWAP_YAW_AND_ROLL NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mFaceForeheadCenter" translate="false">SWAP_YAW_AND_ROLL NEGATE_PITCH</string>
|
||||
<string name="joint_transform_mFaceForeheadRight" translate="false">SWAP_YAW_AND_ROLL NEGATE_PITCH</string>
|
||||
|
||||
<!-- For the joints/bones/thingos that are apt to Gimbal Lock, we may instead apply rotations as deltas by default, which never lock -->
|
||||
<string name="joint_delta_rotate_mHipLeft">true</string>
|
||||
<string name="joint_delta_rotate_mHipRight">true</string>
|
||||
<string name="joint_delta_rotate_mKneeLeft">true</string>
|
||||
<string name="joint_delta_rotate_mKneeRight">true</string>
|
||||
<string name="joint_delta_rotate_mElbowLeft">true</string>
|
||||
<string name="joint_delta_rotate_mElbowRight">true</string>
|
||||
<string name="joint_delta_rotate_mWristLeft">true</string>
|
||||
<string name="joint_delta_rotate_mWristRight">true</string>
|
||||
|
||||
<!-- A matching bone name with the 'header_' prefix produces a sub-heading with the supplied name -->
|
||||
<string name="header_mHead">Body</string>
|
||||
|
|
@ -146,7 +164,7 @@ width="403">
|
|||
<string name="title_mFaceEar1Right">Ear Upper Right</string>
|
||||
<string name="title_mFaceEar2Right">Ear Lower Right</string>
|
||||
<string name="title_mFaceNoseLeft">Nose Left</string>
|
||||
<string name="title_mFaceNoseCenter">Nose Center</string>
|
||||
<string name="title_mFaceNoseCenter">Nose Middle</string>
|
||||
<string name="title_mFaceNoseRight">Nose Right</string>
|
||||
<string name="title_mFaceCheekLowerLeft">Cheek Lower Left</string>
|
||||
<string name="title_mFaceCheekUpperLeft">Cheek Upper Left</string>
|
||||
|
|
@ -167,7 +185,7 @@ width="403">
|
|||
<string name="title_mFaceLipUpperRight">Lip Upper Right</string>
|
||||
<string name="title_mFaceLipCornerLeft">Lip Corner Left</string>
|
||||
<string name="title_mFaceLipCornerRight">Lip Corner Right</string>
|
||||
<string name="title_mFaceLipUpperCenter">Lip Upper Center</string>
|
||||
<string name="title_mFaceLipUpperCenter">Lip Upper Middle</string>
|
||||
<string name="title_mFaceEyecornerInnerLeft">Eye corner Inner Left</string>
|
||||
<string name="title_mFaceEyecornerInnerRight">Eye corner Inner Right</string>
|
||||
<string name="title_mFaceNoseBridge">Nose Bridge</string>
|
||||
|
|
@ -255,6 +273,10 @@ width="403">
|
|||
<string name="title_mFaceEar2Left">Left Tip</string>
|
||||
<string name="title_mFaceEar2Right">Right Tip</string>
|
||||
|
||||
<!-- Just to demonstrate there is provision for axis-swapping/Negation per joint for BVH saving. -->
|
||||
<!-- A default of SWAP_X2Y_Y2Z_Z2X is used, which is overridden if anything (even blank) is provided here. -->
|
||||
<string name="bvh_joint_transform_mHead" translate="false">SWAP_X2Y_Y2Z_Z2X</string>
|
||||
|
||||
<!-- The layout is a vertical stack of 3 rows, and each row a horizontal stack of panels -->
|
||||
<layout_stack
|
||||
follows="top|left|right"
|
||||
|
|
@ -568,7 +590,7 @@ width="403">
|
|||
top_delta="238"
|
||||
left_pad="1"
|
||||
left="2"
|
||||
width="88" >
|
||||
width="85" >
|
||||
<button.commit_callback
|
||||
function="Poser.LoadLeftHand"/>
|
||||
</button>
|
||||
|
|
@ -579,9 +601,9 @@ width="403">
|
|||
label="Set Right"
|
||||
name="button_loadHandPoseRight"
|
||||
tool_tip="Double click to set your right hand to the selected preset"
|
||||
left_pad="1"
|
||||
left_pad="2"
|
||||
top_delta="0"
|
||||
width="88" >
|
||||
width="85" >
|
||||
<button.commit_callback
|
||||
function="Poser.LoadRightHand"/>
|
||||
</button>
|
||||
|
|
@ -673,7 +695,7 @@ width="403">
|
|||
width="317" />
|
||||
<scroll_list
|
||||
column_padding="0"
|
||||
height="160"
|
||||
height="250"
|
||||
can_sort="false"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
|
|
@ -710,7 +732,7 @@ width="403">
|
|||
name="refresh_avatars"
|
||||
tool_tip="Refresh the list of avatars and animeshes"
|
||||
width="20"
|
||||
top="142"
|
||||
top="232"
|
||||
left="3">
|
||||
<button.commit_callback
|
||||
function="Poser.RefreshAvatars"/>
|
||||
|
|
@ -810,6 +832,17 @@ width="403">
|
|||
tool_tip="When you first edit a rotation, reset it to zero. This means your work can save a pose (and not a diff see load/save). A green tick appears next each joint you have zero-ed export."
|
||||
top_pad="5"
|
||||
width="134" />
|
||||
<check_box
|
||||
control_name="FSPoserSaveExternalFileAlso"
|
||||
name="also_save_bvh_checkbox"
|
||||
height="16"
|
||||
enabled="false"
|
||||
label="Write BVH when saving**"
|
||||
follows="left|top"
|
||||
left="5"
|
||||
tool_tip="When you save your pose, also write a BVH file, which can be uploaded via the 'Build > Upload > Animation' to pose yourself or others in-world. This needs joints to reset their 'base' to zero, because BVH requires original work."
|
||||
top_pad="5"
|
||||
width="134" />
|
||||
</panel>
|
||||
</tab_container>
|
||||
</panel>
|
||||
|
|
@ -906,12 +939,10 @@ width="403">
|
|||
image_overlay="Inv_Mesh"
|
||||
image_unselected="Toolbar_Middle_Off"
|
||||
name="delta_mode_toggle"
|
||||
tool_tip="If changing multiple joints each changes by the same amount, rather than all of them getting the same rotation."
|
||||
tool_tip="If changing multiple joints each changes by the same amount, rather than all of them getting the same rotation. Also used for breaking Gimbal Lock."
|
||||
width="18"
|
||||
top_delta="0"
|
||||
left_pad="1">
|
||||
<button.commit_callback
|
||||
function="Poser.ToggleDeltaModeChanges"/>
|
||||
</button>
|
||||
<button
|
||||
follows="left|top"
|
||||
|
|
@ -1151,7 +1182,7 @@ width="403">
|
|||
name="button_RecaptureParts"
|
||||
left_pad="1"
|
||||
top_delta="0"
|
||||
tool_tip="If the selected body part(s) is/are OFF, this Recaptures what those body parts are doing right now. This button disables if you start from a T-Pose"
|
||||
tool_tip="If the selected body part(s) is/are OFF, this Recaptures what those body parts are doing right now."
|
||||
width="45" >
|
||||
<button.commit_callback
|
||||
function="Poser.RecaptureSelectedBones"/>
|
||||
|
|
|
|||
|
|
@ -1,14 +1,17 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<!-- <FS:Zi> Changed height from 512 to 528 in this block -->
|
||||
<!-- <FS:minerjr> [FIRE-35042] Inventory - Only Coalesced Filter - More accessible -->
|
||||
<!-- Changed height from 528 to 598 to make room for new Only Coalesced and Show Links filter -->
|
||||
<floater
|
||||
legacy_header_height="18"
|
||||
can_minimize="false"
|
||||
height="548"
|
||||
height="598"
|
||||
layout="topleft"
|
||||
name="Inventory Finder"
|
||||
help_topic="inventory_finder"
|
||||
title="Inventory Recent Items"
|
||||
width="160">
|
||||
<!-- </FS:minerjr> [FIRE-35042] -->
|
||||
<icon
|
||||
height="16"
|
||||
image_name="Inv_Animation"
|
||||
|
|
@ -280,6 +283,49 @@
|
|||
top_pad="0"
|
||||
width="144" />
|
||||
<!-- </FS:Zi> -->
|
||||
<!-- <FS:minerjr> [FIRE-35042] Inventory - Only Coalesced Filter - More accessible -->
|
||||
<!-- Added new check box to allow finder panel the ability to set and view the Only Coalesced flag -->
|
||||
<!-- Switched icon and checkbox left/right order to better fit aesthetics of the rest of the panel -->
|
||||
<check_box
|
||||
height="16"
|
||||
label="Only Coalesced"
|
||||
layout="topleft"
|
||||
left="8"
|
||||
name="check_only_coalesced"
|
||||
top_pad="6"
|
||||
width="106" />
|
||||
<icon
|
||||
height="16"
|
||||
follows="left|top"
|
||||
image_name="Inv_Object_Multi"
|
||||
layout="topleft"
|
||||
left_pad="3"
|
||||
mouse_opaque="true"
|
||||
name="icon_coalesced"
|
||||
top_delta="0"
|
||||
width="16" />
|
||||
<!-- Added combo box for the link filters -->
|
||||
<!-- The order matches the order in the Gear->menu, but the values are the actual filter value, used to simplify the actual code -->
|
||||
<combo_box
|
||||
follows="left|top"
|
||||
height="23"
|
||||
layout="topleft"
|
||||
left="8"
|
||||
top_pad="6"
|
||||
tool_tip="Filters linked objects"
|
||||
name="inventory_filter_show_links_combo"
|
||||
width="145">
|
||||
<combo_box.item name="show_links"
|
||||
label="Show Links"
|
||||
value="0"/>
|
||||
<combo_box.item name="show_links_only"
|
||||
label="Show Links Only"
|
||||
value="2"/>
|
||||
<combo_box.item name="hide_links"
|
||||
label="Hide Links"
|
||||
value="1"/>
|
||||
</combo_box>
|
||||
<!-- </FS:minerjr> [FIRE-35042] -->
|
||||
<check_box
|
||||
height="16"
|
||||
label="Created by me"
|
||||
|
|
|
|||
|
|
@ -3,48 +3,32 @@
|
|||
layout="topleft"
|
||||
name="Settings">
|
||||
<menu_item_call
|
||||
label="Load Rotations only"
|
||||
label="Load Selective"
|
||||
tool_tip="Loads only the joints that are off, and turns them on"
|
||||
layout="topleft"
|
||||
name="rotations_positions">
|
||||
<on_click function="Pose.Menu" parameter="selective"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Load Selective - Rotations Only"
|
||||
tool_tip="Loads only rotations, only to the joints that are off, and turns them on"
|
||||
layout="topleft"
|
||||
name="rotations_positions">
|
||||
<on_click function="Pose.Menu" parameter="selective_rot"/>
|
||||
</menu_item_call>
|
||||
<menu_item_separator
|
||||
layout="topleft" />
|
||||
<menu_item_call
|
||||
label="Load - Rotations Only"
|
||||
layout="topleft"
|
||||
tool_tip="Loads just the rotations. Good for poses made for other avatars/shapes"
|
||||
name="rotations">
|
||||
<on_click function="Pose.Menu" parameter="rotation"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Load Positions only"
|
||||
layout="topleft"
|
||||
name="positions">
|
||||
<on_click function="Pose.Menu" parameter="position"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Load Scales only"
|
||||
layout="topleft"
|
||||
name="scale">
|
||||
<on_click function="Pose.Menu" parameter="scale"/>
|
||||
</menu_item_call>
|
||||
<menu_item_separator
|
||||
layout="topleft" />
|
||||
<menu_item_call
|
||||
label="Load Rotations & Positions"
|
||||
layout="topleft"
|
||||
name="rotations_positions">
|
||||
<on_click function="Pose.Menu" parameter="rot_pos"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Load Rotations & Scales"
|
||||
layout="topleft"
|
||||
name="rotations_scales">
|
||||
<on_click function="Pose.Menu" parameter="rot_scale"/>
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Load Position & Scales"
|
||||
layout="topleft"
|
||||
name="positions_scales">
|
||||
<on_click function="Pose.Menu" parameter="pos_scale"/>
|
||||
</menu_item_call>
|
||||
<menu_item_separator
|
||||
layout="topleft" />
|
||||
<menu_item_call
|
||||
label="Load all"
|
||||
label="Load"
|
||||
layout="topleft"
|
||||
tool_tip="Loads rotations, positions and scales"
|
||||
name="load_all">
|
||||
<on_click function="Pose.Menu" parameter="all"/>
|
||||
</menu_item_call>
|
||||
|
|
|
|||
|
|
@ -409,7 +409,7 @@
|
|||
<on_check
|
||||
function="Inventory.CoalescedObjects.Check"
|
||||
parameter="coalesced_objects_only" />
|
||||
</menu_item_check>
|
||||
</menu_item_check>
|
||||
<menu_item_separator>
|
||||
<menu_item_separator.on_visible
|
||||
function="Inventory.GearDefault.Visible"
|
||||
|
|
|
|||
|
|
@ -928,7 +928,7 @@
|
|||
</menu_item_call>
|
||||
<!-- <FS:minerjr> [FIRE-35039] Add flag to show/hide the on-screen console -->
|
||||
<menu_item_check
|
||||
label="Show On-screen Console"
|
||||
label="Show On-screen Chat Console"
|
||||
name="Show On-screen Console"
|
||||
shortcut="shift|`">
|
||||
<menu_item_check.on_check
|
||||
|
|
|
|||
|
|
@ -183,6 +183,8 @@
|
|||
<combo_box.item value="filter_type_materials" label="Materials" />
|
||||
<combo_box.item value="filter_type_settings" label="Settings" />
|
||||
<combo_box.item value="filter_separator" label="------------" enabled="false" />
|
||||
<combo_box.item value="filter_type_coalesced" label="Only Coalesced"/>
|
||||
<combo_box.item value="filter_separator" label="------------" enabled="false" />
|
||||
<combo_box.item value="filter_type_custom" label="Custom..." />
|
||||
</combo_box>
|
||||
|
||||
|
|
@ -411,6 +413,34 @@
|
|||
parameter="secondary_inventory" />
|
||||
</button>
|
||||
</panel>
|
||||
<panel
|
||||
follows="top|left"
|
||||
height="25"
|
||||
layout="topleft"
|
||||
left_pad="0"
|
||||
name="show_filters_panel"
|
||||
width="32">
|
||||
<button
|
||||
follows="top|left"
|
||||
height="25"
|
||||
image_hover_unselected="Toolbar_Middle_Over"
|
||||
image_overlay="show_filters_18"
|
||||
image_selected="Toolbar_Middle_Selected"
|
||||
image_unselected="Toolbar_Middle_Off"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="show_filters_inv_btn"
|
||||
tool_tip="Show Filters - Shows the filter side menu when selected. Becomes highlighted when any filter is enabled."
|
||||
top="0"
|
||||
width="31">
|
||||
<button.commit_callback
|
||||
function="Inventory.GearDefault.Custom.Action"
|
||||
parameter="show_filters" />
|
||||
<button.is_toggled_callback
|
||||
function="Inventory.ShowFilters.Check"
|
||||
parameter="show_filters_modified" />
|
||||
</button>
|
||||
</panel>
|
||||
<panel
|
||||
follows="top|left"
|
||||
height="25"
|
||||
|
|
|
|||
|
|
@ -201,6 +201,21 @@
|
|||
width="80">
|
||||
seconds
|
||||
</text>
|
||||
<!--<FS:minerjr> [FIRE-35019] Add LLHUDNameTag background to floating text and hover highlights -->
|
||||
<!--Added new heading label for the Floating Text Options as there are now 4 -->
|
||||
<text
|
||||
type="string"
|
||||
left="10"
|
||||
top="130"
|
||||
top_pad="15"
|
||||
width="180"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
name="FSHudTextLabel">
|
||||
Floating Text Options:
|
||||
</text>
|
||||
<!-- <FS:minerjr> Removed top="130" below as it was causing an issue with the new header text -->
|
||||
<slider
|
||||
control_name="FSHudTextFadeDistance"
|
||||
decimal_digits="2"
|
||||
|
|
@ -215,7 +230,7 @@
|
|||
min_val="0"
|
||||
max_val="64"
|
||||
name="FSHudTextFadeDistance"
|
||||
top="130"
|
||||
|
||||
width="481" />
|
||||
<slider
|
||||
control_name="FSHudTextFadeRange"
|
||||
|
|
@ -233,6 +248,53 @@
|
|||
name="FSHudTextFadeRange"
|
||||
top_pad="2"
|
||||
width="474" />
|
||||
<!-- Added new check box to disable the highlight floating text feature -->
|
||||
<check_box
|
||||
control_name="FSHudTextUseHoverHighlight"
|
||||
name="FSHudTextUseHoverHighlight"
|
||||
label="Hover over object to highlight floating text:"
|
||||
tool_tip="When an object is being hovered over, highlight the floating text (hovertext) by moving the text to the foreground and disable its alpha"
|
||||
layout="topleft"
|
||||
top_pad="5"
|
||||
left_delta="0"
|
||||
height="16"
|
||||
width="350" />
|
||||
<text
|
||||
type="string"
|
||||
left="10"
|
||||
top_pad="5"
|
||||
width="180"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
name="FSHudTextShowBackgroundLabel">
|
||||
Show floating text background:
|
||||
</text>
|
||||
<!-- Added combo box to control the background behavior for prims -->
|
||||
<combo_box
|
||||
control_name="FSHudTextShowBackground"
|
||||
enabled_control="FSHudTextUseHoverHighlight"
|
||||
height="23"
|
||||
layout="topleft"
|
||||
left_pad="10"
|
||||
top_delta="-5"
|
||||
name="FSHudTextShowBackgroundDropdown"
|
||||
tool_tip="Displays a black/white background behind the floating text (hovertext) to make it more readable. The opacity can be changed under Colors > Miscellaneous"
|
||||
width="180">
|
||||
<combo_box.item
|
||||
label="Off"
|
||||
name="ScriptDialogOption_0"
|
||||
value="0"/>
|
||||
<combo_box.item
|
||||
label="Only Highlighted Object"
|
||||
name="ScriptDialogOption_1"
|
||||
value="1"/>
|
||||
<combo_box.item
|
||||
label="All Objects"
|
||||
name="ScriptDialogOption_2"
|
||||
value="2"/>
|
||||
</combo_box>
|
||||
<!-- </FS:minerjr> [FIRE-35019] -->
|
||||
</panel>
|
||||
|
||||
<!--2D Overlay-->
|
||||
|
|
|
|||
|
|
@ -88,19 +88,6 @@
|
|||
width="60" />
|
||||
</radio_group>
|
||||
|
||||
<!-- <FS:minerjr> [FIRE-35039] Add flag to show/hide the on-screen console -->
|
||||
<check_box
|
||||
control_name="FSShowOnscreenConsole"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
label="Show on-screen console"
|
||||
tool_tip="Show/Hide the chat console text, when the Conversations window is not displayed"
|
||||
layout="topleft"
|
||||
left="20"
|
||||
top_pad="5"
|
||||
name="FSShowOnscreenConsole"
|
||||
width="400" />
|
||||
<!-- Changed the PlayChatAnim check_box's top_pad = 5 -> 1 to fix up the alignment with the new option -->
|
||||
<check_box
|
||||
control_name="PlayChatAnim"
|
||||
follows="left|top"
|
||||
|
|
@ -108,10 +95,9 @@
|
|||
label="Play avatar animations (such as shouting)"
|
||||
layout="topleft"
|
||||
left="20"
|
||||
top_pad="1"
|
||||
top_pad="5"
|
||||
name="play_avatar_animations"
|
||||
width="400" />
|
||||
<!-- </FS:minerjr> [FIRE-35039] -->
|
||||
<check_box
|
||||
control_name="FSIMSystemMessageBrackets"
|
||||
enabled_control="PlainTextChatHistory"
|
||||
|
|
@ -247,10 +233,21 @@
|
|||
left_pad="4"
|
||||
width="100" />
|
||||
|
||||
<check_box
|
||||
control_name="FSShowOnscreenConsole"
|
||||
follows="left|top"
|
||||
height="18"
|
||||
top_pad="15"
|
||||
label="Show on-screen chat console"
|
||||
tool_tip="Show/Hide the chat console text, when the Conversations window is not displayed"
|
||||
layout="topleft"
|
||||
left="20"
|
||||
name="FSShowOnscreenConsole"
|
||||
width="400" />
|
||||
<check_box
|
||||
layout="topleft"
|
||||
follows="left|top"
|
||||
top_pad="15"
|
||||
top_pad="-2"
|
||||
left="20"
|
||||
width="200"
|
||||
height="18"
|
||||
|
|
|
|||
|
|
@ -1615,7 +1615,7 @@
|
|||
layout="topleft"
|
||||
left="30"
|
||||
name="effects_color_textbox"
|
||||
top_pad="15"
|
||||
top_pad="5"
|
||||
width="200">
|
||||
Selection Effects (Particle Beam):
|
||||
</text>
|
||||
|
|
@ -1694,7 +1694,7 @@
|
|||
left="30"
|
||||
height="12"
|
||||
name="floater_opacity"
|
||||
top_pad="15"
|
||||
top_pad="10"
|
||||
width="220">
|
||||
Floating Window Opacity:
|
||||
</text>
|
||||
|
|
@ -1758,7 +1758,7 @@
|
|||
left="30"
|
||||
height="12"
|
||||
name="console_opacity"
|
||||
top_pad="15"
|
||||
top_pad="10"
|
||||
width="220">
|
||||
Console Opacity:
|
||||
</text>
|
||||
|
|
@ -1798,13 +1798,31 @@
|
|||
left_pad="10"
|
||||
width="378" />
|
||||
|
||||
<slider
|
||||
control_name="FSHudTextBackgroundOpacity"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
increment="0.05"
|
||||
initial_value="0.75"
|
||||
label="Floating text background opacity:"
|
||||
layout="topleft"
|
||||
left_pad="10"
|
||||
left="30"
|
||||
max_val="1.00"
|
||||
min_val="0.00"
|
||||
label_width="182"
|
||||
name="FSHudTextBackgroundOpacity"
|
||||
tool_tip="Choose floating text background opacity"
|
||||
top_pad="10"
|
||||
width="443" />
|
||||
|
||||
<text
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
left="30"
|
||||
height="12"
|
||||
name="preferences_search_label"
|
||||
top_pad="15"
|
||||
top_pad="10"
|
||||
width="220">
|
||||
Preferences Search Highlight Color:
|
||||
</text>
|
||||
|
|
@ -1862,7 +1880,7 @@
|
|||
left="30"
|
||||
height="12"
|
||||
name="notecard_editor_color_label"
|
||||
top_pad="15"
|
||||
top_pad="10"
|
||||
width="400">
|
||||
Notecard Colors:
|
||||
</text>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="Preferences" title="PRÉFÉRENCES">
|
||||
<floater name="Preferences" title="Préférences">
|
||||
<button label="OK" label_selected="OK" name="OK"/>
|
||||
<button label="Annuler" label_selected="Annuler" name="Cancel"/>
|
||||
<panel name="search_panel">
|
||||
|
|
@ -7,7 +7,7 @@
|
|||
</panel>
|
||||
<tab_container name="pref core">
|
||||
<panel label="Général" name="general"/>
|
||||
<panel label="Chat" name="chat"/>
|
||||
<panel label="Conversations" name="chat"/>
|
||||
<panel label="Couleurs" name="colors"/>
|
||||
<panel label="Graphiques" name="display"/>
|
||||
<panel label="Son et Média" name="audio"/>
|
||||
|
|
|
|||
|
|
@ -103,6 +103,7 @@
|
|||
<menu_item_check label="Journal des conversations..." name="Conversation Log..."/>
|
||||
<menu_item_check label="Chat vocal à proximité" name="Nearby Voice"/>
|
||||
<menu_item_call label="Liste des ignorés" name="Block List"/>
|
||||
<menu_item_check label="Afficher la console de conversation" name="Show On-screen Console"/>
|
||||
</menu>
|
||||
<menu label="Monde" name="World">
|
||||
<menu_item_call label="Resynchroniser les animations" name="Resync Animations"/>
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@
|
|||
<check_box label="Chat local" name="show_timestamps_nearby_chat" width="80"/>
|
||||
<check_box label="IMs" name="show_timestamps_im" width="50"/>
|
||||
<check_box label="Transcriptions" name="show_timestamps_transcripts"/>
|
||||
<check_box label="Afficher la console de conversation" tool_tip="Afficher/masquer le texte de la console de conversation, lorsque la fenêtre Conversations n'est pas affichée" name="FSShowOnscreenConsole"/>
|
||||
<check_box name="FSConsoleClassicDrawMode" label="Utiliser le mode classique pour la console" tool_tip="L'affichage classique de la console affiche son arrière-plan d'un bloc pour toutes les lignes, avec comme longueur celle de la plus longue ligne."/>
|
||||
<check_box name="ChatFullWidth" label="Utiliser la largeur totale de l'écran pour la console"/>
|
||||
<spinner label="Faire disparaitre les messages après :" name="fade_chat_time" label_width="200" width="260"/>
|
||||
|
|
|
|||
|
|
@ -96,6 +96,7 @@
|
|||
<menu_item_check name="Conversation Log..." label="Dziennik rozmów..."/>
|
||||
<menu_item_check label="Głos w pobliżu" name="Nearby Voice"/>
|
||||
<menu_item_call label="Lista zablokowanych" name="Block List"/>
|
||||
<menu_item_check label="Pokaż konsolę czatu" name="Show On-screen Console" />
|
||||
</menu>
|
||||
<menu label="Świat" name="World">
|
||||
<menu_item_call label="Synchronizuj animacje" name="Resync Animations"/>
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@
|
|||
<check_box label="Czat w pobliżu" name="show_timestamps_nearby_chat" width="100"/>
|
||||
<check_box label="Wiadomości IM" name="show_timestamps_im" width="105"/>
|
||||
<check_box label="Logi czatów i IM" name="show_timestamps_transcripts"/>
|
||||
<check_box label="Pokaż konsolę czatu" tool_tip="Pokaż/ukryj tekst konsoli czatu, gdy okno Rozmów nie jest wyświetlane" name="FSShowOnscreenConsole" />
|
||||
<check_box name="FSConsoleClassicDrawMode" label="Używaj klasycznej konsoli" tool_tip="Ta opcja renderuje tło konsoli jako jeden duży blok pod wszystkimi liniami tekstu, o szerokości takiej jak najdłuższa z nich."/>
|
||||
<check_box name="ChatFullWidth" label="Używaj pełnej szerokości ekranu"/>
|
||||
<spinner label="Zanikanie po:" name="fade_chat_time"/>
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
<text name="composite_label">
|
||||
混合紋理
|
||||
</text>
|
||||
<button label="轉儲 ID 到控制檯" label_selected="轉儲" name="Dump" />
|
||||
<button label="轉儲 ID 到控制台" label_selected="轉儲" name="Dump" />
|
||||
<panel name="scroll_content_panel">
|
||||
<texture_picker label="頭髮" name="hair-baked" />
|
||||
<texture_picker label="頭髮" name="hair_grain" />
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="notification" title="通知控制檯">
|
||||
<floater name="notification" title="通知控制台">
|
||||
<text_editor name="payload">
|
||||
載入中...
|
||||
</text_editor>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="notifications_console" title="通知控制檯">
|
||||
<floater name="notifications_console" title="通知控制台">
|
||||
<combo_box label="選擇通知類型" name="notification_types" />
|
||||
<button label="新增" name="add_notification" />
|
||||
</floater>
|
||||
|
|
@ -1,2 +1,2 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<floater name="rlv_console" title="RLVa控制檯" />
|
||||
<floater name="rlv_console" title="RLVa控制台" />
|
||||
|
|
@ -41,6 +41,6 @@
|
|||
<menu_item_check name="Error" label="錯誤" />
|
||||
<menu_item_check name="None" label="無" />
|
||||
</menu>
|
||||
<menu_item_call label="顯示通知控制檯" name="Show Notifications Console" />
|
||||
<menu_item_call label="顯示通知控制台" name="Show Notifications Console" />
|
||||
</menu>
|
||||
</menu_bar>
|
||||
|
|
@ -99,6 +99,7 @@
|
|||
<menu_item_check label="聊天記錄" name="Conversation Log..." />
|
||||
<menu_item_check label="附近的語音" name="Nearby Voice" />
|
||||
<menu_item_call label="封鎖列表" name="Block List" />
|
||||
<menu_item_check label="顯示螢幕控制台" name="Show On-screen Console" />
|
||||
</menu>
|
||||
<menu label="世界" name="World">
|
||||
<menu_item_call label="重新同步動畫" name="Resync Animations" />
|
||||
|
|
@ -299,7 +300,7 @@
|
|||
<menu_item_check label="允許臨時附件" name="Allow Temporary Attachments" />
|
||||
<menu_item_check label="禁止自動進入#RLV檔案夾" name="Forbid Give to #RLV" />
|
||||
<menu_item_check label="裝扮替換解鎖" name="Wear Replaces Unlocked" />
|
||||
<menu_item_check label="控制檯" name="Console" />
|
||||
<menu_item_check label="控制台" name="Console" />
|
||||
<menu_item_check label="限制" name="Restrictions" />
|
||||
<menu_item_check label="字元" name="Strings" />
|
||||
</menu>
|
||||
|
|
@ -393,18 +394,18 @@
|
|||
<menu_item_check label="顯示開發選項" name="Debug Mode" />
|
||||
</menu>
|
||||
<menu label="開發" name="Develop">
|
||||
<menu label="控制檯" name="Consoles">
|
||||
<menu_item_check label="紋理控制檯" name="Texture Console" />
|
||||
<menu_item_check label="除錯控制檯" name="Debug Console" />
|
||||
<menu_item_call label="通知控制檯" name="Notifications" />
|
||||
<menu label="控制台" name="Consoles">
|
||||
<menu_item_check label="紋理控制台" name="Texture Console" />
|
||||
<menu_item_check label="除錯控制台" name="Debug Console" />
|
||||
<menu_item_call label="通知控制台" name="Notifications" />
|
||||
<menu_item_check label="快速計時器" name="Fast Timers" />
|
||||
<menu_item_check label="記憶體" name="Memory" />
|
||||
<menu_item_check label="場景統計資料" name="Scene Statistics" />
|
||||
<menu_item_check label="場景載入監視器" name="Scene Loading Monitor" />
|
||||
<menu_item_check label="區域除錯控制檯" name="Region Debug Console" />
|
||||
<menu_item_call label="區域資訊傳至除錯控制檯" name="Region Info to Debug Console" />
|
||||
<menu_item_call label="群組資訊傳至除錯控制檯" name="Group Info to Debug Console" />
|
||||
<menu_item_call label="效能資訊傳至除錯控制檯" name="Capabilities Info to Debug Console" />
|
||||
<menu_item_check label="區域除錯控制台" name="Region Debug Console" />
|
||||
<menu_item_call label="區域資訊傳至除錯控制台" name="Region Info to Debug Console" />
|
||||
<menu_item_call label="群組資訊傳至除錯控制台" name="Group Info to Debug Console" />
|
||||
<menu_item_call label="效能資訊傳至除錯控制台" name="Capabilities Info to Debug Console" />
|
||||
<menu_item_check label="相機" name="Camera" />
|
||||
<menu_item_check label="風力" name="Wind" />
|
||||
<menu_item_check label="視角" name="FOV" />
|
||||
|
|
@ -636,7 +637,7 @@
|
|||
<menu_item_call label="測試檔案壓縮" name="Compress File Test" />
|
||||
<menu_item_call label="啟用記憶體洩漏視覺偵測器" name="Enable Visual Leak Detector" />
|
||||
<menu_item_check label="輸出除錯小型轉儲" name="Output Debug Minidump" />
|
||||
<menu_item_check label="下次運行時顯示控制檯視窗" name="Console Window" />
|
||||
<menu_item_check label="下次運行時顯示控制台視窗" name="Console Window" />
|
||||
<menu label="設定記錄細節" name="Set Logging Level">
|
||||
<menu_item_check label="除錯" name="Debug" />
|
||||
<menu_item_check label="資訊" name="Info" />
|
||||
|
|
|
|||
|
|
@ -4054,7 +4054,7 @@ https://wiki.firestormviewer.org/fs_voice
|
|||
<notification label="說話" name="HintSpeak">
|
||||
點擊「說話」按鈕來打開或關閉麥克風。
|
||||
|
||||
點擊向上箭頭鍵,可顯示聲音控制檯。
|
||||
點擊向上箭頭鍵,可顯示聲音控制台。
|
||||
|
||||
隱藏「說話」按鈕將停用語音功能。
|
||||
</notification>
|
||||
|
|
|
|||
|
|
@ -183,7 +183,7 @@
|
|||
<!-- 提示框 -->
|
||||
<panel label="提示框" name="UI-toasts-tab">
|
||||
<text name="ToastSettings">
|
||||
通知設定(彈出視窗,控制檯,提示框):
|
||||
通知設定(彈出視窗,控制台,提示框):
|
||||
</text>
|
||||
<slider label="提示框與UI底部的距離:" tool_tip="提示框底部與UI底部之間的畫素距離" name="ToastSpace" />
|
||||
<text name="ToastSpaceText">
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@
|
|||
<check_box label="當我封鎖或解除封鎖某人時通知我" name="FSReportBlockToNearbyChat" />
|
||||
<text name="friends_logon_label">當我的朋友登入和退出時以這種方式通知我:</text>
|
||||
<check_box label="彈出提示" name="friends_online_notify_checkbox" />
|
||||
<check_box name="OnlineOfflinetoNearbyChat" label="本地聊天和控制檯" />
|
||||
<check_box name="OnlineOfflinetoNearbyChat" label="本地聊天和控制台" />
|
||||
<check_box label="僅本地聊天" name="OnlineOfflinetoNearbyChatHistory" />
|
||||
</panel>
|
||||
<!-- Objects & Scripts -->
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
<panel label="聊天" name="chat">
|
||||
<tab_container label="聊天" name="tabs">
|
||||
<panel label="外觀" name="ChatVisuals">
|
||||
<text name="console_font_size" width="170">聊天控制檯的字型:</text>
|
||||
<text name="console_font_size" width="170">聊天控制台的字型:</text>
|
||||
<radio_group name="chat_console_font_size">
|
||||
<radio_item label="小" name="consradio" />
|
||||
<radio_item label="中等" name="consradio2" />
|
||||
|
|
@ -17,7 +17,7 @@
|
|||
<check_box name="FSMarkObjects" label="將無名稱的說話物件重新命名為「(無名稱)」以避免混淆" />
|
||||
<check_box label="將通過 llOwnerSay 發出的訊息重新導向到指令碼除錯視窗中" name="FSllOwnerSayToScriptDebugWindow_checkbox" />
|
||||
<check_box label="顯示聊天氣泡" name="bubble_text_chat" />
|
||||
<check_box label="不要在本地聊天控制檯和提示框中顯示對話" name="FSBubblesHideConsoleAndToasts" />
|
||||
<check_box label="不要在本地聊天控制台和提示框中顯示對話" name="FSBubblesHideConsoleAndToasts" />
|
||||
<check_box label="在聊天氣泡中顯示文字輸入指示器" name="bubble_text_typing" />
|
||||
<check_box label="在頭頂標籤中顯示文字輸入指示器" name="FSShowTypingStateInNameTag" />
|
||||
<check_box name="FSSecondsinChatTimestamps" label="在時間戳中顯示秒數 [HH:MM:SS]" />
|
||||
|
|
@ -25,8 +25,9 @@
|
|||
<check_box label="本地聊天" name="show_timestamps_nearby_chat" width="80" />
|
||||
<check_box label="私聊" name="show_timestamps_im" width="50" />
|
||||
<check_box label="記錄" name="show_timestamps_transcripts" />
|
||||
<check_box name="FSConsoleClassicDrawMode" label="使用經典模式繪製控制檯" tool_tip="經典控制檯顯示所有行的背景為一個塊,長度為最長行的長度。" />
|
||||
<check_box name="ChatFullWidth" label="使用全螢幕寬度顯示控制檯" />
|
||||
<check_box label="顯示螢幕控制台" tool_tip="在聊天視窗未開啟時,顯示或隱藏聊天控制台文字" name="FSShowOnscreenConsole"/>
|
||||
<check_box name="FSConsoleClassicDrawMode" label="使用經典模式繪製控制台" tool_tip="經典控制台顯示所有行的背景為一個塊,長度為最長行的長度。" />
|
||||
<check_box name="ChatFullWidth" label="使用全螢幕寬度顯示控制台" />
|
||||
<spinner label="訊息消失時間:" name="fade_chat_time" />
|
||||
<text name="text_box4">(秒)</text>
|
||||
<text name="text_box5">(行數)</text>
|
||||
|
|
@ -132,9 +133,9 @@
|
|||
<text name="disable_toast_label">接收新訊息時彈出聊天提示:</text>
|
||||
<check_box name="EnableGroupChatPopups" label="群組聊天" tool_tip="勾選以在收到新的群組訊息時看到通知。" />
|
||||
<check_box name="EnableIMChatPopups" label="私聊" tool_tip="勾選以在收到新的私聊時看到通知。" />
|
||||
<check_box name="FSUseNearbyChatConsole" label="使用控制檯顯示聊天通知而不是浮動視窗" />
|
||||
<check_box name="FSLogImToChatConsole" label="在聊天控制檯中顯示私聊" />
|
||||
<check_box name="FSLogGroupImToChatConsole" label="在聊天控制檯中顯示群組聊天" />
|
||||
<check_box name="FSUseNearbyChatConsole" label="使用控制台顯示聊天通知而不是浮動視窗" />
|
||||
<check_box name="FSLogImToChatConsole" label="在聊天控制台中顯示私聊" />
|
||||
<check_box name="FSLogGroupImToChatConsole" label="在聊天控制台中顯示群組聊天" />
|
||||
<text name="FSShowGroupNameLength_label">在記錄中顯示的群組名稱長度</text>
|
||||
<spinner tool_tip="設定為-1表示完整名稱,設定為0表示禁用" name="FSShowGroupNameLength" />
|
||||
<check_box name="FSOpenIMContainerOnOfflineMessage" label="連線時顯示離線訊息" />
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
<text name="chat_name_label">化身</text>
|
||||
<text name="object_name_header_label">物件</text>
|
||||
<slider label="聊天超出範圍顏色衰減:" name="FSBeyondNearbyChatColorDiminishFactor" tool_tip="如果訊息的發件人不在附近,訊息的顏色衰減。" />
|
||||
<check_box name="FSColorIMsDistinctly" label="在控制檯中分別為私聊和群組聊天著色:" />
|
||||
<check_box name="FSColorIMsDistinctly" label="在控制台中分別為私聊和群組聊天著色:" />
|
||||
<panel name="im_color_panel">
|
||||
<text name="console_im_label">私聊/群組聊天</text>
|
||||
</panel>
|
||||
|
|
@ -96,9 +96,9 @@
|
|||
<slider label="活躍視窗:" name="active" />
|
||||
<slider label="非活躍視窗:" name="inactive" />
|
||||
<slider label="相機 / 移動:" name="camera_movement" />
|
||||
<text name="console_opacity">控制檯透明度:</text>
|
||||
<color_swatch name="console_background" tool_tip="選擇控制檯的顏色" />
|
||||
<slider label="透明度:" name="console_background_opacity" tool_tip="選擇控制檯背景的透明度" />
|
||||
<text name="console_opacity">控制台透明度:</text>
|
||||
<color_swatch name="console_background" tool_tip="選擇控制台的顏色" />
|
||||
<slider label="透明度:" name="console_background_opacity" tool_tip="選擇控制台背景的透明度" />
|
||||
<text name="preferences_search_label">突出顯示搜尋偏好設定:</text>
|
||||
<color_swatch name="preferences_search_color" tool_tip="選擇搜尋結果突出顯示的偏好設定的顏色" />
|
||||
<text name="area_search_beacon_color_label">區域搜尋標記顏色:</text>
|
||||
|
|
|
|||
|
|
@ -35,5 +35,5 @@
|
|||
</text>
|
||||
<spinner name="restart_delay" />
|
||||
<button label="取消重新啟動" name="cancel_restart_btn" tool_tip="取消區域重新啟動" />
|
||||
<button label="區域除錯控制檯" name="region_debug_console_btn" tool_tip="開啟區域除錯控制檯" />
|
||||
<button label="區域除錯控制台" name="region_debug_console_btn" tool_tip="開啟區域除錯控制台" />
|
||||
</panel>
|
||||
|
|
@ -6855,7 +6855,7 @@ SecondLife.com網站的「支援」部分
|
|||
</string>
|
||||
<string name="ssl_connect_error">
|
||||
這通常意味著你電腦的時鐘設定不正確。
|
||||
請轉到電腦「控制檯」,確保時間和日期設定正確。
|
||||
請轉到電腦「控制台」,確保時間和日期設定正確。
|
||||
並檢查你的網路和防火牆是否設定正確。
|
||||
如果你繼續收到此錯誤,請轉到
|
||||
SecondLife.com網站的「支援」部分
|
||||
|
|
|
|||
|
|
@ -181,6 +181,11 @@
|
|||
<combo_box.item value="filter_type_snapshots" label="Snapshots" />
|
||||
<combo_box.item value="filter_type_materials" label="Materials" />
|
||||
<combo_box.item value="filter_type_settings" label="Settings" />
|
||||
<!-- <FS:minerjr> [FIRE-35042] Inventory - Only Coalesced Filter - More accessible -->
|
||||
<combo_box.item value="filter_separator" label="------------" enabled="false" />
|
||||
<!-- Add new custom filter to toggle Only Coalesced on and switch to filter_type_objects as only objects can be combined -->
|
||||
<combo_box.item value="filter_type_coalesced" label="Only Coalesced"/>
|
||||
<!-- </FS:minerjr> [FIRE-35042] -->
|
||||
<combo_box.item value="filter_separator" label="------------" enabled="false" />
|
||||
<combo_box.item value="filter_type_custom" label="Custom..." />
|
||||
</combo_box>
|
||||
|
|
@ -410,6 +415,38 @@
|
|||
parameter="secondary_inventory" />
|
||||
</button>
|
||||
</panel>
|
||||
<!-- <FS:minerjr> [FIRE-35042] Inventory - Only Coalesced Filter - More accessible -->
|
||||
<!-- This is a new panel button for adding an on screen visual indicator that shows when any filter is enabled -->
|
||||
<!-- A new inventory image was required to be used -->
|
||||
<panel
|
||||
follows="top|left"
|
||||
height="25"
|
||||
layout="topleft"
|
||||
left_pad="0"
|
||||
name="show_filters_panel"
|
||||
width="32">
|
||||
<button
|
||||
follows="top|left"
|
||||
height="25"
|
||||
image_hover_unselected="Toolbar_Middle_Over"
|
||||
image_overlay="show_filters_18"
|
||||
image_selected="Toolbar_Middle_Selected"
|
||||
image_unselected="Toolbar_Middle_Off"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="show_filters_inv_btn"
|
||||
tool_tip="Show Filters - Shows the filter side menu when selected. Becomes highlighted when any filter is enabled."
|
||||
top="0"
|
||||
width="31">
|
||||
<button.commit_callback
|
||||
function="Inventory.GearDefault.Custom.Action"
|
||||
parameter="show_filters" />
|
||||
<button.is_toggled_callback
|
||||
function="Inventory.ShowFilters.Check"
|
||||
parameter="show_filters_modified" />
|
||||
</button>
|
||||
</panel>
|
||||
<!-- </FS:minerjr> [FIRE-35042] -->
|
||||
<panel
|
||||
follows="top|left"
|
||||
height="25"
|
||||
|
|
|
|||
|
|
@ -183,6 +183,11 @@
|
|||
<combo_box.item value="filter_type_snapshots" label="Snapshots" />
|
||||
<combo_box.item value="filter_type_materials" label="Materials" />
|
||||
<combo_box.item value="filter_type_settings" label="Settings" />
|
||||
<!-- <FS:minerjr> [FIRE-35042] Inventory - Only Coalesced Filter - More accessible -->
|
||||
<combo_box.item value="filter_separator" label="------------" enabled="false" />
|
||||
<!-- Add new custom filter to toggle Only Coalesced on and switch to filter_type_objects as only objects can be combined -->
|
||||
<combo_box.item value="filter_type_coalesced" label="Only Coalesced"/>
|
||||
<!-- </FS:minerjr> [FIRE-35042] -->
|
||||
<combo_box.item value="filter_separator" label="------------" enabled="false" />
|
||||
<combo_box.item value="filter_type_custom" label="Custom..." />
|
||||
</combo_box>
|
||||
|
|
@ -413,6 +418,38 @@
|
|||
parameter="secondary_inventory" />
|
||||
</button>
|
||||
</panel>
|
||||
<!-- <FS:minerjr> [FIRE-35042] Inventory - Only Coalesced Filter - More accessible -->
|
||||
<!-- This is a new panel button for adding an on screen visual indicator that shows when any filter is enabled -->
|
||||
<!-- A new inventory image was required to be used -->
|
||||
<panel
|
||||
follows="top|left"
|
||||
height="25"
|
||||
layout="topleft"
|
||||
left_pad="0"
|
||||
name="show_filters_panel"
|
||||
width="32">
|
||||
<button
|
||||
follows="top|left"
|
||||
height="25"
|
||||
image_hover_unselected="Toolbar_Middle_Over"
|
||||
image_overlay="show_filters_18"
|
||||
image_selected="Toolbar_Middle_Selected"
|
||||
image_unselected="Toolbar_Middle_Off"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
name="show_filters_inv_btn"
|
||||
tool_tip="Show Filters - Shows the filter side menu when selected. Becomes highlighted when any filter is enabled."
|
||||
top="0"
|
||||
width="31">
|
||||
<button.commit_callback
|
||||
function="Inventory.GearDefault.Custom.Action"
|
||||
parameter="show_filters" />
|
||||
<button.is_toggled_callback
|
||||
function="Inventory.ShowFilters.Check"
|
||||
parameter="show_filters_modified" />
|
||||
</button>
|
||||
</panel>
|
||||
<!-- </FS:minerjr> [FIRE-35042] -->
|
||||
<panel
|
||||
follows="top|left"
|
||||
height="25"
|
||||
|
|
|
|||
|
|
@ -103,7 +103,7 @@
|
|||
<combo_box.item value="filter_type_textures" label="Texturen" />
|
||||
<combo_box.item value="filter_type_snapshots" label="Fotos" />
|
||||
<combo_box.item value="filter_type_settings" label="Einstellungen" />
|
||||
<combo_box.item value="filter_separator" label="------------" />
|
||||
<combo_box.item value="filter_type_coalesced" label="Nur verbundene Objekte"/>
|
||||
<combo_box.item value="filter_type_custom" label="Benutzerdefiniert..." />
|
||||
</combo_box>
|
||||
<menu_button name="options_visibility_btn" tool_tip="Sichtbarkeitseinstellungen für Suchergebnisse anzeigen"/>
|
||||
|
|
|
|||
|
|
@ -787,6 +787,8 @@
|
|||
<combo_box.item value="filter_type_materials" label="Materials" />
|
||||
<combo_box.item value="filter_type_settings" label="Settings" />
|
||||
<combo_box.item value="filter_separator" label="------------" enabled="false" />
|
||||
<combo_box.item value="filter_type_coalesced" label="Only Coalesced"/>
|
||||
<combo_box.item value="filter_separator" label="------------" enabled="false" />
|
||||
<combo_box.item value="filter_type_custom" label="Custom..." />
|
||||
</combo_box>
|
||||
|
||||
|
|
|
|||
|
|
@ -195,6 +195,10 @@ class ViewerManifest(LLManifest,FSViewerManifest):
|
|||
with self.prefix(src_dst="fs_resources"):
|
||||
self.path("*.lsltxt")
|
||||
self.path("*.dae") # <FS:Beq> FIRE-30963 - better physics defaults
|
||||
|
||||
# <FS:AR> Poser Presets
|
||||
with self.prefix(src_dst="poses/hand_presets"):
|
||||
self.path("*.xml")
|
||||
|
||||
# skins
|
||||
with self.prefix(src_dst="skins"):
|
||||
|
|
|
|||
Loading…
Reference in New Issue