summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/llaccountingcostmanager.cpp17
-rw-r--r--indra/newview/llaccountingcostmanager.h4
-rwxr-xr-xindra/newview/llfloatermodelpreview.cpp612
-rw-r--r--indra/newview/llfloatermodelpreview.h28
-rw-r--r--indra/newview/llfloaterobjectweights.cpp124
-rw-r--r--indra/newview/llfloaterobjectweights.h36
-rw-r--r--indra/newview/llfloatertools.cpp113
-rw-r--r--indra/newview/llfloatertools.h4
-rw-r--r--indra/newview/llpanelobject.cpp4
-rw-r--r--indra/newview/skins/default/colors.xml6
-rw-r--r--indra/newview/skins/default/textures/green_checkmark.pngbin0 -> 414 bytes
-rw-r--r--indra/newview/skins/default/textures/red_x.pngbin0 -> 624 bytes
-rw-r--r--indra/newview/skins/default/textures/textures.xml4
-rwxr-xr-xindra/newview/skins/default/xui/en/floater_model_preview.xml2066
-rw-r--r--indra/newview/skins/default/xui/en/floater_object_weights.xml4
-rw-r--r--indra/newview/skins/default/xui/en/floater_tools.xml10
-rw-r--r--indra/newview/skins/default/xui/en/strings.xml2
17 files changed, 1886 insertions, 1148 deletions
diff --git a/indra/newview/llaccountingcostmanager.cpp b/indra/newview/llaccountingcostmanager.cpp
index 0669bdfffa..8767955fcb 100644
--- a/indra/newview/llaccountingcostmanager.cpp
+++ b/indra/newview/llaccountingcostmanager.cpp
@@ -41,8 +41,13 @@ public:
: mObjectIDs( objectIDs ),
mObserverHandle( observer_handle )
{
+ LLAccountingCostObserver* observer = mObserverHandle.get();
+ if (observer)
+ {
+ mTransactionID = observer->getTransactionID();
+ }
}
-
+
void clearPendingRequests ( void )
{
for ( LLSD::array_iterator iter = mObjectIDs.beginArray(); iter != mObjectIDs.endArray(); ++iter )
@@ -57,7 +62,7 @@ public:
clearPendingRequests();
LLAccountingCostObserver* observer = mObserverHandle.get();
- if (observer)
+ if (observer && observer->getTransactionID() == mTransactionID)
{
observer->setErrorStatus(statusNum, reason);
}
@@ -76,9 +81,6 @@ public:
F32 networkCost = 0.0f;
F32 simulationCost = 0.0f;
- //LLTransactionID transactionID;
-
- //transactionID = content["selected"][i]["local_id"].asUUID();
physicsCost = content["selected"]["physics"].asReal();
networkCost = content["selected"]["streaming"].asReal();
simulationCost = content["selected"]["simulation"].asReal();
@@ -86,7 +88,7 @@ public:
SelectionCost selectionCost( /*transactionID,*/ physicsCost, networkCost, simulationCost );
LLAccountingCostObserver* observer = mObserverHandle.get();
- if (observer)
+ if (observer && observer->getTransactionID() == mTransactionID)
{
observer->onWeightsUpdate(selectionCost);
}
@@ -99,6 +101,9 @@ private:
//List of posted objects
LLSD mObjectIDs;
+ // Current request ID
+ LLUUID mTransactionID;
+
// Cost update observer handle
LLHandle<LLAccountingCostObserver> mObserverHandle;
};
diff --git a/indra/newview/llaccountingcostmanager.h b/indra/newview/llaccountingcostmanager.h
index cccdc2e2d9..0bca1f54ef 100644
--- a/indra/newview/llaccountingcostmanager.h
+++ b/indra/newview/llaccountingcostmanager.h
@@ -40,9 +40,13 @@ public:
virtual void onWeightsUpdate(const SelectionCost& selection_cost) = 0;
virtual void setErrorStatus(U32 status, const std::string& reason) = 0;
const LLHandle<LLAccountingCostObserver>& getObserverHandle() const { return mObserverHandle; }
+ const LLUUID& getTransactionID() { return mTransactionID; }
protected:
+ virtual void generateTransactionID() = 0;
+
LLRootHandle<LLAccountingCostObserver> mObserverHandle;
+ LLUUID mTransactionID;
};
//===============================================================================
class LLAccountingCostManager : public LLSingleton<LLAccountingCostManager>
diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp
index 42186aa247..56d1fc49ee 100755
--- a/indra/newview/llfloatermodelpreview.cpp
+++ b/indra/newview/llfloatermodelpreview.cpp
@@ -120,6 +120,19 @@ const S32 PREVIEW_HPAD = PREVIEW_RESIZE_HANDLE_SIZE;
const S32 PREF_BUTTON_HEIGHT = 16 + 7 + 16;
const S32 PREVIEW_TEXTURE_HEIGHT = 300;
+// "Retain%" decomp parameter has values from 0.0 to 1.0 by 0.01
+// But according to the UI spec for upload model floater, this parameter
+// should be represented by Retain spinner with values from 1 to 100 by 1.
+// To achieve this, RETAIN_COEFFICIENT is used while creating spinner
+// and when value is requested from spinner.
+const double RETAIN_COEFFICIENT = 100;
+
+// "Cosine%" decomp parameter has values from 0.9 to 1 by 0.001
+// But according to the UI spec for upload model floater, this parameter
+// should be represented by Smooth combobox with only 10 values.
+// So this const is used as a size of Smooth combobox list.
+const S32 SMOOTH_VALUES_NUMBER = 10;
+
void drawBoxOutline(const LLVector3& pos, const LLVector3& size);
@@ -395,21 +408,23 @@ BOOL LLFloaterModelPreview::postBuild()
return FALSE;
}
- childSetAction("lod_browse", onBrowseLOD, this);
-
childSetCommitCallback("cancel_btn", onCancel, this);
childSetCommitCallback("crease_angle", onGenerateNormalsCommit, this);
- childSetCommitCallback("generate_normals", onGenerateNormalsCommit, this);
+ getChild<LLCheckBoxCtrl>("gen_normals")->setCommitCallback(boost::bind(&LLFloaterModelPreview::toggleGenarateNormals, this));
childSetCommitCallback("lod_generate", onAutoFillCommit, this);
- childSetCommitCallback("lod_mode", onLODParamCommit, this);
- childSetCommitCallback("lod_error_threshold", onLODParamCommit, this);
- childSetCommitCallback("lod_triangle_limit", onLODParamCommitTriangleLimit, this);
- childSetCommitCallback("build_operator", onLODParamCommit, this);
- childSetCommitCallback("queue_mode", onLODParamCommit, this);
- childSetCommitCallback("border_mode", onLODParamCommit, this);
- childSetCommitCallback("share_tolerance", onLODParamCommit, this);
+ for (S32 lod = 0; lod <= LLModel::LOD_HIGH; ++lod)
+ {
+ LLComboBox* lod_source_combo = getChild<LLComboBox>("lod_source_" + lod_name[lod]);
+ lod_source_combo->setCommitCallback(boost::bind(&LLFloaterModelPreview::onLoDSourceCommit, this, lod));
+ lod_source_combo->setCurrentByIndex(mLODMode[lod]);
+
+ getChild<LLButton>("lod_browse_" + lod_name[lod])->setCommitCallback(boost::bind(&LLFloaterModelPreview::onBrowseLOD, this, lod));
+ getChild<LLComboBox>("lod_mode_" + lod_name[lod])->setCommitCallback(boost::bind(&LLFloaterModelPreview::onLODParamCommit, this, lod, false));
+ getChild<LLSpinCtrl>("lod_error_threshold_" + lod_name[lod])->setCommitCallback(boost::bind(&LLFloaterModelPreview::onLODParamCommit, this, lod, false));
+ getChild<LLSpinCtrl>("lod_triangle_limit_" + lod_name[lod])->setCommitCallback(boost::bind(&LLFloaterModelPreview::onLODParamCommit, this, lod, true));
+ }
childSetCommitCallback("upload_skin", boost::bind(&LLFloaterModelPreview::toggleCalculateButton, this), NULL);
childSetCommitCallback("upload_joints", boost::bind(&LLFloaterModelPreview::toggleCalculateButton, this), NULL);
@@ -430,25 +445,15 @@ BOOL LLFloaterModelPreview::postBuild()
childSetCommitCallback("import_scale", onImportScaleCommit, this);
childSetCommitCallback("pelvis_offset", onPelvisOffsetCommit, this);
- childSetCommitCallback("lod_file_or_limit", refresh, this);
- childSetCommitCallback("physics_load_radio", onPhysicsLoadRadioCommit, this);
- //childSetCommitCallback("physics_optimize", refresh, this);
- //childSetCommitCallback("physics_use_hull", refresh, this);
+ getChild<LLCheckBoxCtrl>("show_edges")->setCommitCallback(boost::bind(&LLFloaterModelPreview::onViewOptionChecked, this, _1));
+ getChild<LLCheckBoxCtrl>("show_physics")->setCommitCallback(boost::bind(&LLFloaterModelPreview::onViewOptionChecked, this, _1));
+ getChild<LLCheckBoxCtrl>("show_textures")->setCommitCallback(boost::bind(&LLFloaterModelPreview::onViewOptionChecked, this, _1));
+ getChild<LLCheckBoxCtrl>("show_skin_weight")->setCommitCallback(boost::bind(&LLFloaterModelPreview::onViewOptionChecked, this, _1));
+ getChild<LLCheckBoxCtrl>("show_joint_positions")->setCommitCallback(boost::bind(&LLFloaterModelPreview::onViewOptionChecked, this, _1));
childDisable("upload_skin");
childDisable("upload_joints");
- mViewOptionMenuButton = getChild<LLMenuButton>("options_gear_btn");
-
- mCommitCallbackRegistrar.add("ModelImport.ViewOption.Action", boost::bind(&LLFloaterModelPreview::onViewOptionChecked, this, _2));
- mEnableCallbackRegistrar.add("ModelImport.ViewOption.Check", boost::bind(&LLFloaterModelPreview::isViewOptionChecked, this, _2));
- mEnableCallbackRegistrar.add("ModelImport.ViewOption.Enabled", boost::bind(&LLFloaterModelPreview::isViewOptionEnabled, this, _2));
-
-
-
- mViewOptionMenu = LLUICtrlFactory::getInstance()->createFromFile<LLToggleableMenu>("menu_model_import_gear_default.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
- mViewOptionMenuButton->setMenu(mViewOptionMenu, LLMenuButton::MP_BOTTOM_LEFT);
-
initDecompControls();
LLView* preview_panel = getChild<LLView>("preview_panel");
@@ -541,11 +546,11 @@ void LLFloaterModelPreview::initModelPreview()
mModelPreview->setModelUpdatedCallback(boost::bind(&LLFloaterModelPreview::toggleCalculateButton, this, _1));
}
-void LLFloaterModelPreview::onViewOptionChecked(const LLSD& userdata)
+void LLFloaterModelPreview::onViewOptionChecked(LLUICtrl* ctrl)
{
if (mModelPreview)
{
- mModelPreview->mViewOption[userdata.asString()] = !mModelPreview->mViewOption[userdata.asString()];
+ mModelPreview->mViewOption[ctrl->getName()] = !mModelPreview->mViewOption[ctrl->getName()];
mModelPreview->refresh();
}
@@ -563,12 +568,12 @@ bool LLFloaterModelPreview::isViewOptionChecked(const LLSD& userdata)
bool LLFloaterModelPreview::isViewOptionEnabled(const LLSD& userdata)
{
- return !mViewOptionDisabled[userdata.asString()];
+ return childIsEnabled(userdata.asString());
}
void LLFloaterModelPreview::setViewOptionEnabled(const std::string& option, bool enabled)
{
- mViewOptionDisabled[option] = !enabled;
+ childSetEnabled(option, enabled);
}
void LLFloaterModelPreview::enableViewOption(const std::string& option)
@@ -646,29 +651,6 @@ void LLFloaterModelPreview::onPelvisOffsetCommit( LLUICtrl*, void* userdata )
}
//static
-void LLFloaterModelPreview::onPhysicsLoadRadioCommit( LLUICtrl*, void *userdata)
-{
- LLFloaterModelPreview* fmp = LLFloaterModelPreview::sInstance;
- if (fmp)
- {
- if (fmp->childGetValue("physics_use_lod").asBoolean())
- {
- onPhysicsUseLOD(NULL,NULL);
- }
- if (fmp->childGetValue("physics_load_from_file").asBoolean())
- {
-
- }
- LLModelPreview *model_preview = fmp->mModelPreview;
- if (model_preview)
- {
- model_preview->refresh();
- model_preview->updateStatusMessages();
- }
- }
-}
-
-//static
void LLFloaterModelPreview::onUploadJointsCommit(LLUICtrl*,void* userdata)
{
LLFloaterModelPreview *fp =(LLFloaterModelPreview *)userdata;
@@ -722,6 +704,12 @@ void LLFloaterModelPreview::onGenerateNormalsCommit(LLUICtrl* ctrl, void* userda
fp->mModelPreview->generateNormals();
}
+void LLFloaterModelPreview::toggleGenarateNormals()
+{
+ bool enabled = childGetValue("gen_normals").asBoolean();
+ childSetEnabled("crease_angle", enabled);
+}
+
//static
void LLFloaterModelPreview::onExplodeCommit(LLUICtrl* ctrl, void* userdata)
{
@@ -738,19 +726,9 @@ void LLFloaterModelPreview::onAutoFillCommit(LLUICtrl* ctrl, void* userdata)
fp->mModelPreview->genLODs();
}
-//static
-void LLFloaterModelPreview::onLODParamCommit(LLUICtrl* ctrl, void* userdata)
+void LLFloaterModelPreview::onLODParamCommit(S32 lod, bool enforce_tri_limit)
{
- LLFloaterModelPreview* fp = (LLFloaterModelPreview*) userdata;
-
- fp->mModelPreview->onLODParamCommit(false);
-}
-
-//static
-void LLFloaterModelPreview::onLODParamCommitTriangleLimit(LLUICtrl* ctrl, void* userdata)
-{
- LLFloaterModelPreview* fp = (LLFloaterModelPreview*) userdata;
- fp->mModelPreview->onLODParamCommit(true);
+ mModelPreview->onLODParamCommit(lod, enforce_tri_limit);
}
@@ -936,20 +914,32 @@ void LLFloaterModelPreview::onPhysicsParamCommit(LLUICtrl* ctrl, void* data)
{
LLCDParam* param = (LLCDParam*) data;
std::string name(param->mName);
- sInstance->mDecompParams[name] = ctrl->getValue();
+
+ LLSD value = ctrl->getValue();
+
+ if("Retain%" == name)
+ {
+ value = ctrl->getValue().asReal() / RETAIN_COEFFICIENT;
+ }
+
+ sInstance->mDecompParams[name] = value;
if (name == "Simplify Method")
{
- if (ctrl->getValue().asInteger() == 0)
- {
- sInstance->childSetVisible("Retain%", true);
- sInstance->childSetVisible("Detail Scale", false);
- }
- else
+ bool show_retain = false;
+ bool show_detail = true;
+
+ if (ctrl->getValue().asInteger() == 0)
{
- sInstance->childSetVisible("Retain%", false);
- sInstance->childSetVisible("Detail Scale", true);
+ show_retain = true;
+ show_detail = false;
}
+
+ sInstance->childSetVisible("Retain%", show_retain);
+ sInstance->childSetVisible("Retain%_label", show_retain);
+
+ sInstance->childSetVisible("Detail Scale", show_detail);
+ sInstance->childSetVisible("Detail Scale label", show_detail);
}
}
}
@@ -1005,14 +995,38 @@ void LLFloaterModelPreview::onPhysicsBrowse(LLUICtrl* ctrl, void* userdata)
//static
void LLFloaterModelPreview::onPhysicsUseLOD(LLUICtrl* ctrl, void* userdata)
{
+ S32 num_modes = 4;
S32 which_mode = 3;
+ static S32 previous_mode = which_mode;
+
LLCtrlSelectionInterface* iface = sInstance->childGetSelectionInterface("physics_lod_combo");
if (iface)
{
which_mode = iface->getFirstSelectedIndex();
}
- sInstance->mModelPreview->setPhysicsFromLOD(which_mode);
+ S32 file_mode = iface->getItemCount() - 1;
+ bool file_browse = which_mode == file_mode;
+ bool lod_to_file = file_browse && (previous_mode != file_mode);
+ bool file_to_lod = !file_browse && (previous_mode == file_mode);
+
+ if (!lod_to_file)
+ {
+ which_mode = num_modes - which_mode;
+ sInstance->mModelPreview->setPhysicsFromLOD(which_mode);
+ }
+
+ if (lod_to_file || file_to_lod)
+ {
+ LLModelPreview *model_preview = sInstance->mModelPreview;
+ if (model_preview)
+ {
+ model_preview->refresh();
+ model_preview->updateStatusMessages();
+ }
+ }
+
+ previous_mode = which_mode;
}
//static
@@ -1104,8 +1118,9 @@ void LLFloaterModelPreview::initDecompControls()
mDecompParams[param[i].mName] = LLSD(param[i].mDefault.mFloat);
//llinfos << "Type: float, Default: " << param[i].mDefault.mFloat << llendl;
- LLSliderCtrl* slider = getChild<LLSliderCtrl>(name);
- if (slider)
+
+ LLUICtrl* ctrl = getChild<LLUICtrl>(name);
+ if (LLSliderCtrl* slider = dynamic_cast<LLSliderCtrl*>(ctrl))
{
slider->setMinValue(param[i].mDetails.mRange.mLow.mFloat);
slider->setMaxValue(param[i].mDetails.mRange.mHigh.mFloat);
@@ -1113,14 +1128,49 @@ void LLFloaterModelPreview::initDecompControls()
slider->setValue(param[i].mDefault.mFloat);
slider->setCommitCallback(onPhysicsParamCommit, (void*) &param[i]);
}
+ else if (LLSpinCtrl* spinner = dynamic_cast<LLSpinCtrl*>(ctrl))
+ {
+ bool is_retain_ctrl = "Retain%" == name;
+ double coefficient = is_retain_ctrl ? RETAIN_COEFFICIENT : 1.f;
+
+ spinner->setMinValue(param[i].mDetails.mRange.mLow.mFloat * coefficient);
+ spinner->setMaxValue(param[i].mDetails.mRange.mHigh.mFloat * coefficient);
+ spinner->setIncrement(param[i].mDetails.mRange.mDelta.mFloat * coefficient);
+ spinner->setValue(param[i].mDefault.mFloat * coefficient);
+ spinner->setCommitCallback(onPhysicsParamCommit, (void*) &param[i]);
+ }
+ else if (LLComboBox* combo_box = dynamic_cast<LLComboBox*>(ctrl))
+ {
+ float min = param[i].mDetails.mRange.mLow.mFloat;
+ float max = param[i].mDetails.mRange.mHigh.mFloat;
+ float delta = param[i].mDetails.mRange.mDelta.mFloat;
+
+ if ("Cosine%" == name)
+ {
+ createSmoothComboBox(combo_box, min, max);
+ }
+ else
+ {
+ for(float value = min; value <= max; value += delta)
+ {
+ std::string label = llformat("%.1f", value);
+ combo_box->add(label, value, ADD_BOTTOM, true);
+ }
+ combo_box->setValue(param[i].mDefault.mFloat);
+
+ }
+
+ combo_box->setCommitCallback(onPhysicsParamCommit, (void*) &param[i]);
+ }
}
else if (param[i].mType == LLCDParam::LLCD_INTEGER)
{
mDecompParams[param[i].mName] = LLSD(param[i].mDefault.mIntOrEnumValue);
//llinfos << "Type: integer, Default: " << param[i].mDefault.mIntOrEnumValue << llendl;
- LLSliderCtrl* slider = getChild<LLSliderCtrl>(name);
- if (slider)
+
+ LLUICtrl* ctrl = getChild<LLUICtrl>(name);
+ if (LLSliderCtrl* slider = dynamic_cast<LLSliderCtrl*>(ctrl))
{
slider->setMinValue(param[i].mDetails.mRange.mLow.mIntOrEnumValue);
slider->setMaxValue(param[i].mDetails.mRange.mHigh.mIntOrEnumValue);
@@ -1128,6 +1178,16 @@ void LLFloaterModelPreview::initDecompControls()
slider->setValue(param[i].mDefault.mIntOrEnumValue);
slider->setCommitCallback(onPhysicsParamCommit, (void*) &param[i]);
}
+ else if (LLComboBox* combo_box = dynamic_cast<LLComboBox*>(ctrl))
+ {
+ for(int k = param[i].mDetails.mRange.mLow.mIntOrEnumValue; k<=param[i].mDetails.mRange.mHigh.mIntOrEnumValue; k+=param[i].mDetails.mRange.mDelta.mIntOrEnumValue)
+ {
+ std::string name = llformat("%.1d", k);
+ combo_box->add(name, k, ADD_BOTTOM, true);
+ }
+ combo_box->setValue(param[i].mDefault.mIntOrEnumValue);
+ combo_box->setCommitCallback(onPhysicsParamCommit, (void*) &param[i]);
+ }
}
else if (param[i].mType == LLCDParam::LLCD_BOOLEAN)
{
@@ -1175,6 +1235,22 @@ void LLFloaterModelPreview::initDecompControls()
childSetCommitCallback("physics_explode", LLFloaterModelPreview::onExplodeCommit, this);
}
+void LLFloaterModelPreview::createSmoothComboBox(LLComboBox* combo_box, float min, float max)
+{
+ float delta = (max - min) / SMOOTH_VALUES_NUMBER;
+ int ilabel = 0;
+
+ combo_box->add("0 (none)", ADD_BOTTOM, true);
+
+ for(float value = min + delta; value < max; value += delta)
+ {
+ std::string label = (++ilabel == SMOOTH_VALUES_NUMBER) ? "10 (max)" : llformat("%.1d", ilabel);
+ combo_box->add(label, value, ADD_BOTTOM, true);
+ }
+
+
+}
+
//-----------------------------------------------------------------------------
// onMouseCaptureLost()
//-----------------------------------------------------------------------------
@@ -3428,7 +3504,7 @@ void LLModelPreview::loadModel(std::string filename, S32 lod, bool force_disable
if (lod == mPreviewLOD)
{
- mFMP->childSetText("lod_file", mLODFile[mPreviewLOD]);
+ mFMP->childSetText("lod_file_" + lod_name[lod], mLODFile[lod]);
}
else if (lod == LLModel::LOD_PHYSICS)
{
@@ -3732,21 +3808,21 @@ void LLModelPreview::genLODs(S32 which_lod, U32 decimation, bool enforce_tri_lim
U32 lod_mode = 0;
- LLCtrlSelectionInterface* iface = mFMP->childGetSelectionInterface("lod_mode");
+ LLCtrlSelectionInterface* iface = mFMP->childGetSelectionInterface("lod_mode_" + lod_name[which_lod]);
if (iface)
{
lod_mode = iface->getFirstSelectedIndex();
}
- mRequestedLoDMode[mPreviewLOD] = lod_mode;
+ mRequestedLoDMode[which_lod] = lod_mode;
- F32 lod_error_threshold = mFMP->childGetValue("lod_error_threshold").asReal();
+ F32 lod_error_threshold = mFMP->childGetValue("lod_error_threshold_" + lod_name[which_lod]).asReal();
if (lod_mode == 0)
{
lod_mode = GLOD_TRIANGLE_BUDGET;
if (which_lod != -1)
{
- limit = mFMP->childGetValue("lod_triangle_limit").asInteger();
+ limit = mFMP->childGetValue("lod_triangle_limit_" + lod_name[which_lod]).asInteger();
}
}
else
@@ -3754,89 +3830,7 @@ void LLModelPreview::genLODs(S32 which_lod, U32 decimation, bool enforce_tri_lim
lod_mode = GLOD_ERROR_THRESHOLD;
}
- U32 build_operator = 0;
-
- iface = mFMP->childGetSelectionInterface("build_operator");
- if (iface)
- {
- build_operator = iface->getFirstSelectedIndex();
- }
- mRequestedBuildOperator[mPreviewLOD] = build_operator;
-
- if (build_operator == 0)
- {
- build_operator = GLOD_OPERATOR_EDGE_COLLAPSE;
- }
- else
- {
- build_operator = GLOD_OPERATOR_HALF_EDGE_COLLAPSE;
- }
-
- U32 queue_mode=0;
- iface = mFMP->childGetSelectionInterface("queue_mode");
- if (iface)
- {
- queue_mode = iface->getFirstSelectedIndex();
- }
- mRequestedQueueMode[mPreviewLOD] = queue_mode;
-
- if (queue_mode == 0)
- {
- queue_mode = GLOD_QUEUE_GREEDY;
- }
- else if (queue_mode == 1)
- {
- queue_mode = GLOD_QUEUE_LAZY;
- }
- else
- {
- queue_mode = GLOD_QUEUE_INDEPENDENT;
- }
-
- U32 border_mode = 0;
-
- iface = mFMP->childGetSelectionInterface("border_mode");
- if (iface)
- {
- border_mode = iface->getFirstSelectedIndex();
- }
- mRequestedBorderMode[mPreviewLOD] = border_mode;
-
- if (border_mode == 0)
- {
- border_mode = GLOD_BORDER_UNLOCK;
- }
- else
- {
- border_mode = GLOD_BORDER_LOCK;
- }
-
bool object_dirty = false;
- if (border_mode != mBuildBorderMode)
- {
- mBuildBorderMode = border_mode;
- object_dirty = true;
- }
-
- if (queue_mode != mBuildQueueMode)
- {
- mBuildQueueMode = queue_mode;
- object_dirty = true;
- }
-
- if (build_operator != mBuildOperator)
- {
- mBuildOperator = build_operator;
- object_dirty = true;
- }
-
- F32 share_tolerance = mFMP->childGetValue("share_tolerance").asReal();
- if (share_tolerance != mBuildShareTolerance)
- {
- mBuildShareTolerance = share_tolerance;
- object_dirty = true;
- }
- mRequestedShareTolerance[mPreviewLOD] = share_tolerance;
if (mGroup == 0)
{
@@ -3886,18 +3880,6 @@ void LLModelPreview::genLODs(S32 which_lod, U32 decimation, bool enforce_tri_lim
stop_gloderror();
}
- glodObjectParameteri(mObject[mdl], GLOD_BUILD_OPERATOR, build_operator);
- stop_gloderror();
-
- glodObjectParameteri(mObject[mdl], GLOD_BUILD_QUEUE_MODE, queue_mode);
- stop_gloderror();
-
- glodObjectParameteri(mObject[mdl], GLOD_BUILD_BORDER_MODE, border_mode);
- stop_gloderror();
-
- glodObjectParameterf(mObject[mdl], GLOD_BUILD_SHARE_TOLERANCE, share_tolerance);
- stop_gloderror();
-
glodBuildObject(mObject[mdl]);
stop_gloderror();
}
@@ -4272,6 +4254,8 @@ void LLModelPreview::updateStatusMessages()
icon = mFMP->getChild<LLIconCtrl>("lod_status_message_icon");
icon->setImage(img);
}
+
+ updateLodControls(lod);
}
@@ -4378,12 +4362,14 @@ void LLModelPreview::updateStatusMessages()
{
fmp->enableViewOption("show_physics");
mViewOption["show_physics"] = true;
+ fmp->childSetValue("show_physics", true);
}
}
else
{
fmp->disableViewOption("show_physics");
mViewOption["show_physics"] = false;
+ fmp->childSetValue("show_physics", false);
}
@@ -4437,149 +4423,141 @@ void LLModelPreview::updateStatusMessages()
}
}
+ if (mFMP->childGetValue("physics_lod_combo").asString() == "From file")
+ {
+ mFMP->childEnable("physics_file");
+ mFMP->childEnable("physics_browse");
+ }
+ else
+ {
+ mFMP->childDisable("physics_file");
+ mFMP->childDisable("physics_browse");
+ }
+
+ LLSpinCtrl* crease = mFMP->getChild<LLSpinCtrl>("crease_angle");
+
+ if (mRequestedCreaseAngle[mPreviewLOD] == -1.f)
+ {
+ mFMP->childSetColor("crease_label", LLColor4::grey);
+ crease->forceSetValue(75.f);
+ }
+ else
+ {
+ mFMP->childSetColor("crease_label", LLColor4::white);
+ crease->forceSetValue(mRequestedCreaseAngle[mPreviewLOD]);
+ }
+
+ mModelUpdatedSignal(true);
+
+}
+
+void LLModelPreview::updateLodControls(S32 lod)
+{
const char* lod_controls[] =
{
- "lod_mode",
- "lod_triangle_limit",
- "lod_error_tolerance",
- "build_operator_text",
- "queue_mode_text",
- "border_mode_text",
- "share_tolerance_text",
- "build_operator",
- "queue_mode",
- "border_mode",
- "share_tolerance"
+ "lod_mode_",
+ "lod_triangle_limit_",
+ "lod_error_threshold_"
};
const U32 num_lod_controls = sizeof(lod_controls)/sizeof(char*);
const char* file_controls[] =
{
- "lod_browse",
- "lod_file"
+ "lod_browse_",
+ "lod_file_",
};
const U32 num_file_controls = sizeof(file_controls)/sizeof(char*);
- if (fmp)
+ LLFloaterModelPreview* fmp = LLFloaterModelPreview::sInstance;
+ if (!fmp) return;
+
+ LLComboBox* lod_combo = mFMP->findChild<LLComboBox>("lod_source_" + lod_name[lod]);
+ if (!lod_combo) return;
+
+ S32 lod_mode = lod_combo->getCurrentIndex();
+ if (lod_mode == 0) // LoD from file
{
- //enable/disable controls based on radio groups
- if (mFMP->childGetValue("lod_from_file").asBoolean())
- {
- fmp->mLODMode[mPreviewLOD] = 0;
- for (U32 i = 0; i < num_file_controls; ++i)
- {
- mFMP->childEnable(file_controls[i]);
- }
+ fmp->mLODMode[lod] = 0;
+ for (U32 i = 0; i < num_file_controls; ++i)
+ {
+ mFMP->childShow(file_controls[i] + lod_name[lod]);
+ }
- for (U32 i = 0; i < num_lod_controls; ++i)
- {
- mFMP->childDisable(lod_controls[i]);
- }
+ for (U32 i = 0; i < num_lod_controls; ++i)
+ {
+ mFMP->childHide(lod_controls[i] + lod_name[lod]);
}
- else if (mFMP->childGetValue("lod_none").asBoolean())
+ }
+ else if (lod_mode == 2) // use LoD above
+ {
+ fmp->mLODMode[lod] = 2;
+ for (U32 i = 0; i < num_file_controls; ++i)
{
- fmp->mLODMode[mPreviewLOD] = 2;
- for (U32 i = 0; i < num_file_controls; ++i)
- {
- mFMP->childDisable(file_controls[i]);
- }
+ mFMP->childHide(file_controls[i] + lod_name[lod]);
+ }
- for (U32 i = 0; i < num_lod_controls; ++i)
- {
- mFMP->childDisable(lod_controls[i]);
- }
+ for (U32 i = 0; i < num_lod_controls; ++i)
+ {
+ mFMP->childHide(lod_controls[i] + lod_name[lod]);
+ }
- if (!mModel[mPreviewLOD].empty())
- {
- mModel[mPreviewLOD].clear();
- mScene[mPreviewLOD].clear();
- mVertexBuffer[mPreviewLOD].clear();
+ if (lod < LLModel::LOD_HIGH)
+ {
+ mModel[lod] = mModel[lod + 1];
+ mScene[lod] = mScene[lod + 1];
+ mVertexBuffer[lod].clear();
- //this can cause phasing issues with the UI, so reenter this function and return
- updateStatusMessages();
- return;
+ // Also update lower LoD
+ if (lod > LLModel::LOD_IMPOSTOR)
+ {
+ updateLodControls(lod - 1);
}
}
- else
- { // auto generate, also the default case for wizard which has no radio selection
- fmp->mLODMode[mPreviewLOD] = 1;
+ }
+ else // auto generate, the default case for all LoDs except High
+ {
+ fmp->mLODMode[lod] = 1;
- //don't actually regenerate lod when refreshing UI
- mLODFrozen = true;
+ //don't actually regenerate lod when refreshing UI
+ mLODFrozen = true;
- for (U32 i = 0; i < num_file_controls; ++i)
- {
- mFMP->childDisable(file_controls[i]);
- }
+ for (U32 i = 0; i < num_file_controls; ++i)
+ {
+ mFMP->childHide(file_controls[i] + lod_name[lod]);
+ }
- for (U32 i = 0; i < num_lod_controls; ++i)
- {
- mFMP->childEnable(lod_controls[i]);
- }
+ for (U32 i = 0; i < num_lod_controls; ++i)
+ {
+ mFMP->childShow(lod_controls[i] + lod_name[lod]);
+ }
- //if (threshold)
- {
- LLSpinCtrl* threshold = mFMP->getChild<LLSpinCtrl>("lod_error_threshold");
- LLSpinCtrl* limit = mFMP->getChild<LLSpinCtrl>("lod_triangle_limit");
- limit->setMaxValue(mMaxTriangleLimit);
- limit->forceSetValue(mRequestedTriangleCount[mPreviewLOD]);
+ LLSpinCtrl* threshold = mFMP->getChild<LLSpinCtrl>("lod_error_threshold_" + lod_name[lod]);
+ LLSpinCtrl* limit = mFMP->getChild<LLSpinCtrl>("lod_triangle_limit_" + lod_name[lod]);
- threshold->forceSetValue(mRequestedErrorThreshold[mPreviewLOD]);
+ limit->setMaxValue(mMaxTriangleLimit);
+ limit->forceSetValue(mRequestedTriangleCount[lod]);
- mFMP->getChild<LLComboBox>("lod_mode")->selectNthItem(mRequestedLoDMode[mPreviewLOD]);
- mFMP->getChild<LLComboBox>("build_operator")->selectNthItem(mRequestedBuildOperator[mPreviewLOD]);
- mFMP->getChild<LLComboBox>("queue_mode")->selectNthItem(mRequestedQueueMode[mPreviewLOD]);
- mFMP->getChild<LLComboBox>("border_mode")->selectNthItem(mRequestedBorderMode[mPreviewLOD]);
- mFMP->getChild<LLSpinCtrl>("share_tolerance")->setValue(mRequestedShareTolerance[mPreviewLOD]);
+ threshold->forceSetValue(mRequestedErrorThreshold[lod]);
- if (mRequestedLoDMode[mPreviewLOD] == 0)
- {
- limit->setVisible(true);
- threshold->setVisible(false);
+ mFMP->getChild<LLComboBox>("lod_mode_" + lod_name[lod])->selectNthItem(mRequestedLoDMode[lod]);
- limit->setMaxValue(mMaxTriangleLimit);
- limit->setIncrement(mMaxTriangleLimit/32);
- }
- else
- {
- limit->setVisible(false);
- threshold->setVisible(true);
- }
- }
+ if (mRequestedLoDMode[lod] == 0)
+ {
+ limit->setVisible(true);
+ threshold->setVisible(false);
- mLODFrozen = false;
+ limit->setMaxValue(mMaxTriangleLimit);
+ limit->setIncrement(mMaxTriangleLimit/32);
+ }
+ else
+ {
+ limit->setVisible(false);
+ threshold->setVisible(true);
}
- }
-
- if (mFMP->childGetValue("physics_load_from_file").asBoolean())
- {
- mFMP->childDisable("physics_lod_combo");
- mFMP->childEnable("physics_file");
- mFMP->childEnable("physics_browse");
- }
- else
- {
- mFMP->childEnable("physics_lod_combo");
- mFMP->childDisable("physics_file");
- mFMP->childDisable("physics_browse");
- }
- LLSpinCtrl* crease = mFMP->getChild<LLSpinCtrl>("crease_angle");
-
- if (mRequestedCreaseAngle[mPreviewLOD] == -1.f)
- {
- mFMP->childSetColor("crease_label", LLColor4::grey);
- crease->forceSetValue(75.f);
+ mLODFrozen = false;
}
- else
- {
- mFMP->childSetColor("crease_label", LLColor4::white);
- crease->forceSetValue(mRequestedCreaseAngle[mPreviewLOD]);
- }
-
- mModelUpdatedSignal(true);
-
}
void LLModelPreview::setPreviewTarget(F32 distance)
@@ -5473,8 +5451,7 @@ void LLModelPreview::setPreviewLOD(S32 lod)
LLComboBox* combo_box = mFMP->getChild<LLComboBox>("preview_lod_combo");
combo_box->setCurrentByIndex((NUM_LOD-1)-mPreviewLOD); // combo box list of lods is in reverse order
- mFMP->childSetTextArg("lod_table_footer", "[DETAIL]", mFMP->getString(lod_name[mPreviewLOD]));
- mFMP->childSetText("lod_file", mLODFile[mPreviewLOD]);
+ mFMP->childSetText("lod_file_" + lod_name[mPreviewLOD], mLODFile[mPreviewLOD]);
// the wizard has three lod drop downs
LLComboBox* combo_box2 = mFMP->getChild<LLComboBox>("preview_lod_combo2");
@@ -5495,25 +5472,16 @@ void LLModelPreview::setPreviewLOD(S32 lod)
mFMP->childSetColor(lod_triangles_name[i], color);
mFMP->childSetColor(lod_vertices_name[i], color);
}
-
- LLFloaterModelPreview* fmp = LLFloaterModelPreview::sInstance;
- if (fmp)
- {
- LLRadioGroup* radio = fmp->getChild<LLRadioGroup>("lod_file_or_limit");
- radio->selectNthItem(fmp->mLODMode[mPreviewLOD]);
- }
}
refresh();
updateStatusMessages();
}
-//static
-void LLFloaterModelPreview::onBrowseLOD(void* data)
+void LLFloaterModelPreview::onBrowseLOD(S32 lod)
{
assert_main_thread();
- LLFloaterModelPreview* mp = (LLFloaterModelPreview*) data;
- mp->loadModel(mp->mModelPreview->mPreviewLOD);
+ loadModel(lod);
}
//static
@@ -5525,6 +5493,7 @@ void LLFloaterModelPreview::onReset(void* user_data)
LLModelPreview* mp = fmp->mModelPreview;
std::string filename = mp->mLODFile[3];
+ fmp->resetDisplayOptions();
//reset model preview
fmp->initModelPreview();
@@ -5554,8 +5523,7 @@ void LLFloaterModelPreview::onUpload(void* user_data)
}
-//static
-void LLFloaterModelPreview::refresh(LLUICtrl* ctrl, void* user_data)
+void LLFloaterModelPreview::refresh()
{
sInstance->toggleCalculateButton(true);
sInstance->mModelPreview->mDirty = true;
@@ -5576,12 +5544,11 @@ void LLModelPreview::textureLoadedCallback( BOOL success, LLViewerFetchedTexture
}
}
-void LLModelPreview::onLODParamCommit(bool enforce_tri_limit)
+void LLModelPreview::onLODParamCommit(S32 lod, bool enforce_tri_limit)
{
if (!mLODFrozen)
{
- genLODs(mPreviewLOD, 3, enforce_tri_limit);
- updateStatusMessages();
+ genLODs(lod, 3, enforce_tri_limit);
refresh();
}
}
@@ -5630,10 +5597,10 @@ void LLFloaterModelPreview::toggleCalculateButton(bool visible)
if (visible)
{
std::string tbd = getString("tbd");
- childSetTextArg("weights_right", "[EQ]", tbd);
- childSetTextArg("weights_left", "[ST]", tbd);
- childSetTextArg("weights_right", "[SIM]", tbd);
- childSetTextArg("weights_left", "[PH]", tbd);
+ childSetTextArg("prim_weight", "[EQ]", tbd);
+ childSetTextArg("download_weight", "[ST]", tbd);
+ childSetTextArg("server_weight", "[SIM]", tbd);
+ childSetTextArg("physics_weight", "[PH]", tbd);
childSetTextArg("upload_fee", "[FEE]", tbd);
childSetTextArg("price_breakdown", "[STREAMING]", tbd);
childSetTextArg("price_breakdown", "[PHYSICS]", tbd);
@@ -5643,6 +5610,23 @@ void LLFloaterModelPreview::toggleCalculateButton(bool visible)
}
}
+void LLFloaterModelPreview::onLoDSourceCommit(S32 lod)
+{
+ mModelPreview->updateLodControls(lod);
+ refresh();
+}
+
+void LLFloaterModelPreview::resetDisplayOptions()
+{
+ std::map<std::string,bool>::iterator option_it = mModelPreview->mViewOption.begin();
+
+ for(;option_it != mModelPreview->mViewOption.end(); ++option_it)
+ {
+ LLUICtrl* ctrl = getChild<LLUICtrl>(option_it->first);
+ ctrl->setValue(false);
+ }
+}
+
void LLFloaterModelPreview::onModelPhysicsFeeReceived(const LLSD& result, std::string upload_url)
{
mModelPhysicsFee = result;
@@ -5656,10 +5640,10 @@ void LLFloaterModelPreview::handleModelPhysicsFeeReceived()
const LLSD& result = mModelPhysicsFee;
mUploadModelUrl = result["url"].asString();
- childSetTextArg("weights_right", "[EQ]", llformat("%0.3f", result["resource_cost"].asReal()));
- childSetTextArg("weights_left", "[ST]", llformat("%0.3f", result["model_streaming_cost"].asReal()));
- childSetTextArg("weights_right", "[SIM]", llformat("%0.3f", result["simulation_cost"].asReal()));
- childSetTextArg("weights_left", "[PH]", llformat("%0.3f", result["physics_cost"].asReal()));
+ childSetTextArg("prim_weight", "[EQ]", llformat("%0.3f", result["resource_cost"].asReal()));
+ childSetTextArg("download_weight", "[ST]", llformat("%0.3f", result["model_streaming_cost"].asReal()));
+ childSetTextArg("server_weight", "[SIM]", llformat("%0.3f", result["simulation_cost"].asReal()));
+ childSetTextArg("physics_weight", "[PH]", llformat("%0.3f", result["physics_cost"].asReal()));
childSetTextArg("upload_fee", "[FEE]", llformat("%d", result["upload_price"].asInteger()));
childSetTextArg("price_breakdown", "[STREAMING]", llformat("%d", result["upload_price_breakdown"]["mesh_streaming"].asInteger()));
childSetTextArg("price_breakdown", "[PHYSICS]", llformat("%d", result["upload_price_breakdown"]["mesh_physics"].asInteger()));
diff --git a/indra/newview/llfloatermodelpreview.h b/indra/newview/llfloatermodelpreview.h
index 723e8c48b8..fc4c0607f9 100644
--- a/indra/newview/llfloatermodelpreview.h
+++ b/indra/newview/llfloatermodelpreview.h
@@ -176,18 +176,18 @@ public:
void setDetails(F32 x, F32 y, F32 z, F32 streaming_cost, F32 physics_cost);
- static void onBrowseLOD(void* data);
+ void onBrowseLOD(S32 lod);
static void onReset(void* data);
static void onUpload(void* data);
- static void refresh(LLUICtrl* ctrl, void* data);
+ void refresh();
void loadModel(S32 lod);
void loadModel(S32 lod, const std::string& file_name, bool force_disable_slm = false);
- void onViewOptionChecked(const LLSD& userdata);
+ void onViewOptionChecked(LLUICtrl* ctrl);
bool isViewOptionChecked(const LLSD& userdata);
bool isViewOptionEnabled(const LLSD& userdata);
void setViewOptionEnabled(const std::string& option, bool enabled);
@@ -217,17 +217,17 @@ protected:
static void onPelvisOffsetCommit(LLUICtrl*, void*);
static void onUploadJointsCommit(LLUICtrl*,void*);
static void onUploadSkinCommit(LLUICtrl*,void*);
-
- static void onPhysicsLoadRadioCommit(LLUICtrl*,void *data);
static void onPreviewLODCommit(LLUICtrl*,void*);
static void onGenerateNormalsCommit(LLUICtrl*,void*);
+ void toggleGenarateNormals();
+
static void onAutoFillCommit(LLUICtrl*,void*);
- static void onLODParamCommit(LLUICtrl*,void*);
- static void onLODParamCommitTriangleLimit(LLUICtrl*,void*);
+ void onLODParamCommit(S32 lod, bool enforce_tri_limit);
+
static void onExplodeCommit(LLUICtrl*, void*);
static void onPhysicsParamCommit(LLUICtrl* ctrl, void* userdata);
@@ -266,11 +266,9 @@ protected:
//store which lod mode each LOD is using
// 0 - load from file
// 1 - auto generate
- // 2 - None
+ // 2 - use LoD above
S32 mLODMode[4];
- LLMenuButton* mViewOptionMenuButton;
- LLToggleableMenu* mViewOptionMenu;
LLMutex* mStatusLock;
LLSD mModelPhysicsFee;
@@ -279,9 +277,16 @@ private:
void onClickCalculateBtn();
void toggleCalculateButton();
+ void onLoDSourceCommit(S32 lod);
+
// Toggles between "Calculate weights & fee" and "Upload" buttons.
void toggleCalculateButton(bool visible);
+ // resets display options of model preview to their defaults.
+ void resetDisplayOptions();
+
+ void createSmoothComboBox(LLComboBox* combo_box, float min, float max);
+
LLButton* mUploadBtn;
LLButton* mCalculateBtn;
};
@@ -334,8 +339,9 @@ public:
void saveUploadData(const std::string& filename, bool save_skinweights, bool save_joint_poisitions);
void clearIncompatible(S32 lod);
void updateStatusMessages();
+ void updateLodControls(S32 lod);
void clearGLODGroup();
- void onLODParamCommit(bool enforce_tri_limit);
+ void onLODParamCommit(S32 lod, bool enforce_tri_limit);
void addEmptyFace( LLModel* pTarget );
const bool getModelPivot( void ) const { return mHasPivot; }
diff --git a/indra/newview/llfloaterobjectweights.cpp b/indra/newview/llfloaterobjectweights.cpp
index 7ad34431fb..0862cd2897 100644
--- a/indra/newview/llfloaterobjectweights.cpp
+++ b/indra/newview/llfloaterobjectweights.cpp
@@ -33,68 +33,36 @@
#include "lltextbox.h"
#include "llagent.h"
-#include "llselectmgr.h"
#include "llviewerparcelmgr.h"
#include "llviewerregion.h"
-/**
- * struct LLCrossParcelFunctor
- *
- * A functor that checks whether a bounding box for all
- * selected objects crosses a region or parcel bounds.
- */
-struct LLCrossParcelFunctor : public LLSelectedObjectFunctor
+// virtual
+bool LLCrossParcelFunctor::apply(LLViewerObject* obj)
{
- /*virtual*/ bool apply(LLViewerObject* obj)
- {
- // Add the root object box.
- mBoundingBox.addBBoxAgent(LLBBox(obj->getPositionRegion(), obj->getRotationRegion(), obj->getScale() * -0.5f, obj->getScale() * 0.5f).getAxisAligned());
+ // Add the root object box.
+ mBoundingBox.addBBoxAgent(LLBBox(obj->getPositionRegion(), obj->getRotationRegion(), obj->getScale() * -0.5f, obj->getScale() * 0.5f).getAxisAligned());
- // Extend the bounding box across all the children.
- LLViewerObject::const_child_list_t children = obj->getChildren();
- for (LLViewerObject::const_child_list_t::const_iterator iter = children.begin();
- iter != children.end(); iter++)
- {
- LLViewerObject* child = *iter;
- mBoundingBox.addBBoxAgent(LLBBox(child->getPositionRegion(), child->getRotationRegion(), child->getScale() * -0.5f, child->getScale() * 0.5f).getAxisAligned());
- }
-
- bool result = false;
-
- LLViewerRegion* region = obj->getRegion();
- if (region)
- {
- std::vector<LLBBox> boxes;
- boxes.push_back(mBoundingBox);
- result = region->objectsCrossParcel(boxes);
- }
-
- return result;
+ // Extend the bounding box across all the children.
+ LLViewerObject::const_child_list_t children = obj->getChildren();
+ for (LLViewerObject::const_child_list_t::const_iterator iter = children.begin();
+ iter != children.end(); iter++)
+ {
+ LLViewerObject* child = *iter;
+ mBoundingBox.addBBoxAgent(LLBBox(child->getPositionRegion(), child->getRotationRegion(), child->getScale() * -0.5f, child->getScale() * 0.5f).getAxisAligned());
}
-private:
- LLBBox mBoundingBox;
-};
+ bool result = false;
-/**
- * Class LLLandImpactsObserver
- *
- * An observer class to monitor parcel selection and update
- * the land impacts data from a parcel containing the selected object.
- */
-class LLLandImpactsObserver : public LLParcelObserver
-{
-public:
- virtual void changed()
+ LLViewerRegion* region = obj->getRegion();
+ if (region)
{
- LLFloaterObjectWeights* object_weights_floater = LLFloaterReg::getTypedInstance<LLFloaterObjectWeights>("object_weights");
- if(object_weights_floater)
- {
- object_weights_floater->updateLandImpacts();
- }
+ std::vector<LLBBox> boxes;
+ boxes.push_back(mBoundingBox);
+ result = region->objectsCrossParcel(boxes);
}
-};
+ return result;
+}
LLFloaterObjectWeights::LLFloaterObjectWeights(const LLSD& key)
: LLFloater(key),
@@ -107,22 +75,12 @@ LLFloaterObjectWeights::LLFloaterObjectWeights(const LLSD& key)
mSelectedOnLand(NULL),
mRezzedOnLand(NULL),
mRemainingCapacity(NULL),
- mTotalCapacity(NULL),
- mLandImpactsObserver(NULL)
+ mTotalCapacity(NULL)
{
- mLandImpactsObserver = new LLLandImpactsObserver();
- LLViewerParcelMgr::getInstance()->addObserver(mLandImpactsObserver);
}
LLFloaterObjectWeights::~LLFloaterObjectWeights()
{
- mObjectSelection = NULL;
- mParcelSelection = NULL;
-
- mSelectMgrConnection.disconnect();
-
- LLViewerParcelMgr::getInstance()->removeObserver(mLandImpactsObserver);
- delete mLandImpactsObserver;
}
// virtual
@@ -147,21 +105,8 @@ BOOL LLFloaterObjectWeights::postBuild()
// virtual
void LLFloaterObjectWeights::onOpen(const LLSD& key)
{
- mSelectMgrConnection = LLSelectMgr::instance().mUpdateSignal.connect(boost::bind(&LLFloaterObjectWeights::refresh, this));
-
- mObjectSelection = LLSelectMgr::getInstance()->getEditSelection();
- mParcelSelection = LLViewerParcelMgr::getInstance()->getFloatingParcelSelection();
-
refresh();
-}
-
-// virtual
-void LLFloaterObjectWeights::onClose(bool app_quitting)
-{
- mSelectMgrConnection.disconnect();
-
- mObjectSelection = NULL;
- mParcelSelection = NULL;
+ updateLandImpacts(LLViewerParcelMgr::getInstance()->getFloatingParcelSelection()->getParcel());
}
// virtual
@@ -190,9 +135,8 @@ void LLFloaterObjectWeights::setErrorStatus(U32 status, const std::string& reaso
toggleWeightsLoadingIndicators(false);
}
-void LLFloaterObjectWeights::updateLandImpacts()
+void LLFloaterObjectWeights::updateLandImpacts(const LLParcel* parcel)
{
- LLParcel *parcel = mParcelSelection->getParcel();
if (!parcel || LLSelectMgr::getInstance()->getSelection()->isEmpty())
{
updateIfNothingSelected();
@@ -241,21 +185,6 @@ void LLFloaterObjectWeights::refresh()
toggleLandImpactsLoadingIndicators(false);
}
- else
- {
- LLViewerObject* selected_object = mObjectSelection->getFirstObject();
- if (selected_object)
- {
- // Select a parcel at the currently selected object's position.
- LLViewerParcelMgr::getInstance()->selectParcelAt(selected_object->getPositionGlobal());
-
- toggleLandImpactsLoadingIndicators(true);
- }
- else
- {
- llwarns << "Failed to get selected object" << llendl;
- }
- }
LLViewerRegion* region = gAgent.getRegion();
if (region && region->capabilitiesReceived())
@@ -269,6 +198,9 @@ void LLFloaterObjectWeights::refresh()
std::string url = region->getCapability("ResourceCostSelected");
if (!url.empty())
{
+ // Update the transaction id before the new fetch request
+ generateTransactionID();
+
LLAccountingCostManager::getInstance()->fetchCosts(Roots, url, getObserverHandle());
toggleWeightsLoadingIndicators(true);
}
@@ -280,6 +212,12 @@ void LLFloaterObjectWeights::refresh()
}
}
+// virtual
+void LLFloaterObjectWeights::generateTransactionID()
+{
+ mTransactionID.generate();
+}
+
void LLFloaterObjectWeights::toggleWeightsLoadingIndicators(bool visible)
{
childSetVisible("download_loading_indicator", visible);
diff --git a/indra/newview/llfloaterobjectweights.h b/indra/newview/llfloaterobjectweights.h
index 50d028909e..9a244573be 100644
--- a/indra/newview/llfloaterobjectweights.h
+++ b/indra/newview/llfloaterobjectweights.h
@@ -30,35 +30,46 @@
#include "llfloater.h"
#include "llaccountingcostmanager.h"
+#include "llselectmgr.h"
-class LLLandImpactsObserver;
-class LLObjectSelection;
-class LLParcelSelection;
+class LLParcel;
class LLTextBox;
+/**
+ * struct LLCrossParcelFunctor
+ *
+ * A functor that checks whether a bounding box for all
+ * selected objects crosses a region or parcel bounds.
+ */
+struct LLCrossParcelFunctor : public LLSelectedObjectFunctor
+{
+ /*virtual*/ bool apply(LLViewerObject* obj);
+
+private:
+ LLBBox mBoundingBox;
+};
+
+
class LLFloaterObjectWeights : public LLFloater, LLAccountingCostObserver
{
public:
LOG_CLASS(LLFloaterObjectWeights);
- typedef LLSafeHandle<LLObjectSelection> LLObjectSelectionHandle;
- typedef LLSafeHandle<LLParcelSelection> LLParcelSelectionHandle;
-
LLFloaterObjectWeights(const LLSD& key);
~LLFloaterObjectWeights();
/*virtual*/ BOOL postBuild();
/*virtual*/ void onOpen(const LLSD& key);
- /*virtual*/ void onClose(bool app_quitting);
/*virtual*/ void onWeightsUpdate(const SelectionCost& selection_cost);
/*virtual*/ void setErrorStatus(U32 status, const std::string& reason);
- void updateLandImpacts();
+ void updateLandImpacts(const LLParcel* parcel);
+ void refresh();
private:
- void refresh();
+ /*virtual*/ void generateTransactionID();
void toggleWeightsLoadingIndicators(bool visible);
void toggleLandImpactsLoadingIndicators(bool visible);
@@ -77,13 +88,6 @@ private:
LLTextBox *mRezzedOnLand;
LLTextBox *mRemainingCapacity;
LLTextBox *mTotalCapacity;
-
- LLLandImpactsObserver *mLandImpactsObserver;
-
- LLObjectSelectionHandle mObjectSelection;
- LLParcelSelectionHandle mParcelSelection;
-
- boost::signals2::connection mSelectMgrConnection;
};
#endif //LL_LLFLOATEROBJECTWEIGHTS_H
diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp
index 48aeeafcfd..1008b4a6e4 100644
--- a/indra/newview/llfloatertools.cpp
+++ b/indra/newview/llfloatertools.cpp
@@ -41,6 +41,7 @@
#include "llfloaterbuildoptions.h"
#include "llfloatermediasettings.h"
#include "llfloateropenobject.h"
+#include "llfloaterobjectweights.h"
#include "llfloaterreg.h"
#include "llfocusmgr.h"
#include "llmediaentry.h"
@@ -54,6 +55,7 @@
#include "llpanelobject.h"
#include "llpanelvolume.h"
#include "llpanelpermissions.h"
+#include "llparcel.h"
#include "llradiogroup.h"
#include "llresmgr.h"
#include "llselectmgr.h"
@@ -117,6 +119,24 @@ void commit_radio_group_edit(LLUICtrl* ctrl);
void commit_radio_group_land(LLUICtrl* ctrl);
void commit_slider_zoom(LLUICtrl *ctrl);
+/**
+ * Class LLLandImpactsObserver
+ *
+ * An observer class to monitor parcel selection and update
+ * the land impacts data from a parcel containing the selected object.
+ */
+class LLLandImpactsObserver : public LLParcelObserver
+{
+public:
+ virtual void changed()
+ {
+ LLFloaterTools* tools_floater = LLFloaterReg::getTypedInstance<LLFloaterTools>("build");
+ if(tools_floater)
+ {
+ tools_floater->updateLandImpacts();
+ }
+ }
+};
//static
void* LLFloaterTools::createPanelPermissions(void* data)
@@ -344,6 +364,9 @@ LLFloaterTools::LLFloaterTools(const LLSD& key)
mCostTextBorder(NULL),
mTabLand(NULL),
+
+ mLandImpactsObserver(NULL),
+
mDirty(TRUE),
mNeedMediaTitle(TRUE)
{
@@ -375,12 +398,17 @@ LLFloaterTools::LLFloaterTools(const LLSD& key)
mCommitCallbackRegistrar.add("BuildTool.LinkObjects", boost::bind(&LLSelectMgr::linkObjects, LLSelectMgr::getInstance()));
mCommitCallbackRegistrar.add("BuildTool.UnlinkObjects", boost::bind(&LLSelectMgr::unlinkObjects, LLSelectMgr::getInstance()));
+ mLandImpactsObserver = new LLLandImpactsObserver();
+ LLViewerParcelMgr::getInstance()->addObserver(mLandImpactsObserver);
}
LLFloaterTools::~LLFloaterTools()
{
// children automatically deleted
gFloaterTools = NULL;
+
+ LLViewerParcelMgr::getInstance()->removeObserver(mLandImpactsObserver);
+ delete mLandImpactsObserver;
}
void LLFloaterTools::setStatusText(const std::string& text)
@@ -449,45 +477,44 @@ void LLFloaterTools::refresh()
else
#endif
{
- F32 link_phys_cost = LLSelectMgr::getInstance()->getSelection()->getSelectedLinksetPhysicsCost();
F32 link_cost = LLSelectMgr::getInstance()->getSelection()->getSelectedLinksetCost();
- S32 prim_count = LLSelectMgr::getInstance()->getSelection()->getObjectCount();
S32 link_count = LLSelectMgr::getInstance()->getSelection()->getRootObjectCount();
- LLStringUtil::format_map_t selection_args;
- selection_args["OBJ_COUNT"] = llformat("%.1d", link_count);
- selection_args["PRIM_COUNT"] = llformat("%.1d", prim_count);
-
- std::ostringstream selection_info;
-
- bool show_mesh_cost = gMeshRepo.meshRezEnabled();
-
- if (show_mesh_cost)
+ LLCrossParcelFunctor func;
+ if (LLSelectMgr::getInstance()->getSelection()->applyToRootObjects(&func, true))
{
- LLStringUtil::format_map_t prim_equiv_args;
- prim_equiv_args["SEL_WEIGHT"] = llformat("%.1d", (S32)link_cost);
- selection_args["PE_STRING"] = getString("status_selectprimequiv", prim_equiv_args);
+ // Selection crosses parcel bounds.
+ // We don't display remaining land capacity in this case.
+ const LLStringExplicit empty_str("");
+ childSetTextArg("remaining_capacity", "[CAPACITY_STRING]", empty_str);
}
else
{
- selection_args["PE_STRING"] = "";
+ LLViewerObject* selected_object = mObjectSelection->getFirstObject();
+ if (selected_object)
+ {
+ // Select a parcel at the currently selected object's position.
+ LLViewerParcelMgr::getInstance()->selectParcelAt(selected_object->getPositionGlobal());
+ }
+ else
+ {
+ llwarns << "Failed to get selected object" << llendl;
+ }
}
- selection_info << getString("status_selectcount", selection_args);
-
-
- selection_info << ",";
+ LLStringUtil::format_map_t selection_args;
+ selection_args["OBJ_COUNT"] = llformat("%.1d", link_count);
+ selection_args["LAND_IMPACT"] = llformat("%.1d", (S32)link_cost);
- S32 render_cost = LLSelectMgr::getInstance()->getSelection()->getSelectedObjectRenderCost();
+ std::ostringstream selection_info;
- childSetTextArg("selection_weight", "[PHYS_WEIGHT]", llformat("%.1f", link_phys_cost));
- childSetTextArg("selection_weight", "[DISP_WEIGHT]", llformat("%.1d", render_cost));
+ selection_info << getString("status_selectcount", selection_args);
getChild<LLTextBox>("selection_count")->setText(selection_info.str());
bool have_selection = !LLSelectMgr::getInstance()->getSelection()->isEmpty();
childSetVisible("selection_count", have_selection);
- childSetVisible("selection_weight", have_selection);
+ childSetVisible("remaining_capacity", have_selection);
childSetVisible("selection_empty", !have_selection);
}
@@ -500,6 +527,13 @@ void LLFloaterTools::refresh()
refreshMedia();
mPanelContents->refresh();
mPanelLandInfo->refresh();
+
+ // Refresh the advanced weights floater
+ LLFloaterObjectWeights* object_weights_floater = LLFloaterReg::getTypedInstance<LLFloaterObjectWeights>("object_weights");
+ if(object_weights_floater && object_weights_floater->getVisible())
+ {
+ object_weights_floater->refresh();
+ }
}
void LLFloaterTools::draw()
@@ -758,7 +792,7 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask)
bool have_selection = !LLSelectMgr::getInstance()->getSelection()->isEmpty();
getChildView("selection_count")->setVisible(!land_visible && have_selection);
- getChildView("selection_weight")->setVisible(!land_visible && have_selection);
+ getChildView("remaining_capacity")->setVisible(!land_visible && have_selection);
getChildView("selection_empty")->setVisible(!land_visible && !have_selection);
mTab->setVisible(!land_visible);
@@ -1086,6 +1120,37 @@ bool LLFloaterTools::selectedMediaEditable()
return selected_Media_editable;
}
+void LLFloaterTools::updateLandImpacts()
+{
+ LLParcel *parcel = mParcelSelection->getParcel();
+ if (!parcel)
+ {
+ return;
+ }
+
+ S32 rezzed_prims = parcel->getSimWidePrimCount();
+ S32 total_capacity = parcel->getSimWideMaxPrimCapacity();
+
+ std::string remaining_capacity_str = "";
+
+ bool show_mesh_cost = gMeshRepo.meshRezEnabled();
+ if (show_mesh_cost)
+ {
+ LLStringUtil::format_map_t remaining_capacity_args;
+ remaining_capacity_args["LAND_CAPACITY"] = llformat("%d", total_capacity - rezzed_prims);
+ remaining_capacity_str = getString("status_remaining_capacity", remaining_capacity_args);
+ }
+
+ childSetTextArg("remaining_capacity", "[CAPACITY_STRING]", remaining_capacity_str);
+
+ // Update land impacts info in the weights floater
+ LLFloaterObjectWeights* object_weights_floater = LLFloaterReg::getTypedInstance<LLFloaterObjectWeights>("object_weights");
+ if(object_weights_floater)
+ {
+ object_weights_floater->updateLandImpacts(parcel);
+ }
+}
+
void LLFloaterTools::getMediaState()
{
LLObjectSelectionHandle selected_objects =LLSelectMgr::getInstance()->getSelection();
diff --git a/indra/newview/llfloatertools.h b/indra/newview/llfloatertools.h
index 8c4cb721d3..63ed9dc82b 100644
--- a/indra/newview/llfloatertools.h
+++ b/indra/newview/llfloatertools.h
@@ -47,6 +47,7 @@ class LLMediaCtrl;
class LLTool;
class LLParcelSelection;
class LLObjectSelection;
+class LLLandImpactsObserver;
typedef LLSafeHandle<LLObjectSelection> LLObjectSelectionHandle;
@@ -103,6 +104,7 @@ public:
void updateMediaTitle();
void navigateToTitleMedia( const std::string url );
bool selectedMediaEditable();
+ void updateLandImpacts();
private:
void refresh();
@@ -180,6 +182,8 @@ public:
LLTabContainer* mTabLand;
+ LLLandImpactsObserver* mLandImpactsObserver;
+
LLParcelSelectionHandle mParcelSelection;
LLObjectSelectionHandle mObjectSelection;
diff --git a/indra/newview/llpanelobject.cpp b/indra/newview/llpanelobject.cpp
index e4b2396bc6..1f77e7a602 100644
--- a/indra/newview/llpanelobject.cpp
+++ b/indra/newview/llpanelobject.cpp
@@ -1116,11 +1116,11 @@ void LLPanelObject::getState( )
{
// since 'None' is no longer an option in the combo box
// use 'Plane' as an equivalent sculpt type
- mCtrlSculptType->setCurrentByID(LLSD(LL_SCULPT_TYPE_PLANE));
+ mCtrlSculptType->setSelectedByValue(LLSD(LL_SCULPT_TYPE_PLANE), true);
}
else
{
- mCtrlSculptType->setCurrentByID(LLSD(sculpt_stitching));
+ mCtrlSculptType->setSelectedByValue(LLSD(sculpt_stitching), true);
}
mCtrlSculptType->setEnabled(editable && !isMesh);
}
diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml
index 31b6fc77f5..e51c50d977 100644
--- a/indra/newview/skins/default/colors.xml
+++ b/indra/newview/skins/default/colors.xml
@@ -84,6 +84,9 @@
name="LtYellow"
value="1 1 .79 1" />
<color
+ name="DrYellow"
+ value="1 0.86 0 1" />
+ <color
name="LtOrange"
value="1 .85 .73 1" />
<color
@@ -508,6 +511,9 @@
name="MenuPopupBgColor"
reference="DkGray2" />
<color
+ name="ModelUploaderLabels"
+ value="1 0.6 0 1" />
+ <color
name="MultiSliderDisabledThumbColor"
reference="Black" />
<color
diff --git a/indra/newview/skins/default/textures/green_checkmark.png b/indra/newview/skins/default/textures/green_checkmark.png
new file mode 100644
index 0000000000..d2a5b348dc
--- /dev/null
+++ b/indra/newview/skins/default/textures/green_checkmark.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/red_x.png b/indra/newview/skins/default/textures/red_x.png
new file mode 100644
index 0000000000..a61202f09b
--- /dev/null
+++ b/indra/newview/skins/default/textures/red_x.png
Binary files differ
diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index 799cd907dc..8078766203 100644
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -279,9 +279,9 @@ with the same filename but different name
<texture name="menu_separator" file_name="navbar/FileMenu_Divider.png" scale.left="4" scale.top="166" scale.right="0" scale.bottom="0" />
- <texture name="ModelImport_Status_Good" file_name="lag_status_good.tga" preload="false"/>
+ <texture name="ModelImport_Status_Good" file_name="green_checkmark.png" preload="false"/>
<texture name="ModelImport_Status_Warning" file_name="lag_status_warning.tga" preload="false"/>
- <texture name="ModelImport_Status_Error" file_name="lag_status_critical.tga" preload="false"/>
+ <texture name="ModelImport_Status_Error" file_name="red_x.png" preload="false"/>
<texture name="MouseLook_View_Off" file_name="bottomtray/MouseLook_view_off.png" preload="false" />
<texture name="MouseLook_View_On" file_name="bottomtray/MouseLook_view_on.png" preload="false" />
diff --git a/indra/newview/skins/default/xui/en/floater_model_preview.xml b/indra/newview/skins/default/xui/en/floater_model_preview.xml
index 522ffa7232..cae6445b02 100755
--- a/indra/newview/skins/default/xui/en/floater_model_preview.xml
+++ b/indra/newview/skins/default/xui/en/floater_model_preview.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater can_close="true" can_drag_on_left="false" can_minimize="false"
- can_resize="true" height="550" min_height="550" min_width="620"
- name="Model Preview" title="Upload Model" width="620"
+ can_resize="false" height="480" min_height="480" min_width="940"
+ name="Model Preview" title="Upload Model" width="940"
help_topic="upload_model" >
<string name="status_idle"></string>
@@ -26,684 +26,1404 @@
<string name="decomposing">Analyzing...</string>
<string name="simplifying">Simplifying...</string>
<string name="tbd">TBD</string>
-
-
- <text left="15" bottom="25" follows="top|left" height="15" name="name_label">
- Name:
- </text>
- <line_editor bottom_delta="20" follows="top|left|right" height="19" max_length_bytes="64"
- name="description_form" prevalidate_callback="ascii" width="290" />
-
- <text bottom_delta="20" left="15" follows="left|top" height="15" name="model_category_label" text_color="White">
- What does this model represent?
- </text>
- <combo_box top_pad="1" follows="left|top" height="23"
- name="model_category_combo" width="200">
- <combo_box.drop_down_button
- label_color="White"/>
- <combo_item name="Choose one" label="Choose One..." value="MUT_Unspecified"/>
- <combo_item name="Avatar shape" label="Avatar shape" value="MUT_AvatarShape"/>
- <combo_item name="Avatar attachment" label="Avatar attachment" value="MUT_AvatarAttachment"/>
- <combo_item name="Building Component" label="Building Component" value="MUT_BuildingComponent"/>
- <combo_item name="Moving object (vehicle, animal)" label="Moving object (vehicle, animal)" value="MUT_MovingObject"/>
- <combo_item name="Large, non moving etc" label="Large, non moving etc" value="MUT_LargeStationary"/>
- <combo_item name="Smaller, non-moving etc" label="Smaller, non-moving etc" value="MUT_SmallStationary"/>
- <combo_item name="Not really any of these" label="Not really any of these" value="MUT_Other"/>
- </combo_box>
-
- <text bottom_delta="20" left="15" follows="left|top" height="15" name="lod_label">
- Preview:
- </text>
- <combo_box bottom_delta="20" follows="left|top" height="18"
- name="preview_lod_combo" width="240" tool_tip="LOD to view in preview render">
- <combo_item name="high">
- Level of Detail: High
- </combo_item>
- <combo_item name="medium">
- Level of Detail: Medium
- </combo_item>
- <combo_item name="low">
- Level of Detail: Low
- </combo_item>
- <combo_item name="lowest">
- Level of Detail: Lowest
- </combo_item>
- </combo_box>
-
- <menu_button follows="top|left"
- image_hover_unselected="Toolbar_Left_Over"
- image_overlay="OptionsMenu_Off"
- image_selected="Toolbar_Left_Selected"
- image_unselected="Toolbar_Left_Off"
- layout="topleft"
- left_pad="5"
- name="options_gear_btn"
- width="31"
- height="25"/>
- <!-- Placeholder panel for 3D preview render -->
- <panel
- name="preview_panel"
- left="15"
- bevel_style="none"
- border_style="line"
- border="true"
- width="290"
- height="290"
- follows="all"/>
-
- <text
- font="SansSerif"
- bottom_delta="15"
- left_delta="0"
- name="warning_title"
- text_color="Yellow"
- visible="false">
- WARNING:
- </text>
- <text
- text_color="White"
- height="40"
- width="290"
- top_delta="15"
- left_delta="0"
- name="warning_message"
- parse_urls="true"
- wrap="true"
- visible="false">
- You will not be able to complete the final upload of this model to the Second Life servers. [[VURL] Find out how] to get enabled for mesh model uploads.</text>
<text text_color="Yellow" left="10" bottom_delta="0" width="290" height="15" follows="bottom|left|right" name="status">[STATUS]</text>
- <text
- height="26"
- top_pad="5"
- left_delta="0"
- name="weights_text_left"
- width="80"
- word_wrap="true"
- >
-Download:
-Physics:
- </text>
- <text
- height="26"
- top_delta="0"
- left_pad="0"
- name="weights_left"
- width="70"
- word_wrap="true"
- >
-[ST]
-[PH]
- </text>
- <text
- height="26"
- top_delta="0"
- left_pad="0"
- name="weights_text_right"
- width="80"
- word_wrap="true"
- >
-Server:
-Prim equivs:
- </text>
- <text
- height="26"
- top_delta="0"
- left_pad="0"
- name="weights_right"
- width="70"
- word_wrap="true"
- >
-[SIM]
-[EQ]
- </text>
-
-<!--
- <text
- height="65"
- top_delta="0"
- left_delta="70"
- name="price_breakdown_text"
- width="80"
- word_wrap="true"
- >
-Streaming:
-Physics:
-Instances:
-Textures:
-Model:
- </text>
-
- <text
- height="65"
- top_delta="0"
- left_delta="80"
- name="price_breakdown"
- width="65"
- word_wrap="true"
- >
-L$ [STREAMING]
-L$ [PHYSICS]
-L$ [INSTANCES]
-L$ [TEXTURES]
-L$ [MODEL]
- </text>
- -->
-
- <tab_container
- follows="right|top|bottom"
- top="15"
- left="310"
- height="470"
- width="300"
- name="import_tab"
- border="true"
- tab_position="top">
-
- <!-- LOD PANEL -->
+<panel
+ follows="top|left"
+ height="455"
+ layout="topleft"
+ left="3"
+ name="left_panel"
+ top_pad="10"
+ width="630">
<panel
- border="true"
- label="Level of Detail"
- name="lod_panel"
- help_topic="upload_model_lod">
-
- <!-- LOD TABLE-->
- <panel
- follows="top|left"
- name="lod table"
- left="0"
- top="0"
- width="300"
- height="163"
- visible="true"
- border="true"
- bevel_style="none" bg_alpha_color="0 0 0 0" bg_opaque_color="0 0 0 0.3">
-
- <text left="10" width="240" bottom="20" height="15" follows="left|top" name="lod_table_header">
- Select Level of Detail:
- </text>
-
- <text valign="center" halign="center" bg_visible="true" bottom_delta="16" left="75" name="triangles" width="65" height="18" follows="left|top" value="Triangles"/>
- <text valign="center" halign="center" bg_visible="true" left_pad="0" width="65" name="vertices" height="18" follows="left|top" value="Vertices"/>
- <text valign="center" halign="center" left_pad="0" name="status" width="65" bg_visible="true" height="18" follows="left|top" value="Status"/>
-
- <text valign="center" halign="center" bg_visible="true" name="high_label" left="10" top_pad="0" width="65" height="18" follows="left|top" value="High"/>
- <text valign="center" halign="center" bg_visible="true" name="high_triangles" left_pad="0" width="65" height="18" follows="left|top" value="0"/>
- <text valign="center" halign="center" bg_visible="true" name="high_vertices" left_pad="0" width="65" height="18" follows="left|top" value="0"/>
- <text valign="center" halign="center" bg_visible="true" name="high_status" left_pad="0" width="65" height="18" follows="left|top" value=""/>
- <icon height="16" width="16" image_name="lag_status_critical.tga" mouse_opaque="true" name="status_icon_high" left_delta="20" top_delta="0" />
-
- <text valign="center" halign="center" bg_visible="true" name="medium_label" left="10" top_pad="0" width="65" height="18" follows="left|top" value="Medium"/>
- <text valign="center" halign="center" bg_visible="true" name="medium_triangles" left_pad="0" width="65" height="18" follows="left|top" value="0"/>
- <text valign="center" halign="center" bg_visible="true" name="medium_vertices" left_pad="0" width="65" height="18" follows="left|top" value="0"/>
- <text valign="center" halign="center" bg_visible="true" name="medium_status" left_pad="0" width="65" height="18" follows="left|top" value=""/>
- <icon height="16" width="16" image_name="lag_status_critical.tga" mouse_opaque="true" name="status_icon_medium" left_delta="20" top_delta="0" />
-
- <text valign="center" halign="center" bg_visible="true" name="low_label" left="10" top_pad="0" width="65" height="18" follows="left|top" value="Low"/>
- <text valign="center" halign="center" bg_visible="true" name="low_triangles" left_pad="0" width="65" height="18" follows="left|top" value="0"/>
- <text valign="center" halign="center" bg_visible="true" name="low_vertices" left_pad="0" width="65" height="18" follows="left|top" value="0"/>
- <text valign="center" halign="center" bg_visible="true" name="low_status" left_pad="0" width="65" height="18" follows="left|top" value=""/>
- <icon height="16" width="16" image_name="lag_status_critical.tga" mouse_opaque="true" name="status_icon_low" left_delta="20" top_delta="0" />
-
- <text valign="center" halign="center" bg_visible="true" name="lowest_label" left="10" top_pad="0" width="65" height="18" follows="left|top" value="Lowest"/>
- <text valign="center" halign="center" bg_visible="true" name="lowest_triangles" left_pad="0" width="65" height="18" follows="left|top" value="0"/>
- <text valign="center" halign="center" bg_visible="true" name="lowest_vertices" left_pad="0" width="65" height="18" follows="left|top" value="0"/>
- <text valign="center" halign="center" bg_visible="true" name="lowest_status" left_pad="0" width="65" height="18" follows="left|top" value=""/>
- <icon height="16" width="16" image_name="lag_status_critical.tga" mouse_opaque="true" name="status_icon_lowest" left_delta="20" top_delta="0" />
-
- <text left="10" width="240" height="15" top_pad="15" follows="left|top" name="lod_table_footer">
- Level of Detail: [DETAIL]
- </text>
-
- <icon height="16" width="16" left="20" follows="left|top" name="lod_status_message_icon"/>
- <text left_pad="5" width="230" height="28" follows="left|top" top_pad="-15" wrap="true" name="lod_status_message_text"/>
- </panel>
-
- <!-- LOD MESH-->
- <panel
- follows="top|left"
- name="mesh"
- left="0"
- top_pad="0"
- width="300"
- height="237"
- visible="true"
- border="true"
- bevel_style="none" bg_alpha_color="0 0 0 0" bg_opaque_color="0 0 0 0.3">
-
- <text top_pad="5" left="10" name="mesh_label" height="15" follows="left|top">
- Mesh
- </text>
-
- <radio_group follows="top|left" height="210" left="30" name="lod_file_or_limit" width="240" value="lod_from_file">
- <radio_item bottom="195" label="Load from file" name="lod_from_file"/>
- <radio_item bottom="150" label="Auto generate" name="lod_auto_generate"/>
- <radio_item bottom="0" label="None" name="lod_none"/>
- </radio_group>
-
- <line_editor follows="left|top" bottom_delta="-170" width="140" left="45" value="" name="lod_file" height="20"/>
- <button bottom_delta="3" name="lod_browse" label="Browse..." left_pad="5" follows="left|top" width="70" height="25"/>
-
- <combo_box follows="top|left" name="lod_mode" top_pad="22" width="100" left="45" height="20">
- <combo_item name="triangle_limit">
- Triangle Limit
- </combo_item>
- <combo_item name="error_threshold">
- Error Threshold
- </combo_item>
- </combo_box>
- <spinner follows="top|left" name="lod_triangle_limit" increment="10" left_pad="5" height="20" width="100" decimal_digits="0" enabled="true"/>
- <spinner left_delta="0" bottom_delta="0" increment="0.01" follows="top|left" name="lod_error_threshold" min_val="0" max_val="100" height="20" width="100" decimal_digits="3" visible="false" enabled="true"/>
-
- <text follows="top|left" name="build_operator_text" left="45" top_pad="10" width="100" height="15" text_readonly_color="LabelDisabledColor">
- Build Operator:
- </text>
- <text follows="top|left" name="queue_mode_text" left_pad="5" width="100" height="15" text_readonly_color="LabelDisabledColor">
- Queue Mode:
- </text>
- <combo_box follows="top|left" name="build_operator" top_pad="5" left="45" width="100" height="20">
- <combo_item name="edge_collapse">
- Edge Collapse
- </combo_item>
- <combo_item name="half_edge_collapse">
- Half Edge Collapse
- </combo_item>
- </combo_box>
-
- <combo_box follows="top|left" name="queue_mode" left_pad="5" width="100" height="20">
- <combo_item name="greedy">
- Greedy
- </combo_item>
- <combo_item name="lazy">
- Lazy
- </combo_item>
- <combo_item name="independent">
- Independent
- </combo_item>
- </combo_box>
-
- <text top_pad="10" name="border_mode_text" left="45" follows="left|top" width="100" height="15" text_readonly_color="LabelDisabledColor">
- Border Mode:
- </text>
-
- <text left_pad="5" name="share_tolderance_text" follows="left|top" width="100" height="15" text_readonly_color="LabelDisabledColor">
- Share Tolerance:
- </text>
-
- <combo_box follows="left|top" left="45" height="20" name="border_mode" width="100">
- <combo_item name="border_unlock">
- Unlock
- </combo_item>
- <combo_item name="border_lock">
- Lock
- </combo_item>
- </combo_box>
- <spinner follows="left|top" name="share_tolerance" left_pad="5" width="100" decimal_digits="5" initial_value="0.00001" height="20"/>
- </panel>
-
- <!-- LOD GENERATE NORMALS-->
- <panel
- follows="top|left"
- name="generate normals"
- left="0"
- top_pad="0"
- width="300"
- height="46"
- visible="true"
- border="true"
- bevel_style="none" bg_alpha_color="0 0 0 0" bg_opaque_color="0 0 0 0.3">
-
- <text left="10" name="gen_normals_label" top_pad="5" follows="top|left" width="240" height="15">
- Generate Normals
- </text>
- <text left="35" top_pad="5" follows="top|left" width="100" height="15" name="crease_label">
- Crease Angle:
- </text>
- <spinner follows="top|left" left_pad="5" min_val="0" max_val="180" value="75" width="60" height="20" name="crease_angle"/>
- </panel>
- </panel>
-
- <!-- PANEL -->
- <panel
- border="true"
- label="Physics"
- name="physics_panel"
- help_topic="upload_model_physics">
-
- <!-- PHYSICS GEOMETRY-->
- <panel
- follows="top|left"
- name="physics geometry"
- left="0"
- top="0"
- width="300"
- height="65"
- visible="true"
- border="true"
- bevel_style="none" bg_alpha_color="0 0 0 0" bg_opaque_color="0 0 0 0.3">
-
- <radio_group follows="top|left" top="10" width="240" height="40" name="physics_load_radio" value="physics_load_from_file">
- <radio_item bottom="0" name="physics_load_from_file" label="File:"/>
- <radio_item bottom="23" name="physics_use_lod" label="Use Level of Detail:"/>
- </radio_group>
-
- <combo_box left="150" top="10" follows="left|top" height="18"
- name="physics_lod_combo" width="130" tool_tip="LOD to use for physics shape">
- <combo_item name="physics_lowest">
- Lowest
- </combo_item>
- <combo_item name="physics_low">
- Low
- </combo_item>
- <combo_item name="physics_medium">
- Medium
- </combo_item>
- <combo_item name="physics_high">
- High
- </combo_item>
- </combo_box>
-
- <line_editor follows="left|top" top_pad="5" width="140" left="60" value="" name="physics_file" height="20"/>
- <button left_pad="10" name="physics_browse" label="Browse..." follows="left|top" width="70" height="20"/>
-
- <!--
- <check_box name="physics_optimize" follows="left|top" width="130" left="10" top_pad="5" height="20" label="Optimize"/>
- <check_box name="physics_use_hull" follows="left|top" width="130" left_pad="5" height="20" label="Use Convex Hull"/>
- -->
- </panel>
-
-
- <!-- PHYSICS ANALYSIS-->
- <panel
- follows="top|left"
- name="physics analysis"
- top_pad="0"
- left="0"
- width="300"
- height="130"
- visible="true"
- border="true"
- bevel_style="none" bg_alpha_color="0 0 0 0" bg_opaque_color="0 0 0 0.3">
-
- <text follows="left|top" bottom="40" height="30" left="10" name="method_label" font="SansSerifBig">
- Step 1: Analysis
- </text>
-
- <text name="analysis_method_label" top_pad="5" width="50" follows="top|left" height="15">
- Method:
- </text>
- <combo_box name="Method" follows="top|left" left_pad="5" bottom_delta="2" height="20" width="80"/>
- <text left="160" name="quality_label" bottom_delta="-2" width="50" follows="top|left" height="15">
- Quality:
- </text>
- <combo_box name="Decompose Quality" bottom_delta="2" follows="top|left" left_pad="5" height="20" width="80"/>
-
- <slider name="Smooth" left="10" width="280" follows="top|left" top_pad="10" height="20" label="Smooth:"/>
-
- <check_box name="Close Holes (Slow)" follows="top|left" top_pad="10" height="15" label="Close Holes (slow)"/>
-
- <button left="200" bottom_delta="0" width="90" follows="top|left" label="Analyze" name="Decompose" height="20"/>
- <button left="200" bottom_delta="0" width="90" follows="top|left" label="Cancel" name="decompose_cancel" visble="false" height="20"/>
- </panel>
-
-
- <!-- PHYSICS SIMPLIFICATION -->
- <panel
- follows="top|left"
- name="physics simplification"
- left="0"
- top_pad="0"
- width="300"
- height="150"
- visible="true"
- border="true"
- bevel_style="none" bg_alpha_color="0 0 0 0" bg_opaque_color="0 0 0 0.3">
-
- <text follows="left|top" bottom="40" height="30" left="10" name="second_step_label" font="SansSerifBig">
- Step 2: Simplification
- </text>
-
- <text left="10" name="simp_method_header" top_pad="5" height="15" width="140" follows="top|left">
- Method:
+ follows="all"
+ height="50"
+ layout="top|left"
+ left="3"
+ name="model_name_representation_panel"
+ width="525">
+ <text
+ follows="top|left"
+ layout="topleft"
+ height="15"
+ left="15"
+ name="name_label"
+ text_color="White"
+ top="0"
+ width="290">
+ Model name:
</text>
-
- <combo_box left_pad="5" height="20" width="120" follows="top|left" name="Simplify Method"/>
-
- <slider left="10" name="Combine Quality" label="Passes:" label_width="120" width="270" follows="top|left" top_pad="10" height="20"/>
- <slider name="Detail Scale" label="Detail Scale:" label_width="120" width="270" follows="top|left" top_pad="10" height="20"/>
- <slider name="Retain%" label="Retain:" label_width="120" width="270" follows="top|left" bottom_delta="0" left_delta="0" visible="false" height="20"/>
- <button left="190" width="90" follows="top|left" label="Simplify" name="Simplify" height="20"/>
- <button left="190" bottom_delta="0" width="90" follows="top|left" label="Cancel" name="simplify_cancel" height="20"/>
-
- </panel>
-
- <!-- INFO PANEL -->
- <panel
- left="0"
- top_pad="0"
- width="300"
- height="100"
- follows="left|top"
- name="physics info"
- visible="true"
- border="true"
- bevel_style="none" bg_alpha_color="0 0 0 0" bg_opaque_color="0 0 0 0.3">
-
- <slider name="physics_explode" follows="top|left" top="10" left="10" label="Preview Spread:" min_val="0.0" max_val="3.0" height="20" width="280"/>
-
- <text follows="top|left" name="physics_triangles" top_pad="10" height="15" left="10">
- Triangles: [TRIANGLES]
+ <line_editor
+ follows="top|left"
+ layout="topleft"
+ height="19"
+ max_length_bytes="64"
+ name="description_form"
+ prevalidate_callback="ascii"
+ top_pad="5"
+ width="290" />
+ <text
+ follows="left|top"
+ height="15"
+ layout="topleft"
+ left_pad="15"
+ name="model_category_label"
+ text_color="White"
+ top="0"
+ width="200">
+ This model represents...
</text>
- <text follows="top|left" name="physics_points" top_pad="5" height="15">
- Vertices: [POINTS]
- </text>
- <text follows="top|left" name="physics_hulls" top_pad="5" height="15">
- Hulls: [HULLS]
- </text>
-
-
- </panel>
+ <combo_box
+ follows="left|top"
+ height="23"
+ left_pad="10"
+ name="model_category_combo"
+ top_pad="10"
+ width="200">
+ <combo_box.drop_down_button
+ label_color="White"/>
+ <combo_item name="Choose one" label="Choose One..." value="MUT_Unspecified"/>
+ <combo_item name="Avatar shape" label="Avatar shape" value="MUT_AvatarShape"/>
+ <combo_item name="Avatar attachment" label="Avatar attachment" value="MUT_AvatarAttachment"/>
+ <combo_item name="Moving object (vehicle, animal)" label="Moving object (vehicle, animal)" value="MUT_MovingObject"/>
+ <combo_item name="Building Component" label="Building Component" value="MUT_BuildingComponent"/>
+ <combo_item name="Large, non moving etc" label="Large, non moving etc" value="MUT_LargeStationary"/>
+ <combo_item name="Smaller, non-moving etc" label="Smaller, non-moving etc" value="MUT_SmallStationary"/>
+ <combo_item name="Not really any of these" label="Not really any of these" value="MUT_Other"/>
+ </combo_box>
</panel>
-
- <!-- MODIFIERS PANEL -->
+ <tab_container
+ follows="top|left"
+ top_pad="15"
+ left="0"
+ height="300"
+ width="625"
+ name="import_tab"
+ tab_position="top">
+ <!-- LOD PANEL -->
+ <panel
+ help_topic="upload_model_lod"
+ label="Level of Detail"
+ layout="topleft"
+ name="lod_panel"
+ title="Level of Detail">
+ <view_border
+ bevel_style="none"
+ follows="top|left"
+ height="275"
+ layout="topleft"
+ left="3"
+ name="lod_tab_border"
+ top_pad="0"
+ width="619" />
+ <text
+ follows="left|top"
+ height="18"
+ initial_value="Source"
+ layout="topleft"
+ left="75"
+ name="source"
+ text_color="ModelUploaderLabels"
+ top="15"
+ valign="center"
+ value="Source"
+ width="335" />
+ <text
+ follows="left|top"
+ halign="right"
+ height="18"
+ initial_value="Triangles"
+ layout="topleft"
+ left_pad="0"
+ name="triangles"
+ text_color="ModelUploaderLabels"
+ top_delta="0"
+ valign="center"
+ value="Triangles"
+ width="65" />
+ <text
+ follows="left|top"
+ halign="right"
+ height="18"
+ initial_value="Vertices"
+ layout="topleft"
+ left_pad="0"
+ name="vertices"
+ text_color="ModelUploaderLabels"
+ valign="center"
+ value="Vertices"
+ width="65" />
+ <text
+ follows="left|top"
+ height="18"
+ initial_value="High"
+ layout="topleft"
+ left="10"
+ name="high_label"
+ text_color="ModelUploaderLabels"
+ top_pad="10"
+ valign="center"
+ value="High"
+ width="65" />
+ <combo_box
+ follows="top|left"
+ height="20"
+ layout="topleft"
+ left_pad="0"
+ name="lod_source_high"
+ top_delta="-3"
+ width="135">
+ <item
+ id="Load from file"
+ value="Load from file" />
+ <item
+ id="Generate"
+ value="Generate" />
+ </combo_box>
+ <line_editor
+ follows="left|top"
+ height="20"
+ initial_value=""
+ layout="topleft"
+ left_pad="5"
+ name="lod_file_high"
+ top_delta="0"
+ value=""
+ width="120" />
+ <button
+ follows="left|top"
+ height="20"
+ label="Browse..."
+ layout="topleft"
+ left_pad="5"
+ name="lod_browse_high"
+ top_delta="0"
+ width="70" />
+ <combo_box
+ follows="top|left"
+ height="20"
+ layout="topleft"
+ left="215"
+ name="lod_mode_high"
+ top_delta="0"
+ visible="false"
+ width="135">
+ <item
+ id="Triangle Limit"
+ value="Triangle Limit" />
+ <item
+ id="Error Threshold"
+ value="Error Threshold" />
+ </combo_box>
+ <spinner
+ decimal_digits="0"
+ follows="top|left"
+ height="20"
+ increment="10"
+ layout="topleft"
+ left_pad="5"
+ name="lod_triangle_limit_high"
+ visible="false"
+ width="55" />
+ <spinner
+ follows="top|left"
+ height="20"
+ increment="0.01"
+ layout="topleft"
+ left_delta="0"
+ max_val="100"
+ name="lod_error_threshold_high"
+ top_delta="0"
+ visible="false"
+ width="55" />
+ <text
+ follows="left|top"
+ halign="right"
+ height="18"
+ initial_value="0"
+ layout="topleft"
+ left_pad="0"
+ name="high_triangles"
+ valign="center"
+ value="0"
+ width="65" />
+ <text
+ follows="left|top"
+ halign="right"
+ height="18"
+ initial_value="0"
+ layout="topleft"
+ left_pad="0"
+ name="high_vertices"
+ valign="center"
+ value="0"
+ width="65" />
+ <text
+ follows="left|top"
+ halign="center"
+ height="18"
+ initial_value=""
+ layout="topleft"
+ left_pad="0"
+ name="high_status"
+ valign="center"
+ value=""
+ width="65" />
+ <icon
+ height="16"
+ image_name="red_x.png"
+ layout="topleft"
+ left_delta="20"
+ mouse_opaque="true"
+ name="status_icon_high"
+ top_delta="0"
+ width="16" />
+ <text
+ follows="left|top"
+ height="18"
+ initial_value="Medium"
+ layout="topleft"
+ left="10"
+ name="medium_label"
+ text_color="ModelUploaderLabels"
+ top_pad="15"
+ valign="center"
+ value="Medium"
+ width="65" />
+ <combo_box
+ follows="top|left"
+ height="20"
+ layout="topleft"
+ left_pad="0"
+ name="lod_source_medium"
+ top_delta="-3"
+ width="135">
+ <item
+ id="Load from file"
+ value="Load from file" />
+ <item
+ id="Generate"
+ value="Generate" />
+ <item
+ id="Use LoD above"
+ value="Use LoD above" />
+ </combo_box>
+ <line_editor
+ follows="left|top"
+ height="20"
+ initial_value=""
+ layout="topleft"
+ left_pad="5"
+ name="lod_file_medium"
+ top_delta="0"
+ value=""
+ visible="false"
+ width="120" />
+ <button
+ follows="left|top"
+ height="20"
+ label="Browse..."
+ layout="topleft"
+ left_pad="5"
+ name="lod_browse_medium"
+ top_delta="0"
+ visible="false"
+ width="70" />
+ <combo_box
+ follows="top|left"
+ height="20"
+ layout="topleft"
+ left="215"
+ name="lod_mode_medium"
+ top_delta="0"
+ width="135">
+ <item
+ id="Triangle Limit"
+ value="Triangle Limit" />
+ <item
+ id="Error Threshold"
+ value="Error Threshold" />
+ </combo_box>
+ <spinner
+ decimal_digits="0"
+ follows="top|left"
+ height="20"
+ increment="10"
+ layout="topleft"
+ left_pad="5"
+ name="lod_triangle_limit_medium"
+ width="55" />
+ <spinner
+ follows="top|left"
+ height="20"
+ increment="0.01"
+ layout="topleft"
+ left_delta="0"
+ max_val="100"
+ name="lod_error_threshold_medium"
+ top_delta="0"
+ visible="false"
+ width="55" />
+ <text
+ follows="left|top"
+ halign="right"
+ height="18"
+ initial_value="0"
+ layout="topleft"
+ left_pad="0"
+ name="medium_triangles"
+ valign="center"
+ value="0"
+ width="65" />
+ <text
+ follows="left|top"
+ halign="right"
+ height="18"
+ initial_value="0"
+ layout="topleft"
+ left_pad="0"
+ name="medium_vertices"
+ valign="center"
+ value="0"
+ width="65" />
+ <text
+ follows="left|top"
+ halign="center"
+ height="18"
+ initial_value=""
+ layout="topleft"
+ left_pad="0"
+ name="medium_status"
+ valign="center"
+ value=""
+ width="65" />
+ <icon
+ height="16"
+ image_name="red_x.png"
+ layout="topleft"
+ left_delta="20"
+ mouse_opaque="true"
+ name="status_icon_medium"
+ top_delta="0"
+ width="16" />
+ <text
+ follows="left|top"
+ height="18"
+ initial_value="Low"
+ layout="topleft"
+ left="10"
+ name="low_label"
+ text_color="ModelUploaderLabels"
+ top_pad="15"
+ valign="center"
+ value="Low"
+ width="65" />
+ <combo_box
+ follows="top|left"
+ height="20"
+ layout="topleft"
+ left_pad="0"
+ name="lod_source_low"
+ top_delta="-3"
+ width="135">
+ <item
+ id="Load from file"
+ value="Load from file" />
+ <item
+ id="Generate"
+ value="Generate" />
+ <item
+ id="Use LoD above"
+ value="Use LoD above" />
+ </combo_box>
+ <line_editor
+ follows="left|top"
+ height="20"
+ initial_value=""
+ layout="topleft"
+ left_pad="5"
+ name="lod_file_low"
+ top_delta="0"
+ value=""
+ visible="false"
+ width="120" />
+ <button
+ follows="left|top"
+ height="20"
+ label="Browse..."
+ layout="topleft"
+ left_pad="5"
+ name="lod_browse_low"
+ top_delta="0"
+ visible="false"
+ width="70" />
+ <combo_box
+ follows="top|left"
+ height="20"
+ layout="topleft"
+ left="215"
+ name="lod_mode_low"
+ top_delta="0"
+ width="135">
+ <item
+ id="Triangle Limit"
+ value="Triangle Limit" />
+ <item
+ id="Error Threshold"
+ value="Error Threshold" />
+ </combo_box>
+ <spinner
+ decimal_digits="0"
+ follows="top|left"
+ height="20"
+ increment="10"
+ layout="topleft"
+ left_pad="5"
+ name="lod_triangle_limit_low"
+ width="55" />
+ <spinner
+ follows="top|left"
+ height="20"
+ increment="0.01"
+ layout="topleft"
+ left_delta="0"
+ max_val="100"
+ name="lod_error_threshold_low"
+ top_delta="0"
+ visible="false"
+ width="55" />
+ <text
+ follows="left|top"
+ halign="right"
+ height="18"
+ initial_value="0"
+ layout="topleft"
+ left_pad="0"
+ name="low_triangles"
+ valign="center"
+ value="0"
+ width="65" />
+ <text
+ follows="left|top"
+ halign="right"
+ height="18"
+ initial_value="0"
+ layout="topleft"
+ left_pad="0"
+ name="low_vertices"
+ valign="center"
+ value="0"
+ width="65" />
+ <text
+ follows="left|top"
+ halign="center"
+ height="18"
+ initial_value=""
+ layout="topleft"
+ left_pad="0"
+ name="low_status"
+ valign="center"
+ value=""
+ width="65" />
+ <icon
+ height="16"
+ image_name="red_x.png"
+ layout="topleft"
+ left_delta="20"
+ mouse_opaque="true"
+ name="status_icon_low"
+ top_delta="0"
+ width="16" />
+ <text
+ follows="left|top"
+ height="18"
+ initial_value="Lowest"
+ layout="topleft"
+ left="10"
+ name="lowest_label"
+ text_color="ModelUploaderLabels"
+ top_pad="15"
+ valign="center"
+ value="Lowest"
+ width="65" />
+ <combo_box
+ follows="top|left"
+ height="20"
+ layout="topleft"
+ left_pad="0"
+ name="lod_source_lowest"
+ top_delta="-3"
+ width="135">
+ <item
+ id="Load from file"
+ value="Load from file" />
+ <item
+ id="Generate"
+ value="Generate" />
+ <item
+ id="Use LoD above"
+ value="Use LoD above" />
+ </combo_box>
+ <line_editor
+ follows="left|top"
+ height="20"
+ initial_value=""
+ layout="topleft"
+ left_pad="5"
+ name="lod_file_lowest"
+ top_delta="0"
+ value=""
+ visible="false"
+ width="120" />
+ <button
+ follows="left|top"
+ height="20"
+ label="Browse..."
+ layout="topleft"
+ left_pad="5"
+ name="lod_browse_lowest"
+ top_delta="0"
+ visible="false"
+ width="70" />
+ <combo_box
+ follows="top|left"
+ height="20"
+ layout="topleft"
+ left="215"
+ name="lod_mode_lowest"
+ top_delta="0"
+ width="135">
+ <item
+ id="Triangle Limit"
+ value="Triangle Limit" />
+ <item
+ id="Error Threshold"
+ value="Error Threshold" />
+ </combo_box>
+ <spinner
+ decimal_digits="0"
+ follows="top|left"
+ height="20"
+ increment="10"
+ layout="topleft"
+ left_pad="5"
+ name="lod_triangle_limit_lowest"
+ width="55" />
+ <spinner
+ follows="top|left"
+ height="20"
+ increment="0.01"
+ layout="topleft"
+ left_delta="0"
+ max_val="100"
+ name="lod_error_threshold_lowest"
+ top_delta="0"
+ visible="false"
+ width="55" />
+ <text
+ follows="left|top"
+ halign="right"
+ height="18"
+ initial_value="0"
+ layout="topleft"
+ left_pad="0"
+ name="lowest_triangles"
+ valign="center"
+ value="0"
+ width="65" />
+ <text
+ follows="left|top"
+ halign="right"
+ height="18"
+ initial_value="0"
+ layout="topleft"
+ left_pad="0"
+ name="lowest_vertices"
+ valign="center"
+ value="0"
+ width="65" />
+ <text
+ follows="left|top"
+ halign="center"
+ height="18"
+ initial_value=""
+ layout="topleft"
+ left_pad="0"
+ name="lowest_status"
+ valign="center"
+ value=""
+ width="65" />
+ <icon
+ height="16"
+ image_name="red_x.png"
+ layout="topleft"
+ left_delta="20"
+ mouse_opaque="true"
+ name="status_icon_lowest"
+ top_delta="0"
+ width="16" />
+ <icon
+ height="16"
+ layout="topleft"
+ left="10"
+ name="lod_status_message_icon"
+ top_pad="20"
+ width="16" />
+ <text
+ follows="left|top"
+ height="16"
+ layout="topleft"
+ left_pad="5"
+ name="lod_status_message_text"
+ top_delta="0"
+ width="584"
+ word_wrap="true"
+ wrap="true" />
+ <view_border
+ bevel_style="none"
+ follows="top|left"
+ height="0"
+ layout="topleft"
+ left="10"
+ name="lod_tab_border"
+ top_pad="20"
+ width="605" />
+ <check_box
+ follows="top|left"
+ height="15"
+ label="Generate Normals"
+ layout="topleft"
+ left="10"
+ name="gen_normals"
+ top_pad="20" />
+ <text
+ enabled="false"
+ follows="top|left"
+ height="15"
+ initial_value="Crease Angle:"
+ layout="topleft"
+ left="200"
+ name="crease_label"
+ top_delta="0"
+ value="Crease Angle:"
+ width="100" />
+ <spinner
+ enabled="false"
+ follows="top|left"
+ height="20"
+ initial_value="75"
+ layout="topleft"
+ left_pad="5"
+ max_val="180"
+ name="crease_angle"
+ value="75"
+ width="60" />
+ </panel>
+ <!-- PHYSYCS PANEL -->
+ <panel
+ help_topic="upload_model_physics"
+ label="Physics"
+ name="physics_panel">
+
+ <!-- ==== STEP 1: Level of Detail ==== -->
+ <view_border
+ bevel_style="none"
+ follows="top|left"
+ height="275"
+ layout="topleft"
+ left="3"
+ name="physics_tab_border"
+ top_pad="0"
+ width="619"/>
+ <panel
+ bg_alpha_color="0 0 0 0"
+ bg_opaque_color="0 0 0 0.3"
+ follows="top|left"
+ height="21"
+ left="18"
+ name="physics geometry"
+ top="15"
+ visible="true"
+ width="589">
+ <text
+ follows="top|left"
+ font="SansSerif"
+ height="20"
+ layout="topleft"
+ left="0"
+ name="first_step_name"
+ text_color="White"
+ top_pad="0"
+ width="210">
+ Step 1: Level of Detail
+ </text>
+ <combo_box
+ follows="left|top"
+ height="18"
+ left_pad="10"
+ name="physics_lod_combo"
+ width="130"
+ tool_tip="LOD to use for physics shape">
+ <combo_item name="choose_one"> Choose one... </combo_item>
+ <combo_item name="physics_high"> High </combo_item>
+ <combo_item name="physics_medium"> Medium </combo_item>
+ <combo_item name="physics_low"> Low </combo_item>
+ <combo_item name="physics_lowest"> Lowest </combo_item>
+ <combo_item name="load_from_file"> From file </combo_item>
+ </combo_box>
+ <line_editor
+ follows="left|top"
+ left_pad="10"
+ value=""
+ name="physics_file"
+ height="20"
+ width="154"/>
+ <button
+ follows="left|top"
+ height="20"
+ left_pad="4"
+ name="physics_browse"
+ label="Browse..."
+ width="70"/>
+ <!-- <check_box name="physics_optimize" follows="left|top" width="130" left="10" top_pad="5" height="20" label="Optimize"/>
+ <check_box name="physics_use_hull" follows="left|top" width="130" left_pad="5" height="20" label="Use Convex Hull"/> -->
+ </panel>
+
+ <!-- ==== STEP 2: Analyse ==== -->
+ <view_border
+ bevel_style="none"
+ follows="top|left"
+ height="0"
+ layout="topleft"
+ left="18"
+ name="physics_tab_border"
+ top_pad="15"
+ width="589"/>
+ <panel
+ bg_alpha_color="0 0 0 0"
+ bg_opaque_color="0 0 0 0.3"
+ height="65"
+ follows="top|left"
+ left="18"
+ name="physics analysis"
+ top_pad="15"
+ visible="true"
+ width="589">
+ <text
+ follows="left|top"
+ font="SansSerif"
+ height="20"
+ layout="topleft"
+ left="0"
+ name="method_label"
+ text_color="White"
+ top_pad="0">
+ Step 2: Analyse
+ </text>
+ <text
+ follows="top|left"
+ height="15"
+ layout="topleft"
+ name="analysis_method_label"
+ top_pad="10"
+ width="100">
+ Method:
+ </text>
+ <text
+ follows="top|left"
+ height="15"
+ name="quality_label"
+ layout="topleft"
+ left_pad="15"
+ width="100">
+ Quality:
+ </text>
+ <text
+ follows="top|left"
+ height="15"
+ name="smooth_method_label"
+ layout="topleft"
+ left_pad="15"
+ width="100">
+ Smooth:
+ </text>
+ <combo_box
+ follows="top|left"
+ layout="topleft"
+ left="0"
+ name="Method"
+ top_pad="0"
+ height="20"
+ width="100"/>
+ <combo_box
+ follows="top|left"
+ layout="topleft"
+ left_pad="15"
+ name="Decompose Quality"
+ height="20"
+ width="100"/>
+ <combo_box
+ height="20"
+ follows="top|left"
+ layout="topleft"
+ left_pad="15"
+ name="Cosine%"
+ width="100"/>
+ <check_box
+ follows="top|left"
+ label="Close Holes"
+ layout="topleft"
+ left_pad="10"
+ name="Close Holes (Slow)"
+ height="15"/>
+ <button
+ bottom="1"
+ follows="top|right"
+ height="20"
+ label="Analyze"
+ layout="bottomleft"
+ name="Decompose"
+ right="-1"
+ width="90"/>
+ <button
+ follows="top|left"
+ height="20"
+ label="Cancel"
+ layout="topleft"
+ left_delta="0"
+ name="decompose_cancel"
+ visible="false"
+ width="90"/>
+ </panel>
+
+ <!-- ==== STEP 3: Simplify ==== -->
+ <view_border
+ bevel_style="none"
+ follows="top|left"
+ height="0"
+ layout="topleft"
+ left="18"
+ name="physics_tab_border"
+ top_pad="15"
+ width="589"/>
+ <panel
+ bg_alpha_color="0 0 0 0"
+ bg_opaque_color="0 0 0 0.3"
+ follows="top|left"
+ height="66"
+ left="18"
+ name="physics simplification"
+ top_pad="15"
+ width="589">
+ <text
+ text_color="White"
+ follows="left|top"
+ height="20"
+ left="0"
+ name="second_step_label"
+ top_pad="0"
+ font="SansSerif">
+ Step 3: Simplify
+ </text>
+ <text
+ name="simp_method_header"
+ top_pad="10"
+ height="15"
+ width="100"
+ follows="top|left">
+ Method:
+ </text>
+ <text
+ follows="top|left"
+ left_pad="40"
+ name="pass_method_header"
+ height="15"
+ width="41">
+ Passes:
+ </text>
+ <text
+ follows="top|left"
+ left_pad="40"
+ name="Detail Scale label"
+ height="15"
+ width="80">
+ Detail scale:
+ </text>
+ <text
+ follows="top|left"
+ left_delta="0"
+ name="Retain%_label"
+ height="15"
+ width="80"
+ visible="false">
+ Retain:
+ </text>
+ <combo_box
+ follows="top|left"
+ height="20"
+ left="0"
+ name="Simplify Method"
+ top_pad="0"
+ width="100"/>
+ <combo_box
+ height="20"
+ follows="top|left"
+ left_pad="40"
+ name="Combine Quality"
+ width="41"
+ value="1">
+ </combo_box>
+ <spinner
+ follows="top|left"
+ name="Detail Scale"
+ height="20"
+ left_pad="40"
+ width="60"/>
+ <spinner
+ name="Retain%"
+ decimal_digits="0"
+ width="60"
+ follows="top|left"
+ height="20"
+ left_delta="0"
+ visible="false"/>
+ <button
+ follows="top|left"
+ height="20"
+ label="Simplify"
+ left_pad="40"
+ name="Simplify"
+ width="90"/>
+ <button
+ follows="top|left"
+ height="20"
+ label="Cancel"
+ layout="topleft"
+ left_delta="0"
+ name="simplify_cancel"
+ width="90"/>
+ </panel>
+
+ <!-- ==== Results ==== -->
+ <view_border
+ bevel_style="none"
+ follows="top|left"
+ height="0"
+ layout="topleft"
+ left="18"
+ name="physics_tab_border"
+ top_pad="15"
+ width="589"/>
+ <panel
+ bg_alpha_color="0 0 0 0"
+ bg_opaque_color="0 0 0 0.3"
+ follows="left|top"
+ height="16"
+ layout="topleft"
+ left="18"
+ name="physics info"
+ top_pad="15"
+ width="589">
+ <text
+ follows="top|left"
+ height="15"
+ layout="topleft"
+ left="0"
+ text_color="White"
+ top_pad="0"
+ name="results_text"
+ width="50">
+ Results:
+ </text>
+ <text
+ follows="top|left"
+ height="15"
+ layout="topleft"
+ left_pad="0"
+ text_color="White"
+ top_delta="0"
+ name="physics_triangles"
+ width="90">
+ Triangles: [TRIANGLES],
+ </text>
+ <text
+ follows="top|left"
+ height="15"
+ layout="topleft"
+ left_pad="0"
+ name="physics_points"
+ top_delta="0"
+ text_color="White"
+ width="85">
+ Vertices: [POINTS],
+ </text>
+ <text
+ follows="top|left"
+ height="15"
+ layout="topleft"
+ left_pad="0"
+ name="physics_hulls"
+ top_delta="0"
+ text_color="White">
+ Hulls: [HULLS]
+ </text>
+ </panel>
+ </panel>
+ <!-- MODIFIERS PANEL -->
+ <panel
+ label="Upload options"
+ name="modifiers_panel"
+ help_topic="upload_model_modifiers">
+ <view_border
+ bevel_style="none"
+ follows="top|left"
+ height="275"
+ layout="topleft"
+ left="3"
+ name="border"
+ top_pad="0"
+ width="619"/>
+ <text
+ follows="top|left"
+ height="16"
+ left="20"
+ name="scale_label"
+ text_color="White"
+ top="15"
+ width="140">
+ Scale (1=no scaling):
+ </text>
+ <spinner
+ height="20"
+ follows="top|left"
+ left_pad="10"
+ max_val="64.0"
+ min_val="0.01"
+ name="import_scale"
+ top_delta="-4"
+ value="1.0"
+ width="80"/>
+ <text
+ follows="top|left"
+ height="15"
+ left_pad="20"
+ name="dimensions_label"
+ text_color="White"
+ width="90">
+ Dimensions:
+ </text>
+ <text
+ follows="top|left"
+ height="15"
+ left_pad="0"
+ name="import_dimensions"
+ text_color="White"
+ width="140">
+ [X] X [Y] X [Z]
+ </text>
+ <check_box
+ height="15"
+ follows="top|left"
+ name="upload_textures"
+ label="Include textures"
+ label_text.text_color="White"
+ left="20"
+ top_pad="20"/>
+ <view_border
+ bevel_style="none"
+ follows="top|left"
+ height="0"
+ layout="topleft"
+ name="border"
+ top_pad="20"
+ width="579"/>
+ <text
+ follows="top|left"
+ height="15"
+ left="20"
+ name="include_label"
+ text_color="White"
+ top_pad="20"
+ width="150">
+ For avatar models only:
+ </text>
+ <check_box
+ follows="top|left"
+ height="15"
+ label="Include skin weight"
+ label_text.text_color="White"
+ name="upload_skin"
+ top_pad="15"/>
+ <check_box
+ follows="top|left"
+ height="15"
+ label="Include joint positions"
+ label_text.text_color="White"
+ name="upload_joints"
+ top_pad="15"/>
+ <text
+ follows="top|left"
+ height="15"
+ layout="topleft"
+ left="220"
+ name="pelvis_offset_label"
+ text_color="White"
+ top="134"
+ width="200">
+ Z offset (raise or lower avatar):
+ </text>
+ <spinner
+ follows="top|left"
+ height="20"
+ min_val="-3.00"
+ max_val="3.0"
+ name="pelvis_offset"
+ top_pad="10"
+ value="0.0"
+ width="80"/>
+ </panel>
+ </tab_container>
<panel
- border="true"
- label="Modifiers"
- name="modifiers_panel"
- help_topic="upload_model_modifiers">
-
- <text left="10" name="scale_label" width="90" bottom="30" follows="top|left" height="15">
- Scale:
- </text>
- <text left_pad="5" name="dimensions_label" width="140" follows="top|left" height="15">
- Dimensions:
- </text>
-
- <spinner left="10" height="20" follows="top|left" width="80" top_pad="5" value="1.0" min_val="0.01" max_val="64.0" name="import_scale"/>
-
- <text left_pad="20" height="15" width="140" name="import_dimensions" follows="top|left">
- [X] x [Y] x [Z] m
- </text>
-
- <text left="10" name="include_label" top_pad="20" follows="top|left" height="15">
- Include:
- </text>
-
- <check_box top_pad="5" name="upload_textures" height="15" follows="top|left" label="Textures"/>
- <check_box top_pad="5" name="upload_skin" height="15" follows="top|left" label="Skin weight"/>
- <check_box top_pad="5" left="20" name="upload_joints" height="15" follows="top|left" label="Joint positions"/>
-
- <text left="10" name="pelvis_offset_label" top_pad="4" width="90" bottom="30" follows="top|left" height="15">
- Pelvis Z Offset:
- </text>
-
- <spinner left="10" top_pad="4" height="20" follows="top|left" width="80" value="0.0" min_val="-3.00" max_val="3.0" name="pelvis_offset"/>
-
+ follows="top|left"
+ height="80"
+ layout="top|left"
+ left="0"
+ name="weights_and_warning_panel"
+ top_pad="3"
+ width="625">
+ <button
+ follows="top|left"
+ label="Calculate weights &amp; fee"
+ label_color="White"
+ layout="topleft"
+ left="3"
+ name="calculate_btn"
+ top="3"
+ height="20"
+ width="150"
+ tool_tip="Calculate weights &amp;fee"/>
+ <button
+ follows="top|left"
+ label="Cancel"
+ label_color="White"
+ layout="topleft"
+ left_pad="6"
+ name="cancel_btn"
+ top="3"
+ height="20"
+ width="80"/>
+ <button
+ follows="top|left"
+ label="Upload"
+ layout="topleft"
+ label_color="White"
+ left="35"
+ name="ok_btn"
+ top="3"
+ height="20"
+ visible="false"
+ width="80"
+ tool_tip="Upload to simulator"/>
+ <button
+ follows="top|right"
+ label="Clear settings &amp; reset form"
+ label_color="White"
+ layout="topleft"
+ name="reset_btn"
+ right="-2"
+ top="3"
+ height="20"
+ width="155"/>
+ <!-- ========== WEIGHTS ==========-->
+ <text
+ follows="top|left"
+ height="15"
+ layout="topleft"
+ left="5"
+ name="upload_fee"
+ top_pad="10"
+ width="130"
+ word_wrap="true">
+ Upload fee: L$ [FEE]
+ </text>
+ <text
+ height="15"
+ layout="topleft"
+ left_pad="0"
+ name="prim_weight"
+ top_delta="0"
+ width="120"
+ word_wrap="true">
+ Land impact: [EQ]
+ </text>
+ <text
+ height="15"
+ layout="topleft"
+ left_pad="0"
+ name="download_weight"
+ top_delta="0"
+ width="100"
+ word_wrap="true">
+ Download: [ST]
+ </text>
+ <text
+ height="15"
+ top_delta="0"
+ layout="topleft"
+ left_pad="0"
+ name="physics_weight"
+ width="90"
+ word_wrap="true">
+ Physics: [PH]
+ </text>
+ <text
+ height="15"
+ top_delta="0"
+ layout="topleft"
+ left_pad="0"
+ name="server_weight"
+ width="83"
+ word_wrap="true">
+ Server: [SIM]
+ </text>
+ <!-- ========== NOTE MESSAGE ========== -->
+ <text
+ font="SansSerif"
+ layout="topleft"
+ left="6"
+ name="warning_title"
+ top_pad="10"
+ text_color="DrYellow"
+ visible="false"
+ width="40">
+ NOTE:
+ </text>
+ <text
+ text_color="White"
+ height="20"
+ layout="topleft"
+ left_pad="1"
+ name="warning_message"
+ parse_urls="true"
+ top_delta="2"
+ wrap="true"
+ width="462"
+ visible="false">
+ You dont have rights to upload mesh models. [[VURL] Find out how] to get certified.
+ </text>
</panel>
- </tab_container>
-
- <text
- height="16"
- left_delta="5"
- bottom_delta="30"
- name="upload_fee"
- width="300"
- follows="bottom|right"
- word_wrap="true"
- >
- Upload fee: L$ [FEE]
- </text>
-
- <button bottom="540" left="10" follows="bottom|left" height="20" label="Set to defaults"
- width="100" name="reset_btn" tool_tip="Set to defaults"/>
- <button left="310" follows="bottom|right" height="20" label="Calculate weights &amp; fee"
- width="150" name="calculate_btn" tool_tip="Calculate weights &amp; fee" top_delta="0"/>
- <button bottom="540" left="310" follows="bottom|right" height="20" label="Upload"
- width="80" name="ok_btn" tool_tip="Upload to simulator" visible="false"/>
- <button right="-10" follows="right|bottom" height="20" width="80" label="Cancel" name="cancel_btn" top_delta="0"/>
-
- <!--
- <button bottom_delta="0" left="10" width="120" name="auto fill" label="Generate LOD" tool_tip="Automatically generate levels of detail"/>
- <button bottom_delta="0" left="140" width="120" name="smooth normals" label="Generate Normals" tool_tip="Regenerate normals based on mesh shape"/>
- <button bottom_delta="0" left="260" width="120" name="consolidate" label="Consolidate" tool_tip="Combine similar submeshes (reduces number of submeshes)"/>
- <button bottom_delta="30" left="260" width="120" name="scrub materials" label="Scrub Materials" tool_tip="Remove all material information (clear textures, set all colors to white)."/>
-
- <spinner bottom_delta="0" left="140" width="120" height="16" initial_value="75" label_width="60" name="edge threshold" decimal_digits="0" min_val="0" max_val="180" increment="5" label="Hard Angle" tool_tip="Maximum angle that will be smoothed between triangles when using Generate Normals"/>
-
- <text bottom_delta="30" follows="top|left" height="15" left="10" name="high_lod_label">
- High LOD:
- </text>
- <combo_box bottom_delta="0" left="97" follows="left|top" height="18"
- name="high detail combo" width="100" tool_tip="Specify mesh for this level of detail">
- <combo_item name="high none" value="none">
- None
- </combo_item>
- <combo_item name="high choose file" value="file">
- Choose File...
- </combo_item>
- <combo_item name="high triangle limit" value="limit">
- Triangle Limit
- </combo_item>
- </combo_box>
- <spinner bottom_delta="-5" left="200" width="120" name="high limit" decimal_digits="0" increment="1" min_val="0" max_val="100" tool_tip="Triangle budget for this LOD"/>
- <text bottom_delta="25" follows="top|left" height="15" left="10" name="high info" width="300">
- [TRIANGLES] Triangles, [VERTICES] Vertices, [SUBMESHES] Submeshes.
- [MESSAGE]
- </text>
-
- <text bottom_delta="35" follows="top|left" height="15" left="10" name="medium_lod_label">
- Medium LOD:
- </text>
- <combo_box bottom_delta="0" left="97" follows="left|top" height="18"
- name="medium detail combo" width="100" tool_tip="Specify mesh for this level of detail">
- <combo_item name="medium none" value="none">
- None
- </combo_item>
- <combo_item name="medium choose file" value="file">
- Choose File...
- </combo_item>
- <combo_item name="medium triangle limit" value="limit">
- Triangle Limit
- </combo_item>
- </combo_box>
- <spinner bottom_delta="-5" left="200" width="120" name="medium limit" decimal_digits="0" increment="1" min_val="0" max_val="100" tool_tip="Triangle budget for this LOD"/>
- <text bottom_delta="25" follows="top|left" height="15" left="10" name="medium info" width="300">
- [TRIANGLES] Triangles, [VERTICES] Vertices, [SUBMESHES] Submeshes.
- [MESSAGE]
- </text>
-
- <text bottom_delta="35" follows="top|left" height="15" left="10" name="low_lod_label">
- Low LOD:
- </text>
- <combo_box bottom_delta="0" left="97" follows="left|top" height="18"
- name="low detail combo" width="100" tool_tip="Specify mesh for this level of detail">
- <combo_item name="low none" value="none">
- None
- </combo_item>
- <combo_item name="low choose file" value="file">
- Choose File...
- </combo_item>
- <combo_item name="low triangle limit" value="limit">
- Triangle Limit
- </combo_item>
- </combo_box>
- <spinner bottom_delta="-5" left="200" width="120" name="low limit" decimal_digits="0" increment="1" min_val="0" max_val="100" tool_tip="Triangle budget for this LOD"/>
- <text bottom_delta="25" follows="top|left" height="15" left="10" name="low info" width="300">
- [TRIANGLES] Triangles, [VERTICES] Vertices, [SUBMESHES] Submeshes
- [MESSAGE]
- </text>
-
- <text bottom_delta="35" follows="top|left" height="15" left="10" name="lowest_lod_label">
- Lowest LOD:
- </text>
- <combo_box bottom_delta="0" left="97" follows="left|top" height="18"
- name="lowest detail combo" width="100" tool_tip="Specify mesh for this level of detail">
- <combo_item name="lowest none" value="none">
- None
- </combo_item>
- <combo_item name="lowest choose file" value="file">
- Choose File...
- </combo_item>
- <combo_item name="lowest triangle limit" value="limit">
- Triangle Limit
- </combo_item>
- </combo_box>
- <spinner bottom_delta="-5" left="200" width="120" name="lowest limit" decimal_digits="0" increment="1" min_val="0" max_val="100" tool_tip="Triangle budget for this LOD"/>
- <text bottom_delta="25" follows="top|left" height="15" left="10" name="lowest info" width="300">
- [TRIANGLES] Triangles, [VERTICES] Vertices, [SUBMESHES] Submeshes
- [MESSAGE]
- </text>
-
- <text bottom_delta="35" follows="top|left" height="15" left="10" name="physics_lod_label">
- Physical Shape:
- </text>
- <combo_box bottom_delta="0" left="97" follows="left|top" height="18"
- name="physics detail combo" width="100">
- <combo_item name="physics none" value="none">
- None
- </combo_item>
- <combo_item name="physics choose file" value="file">
- Choose File...
- </combo_item>
- <combo_item name="physics triangle limit" value="limit">
- Triangle Limit...
- </combo_item>
- </combo_box>
- <spinner bottom_delta="-5" left="200" width="90" name="physics limit" decimal_digits="0" increment="1" min_val="0" max_val="100" tool_tip="Triangle budget for this LOD"/>
- <button bottom_delta="0" left="290" width="30" follows="left|top" height="20" label=">>"
- name="decompose_btn" tool_tip="Create convex decomposition."/>
- <text bottom_delta="25" follows="top|left" height="15" left="10" name="physics info" width="300">
- [TRIANGLES] Triangles, [HULLS] Hulls, [POINTS] Points
- </text>
-
- <text bottom_delta="25" follows="top|left" height="15" left="10" name="include label" width="300">
- Include:
- </text>
-
- <check_box bottom_delta="20" follow="bottom|left" height="20" label="Textures"
- left="15" width="125" name="upload_textures" tool_tip="Upload associated textures "/>
-
- <check_box bottom_delta="20" follow="bottom|left" height="20" label="Skin Weights"
- left="15" width="125" name="upload_skin" tool_tip="Upload vertex skin weighting information."/>
-
- <check_box bottom_delta="20" follow="bottom|left" height="20" label="Joint Positions"
- left="15" width="125" name="upload_joints" tool_tip="Upload joint position information (will override avatar joint positions when mesh is worn)."/>
-
-
- <button bottom_delta="25" follows="bottom|left" height="20" label="Upload"
- left="15" name="ok_btn" width="125" tool_tip="Upload to simulator"/>
-
- <text bottom_delta="20" left="15" width="280" follows="top|left" height="15" name="description_label" text_color="1 0.82 0.46 1">
- (No charge for upload during First Look)
- </text>
- <text bottom_delta="20" left="15" width="280" follows="top|left" height="15" name="upload_message">
- [MESSAGE]
- </text>
-
- <spinner bottom_delta="20" label="Scale" left="15" width="120" name="debug scale" decimal_digits="3" increment="0.1" min_val="0" max_val="64" initial_value="1" tool_tip="Multiplier for incoming object scale. If incoming dimensions are very small or very large, modify this value to get dimensions into an acceptable range."/>
- <text bottom_delta="30" left="15" width="280" follows="top|left" height="15" name="dimensions">
- Model Dimensions: [X]m x [Y]m x [Z]m
- </text>
- -->
+</panel>
+
+<text
+ follows="left|top"
+ layout="topleft"
+ left="640"
+ name="lod_label"
+ text_color="White"
+ top="13"
+ height="15"
+ width="290">
+ Preview:
+ </text>
+<panel
+ border="true"
+ bevel_style="none"
+ follows="top|left"
+ name="preview_panel"
+ top_pad="4"
+ width="290"
+ height="290"/>
+
+<panel
+ follows="all"
+ height="130"
+ layout="topleft"
+ name="right_panel"
+ top_pad="5"
+ width="290">
+ <combo_box
+ top_pad="3"
+ follows="left|top"
+ height="18"
+ layout="topleft"
+ name="preview_lod_combo"
+ width="150"
+ tool_tip="LOD to view in preview render">
+ <combo_item name="high"> High </combo_item>
+ <combo_item name="medium"> Medium </combo_item>
+ <combo_item name="low"> Low </combo_item>
+ <combo_item name="lowest"> Lowest </combo_item>
+ </combo_box>
+ <text
+ follows="top|left"
+ layout="topleft"
+ text_color="White"
+ top="5"
+ left_pad="20"
+ name="label_display"
+ width="50">
+ Display...
+ </text>
+ <check_box
+ follows="top|left"
+ label="Edges"
+ label_text.text_color="White"
+ layout="topleft"
+ left_delta="0"
+ name="show_edges"
+ top_pad="8">
+ </check_box>
+ <check_box
+ follows="top|left"
+ label="Physics"
+ label_text.text_color="White"
+ layout="topleft"
+ name="show_physics"
+ top_pad="8">
+ </check_box>
+ <check_box
+ follows="top|left"
+ label="Textures"
+ label_text.text_color="White"
+ layout="topleft"
+ name="show_textures"
+ top_pad="8">
+ </check_box>
+ <check_box
+ follows="top|left"
+ label="Skin weights"
+ label_text.text_color="White"
+ layout="topleft"
+ name="show_skin_weight"
+ top_pad="8">
+ </check_box>
+ <check_box
+ follows="top|left"
+ label="Joints"
+ label_text.text_color="White"
+ layout="topleft"
+ name="show_joint_positions"
+ top_pad="8">
+ </check_box>
+ <text
+ follows="top|left"
+ layout="topleft"
+ left="2"
+ name="physics_explode_label"
+ top="85"
+ width="150">
+ Preview Spread:
+ </text>
+ <slider
+ name="physics_explode"
+ follows="top|left"
+ top="100"
+ left="0"
+ min_val="0.0"
+ max_val="3.0"
+ height="20"
+ width="150"/>
+</panel>
</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_object_weights.xml b/indra/newview/skins/default/xui/en/floater_object_weights.xml
index a73db3af32..eb283a1043 100644
--- a/indra/newview/skins/default/xui/en/floater_object_weights.xml
+++ b/indra/newview/skins/default/xui/en/floater_object_weights.xml
@@ -3,7 +3,7 @@
can_close="true"
can_tear_off="false"
height="315"
- help_topic="objects_weight_floater"
+ help_topic="object_weights"
layout="topleft"
name="object_weights"
save_rect="true"
@@ -337,6 +337,6 @@
left="10"
name="help_SLURL"
top_pad="10"
- value="[secondlife:///www.secondlife.com What is all this?...]"
+ value="[secondlife:///app/help/object_weights What is all this?...]"
width="180" />
</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml
index 03d6c84266..9b02f7d273 100644
--- a/indra/newview/skins/default/xui/en/floater_tools.xml
+++ b/indra/newview/skins/default/xui/en/floater_tools.xml
@@ -48,11 +48,11 @@
</floater.string>
<floater.string
name="status_selectcount">
- [OBJ_COUNT] objects ( [PRIM_COUNT] prims[PE_STRING] ) selected
+ [OBJ_COUNT] objects selected, land impact [LAND_IMPACT]
</floater.string>
<floater.string
- name="status_selectprimequiv">
- , [SEL_WEIGHT] prim equivs
+ name="status_remaining_capacity">
+ Remaining capacity [LAND_CAPACITY].
</floater.string>
<button
follows="left|top"
@@ -738,11 +738,11 @@
font="SansSerifSmall"
layout="topleft"
left="10"
- name="selection_weight"
+ name="remaining_capacity"
top_pad="0"
visible="false"
width="280">
- Physics weight [PHYS_WEIGHT], Render Cost [DISP_WEIGHT]. [secondlife:///app/openfloater/object_weights More info]
+ [CAPACITY_STRING] [secondlife:///app/openfloater/object_weights More info]
</text>
<!-- <text -->
<!-- text_color="LtGray_50" -->
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index f80028ec0c..d7dcc05179 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -3633,5 +3633,7 @@ Try enclosing path to the editor with double quotes.
<string name="Surface">Surface</string>
<string name="Solid">Solid</string>
<string name="Wrap">Wrap</string>
+ <string name="Preview">Preview</string>
+ <string name="Normal">Normal</string>
</strings>