diff options
| author | prep <prep@lindenlab.com> | 2011-09-08 15:55:17 -0400 | 
|---|---|---|
| committer | prep <prep@lindenlab.com> | 2011-09-08 15:55:17 -0400 | 
| commit | 66aabf8a4f3b0701b677b07215cfc9e01630996d (patch) | |
| tree | 7cf3e44c7ab3a0f928af096ede6e46a8cdd97f05 | |
| parent | 2e652ce660e86097ce2b47bb82926005bb0482c8 (diff) | |
| parent | 4e0ba4fc84681e22ec6c8f888f9960f5691ce602 (diff) | |
merge
| -rw-r--r-- | indra/newview/llaccountingcostmanager.cpp | 17 | ||||
| -rw-r--r-- | indra/newview/llaccountingcostmanager.h | 4 | ||||
| -rwxr-xr-x | indra/newview/llfloatermodelpreview.cpp | 612 | ||||
| -rw-r--r-- | indra/newview/llfloatermodelpreview.h | 28 | ||||
| -rw-r--r-- | indra/newview/llfloaterobjectweights.cpp | 124 | ||||
| -rw-r--r-- | indra/newview/llfloaterobjectweights.h | 36 | ||||
| -rw-r--r-- | indra/newview/llfloatertools.cpp | 113 | ||||
| -rw-r--r-- | indra/newview/llfloatertools.h | 4 | ||||
| -rw-r--r-- | indra/newview/llpanelobject.cpp | 4 | ||||
| -rw-r--r-- | indra/newview/skins/default/colors.xml | 6 | ||||
| -rw-r--r-- | indra/newview/skins/default/textures/green_checkmark.png | bin | 0 -> 414 bytes | |||
| -rw-r--r-- | indra/newview/skins/default/textures/red_x.png | bin | 0 -> 624 bytes | |||
| -rw-r--r-- | indra/newview/skins/default/textures/textures.xml | 4 | ||||
| -rwxr-xr-x | indra/newview/skins/default/xui/en/floater_model_preview.xml | 2066 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/floater_object_weights.xml | 4 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/floater_tools.xml | 10 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/strings.xml | 2 | 
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*) ¶m[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*) ¶m[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*) ¶m[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*) ¶m[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*) ¶m[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.pngBinary files differ new file mode 100644 index 0000000000..d2a5b348dc --- /dev/null +++ b/indra/newview/skins/default/textures/green_checkmark.png diff --git a/indra/newview/skins/default/textures/red_x.png b/indra/newview/skins/default/textures/red_x.pngBinary files differ new file mode 100644 index 0000000000..a61202f09b --- /dev/null +++ b/indra/newview/skins/default/textures/red_x.png 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 & fee" +         label_color="White" +         layout="topleft" +         left="3" +         name="calculate_btn" +         top="3" +         height="20" +         width="150" +         tool_tip="Calculate weights &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 & 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 & fee" -	     width="150" name="calculate_btn" tool_tip="Calculate weights & 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> | 
