mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-22 14:13:55 -06:00
Allow machinedefinitions to specify another definition to inherit qualities from
CURA-1780
This commit is contained in:
parent
4de78db87a
commit
8b7a8327e8
5 changed files with 69 additions and 14 deletions
|
@ -160,7 +160,7 @@ class ExtruderManager(QObject):
|
||||||
def createExtruderTrain(self, extruder_definition, machine_definition, position, machine_id):
|
def createExtruderTrain(self, extruder_definition, machine_definition, position, machine_id):
|
||||||
# Cache some things.
|
# Cache some things.
|
||||||
container_registry = UM.Settings.ContainerRegistry.getInstance()
|
container_registry = UM.Settings.ContainerRegistry.getInstance()
|
||||||
machine_definition_id = machine_definition.getId()
|
machine_definition_id = UM.Application.getInstance().getMachineManager().getQualityDefinitionId(machine_definition)
|
||||||
|
|
||||||
# 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())
|
||||||
|
@ -222,7 +222,7 @@ class ExtruderManager(QObject):
|
||||||
|
|
||||||
search_criteria = { "type": "quality" }
|
search_criteria = { "type": "quality" }
|
||||||
if machine_definition.getMetaDataEntry("has_machine_quality"):
|
if machine_definition.getMetaDataEntry("has_machine_quality"):
|
||||||
search_criteria["definition"] = machine_definition.id
|
search_criteria["definition"] = machine_definition_id
|
||||||
if machine_definition.getMetaDataEntry("has_materials") and material:
|
if machine_definition.getMetaDataEntry("has_materials") and material:
|
||||||
search_criteria["material"] = material.id
|
search_criteria["material"] = material.id
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -430,13 +430,23 @@ class MachineManager(QObject):
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
## Get the Material ID associated with the currently active material
|
||||||
|
# \returns MaterialID (string) if found, empty string otherwise
|
||||||
@pyqtProperty(str, notify=activeQualityChanged)
|
@pyqtProperty(str, notify=activeQualityChanged)
|
||||||
def activeQualityMaterialId(self):
|
def activeQualityMaterialId(self):
|
||||||
if self._active_container_stack:
|
if self._active_container_stack:
|
||||||
quality = self._active_container_stack.findContainer({"type": "quality"})
|
quality = self._active_container_stack.findContainer({"type": "quality"})
|
||||||
if quality:
|
if quality:
|
||||||
return quality.getMetaDataEntry("material")
|
material_id = quality.getMetaDataEntry("material")
|
||||||
|
if material_id:
|
||||||
|
# if the currently active machine inherits its qualities from a different machine
|
||||||
|
# definition, make sure to return a material that is relevant to that machine definition
|
||||||
|
definition_id = self.activeDefinitionId
|
||||||
|
quality_definition_id = self.activeQualityDefinitionId
|
||||||
|
if definition_id != quality_definition_id:
|
||||||
|
material_id = material_id.replace(definition_id, quality_definition_id, 1)
|
||||||
|
|
||||||
|
return material_id
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
@pyqtProperty(str, notify=activeQualityChanged)
|
@pyqtProperty(str, notify=activeQualityChanged)
|
||||||
|
@ -594,7 +604,7 @@ class MachineManager(QObject):
|
||||||
criteria["material"] = material.getId()
|
criteria["material"] = material.getId()
|
||||||
|
|
||||||
if self._global_container_stack.getMetaDataEntry("has_machine_quality"):
|
if self._global_container_stack.getMetaDataEntry("has_machine_quality"):
|
||||||
criteria["definition"] = self._global_container_stack.getBottom().getId()
|
criteria["definition"] = self.activeQualityDefinitionId
|
||||||
else:
|
else:
|
||||||
criteria["definition"] = "fdmprinter"
|
criteria["definition"] = "fdmprinter"
|
||||||
|
|
||||||
|
@ -685,6 +695,51 @@ class MachineManager(QObject):
|
||||||
|
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
|
## Get the Definition ID to use to select quality profiles for the currently active machine
|
||||||
|
# \returns DefinitionID (string) if found, empty string otherwise
|
||||||
|
# \sa getQualityDefinitionId
|
||||||
|
@pyqtProperty(str, notify = globalContainerChanged)
|
||||||
|
def activeQualityDefinitionId(self):
|
||||||
|
if self._global_container_stack:
|
||||||
|
return self.getQualityDefinitionId(self._global_container_stack.getBottom())
|
||||||
|
return ""
|
||||||
|
|
||||||
|
## Get the Definition ID to use to select quality profiles for machines of the specified definition
|
||||||
|
# This is normally the id of the definition itself, but machines can specify a different definition to inherit qualities from
|
||||||
|
# \param definition (DefinitionContainer) machine definition
|
||||||
|
# \returns DefinitionID (string) if found, empty string otherwise
|
||||||
|
def getQualityDefinitionId(self, definition):
|
||||||
|
definition_id = definition.getMetaDataEntry("quality_definition")
|
||||||
|
if not definition_id:
|
||||||
|
definition_id = definition.getId()
|
||||||
|
return definition_id
|
||||||
|
|
||||||
|
## Get the Variant ID to use to select quality profiles for the currently active variant
|
||||||
|
# \returns VariantID (string) if found, empty string otherwise
|
||||||
|
# \sa getQualityVariantId
|
||||||
|
@pyqtProperty(str, notify = activeVariantChanged)
|
||||||
|
def activeQualityVariantId(self):
|
||||||
|
if self._global_container_stack:
|
||||||
|
variant = self._global_container_stack.findContainer({"type": "variant"})
|
||||||
|
if variant:
|
||||||
|
return self.getQualityVariantId(self._global_container_stack.getBottom(), variant)
|
||||||
|
return ""
|
||||||
|
|
||||||
|
## Get the Variant ID to use to select quality profiles for variants of the specified definitions
|
||||||
|
# This is normally the id of the variant itself, but machines can specify a different definition
|
||||||
|
# to inherit qualities from, which has consequences for the variant to use as well
|
||||||
|
# \param definition (DefinitionContainer) machine definition
|
||||||
|
# \param variant (DefinitionContainer) variant definition
|
||||||
|
# \returns VariantID (string) if found, empty string otherwise
|
||||||
|
def getQualityVariantId(self, definition, variant):
|
||||||
|
variant_id = variant.getId()
|
||||||
|
definition_id = definition.getId()
|
||||||
|
quality_definition_id = self.getQualityDefinitionId(definition)
|
||||||
|
|
||||||
|
if definition_id != quality_definition_id:
|
||||||
|
variant_id = variant_id.replace(definition_id, quality_definition_id, 1)
|
||||||
|
return variant_id
|
||||||
|
|
||||||
## Gets how the active definition calls variants
|
## Gets how the active definition calls variants
|
||||||
# Caveat: per-definition-variant-title is currently not translated (though the fallback is)
|
# Caveat: per-definition-variant-title is currently not translated (though the fallback is)
|
||||||
@pyqtProperty(str, notify = globalContainerChanged)
|
@pyqtProperty(str, notify = globalContainerChanged)
|
||||||
|
@ -789,10 +844,10 @@ class MachineManager(QObject):
|
||||||
search_criteria = { "type": "material" }
|
search_criteria = { "type": "material" }
|
||||||
|
|
||||||
if definition.getMetaDataEntry("has_machine_materials"):
|
if definition.getMetaDataEntry("has_machine_materials"):
|
||||||
search_criteria["definition"] = definition.id
|
search_criteria["definition"] = self.getQualityDefinitionId(definition)
|
||||||
|
|
||||||
if definition.getMetaDataEntry("has_variants") and variant_container:
|
if definition.getMetaDataEntry("has_variants") and variant_container:
|
||||||
search_criteria["variant"] = variant_container.id
|
search_criteria["variant"] = self.getQualityVariantId(definition, variant_container)
|
||||||
else:
|
else:
|
||||||
search_criteria["definition"] = "fdmprinter"
|
search_criteria["definition"] = "fdmprinter"
|
||||||
|
|
||||||
|
@ -823,7 +878,7 @@ class MachineManager(QObject):
|
||||||
search_criteria = { "type": "quality" }
|
search_criteria = { "type": "quality" }
|
||||||
|
|
||||||
if definition.getMetaDataEntry("has_machine_quality"):
|
if definition.getMetaDataEntry("has_machine_quality"):
|
||||||
search_criteria["definition"] = definition.id
|
search_criteria["definition"] = self.getQualityDefinitionId(definition)
|
||||||
|
|
||||||
if definition.getMetaDataEntry("has_materials") and material_container:
|
if definition.getMetaDataEntry("has_materials") and material_container:
|
||||||
search_criteria["material"] = material_container.id
|
search_criteria["material"] = material_container.id
|
||||||
|
@ -866,10 +921,10 @@ class MachineManager(QObject):
|
||||||
if definition.getMetaDataEntry("has_variants"):
|
if definition.getMetaDataEntry("has_variants"):
|
||||||
material_search_criteria["variant"] = material_container.getMetaDataEntry("variant")
|
material_search_criteria["variant"] = material_container.getMetaDataEntry("variant")
|
||||||
else:
|
else:
|
||||||
material_search_criteria["definition"] = definition.id
|
material_search_criteria["definition"] = self.getQualityDefinitionId(definition)
|
||||||
|
|
||||||
if definition.getMetaDataEntry("has_variants") and variant_container:
|
if definition.getMetaDataEntry("has_variants") and variant_container:
|
||||||
material_search_criteria["variant"] = variant_container.id
|
material_search_criteria["variant"] = self.getQualityVariantId(definition, variant_container)
|
||||||
else:
|
else:
|
||||||
material_search_criteria["definition"] = "fdmprinter"
|
material_search_criteria["definition"] = "fdmprinter"
|
||||||
material_containers = container_registry.findInstanceContainers(**material_search_criteria)
|
material_containers = container_registry.findInstanceContainers(**material_search_criteria)
|
||||||
|
|
|
@ -106,10 +106,10 @@ Menu
|
||||||
var result = { "type": "material" };
|
var result = { "type": "material" };
|
||||||
if(Cura.MachineManager.filterMaterialsByMachine)
|
if(Cura.MachineManager.filterMaterialsByMachine)
|
||||||
{
|
{
|
||||||
result.definition = Cura.MachineManager.activeDefinitionId;
|
result.definition = Cura.MachineManager.activeQualityDefinitionId;
|
||||||
if(Cura.MachineManager.hasVariants)
|
if(Cura.MachineManager.hasVariants)
|
||||||
{
|
{
|
||||||
result.variant = Cura.MachineManager.activeVariantId;
|
result.variant = Cura.MachineManager.activeQualityVariantId;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -38,7 +38,7 @@ Menu
|
||||||
id: customProfileInstantiator
|
id: customProfileInstantiator
|
||||||
model: UM.InstanceContainersModel
|
model: UM.InstanceContainersModel
|
||||||
{
|
{
|
||||||
filter: { "type": "quality_changes", "extruder": null, "definition": Cura.MachineManager.filterQualityByMachine ? Cura.MachineManager.activeDefinitionId : "fdmprinter" };
|
filter: { "type": "quality_changes", "extruder": null, "definition": Cura.MachineManager.filterQualityByMachine ? Cura.MachineManager.activeQualityDefinitionId : "fdmprinter" };
|
||||||
onModelReset: customSeparator.visible = rowCount() > 0
|
onModelReset: customSeparator.visible = rowCount() > 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -79,7 +79,7 @@ Menu
|
||||||
|
|
||||||
if(Cura.MachineManager.filterQualityByMachine)
|
if(Cura.MachineManager.filterQualityByMachine)
|
||||||
{
|
{
|
||||||
result.definition = Cura.MachineManager.activeDefinitionId;
|
result.definition = Cura.MachineManager.activeQualityDefinitionId;
|
||||||
if(Cura.MachineManager.hasMaterials)
|
if(Cura.MachineManager.hasMaterials)
|
||||||
{
|
{
|
||||||
result.material = Cura.MachineManager.activeQualityMaterialId;
|
result.material = Cura.MachineManager.activeQualityMaterialId;
|
||||||
|
|
|
@ -23,7 +23,7 @@ UM.ManagementPage
|
||||||
var result = { "type": "quality*", "extruder": null };
|
var result = { "type": "quality*", "extruder": null };
|
||||||
if(Cura.MachineManager.filterQualityByMachine)
|
if(Cura.MachineManager.filterQualityByMachine)
|
||||||
{
|
{
|
||||||
result.definition = Cura.MachineManager.activeDefinitionId;
|
result.definition = Cura.MachineManager.activeQualityDefinitionId;
|
||||||
if(Cura.MachineManager.hasMaterials)
|
if(Cura.MachineManager.hasMaterials)
|
||||||
{
|
{
|
||||||
result.material = Cura.MachineManager.allActiveMaterialIds[Cura.MachineManager.activeMachineId];
|
result.material = Cura.MachineManager.allActiveMaterialIds[Cura.MachineManager.activeMachineId];
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue