From 3201053e160e13fd307749aa446fc3ef858723f4 Mon Sep 17 00:00:00 2001 From: make-ing Date: Fri, 18 Mar 2016 12:24:41 +0100 Subject: [PATCH] added multi passes support in backend --- src/octoprint/util/comm_acc2.py | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/src/octoprint/util/comm_acc2.py b/src/octoprint/util/comm_acc2.py index df297939..98f30598 100644 --- a/src/octoprint/util/comm_acc2.py +++ b/src/octoprint/util/comm_acc2.py @@ -84,6 +84,8 @@ class MachineCom(object): self._actual_intensity = None self._feedrate_dict = {} self._intensity_dict = {} + self._passes = 1 + self._finished_passes = 0 # regular expressions self._regex_command = re.compile("^\s*\$?([GM]\d+|[TH])") @@ -164,8 +166,15 @@ class MachineCom(object): if cmd is not None: self.sendCommand(cmd) self._callback.on_comm_progress() - elif len(self._acc_line_buffer) == 0: - self._set_print_finished() + else: + if self._finished_passes >= self._passes: + if len(self._acc_line_buffer) == 0: + self._set_print_finished() + self._currentFile.resetToBeginning() + cmd = self._getNext() + if cmd is not None: + self.sendCommand(cmd) + self._callback.on_comm_progress() self._sendCommand() self._send_event.wait(1) @@ -311,7 +320,9 @@ class MachineCom(object): if self._finished_currentFile is False: line = self._currentFile.getNext() if line is None: - self._finished_currentFile = True + self._finished_passes += 1 + if self._finished_passes >= self._passes: + self._finished_currentFile = True return line else: return None @@ -824,6 +835,8 @@ class MachineCom(object): if self._currentFile is None: raise ValueError("No file selected for printing") + self._passes = 1 + try: # ensure fan is on whatever gcode follows. self.sendCommand("M08") @@ -894,10 +907,12 @@ class MachineCom(object): eventManager().fire(Events.PRINT_PAUSED, payload) def increasePasses(self): - self._log("increase Passes") + self._passes += 1 + self._log("increased Passes to %d" % self._passes) def degreasePasses(self): - self._log("degrease Passes") + self._passes -= 1 + self._log("degrease Passes to %d" % self._passes) def getStateString(self): if self._state == self.STATE_NONE: @@ -1161,6 +1176,12 @@ class PrintingGcodeFileInformation(PrintingFileInformation): pass self._handle = None + def resetToBeginning(self): + """ + resets the file handle so you can read from the beginning again. + """ + self._handle = open(self._filename, "r") + def getNext(self): """ Retrieves the next line for printing.