diff --git a/cura/UI/ObjectsModel.py b/cura/UI/ObjectsModel.py index 87efcf2e27..dd5d556176 100644 --- a/cura/UI/ObjectsModel.py +++ b/cura/UI/ObjectsModel.py @@ -40,6 +40,7 @@ class ObjectsModel(ListModel): NodeRole = Qt.UserRole + 5 PerObjectSettingsCountRole = Qt.UserRole + 6 MeshTypeRole = Qt.UserRole + 7 + ExtruderNumberRole = Qt.UserRole + 8 def __init__(self, parent = None) -> None: super().__init__(parent) @@ -48,6 +49,7 @@ class ObjectsModel(ListModel): self.addRoleName(self.SelectedRole, "selected") self.addRoleName(self.OutsideAreaRole, "outside_build_area") self.addRoleName(self.BuilplateNumberRole, "buildplate_number") + self.addRoleName(self.ExtruderNumberRole, "extruder_number") self.addRoleName(self.PerObjectSettingsCountRole, "per_object_settings_count") self.addRoleName(self.MeshTypeRole, "mesh_type") self.addRoleName(self.NodeRole, "node") @@ -189,11 +191,17 @@ class ObjectsModel(ListModel): per_object_settings_count -= 1 # do not count this mesh type setting break + extruder_number = int(node.callDecoration("getActiveExtruderPosition")) + if node_mesh_type == "anti_overhang_mesh": + # for anti overhang meshes, the extruder nr is irrelevant + extruder_number = -1 + nodes.append({ "name": node.getName(), "selected": Selection.isSelected(node), "outside_build_area": is_outside_build_area, "buildplate_number": node_build_plate_number, + "extruder_number": extruder_number, "per_object_settings_count": per_object_settings_count, "mesh_type": node_mesh_type, "node": node diff --git a/resources/qml/ObjectItemButton.qml b/resources/qml/ObjectItemButton.qml index 925c2128e7..aef862ac7f 100644 --- a/resources/qml/ObjectItemButton.qml +++ b/resources/qml/ObjectItemButton.qml @@ -23,13 +23,26 @@ Button width: objectItemButton.width - objectItemButton.leftPadding height: UM.Theme.getSize("action_button").height + UM.RecolorImage + { + id: swatch + anchors.verticalCenter: parent.verticalCenter + anchors.left: parent.left + width: height + height: parent.height - UM.Theme.getSize("narrow_margin").height + source: UM.Theme.getIcon("extruder_button") + color: extruderColor + visible: showExtruderSwatches && extruderColor != "" + } + Label { id: buttonText anchors { - left: parent.left - right: perObjectSettingsInfo.left + left: showExtruderSwatches ? swatch.right : parent.left + leftMargin: showExtruderSwatches ? UM.Theme.getSize("narrow_margin").width : 0 + right: perObjectSettingsInfo.visible ? perObjectSettingsInfo.left : parent.right verticalCenter: parent.verticalCenter } text: objectItemButton.text diff --git a/resources/qml/ObjectSelector.qml b/resources/qml/ObjectSelector.qml index 0b8d168a79..b004095f74 100644 --- a/resources/qml/ObjectSelector.qml +++ b/resources/qml/ObjectSelector.qml @@ -87,6 +87,17 @@ Item anchors.bottom: parent.bottom + property var extrudersModel: CuraApplication.getExtrudersModel() + UM.SettingPropertyProvider + { + id: machineExtruderCount + + containerStack: Cura.MachineManager.activeMachine + key: "machine_extruder_count" + watchedProperties: [ "value" ] + storeIndex: 0 + } + ListView { id: listView @@ -123,6 +134,16 @@ Item property bool outsideBuildArea: model.outside_build_area property int perObjectSettingsCount: model.per_object_settings_count property string meshType: model.mesh_type + property int extruderNumber: model.extruder_number + property string extruderColor: + { + if (model.extruder_number == -1) + { + return ""; + } + return contents.extrudersModel.getItem(model.extruder_number).color; + } + property bool showExtruderSwatches: machineExtruderCount.properties.value > 1 } } }