diff --git a/cura/ObjectsModel.py b/cura/ObjectsModel.py index 4f3d42e7fe..8354540783 100644 --- a/cura/ObjectsModel.py +++ b/cura/ObjectsModel.py @@ -9,6 +9,7 @@ from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator from UM.Scene.SceneNode import SceneNode from UM.Scene.Selection import Selection from UM.i18n import i18nCatalog +from collections import defaultdict catalog = i18nCatalog("cura") @@ -40,9 +41,8 @@ class ObjectsModel(ListModel): filter_current_build_plate = Application.getInstance().getPreferences().getValue("view/filter_current_build_plate") active_build_plate_number = self._build_plate_number group_nr = 1 - instance = 1 - namecount = [] - + name_count_dict = defaultdict(int) + for node in DepthFirstIterator(Application.getInstance().getController().getScene().getRoot()): if not isinstance(node, SceneNode): continue @@ -69,16 +69,12 @@ class ObjectsModel(ListModel): is_outside_build_area = False #check if we already have an instance of the object based on name - duplicate = False - for n in namecount: - if name == n["name"]: - name = "{0}({1})".format(name, n["count"]) - node.setName(name) - n["count"] = n["count"]+1 - duplicate = True - - if not duplicate: - namecount.append({"name" : name, "count" : 1}) + name_count_dict[name] += 1 + name_count = name_count_dict[name] + + if name_count > 1: + name = "{0}({1})".format(name, name_count-1) + node.setName(name) nodes.append({ "name": name, @@ -87,7 +83,7 @@ class ObjectsModel(ListModel): "buildPlateNumber": node_build_plate_number, "node": node }) - + nodes = sorted(nodes, key=lambda n: n["name"]) self.setItems(nodes)