From 379b0e0cbcae96b40583dd64c0f5f7070e793a26 Mon Sep 17 00:00:00 2001 From: hugtalbot Date: Tue, 27 Jan 2026 17:13:54 +0100 Subject: [PATCH 1/4] Fix crashes when changing Mouse operation --- SofaImGui/src/SofaImGui/windows/MouseManager.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/SofaImGui/src/SofaImGui/windows/MouseManager.cpp b/SofaImGui/src/SofaImGui/windows/MouseManager.cpp index f933263a89..da9039bdaf 100644 --- a/SofaImGui/src/SofaImGui/windows/MouseManager.cpp +++ b/SofaImGui/src/SofaImGui/windows/MouseManager.cpp @@ -29,8 +29,6 @@ namespace windows { - - void showManagerMouseWindow(const char *const & windowNameMouseManager, WindowState& winManagerMouse, sofaglfw::SofaGLFWBaseGUI* baseGUI) @@ -56,6 +54,9 @@ void showManagerMouseWindow(const char *const & windowNameMouseManager, if (ImGui::CollapsingHeader(buttonNames.at(button).c_str())) { auto* operation = pickHandler->getOperation(button); + + if(!operation) continue; + std::string currentOperationDescription; for (const auto& [label, creator] : OperationFactory::getInstance()->registry) @@ -73,6 +74,9 @@ void showManagerMouseWindow(const char *const & windowNameMouseManager, if (ImGui::Selectable(creator->getDescription().c_str(), isSelected)) { pickHandler->changeOperation(button, label); + operation = pickHandler->getOperation(button); // Re-fetch the operation after call to changeOperation() + + if (!operation) continue; } if (isSelected) ImGui::SetItemDefaultFocus(); @@ -108,7 +112,7 @@ void showManagerMouseWindow(const char *const & windowNameMouseManager, float stiffness = fixOperation->getStiffness(); if (ImGui::SliderFloat("Stiffness", &stiffness, 0.0f, 100000.0f)) { - attachOperation->setStiffness(stiffness); + fixOperation->setStiffness(stiffness); } } else if (auto* inciseOperation = dynamic_cast(operation)) @@ -162,7 +166,7 @@ void showManagerMouseWindow(const char *const & windowNameMouseManager, } } - static float scale = topologyOperation->getScale(); + float scale = topologyOperation->getScale(); if (ImGui::SliderFloat("Selector scale", &scale, 0.0f, 100.0f)) { topologyOperation->setScale(scale); @@ -183,13 +187,13 @@ void showManagerMouseWindow(const char *const & windowNameMouseManager, } else if (auto* sutureOperation = dynamic_cast(operation)) { - static float stiffness = 10.0f; + float stiffness = 10.0f; if (ImGui::SliderFloat("Stiffness", &stiffness, 0.0f, 1000.0f)) { sutureOperation->setStiffness(stiffness); } - static float damping = 1.0f; + float damping = 1.0f; if (ImGui::SliderFloat("Damping", &damping, 0.0f, 10.0f)) { sutureOperation->setDamping(damping); From 4008ebb4e0edc2054ece852dcf6d1c546bb0104f Mon Sep 17 00:00:00 2001 From: Hugo Date: Thu, 5 Feb 2026 10:28:47 +0100 Subject: [PATCH 2/4] Apply suggestion from @hugtalbot --- SofaImGui/src/SofaImGui/windows/MouseManager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SofaImGui/src/SofaImGui/windows/MouseManager.cpp b/SofaImGui/src/SofaImGui/windows/MouseManager.cpp index da9039bdaf..34f19696c2 100644 --- a/SofaImGui/src/SofaImGui/windows/MouseManager.cpp +++ b/SofaImGui/src/SofaImGui/windows/MouseManager.cpp @@ -166,7 +166,7 @@ void showManagerMouseWindow(const char *const & windowNameMouseManager, } } - float scale = topologyOperation->getScale(); + static float scale = topologyOperation->getScale(); if (ImGui::SliderFloat("Selector scale", &scale, 0.0f, 100.0f)) { topologyOperation->setScale(scale); From 6660abf31702654e637bb7189fd806e27e2f2b86 Mon Sep 17 00:00:00 2001 From: Hugo Date: Thu, 5 Feb 2026 10:29:28 +0100 Subject: [PATCH 3/4] Update SofaImGui/src/SofaImGui/windows/MouseManager.cpp --- SofaImGui/src/SofaImGui/windows/MouseManager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SofaImGui/src/SofaImGui/windows/MouseManager.cpp b/SofaImGui/src/SofaImGui/windows/MouseManager.cpp index 34f19696c2..f376f2aa2b 100644 --- a/SofaImGui/src/SofaImGui/windows/MouseManager.cpp +++ b/SofaImGui/src/SofaImGui/windows/MouseManager.cpp @@ -187,7 +187,7 @@ void showManagerMouseWindow(const char *const & windowNameMouseManager, } else if (auto* sutureOperation = dynamic_cast(operation)) { - float stiffness = 10.0f; + static float stiffness = 10.0f; if (ImGui::SliderFloat("Stiffness", &stiffness, 0.0f, 1000.0f)) { sutureOperation->setStiffness(stiffness); From 009f746f39afaaedef67cd872c9e8554a72e9df0 Mon Sep 17 00:00:00 2001 From: Hugo Date: Thu, 5 Feb 2026 10:29:34 +0100 Subject: [PATCH 4/4] Update SofaImGui/src/SofaImGui/windows/MouseManager.cpp --- SofaImGui/src/SofaImGui/windows/MouseManager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SofaImGui/src/SofaImGui/windows/MouseManager.cpp b/SofaImGui/src/SofaImGui/windows/MouseManager.cpp index f376f2aa2b..2c674ee179 100644 --- a/SofaImGui/src/SofaImGui/windows/MouseManager.cpp +++ b/SofaImGui/src/SofaImGui/windows/MouseManager.cpp @@ -193,7 +193,7 @@ void showManagerMouseWindow(const char *const & windowNameMouseManager, sutureOperation->setStiffness(stiffness); } - float damping = 1.0f; + static float damping = 1.0f; if (ImGui::SliderFloat("Damping", &damping, 0.0f, 10.0f)) { sutureOperation->setDamping(damping);