When saving the quality profile data, also incorporate any user settings/changes.

Contributes to CURA-1727 GCode Profile reading/writing: Broken and needs update
This commit is contained in:
Simon Edwards 2016-07-13 09:27:48 +02:00
parent b622c7ecc8
commit 642ea6791b
3 changed files with 28 additions and 5 deletions

View file

@ -126,6 +126,7 @@ class CuraApplication(QtApplication):
)
self._machine_action_manager = MachineActionManager.MachineActionManager()
self._machine_manager = None # This is initialized on demand.
super().__init__(name = "cura", version = CuraVersion, buildtype = CuraBuildType)
@ -399,8 +400,7 @@ class CuraApplication(QtApplication):
# Initialise extruder so as to listen to global container stack changes before the first global container stack is set.
cura.Settings.ExtruderManager.getInstance()
qmlRegisterSingletonType(cura.Settings.MachineManager, "Cura", 1, 0, "MachineManager",
cura.Settings.MachineManager.createMachineManager)
qmlRegisterSingletonType(cura.Settings.MachineManager, "Cura", 1, 0, "MachineManager", self.getMachineManager)
qmlRegisterSingletonType(MachineActionManager.MachineActionManager, "Cura", 1, 0, "MachineActionManager", self.getMachineActionManager)
self.setMainQml(Resources.getPath(self.ResourceTypes.QmlFiles, "Cura.qml"))
@ -419,6 +419,11 @@ class CuraApplication(QtApplication):
self.exec_()
def getMachineManager(self, *args):
if self._machine_manager is None:
self._machine_manager = cura.Settings.MachineManager.createMachineManager()
return self._machine_manager
## Get the machine action manager
# We ignore any *args given to this, as we also register the machine manager as qml singleton.
# It wants to give this function an engine and script engine, but we don't care about that.

View file

@ -692,7 +692,7 @@ class MachineManager(QObject):
return containers[0].getBottom().getId()
@staticmethod
def createMachineManager(engine, script_engine):
def createMachineManager(engine=None, script_engine=None):
return MachineManager()
def _updateVariantContainer(self, definition):

View file

@ -4,7 +4,9 @@
from UM.Mesh.MeshWriter import MeshWriter
from UM.Logger import Logger
from UM.Application import Application
import UM.Settings.ContainerRegistry
from cura.CuraApplication import CuraApplication
from cura.Settings.ExtruderManager import ExtruderManager
import re #For escaping characters in the settings.
@ -72,14 +74,30 @@ class GCodeWriter(MeshWriter):
prefix_length = len(prefix)
container_with_profile = stack.findContainer({"type": "quality"})
serialized = container_with_profile.serialize()
machine_manager = CuraApplication.getInstance().getMachineManager()
# Duplicate the current quality profile and update it with any user settings.
flat_quality_id = machine_manager.duplicateContainer(container_with_profile.getId())
flat_quality = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(id = flat_quality_id)[0]
user_settings = stack.getTop()
for key in user_settings.getAllKeys():
flat_quality.setProperty(key, "value", user_settings.getProperty(key, "value"))
serialized = flat_quality.serialize()
data = {"global_quality": serialized}
manager = ExtruderManager.getInstance()
for extruder in manager.getMachineExtruders(stack.getBottom().getId()):
extruder_quality = extruder.findContainer({"type": "quality"})
extruder_serialized = extruder_quality.serialize()
flat_extruder_quality_id = machine_manager.duplicateContainer(extruder_quality.getId())
flat_extruder_quality = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(id=flat_extruder_quality_id)[0]
extruder_user_settings = extruder.getTop()
for key in extruder_user_settings.getAllKeys():
flat_extruder_quality.setProperty(key, "value", extruder_user_settings.getProperty(key, "value"))
extruder_serialized = flat_extruder_quality.serialize()
data.setdefault("extruder_quality", []).append(extruder_serialized)
json_string = json.dumps(data)