mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-11-02 20:51:23 -07:00 
			
		
		
		
	Add more built-in models: Disc/Torus/Bunny
This commit is contained in:
		
							parent
							
								
									604851fc9c
								
							
						
					
					
						commit
						69602d24fc
					
				
					 7 changed files with 51 additions and 27 deletions
				
			
		
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								resources/handy_models/bunny.stl
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								resources/handy_models/bunny.stl
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								resources/handy_models/helper_disk.stl
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								resources/handy_models/helper_disk.stl
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								resources/handy_models/torus.stl
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								resources/handy_models/torus.stl
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
						 | 
				
			
			@ -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);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue