From 0a8be6e180ecd9aab46316b9a5d3031e6d759969 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20=C5=A0toura=C4=8D?= <525032@mail.muni.cz> Date: Wed, 15 May 2024 17:17:53 +0200 Subject: [PATCH] change pad to be on E:XY, RT:YZ axes --- src/algo/src/misc.cpp | 12 ++++----- src/edit/include/edit/editor.hpp | 1 + src/edit/src/editor.cpp | 45 +++++++++++++++++--------------- src/filein/src/module_loader.cpp | 14 ++++++---- 4 files changed, 40 insertions(+), 32 deletions(-) diff --git a/src/algo/src/misc.cpp b/src/algo/src/misc.cpp index 0effe7d..91b3441 100644 --- a/src/algo/src/misc.cpp +++ b/src/algo/src/misc.cpp @@ -94,17 +94,17 @@ bool AABB_intersect(const AABB &fst_aabb, const AABB &snd_aabb, const node_ptr & std::pair<std::size_t, std::size_t> get_pad_width_height_from_connector_count(const std::vector<connector_ptr> &connectors) { float max_x_pos = 0; - float max_z_pos = 0; + float max_y_pos = 0; for (const auto &connector : connectors) { const auto &con_node = connector->getNode(); - const auto x_pos = con_node->getPositionWorld().x; - const auto z_pos = con_node->getPositionWorld().z; + const auto x_pos = con_node->getPositionLocal().x; + const auto y_pos = con_node->getPositionLocal().y; if (x_pos > max_x_pos) max_x_pos = x_pos; - if (z_pos > max_z_pos) - max_z_pos = z_pos; + if (y_pos > max_y_pos) + max_y_pos = y_pos; } - return { static_cast<std::size_t>(max_x_pos) + 1, static_cast<std::size_t>(max_z_pos) + 1 }; + return { static_cast<std::size_t>(max_x_pos) + 1, static_cast<std::size_t>(max_y_pos) + 1 }; } \ No newline at end of file diff --git a/src/edit/include/edit/editor.hpp b/src/edit/include/edit/editor.hpp index 4e322de..4d11a5a 100644 --- a/src/edit/include/edit/editor.hpp +++ b/src/edit/include/edit/editor.hpp @@ -420,6 +420,7 @@ private: void initializePad(); void initializeUnknown(); void createPad(std::size_t &width, std::size_t &height); + void generatePad(std::size_t &width, std::size_t &height); void setVoxelGraphToScene(voxel_graph_ptr prev_vg, voxel_graph_ptr new_vg); void addVoxelGraphToScene(voxel_graph_ptr vg); void removeVoxelGraphFromScene(voxel_graph_ptr vg); diff --git a/src/edit/src/editor.cpp b/src/edit/src/editor.cpp index c10f614..21f187d 100644 --- a/src/edit/src/editor.cpp +++ b/src/edit/src/editor.cpp @@ -1054,17 +1054,9 @@ void Editor::initializePad() using namespace rofi; module_type_voxel_graphs[pad] = std::make_shared<VoxelGraph>(); - auto open_con_node = Node::create(glm::vec3(0.0f, 0.0f, 0.0f), get_connector_face_rotation(glm::vec3(0.0f, 1.0f, 0.0f))); - auto open_connector = module_type_voxel_graphs[pad]->addConnector(open_con_node, connector_type::open); - addConnectorMesh(open_con_node, connector_type::fixed); - open_con_node->addObject(open_connector); - - auto pad_board_node = Node::create(glm::vec3(0.0f, -0.5f, 0.0f)); - auto pad_board = module_type_voxel_graphs[pad]->addPadBoard(pad_board_node); - scene->addMesh(pad_board_node, pad_board_mesh); - pad_board_node->addObject(pad_board); - - module_type_voxel_graphs[pad]->join(open_connector, pad_board, enum_to_vec(side::y_pos)); + std::size_t initial_width = 1; + std::size_t initial_height = 1; + generatePad(initial_width, initial_height); } void Editor::initializeUnknown() @@ -1091,19 +1083,32 @@ void Editor::createPad(std::size_t &width, std::size_t &height) module_type_voxel_graphs[pad] = std::make_shared<VoxelGraph>(); + generatePad(width, height); + + is_creating_pad = false; + + voxel_graph = module_type_voxel_graphs[pad]; + addVoxelGraphToScene(voxel_graph); +} + +void Editor::generatePad(std::size_t &width, std::size_t &height) +{ + using enum build_mode_I; + using namespace rofi; + for ( int x = 0; x < width; ++x ) { - for ( int z = 0; z < height; ++z ) + for ( int y = 0; y < height; ++y ) { float x_pos = static_cast<float>(x); - float z_pos = static_cast<float>(z); + float y_pos = static_cast<float>(y); - auto open_con_node = Node::create(glm::vec3(x_pos, 0.0f, z_pos), get_connector_face_rotation(glm::vec3(0.0f, 1.0f, 0.0f))); + auto open_con_node = Node::create(glm::vec3(x_pos, y_pos, 0.0f), get_connector_face_rotation(glm::vec3(0.0f, 0.0f, 1.0f))); auto open_connector = module_type_voxel_graphs[pad]->addConnector(open_con_node, connector_type::open); addConnectorMesh(open_con_node, connector_type::fixed); open_con_node->addObject(open_connector); - auto pad_board_node = Node::create(glm::vec3(x_pos, -0.5f, z_pos)); + auto pad_board_node = Node::create(glm::vec3(x_pos, y_pos, -0.5f), glm::angleAxis(glm::radians(90.0f), glm::vec3(1.0f, 0.0f, 0.0f))); auto pad_board = module_type_voxel_graphs[pad]->addPadBoard(pad_board_node); scene->addMesh(pad_board_node, pad_board_mesh); pad_board_node->addObject(pad_board); @@ -1111,11 +1116,6 @@ void Editor::createPad(std::size_t &width, std::size_t &height) module_type_voxel_graphs[pad]->join(open_connector, pad_board, enum_to_vec(side::y_pos)); } } - - is_creating_pad = false; - - voxel_graph = module_type_voxel_graphs[pad]; - addVoxelGraphToScene(voxel_graph); } void Editor::setVoxelGraphToScene(voxel_graph_ptr prev_vg, voxel_graph_ptr new_vg) @@ -2621,7 +2621,10 @@ void Editor::teleportModulesByConnectors(const connector_ptr source_connector, c source_parent->rotateRotationQuat(glm::angleAxis(oriented_angle, destination_facing)); // Rotate to selected cardinality // Have to use -radians because cardinality is from destination to source and this needs to rotate the source to the destination - auto orientation = source_is_head || destination_is_head ? glm::radians(rofi::cardinal_to_degree(selected_cardinality)) : -glm::radians(rofi::cardinal_to_degree(selected_cardinality)); + auto orientation = source_is_head || destination_is_head + ? glm::radians(rofi::cardinal_to_degree(selected_cardinality)) + : -glm::radians(rofi::cardinal_to_degree(selected_cardinality)); + source_parent->rotateRotationQuat(glm::angleAxis(orientation, destination_facing)); // Translation diff --git a/src/filein/src/module_loader.cpp b/src/filein/src/module_loader.cpp index 92cee9f..d000433 100644 --- a/src/filein/src/module_loader.cpp +++ b/src/filein/src/module_loader.cpp @@ -703,17 +703,17 @@ voxel_graph_ptr import_pad(const boost::json::array &components_array, const boo for ( int x = 0; x < width; ++x ) { - for ( int z = 0; z < height; ++z ) + for ( int y = 0; y < height; ++y ) { float x_pos = static_cast<float>(x); - float z_pos = static_cast<float>(z); + float y_pos = static_cast<float>(y); - auto open_con_node = Node::create(glm::vec3(x_pos, 0.0f, z_pos), get_connector_face_rotation(glm::vec3(0.0f, 1.0f, 0.0f))); + auto open_con_node = Node::create(glm::vec3(x_pos, y_pos, 0.0f), get_connector_face_rotation(glm::vec3(0.0f, 0.0f, 1.0f))); auto open_connector = vg->addConnector(open_con_node, connector_type::open); // addConnectorMesh(open_con_node, connector_type::fixed); // open_con_node->addObject(open_connector); - auto pad_board_node = Node::create(glm::vec3(x_pos, -0.5f, z_pos)); + auto pad_board_node = Node::create(glm::vec3(x_pos, y_pos, -0.5f), glm::angleAxis(glm::radians(90.0f), glm::vec3(1.0f, 0.0f, 0.0f))); auto pad_board = vg->addPadBoard(pad_board_node); // scene->addMesh(pad_board_node, pad_board_mesh); // pad_board_node->addObject(pad_board); @@ -964,7 +964,11 @@ std::pair<uint64_t, uint64_t> get_pad_width_height_from_joints(const std::size_t return {1, 1}; if (roficom_count > from_to_std.size()) - return {roficom_count, 1}; + { + return std::get<2>(from_to_std.back())[3].z == 1.0f + ? std::pair<uint64_t, uint64_t>{roficom_count, 1} + : std::pair<uint64_t, uint64_t>{ 1, roficom_count }; + } uint64_t max_to_from_0 = 0; -- GitLab