diff --git a/lib/Slic3r/Test.pm b/lib/Slic3r/Test.pm index 6471ae123..c0137f9e4 100644 --- a/lib/Slic3r/Test.pm +++ b/lib/Slic3r/Test.pm @@ -208,8 +208,9 @@ sub gcode { my $gcode_temp_path = abs_path($0) . '.gcode.temp'; # Remove the existing temp file. unlink $gcode_temp_path; + $print->set_status_silent; $print->process; - $print->export_gcode(output_file => $gcode_temp_path, quiet => 1); + $print->export_gcode($gcode_temp_path); # Read the temoprary G-code file. my $gcode; { diff --git a/xs/src/libslic3r/Print.hpp b/xs/src/libslic3r/Print.hpp index dfde2650a..341e48e29 100644 --- a/xs/src/libslic3r/Print.hpp +++ b/xs/src/libslic3r/Print.hpp @@ -192,8 +192,10 @@ public: // (layer height, first layer height, raft settings, print nozzle diameter etc). SlicingParameters slicing_parameters() const; -private: + // Called when slicing to SVG (see Print.pm sub export_svg), and used by perimeters.t void slice(); + +private: void make_perimeters(); void prepare_infill(); void infill(); @@ -304,9 +306,13 @@ public: std::string output_filepath(const std::string &path); typedef std::function status_callback_type; + // Default status console print out in the form of percent => message. + void set_status_default() { m_status_callback = nullptr; } + // No status output or callback whatsoever. + void set_status_silent() { m_status_callback = [](int, const std::string&){}; } + // Register a custom status callback. void set_status_callback(status_callback_type cb) { m_status_callback = cb; } - void reset_status_callback() { m_status_callback = nullptr; } - // Calls a registered callback to update the status. + // Calls a registered callback to update the status, or print out the default message. void set_status(int percent, const std::string &message) { if (m_status_callback) m_status_callback(percent, message); else printf("%d => %s\n", percent, message.c_str()); diff --git a/xs/src/slic3r/GUI/BackgroundSlicingProcess.hpp b/xs/src/slic3r/GUI/BackgroundSlicingProcess.hpp index 988138d2e..9dcce0af1 100644 --- a/xs/src/slic3r/GUI/BackgroundSlicingProcess.hpp +++ b/xs/src/slic3r/GUI/BackgroundSlicingProcess.hpp @@ -18,11 +18,17 @@ class BackgroundSlicingProcess { public: BackgroundSlicingProcess() {} + // Stop the background processing and finalize the bacgkround processing thread. ~BackgroundSlicingProcess() { this->stop(); this->join_background_thread(); } void set_print(Print *print) { m_print = print; } void set_gcode_preview_data(GCodePreviewData *gpd) { m_gcode_preview_data = gpd; } + // The following wxCommandEvent will be sent to the UI thread / Platter window, when the slicing is finished + // and the background processing will transition into G-code export. + // The wxCommandEvent is sent to the UI thread asynchronously without waiting for the event to be processed. void set_sliced_event(int event_id) { m_event_sliced_id = event_id; } + // The following wxCommandEvent will be sent to the UI thread / Platter window, when the G-code export is finished. + // The wxCommandEvent is sent to the UI thread asynchronously without waiting for the event to be processed. void set_finished_event(int event_id) { m_event_finished_id = event_id; } // Start the background processing. Returns false if the background processing was already running. @@ -57,10 +63,10 @@ public: private: void thread_proc(); - void start_background_thread(); void join_background_thread(); Print *m_print = nullptr; + // Data structure, to which the G-code export writes its annotations. GCodePreviewData *m_gcode_preview_data = nullptr; std::string m_output_path; // Thread, on which the background processing is executed. The thread will always be present diff --git a/xs/t/20_print.t b/xs/t/20_print.t index 0ef194ecf..68ec1e719 100644 --- a/xs/t/20_print.t +++ b/xs/t/20_print.t @@ -4,7 +4,7 @@ use strict; use warnings; use Slic3r::XS; -use Test::More tests => 5; +use Test::More tests => 3; { my $print = Slic3r::Print->new; diff --git a/xs/xsp/Print.xsp b/xs/xsp/Print.xsp index 4ad4f74b6..a9744c312 100644 --- a/xs/xsp/Print.xsp +++ b/xs/xsp/Print.xsp @@ -86,6 +86,8 @@ _constant() %}; void reset_layer_height_profile(); + + void slice(); }; %name{Slic3r::Print} class Print { @@ -166,6 +168,7 @@ _constant() void set_callback_event(int evt) %code%{ %}; + void set_status_silent(); void process() %code%{ try {