From b66558f97a913e38c1dcdf6f0ecbe69eaea681d2 Mon Sep 17 00:00:00 2001 From: paukstelis Date: Sun, 19 Aug 2018 22:52:17 -0400 Subject: [PATCH 1/4] Initial commit for passing mesh names to CuraEngine --- cura/ObjectsModel.py | 18 ++++++++++++++++++ plugins/CuraEngineBackend/Cura.proto | 2 ++ plugins/CuraEngineBackend/StartSliceJob.py | 4 ++-- 3 files changed, 22 insertions(+), 2 deletions(-) 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) From fc9c1045c97a857627c93254a5006e8753fa5d4a Mon Sep 17 00:00:00 2001 From: paukstelis Date: Mon, 20 Aug 2018 07:40:28 -0400 Subject: [PATCH 2/4] Basic cleanup --- cura/ObjectsModel.py | 1 - plugins/CuraEngineBackend/Cura.proto | 1 - 2 files changed, 2 deletions(-) diff --git a/cura/ObjectsModel.py b/cura/ObjectsModel.py index 10d8e16f98..1ac0c6247a 100644 --- a/cura/ObjectsModel.py +++ b/cura/ObjectsModel.py @@ -90,7 +90,6 @@ class ObjectsModel(ListModel): 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 5e0f88f075..292330576b 100644 --- a/plugins/CuraEngineBackend/Cura.proto +++ b/plugins/CuraEngineBackend/Cura.proto @@ -29,7 +29,6 @@ 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; } From e36f78dd355fba6c9935a2184051f78c770bf30e Mon Sep 17 00:00:00 2001 From: paukstelis Date: Fri, 24 Aug 2018 07:27:34 -0400 Subject: [PATCH 3/4] Clean up whitespace --- cura/ObjectsModel.py | 12 ++++++------ plugins/CuraEngineBackend/StartSliceJob.py | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/cura/ObjectsModel.py b/cura/ObjectsModel.py index 1ac0c6247a..4f3d42e7fe 100644 --- a/cura/ObjectsModel.py +++ b/cura/ObjectsModel.py @@ -71,12 +71,12 @@ class ObjectsModel(ListModel): #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 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}) diff --git a/plugins/CuraEngineBackend/StartSliceJob.py b/plugins/CuraEngineBackend/StartSliceJob.py index 4e6c53c4fb..2430485e30 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) From 53a0abd230fb4db97ba3e86556d843185d3794bc Mon Sep 17 00:00:00 2001 From: paukstelis Date: Wed, 29 Aug 2018 17:43:22 -0400 Subject: [PATCH 4/4] Convert name check to defaultdict --- cura/ObjectsModel.py | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) 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)