diff --git a/cura/ObjectsModel.py b/cura/ObjectsModel.py index f3c703d424..10d8e16f98 100644 --- a/cura/ObjectsModel.py +++ b/cura/ObjectsModel.py @@ -40,6 +40,9 @@ 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 = [] + for node in DepthFirstIterator(Application.getInstance().getController().getScene().getRoot()): if not isinstance(node, SceneNode): continue @@ -55,6 +58,7 @@ class ObjectsModel(ListModel): if not node.callDecoration("isGroup"): name = node.getName() + else: name = catalog.i18nc("@label", "Group #{group_nr}").format(group_nr = str(group_nr)) group_nr += 1 @@ -63,6 +67,18 @@ class ObjectsModel(ListModel): is_outside_build_area = node.isOutsideBuildArea() else: 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}) nodes.append({ "name": name, @@ -71,8 +87,10 @@ class ObjectsModel(ListModel): "buildPlateNumber": node_build_plate_number, "node": node }) + nodes = sorted(nodes, key=lambda n: n["name"]) self.setItems(nodes) + print(nodes) self.itemsChanged.emit() diff --git a/plugins/CuraEngineBackend/Cura.proto b/plugins/CuraEngineBackend/Cura.proto index 69612210ec..5e0f88f075 100644 --- a/plugins/CuraEngineBackend/Cura.proto +++ b/plugins/CuraEngineBackend/Cura.proto @@ -29,6 +29,8 @@ message Object bytes normals = 3; //An array of 3 floats. bytes indices = 4; //An array of ints. repeated Setting settings = 5; // Setting override per object, overruling the global settings. + //PJP + string name = 6; } message Progress diff --git a/plugins/CuraEngineBackend/StartSliceJob.py b/plugins/CuraEngineBackend/StartSliceJob.py index 0ebcafdbb2..4e6c53c4fb 100644 --- a/plugins/CuraEngineBackend/StartSliceJob.py +++ b/plugins/CuraEngineBackend/StartSliceJob.py @@ -256,7 +256,7 @@ class StartSliceJob(Job): mesh_data = object.getMeshData() rot_scale = object.getWorldTransformation().getTransposed().getData()[0:3, 0:3] translate = object.getWorldTransformation().getData()[:3, 3] - + # This effectively performs a limited form of MeshData.getTransformed that ignores normals. verts = mesh_data.getVertices() verts = verts.dot(rot_scale) @@ -268,7 +268,7 @@ class StartSliceJob(Job): obj = group_message.addRepeatedMessage("objects") obj.id = id(object) - + obj.name = object.getName() indices = mesh_data.getIndices() if indices is not None: flat_verts = numpy.take(verts, indices.flatten(), axis=0)