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:
parent
44cc9e7db8
commit
0aac7813e4
5 changed files with 22 additions and 8 deletions
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -199,6 +199,7 @@ class SlicerPlugin(Plugin):
|
|||
type=None,
|
||||
name=None,
|
||||
same_device=True,
|
||||
progress_report=False
|
||||
)
|
||||
|
||||
def get_slicer_profile_options(self):
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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%");
|
||||
|
|
|
|||
Loading…
Reference in a new issue