diff --git a/cura/ConvexHullJob.py b/cura/ConvexHullJob.py index 63eec87fb3..2388d1c9aa 100644 --- a/cura/ConvexHullJob.py +++ b/cura/ConvexHullJob.py @@ -31,6 +31,8 @@ class ConvexHullJob(Job): self._node.callDecoration("setConvexHullJob", None) return + Job.yieldThread() + else: if not self._node.getMeshData(): return diff --git a/plugins/3MFReader/ThreeMFReader.py b/plugins/3MFReader/ThreeMFReader.py index 9ca8875543..2b20954988 100644 --- a/plugins/3MFReader/ThreeMFReader.py +++ b/plugins/3MFReader/ThreeMFReader.py @@ -10,6 +10,7 @@ from UM.Scene.SceneNode import SceneNode from UM.Scene.GroupDecorator import GroupDecorator from UM.Math.Quaternion import Quaternion +from UM.Job import Job import os import struct @@ -53,6 +54,7 @@ class ThreeMFReader(MeshReader): #for vertex in object.mesh.vertices.vertex: for vertex in object.findall(".//3mf:vertex", self._namespaces): vertex_list.append([vertex.get("x"), vertex.get("y"), vertex.get("z")]) + Job.yieldThread() triangles = object.findall(".//3mf:triangle", self._namespaces) @@ -64,6 +66,8 @@ class ThreeMFReader(MeshReader): v2 = int(triangle.get("v2")) v3 = int(triangle.get("v3")) mesh.addFace(vertex_list[v1][0],vertex_list[v1][1],vertex_list[v1][2],vertex_list[v2][0],vertex_list[v2][1],vertex_list[v2][2],vertex_list[v3][0],vertex_list[v3][1],vertex_list[v3][2]) + Job.yieldThread() + #TODO: We currently do not check for normals and simply recalculate them. mesh.calculateNormals() node.setMeshData(mesh) @@ -116,6 +120,8 @@ class ThreeMFReader(MeshReader): node.rotate(rotation) result.addChild(node) + Job.yieldThread() + #If there is more then one object, group them. try: if len(objects) > 1: diff --git a/plugins/CuraEngineBackend/ProcessSlicedObjectListJob.py b/plugins/CuraEngineBackend/ProcessSlicedObjectListJob.py index 0a9322b7cb..67a24c368d 100644 --- a/plugins/CuraEngineBackend/ProcessSlicedObjectListJob.py +++ b/plugins/CuraEngineBackend/ProcessSlicedObjectListJob.py @@ -38,10 +38,10 @@ class ProcessSlicedObjectListJob(Job): for node in DepthFirstIterator(self._scene.getRoot()): if type(node) is SceneNode and node.getMeshData(): if node.callDecoration("getLayerData"): - #if hasattr(node.getMeshData(), "layerData"): self._scene.getRoot().removeChild(node) else: objectIdMap[id(node)] = node + Job.yieldThread() settings = Application.getInstance().getMachineManager().getActiveProfile() layerHeight = settings.getSettingValue("layer_height") @@ -91,6 +91,8 @@ class ProcessSlicedObjectListJob(Job): layer_data.addPolygon(layer.id, polygon.type, points, polygon.line_width) + Job.yieldThread() + current_layer += 1 progress = (current_layer / layer_count) * 100 # TODO: Rebuild the layer data mesh once the layer has been processed.