GCodeProcessor -> Added cancel callback
This commit is contained in:
parent
0cfa64e245
commit
573194e059
@ -787,7 +787,7 @@ void GCode::do_export(Print* print, const char* path, GCodePreviewData* preview_
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if ENABLE_GCODE_VIEWER
|
#if ENABLE_GCODE_VIEWER
|
||||||
m_processor.process_file(path_tmp);
|
m_processor.process_file(path_tmp, [print]() { print->throw_if_canceled(); });
|
||||||
DoExport::update_print_estimated_times_stats(m_processor, print->m_print_statistics);
|
DoExport::update_print_estimated_times_stats(m_processor, print->m_print_statistics);
|
||||||
if (result != nullptr)
|
if (result != nullptr)
|
||||||
*result = std::move(m_processor.extract_result());
|
*result = std::move(m_processor.extract_result());
|
||||||
|
@ -11,10 +11,7 @@
|
|||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
#if ENABLE_GCODE_VIEWER
|
#if ENABLE_GCODE_VIEWER
|
||||||
|
|
||||||
#if ENABLE_GCODE_VIEWER_STATISTICS
|
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
#endif // ENABLE_GCODE_VIEWER_STATISTICS
|
|
||||||
|
|
||||||
static const float INCHES_TO_MM = 25.4f;
|
static const float INCHES_TO_MM = 25.4f;
|
||||||
static const float MMMIN_TO_MMSEC = 1.0f / 60.0f;
|
static const float MMMIN_TO_MMSEC = 1.0f / 60.0f;
|
||||||
@ -730,8 +727,10 @@ void GCodeProcessor::reset()
|
|||||||
#endif // ENABLE_GCODE_VIEWER_DATA_CHECKING
|
#endif // ENABLE_GCODE_VIEWER_DATA_CHECKING
|
||||||
}
|
}
|
||||||
|
|
||||||
void GCodeProcessor::process_file(const std::string& filename)
|
void GCodeProcessor::process_file(const std::string& filename, std::function<void()> cancel_callback)
|
||||||
{
|
{
|
||||||
|
auto last_cancel_callback_time = std::chrono::high_resolution_clock::now();
|
||||||
|
|
||||||
#if ENABLE_GCODE_VIEWER_STATISTICS
|
#if ENABLE_GCODE_VIEWER_STATISTICS
|
||||||
auto start_time = std::chrono::high_resolution_clock::now();
|
auto start_time = std::chrono::high_resolution_clock::now();
|
||||||
#endif // ENABLE_GCODE_VIEWER_STATISTICS
|
#endif // ENABLE_GCODE_VIEWER_STATISTICS
|
||||||
@ -758,9 +757,18 @@ void GCodeProcessor::process_file(const std::string& filename)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// process gcode
|
||||||
m_result.id = ++s_result_id;
|
m_result.id = ++s_result_id;
|
||||||
m_result.moves.emplace_back(MoveVertex());
|
m_result.moves.emplace_back(MoveVertex());
|
||||||
m_parser.parse_file(filename, [this](GCodeReader& reader, const GCodeReader::GCodeLine& line) { process_gcode_line(line); });
|
m_parser.parse_file(filename, [this, cancel_callback, &last_cancel_callback_time](GCodeReader& reader, const GCodeReader::GCodeLine& line) {
|
||||||
|
auto curr_time = std::chrono::high_resolution_clock::now();
|
||||||
|
// call the cancel callback every 100 ms
|
||||||
|
if (std::chrono::duration_cast<std::chrono::milliseconds>(curr_time - last_cancel_callback_time).count() > 100) {
|
||||||
|
cancel_callback();
|
||||||
|
last_cancel_callback_time = curr_time;
|
||||||
|
}
|
||||||
|
process_gcode_line(line);
|
||||||
|
});
|
||||||
|
|
||||||
// process the time blocks
|
// process the time blocks
|
||||||
for (size_t i = 0; i < static_cast<size_t>(PrintEstimatedTimeStatistics::ETimeMode::Count); ++i) {
|
for (size_t i = 0; i < static_cast<size_t>(PrintEstimatedTimeStatistics::ETimeMode::Count); ++i) {
|
||||||
|
@ -419,7 +419,8 @@ namespace Slic3r {
|
|||||||
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
|
// Process the gcode contained in the file with the given filename
|
||||||
void process_file(const std::string& filename);
|
// 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 = std::function<void()>());
|
||||||
|
|
||||||
float get_time(PrintEstimatedTimeStatistics::ETimeMode mode) const;
|
float get_time(PrintEstimatedTimeStatistics::ETimeMode mode) const;
|
||||||
std::string get_time_dhm(PrintEstimatedTimeStatistics::ETimeMode mode) const;
|
std::string get_time_dhm(PrintEstimatedTimeStatistics::ETimeMode mode) const;
|
||||||
|
Loading…
Reference in New Issue
Block a user