|
@@ -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
|
|
|
})
|
|
|
|