From 9febb10bd7853319f3bfa2b5472e23b0cba207b4 Mon Sep 17 00:00:00 2001 From: Alessandro Ranellucci Date: Sun, 8 Nov 2015 10:10:54 +0100 Subject: [PATCH] Smoother manual control movements --- lib/Slic3r/GUI/Controller/ManualControlDialog.pm | 3 +++ xs/src/libslic3r/GCodeSender.cpp | 11 +++++++---- xs/src/libslic3r/GCodeSender.hpp | 2 +- xs/xsp/GCodeSender.xsp | 2 +- 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/lib/Slic3r/GUI/Controller/ManualControlDialog.pm b/lib/Slic3r/GUI/Controller/ManualControlDialog.pm index 3f971d3e3..d22d86d79 100644 --- a/lib/Slic3r/GUI/Controller/ManualControlDialog.pm +++ b/lib/Slic3r/GUI/Controller/ManualControlDialog.pm @@ -58,6 +58,9 @@ sub new { $canvas->interactive(1); $canvas->on_move(sub { my ($pos) = @_; + + # delete any pending commands to get a smoother movement + $self->purge_queue(1); $self->abs_xy_move($pos); }); $bed_sizer->Add($canvas, 0, wxEXPAND | wxRIGHT, 3); diff --git a/xs/src/libslic3r/GCodeSender.cpp b/xs/src/libslic3r/GCodeSender.cpp index c7d7cd996..7f6b7af08 100644 --- a/xs/src/libslic3r/GCodeSender.cpp +++ b/xs/src/libslic3r/GCodeSender.cpp @@ -172,15 +172,18 @@ GCodeSender::resume_queue() } void -GCodeSender::purge_queue() +GCodeSender::purge_queue(bool priority) { boost::lock_guard l(this->queue_mutex); - { + std::queue empty; + if (priority) { + // clear priority queue + std::swap(this->priqueue, empty); + } else { // clear queue - std::queue empty; std::swap(this->queue, empty); + this->queue_paused = false; } - this->queue_paused = false; } // purge log and return its contents diff --git a/xs/src/libslic3r/GCodeSender.hpp b/xs/src/libslic3r/GCodeSender.hpp index 01a52d208..5390e8e9e 100644 --- a/xs/src/libslic3r/GCodeSender.hpp +++ b/xs/src/libslic3r/GCodeSender.hpp @@ -28,7 +28,7 @@ class GCodeSender : private boost::noncopyable { size_t queue_size() const; void pause_queue(); void resume_queue(); - void purge_queue(); + void purge_queue(bool priority = false); std::vector purge_log(); std::string getT() const; std::string getB() const; diff --git a/xs/xsp/GCodeSender.xsp b/xs/xsp/GCodeSender.xsp index cef61128f..9ff9281bf 100644 --- a/xs/xsp/GCodeSender.xsp +++ b/xs/xsp/GCodeSender.xsp @@ -18,7 +18,7 @@ void send(std::string s, bool priority = false); void pause_queue(); void resume_queue(); - void purge_queue(); + void purge_queue(bool priority = false); std::vector purge_log(); std::string getT(); std::string getB();