SL-379 WIP Joint overrides tab
parent
f249365f23
commit
67b908cd20
|
|
@ -996,7 +996,6 @@ set(viewer_HEADER_FILES
|
|||
llinventorymodelbackgroundfetch.h
|
||||
llinventoryobserver.h
|
||||
llinventorypanel.h
|
||||
lljointoverridedata.h
|
||||
lljoystickbutton.h
|
||||
lllandmarkactions.h
|
||||
lllandmarklist.h
|
||||
|
|
|
|||
|
|
@ -568,16 +568,6 @@ void LLFloaterModelPreview::onClickCalculateBtn()
|
|||
bool upload_joint_positions = childGetValue("upload_joints").asBoolean();
|
||||
bool lock_scale_if_joint_position = childGetValue("lock_scale_if_joint_position").asBoolean();
|
||||
|
||||
if (upload_joint_positions)
|
||||
{
|
||||
// Todo: this probably should be enabled when checkbox enables, not on calculate
|
||||
populateOverridesTab();
|
||||
}
|
||||
else
|
||||
{
|
||||
disableOverridesTab();
|
||||
}
|
||||
|
||||
mUploadModelUrl.clear();
|
||||
|
||||
gMeshRepo.uploadModel(mModelPreview->mUploadData, mModelPreview->mPreviewScale,
|
||||
|
|
@ -590,9 +580,9 @@ void LLFloaterModelPreview::onClickCalculateBtn()
|
|||
mUploadBtn->setEnabled(false);
|
||||
}
|
||||
|
||||
void populate_list_with_vectors(LLScrollListCtrl *list, const std::set<LLVector3> &vector_set, const LLVector3 &active)
|
||||
void populate_list_with_map(LLScrollListCtrl *list, const std::map<std::string, LLVector3> &vector_map)
|
||||
{
|
||||
if (vector_set.empty())
|
||||
if (vector_map.empty())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
|
@ -602,35 +592,28 @@ void populate_list_with_vectors(LLScrollListCtrl *list, const std::set<LLVector3
|
|||
// Start out right justifying numeric displays
|
||||
cell_params.font_halign = LLFontGL::HCENTER;
|
||||
|
||||
std::set<LLVector3>::const_iterator iter = vector_set.begin();
|
||||
std::set<LLVector3>::const_iterator end = vector_set.end();
|
||||
std::map<std::string, LLVector3>::const_iterator iter = vector_map.begin();
|
||||
std::map<std::string, LLVector3>::const_iterator end = vector_map.end();
|
||||
while (iter != end)
|
||||
{
|
||||
LLScrollListItem::Params item_params;
|
||||
item_params.value = LLSD::Integer(count);
|
||||
|
||||
cell_params.column = "override";
|
||||
if (*iter != active)
|
||||
{
|
||||
cell_params.value = "";
|
||||
}
|
||||
else
|
||||
{
|
||||
cell_params.value = "active"; //todo: localize
|
||||
}
|
||||
cell_params.column = "model_name";
|
||||
cell_params.value = iter->first;
|
||||
|
||||
item_params.columns.add(cell_params);
|
||||
|
||||
cell_params.column = "axis_x";
|
||||
cell_params.value = iter->mV[VX];
|
||||
cell_params.value = iter->second.mV[VX];
|
||||
item_params.columns.add(cell_params);
|
||||
|
||||
cell_params.column = "axis_y";
|
||||
cell_params.value = iter->mV[VY];
|
||||
cell_params.value = iter->second.mV[VY];
|
||||
item_params.columns.add(cell_params);
|
||||
|
||||
cell_params.column = "axis_z";
|
||||
cell_params.value = iter->mV[VZ];
|
||||
cell_params.value = iter->second.mV[VZ];
|
||||
|
||||
item_params.columns.add(cell_params);
|
||||
|
||||
|
|
@ -642,12 +625,12 @@ void populate_list_with_vectors(LLScrollListCtrl *list, const std::set<LLVector3
|
|||
|
||||
void LLFloaterModelPreview::onJointListSelection()
|
||||
{
|
||||
S32 display_lod = mModelPreview->mPreviewLOD;
|
||||
LLPanel *panel = mTabContainer->getPanelByName("overrides_panel");
|
||||
LLScrollListCtrl *joints_list = panel->getChild<LLScrollListCtrl>("joints_list");
|
||||
LLScrollListCtrl *joints_pos = panel->getChild<LLScrollListCtrl>("pos_overrides_list");
|
||||
LLScrollListCtrl *joints_scale = panel->getChild<LLScrollListCtrl>("scale_overrides_list");
|
||||
LLTextBox *joint_pos_descr = panel->getChild<LLTextBox>("pos_overrides_descr");
|
||||
LLTextBox *joint_scale_descr = panel->getChild<LLTextBox>("scale_overrides_descr");
|
||||
|
||||
joints_pos->deleteAllItems();
|
||||
joints_scale->deleteAllItems();
|
||||
|
|
@ -656,19 +639,19 @@ void LLFloaterModelPreview::onJointListSelection()
|
|||
if (selected)
|
||||
{
|
||||
std::string label = selected->getValue().asString();
|
||||
LLJointOverrideData *data = &mJointOverrides[label];
|
||||
populate_list_with_vectors(joints_pos, data->mPosOverrides, data->mActivePosOverride);
|
||||
populate_list_with_vectors(joints_scale, data->mScaleOverrides, data->mActiveScaleOverride);
|
||||
LLJointOverrideData &data = mJointOverrides[display_lod][label];
|
||||
populate_list_with_map(joints_pos, data.mPosOverrides);
|
||||
//populate_list_with_vectors(joints_scale, data.mScaleOverrides, data.mActiveScaleOverride);
|
||||
|
||||
joint_pos_descr->setTextArg("[JOINT]", label);
|
||||
joint_scale_descr->setTextArg("[JOINT]", label);
|
||||
//joint_scale_descr->setTextArg("[JOINT]", label);
|
||||
}
|
||||
else
|
||||
{
|
||||
// temporary value (shouldn't happen)
|
||||
std::string label = "mPelvis";
|
||||
joint_pos_descr->setTextArg("[JOINT]", label);
|
||||
joint_scale_descr->setTextArg("[JOINT]", label);
|
||||
//joint_scale_descr->setTextArg("[JOINT]", label);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1450,6 +1433,98 @@ void LLFloaterModelPreview::addStringToLog(const std::ostringstream& strm, bool
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
void LLFloaterModelPreview::clearOverridesTab()
|
||||
{
|
||||
LLPanel *panel = mTabContainer->getPanelByName("overrides_panel");
|
||||
LLScrollListCtrl *joints_list = panel->getChild<LLScrollListCtrl>("joints_list");
|
||||
joints_list->deleteAllItems();
|
||||
|
||||
for (U32 i = 0; i < LLModel::NUM_LODS; ++i)
|
||||
{
|
||||
mJointOverrides[i].clear();
|
||||
}
|
||||
}
|
||||
|
||||
void LLFloaterModelPreview::showOverridesTab()
|
||||
{
|
||||
S32 display_lod = mModelPreview->mPreviewLOD;
|
||||
if (mModelPreview->mModel[display_lod].empty())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Todo: Are overrides identical for all lods?
|
||||
if (mJointOverrides[display_lod].empty())
|
||||
{
|
||||
// populate list
|
||||
for (LLModelLoader::scene::iterator iter = mModelPreview->mScene[display_lod].begin(); iter != mModelPreview->mScene[display_lod].end(); ++iter)
|
||||
{
|
||||
for (LLModelLoader::model_instance_list::iterator model_iter = iter->second.begin(); model_iter != iter->second.end(); ++model_iter)
|
||||
{
|
||||
LLModelInstance& instance = *model_iter;
|
||||
LLModel* model = instance.mModel;
|
||||
const LLMeshSkinInfo *skin = &model->mSkinInfo;
|
||||
if (skin->mAlternateBindMatrix.size() > 0)
|
||||
{
|
||||
U32 count = LLSkinningUtil::getMeshJointCount(skin);
|
||||
for (U32 j = 0; j < count; ++j)
|
||||
{
|
||||
const LLVector3& jointPos = skin->mAlternateBindMatrix[j].getTranslation();
|
||||
LLJointOverrideData &data = mJointOverrides[display_lod][skin->mJointNames[j]];
|
||||
if (data.mPosOverrides.size() > 0
|
||||
&& (data.mPosOverrides.begin()->second - jointPos).inRange(-F_APPROXIMATELY_ZERO, F_APPROXIMATELY_ZERO))
|
||||
{
|
||||
// File contains multiple meshes with conflicting joint offsets
|
||||
// preview may be incorrect, upload result might wary (depends onto mesh_id).
|
||||
data.mHasConflicts = true;
|
||||
}
|
||||
data.mPosOverrides[model->getName()] = jointPos;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
LLPanel *panel = mTabContainer->getPanelByName("overrides_panel");
|
||||
S32 index = mTabContainer->getIndexForPanel(panel);
|
||||
mTabContainer->enableTabButton(index, true);
|
||||
|
||||
LLScrollListCtrl *joints_list = panel->getChild<LLScrollListCtrl>("joints_list");
|
||||
|
||||
joint_override_data_map_t::iterator joint_iter = mJointOverrides[display_lod].begin();
|
||||
joint_override_data_map_t::iterator joint_end = mJointOverrides[display_lod].end();
|
||||
while (joint_iter != joint_end)
|
||||
{
|
||||
const std::string& listName = joint_iter->first;
|
||||
|
||||
LLScrollListItem::Params item_params;
|
||||
item_params.value(listName);
|
||||
|
||||
LLScrollListCell::Params cell_params;
|
||||
cell_params.font = LLFontGL::getFontSansSerif();
|
||||
cell_params.value = listName;
|
||||
if (joint_iter->second.mHasConflicts)
|
||||
{
|
||||
cell_params.color = LLColor4::orange;
|
||||
}
|
||||
|
||||
item_params.columns.add(cell_params);
|
||||
|
||||
joints_list->addRow(item_params, ADD_BOTTOM);
|
||||
joint_iter++;
|
||||
}
|
||||
joints_list->selectFirstItem();
|
||||
}
|
||||
|
||||
void LLFloaterModelPreview::hideOverridesTab()
|
||||
{
|
||||
LLPanel *panel = mTabContainer->getPanelByName("overrides_panel");
|
||||
S32 index = mTabContainer->getIndexForPanel(panel);
|
||||
mTabContainer->enableTabButton(index, false);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// addStringToLogTab()
|
||||
//-----------------------------------------------------------------------------
|
||||
|
|
@ -2374,6 +2449,11 @@ void LLModelPreview::loadModelCallback(S32 loaded_lod)
|
|||
mViewOption["show_joint_positions"] = true;
|
||||
fmp->childSetValue("upload_joints", true);
|
||||
}
|
||||
else
|
||||
{
|
||||
fmp->clearOverridesTab();
|
||||
fmp->hideOverridesTab();
|
||||
}
|
||||
|
||||
if (lock_scale_if_joint_position)
|
||||
{
|
||||
|
|
@ -4119,11 +4199,19 @@ BOOL LLModelPreview::render()
|
|||
if (upload_skin && upload_joints)
|
||||
{
|
||||
mFMP->childEnable("lock_scale_if_joint_position");
|
||||
if (fmp)
|
||||
{
|
||||
fmp->showOverridesTab();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
mFMP->childDisable("lock_scale_if_joint_position");
|
||||
mFMP->childSetValue("lock_scale_if_joint_position", false);
|
||||
if (fmp)
|
||||
{
|
||||
fmp->hideOverridesTab();
|
||||
}
|
||||
}
|
||||
|
||||
//Only enable joint offsets if it passed the earlier critiquing
|
||||
|
|
@ -4757,6 +4845,7 @@ void LLFloaterModelPreview::onReset(void* user_data)
|
|||
LLFloaterModelPreview* fmp = (LLFloaterModelPreview*) user_data;
|
||||
fmp->childDisable("reset_btn");
|
||||
fmp->clearLogTab();
|
||||
fmp->clearOverridesTab();
|
||||
LLModelPreview* mp = fmp->mModelPreview;
|
||||
std::string filename = mp->mLODFile[LLModel::LOD_HIGH];
|
||||
|
||||
|
|
@ -4975,44 +5064,6 @@ void LLFloaterModelPreview::clearLogTab()
|
|||
mTabContainer->setTabPanelFlashing(panel, false);
|
||||
}
|
||||
|
||||
void LLFloaterModelPreview::populateOverridesTab()
|
||||
{
|
||||
mJointOverrides.clear();
|
||||
attach_override_data_map_t attach_not_in_use;
|
||||
// Todo: use mAlternateBindMatrix
|
||||
mModelPreview->getPreviewAvatar()->getAttachmentOverrides(mJointOverrides, attach_not_in_use);
|
||||
|
||||
if (mJointOverrides.empty())
|
||||
{
|
||||
disableOverridesTab();
|
||||
return;
|
||||
}
|
||||
|
||||
LLPanel *panel = mTabContainer->getPanelByName("overrides_panel");
|
||||
S32 index = mTabContainer->getIndexForPanel(panel);
|
||||
mTabContainer->enableTabButton(index, true);
|
||||
|
||||
LLScrollListCtrl *joints_list = panel->getChild<LLScrollListCtrl>("joints_list");
|
||||
joints_list->deleteAllItems();
|
||||
|
||||
joint_override_data_map_t::iterator joint_iter = mJointOverrides.begin();
|
||||
joint_override_data_map_t::iterator joint_end = mJointOverrides.end();
|
||||
while (joint_iter != joint_end)
|
||||
{
|
||||
const std::string& listName = joint_iter->first;
|
||||
joints_list->addSimpleElement(listName);
|
||||
joint_iter++;
|
||||
}
|
||||
joints_list->selectFirstItem();
|
||||
}
|
||||
|
||||
void LLFloaterModelPreview::disableOverridesTab()
|
||||
{
|
||||
LLPanel *panel = mTabContainer->getPanelByName("overrides_panel");
|
||||
S32 index = mTabContainer->getIndexForPanel(panel);
|
||||
mTabContainer->enableTabButton(index, false);
|
||||
}
|
||||
|
||||
void LLFloaterModelPreview::onModelPhysicsFeeReceived(const LLSD& result, std::string upload_url)
|
||||
{
|
||||
mModelPhysicsFee = result;
|
||||
|
|
|
|||
|
|
@ -30,7 +30,6 @@
|
|||
#include "llfloaternamedesc.h"
|
||||
|
||||
#include "lldynamictexture.h"
|
||||
#include "lljointoverridedata.h"
|
||||
#include "llquaternion.h"
|
||||
#include "llmeshrepository.h"
|
||||
#include "llmodel.h"
|
||||
|
|
@ -62,6 +61,16 @@ class LLTabContainer;
|
|||
class LLToggleableMenu;
|
||||
class LLViewerTextEditor;
|
||||
|
||||
|
||||
class LLJointOverrideData
|
||||
{
|
||||
public:
|
||||
LLJointOverrideData() : mHasConflicts(false) {};
|
||||
std::map<std::string, LLVector3> mPosOverrides;
|
||||
bool mHasConflicts;
|
||||
};
|
||||
typedef std::map<std::string, LLJointOverrideData> joint_override_data_map_t;
|
||||
|
||||
class LLFloaterModelPreview : public LLFloaterModelUploadBase
|
||||
{
|
||||
public:
|
||||
|
|
@ -95,10 +104,13 @@ public:
|
|||
/*virtual*/ void onClose(bool app_quitting);
|
||||
|
||||
static void onMouseCaptureLostModelPreview(LLMouseHandler*);
|
||||
static void setUploadAmount(S32 amount) { sUploadAmount = amount; }
|
||||
static void addStringToLog(const std::string& message, const LLSD& args, bool flash, S32 lod = -1);
|
||||
static void setUploadAmount(S32 amount) { sUploadAmount = amount; }
|
||||
static void addStringToLog(const std::string& message, const LLSD& args, bool flash, S32 lod = -1);
|
||||
static void addStringToLog(const std::string& str, bool flash);
|
||||
static void addStringToLog(const std::ostringstream& strm, bool flash);
|
||||
static void addStringToLog(const std::ostringstream& strm, bool flash);
|
||||
void clearOverridesTab();
|
||||
void showOverridesTab();
|
||||
void hideOverridesTab();
|
||||
|
||||
void setDetails(F32 x, F32 y, F32 z, F32 streaming_cost, F32 physics_cost);
|
||||
void setPreviewLOD(S32 lod);
|
||||
|
|
@ -227,8 +239,6 @@ private:
|
|||
|
||||
void resetUploadOptions();
|
||||
void clearLogTab();
|
||||
void populateOverridesTab();
|
||||
void disableOverridesTab();
|
||||
|
||||
void createSmoothComboBox(LLComboBox* combo_box, float min, float max);
|
||||
|
||||
|
|
@ -237,7 +247,7 @@ private:
|
|||
LLViewerTextEditor* mUploadLogText;
|
||||
LLTabContainer* mTabContainer;
|
||||
|
||||
joint_override_data_map_t mJointOverrides;
|
||||
joint_override_data_map_t mJointOverrides[LLModel::NUM_LODS];
|
||||
};
|
||||
|
||||
class LLMeshFilePicker : public LLFilePickerThread
|
||||
|
|
|
|||
|
|
@ -1,53 +0,0 @@
|
|||
/**
|
||||
* @file lljointoverridedata.h
|
||||
* @brief Declaration of LLJointOverrideData and LLAttachmentOverrideData
|
||||
*
|
||||
* $LicenseInfo:firstyear=2020&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2020, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#ifndef LL_JOINTOVERRIDEDATA_H
|
||||
#define LL_JOINTOVERRIDEDATA_H
|
||||
|
||||
//#include <map>
|
||||
//#include <string>
|
||||
//#include <vector>
|
||||
|
||||
|
||||
struct LLJointOverrideData
|
||||
{
|
||||
std::set<LLVector3> mPosOverrides;
|
||||
LLVector3 mActivePosOverride;
|
||||
std::set<LLVector3> mScaleOverrides;
|
||||
LLVector3 mActiveScaleOverride;
|
||||
};
|
||||
|
||||
struct LLAttachmentOverrideData
|
||||
{
|
||||
std::set<LLVector3> mPosOverrides;
|
||||
LLVector3 mActivePosOverride;
|
||||
};
|
||||
|
||||
typedef std::map<std::string, LLJointOverrideData> joint_override_data_map_t;
|
||||
typedef std::map<std::string, LLAttachmentOverrideData> attach_override_data_map_t;
|
||||
|
||||
#endif // LL_JOINTOVERRIDEDATA_H
|
||||
|
||||
|
|
@ -6375,56 +6375,6 @@ void LLVOAvatar::showAttachmentOverrides(bool verbose) const
|
|||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// getAttachmentOverrides
|
||||
//-----------------------------------------------------------------------------
|
||||
void LLVOAvatar::getAttachmentOverrides(joint_override_data_map_t &joint_overrides, attach_override_data_map_t &attach_overrides) const
|
||||
{
|
||||
LLVector3 pos, scale;
|
||||
LLUUID mesh_id;
|
||||
S32 count = 0;
|
||||
|
||||
// Bones
|
||||
for (avatar_joint_list_t::const_iterator iter = mSkeleton.begin();
|
||||
iter != mSkeleton.end(); ++iter)
|
||||
{
|
||||
const LLJoint* pJoint = (*iter);
|
||||
LLJointOverrideData data;
|
||||
bool joint_override = false;
|
||||
if (pJoint && pJoint->hasAttachmentPosOverride(pos, mesh_id))
|
||||
{
|
||||
pJoint->getAllAttachmentPosOverrides(count, data.mPosOverrides);
|
||||
data.mActivePosOverride = pos;
|
||||
joint_override = true;
|
||||
}
|
||||
if (pJoint && pJoint->hasAttachmentScaleOverride(scale, mesh_id))
|
||||
{
|
||||
pJoint->getAllAttachmentScaleOverrides(count, data.mPosOverrides);
|
||||
data.mActiveScaleOverride = scale;
|
||||
joint_override = true;
|
||||
}
|
||||
if (joint_override)
|
||||
{
|
||||
joint_overrides[pJoint->getName()] = data;
|
||||
}
|
||||
}
|
||||
|
||||
// Attachment points
|
||||
for (attachment_map_t::const_iterator iter = mAttachmentPoints.begin();
|
||||
iter != mAttachmentPoints.end();
|
||||
++iter)
|
||||
{
|
||||
const LLViewerJointAttachment *attachment_pt = (*iter).second;
|
||||
if (attachment_pt && attachment_pt->hasAttachmentPosOverride(pos, mesh_id))
|
||||
{
|
||||
LLAttachmentOverrideData data;
|
||||
attachment_pt->getAllAttachmentPosOverrides(count, data.mPosOverrides);
|
||||
data.mActivePosOverride = pos;
|
||||
attach_overrides[attachment_pt->getName()] = data;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// removeAttachmentOverridesForObject
|
||||
//-----------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -36,25 +36,23 @@
|
|||
#include <boost/signals2/trackable.hpp>
|
||||
|
||||
#include "llavatarappearance.h"
|
||||
#include "llavatarappearancedefines.h"
|
||||
#include "llavatarrendernotifier.h"
|
||||
#include "llcontrol.h"
|
||||
#include "llcharacter.h"
|
||||
#include "llchat.h"
|
||||
#include "lldrawpoolalpha.h"
|
||||
#include "lldriverparam.h"
|
||||
#include "lljointoverridedata.h"
|
||||
#include "llrendertarget.h"
|
||||
#include "llrigginginfo.h"
|
||||
#include "lltexglobalcolor.h"
|
||||
#include "llviewerobject.h"
|
||||
#include "llcharacter.h"
|
||||
#include "llcontrol.h"
|
||||
#include "llviewerjointmesh.h"
|
||||
#include "llviewerjointattachment.h"
|
||||
#include "llviewerobject.h"
|
||||
#include "llviewerstats.h"
|
||||
#include "llrendertarget.h"
|
||||
#include "llavatarappearancedefines.h"
|
||||
#include "lltexglobalcolor.h"
|
||||
#include "lldriverparam.h"
|
||||
#include "llviewertexlayer.h"
|
||||
#include "llvovolume.h"
|
||||
|
||||
#include "material_codes.h" // LL_MCODE_END
|
||||
#include "llrigginginfo.h"
|
||||
#include "llviewerstats.h"
|
||||
#include "llvovolume.h"
|
||||
#include "llavatarrendernotifier.h"
|
||||
|
||||
extern const LLUUID ANIM_AGENT_BODY_NOISE;
|
||||
extern const LLUUID ANIM_AGENT_BREATHE_ROT;
|
||||
|
|
@ -217,8 +215,6 @@ public:
|
|||
void rebuildAttachmentOverrides();
|
||||
void updateAttachmentOverrides();
|
||||
void showAttachmentOverrides(bool verbose = false) const;
|
||||
void getAttachmentOverrides(joint_override_data_map_t& joint_overrides,
|
||||
attach_override_data_map_t& attach_overrides) const;
|
||||
void getAttachmentOverrideNames(std::set<std::string>& pos_names,
|
||||
std::set<std::string>& scale_names) const;
|
||||
|
||||
|
|
|
|||
|
|
@ -1304,62 +1304,23 @@
|
|||
height="100"
|
||||
left_delta="0"
|
||||
top_pad="0"
|
||||
width="310">
|
||||
width="330">
|
||||
<scroll_list.columns
|
||||
label="*"
|
||||
name="override"
|
||||
relative_width="0.22" />
|
||||
label="Model"
|
||||
name="model_name"
|
||||
relative_width="0.40" />
|
||||
<scroll_list.columns
|
||||
label="X"
|
||||
name="axis_x"
|
||||
relative_width="0.26" />
|
||||
relative_width="0.20" />
|
||||
<scroll_list.columns
|
||||
label="Y"
|
||||
name="axis_y"
|
||||
relative_width="0.26" />
|
||||
relative_width="0.20" />
|
||||
<scroll_list.columns
|
||||
label="Z"
|
||||
name="axis_z"
|
||||
relative_width="0.26" />
|
||||
</scroll_list>
|
||||
<text
|
||||
layout="topleft"
|
||||
follows="top|left"
|
||||
height="15"
|
||||
left_delta="0"
|
||||
name="scale_overrides_descr"
|
||||
top_pad="3"
|
||||
width="300">
|
||||
Scale overrides for joint '[JOINT]':
|
||||
</text>
|
||||
<scroll_list
|
||||
layout="topleft"
|
||||
follows="top|left"
|
||||
name="scale_overrides_list"
|
||||
column_padding="0"
|
||||
draw_heading="true"
|
||||
draw_stripes="false"
|
||||
heading_height="23"
|
||||
height="100"
|
||||
left_delta="0"
|
||||
top_pad="0"
|
||||
width="310">
|
||||
<scroll_list.columns
|
||||
label="*"
|
||||
name="override"
|
||||
relative_width="0.22" />
|
||||
<scroll_list.columns
|
||||
label="X"
|
||||
name="axis_x"
|
||||
relative_width="0.26" />
|
||||
<scroll_list.columns
|
||||
label="Y"
|
||||
name="axis_y"
|
||||
relative_width="0.26" />
|
||||
<scroll_list.columns
|
||||
label="Z"
|
||||
name="axis_z"
|
||||
relative_width="0.26" />
|
||||
relative_width="0.20" />
|
||||
</scroll_list>
|
||||
</panel>
|
||||
<panel
|
||||
|
|
|
|||
Loading…
Reference in New Issue