mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-30 20:21:12 -06:00 
			
		
		
		
	The G-code export was reshuffled a bit to reduce peak memory consumption.
Namely, the time estimate memory is released before the G-code preview data is created from the G-code analyser data.
This commit is contained in:
		
							parent
							
								
									e2d7fd941f
								
							
						
					
					
						commit
						8bc04e640a
					
				
					 2 changed files with 23 additions and 19 deletions
				
			
		|  | @ -435,9 +435,11 @@ void GCode::do_export(Print *print, const char *path, GCodePreviewData *preview_ | |||
|     if (file == nullptr) | ||||
|         throw std::runtime_error(std::string("G-code export to ") + path + " failed.\nCannot open the file for writing.\n"); | ||||
| 
 | ||||
|     m_enable_analyzer = preview_data != nullptr; | ||||
| 
 | ||||
|     try { | ||||
|         m_placeholder_parser_failed_templates.clear(); | ||||
|         this->_do_export(*print, file, preview_data); | ||||
|         this->_do_export(*print, file); | ||||
|         fflush(file); | ||||
|         if (ferror(file)) { | ||||
|             fclose(file); | ||||
|  | @ -453,15 +455,6 @@ void GCode::do_export(Print *print, const char *path, GCodePreviewData *preview_ | |||
|     } | ||||
|     fclose(file); | ||||
| 
 | ||||
|     if (print->config().remaining_times.value) { | ||||
|         BOOST_LOG_TRIVIAL(debug) << "Processing remaining times for normal mode"; | ||||
|         m_normal_time_estimator.post_process_remaining_times(path_tmp, 60.0f); | ||||
|         if (m_silent_time_estimator_enabled) { | ||||
|             BOOST_LOG_TRIVIAL(debug) << "Processing remaining times for silent mode"; | ||||
|             m_silent_time_estimator.post_process_remaining_times(path_tmp, 60.0f); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     if (! m_placeholder_parser_failed_templates.empty()) { | ||||
|         // G-code export proceeded, but some of the PlaceholderParser substitutions failed.
 | ||||
|         std::string msg = std::string("G-code export to ") + path + " failed due to invalid custom G-code sections:\n\n"; | ||||
|  | @ -475,6 +468,24 @@ void GCode::do_export(Print *print, const char *path, GCodePreviewData *preview_ | |||
|         throw std::runtime_error(msg); | ||||
|     } | ||||
| 
 | ||||
|     if (print->config().remaining_times.value) { | ||||
|         BOOST_LOG_TRIVIAL(debug) << "Processing remaining times for normal mode"; | ||||
|         m_normal_time_estimator.post_process_remaining_times(path_tmp, 60.0f); | ||||
|         m_normal_time_estimator.reset(); | ||||
|         if (m_silent_time_estimator_enabled) { | ||||
|             BOOST_LOG_TRIVIAL(debug) << "Processing remaining times for silent mode"; | ||||
|             m_silent_time_estimator.post_process_remaining_times(path_tmp, 60.0f); | ||||
|             m_silent_time_estimator.reset(); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     // starts analyzer calculations
 | ||||
|     if (m_enable_analyzer) { | ||||
|         BOOST_LOG_TRIVIAL(debug) << "Preparing G-code preview data"; | ||||
|         m_analyzer.calc_gcode_preview_data(*preview_data); | ||||
|         m_analyzer.reset(); | ||||
|     } | ||||
| 
 | ||||
|     if (rename_file(path_tmp, path) != 0) | ||||
|         throw std::runtime_error( | ||||
|             std::string("Failed to rename the output G-code file from ") + path_tmp + " to " + path + '\n' + | ||||
|  | @ -488,7 +499,7 @@ void GCode::do_export(Print *print, const char *path, GCodePreviewData *preview_ | |||
|     PROFILE_OUTPUT(debug_out_path("gcode-export-profile.txt").c_str()); | ||||
| } | ||||
| 
 | ||||
| void GCode::_do_export(Print &print, FILE *file, GCodePreviewData *preview_data) | ||||
| void GCode::_do_export(Print &print, FILE *file) | ||||
| { | ||||
|     PROFILE_FUNC(); | ||||
| 
 | ||||
|  | @ -558,7 +569,6 @@ void GCode::_do_export(Print &print, FILE *file, GCodePreviewData *preview_data) | |||
| 
 | ||||
|     // resets analyzer
 | ||||
|     m_analyzer.reset(); | ||||
|     m_enable_analyzer = preview_data != nullptr; | ||||
| 
 | ||||
|     // resets analyzer's tracking data
 | ||||
|     m_last_mm3_per_mm = GCodeAnalyzer::Default_mm3_per_mm; | ||||
|  | @ -1034,12 +1044,6 @@ void GCode::_do_export(Print &print, FILE *file, GCodePreviewData *preview_data) | |||
|             _write(file, full_config); | ||||
|     } | ||||
|     print.throw_if_canceled(); | ||||
| 
 | ||||
|     // starts analyzer calculations
 | ||||
|     if (preview_data != nullptr) { | ||||
|         BOOST_LOG_TRIVIAL(debug) << "Preparing G-code preview data"; | ||||
|         m_analyzer.calc_gcode_preview_data(*preview_data); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| std::string GCode::placeholder_parser_process(const std::string &name, const std::string &templ, unsigned int current_extruder_id, const DynamicConfig *config_override) | ||||
|  |  | |||
|  | @ -180,7 +180,7 @@ public: | |||
|     static void append_full_config(const Print& print, std::string& str); | ||||
| 
 | ||||
| protected: | ||||
|     void            _do_export(Print &print, FILE *file, GCodePreviewData *preview_data); | ||||
|     void            _do_export(Print &print, FILE *file); | ||||
| 
 | ||||
|     // Object and support extrusions of the same PrintObject at the same print_z.
 | ||||
|     struct LayerToPrint | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 bubnikv
						bubnikv