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