diff --git a/python/mujoco/experimental/studio/studio_app.py b/python/mujoco/experimental/studio/studio_app.py index fe030122..389480fe 100644 --- a/python/mujoco/experimental/studio/studio_app.py +++ b/python/mujoco/experimental/studio/studio_app.py @@ -118,7 +118,7 @@ class StudioApp: self.step_control = sim.StepControl() self.ux_state = ux.UxState() self.theme = ux.GuiTheme.LIGHT - self.show_stats = False + self.show_info = False self.show_solver = False self.should_quit = False self.status = 'Ready' @@ -368,12 +368,12 @@ class StudioApp: if imgui.BeginMenu('Charts'): if imgui.MenuItem('Solver', '', self.show_solver): self.show_solver = not self.show_solver - if imgui.MenuItem('Stats', '', self.show_stats): - self.show_stats = not self.show_stats + if imgui.MenuItem('Info', '', self.show_info): + self.show_info = not self.show_info imgui.EndMenu() if imgui.BeginMenu('Help'): - if imgui.MenuItem('Stats', '', self.show_stats): - self.show_stats = not self.show_stats + if imgui.MenuItem('Info', '', self.show_info): + self.show_info = not self.show_info imgui.Separator() version = f'Version {mujoco.mj_versionString()}' imgui.MenuItem(version) @@ -462,10 +462,10 @@ class StudioApp: ux.convergence_gui(self.model, self.data) imgui.End() - if self.show_stats: - _, self.show_stats = imgui.Begin('Stats', self.show_stats) + if self.show_info: + _, self.show_info = imgui.Begin('Info', self.show_info) paused = self.step_control.get_pause_state() != sim.PauseState.UNPAUSED - ux.stats_gui(self.model, self.data, paused, 0.0) + ux.info_gui(self.model, self.data, paused, 0.0) imgui.End() # -- Status bar ----------------------------------------------------------- diff --git a/python/mujoco/experimental/studio/ux.cc b/python/mujoco/experimental/studio/ux.cc index 459b4aac..6fc0d1d9 100644 --- a/python/mujoco/experimental/studio/ux.cc +++ b/python/mujoco/experimental/studio/ux.cc @@ -324,14 +324,14 @@ PYBIND11_MODULE(ux, m) { py::arg("model"), py::arg("data"), "Render the solver counts chart."); m.def( - "stats_gui", + "info_gui", [](const mujoco::python::MjModelWrapper& model, mujoco::python::MjDataWrapper& data, bool paused, float fps) { py::gil_scoped_release no_gil; - mujoco::platform::StatsGui(model.get(), data.get(), paused, fps); + mujoco::platform::InfoGui(model.get(), data.get(), paused, fps); }, py::arg("model"), py::arg("data"), py::arg("paused"), py::arg("fps"), - "Render the simulation statistics UI."); + "Render the simulation info UI."); m.attr("FREE_CAMERA_IDX") = mujoco::platform::kFreeCameraIdx; m.attr("TUMBLE_CAMERA_IDX") = mujoco::platform::kTumbleCameraIdx; diff --git a/src/experimental/platform/ux/gui.cc b/src/experimental/platform/ux/gui.cc index abbd9f8e..34d3e5a2 100644 --- a/src/experimental/platform/ux/gui.cc +++ b/src/experimental/platform/ux/gui.cc @@ -359,7 +359,7 @@ ImVec4 ConfigureDockingLayout() { const float kOptionsRelWidth = 0.15f; const float kInspectorRelWidth = 0.22f; - const float kStatsRelHeight = 0.3f; + const float kPropertiesRelHeight = 0.3f; const float kToolsBarHeight = 36.f * scale * font_scale; const float kStatusBarHeight = 32.f * scale * font_scale; @@ -388,12 +388,8 @@ ImVec4 ConfigureDockingLayout() { ImGui::DockBuilderSplitNode(main, ImGuiDir_Right, kInspectorRelWidth, &inspector, &main); - ImGuiID stats = 0; - ImGui::DockBuilderSplitNode(options, ImGuiDir_Down, kStatsRelHeight, &stats, - &options); - ImGuiID properties = 0; - ImGui::DockBuilderSplitNode(inspector, ImGuiDir_Down, kStatsRelHeight, + ImGui::DockBuilderSplitNode(inspector, ImGuiDir_Down, kPropertiesRelHeight, &properties, &inspector); ImGuiID profiler = 0; @@ -405,7 +401,6 @@ ImVec4 ConfigureDockingLayout() { ImGui::DockBuilderDockWindow("Editor", inspector); ImGui::DockBuilderDockWindow("Inspector", inspector); ImGui::DockBuilderDockWindow("Properties", properties); - ImGui::DockBuilderDockWindow("Stats", stats); ImGui::DockBuilderDockWindow("Profiler", profiler); ImGui::DockBuilderFinish(root); } @@ -1472,8 +1467,8 @@ void CountsGui(const mjModel* model, mjData* data, ImVec2 plot_size) { } } -void StatsGui(const mjModel* model, const mjData* data, bool paused, - float fps) { +void InfoGui(const mjModel* model, const mjData* data, bool paused, + float fps) { const int num_islands = std::clamp(data->nisland, 1, mjNISLAND); // compute solver error (maximum over islands) diff --git a/src/experimental/platform/ux/gui.h b/src/experimental/platform/ux/gui.h index 2d1fda3a..74b45dfb 100644 --- a/src/experimental/platform/ux/gui.h +++ b/src/experimental/platform/ux/gui.h @@ -61,8 +61,6 @@ void RescaleDock(float ratio); // or manipulating mjData elements (e.g. ControlsGui). // "Explorer": secondary tab connected to the Inspector; designed for // displaying the tree of mjSpec elements. -// "Stats": resizable section below the options; designed for displaying -// basic simulation statistics (e.g. StatsGui); hidden by default. // "Properties": resizable section below the explorer; designed for displaying // properties of mjSpec elements (e.g. BodyPropertiesGui); hidden by // default. @@ -161,7 +159,7 @@ void ProfilerGui(const mjModel* model, mjData* data, SimProfiler* profiler); // UX for displaying basic simulation information. Note that the pause state and // FPS needs to be tracked by the caller and passed here to be displayed. -void StatsGui(const mjModel* model, const mjData* data, bool paused, float fps); +void InfoGui(const mjModel* model, const mjData* data, bool paused, float fps); } // namespace mujoco::platform diff --git a/src/experimental/studio/app.cc b/src/experimental/studio/app.cc index 0cfa1302..0176d03f 100644 --- a/src/experimental/studio/app.cc +++ b/src/experimental/studio/app.cc @@ -649,7 +649,7 @@ void App::HandleKeyboardEvents() { } else if (ImGui_IsChordJustPressed(ImGuiKey_F1)) { ToggleWindow(tmp_.help); } else if (ImGui_IsChordJustPressed(ImGuiKey_F2)) { - ToggleWindow(tmp_.stats); + ToggleWindow(tmp_.info); } else if (ImGui_IsChordJustPressed(ImGuiKey_F3)) { ToggleWindow(tmp_.profiler); } else if (ImGui_IsChordJustPressed(ImGuiKey_F6)) { @@ -934,7 +934,7 @@ void App::BuildGui() { ImGui::End(); } - if (tmp_.stats) { + if (tmp_.info) { platform::ScopedStyle style; style.Var(ImGuiStyleVar_Alpha, 0.8f); const float scale = ImGui::GetWindowDpiScale(); @@ -952,7 +952,7 @@ void App::BuildGui() { ImGuiWindowFlags_NoSavedSettings; if (ImGui::Begin("Info", nullptr, flags)) { const float fps = renderer_->GetFps(); - platform::StatsGui( + platform::InfoGui( model(), data(), step_control_.GetPauseState() == PauseState::kNormalPaused, fps); } @@ -1674,8 +1674,8 @@ void App::MainMenuGui() { } ImGui::Separator(); - if (ImGui::MenuItem("Info", "F2", tmp_.stats)) { - ToggleWindow(tmp_.stats); + if (ImGui::MenuItem("Info", "F2", tmp_.info)) { + ToggleWindow(tmp_.info); } if (ImGui::MenuItem("Profiler", "F3", tmp_.profiler)) { ToggleWindow(tmp_.profiler); diff --git a/src/experimental/studio/app.h b/src/experimental/studio/app.h index c0effb00..6676c0d6 100644 --- a/src/experimental/studio/app.h +++ b/src/experimental/studio/app.h @@ -129,7 +129,7 @@ class App { // Windows. bool help = false; - bool stats = false; + bool info = false; bool profiler = false; bool picture_in_picture = false; bool options_panel = true;