mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-06 22:47:29 -06:00
Merge branch '4.4'
Conflicts: cura/Machines/MaterialNode.py -> Due to some automated formatting tool. Please disable those tools, people.
This commit is contained in:
commit
8a9b791298
5 changed files with 78 additions and 9 deletions
|
@ -60,28 +60,38 @@ class MaterialNode(ContainerNode):
|
||||||
container_registry = ContainerRegistry.getInstance()
|
container_registry = ContainerRegistry.getInstance()
|
||||||
# Find all quality profiles that fit on this material.
|
# Find all quality profiles that fit on this material.
|
||||||
if not self.variant.machine.has_machine_quality: # Need to find the global qualities.
|
if not self.variant.machine.has_machine_quality: # Need to find the global qualities.
|
||||||
qualities = container_registry.findInstanceContainersMetadata(type = "quality", definition = "fdmprinter")
|
qualities = container_registry.findInstanceContainersMetadata(type = "quality",
|
||||||
|
definition = "fdmprinter")
|
||||||
elif not self.variant.machine.has_materials:
|
elif not self.variant.machine.has_materials:
|
||||||
qualities = container_registry.findInstanceContainersMetadata(type="quality", definition=self.variant.machine.quality_definition)
|
qualities = container_registry.findInstanceContainersMetadata(type = "quality",
|
||||||
|
definition = self.variant.machine.quality_definition)
|
||||||
else:
|
else:
|
||||||
if self.variant.machine.has_variants:
|
if self.variant.machine.has_variants:
|
||||||
# Need to find the qualities that specify a material profile with the same material type.
|
# Need to find the qualities that specify a material profile with the same material type.
|
||||||
qualities = container_registry.findInstanceContainersMetadata(type = "quality", definition = self.variant.machine.quality_definition, variant = self.variant.variant_name, material = self.container_id) # First try by exact material ID.
|
qualities = container_registry.findInstanceContainersMetadata(type = "quality",
|
||||||
|
definition = self.variant.machine.quality_definition,
|
||||||
|
variant = self.variant.variant_name,
|
||||||
|
material = self.base_file) # First try by exact material ID.
|
||||||
|
# CURA-7070
|
||||||
|
# The quality profiles only reference a material with the material_root_id. They will never state something
|
||||||
|
# such as "generic_pla_ultimaker_s5_AA_0.4". So we search with the "base_file" which is the material_root_id.
|
||||||
else:
|
else:
|
||||||
qualities = container_registry.findInstanceContainersMetadata(type = "quality", definition = self.variant.machine.quality_definition, material = self.container_id)
|
qualities = container_registry.findInstanceContainersMetadata(type = "quality", definition = self.variant.machine.quality_definition, material = self.base_file)
|
||||||
if not qualities:
|
if not qualities:
|
||||||
my_material_type = self.material_type
|
my_material_type = self.material_type
|
||||||
if self.variant.machine.has_variants:
|
if self.variant.machine.has_variants:
|
||||||
qualities_any_material = container_registry.findInstanceContainersMetadata(type = "quality", definition = self.variant.machine.quality_definition, variant = self.variant.variant_name)
|
qualities_any_material = container_registry.findInstanceContainersMetadata(type = "quality",
|
||||||
|
definition = self.variant.machine.quality_definition,
|
||||||
|
variant = self.variant.variant_name)
|
||||||
else:
|
else:
|
||||||
qualities_any_material = container_registry.findInstanceContainersMetadata(type = "quality", definition = self.variant.machine.quality_definition)
|
qualities_any_material = container_registry.findInstanceContainersMetadata(type = "quality", definition = self.variant.machine.quality_definition)
|
||||||
for material_metadata in container_registry.findInstanceContainersMetadata(type = "material", material = my_material_type):
|
for material_metadata in container_registry.findInstanceContainersMetadata(type = "material", material = my_material_type):
|
||||||
qualities.extend((quality for quality in qualities_any_material if quality.get("material") == material_metadata["id"]))
|
qualities.extend((quality for quality in qualities_any_material if quality.get("material") == material_metadata["base_file"]))
|
||||||
|
|
||||||
if not qualities: # No quality profiles found. Go by GUID then.
|
if not qualities: # No quality profiles found. Go by GUID then.
|
||||||
my_guid = self.guid
|
my_guid = self.guid
|
||||||
for material_metadata in container_registry.findInstanceContainersMetadata(type = "material", guid = my_guid):
|
for material_metadata in container_registry.findInstanceContainersMetadata(type = "material", guid = my_guid):
|
||||||
qualities.extend((quality for quality in qualities_any_material if quality["material"] == material_metadata["id"]))
|
qualities.extend((quality for quality in qualities_any_material if quality["material"] == material_metadata["base_file"]))
|
||||||
|
|
||||||
if not qualities:
|
if not qualities:
|
||||||
# There are still some machines that should use global profiles in the extruder, so do that now.
|
# There are still some machines that should use global profiles in the extruder, so do that now.
|
||||||
|
|
|
@ -894,8 +894,8 @@ class MachineManager(QObject):
|
||||||
|
|
||||||
@pyqtSlot(int, bool)
|
@pyqtSlot(int, bool)
|
||||||
def setExtruderEnabled(self, position: int, enabled: bool) -> None:
|
def setExtruderEnabled(self, position: int, enabled: bool) -> None:
|
||||||
if self._global_container_stack is None:
|
if self._global_container_stack is None or str(position) not in self._global_container_stack.extruders:
|
||||||
Logger.log("w", "Could not find extruder on position %s", position)
|
Logger.log("w", "Could not find extruder on position %s.", position)
|
||||||
return
|
return
|
||||||
extruder = self._global_container_stack.extruderList[position]
|
extruder = self._global_container_stack.extruderList[position]
|
||||||
|
|
||||||
|
|
|
@ -1106,6 +1106,12 @@ class XmlMaterialProfile(InstanceContainer):
|
||||||
"break preparation speed": "material_break_preparation_speed",
|
"break preparation speed": "material_break_preparation_speed",
|
||||||
"break preparation temperature": "material_break_preparation_temperature",
|
"break preparation temperature": "material_break_preparation_temperature",
|
||||||
"break position": "material_break_retracted_position",
|
"break position": "material_break_retracted_position",
|
||||||
|
"flush purge speed": "material_flush_purge_speed",
|
||||||
|
"flush purge length": "material_flush_purge_length",
|
||||||
|
"end of filament purge speed": "material_end_of_filament_purge_speed",
|
||||||
|
"end of filament purge length": "material_end_of_filament_purge_length",
|
||||||
|
"maximum park duration": "material_maximum_park_duration",
|
||||||
|
"no load move factor": "material_no_load_move_factor",
|
||||||
"break speed": "material_break_speed",
|
"break speed": "material_break_speed",
|
||||||
"break temperature": "material_break_temperature"
|
"break temperature": "material_break_temperature"
|
||||||
} # type: Dict[str, str]
|
} # type: Dict[str, str]
|
||||||
|
|
|
@ -2419,6 +2419,54 @@
|
||||||
"settable_per_mesh": false,
|
"settable_per_mesh": false,
|
||||||
"settable_per_extruder": true
|
"settable_per_extruder": true
|
||||||
},
|
},
|
||||||
|
"material_flush_purge_speed":
|
||||||
|
{
|
||||||
|
"label": "Flush Purge Speed",
|
||||||
|
"description": "Material Station internal value",
|
||||||
|
"type": "float",
|
||||||
|
"default_value": 0.5,
|
||||||
|
"enabled": false
|
||||||
|
},
|
||||||
|
"material_flush_purge_length":
|
||||||
|
{
|
||||||
|
"label": "Flush Purge Length",
|
||||||
|
"description": "Material Station internal value",
|
||||||
|
"type": "float",
|
||||||
|
"default_value": 60,
|
||||||
|
"enabled": false
|
||||||
|
},
|
||||||
|
"material_end_of_filament_purge_speed":
|
||||||
|
{
|
||||||
|
"label": "End Of Filament Purge Speed",
|
||||||
|
"description": "Material Station internal value",
|
||||||
|
"type": "float",
|
||||||
|
"default_value": 0.5,
|
||||||
|
"enabled": false
|
||||||
|
},
|
||||||
|
"material_end_of_filament_purge_length":
|
||||||
|
{
|
||||||
|
"label": "End Of Filament Purge Length",
|
||||||
|
"description": "Material Station internal value",
|
||||||
|
"type": "float",
|
||||||
|
"default_value": 20,
|
||||||
|
"enabled": false
|
||||||
|
},
|
||||||
|
"material_maximum_park_duration":
|
||||||
|
{
|
||||||
|
"label": "Maximum Park Duration",
|
||||||
|
"description": "Material Station internal value",
|
||||||
|
"type": "float",
|
||||||
|
"default_value": 300,
|
||||||
|
"enabled": false
|
||||||
|
},
|
||||||
|
"material_no_load_move_factor":
|
||||||
|
{
|
||||||
|
"label": "No Load Move Factor",
|
||||||
|
"description": "Material Station internal value",
|
||||||
|
"type": "float",
|
||||||
|
"default_value": 0.940860215,
|
||||||
|
"enabled": false
|
||||||
|
},
|
||||||
"material_flow":
|
"material_flow":
|
||||||
{
|
{
|
||||||
"label": "Flow",
|
"label": "Flow",
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
[4.4.1]
|
||||||
|
* Bug fixes
|
||||||
|
- Fixed problem where wrong material was selected by default.
|
||||||
|
- Fixed a problem where custom profiles were disappearing when loading a project without a nozzle profile.
|
||||||
|
|
||||||
[4.4.0]
|
[4.4.0]
|
||||||
*Intent profiles.
|
*Intent profiles.
|
||||||
What’s the intent of your print? A rapid prototype? A visual prototype? An end-use part with specific holes sizes? Intent profiles accelerate the CAD-CAM workflow by preconfiguring all the right settings in Ultimaker Cura for each of these use cases. Simply select a profile that matches the intent of your design, slice, and you’re ready to print immediately, without the need to adjust the typical settings. For now, there are three Intent profiles:
|
What’s the intent of your print? A rapid prototype? A visual prototype? An end-use part with specific holes sizes? Intent profiles accelerate the CAD-CAM workflow by preconfiguring all the right settings in Ultimaker Cura for each of these use cases. Simply select a profile that matches the intent of your design, slice, and you’re ready to print immediately, without the need to adjust the typical settings. For now, there are three Intent profiles:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue