diff --git a/resources/handy_models/Disc.stl b/resources/handy_models/Disc.stl deleted file mode 100644 index f19bf81ff..000000000 Binary files a/resources/handy_models/Disc.stl and /dev/null differ diff --git a/resources/handy_models/bunny.stl b/resources/handy_models/bunny.stl new file mode 100644 index 000000000..fbbf2632f Binary files /dev/null and b/resources/handy_models/bunny.stl differ diff --git a/resources/handy_models/helper_disk.stl b/resources/handy_models/helper_disk.stl new file mode 100644 index 000000000..94ab0739c Binary files /dev/null and b/resources/handy_models/helper_disk.stl differ diff --git a/resources/handy_models/torus.stl b/resources/handy_models/torus.stl new file mode 100644 index 000000000..3919fa5b2 Binary files /dev/null and b/resources/handy_models/torus.stl differ diff --git a/src/slic3r/GUI/GUI_Factories.cpp b/src/slic3r/GUI/GUI_Factories.cpp index 4de587417..d3afae871 100644 --- a/src/slic3r/GUI/GUI_Factories.cpp +++ b/src/slic3r/GUI/GUI_Factories.cpp @@ -496,8 +496,27 @@ wxMenu* MenuFactory::append_submenu_add_generic(wxMenu* menu, ModelVolumeType ty sub_menu->AppendSeparator(); } + for (auto &item : {L("Cube"), L("Cylinder"), L("Sphere"), L("Cone"), L("Disc"), L("Torus")}) { + append_menu_item( + sub_menu, wxID_ANY, _(item), "", + [type, item](wxCommandEvent &) { + obj_list()->load_generic_subobject(item, type); + }, + "", menu); + } + + append_menu_item_add_text(sub_menu, type); + append_menu_item_add_svg(sub_menu, type); + + return sub_menu; +} + +// Orca: add submenu for adding handy models +wxMenu* MenuFactory::append_submenu_add_handy_model(wxMenu* menu, ModelVolumeType type) { + auto sub_menu = new wxMenu; + for (auto &item : {L("Orca Cube"), L("3DBenchy"), L("Autodesk FDM Test"), - L("Voron Cube")}) { + L("Voron Cube"), L("Bunny")}) { append_menu_item( sub_menu, wxID_ANY, _(item), "", [type, item](wxCommandEvent &) { @@ -511,6 +530,8 @@ wxMenu* MenuFactory::append_submenu_add_generic(wxMenu* menu, ModelVolumeType ty file_name = "ksr_fdmtest_v4.stl"; else if (file_name == L("Voron Cube")) file_name = "Voron_Design_Cube_v7.stl"; + else if (file_name == L("Bunny")) + file_name = "bunny.stl"; else return; input_files.push_back( @@ -521,22 +542,9 @@ wxMenu* MenuFactory::append_submenu_add_generic(wxMenu* menu, ModelVolumeType ty "", menu); } - append_menu_item_add_text(sub_menu, type); - append_menu_item_add_svg(sub_menu, type); - - sub_menu->AppendSeparator(); - for (auto &item : {L("Cube"), L("Cylinder"), L("Sphere"), L("Cone")}) { - append_menu_item( - sub_menu, wxID_ANY, _(item), "", - [type, item](wxCommandEvent &) { - obj_list()->load_generic_subobject(item, type); - }, - "", menu); - } return sub_menu; } - static void append_menu_itemm_add_(const wxString& name, GLGizmosManager::EType gizmo_type, wxMenu *menu, ModelVolumeType type, bool is_submenu_item) { auto add_ = [type, gizmo_type](const wxCommandEvent & /*unnamed*/) { const GLCanvas3D *canvas = plater()->canvas3D(); @@ -1163,12 +1171,17 @@ MenuFactory::MenuFactory() void MenuFactory::create_default_menu() { - wxMenu* sub_menu = append_submenu_add_generic(&m_default_menu, ModelVolumeType::INVALID); + wxMenu* sub_menu_primitives = append_submenu_add_generic(&m_default_menu, ModelVolumeType::INVALID); + wxMenu* sub_menu_handy = append_submenu_add_handy_model(&m_default_menu, ModelVolumeType::INVALID); #ifdef __WINDOWS__ - append_submenu(&m_default_menu, sub_menu, wxID_ANY, _L("Add Primitive"), "", "menu_add_part", + append_submenu(&m_default_menu, sub_menu_primitives, wxID_ANY, _L("Add Primitive"), "", "menu_add_part", + []() {return true; }, m_parent); + append_submenu(&m_default_menu, sub_menu_handy, wxID_ANY, _L("Add Handy models"), "", "menu_add_part", []() {return true; }, m_parent); #else - append_submenu(&m_default_menu, sub_menu, wxID_ANY, _L("Add Primitive"), "", "", + append_submenu(&m_default_menu, sub_menu_primitives, wxID_ANY, _L("Add Primitive"), "", "", + []() {return true; }, m_parent); + append_submenu(&m_default_menu, sub_menu_handy, wxID_ANY, _L("Add Handy models"), "", "", []() {return true; }, m_parent); #endif @@ -1452,13 +1465,18 @@ void MenuFactory::create_plate_menu() // add shapes menu->AppendSeparator(); - wxMenu* sub_menu = append_submenu_add_generic(menu, ModelVolumeType::INVALID); + wxMenu* sub_menu_primitives = append_submenu_add_generic(menu, ModelVolumeType::INVALID); + wxMenu* sub_menu_handy = append_submenu_add_handy_model(menu, ModelVolumeType::INVALID); #ifdef __WINDOWS__ - append_submenu(menu, sub_menu, wxID_ANY, _L("Add Primitive"), "", "menu_add_part", + append_submenu(menu, sub_menu_primitives, wxID_ANY, _L("Add Primitive"), "", "menu_add_part", + []() {return true; }, m_parent); + append_submenu(menu, sub_menu_handy, wxID_ANY, _L("Add Handy models"), "", "menu_add_part", []() {return true; }, m_parent); #else - append_submenu(menu, sub_menu, wxID_ANY, _L("Add Primitive"), "", "", + append_submenu(menu, sub_menu_primitives, wxID_ANY, _L("Add Primitive"), "", "", + []() {return true; }, m_parent); + append_submenu(menu, sub_menu_handy, wxID_ANY, _L("Add Handy models"), "", "", []() {return true; }, m_parent); #endif @@ -1940,7 +1958,7 @@ void MenuFactory::update_object_menu() void MenuFactory::update_default_menu() { - for (auto& name : { _L("Add Primitive") , _L("Show Labels") }) { + for (auto& name : { _L("Add Primitive") , _L("Add Handy models"), _L("Show Labels") }) { const auto menu_item_id = m_default_menu.FindItem(name); if (menu_item_id != wxNOT_FOUND) m_default_menu.Destroy(menu_item_id); diff --git a/src/slic3r/GUI/GUI_Factories.hpp b/src/slic3r/GUI/GUI_Factories.hpp index 70cb225af..abb5525a0 100644 --- a/src/slic3r/GUI/GUI_Factories.hpp +++ b/src/slic3r/GUI/GUI_Factories.hpp @@ -124,6 +124,8 @@ private: void create_bbl_assemble_part_menu(); wxMenu* append_submenu_add_generic(wxMenu* menu, ModelVolumeType type); + // Orca: add submenu for adding handy models + wxMenu* append_submenu_add_handy_model(wxMenu* menu, ModelVolumeType type); void append_menu_item_add_text(wxMenu* menu, ModelVolumeType type, bool is_submenu_item = true); void append_menu_item_add_svg(wxMenu *menu, ModelVolumeType type, bool is_submenu_item = true); void append_menu_items_add_volume(wxMenu* menu); diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index 697fba968..e98069820 100644 --- a/src/slic3r/GUI/GUI_ObjectList.cpp +++ b/src/slic3r/GUI/GUI_ObjectList.cpp @@ -2084,23 +2084,27 @@ static TriangleMesh create_mesh(const std::string& type_name, const BoundingBoxf { const double side = wxGetApp().plater()->canvas3D()->get_size_proportional_to_max_bed_size(0.1); - indexed_triangle_set mesh; + TriangleMesh mesh; if (type_name == "Cube") // Sitting on the print bed, left front front corner at (0, 0). - mesh = its_make_cube(side, side, side); + mesh = TriangleMesh(its_make_cube(side, side, side)); else if (type_name == "Cylinder") // Centered around 0, sitting on the print bed. // The cylinder has the same volume as the box above. - mesh = its_make_cylinder(0.5 * side, side); + mesh = TriangleMesh(its_make_cylinder(0.5 * side, side)); else if (type_name == "Sphere") // Centered around 0, half the sphere below the print bed, half above. // The sphere has the same volume as the box above. - mesh = its_make_sphere(0.5 * side, PI / 18); + mesh = TriangleMesh(its_make_sphere(0.5 * side, PI / 18)); else if (type_name == "Slab") // Sitting on the print bed, left front front corner at (0, 0). - mesh = its_make_cube(bb.size().x() * 1.5, bb.size().y() * 1.5, bb.size().z() * 0.5); + mesh = TriangleMesh(its_make_cube(bb.size().x() * 1.5, bb.size().y() * 1.5, bb.size().z() * 0.5)); else if (type_name == "Cone") - mesh = its_make_cone(0.5 * side, side); + mesh = TriangleMesh(its_make_cone(0.5 * side, side)); + else if (type_name == "Disc") + mesh.ReadSTLFile((Slic3r::resources_dir() + "/handy_models/helper_disk.stl").c_str(), true, nullptr); + else if (type_name == "Torus") + mesh.ReadSTLFile((Slic3r::resources_dir() + "/handy_models/torus.stl").c_str(), true, nullptr); return TriangleMesh(mesh); }