Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • qtrtik/rofibots
1 result
Show changes
Commits on Source (2)
{
"modules" : [
{
"alpha" : -90,
"beta" : 0,
"gamma" : -83,
"id" : 2,
"type" : "universal"
},
{
"alpha" : 0,
"beta" : -90,
"gamma" : -88,
"id" : 4,
"type" : "universal"
},
{
"alpha" : -45,
"beta" : -34,
"gamma" : 34,
"id" : 0,
"type" : "universal"
},
{
"alpha" : -90,
"beta" : -85,
"gamma" : 0,
"id" : 1,
"type" : "universal"
},
{
"alpha" : 0,
"beta" : 45,
"gamma" : -0,
"id" : 5,
"type" : "universal"
},
{
"width" : 3,
"height" : 3,
"id" : 6,
"type" : "pad"
},
{
"alpha" : 0,
"beta" : -79,
"gamma" : 0,
"id" : 3,
"type" : "universal"
}
],
"spaceJoints" : [
{
"point" : [
-1.50364,
1.8788,
-0.0393324
],
"joint" : {
"type" : "rigid",
"sourceToDestination" : [
[
0.745908,
-0.463592,
0.47823,
0
],
[
-0.172367,
0.559193,
0.810921,
0
],
[
-0.643359,
-0.687303,
0.337199,
0
],
[
0,
0,
0,
1
]
],
"positions" : [
]
},
"to" : {
"component" : 0,
"id" : 2
}
}
],
"moduleJoints" : [
{
"from" : {
"id" : 1,
"connector" : "B-Z"
},
"to" : {
"id" : 0,
"connector" : "B-Z"
},
"orientation" : "West"
},
{
"from" : {
"id" : 2,
"connector" : "B+X"
},
"to" : {
"id" : 1,
"connector" : "A-Z"
},
"orientation" : "South"
},
{
"from" : {
"id" : 3,
"connector" : "B-Z"
},
"to" : {
"id" : 2,
"connector" : "B-Z"
},
"orientation" : "South"
},
{
"from" : {
"id" : 4,
"connector" : "A-Z"
},
"to" : {
"id" : 3,
"connector" : "B-X"
},
"orientation" : "North"
},
{
"from" : {
"id" : 5,
"connector" : "B-Z"
},
"to" : {
"id" : 0,
"connector" : "A-Z"
},
"orientation" : "South"
},
{
"from" : {
"id" : 6,
"connector" : 3
},
"to" : {
"id" : 5,
"connector" : "A-Z"
},
"orientation" : "West"
}
]
}
\ No newline at end of file
{
"modules" : [
{
"alpha" : 0,
"beta" : 0,
"gamma" : 0,
"id" : 5,
"type" : "universal"
},
{
"alpha" : -90,
"beta" : 0,
"gamma" : 0,
"id" : 6,
"type" : "universal"
},
{
"alpha" : 0,
"beta" : 0,
"gamma" : 0,
"id" : 0,
"type" : "universal"
},
{
"alpha" : 0,
"beta" : 0,
"gamma" : 0,
"id" : 4,
"type" : "universal"
},
{
"alpha" : 0,
"beta" : 90,
"gamma" : 0,
"id" : 7,
"type" : "universal"
},
{
"alpha" : -90,
"beta" : 0,
"gamma" : -0,
"id" : 1,
"type" : "universal"
},
{
"alpha" : 0,
"beta" : 0,
"gamma" : 0,
"id" : 2,
"type" : "universal"
},
{
"alpha" : 0,
"beta" : -90,
"gamma" : 0,
"id" : 3,
"type" : "universal"
}
],
"spaceJoints" : [
{
"point" : [
2.17557e-06,
-1.96479,
3.0346
],
"joint" : {
"type" : "rigid",
"sourceToDestination" : [
[
1,
2.11126e-07,
3.6215e-07,
0
],
[
3.5841e-07,
0.0174526,
-0.999848,
0
],
[
-2.17414e-07,
0.999848,
0.0174526,
0
],
[
0,
0,
0,
1
]
],
"positions" : [
]
},
"to" : {
"component" : 0,
"id" : 6
}
},
{
"point" : [
0.64881,
-5.34294,
0
],
"joint" : {
"type" : "rigid",
"sourceToDestination" : [
[
1,
0,
2.13163e-14,
0
],
[
-2.13163e-14,
0,
1,
0
],
[
0,
-1,
0,
0
],
[
0,
0,
0,
1
]
],
"positions" : [
]
},
"to" : {
"component" : 0,
"id" : 5
}
},
{
"point" : [
1.79228,
-4.38025,
0
],
"joint" : {
"type" : "rigid",
"sourceToDestination" : [
[
1,
0,
2.13163e-14,
0
],
[
-2.13163e-14,
0,
1,
0
],
[
0,
-1,
0,
0
],
[
0,
0,
0,
1
]
],
"positions" : [
]
},
"to" : {
"component" : 0,
"id" : 4
}
},
{
"point" : [
3.44712,
-1.74187,
0
],
"joint" : {
"type" : "rigid",
"sourceToDestination" : [
[
1,
0,
2.13163e-14,
0
],
[
-2.13163e-14,
0,
1,
0
],
[
0,
-1,
0,
0
],
[
0,
0,
0,
1
]
],
"positions" : [
]
},
"to" : {
"component" : 0,
"id" : 2
}
}
],
"moduleJoints" : [
{
"from" : {
"id" : 6,
"connector" : "B-Z"
},
"to" : {
"id" : 3,
"connector" : "A-Z"
},
"orientation" : "South"
},
{
"from" : {
"id" : 1,
"connector" : "B-Z"
},
"to" : {
"id" : 3,
"connector" : "B-Z"
},
"orientation" : "South"
},
{
"from" : {
"id" : 1,
"connector" : "A-Z"
},
"to" : {
"id" : 0,
"connector" : "B-Z"
},
"orientation" : "North"
},
{
"from" : {
"id" : 6,
"connector" : "A-Z"
},
"to" : {
"id" : 7,
"connector" : "A-Z"
},
"orientation" : "North"
},
{
"from" : {
"id" : 0,
"connector" : "A-Z"
},
"to" : {
"id" : 7,
"connector" : "B-Z"
},
"orientation" : "South"
}
]
}
\ No newline at end of file
{
"modules" : [
{
"alpha" : -90,
"beta" : 0,
"gamma" : 0,
"id" : 6,
"type" : "universal"
},
{
"alpha" : 0,
"beta" : 0,
"gamma" : 0,
"id" : 5,
"type" : "universal"
},
{
"alpha" : 0,
"beta" : 0,
"gamma" : 0,
"id" : 0,
"type" : "universal"
},
{
"alpha" : 0,
"beta" : 0,
"gamma" : -0,
"id" : 4,
"type" : "universal"
},
{
"alpha" : -90,
"beta" : 0,
"gamma" : -0,
"id" : 1,
"type" : "universal"
},
{
"alpha" : 0,
"beta" : 90,
"gamma" : -0,
"id" : 7,
"type" : "universal"
},
{
"alpha" : 0,
"beta" : -90,
"gamma" : 0,
"id" : 3,
"type" : "universal"
},
{
"alpha" : 0,
"beta" : 0,
"gamma" : 0,
"id" : 2,
"type" : "universal"
},
{
"alpha" : 90,
"beta" : 0,
"gamma" : -0,
"id" : 8,
"type" : "universal"
},
{
"alpha" : 0,
"beta" : 0,
"gamma" : -0,
"id" : 9,
"type" : "universal"
}
],
"spaceJoints" : [
{
"point" : [
1.00015,
2.00002,
1.99997
],
"joint" : {
"type" : "rigid",
"sourceToDestination" : [
[
-1,
3.16759e-08,
8.2612e-05,
0
],
[
-3.25272e-08,
-1,
-1.0252e-05,
0
],
[
8.2612e-05,
-1.03116e-05,
1,
0
],
[
0,
0,
0,
1
]
],
"positions" : [
]
},
"to" : {
"component" : 0,
"id" : 8
}
}
],
"moduleJoints" : [
{
"from" : {
"id" : 6,
"connector" : "B-Z"
},
"to" : {
"id" : 3,
"connector" : "A-Z"
},
"orientation" : "South"
},
{
"from" : {
"id" : 6,
"connector" : "A-Z"
},
"to" : {
"id" : 7,
"connector" : "A-Z"
},
"orientation" : "North"
},
{
"from" : {
"id" : 1,
"connector" : "B-Z"
},
"to" : {
"id" : 3,
"connector" : "B-Z"
},
"orientation" : "South"
},
{
"from" : {
"id" : 0,
"connector" : "A-Z"
},
"to" : {
"id" : 7,
"connector" : "B-Z"
},
"orientation" : "South"
},
{
"from" : {
"id" : 1,
"connector" : "A-Z"
},
"to" : {
"id" : 0,
"connector" : "B-Z"
},
"orientation" : "North"
},
{
"from" : {
"id" : 3,
"connector" : "B-X"
},
"to" : {
"id" : 5,
"connector" : "B+X"
},
"orientation" : "North"
},
{
"from" : {
"id" : 4,
"connector" : "B-Z"
},
"to" : {
"id" : 5,
"connector" : "A-Z"
},
"orientation" : "South"
},
{
"from" : {
"id" : 1,
"connector" : "B+X"
},
"to" : {
"id" : 5,
"connector" : "A-X"
},
"orientation" : "North"
},
{
"from" : {
"id" : 2,
"connector" : "B+X"
},
"to" : {
"id" : 3,
"connector" : "B+X"
},
"orientation" : "West"
},
{
"from" : {
"id" : 3,
"connector" : "A-X"
},
"to" : {
"id" : 2,
"connector" : "A-X"
},
"orientation" : "North"
},
{
"from" : {
"id" : 8,
"connector" : "A-Z"
},
"to" : {
"id" : 2,
"connector" : "A-Z"
},
"orientation" : "South"
},
{
"from" : {
"id" : 6,
"connector" : "B+X"
},
"to" : {
"id" : 8,
"connector" : "A+X"
},
"orientation" : "North"
},
{
"from" : {
"id" : 9,
"connector" : "B-Z"
},
"to" : {
"id" : 8,
"connector" : "B-Z"
},
"orientation" : "South"
},
{
"from" : {
"id" : 0,
"connector" : "A-X"
},
"to" : {
"id" : 9,
"connector" : "B+X"
},
"orientation" : "West"
}
]
}
\ No newline at end of file
......@@ -58,6 +58,8 @@ public:
bool save_rofiworld_prompt = false;
bool save_rofiworld_visible = false;
bool save_rofiworld_error = false;
bool save_rofiworld_use_current_name = true;
bool select_rofiworld_prompt = false;
bool export_rofiworld_use_selected_space_joint = false;
char name_buffer[256] = {0};
int module_id = 0;
......@@ -70,6 +72,8 @@ public:
connector_ptr connector;
voxel_ptr voxel;
rofiworld_ptr selected_rofiworld;
/* Ref. variables, need to be initialized in constructor */
phase &editor_phase;
mode_I &editor_mode_I;
......@@ -86,6 +90,7 @@ public:
module_ptr &selected_add_module;
module_ptr &selected_module;
rofiworld_ptr &rofiworld;
std::vector<rofiworld_ptr> &rofiworld_selection;
bool &voxel_selected;
bool &connector_selected;
bool &primary_axis;
......@@ -114,7 +119,7 @@ public:
UIData(phase &_editor_phase, mode_I &_editor_mode_I, mode_II &_editor_mode_II, build_mode_I &_editor_build_mode_I, build_mode_II &_editor_build_mode_II,
state &_control_state, bool &_ui_visible, rofi::component &_chosen_component, rofi::connector_type &_chosen_con_type,
std::vector<rofi::component> &_allowed_components, std::vector<module_ptr> &_modules, module_ptr &_selected_add_module, module_ptr &_selected_module,
rofiworld_ptr &_rofiworld, bool &_is_connecting_modules, bool &_can_connect_modules,
rofiworld_ptr &_rofiworld, std::vector<rofiworld_ptr> &_rofiworld_selection, bool &_is_connecting_modules, bool &_can_connect_modules,
rofi::cardinal &_selected_cardinality, std::pair<connector_ptr, connector_ptr> &_selected_connectors, std::pair<module_ptr, module_ptr> &_selected_modules_connect,
bool &_connector_selected, bool &_voxel_selected,
bool &_is_moving_module, glm::vec3 &_module_position, int &_coordinate_space_selection, bool &_is_rotating_module, bool &_is_resetting_module_rotation,
......@@ -136,6 +141,7 @@ public:
selected_add_module{_selected_add_module},
selected_module{_selected_module},
rofiworld{_rofiworld},
rofiworld_selection{_rofiworld_selection},
is_connecting_modules{_is_connecting_modules},
can_connect_modules{_can_connect_modules},
selected_cardinality{_selected_cardinality},
......@@ -205,7 +211,7 @@ class Editor
char module_type_buffer[256] = {0};
UIData ui = UIData{editor_phase, editor_mode_I, editor_mode_II, editor_build_mode_I, editor_build_mode_II, control_state, ui_visible,
chosen_component, chosen_con_type, allowed_components, modules, selected_add_module, selected_module, rofiworld,
chosen_component, chosen_con_type, allowed_components, modules, selected_add_module, selected_module, rofiworld, rofiworld_selection,
is_connecting_modules, can_connect_modules, selected_cardinality, selected_connectors, selected_modules_connect,
connector_selected, voxel_selected, is_moving_module, module_position, coordinate_space_selection,
is_rotating_module, is_resetting_module_rotation, module_rotation_angles, is_rotating_component, component_rotation_angle,
......@@ -232,7 +238,7 @@ class Editor
std::vector<module_ptr> modules = import_saved_configurations_module();
rofiworld_ptr rofiworld = std::make_shared<rofi::RofiWorld>();
std::map<std::string, rofiworld_ptr> rofiworld_selection;
std::vector<rofiworld_ptr> rofiworld_selection;
module_ptr selected_add_module;
module_ptr prev_selected_add_module;
......@@ -356,6 +362,7 @@ public:
void manageUISaveModule();
void manageUISaveRofiWorld();
void manageUIImportRofiWorld();
void manageUISelectRofiWorld();
bool checkModuleExport(const voxel_graph_ptr &voxel_graph, const build_mode_I build_mode);
......@@ -582,6 +589,8 @@ private:
void pickSpaceJoint(rofiworld_ptr rofiworld, module_ptr module, std::set<module_ptr> &found_modules);
connector_ptr pickSpaceJointUniversal(const module_ptr module);
connector_ptr pickSpaceJointGeneric(const module_ptr module);
void addToRofiWorlds(rofiworld_ptr rofiworld, const std::string name);
};
}
......
......@@ -53,6 +53,7 @@ void Editor::manageUI()
manageUISaveRofiWorld();
manageUIImportRofiWorld();
manageUISelectRofiWorld();
}
void Editor::manageUISaveModule()
......@@ -122,22 +123,18 @@ void Editor::manageUISaveRofiWorld()
bool exported = false;
if (ui.save_rofiworld_prompt)
{
// check valid
if (voxel_graph->empty() || detectCollision(true, rofiworld))
// Not sure if there should be an invalid state here
if (false)
{
ui.save_rofiworld_error = true;
ui.save_rofiworld_visible = true;
ui.export_file_prompt = false;
}
else
{
saved = true;
ui.save_rofiworld_prompt = false;
ui.save_rofiworld_error = false;
ui.export_file_prompt = false;
pickSpaceJoints(rofiworld, ui.export_rofiworld_use_selected_space_joint ? selected_module : nullptr);
export_rofiworld(rofiworld, selected_space_joints, ui.name_buffer);
// addToRofiWorlds(...);
addToRofiWorlds(rofiworld, ui.save_rofiworld_use_current_name ? rofiworld->getName() : std::string(ui.name_buffer));
}
}
......@@ -164,32 +161,50 @@ void Editor::manageUIImportRofiWorld()
if (editor_phase != phase::two)
return;
if (ui.import_file_prompt)
{
const std::string rofiworlds_directory = "./data/rofi/rofiworlds/";
auto imported_rofiworld = import_rofiworld(std::filesystem::path(rofiworlds_directory + std::string(ui.name_buffer) + std::string(".json")));
if (imported_rofiworld)
{
for (const auto &module : imported_rofiworld->getModulesSet())
setRoFIMesh(module->getParts());
if (!ui.import_file_prompt)
return;
setRofiWorldNodeTreeToScene(rofiworld->getNodeTree(), imported_rofiworld->getNodeTree());
rofiworld = imported_rofiworld;
voxel_graph = imported_rofiworld->getVoxelGraph();
const std::string rofiworlds_directory = "./data/rofi/rofiworlds/";
auto imported_rofiworld = import_rofiworld(std::filesystem::path(rofiworlds_directory + std::string(ui.name_buffer) + std::string(".json")));
if (imported_rofiworld)
{
for (const auto &module : imported_rofiworld->getModulesSet())
setRoFIMesh(module->getParts());
ui.import_file_error = false;
ui.name_buffer[0] = '\0';
resetBuildModeIIVariables();
}
else
{
setError("Error: Cannot Import Configuration");
ui.import_file_visible = true;
ui.import_file_error = true;
}
resetBuildModeIIVariables();
setRofiWorldNodeTreeToScene(rofiworld->getNodeTree(), imported_rofiworld->getNodeTree());
rofiworld = imported_rofiworld;
voxel_graph = imported_rofiworld->getVoxelGraph();
ui.import_file_prompt = false;
ui.import_file_error = false;
ui.name_buffer[0] = '\0';
}
else
{
setError("Error: Cannot Import Configuration");
ui.import_file_visible = true;
ui.import_file_error = true;
}
ui.import_file_prompt = false;
}
void Editor::manageUISelectRofiWorld()
{
if (editor_phase != phase::two)
return;
if (!ui.select_rofiworld_prompt || ui.selected_rofiworld == rofiworld)
return;
resetBuildModeIIVariables();
setRofiWorldNodeTreeToScene(rofiworld->getNodeTree(), ui.selected_rofiworld->getNodeTree());
rofiworld = ui.selected_rofiworld;
voxel_graph = ui.selected_rofiworld->getVoxelGraph();
ui.select_rofiworld_prompt = false;
}
bool Editor::checkModuleExport(const voxel_graph_ptr &voxel_graph, const build_mode_I build_mode)
......@@ -214,6 +229,7 @@ bool Editor::checkModuleExport(const voxel_graph_ptr &voxel_graph, const build_m
void Editor::resetBuildModeIIVariables()
{
selected_module = nullptr;
removeModuleFromScene(selected_add_module);
selected_add_module = nullptr;
prev_selected_add_module = nullptr;
prev_rebuild_node = nullptr;
......@@ -1289,6 +1305,12 @@ void Editor::addToModules(std::string name, std::string type)
modules.emplace_back(new_module);
}
void Editor::addToRofiWorlds(rofiworld_ptr rofiworld, const std::string name)
{
rofiworld->setName(name);
rofiworld_selection.emplace_back(rofiworld);
}
void Editor::removeFromModules(voxel_graph_ptr vg)
{
std::erase_if(modules, [&vg](const module_ptr &module) { return module->getParts() == vg; });
......
......@@ -263,7 +263,9 @@ void export_moduleJoint_orientation(boost::json::object &moduleJoint_object, con
std::string orientation;
switch(Connector::get_mutual_orientation(from_con, to_con))
const auto mutual_orientation = Connector::get_mutual_orientation(from_con, to_con);
switch(mutual_orientation)
{
case North:
orientation = "North";
......@@ -309,7 +311,7 @@ rofiworld_ptr import_rofiworld(const std::filesystem::path file_path)
std::cerr << "Cannot import RofiWorld. Invalid file path." << file_path << std::endl;
return nullptr;
}
const auto json_object = read_file(file_path).as_object();
boost::json::array modules_array;
......@@ -335,6 +337,8 @@ rofiworld_ptr import_rofiworld(const std::filesystem::path file_path)
import_moduleJoints(rofiworld, moduleJoints_array, spaceJoint_modules);
rofiworld->setName(std::move(file_path.stem().string()));
return rofiworld;
}
......
......@@ -30,6 +30,7 @@ void mode_I_menu_ui(const osi::Window &window, edit::UIData &data);
void mode_II_menu_ui(const osi::Window &window, edit::UIData &data);
void module_menu_ui(const osi::Window &window, edit::UIData &data);
void rofiworld_menu_ui(const osi::Window &window, edit::UIData &data);
void rofiworld_selection_menu_ui(const osi::Window &window, edit::UIData &data);
void file_menu_ui(const osi::Window &window, edit::UIData &data);
void help_menu_ui(const osi::Window &window, edit::UIData &data);
......@@ -54,6 +55,7 @@ void module_rotation_drag(edit::UIData &data, glm::vec3 &euler_angles);
void module_rotation_manual(edit::UIData &data, glm::vec3 &euler_angles);
void component_rotation_ui(const osi::Window &window, edit::UIData &data);
void save_module_ui(const osi::Window &window, edit::UIData &data);
void save_rofiworld_ui(const osi::Window &window, edit::UIData &data);
void export_file_ui(const osi::Window &window, edit::UIData &data);
void export_module_file_ui(const osi::Window &window, edit::UIData &data);
void export_rofiworld_file_ui(const osi::Window &window, edit::UIData &data);
......
......@@ -171,10 +171,36 @@ void module_menu_ui(const osi::Window &window, edit::UIData &data)
void rofiworld_menu_ui(const osi::Window &window, edit::UIData &data)
{
// TO DO
if (ImGui::MenuItem("Save RofiWorld"))
bool enabled = data.editor_mode_II == edit::mode_II::build
&& std::find(data.rofiworld_selection.begin(), data.rofiworld_selection.end(), data.rofiworld) == data.rofiworld_selection.end();
if (ImGui::MenuItem("Save RofiWorld", NULL, false, enabled))
{
// data.save_rofiworld_visible = true;
data.save_rofiworld_visible = true;
}
rofiworld_selection_menu_ui(window, data);
}
void rofiworld_selection_menu_ui(const osi::Window &window, edit::UIData &data)
{
if (ImGui::BeginMenu("Select RofiWorld", data.editor_mode_II == edit::mode_II::build))
{
for (int i = 0; i < data.rofiworld_selection.size(); ++i)
{
const auto rw = data.rofiworld_selection[i];
const auto label_string = rw->getName() + std::string("##RofiWorldSelection") + std::to_string(i);
const char* label = label_string.c_str();
if (ImGui::MenuItem(label, NULL, data.rofiworld == rw))
{
data.select_rofiworld_prompt = true;
data.selected_rofiworld = rw;
}
}
ImGui::EndMenu();
}
}
......@@ -264,6 +290,7 @@ void mode_II_build_ui(const osi::Window &window, edit::UIData &data)
component_rotation_ui(window, data);
export_file_ui(window, data);
import_file_ui(window, data);
save_rofiworld_ui(window, data);
}
int build_mode_I_to_int(edit::build_mode_I mode)
......@@ -913,6 +940,8 @@ void save_module_ui(const osi::Window &window, edit::UIData &data)
if (!data.save_module_visible)
return;
ImGui::SetNextWindowPos(ImVec2(0, mode_toolbar_height * 3), ImGuiCond_Appearing, ImVec2(0.0f, 0.0f));
if (!ImGui::Begin("Save Module Configuration", &data.save_module_visible, ImGuiWindowFlags_NoCollapse))
{
ImGui::End();
......@@ -922,7 +951,7 @@ void save_module_ui(const osi::Window &window, edit::UIData &data)
ImGui::InputText("Module Name##ModuleNameInput", data.name_buffer, sizeof(data.name_buffer),
ImGuiInputTextFlags_AutoSelectAll);
ImGui::InputInt("Module ID##SaveModuleIDInput", &data.module_id,
ImGui::InputInt("Module ID##SaveModuleIDInput", &data.module_id, 1, 1,
ImGuiInputTextFlags_AutoSelectAll
| ImGuiInputTextFlags_CharsDecimal);
......@@ -943,6 +972,41 @@ void save_module_ui(const osi::Window &window, edit::UIData &data)
ImGui::End();
}
void save_rofiworld_ui(const osi::Window &window, edit::UIData &data)
{
if (!data.save_rofiworld_visible)
return;
ImGui::SetNextWindowPos(ImVec2(0, mode_toolbar_height * 3), ImGuiCond_Appearing, ImVec2(0.0f, 0.0f));
if (!ImGui::Begin("Save RofiWorld Configuration", &data.save_rofiworld_visible,
ImGuiWindowFlags_NoCollapse
| ImGuiWindowFlags_NoResize
| ImGuiWindowFlags_AlwaysAutoResize))
{
ImGui::End();
return;
}
const auto flags = data.save_rofiworld_use_current_name
? ImGuiInputTextFlags_AutoSelectAll | ImGuiInputTextFlags_ReadOnly
: ImGuiInputTextFlags_AutoSelectAll;
ImGui::Text("RofiWorld Name:");
ImGui::InputText("##ModuleNameInput", data.name_buffer, sizeof(data.name_buffer), flags);
const auto label_string = "Use Current Name: " + data.rofiworld->getName() + "##SaveRofiWorldUseCurrentName";
const auto label = label_string.c_str();
ImGui::Checkbox(label, &data.save_rofiworld_use_current_name);
if (ImGui::Button("Submit##SaveRofiWorldButton")) {
data.save_rofiworld_prompt = true;
data.save_rofiworld_visible = false;
}
ImGui::End();
}
void export_file_ui(const osi::Window &window, edit::UIData &data)
{
if (!data.export_file_visible)
......@@ -972,7 +1036,7 @@ void export_module_file_ui(const osi::Window &window, edit::UIData &data)
ImGui::InputText("File Name##ModuleFileNameInput", data.name_buffer, sizeof(data.name_buffer),
ImGuiInputTextFlags_AutoSelectAll);
ImGui::InputInt("Module ID##ExportModuleIDInput", &data.module_id,
ImGui::InputInt("Module ID##ExportModuleIDInput", &data.module_id, 1, 1,
ImGuiInputTextFlags_AutoSelectAll
| ImGuiInputTextFlags_CharsDecimal);
......
......@@ -34,6 +34,10 @@ public:
bool empty() const { return voxel_graph->empty() && node_tree.empty(); }
const std::string &getName() const { return name; }
void setName(const std::string &_name) { name = _name; }
void setName(const std::string &&_name) { name = _name; }
const std::vector<node_ptr> &getNodeTree() const { return node_tree; }
voxel_graph_ptr getVoxelGraph() const { return voxel_graph; }
......
......@@ -404,7 +404,9 @@ cardinal degree_to_cardinal(float degree_angle)
// NOTE: This epsilon value is this large, because the editor refused to connect
// connectors at an angle of 89.9989548 degrees, which I believe was a product
// of the floating-point arithmetic
float epsilon = 0.01f;
// NOTE 2: It also computed an angle of 0.0279764552 from a valid imported configuration
float epsilon = 0.05f;
if (glm::epsilonEqual(degree_angle, 0.0f, epsilon))
return North;
if (glm::epsilonEqual(degree_angle, 90.0f, epsilon))
......