diff options
-rwxr-xr-x | indra/newview/llfloatermodelpreview.cpp | 389 | ||||
-rw-r--r-- | indra/newview/llfloatermodelpreview.h | 17 | ||||
-rwxr-xr-x | indra/newview/skins/default/xui/en/floater_model_preview.xml | 790 |
3 files changed, 780 insertions, 416 deletions
diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp index 2d18c2bb24..e687b1954c 100755 --- a/indra/newview/llfloatermodelpreview.cpp +++ b/indra/newview/llfloatermodelpreview.cpp @@ -396,21 +396,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); @@ -431,10 +433,6 @@ BOOL LLFloaterModelPreview::postBuild() childSetCommitCallback("import_scale", onImportScaleCommit, this); childSetCommitCallback("pelvis_offset", onPelvisOffsetCommit, this); - childSetCommitCallback("lod_file_or_limit", refresh, 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)); @@ -694,6 +692,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) { @@ -710,19 +714,9 @@ void LLFloaterModelPreview::onAutoFillCommit(LLUICtrl* ctrl, void* userdata) fp->mModelPreview->genLODs(); } -//static -void LLFloaterModelPreview::onLODParamCommit(LLUICtrl* ctrl, void* userdata) -{ - LLFloaterModelPreview* fp = (LLFloaterModelPreview*) userdata; - - fp->mModelPreview->onLODParamCommit(false); -} - -//static -void LLFloaterModelPreview::onLODParamCommitTriangleLimit(LLUICtrl* ctrl, void* userdata) +void LLFloaterModelPreview::onLODParamCommit(S32 lod, bool enforce_tri_limit) { - LLFloaterModelPreview* fp = (LLFloaterModelPreview*) userdata; - fp->mModelPreview->onLODParamCommit(true); + mModelPreview->onLODParamCommit(lod, enforce_tri_limit); } @@ -3484,7 +3478,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) { @@ -3782,21 +3776,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; - 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 @@ -3804,89 +3798,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) { @@ -3936,18 +3848,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(); } @@ -4489,147 +4389,140 @@ 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_", }; 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 (lod_mode == 2) // use LoD above + { + fmp->mLODMode[lod] = 2; + for (U32 i = 0; i < num_file_controls; ++i) + { + mFMP->childHide(file_controls[i] + lod_name[lod]); } - else if (mFMP->childGetValue("lod_none").asBoolean()) + + for (U32 i = 0; i < num_lod_controls; ++i) { - fmp->mLODMode[mPreviewLOD] = 2; - for (U32 i = 0; i < num_file_controls; ++i) - { - mFMP->childDisable(file_controls[i]); - } + mFMP->childHide(lod_controls[i] + lod_name[lod]); + } - for (U32 i = 0; i < num_lod_controls; ++i) - { - mFMP->childDisable(lod_controls[i]); - } + if (lod < LLModel::LOD_HIGH) + { + mModel[lod] = mModel[lod + 1]; + mScene[lod] = mScene[lod + 1]; + mVertexBuffer[lod].clear(); - if (!mModel[mPreviewLOD].empty()) + // Also update lower LoD + if (lod > LLModel::LOD_IMPOSTOR) { - mModel[mPreviewLOD].clear(); - mScene[mPreviewLOD].clear(); - mVertexBuffer[mPreviewLOD].clear(); - - //this can cause phasing issues with the UI, so reenter this function and return - updateStatusMessages(); - return; + 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_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]); + mLODFrozen = false; } - - mModelUpdatedSignal(true); - } void LLModelPreview::setPreviewTarget(F32 distance) @@ -5484,8 +5377,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"); @@ -5506,25 +5398,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 @@ -5566,8 +5449,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; @@ -5588,11 +5470,12 @@ 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); + genLODs(lod, 3, enforce_tri_limit); + updateLodControls(lod); updateStatusMessages(); refresh(); } @@ -5655,6 +5538,12 @@ 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(); diff --git a/indra/newview/llfloatermodelpreview.h b/indra/newview/llfloatermodelpreview.h index f93d3b9482..d93940efc2 100644 --- a/indra/newview/llfloatermodelpreview.h +++ b/indra/newview/llfloatermodelpreview.h @@ -176,13 +176,13 @@ 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); @@ -222,10 +222,12 @@ protected: 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); @@ -264,7 +266,7 @@ 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]; LLMutex* mStatusLock; @@ -275,6 +277,8 @@ private: void onClickCalculateBtn(); void toggleCalculateButton(); + void onLoDSourceCommit(S32 lod); + // Toggles between "Calculate weights & fee" and "Upload" buttons. void toggleCalculateButton(bool visible); @@ -335,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); const bool getModelPivot( void ) const { return mHasPivot; } void setHasPivot( bool val ) { mHasPivot = val; } 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 39ef844824..21feb9908e 100755 --- a/indra/newview/skins/default/xui/en/floater_model_preview.xml +++ b/indra/newview/skins/default/xui/en/floater_model_preview.xml @@ -100,166 +100,636 @@ name="import_tab" tab_position="top"> <!-- LOD PANEL --> - <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 + 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 + bg_visible="true" + follows="left|top" + height="18" + initial_value="Source" + layout="topleft" + left="75" + name="source" + top="15" + valign="center" + value="Source" + width="335" /> + <text + bg_visible="true" + follows="left|top" + halign="right" + height="18" + initial_value="Triangles" + layout="topleft" + left_pad="0" + name="triangles" + top_delta="0" + valign="center" + value="Triangles" + width="65" /> + <text + bg_visible="true" + follows="left|top" + halign="right" + height="18" + initial_value="Vertices" + layout="topleft" + left_pad="0" + name="vertices" + valign="center" + value="Vertices" + width="65" /> + <text + bg_visible="true" + follows="left|top" + height="18" + initial_value="High" + layout="topleft" + left="10" + name="high_label" + 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 + bg_visible="true" + 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 + bg_visible="true" + 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 + bg_visible="true" + 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="lag_status_critical.tga" + layout="topleft" + left_delta="20" + mouse_opaque="true" + name="status_icon_high" + top_delta="0" + width="16" /> + <text + bg_visible="true" + follows="left|top" + height="18" + initial_value="Medium" + layout="topleft" + left="10" + name="medium_label" + 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 + bg_visible="true" + 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 + bg_visible="true" + 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 + bg_visible="true" + 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="lag_status_critical.tga" + layout="topleft" + left_delta="20" + mouse_opaque="true" + name="status_icon_medium" + top_delta="0" + width="16" /> + <text + bg_visible="true" + follows="left|top" + height="18" + initial_value="Low" + layout="topleft" + left="10" + name="low_label" + 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 + bg_visible="true" + 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 + bg_visible="true" + 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 + bg_visible="true" + 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="lag_status_critical.tga" + layout="topleft" + left_delta="20" + mouse_opaque="true" + name="status_icon_low" + top_delta="0" + width="16" /> + <text + bg_visible="true" + follows="left|top" + height="18" + initial_value="Lowest" + layout="topleft" + left="10" + name="lowest_label" + 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 + bg_visible="true" + 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 + bg_visible="true" + 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 + bg_visible="true" + 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="lag_status_critical.tga" + 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" |