diff --git a/src/edit/src/editor.cpp b/src/edit/src/editor.cpp index e1f373623682aa2acb9761edd89a0461897ec0bb..e657f0c697f64e56e57c3309645a8042ad96ab1e 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 3b038378e120d5cdb2fbfbf012433d3adb728f7d..e60dcce10e823b2fed41974d3b90d80c80b2fb1e 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 02bb78d9a00b5140e066ab62092b646f85664489..07fca3d0d6a629eba51f4272ff54333676ef0507 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 57f2159aeaa236e525e371aadd25af817378d29c..c9308c5f262139cf309b26d19abcdd1aa86e6126 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 020d449caf635c66c56bc8657a57afb20767c699..7327354a6e47277e74bd5d548257f5e7ffd92c7e 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) {