More work on slicing integration:

- be able to handle slicers which can't report progress
- distinguish between registered and configured slicers (e.g. to allow uploading of profiles via the settings before having saved the path to the executable)
This commit is contained in:
Gina Häußge 2014-10-29 12:16:49 +01:00
parent 44cc9e7db8
commit 0aac7813e4
5 changed files with 22 additions and 8 deletions

View file

@ -328,6 +328,7 @@ SlicingStarted
* ``stl``: the STL's filename
* ``gcode``: the sliced GCODE's filename
* ``progressAvailable``: true if progress information via the ``slicingProgress`` push update will be available, false if not
SlicingDone
The slicing of a file has completed.

View file

@ -199,6 +199,7 @@ class SlicerPlugin(Plugin):
type=None,
name=None,
same_device=True,
progress_report=False
)
def get_slicer_profile_options(self):

View file

@ -194,7 +194,8 @@ class CuraPlugin(octoprint.plugin.SlicerPlugin,
return dict(
type="cura",
name="CuraEngine",
same_device=True
same_device=True,
progress_report=True
)
def get_slicer_default_profile(self):

View file

@ -73,22 +73,26 @@ class SlicingManager(object):
@property
def slicing_enabled(self):
return len(self.registered_slicers) > 0
return len(self.configured_slicers) > 0
@property
def registered_slicers(self):
return self._slicers.keys()
@property
def configured_slicers(self):
return map(lambda slicer: slicer.get_slicer_properties()["type"], filter(lambda slicer: slicer.is_slicer_configured(), self._slicers.values()))
@property
def default_slicer(self):
slicer_name = settings().get(["slicing", "defaultSlicer"])
if slicer_name in self.registered_slicers:
if slicer_name in self.configured_slicers:
return slicer_name
else:
return None
def get_slicer(self, slicer):
return self._slicers[slicer] if slicer in self._slicers else None
def get_slicer(self, slicer, require_configured=True):
return self._slicers[slicer] if slicer in self._slicers and (not require_configured or self._slicers[slicer].is_slicer_configured()) else None
def slice(self, slicer_name, source_path, dest_path, profile_name, callback, callback_args=None, callback_kwargs=None, overrides=None, on_progress=None, on_progress_args=None, on_progress_kwargs=None):
if callback_args is None:
@ -96,8 +100,11 @@ class SlicingManager(object):
if callback_kwargs is None:
callback_kwargs = dict()
if not slicer_name in self.registered_slicers:
error = "No such slicer: {slicer_name}".format(**locals())
if not slicer_name in self.configured_slicers:
if not slicer_name in self.registered_slicers:
error = "No such slicer: {slicer_name}".format(**locals())
else:
error = "Slicer not configured: {slicer_name}".format(**locals())
callback_kwargs.update(dict(_error=error))
callback(*callback_args, **callback_kwargs)
return False, error

View file

@ -181,7 +181,11 @@ function DataUpdater(allViewModels) {
} else if (type == "SlicingStarted") {
gcodeUploadProgress.addClass("progress-striped").addClass("active");
gcodeUploadProgressBar.css("width", "100%");
gcodeUploadProgressBar.text(_.sprintf(gettext("Slicing ... (%(percentage)d%%)"), {percentage: 0}));
if (payload.progressAvailable) {
gcodeUploadProgressBar.text(_.sprintf(gettext("Slicing ... (%(percentage)d%%)"), {percentage: 0}));
} else {
gcodeUploadProgressBar.text(gettext("Slicing ..."));
}
} else if (type == "SlicingDone") {
gcodeUploadProgress.removeClass("progress-striped").removeClass("active");
gcodeUploadProgressBar.css("width", "0%");