From 847a0ea3dc89fdeb8f424a2ebcb2a7896e63ce8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20=C5=A0toura=C4=8D?= <525032@mail.muni.cz> Date: Sun, 12 May 2024 23:53:49 +0200 Subject: [PATCH] add Invalid cardinality, fix connectModule --- src/edit/src/editor.cpp | 4 +++- src/filein/src/rofiworld_loader.cpp | 2 ++ src/gui/src/ui.cpp | 3 +++ src/rofi/include/rofi/connector.hpp | 2 +- src/rofi/src/connector.cpp | 7 +++---- 5 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/edit/src/editor.cpp b/src/edit/src/editor.cpp index e1f3736..e657f0c 100644 --- a/src/edit/src/editor.cpp +++ b/src/edit/src/editor.cpp @@ -2557,7 +2557,9 @@ bool Editor::checkConnectModuleValid(const connector_ptr fst_connector, const co float epsilon = 0.0001f; if (rofiworld->reachable(rofiworld->getModuleWithNode(fst_node), rofiworld->getModuleWithNode(snd_node)) - && !glm::all(glm::epsilonEqual(fst_node->getPositionWorld(), snd_node->getPositionWorld(), epsilon))) + && (!glm::all(glm::epsilonEqual(fst_node->getPositionWorld(), snd_node->getPositionWorld(), epsilon)) + || rofi::Connector::get_mutual_orientation(fst_connector, snd_connector) == rofi::cardinal::Invalid) + || rofi::Connector::get_mutual_orientation(fst_connector, snd_connector) != selected_cardinality) return false; return true; diff --git a/src/filein/src/rofiworld_loader.cpp b/src/filein/src/rofiworld_loader.cpp index 3b03837..e60dcce 100644 --- a/src/filein/src/rofiworld_loader.cpp +++ b/src/filein/src/rofiworld_loader.cpp @@ -272,6 +272,8 @@ void export_moduleJoint_orientation(boost::json::object &moduleJoint_object, con case West: orientation = "West"; break; + default: + ASSUMPTION(false); } moduleJoint_object.emplace("orientation", orientation); diff --git a/src/gui/src/ui.cpp b/src/gui/src/ui.cpp index 02bb78d..07fca3d 100644 --- a/src/gui/src/ui.cpp +++ b/src/gui/src/ui.cpp @@ -584,6 +584,9 @@ void module_connection_ui(const osi::Window &window, edit::UIData &data) case West: orientation = "West"; break; + case Invalid: + orientation = "Invalid"; + break; } ImGui::Text(orientation.c_str()); ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.7f, 0.0f, 0.0f, 1.0f)); diff --git a/src/rofi/include/rofi/connector.hpp b/src/rofi/include/rofi/connector.hpp index 57f2159..c9308c5 100644 --- a/src/rofi/include/rofi/connector.hpp +++ b/src/rofi/include/rofi/connector.hpp @@ -19,7 +19,7 @@ using connector_weak_ptr = std::weak_ptr<rofi::Connector>; enum class side { x_pos, x_neg, y_pos, y_neg, z_pos, z_neg, undefined }; enum class connector_type {fixed, open, rotation, shared_rotation, empty}; - enum cardinal { North, East, South, West }; + enum cardinal { North, East, South, West, Invalid }; class Connector : public ObjectBase { diff --git a/src/rofi/src/connector.cpp b/src/rofi/src/connector.cpp index 020d449..7327354 100644 --- a/src/rofi/src/connector.cpp +++ b/src/rofi/src/connector.cpp @@ -77,7 +77,7 @@ bool Connector::shares_module_link(connector_ptr fst_connector, connector_ptr sn cardinal Connector::get_mutual_orientation(connector_ptr source_connector, connector_ptr destination_connector) { - ASSUMPTION(Connector::shares_module_link(source_connector, destination_connector)); + // ASSUMPTION(Connector::shares_module_link(source_connector, destination_connector)); // auto source_north = source_connector->getNode()->getRotationAxisXWorld(); // auto destination_north = destination_connector->getNode()->getRotationAxisXWorld(); @@ -413,9 +413,8 @@ cardinal degree_to_cardinal(float degree_angle) return South; if (glm::epsilonEqual(degree_angle, -90.0f, epsilon)) return West; - - ASSUMPTION(false); - return North; + + return Invalid; } float cardinal_to_degree(cardinal orientation) { -- GitLab