Fix of prusa-gcodeviewer changes modification time of the viewed gcode file #7005

This is a regression wrt. PrusaSlicer 2.4.0-alpha1 due to the G-code
processing optimization and parallelization.
Related to GCode Viewer changes files modified date in windows #5079
This commit is contained in:
Vojtech Bubnik 2021-09-27 10:02:48 +02:00
parent 05e4451649
commit 07e7e11590
2 changed files with 9 additions and 5 deletions

View File

@ -1189,6 +1189,8 @@ static inline const char* remove_eols(const char *begin, const char *end) {
return end; return end;
} }
// Load a G-code into a stand-alone G-code viewer.
// throws CanceledException through print->throw_if_canceled() (sent by the caller as callback).
void GCodeProcessor::process_file(const std::string& filename, std::function<void()> cancel_callback) void GCodeProcessor::process_file(const std::string& filename, std::function<void()> cancel_callback)
{ {
CNumericLocalesSetter locales_setter; CNumericLocalesSetter locales_setter;
@ -1243,7 +1245,8 @@ void GCodeProcessor::process_file(const std::string& filename, std::function<voi
this->process_gcode_line(line, true); this->process_gcode_line(line, true);
}); });
this->finalize(); // Don't post-process the G-code to update time stamps.
this->finalize(false);
} }
void GCodeProcessor::initialize(const std::string& filename) void GCodeProcessor::initialize(const std::string& filename)
@ -1269,7 +1272,7 @@ void GCodeProcessor::process_buffer(const std::string &buffer)
}); });
} }
void GCodeProcessor::finalize() void GCodeProcessor::finalize(bool post_process)
{ {
// update width/height of wipe moves // update width/height of wipe moves
for (MoveVertex& move : m_result.moves) { for (MoveVertex& move : m_result.moves) {
@ -1299,7 +1302,8 @@ void GCodeProcessor::finalize()
m_width_compare.output(); m_width_compare.output();
#endif // ENABLE_GCODE_VIEWER_DATA_CHECKING #endif // ENABLE_GCODE_VIEWER_DATA_CHECKING
m_time_processor.post_process(m_result.filename, m_result.moves, m_result.lines_ends); if (post_process)
m_time_processor.post_process(m_result.filename, m_result.moves, m_result.lines_ends);
#if ENABLE_GCODE_VIEWER_STATISTICS #if ENABLE_GCODE_VIEWER_STATISTICS
m_result.time = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::high_resolution_clock::now() - m_start_time).count(); m_result.time = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::high_resolution_clock::now() - m_start_time).count();
#endif // ENABLE_GCODE_VIEWER_STATISTICS #endif // ENABLE_GCODE_VIEWER_STATISTICS

View File

@ -579,14 +579,14 @@ namespace Slic3r {
const Result& get_result() const { return m_result; } const Result& get_result() const { return m_result; }
Result&& extract_result() { return std::move(m_result); } Result&& extract_result() { return std::move(m_result); }
// Process the gcode contained in the file with the given filename // Load a G-code into a stand-alone G-code viewer.
// throws CanceledException through print->throw_if_canceled() (sent by the caller as callback). // throws CanceledException through print->throw_if_canceled() (sent by the caller as callback).
void process_file(const std::string& filename, std::function<void()> cancel_callback = nullptr); void process_file(const std::string& filename, std::function<void()> cancel_callback = nullptr);
// Streaming interface, for processing G-codes just generated by PrusaSlicer in a pipelined fashion. // Streaming interface, for processing G-codes just generated by PrusaSlicer in a pipelined fashion.
void initialize(const std::string& filename); void initialize(const std::string& filename);
void process_buffer(const std::string& buffer); void process_buffer(const std::string& buffer);
void finalize(); void finalize(bool post_process);
float get_time(PrintEstimatedStatistics::ETimeMode mode) const; float get_time(PrintEstimatedStatistics::ETimeMode mode) const;
std::string get_time_dhm(PrintEstimatedStatistics::ETimeMode mode) const; std::string get_time_dhm(PrintEstimatedStatistics::ETimeMode mode) const;