mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-06-30 10:05:11 +08:00
Merge branch 'master' of https://github.com/Ultimaker/Cura
This commit is contained in:
commit
7eee1efa14
@ -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.
|
||||||
|
@ -95,21 +95,21 @@ class ExtruderManager(QObject):
|
|||||||
container_registry = UM.Settings.ContainerRegistry.getInstance()
|
container_registry = UM.Settings.ContainerRegistry.getInstance()
|
||||||
if container_registry:
|
if container_registry:
|
||||||
|
|
||||||
#Add the extruder trains that don't exist yet.
|
# Add the extruder trains that don't exist yet.
|
||||||
for extruder_definition in container_registry.findDefinitionContainers(machine = machine_definition.getId()):
|
for extruder_definition in container_registry.findDefinitionContainers(machine = machine_definition.getId()):
|
||||||
position = extruder_definition.getMetaDataEntry("position", None)
|
position = extruder_definition.getMetaDataEntry("position", None)
|
||||||
if not position:
|
if not position:
|
||||||
UM.Logger.log("w", "Extruder definition %s specifies no position metadata entry.", extruder_definition.getId())
|
UM.Logger.log("w", "Extruder definition %s specifies no position metadata entry.", extruder_definition.getId())
|
||||||
if not container_registry.findContainerStacks(machine = machine_id, position = position): #Doesn't exist yet.
|
if not container_registry.findContainerStacks(machine = machine_id, position = position): # Doesn't exist yet.
|
||||||
self.createExtruderTrain(extruder_definition, machine_definition, position)
|
self.createExtruderTrain(extruder_definition, machine_definition, position)
|
||||||
changed = True
|
changed = True
|
||||||
|
|
||||||
#Gets the extruder trains that we just created as well as any that still existed.
|
# Gets the extruder trains that we just created as well as any that still existed.
|
||||||
extruder_trains = container_registry.findContainerStacks(type = "extruder_train", machine = machine_definition.getId())
|
extruder_trains = container_registry.findContainerStacks(type = "extruder_train", machine = machine_definition.getId())
|
||||||
for extruder_train in extruder_trains:
|
for extruder_train in extruder_trains:
|
||||||
self._extruder_trains[machine_id][extruder_train.getMetaDataEntry("position")] = extruder_train
|
self._extruder_trains[machine_id][extruder_train.getMetaDataEntry("position")] = extruder_train
|
||||||
|
|
||||||
#Ensure that the extruder train stacks are linked to global stack.
|
# Ensure that the extruder train stacks are linked to global stack.
|
||||||
extruder_train.setNextStack(UM.Application.getInstance().getGlobalContainerStack())
|
extruder_train.setNextStack(UM.Application.getInstance().getGlobalContainerStack())
|
||||||
changed = True
|
changed = True
|
||||||
|
|
||||||
@ -124,30 +124,27 @@ class ExtruderManager(QObject):
|
|||||||
#
|
#
|
||||||
# The resulting container stack is added to the registry.
|
# The resulting container stack is added to the registry.
|
||||||
#
|
#
|
||||||
# \param extruder_definition The extruder to create the extruder train
|
# \param extruder_definition The extruder to create the extruder train for.
|
||||||
# for.
|
# \param machine_definition The machine that the extruder train belongs to.
|
||||||
# \param machine_definition The machine that the extruder train belongs
|
# \param position The position of this extruder train in the extruder slots of the machine.
|
||||||
# to.
|
|
||||||
# \param position The position of this extruder train in the extruder
|
|
||||||
# slots of the machine.
|
|
||||||
def createExtruderTrain(self, extruder_definition, machine_definition, position):
|
def createExtruderTrain(self, extruder_definition, machine_definition, position):
|
||||||
#Cache some things.
|
# Cache some things.
|
||||||
container_registry = UM.Settings.ContainerRegistry.getInstance()
|
container_registry = UM.Settings.ContainerRegistry.getInstance()
|
||||||
machine_id = machine_definition.getId()
|
machine_id = machine_definition.getId()
|
||||||
|
|
||||||
#Create a container stack for this extruder.
|
# Create a container stack for this extruder.
|
||||||
extruder_stack_id = container_registry.uniqueName(extruder_definition.getId())
|
extruder_stack_id = container_registry.uniqueName(extruder_definition.getId())
|
||||||
container_stack = UM.Settings.ContainerStack(extruder_stack_id)
|
container_stack = UM.Settings.ContainerStack(extruder_stack_id)
|
||||||
container_stack.setName(extruder_definition.getName()) #Take over the display name to display the stack with.
|
container_stack.setName(extruder_definition.getName()) # Take over the display name to display the stack with.
|
||||||
container_stack.addMetaDataEntry("type", "extruder_train")
|
container_stack.addMetaDataEntry("type", "extruder_train")
|
||||||
container_stack.addMetaDataEntry("machine", machine_definition.getId())
|
container_stack.addMetaDataEntry("machine", machine_definition.getId())
|
||||||
container_stack.addMetaDataEntry("position", position)
|
container_stack.addMetaDataEntry("position", position)
|
||||||
container_stack.addContainer(extruder_definition)
|
container_stack.addContainer(extruder_definition)
|
||||||
|
|
||||||
#Find the variant to use for this extruder.
|
# Find the variant to use for this extruder.
|
||||||
variant = container_registry.findInstanceContainers(id = "empty_variant")[0]
|
variant = container_registry.findInstanceContainers(id = "empty_variant")[0]
|
||||||
if machine_definition.getMetaDataEntry("has_variants"):
|
if machine_definition.getMetaDataEntry("has_variants"):
|
||||||
#First add any variant. Later, overwrite with preference if the preference is valid.
|
# First add any variant. Later, overwrite with preference if the preference is valid.
|
||||||
variants = container_registry.findInstanceContainers(definition = machine_id, type = "variant")
|
variants = container_registry.findInstanceContainers(definition = machine_id, type = "variant")
|
||||||
if len(variants) >= 1:
|
if len(variants) >= 1:
|
||||||
variant = variants[0]
|
variant = variants[0]
|
||||||
@ -158,13 +155,13 @@ class ExtruderManager(QObject):
|
|||||||
variant = preferred_variants[0]
|
variant = preferred_variants[0]
|
||||||
else:
|
else:
|
||||||
UM.Logger.log("w", "The preferred variant \"%s\" of machine %s doesn't exist or is not a variant profile.", preferred_variant_id, machine_id)
|
UM.Logger.log("w", "The preferred variant \"%s\" of machine %s doesn't exist or is not a variant profile.", preferred_variant_id, machine_id)
|
||||||
#And leave it at the default variant.
|
# And leave it at the default variant.
|
||||||
container_stack.addContainer(variant)
|
container_stack.addContainer(variant)
|
||||||
|
|
||||||
#Find a material to use for this variant.
|
# Find a material to use for this variant.
|
||||||
material = container_registry.findInstanceContainers(id = "empty_material")[0]
|
material = container_registry.findInstanceContainers(id = "empty_material")[0]
|
||||||
if machine_definition.getMetaDataEntry("has_materials"):
|
if machine_definition.getMetaDataEntry("has_materials"):
|
||||||
#First add any material. Later, overwrite with preference if the preference is valid.
|
# First add any material. Later, overwrite with preference if the preference is valid.
|
||||||
if machine_definition.getMetaDataEntry("has_variant_materials", default = "False") == "True":
|
if machine_definition.getMetaDataEntry("has_variant_materials", default = "False") == "True":
|
||||||
materials = container_registry.findInstanceContainers(type = "material", definition = machine_id, variant = variant.getId())
|
materials = container_registry.findInstanceContainers(type = "material", definition = machine_id, variant = variant.getId())
|
||||||
else:
|
else:
|
||||||
@ -187,13 +184,13 @@ class ExtruderManager(QObject):
|
|||||||
material = preferred_materials[0]
|
material = preferred_materials[0]
|
||||||
else:
|
else:
|
||||||
UM.Logger.log("w", "The preferred material \"%s\" of machine %s doesn't exist or is not a material profile.", preferred_material_id, machine_id)
|
UM.Logger.log("w", "The preferred material \"%s\" of machine %s doesn't exist or is not a material profile.", preferred_material_id, machine_id)
|
||||||
#And leave it at the default material.
|
# And leave it at the default material.
|
||||||
container_stack.addContainer(material)
|
container_stack.addContainer(material)
|
||||||
|
|
||||||
#Find a quality to use for this extruder.
|
# Find a quality to use for this extruder.
|
||||||
quality = container_registry.findInstanceContainers(id = "empty_quality")[0]
|
quality = container_registry.getEmptyInstanceContainer()
|
||||||
|
|
||||||
#First add any quality. Later, overwrite with preference if the preference is valid.
|
# First add any quality. Later, overwrite with preference if the preference is valid.
|
||||||
qualities = container_registry.findInstanceContainers(type = "quality")
|
qualities = container_registry.findInstanceContainers(type = "quality")
|
||||||
if len(qualities) >= 1:
|
if len(qualities) >= 1:
|
||||||
quality = qualities[0]
|
quality = qualities[0]
|
||||||
@ -204,14 +201,14 @@ class ExtruderManager(QObject):
|
|||||||
quality = preferred_quality[0]
|
quality = preferred_quality[0]
|
||||||
else:
|
else:
|
||||||
UM.Logger.log("w", "The preferred quality \"%s\" of machine %s doesn't exist or is not a quality profile.", preferred_quality_id, machine_id)
|
UM.Logger.log("w", "The preferred quality \"%s\" of machine %s doesn't exist or is not a quality profile.", preferred_quality_id, machine_id)
|
||||||
#And leave it at the default quality.
|
# And leave it at the default quality.
|
||||||
container_stack.addContainer(quality)
|
container_stack.addContainer(quality)
|
||||||
|
|
||||||
user_profile = container_registry.findInstanceContainers(type = "user", extruder = extruder_stack_id)
|
user_profile = container_registry.findInstanceContainers(type = "user", extruder = extruder_stack_id)
|
||||||
if user_profile: #There was already a user profile, loaded from settings.
|
if user_profile: # There was already a user profile, loaded from settings.
|
||||||
user_profile = user_profile[0]
|
user_profile = user_profile[0]
|
||||||
else:
|
else:
|
||||||
user_profile = UM.Settings.InstanceContainer(extruder_stack_id + "_current_settings") #Add an empty user profile.
|
user_profile = UM.Settings.InstanceContainer(extruder_stack_id + "_current_settings") # Add an empty user profile.
|
||||||
user_profile.addMetaDataEntry("type", "user")
|
user_profile.addMetaDataEntry("type", "user")
|
||||||
user_profile.addMetaDataEntry("extruder", extruder_stack_id)
|
user_profile.addMetaDataEntry("extruder", extruder_stack_id)
|
||||||
user_profile.setDefinition(machine_definition)
|
user_profile.setDefinition(machine_definition)
|
||||||
|
@ -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):
|
||||||
|
@ -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)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user