mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-31 12:41:20 -06:00 
			
		
		
		
	Merge remote-tracking branch 'origin/et_save_command'
This commit is contained in:
		
						commit
						a72f50efa5
					
				
					 6 changed files with 43 additions and 2 deletions
				
			
		|  | @ -2666,9 +2666,16 @@ namespace Slic3r { | ||||||
| 
 | 
 | ||||||
|     bool _3MF_Exporter::_add_build_to_model_stream(std::stringstream& stream, const BuildItemsList& build_items) |     bool _3MF_Exporter::_add_build_to_model_stream(std::stringstream& stream, const BuildItemsList& build_items) | ||||||
|     { |     { | ||||||
|  | #if ENABLE_SAVE_COMMANDS_ALWAYS_ENABLED | ||||||
|  |         // This happens for empty projects
 | ||||||
|  | #endif // ENABLE_SAVE_COMMANDS_ALWAYS_ENABLED
 | ||||||
|         if (build_items.size() == 0) { |         if (build_items.size() == 0) { | ||||||
|             add_error("No build item found"); |             add_error("No build item found"); | ||||||
|  | #if ENABLE_SAVE_COMMANDS_ALWAYS_ENABLED | ||||||
|  |             return true; | ||||||
|  | #else | ||||||
|             return false; |             return false; | ||||||
|  | #endif // ENABLE_SAVE_COMMANDS_ALWAYS_ENABLED
 | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         stream << " <" << BUILD_TAG << ">\n"; |         stream << " <" << BUILD_TAG << ">\n"; | ||||||
|  |  | ||||||
|  | @ -161,8 +161,10 @@ Model Model::read_from_archive(const std::string& input_file, DynamicPrintConfig | ||||||
|     if (!result) |     if (!result) | ||||||
|         throw Slic3r::RuntimeError("Loading of a model file failed."); |         throw Slic3r::RuntimeError("Loading of a model file failed."); | ||||||
| 
 | 
 | ||||||
|  | #if !ENABLE_SAVE_COMMANDS_ALWAYS_ENABLED | ||||||
|     if (model.objects.empty()) |     if (model.objects.empty()) | ||||||
|         throw Slic3r::RuntimeError("The supplied file couldn't be read because it's empty"); |         throw Slic3r::RuntimeError("The supplied file couldn't be read because it's empty"); | ||||||
|  | #endif // !ENABLE_SAVE_COMMANDS_ALWAYS_ENABLED
 | ||||||
| 
 | 
 | ||||||
|     for (ModelObject *o : model.objects) |     for (ModelObject *o : model.objects) | ||||||
|     { |     { | ||||||
|  |  | ||||||
|  | @ -53,6 +53,8 @@ | ||||||
| #define ENABLE_FIX_MIRRORED_VOLUMES_3MF_IMPORT_EXPORT (1 && ENABLE_2_4_0_ALPHA0) | #define ENABLE_FIX_MIRRORED_VOLUMES_3MF_IMPORT_EXPORT (1 && ENABLE_2_4_0_ALPHA0) | ||||||
| // Enable rendering seams (and other options) in preview using models
 | // Enable rendering seams (and other options) in preview using models
 | ||||||
| #define ENABLE_SEAMS_USING_MODELS (1 && ENABLE_2_4_0_ALPHA0) | #define ENABLE_SEAMS_USING_MODELS (1 && ENABLE_2_4_0_ALPHA0) | ||||||
|  | // Enable save and save as commands to be enabled also when the plater is empty and allow to load empty projects
 | ||||||
|  | #define ENABLE_SAVE_COMMANDS_ALWAYS_ENABLED (1 && ENABLE_2_4_0_ALPHA0) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| #endif // _prusaslicer_technologies_h_
 | #endif // _prusaslicer_technologies_h_
 | ||||||
|  |  | ||||||
|  | @ -4108,13 +4108,24 @@ void GLCanvas3D::_render_thumbnail_internal(ThumbnailData& thumbnail_data, const | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | #if !ENABLE_SAVE_COMMANDS_ALWAYS_ENABLED | ||||||
|     if (visible_volumes.empty()) |     if (visible_volumes.empty()) | ||||||
|         return; |         return; | ||||||
|  | #endif // !ENABLE_SAVE_COMMANDS_ALWAYS_ENABLED
 | ||||||
| 
 | 
 | ||||||
|     BoundingBoxf3 volumes_box; |     BoundingBoxf3 volumes_box; | ||||||
|     for (const GLVolume* vol : visible_volumes) { | #if ENABLE_SAVE_COMMANDS_ALWAYS_ENABLED | ||||||
|         volumes_box.merge(vol->transformed_bounding_box()); |     if (!visible_volumes.empty()) { | ||||||
|  | #endif // ENABLE_SAVE_COMMANDS_ALWAYS_ENABLED
 | ||||||
|  |         for (const GLVolume* vol : visible_volumes) { | ||||||
|  |             volumes_box.merge(vol->transformed_bounding_box()); | ||||||
|  |         } | ||||||
|  | #if ENABLE_SAVE_COMMANDS_ALWAYS_ENABLED | ||||||
|     } |     } | ||||||
|  |     else | ||||||
|  |         // This happens for empty projects
 | ||||||
|  |         volumes_box = wxGetApp().plater()->get_bed().get_bounding_box(true); | ||||||
|  | #endif // ENABLE_SAVE_COMMANDS_ALWAYS_ENABLED
 | ||||||
| 
 | 
 | ||||||
|     Camera camera; |     Camera camera; | ||||||
|     camera.set_type(camera_type); |     camera.set_type(camera_type); | ||||||
|  |  | ||||||
|  | @ -824,15 +824,26 @@ bool MainFrame::can_start_new_project() const | ||||||
| 
 | 
 | ||||||
| bool MainFrame::can_save() const | bool MainFrame::can_save() const | ||||||
| { | { | ||||||
|  | #if ENABLE_SAVE_COMMANDS_ALWAYS_ENABLED | ||||||
|  |     return (m_plater != nullptr) && | ||||||
|  |         !m_plater->canvas3D()->get_gizmos_manager().is_in_editing_mode(false) && | ||||||
|  |         !m_plater->get_project_filename().empty() && m_plater->is_project_dirty(); | ||||||
|  | #else | ||||||
|     return (m_plater != nullptr) && !m_plater->model().objects.empty() && |     return (m_plater != nullptr) && !m_plater->model().objects.empty() && | ||||||
|         !m_plater->canvas3D()->get_gizmos_manager().is_in_editing_mode(false) && |         !m_plater->canvas3D()->get_gizmos_manager().is_in_editing_mode(false) && | ||||||
|         !m_plater->get_project_filename().empty() && m_plater->is_project_dirty(); |         !m_plater->get_project_filename().empty() && m_plater->is_project_dirty(); | ||||||
|  | #endif // ENABLE_SAVE_COMMANDS_ALWAYS_ENABLED
 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool MainFrame::can_save_as() const | bool MainFrame::can_save_as() const | ||||||
| { | { | ||||||
|  | #if ENABLE_SAVE_COMMANDS_ALWAYS_ENABLED | ||||||
|  |     return (m_plater != nullptr) && | ||||||
|  |         !m_plater->canvas3D()->get_gizmos_manager().is_in_editing_mode(false); | ||||||
|  | #else | ||||||
|     return (m_plater != nullptr) && !m_plater->model().objects.empty() && |     return (m_plater != nullptr) && !m_plater->model().objects.empty() && | ||||||
|         !m_plater->canvas3D()->get_gizmos_manager().is_in_editing_mode(false); |         !m_plater->canvas3D()->get_gizmos_manager().is_in_editing_mode(false); | ||||||
|  | #endif // ENABLE_SAVE_COMMANDS_ALWAYS_ENABLED
 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void MainFrame::save_project() | void MainFrame::save_project() | ||||||
|  |  | ||||||
|  | @ -5585,8 +5585,16 @@ void Plater::export_amf() | ||||||
| 
 | 
 | ||||||
| bool Plater::export_3mf(const boost::filesystem::path& output_path) | bool Plater::export_3mf(const boost::filesystem::path& output_path) | ||||||
| { | { | ||||||
|  | #if ENABLE_SAVE_COMMANDS_ALWAYS_ENABLED | ||||||
|  |     if (p->model.objects.empty()) { | ||||||
|  |         MessageDialog dialog(nullptr, _L("The plater is empty.\nConfirm you want to save the project ?"), _L("Save project"), wxYES_NO); | ||||||
|  |         if (dialog.ShowModal() != wxID_YES) | ||||||
|  |             return false; | ||||||
|  |     } | ||||||
|  | #else | ||||||
|     if (p->model.objects.empty()) |     if (p->model.objects.empty()) | ||||||
|         return false; |         return false; | ||||||
|  | #endif // ENABLE_SAVE_COMMANDS_ALWAYS_ENABLED
 | ||||||
| 
 | 
 | ||||||
|     wxString path; |     wxString path; | ||||||
|     bool export_config = true; |     bool export_config = true; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 enricoturri1966
						enricoturri1966