diff --git a/src/edit/include/edit/editor.hpp b/src/edit/include/edit/editor.hpp index e49af0c8e8b1540ce0490d5f5ae12a06ff849c7b..99055875e1bf935f29d45f347fba12b8172e818c 100644 --- a/src/edit/include/edit/editor.hpp +++ b/src/edit/include/edit/editor.hpp @@ -55,6 +55,7 @@ public: bool save_rofiworld_prompt = false; bool save_rofiworld_visible = false; bool save_rofiworld_error = false; + bool export_rofiworld_use_selected_space_joint = false; char name_buffer[256] = {0}; int module_id = 0; int add_module_list_index = -1; @@ -578,7 +579,8 @@ private: bool detectCollision(bool something_changed, rofiworld_ptr rofiworld); /* ROFIWORLD EXPORT */ - void pickSpaceJoints(rofiworld_ptr rofiworld, bool automatic); + void pickSpaceJoints(rofiworld_ptr rofiworld, module_ptr initial_module); + void pickSpaceJoint(rofiworld_ptr rofiworld, module_ptr module, std::set<module_ptr> &found_modules); connector_ptr pickSpaceJointUniversal(const module_ptr module); connector_ptr pickSpaceJointGeneric(const module_ptr module); }; diff --git a/src/edit/src/editor.cpp b/src/edit/src/editor.cpp index a15fc86595033fa416e47be7dac6b85532fa304b..63b81f6090ce50e9b1c9d61d9c33701cb75684ae 100644 --- a/src/edit/src/editor.cpp +++ b/src/edit/src/editor.cpp @@ -133,9 +133,9 @@ void Editor::manageUISaveRofiWorld() ui.save_rofiworld_prompt = false; ui.save_rofiworld_error = false; ui.export_file_prompt = false; - pickSpaceJoints(rofiworld, true); + pickSpaceJoints(rofiworld, ui.export_rofiworld_use_selected_space_joint ? selected_module : nullptr); export_rofiworld(rofiworld, selected_space_joints, ui.name_buffer); - // addToModules(std::string(ui.name_buffer), std::string(module_type_buffer)); + // addToRofiWorlds(...); } } @@ -143,7 +143,7 @@ void Editor::manageUISaveRofiWorld() { exported = true; ui.export_file_prompt = false; - pickSpaceJoints(rofiworld, true); + pickSpaceJoints(rofiworld, ui.export_rofiworld_use_selected_space_joint ? selected_module : nullptr); export_rofiworld(rofiworld, selected_space_joints, ui.name_buffer); } @@ -2922,33 +2922,37 @@ bool Editor::detectCollision(bool something_changed, rofiworld_ptr rofiworld) /* ROFIWORLD EXPORT */ -void Editor::pickSpaceJoints(rofiworld_ptr rofiworld, bool automatic) +void Editor::pickSpaceJoints(rofiworld_ptr rofiworld, module_ptr initial_module) { - if (automatic) - { - std::set<module_ptr> found_modules; - for (const auto [module, id] : rofiworld->getModulesMap()) - { - if (found_modules.contains(module)) - continue; + std::set<module_ptr> found_modules; - std::set<module_ptr> reachable_modules; + if (initial_module) + pickSpaceJoint(rofiworld, initial_module, found_modules); - connector_ptr connector = nullptr; + for (const auto [module, id] : rofiworld->getModulesMap()) + { + if (found_modules.contains(module)) + continue; - if (module->getType() == "universal") - connector = pickSpaceJointUniversal(module); - else - connector = pickSpaceJointGeneric(module); + pickSpaceJoint(rofiworld, module, found_modules); + } +} - reachable_modules = rofiworld->reachableModules(connector); - selected_space_joints.emplace_back(connector); +void Editor::pickSpaceJoint(rofiworld_ptr rofiworld, module_ptr module, std::set<module_ptr> &found_modules) +{ + std::set<module_ptr> reachable_modules; + connector_ptr connector = nullptr; - found_modules.insert(reachable_modules.begin(), reachable_modules.end()); - } - } + if (module->getType() == "universal") + connector = pickSpaceJointUniversal(module); + else + connector = pickSpaceJointGeneric(module); + + reachable_modules = rofiworld->reachableModules(connector); + selected_space_joints.emplace_back(connector); + found_modules.insert(reachable_modules.begin(), reachable_modules.end()); } connector_ptr Editor::pickSpaceJointUniversal(const module_ptr module) diff --git a/src/gui/src/ui.cpp b/src/gui/src/ui.cpp index fd8eb6ff9f762ea8ad7e49625094795aac4b66b2..6b61ec4c373c241885397508225848b911780e34 100644 --- a/src/gui/src/ui.cpp +++ b/src/gui/src/ui.cpp @@ -765,7 +765,7 @@ void module_rotation_ui(const osi::Window &window, edit::UIData &data) float size_x = static_cast<float>(window.size().x); float size_y = static_cast<float>(window.size().y); - ImGui::SetNextWindowPos(ImVec2(size_x, size_y - 40.0f), ImGuiCond_Appearing, ImVec2(1.0f, 1.0f)); + ImGui::SetNextWindowPos(ImVec2(size_x, size_y - 40.0f), ImGuiCond_Always, ImVec2(1.0f, 1.0f)); ImGui::Begin("Module Rotation##ModuleRotationMenu", NULL, ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize @@ -990,7 +990,7 @@ void export_module_file_ui(const osi::Window &window, edit::UIData &data) void export_rofiworld_file_ui(const osi::Window &window, edit::UIData &data) { if (!ImGui::Begin("Export RofiWorld Configuration", &data.export_file_visible, - ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoResize)) + ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_AlwaysAutoResize)) { ImGui::End(); return; @@ -1004,7 +1004,7 @@ void export_rofiworld_file_ui(const osi::Window &window, edit::UIData &data) | ImGuiInputTextFlags_AlwaysOverwrite); - // NECO SE SPACE JOINTS + ImGui::Checkbox("Selected Module as spaceJoint##spaceJointCheckBox", &data.export_rofiworld_use_selected_space_joint); if (ImGui::Button("Submit")) { data.export_file_prompt = true; @@ -1030,7 +1030,7 @@ void rotation_settings(const osi::Window &window, edit::UIData &data) float size_x = static_cast<float>(window.size().x); float size_y = static_cast<float>(window.size().y); - ImGui::SetNextWindowPos(ImVec2(size_x, size_y - 40.0f), ImGuiCond_Appearing, ImVec2(1.0f, 1.0f)); + ImGui::SetNextWindowPos(ImVec2(size_x, size_y - 40.0f), ImGuiCond_Always, ImVec2(1.0f, 1.0f)); ImGui::Begin("Rotation Limits", NULL, ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize