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_action_manager = MachineActionManager.MachineActionManager()
self._machine_manager = None # This is initialized on demand.
super().__init__(name = "cura", version = CuraVersion, buildtype = CuraBuildType) 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. # Initialise extruder so as to listen to global container stack changes before the first global container stack is set.
cura.Settings.ExtruderManager.getInstance() cura.Settings.ExtruderManager.getInstance()
qmlRegisterSingletonType(cura.Settings.MachineManager, "Cura", 1, 0, "MachineManager", qmlRegisterSingletonType(cura.Settings.MachineManager, "Cura", 1, 0, "MachineManager", self.getMachineManager)
cura.Settings.MachineManager.createMachineManager)
qmlRegisterSingletonType(MachineActionManager.MachineActionManager, "Cura", 1, 0, "MachineActionManager", self.getMachineActionManager) qmlRegisterSingletonType(MachineActionManager.MachineActionManager, "Cura", 1, 0, "MachineActionManager", self.getMachineActionManager)
self.setMainQml(Resources.getPath(self.ResourceTypes.QmlFiles, "Cura.qml")) self.setMainQml(Resources.getPath(self.ResourceTypes.QmlFiles, "Cura.qml"))
@ -419,6 +419,11 @@ class CuraApplication(QtApplication):
self.exec_() 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 ## Get the machine action manager
# We ignore any *args given to this, as we also register the machine manager as qml singleton. # 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. # 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() return containers[0].getBottom().getId()
@staticmethod @staticmethod
def createMachineManager(engine, script_engine): def createMachineManager(engine=None, script_engine=None):
return MachineManager() return MachineManager()
def _updateVariantContainer(self, definition): def _updateVariantContainer(self, definition):

View file

@ -4,7 +4,9 @@
from UM.Mesh.MeshWriter import MeshWriter from UM.Mesh.MeshWriter import MeshWriter
from UM.Logger import Logger from UM.Logger import Logger
from UM.Application import Application from UM.Application import Application
import UM.Settings.ContainerRegistry
from cura.CuraApplication import CuraApplication
from cura.Settings.ExtruderManager import ExtruderManager from cura.Settings.ExtruderManager import ExtruderManager
import re #For escaping characters in the settings. import re #For escaping characters in the settings.
@ -72,14 +74,30 @@ class GCodeWriter(MeshWriter):
prefix_length = len(prefix) prefix_length = len(prefix)
container_with_profile = stack.findContainer({"type": "quality"}) 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} data = {"global_quality": serialized}
manager = ExtruderManager.getInstance() manager = ExtruderManager.getInstance()
for extruder in manager.getMachineExtruders(stack.getBottom().getId()): for extruder in manager.getMachineExtruders(stack.getBottom().getId()):
extruder_quality = extruder.findContainer({"type": "quality"}) 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) data.setdefault("extruder_quality", []).append(extruder_serialized)
json_string = json.dumps(data) json_string = json.dumps(data)