mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-30 20:21:12 -06:00 
			
		
		
		
	ENH: CLI: add total progress of slicing
Change-Id: I05e471aa4cd76642cdd63275620a4b656c8e3327
This commit is contained in:
		
							parent
							
								
									8d0f19fd6a
								
							
						
					
					
						commit
						5791ca7e8d
					
				
					 1 changed files with 57 additions and 10 deletions
				
			
		|  | @ -140,8 +140,9 @@ std::map<int, std::string> cli_errors = { | |||
| 
 | ||||
| typedef struct _cli_callback_mgr { | ||||
|     int                 m_plate_count {0}; | ||||
|     int                 m_plate_index; | ||||
|     int                 m_plate_index {0}; | ||||
|     int                 m_progress { 0 }; | ||||
|     int                 m_total_progress { 0 }; | ||||
|     std::string         m_message; | ||||
|     int                 m_warning_step; | ||||
|     bool                m_exit {false}; | ||||
|  | @ -165,9 +166,11 @@ typedef struct _cli_callback_mgr { | |||
| 
 | ||||
|     void set_plate_info(int index, int count) | ||||
|     { | ||||
|         BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": index="<<index<< ", count = "<< count; | ||||
|         std::unique_lock<std::mutex> lck(m_mutex); | ||||
|         m_plate_count = count; | ||||
|         m_plate_index = index; | ||||
|         m_progress = 0; | ||||
|         lck.unlock(); | ||||
| 
 | ||||
|         return; | ||||
|  | @ -182,7 +185,8 @@ typedef struct _cli_callback_mgr { | |||
|         //record the headers
 | ||||
|         j["plate_index"] = m_plate_index; | ||||
|         j["plate_count"] = m_plate_count; | ||||
|         j["percent"] = m_progress; | ||||
|         j["plate_percent"] = m_progress; | ||||
|         j["total_percent"] = m_total_progress; | ||||
|         j["message"] = m_message; | ||||
| 
 | ||||
|         std::string notify_message = j.dump(); | ||||
|  | @ -209,12 +213,14 @@ typedef struct _cli_callback_mgr { | |||
|             lck.lock(); | ||||
|             m_condition.wait(lck, [this](){ return m_data_ready || m_exit; }); | ||||
|             BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << ": wakup."; | ||||
|             if (m_data_ready) { | ||||
|                 notify(); | ||||
|                 m_data_ready = false; | ||||
|             } | ||||
|             if (m_exit) { | ||||
|                 BOOST_LOG_TRIVIAL(info) << "cli_callback_mgr_t::thread_proc will exit."; | ||||
|                 break; | ||||
|             } | ||||
|             notify(); | ||||
|             m_data_ready = false; | ||||
|             lck.unlock(); | ||||
|             m_condition.notify_one(); | ||||
|         } | ||||
|  | @ -224,7 +230,7 @@ typedef struct _cli_callback_mgr { | |||
| 
 | ||||
|     void    update(int percent, std::string message, int warning_step) | ||||
|     { | ||||
|         BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << ": percent="<<percent<< ", warning_step = "<< m_warning_step<<", message="<<message; | ||||
|         BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": percent="<<percent<< ", plate_index = "<< m_plate_index<<", plate_count="<< m_plate_count<<", message="<<message; | ||||
|         std::unique_lock<std::mutex> lck(m_mutex); | ||||
|         if (!m_started) { | ||||
|             lck.unlock(); | ||||
|  | @ -236,8 +242,17 @@ typedef struct _cli_callback_mgr { | |||
|             lck.unlock(); | ||||
|             return; | ||||
|         } | ||||
|         m_message = message; | ||||
|         m_progress = percent; | ||||
|         if ((m_plate_index >= 1)&&(m_plate_index <= m_plate_count)) { | ||||
|             if (m_plate_count <= 1) | ||||
|                 m_total_progress = 0.9*m_progress; | ||||
|             else { | ||||
|                 m_total_progress = ((float)(m_plate_index - 1)*90)/m_plate_count + ((float)m_progress*0.9)/m_plate_count; | ||||
|             } | ||||
|         } | ||||
|         else | ||||
|             m_total_progress = 0.9*m_progress; | ||||
|         m_message = message; | ||||
|         m_warning_step = warning_step; | ||||
|         m_data_ready = true; | ||||
|         lck.unlock(); | ||||
|  | @ -266,10 +281,6 @@ typedef struct _cli_callback_mgr { | |||
|     { | ||||
|         BOOST_LOG_TRIVIAL(info) << "cli_callback_mgr_t::stop enter."; | ||||
|         std::unique_lock<std::mutex> lck(m_mutex); | ||||
|         if (m_pipe_fd > 0) { | ||||
|             close(m_pipe_fd); | ||||
|             m_pipe_fd = -1; | ||||
|         } | ||||
|         if (!m_started) { | ||||
|             lck.unlock(); | ||||
| 	    BOOST_LOG_TRIVIAL(info) << "cli_callback_mgr_t::stop not started before, return directly."; | ||||
|  | @ -280,6 +291,10 @@ typedef struct _cli_callback_mgr { | |||
|         m_condition.notify_one(); | ||||
|         // Wait until the worker thread exits.
 | ||||
|         m_thread.join(); | ||||
|         if (m_pipe_fd > 0) { | ||||
|             close(m_pipe_fd); | ||||
|             m_pipe_fd = -1; | ||||
|         } | ||||
|         BOOST_LOG_TRIVIAL(info) << "cli_callback_mgr_t::stop successfully."; | ||||
|     } | ||||
| }cli_callback_mgr_t; | ||||
|  | @ -1429,6 +1444,12 @@ int CLI::run(int argc, char **argv) | |||
|                             //run_post_process_scripts(outfile, print->full_print_config());
 | ||||
|                             BOOST_LOG_TRIVIAL(info) << "Slicing result exported to " << outfile << std::endl; | ||||
|                             part_plate->update_slice_result_valid_state(true); | ||||
| #if defined(__linux__) || defined(__LINUX__) | ||||
|                             if (g_cli_callback_mgr.is_started()) { | ||||
|                                 PrintBase::SlicingStatus slicing_status{100, "Slicing finished"}; | ||||
|                                 cli_status_callback(slicing_status); | ||||
|                             } | ||||
| #endif | ||||
|                         } catch (const std::exception &ex) { | ||||
|                             BOOST_LOG_TRIVIAL(info) << "found slicing or export error for partplate "<<index+1 << std::endl; | ||||
|                             boost::nowide::cerr << ex.what() << std::endl; | ||||
|  | @ -1436,6 +1457,13 @@ int CLI::run(int argc, char **argv) | |||
|                             flush_and_exit(CLI_SLICING_ERROR); | ||||
|                         } | ||||
|                 }//end for partplate
 | ||||
| 
 | ||||
| #if defined(__linux__) || defined(__LINUX__) | ||||
|                 if (g_cli_callback_mgr.is_started()) { | ||||
|                     int plate_count = (plate_to_slice== 0)?partplate_list.get_plate_count():1; | ||||
|                     g_cli_callback_mgr.set_plate_info(plate_count+1, plate_count); | ||||
|                 } | ||||
| #endif | ||||
| /*
 | ||||
|                 print.center = ! m_config.has("center") | ||||
|                     && ! m_config.has("align_xy") | ||||
|  | @ -1485,6 +1513,13 @@ int CLI::run(int argc, char **argv) | |||
|             export_3mf_file = outfile_dir + "/"+export_3mf_file; | ||||
|         } | ||||
| 
 | ||||
| #if defined(__linux__) || defined(__LINUX__) | ||||
|         if (g_cli_callback_mgr.is_started()) { | ||||
|             PrintBase::SlicingStatus slicing_status{91, "Generate thumbnails"}; | ||||
|             cli_status_callback(slicing_status); | ||||
|         } | ||||
| #endif | ||||
| 
 | ||||
|         // get type and color for platedata
 | ||||
|         auto* filament_types = dynamic_cast<const ConfigOptionStrings*>(m_print_config.option("filament_type")); | ||||
|         const ConfigOptionStrings* filament_color = dynamic_cast<const ConfigOptionStrings *>(m_print_config.option("filament_colour")); | ||||
|  | @ -1695,6 +1730,13 @@ int CLI::run(int argc, char **argv) | |||
|             } | ||||
|         } | ||||
| 
 | ||||
| #if defined(__linux__) || defined(__LINUX__) | ||||
|         if (g_cli_callback_mgr.is_started()) { | ||||
|             PrintBase::SlicingStatus slicing_status{95, "Exporting 3mf"}; | ||||
|             cli_status_callback(slicing_status); | ||||
|         } | ||||
| #endif | ||||
| 
 | ||||
|         BOOST_LOG_TRIVIAL(info) << "will export 3mf to " << export_3mf_file << std::endl; | ||||
|         if (! this->export_project(&m_models[0], export_3mf_file, plate_data_list, project_presets, thumbnails, calibration_thumbnails, plate_bboxes, &m_print_config)) | ||||
|         { | ||||
|  | @ -1718,6 +1760,11 @@ int CLI::run(int argc, char **argv) | |||
|     } | ||||
| 
 | ||||
| #if defined(__linux__) || defined(__LINUX__) | ||||
|     if (g_cli_callback_mgr.is_started()) { | ||||
|         PrintBase::SlicingStatus slicing_status{100, "All done, Success"}; | ||||
|         cli_status_callback(slicing_status); | ||||
|     } | ||||
| 
 | ||||
|     g_cli_callback_mgr.stop(); | ||||
| #endif | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 lane.wei
						lane.wei