From 1daa84d062fe3fcaa99e365f5831f005b460b7d2 Mon Sep 17 00:00:00 2001 From: cflin Date: Wed, 19 Apr 2023 11:47:45 +0800 Subject: [PATCH] add unit lable && modified box ui to drag --- src/static_sim/SimTargetOption.cpp | 14 +++++++++++++- src/static_sim/SimTargetOption.h | 3 ++- src/viewer/StaticSimGUI.cpp | 2 +- src/viewer/StaticSimGUI.h | 1 + src/viewer/StaticSimGUIMenu.cpp | 30 ++++++++++++++++-------------- 5 files changed, 33 insertions(+), 17 deletions(-) diff --git a/src/static_sim/SimTargetOption.cpp b/src/static_sim/SimTargetOption.cpp index 5661702..62aafc4 100644 --- a/src/static_sim/SimTargetOption.cpp +++ b/src/static_sim/SimTargetOption.cpp @@ -4,7 +4,7 @@ #include #include "SimTargetOption.h" namespace ssim{ - const std::string SimTargetOption::TAEGET_NAME[SimTargetOption::ENUM_SIZE] = { + const std::string SimTargetOption::TARGET_NAME[SimTargetOption::ENUM_SIZE] = { "位移范数", "位移-X", "位移-Y", @@ -16,4 +16,16 @@ namespace ssim{ "应力-Z", "柔顺度" }; + const std::string SimTargetOption::TARGET_UNIT[SimTargetOption::ENUM_SIZE] = { + "m", + "m", + "m", + "m", + "Pa", + "Pa", + "Pa", + "Pa", + "Pa", + "J" + }; }; \ No newline at end of file diff --git a/src/static_sim/SimTargetOption.h b/src/static_sim/SimTargetOption.h index 5da9a8b..598ca88 100644 --- a/src/static_sim/SimTargetOption.h +++ b/src/static_sim/SimTargetOption.h @@ -12,7 +12,8 @@ namespace ssim { enum Target { U_NORM = 0, UX, UY, UZ, S_NORM, S_VON_Mises,/*primary stress*/SX, SY, SZ, COMPLIANCE, ENUM_SIZE }; - static const std::string TAEGET_NAME[ENUM_SIZE]; + static const std::string TARGET_NAME[ENUM_SIZE]; + static const std::string TARGET_UNIT[ENUM_SIZE]; SimTargetOption(int init_state = 1) : state(init_state) {} diff --git a/src/viewer/StaticSimGUI.cpp b/src/viewer/StaticSimGUI.cpp index de09a80..1806c8e 100644 --- a/src/viewer/StaticSimGUI.cpp +++ b/src/viewer/StaticSimGUI.cpp @@ -65,7 +65,7 @@ namespace ssim { ImGui::SetNextWindowSizeConstraints(ImVec2(menu_width, -1.0f), ImVec2(menu_width, -1.0f)); bool _viewer_menu_visible = true; ImGui::Begin( - SimTargetOption::TAEGET_NAME[gui_ctrl_.target_to_evaluate].c_str(), + SimTargetOption::TARGET_NAME[gui_ctrl_.target_to_evaluate].c_str(), &_viewer_menu_visible, ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_AlwaysAutoResize diff --git a/src/viewer/StaticSimGUI.h b/src/viewer/StaticSimGUI.h index c776964..26e49da 100644 --- a/src/viewer/StaticSimGUI.h +++ b/src/viewer/StaticSimGUI.h @@ -65,6 +65,7 @@ namespace ssim { void draw_colorbar(){ auto colorbar_menu=[&](){ + ImGui::TextWrapped(("单位: "+ SimTargetOption::TARGET_UNIT[gui_ctrl_.target_to_evaluate]).c_str()); static ColorbarPlugin color_plugin; color_plugin.draw_colorbar_jet(gui_ctrl_.colorbar_bd.xmin,gui_ctrl_.colorbar_bd.xmax); }; diff --git a/src/viewer/StaticSimGUIMenu.cpp b/src/viewer/StaticSimGUIMenu.cpp index 7a54757..e312b2c 100644 --- a/src/viewer/StaticSimGUIMenu.cpp +++ b/src/viewer/StaticSimGUIMenu.cpp @@ -55,10 +55,13 @@ namespace ssim { std::vector v_max_point = {(float) i_DBC.relMaxBBox.x(), (float) i_DBC.relMaxBBox.y(), (float) i_DBC.relMaxBBox.z()}; - if (ImGui::InputFloat3(("Dirichlet最小值 " + std::to_string(i + 1)).c_str(), - v_min_point.data()) || - ImGui::InputFloat3(("Dirichlet最大值 " + std::to_string(i + 1)).c_str(), - v_max_point.data())) { + + static bool is_drag[2]; + ImGui::PushItemWidth(-80); + is_drag[0]= ImGui::DragFloat3(("最小值 " + std::to_string(i + 1)+"##Dir").c_str(),v_min_point.data(),0.01,0.0,1.0,"%.3f"); + is_drag[1]= ImGui::DragFloat3(("最大值 " + std::to_string(i + 1)+"##Dir").c_str(),v_max_point.data(),0.01,0.0,1.0,"%.3f"); + ImGui::PopItemWidth(); + if (is_drag[0] || is_drag[1]) { gui_ctrl_.is_modified = true; i_DBC.relMinBBox = {v_min_point[0], v_min_point[1], v_min_point[2]}; i_DBC.relMaxBBox = {v_max_point[0], v_max_point[1], v_max_point[2]}; @@ -83,18 +86,17 @@ namespace ssim { (float) i_NBC.relMaxBBox.z()}; std::vector v_force = {(float) i_NBC.force.x(), (float) i_NBC.force.y(), (float) i_NBC.force.z()}; - if ( - ImGui::InputFloat3(("Neumann最小值 " + std::to_string(i + 1)).c_str(), - v_min_point.data()) || - ImGui::InputFloat3(("Neumann最大值 " + std::to_string(i + 1)).c_str(), - v_max_point.data()) || - ImGui::InputFloat3(("Neumann力 " + std::to_string(i + 1)).c_str(), - v_force.data())) { + static bool is_drag[3]; + ImGui::PushItemWidth(-80); + is_drag[0]= ImGui::DragFloat3(("最小值 " + std::to_string(i + 1)+"##Neu").c_str(),v_min_point.data(),0.01,0.0,1.0,"%.3f"); + is_drag[1]= ImGui::DragFloat3(("最大值 " + std::to_string(i + 1)+"##Neu").c_str(),v_max_point.data(),0.01,0.0,1.0,"%.3f"); + is_drag[2]= ImGui::DragFloat3(("力" + std::to_string(i + 1)+" (N)"+"##Neu").c_str(),v_force.data(),1,-1e10,1e10,"%.3f"); + ImGui::PopItemWidth(); + if (is_drag[0] || is_drag[1] || is_drag[2]) { gui_ctrl_.is_modified = true; i_NBC.relMinBBox = {v_min_point[0], v_min_point[1], v_min_point[2]}; i_NBC.relMaxBBox = {v_max_point[0], v_max_point[1], v_max_point[2]}; i_NBC.force = {v_force[0], v_force[1], v_force[2]}; - } } if (gui_ctrl_.is_modified) { @@ -109,7 +111,7 @@ namespace ssim { if (ImGui::CollapsingHeader("材料设置", ImGuiTreeNodeFlags_DefaultOpen)) { static const int item_width=200; ImGui::SetNextItemWidth(item_width); - ImGui::InputFloat("杨氏模量", &sp_StaticSim_->get_material_property().Youngs_Modulus, 1.0f, 2e11f, + ImGui::InputFloat("杨氏模量 (Pa)", &sp_StaticSim_->get_material_property().Youngs_Modulus, 1.0f, 2e11f, "%.2e"); ImGui::SetNextItemWidth(item_width); @@ -117,7 +119,7 @@ namespace ssim { "%.3f"); ImGui::SetNextItemWidth(item_width); - ImGui::InputFloat("密度", &sp_StaticSim_->get_material_property().density, 1.0f, 1000.0f, "%.3f"); + ImGui::InputFloat("密度 (kg/m^3)", &sp_StaticSim_->get_material_property().density, 1.0f, 1000.0f, "%.3f"); } if (ImGui::Button(("原始模型"), ImVec2(-1, 0))) {