Merge branch 'feature_objectlist_improvements' of https://github.com/fieldOfView/Cura

This commit is contained in:
Jaime van Kessel 2020-04-28 15:40:08 +02:00
commit 9e68bcb7a0
No known key found for this signature in database
GPG key ID: 3710727397403C91
5 changed files with 295 additions and 35 deletions

View file

@ -1,4 +1,4 @@
# Copyright (c) 2019 Ultimaker B.V.
# Copyright (c) 2020 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
from UM.Logger import Logger
import re
@ -38,6 +38,9 @@ class ObjectsModel(ListModel):
OutsideAreaRole = Qt.UserRole + 3
BuilplateNumberRole = Qt.UserRole + 4
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)
@ -46,6 +49,9 @@ 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")
Application.getInstance().getController().getScene().sceneChanged.connect(self._updateSceneDelayed)
@ -172,11 +178,47 @@ class ObjectsModel(ListModel):
node_build_plate_number = node.callDecoration("getBuildPlateNumber")
node_mesh_type = ""
per_object_settings_count = 0
per_object_stack = node.callDecoration("getStack")
if per_object_stack:
per_object_settings_count = per_object_stack.getTop().getNumInstances()
for mesh_type in ["anti_overhang_mesh", "infill_mesh", "cutting_mesh", "support_mesh"]:
if per_object_stack.getProperty(mesh_type, "value"):
node_mesh_type = mesh_type
per_object_settings_count -= 1 # do not count this mesh type setting
break
if per_object_settings_count > 0:
if node_mesh_type == "support_mesh":
# support meshes only allow support settings
per_object_settings_count = 0
for key in per_object_stack.getTop().getAllKeys():
if per_object_stack.getTop().getInstance(key).definition.isAncestor("support"):
per_object_settings_count += 1
elif node_mesh_type == "anti_overhang_mesh":
# anti overhang meshes ignore per model settings
per_object_settings_count = 0
extruder_position = node.callDecoration("getActiveExtruderPosition")
if extruder_position is None:
extruder_number = -1
else:
extruder_number = int(extruder_position)
if node_mesh_type == "anti_overhang_mesh" or node.callDecoration("isGroup"):
# for anti overhang meshes and groups 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
})