From 67c3db727f59fdea52c876623a4ca1a6c6d6449a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20=C5=A0toura=C4=8D?= <525032@mail.muni.cz> Date: Tue, 7 May 2024 13:27:46 +0200 Subject: [PATCH] add enum cardinal conversion --- src/edit/src/editor.cpp | 12 +++++-- src/rofi/include/rofi/connector.hpp | 2 ++ src/rofi/src/connector.cpp | 51 ++++++++++++++++++++--------- 3 files changed, 48 insertions(+), 17 deletions(-) diff --git a/src/edit/src/editor.cpp b/src/edit/src/editor.cpp index f078a19..a1853a0 100644 --- a/src/edit/src/editor.cpp +++ b/src/edit/src/editor.cpp @@ -2483,9 +2483,17 @@ void Editor::teleportModulesByConnectors(const connector_ptr source_connector, c auto first_con_parent_diff = first_con_node->getPositionWorld() - first_parent->getPositionWorld(); first_parent->setPosVec(second_world_pos - first_con_parent_diff); - // auto destination_facing = -destination_connector->getNode()->getRotationAxisZWorld(); - // auto source_facing = -first_con_node->getRotationAxisZWorld(); + auto destination_facing = -destination_connector->getNode()->getRotationAxisZWorld(); + auto destination_north = destination_connector->getNode()->getRotationAxisXWorld(); + auto source_facing = -first_con_node->getRotationAxisZWorld(); + auto source_north = source_connector->getNode()->getRotationAxisXWorld(); + + // rotate to face each other + // first_parent->rotateRotationQuat(glm::angleAxis) + // rotate to selected cardinality + // auto north_delta = glm::orientedAngle(source_north, destination_north, ) + // first_parent->rotateRotationQuat(glm::angleAxis()) } void Editor::rotateModule(module_ptr selected_module, glm::vec3 &rotation_angles) diff --git a/src/rofi/include/rofi/connector.hpp b/src/rofi/include/rofi/connector.hpp index 13cc831..fa8bbf7 100644 --- a/src/rofi/include/rofi/connector.hpp +++ b/src/rofi/include/rofi/connector.hpp @@ -203,6 +203,8 @@ public: enum class side vec_to_enum(glm::vec3 local_direction); glm::vec3 enum_to_vec(enum class side s); +cardinal degree_to_cardinal(float degree_angle); +float cardinal_to_degree(cardinal orientation); } diff --git a/src/rofi/src/connector.cpp b/src/rofi/src/connector.cpp index bf78a04..f90561c 100644 --- a/src/rofi/src/connector.cpp +++ b/src/rofi/src/connector.cpp @@ -2,8 +2,6 @@ #include <rofi/voxel.hpp> -#include <iostream> - namespace rofi { @@ -79,25 +77,15 @@ bool Connector::shares_module_link(connector_ptr fst_connector, connector_ptr sn cardinal Connector::get_mutual_orientation(connector_ptr fst_connector, connector_ptr snd_connector) { + ASSUMPTION(Connector::shares_module_link(fst_connector, snd_connector)); + auto fst_north = fst_connector->getNode()->getRotationAxisXWorld(); auto snd_north = snd_connector->getNode()->getRotationAxisXWorld(); auto oriented_angle = glm::degrees(glm::orientedAngle(fst_north, snd_north, fst_connector->getNode()->getRotationAxisZWorld())); - std::cout << "oriented angle: " << oriented_angle << std::endl; - - float epsilon = 0.001f; - if (glm::epsilonEqual(oriented_angle, 0.0f, epsilon)) - return North; - if (glm::epsilonEqual(oriented_angle, -90.0f, epsilon)) - return East; - if (glm::epsilonEqual(oriented_angle, 180.0f, epsilon)) - return South; - if (glm::epsilonEqual(oriented_angle, 90.0f, epsilon)) - return West; - - ASSUMPTION(false); + return degree_to_cardinal(oriented_angle); } bool Connector::hasModuleLink() const @@ -394,4 +382,37 @@ glm::vec3 enum_to_vec(side s) } } +cardinal degree_to_cardinal(float degree_angle) +{ + float epsilon = 0.001f; + if (glm::epsilonEqual(degree_angle, 0.0f, epsilon)) + return North; + if (glm::epsilonEqual(degree_angle, -90.0f, epsilon)) + return East; + if (glm::epsilonEqual(degree_angle, 180.0f, epsilon)) + return South; + if (glm::epsilonEqual(degree_angle, 90.0f, epsilon)) + return West; + + ASSUMPTION(false); +} +float cardinal_to_degree(cardinal orientation) +{ + switch(orientation) + { + using enum cardinal; + case North: + return 0.0f; + case East: + return -90.0f; + case South: + return 180.0f; + case West: + return 90.0f; + default: + ASSUMPTION(false); + return 0.0f; + } +} + } \ No newline at end of file -- GitLab