mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-08-15 09:15:58 +08:00
CURA-4606 Ensure the correct material is highlighted in the material menu
This commit is contained in:
parent
54363bad02
commit
27169e883c
@ -4,7 +4,6 @@ from PyQt5.Qt import QTimer, QObject, pyqtSignal
|
|||||||
|
|
||||||
from UM.Logger import Logger
|
from UM.Logger import Logger
|
||||||
from UM.Settings import ContainerRegistry
|
from UM.Settings import ContainerRegistry
|
||||||
from UM.Settings import InstanceContainer
|
|
||||||
|
|
||||||
from cura.Machines.ContainerNode import ContainerNode
|
from cura.Machines.ContainerNode import ContainerNode
|
||||||
|
|
||||||
@ -227,7 +226,7 @@ class MaterialManager(QObject):
|
|||||||
# 1. the given machine doesn't have materials;
|
# 1. the given machine doesn't have materials;
|
||||||
# 2. cannot find any material InstanceContainers with the given settings.
|
# 2. cannot find any material InstanceContainers with the given settings.
|
||||||
#
|
#
|
||||||
def getMaterial(self, machine_definition_id: str, variant_name: Optional[str], diameter: float, root_material_id: str) -> Optional["InstanceContainer"]:
|
def getMaterialNode(self, machine_definition_id: str, variant_name: Optional[str], diameter: float, root_material_id: str) -> Optional["InstanceContainer"]:
|
||||||
# round the diameter to get the approximate diameter
|
# round the diameter to get the approximate diameter
|
||||||
rounded_diameter = str(round(diameter))
|
rounded_diameter = str(round(diameter))
|
||||||
if rounded_diameter not in self._diameter_machine_variant_material_map:
|
if rounded_diameter not in self._diameter_machine_variant_material_map:
|
||||||
|
@ -135,11 +135,11 @@ class MachineManager(QObject):
|
|||||||
|
|
||||||
### NEW
|
### NEW
|
||||||
self._current_quality_group = None
|
self._current_quality_group = None
|
||||||
|
self._current_root_material_id = {}
|
||||||
|
|
||||||
### NEW
|
### NEW
|
||||||
activeQualityGroupChanged = pyqtSignal()
|
activeQualityGroupChanged = pyqtSignal()
|
||||||
|
|
||||||
|
|
||||||
globalContainerChanged = pyqtSignal() # Emitted whenever the global stack is changed (ie: when changing between printers, changing a global profile, but not when changing a value)
|
globalContainerChanged = pyqtSignal() # Emitted whenever the global stack is changed (ie: when changing between printers, changing a global profile, but not when changing a value)
|
||||||
activeMaterialChanged = pyqtSignal()
|
activeMaterialChanged = pyqtSignal()
|
||||||
activeVariantChanged = pyqtSignal()
|
activeVariantChanged = pyqtSignal()
|
||||||
@ -155,6 +155,8 @@ class MachineManager(QObject):
|
|||||||
|
|
||||||
outputDevicesChanged = pyqtSignal()
|
outputDevicesChanged = pyqtSignal()
|
||||||
|
|
||||||
|
rootMaterialChanged = pyqtSignal()
|
||||||
|
|
||||||
def _onOutputDevicesChanged(self) -> None:
|
def _onOutputDevicesChanged(self) -> None:
|
||||||
for printer_output_device in self._printer_output_devices:
|
for printer_output_device in self._printer_output_devices:
|
||||||
printer_output_device.hotendIdChanged.disconnect(self._onHotendIdChanged)
|
printer_output_device.hotendIdChanged.disconnect(self._onHotendIdChanged)
|
||||||
@ -1491,6 +1493,15 @@ class MachineManager(QObject):
|
|||||||
#
|
#
|
||||||
# New
|
# New
|
||||||
#
|
#
|
||||||
|
|
||||||
|
@pyqtProperty("QVariant", notify = rootMaterialChanged)
|
||||||
|
def currentRootMaterialId(self):
|
||||||
|
# initial filling the current_root_material_id
|
||||||
|
for position in self._global_container_stack.extruders:
|
||||||
|
if position not in self._current_root_material_id:
|
||||||
|
self._current_root_material_id[position] = self._global_container_stack.extruders[position].material.getMetaDataEntry("base_file")
|
||||||
|
return self._current_root_material_id
|
||||||
|
|
||||||
def _setEmptyQuality(self):
|
def _setEmptyQuality(self):
|
||||||
self._current_quality_group = None
|
self._current_quality_group = None
|
||||||
self._global_container_stack.quality = self._empty_quality_container
|
self._global_container_stack.quality = self._empty_quality_container
|
||||||
@ -1523,6 +1534,11 @@ class MachineManager(QObject):
|
|||||||
self._global_container_stack.extruders[position].material = container_node.getContainer()
|
self._global_container_stack.extruders[position].material = container_node.getContainer()
|
||||||
else:
|
else:
|
||||||
self._global_container_stack.extruders[position].material = self._empty_material_container
|
self._global_container_stack.extruders[position].material = self._empty_material_container
|
||||||
|
# The _current_root_material_id is used in the MaterialMenu to see which material is selected
|
||||||
|
root_material_id = container_node.metadata["base_file"]
|
||||||
|
if root_material_id != self._current_root_material_id[position]:
|
||||||
|
self._current_root_material_id[position] = root_material_id
|
||||||
|
self.rootMaterialChanged.emit()
|
||||||
|
|
||||||
## Update current quality type and machine after setting material
|
## Update current quality type and machine after setting material
|
||||||
def _updateQualityWithMaterial(self):
|
def _updateQualityWithMaterial(self):
|
||||||
|
@ -14,48 +14,6 @@ Menu
|
|||||||
|
|
||||||
property int extruderIndex: 0
|
property int extruderIndex: 0
|
||||||
property bool printerConnected: Cura.MachineManager.printerOutputDevices.length != 0
|
property bool printerConnected: Cura.MachineManager.printerOutputDevices.length != 0
|
||||||
property bool isClusterPrinter:
|
|
||||||
{
|
|
||||||
if(Cura.MachineManager.printerOutputDevices.length == 0)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
var clusterSize = Cura.MachineManager.printerOutputDevices[0].clusterSize;
|
|
||||||
// This is not a cluster printer or the cluster it is just one printer
|
|
||||||
if(clusterSize == undefined || clusterSize == 1)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
MenuItem
|
|
||||||
{
|
|
||||||
id: automaticMaterial
|
|
||||||
text:
|
|
||||||
{
|
|
||||||
if(visible)
|
|
||||||
{
|
|
||||||
var materialName = Cura.MachineManager.printerOutputDevices[0].materialNames[extruderIndex];
|
|
||||||
return catalog.i18nc("@title:menuitem %1 is the automatically selected material", "Automatic: %1").arg(materialName);
|
|
||||||
}
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
visible: printerConnected && Cura.MachineManager.printerOutputDevices[0].materialNames != undefined && Cura.MachineManager.printerOutputDevices[0].materialNames.length > extruderIndex && !isClusterPrinter
|
|
||||||
onTriggered:
|
|
||||||
{
|
|
||||||
var materialId = Cura.MachineManager.printerOutputDevices[0].materialIds[extruderIndex];
|
|
||||||
var items = materialsModel.items;
|
|
||||||
for(var i in items)
|
|
||||||
{
|
|
||||||
if (items[i]["metadata"]["GUID"] == materialId)
|
|
||||||
{
|
|
||||||
Cura.MachineManager.setActiveMaterial(items[i].id);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
MenuSeparator
|
MenuSeparator
|
||||||
{
|
{
|
||||||
@ -69,19 +27,11 @@ Menu
|
|||||||
{
|
{
|
||||||
text: model.name
|
text: model.name
|
||||||
checkable: true
|
checkable: true
|
||||||
checked: model.id == Cura.MachineManager.allActiveMaterialIds[Cura.ExtruderManager.extruderIds[extruderIndex]]
|
checked: model.root_material_id == Cura.MachineManager.currentRootMaterialId[Cura.ExtruderManager.activeExtruderIndex]
|
||||||
exclusiveGroup: group
|
exclusiveGroup: group
|
||||||
onTriggered:
|
onTriggered:
|
||||||
{
|
{
|
||||||
|
|
||||||
const container_id = model.id;
|
|
||||||
// This workaround is done because of the application menus for materials and variants for multiextrusion printers.
|
|
||||||
// The extruder menu would always act on the correspoding extruder only, instead of acting on the extruder selected in the UI.
|
|
||||||
|
|
||||||
var activeExtruderIndex = Cura.ExtruderManager.activeExtruderIndex;
|
var activeExtruderIndex = Cura.ExtruderManager.activeExtruderIndex;
|
||||||
//Cura.ExtruderManager.setActiveExtruderIndex(extruderIndex);
|
|
||||||
//Cura.MachineManager.setActiveMaterial(container_id);
|
|
||||||
//Cura.ExtruderManager.setActiveExtruderIndex(activeExtruderIndex);
|
|
||||||
Cura.MachineManager.setMaterial(activeExtruderIndex, model.container_node);
|
Cura.MachineManager.setMaterial(activeExtruderIndex, model.container_node);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -120,13 +70,8 @@ Menu
|
|||||||
exclusiveGroup: group
|
exclusiveGroup: group
|
||||||
onTriggered:
|
onTriggered:
|
||||||
{
|
{
|
||||||
const container_id = model.id;
|
|
||||||
// This workaround is done because of the application menus for materials and variants for multiextrusion printers.
|
|
||||||
// The extruder menu would always act on the correspoding extruder only, instead of acting on the extruder selected in the UI.
|
|
||||||
var activeExtruderIndex = Cura.ExtruderManager.activeExtruderIndex;
|
var activeExtruderIndex = Cura.ExtruderManager.activeExtruderIndex;
|
||||||
Cura.ExtruderManager.setActiveExtruderIndex(extruderIndex);
|
Cura.MachineManager.setMaterial(activeExtruderIndex, model.container_node);
|
||||||
Cura.MachineManager.setActiveMaterial(container_id);
|
|
||||||
Cura.ExtruderManager.setActiveExtruderIndex(activeExtruderIndex);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
onObjectAdded: brandMaterialsMenu.insertItem(index, object)
|
onObjectAdded: brandMaterialsMenu.insertItem(index, object)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user