mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-08-11 19:09:00 +08:00
Add thread yields to several long running and heavy processing jobs
Contributes to CURA-358
This commit is contained in:
parent
653b46d825
commit
0b2f0b2604
@ -31,6 +31,8 @@ class ConvexHullJob(Job):
|
|||||||
self._node.callDecoration("setConvexHullJob", None)
|
self._node.callDecoration("setConvexHullJob", None)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
Job.yieldThread()
|
||||||
|
|
||||||
else:
|
else:
|
||||||
if not self._node.getMeshData():
|
if not self._node.getMeshData():
|
||||||
return
|
return
|
||||||
|
@ -10,6 +10,7 @@ from UM.Scene.SceneNode import SceneNode
|
|||||||
from UM.Scene.GroupDecorator import GroupDecorator
|
from UM.Scene.GroupDecorator import GroupDecorator
|
||||||
from UM.Math.Quaternion import Quaternion
|
from UM.Math.Quaternion import Quaternion
|
||||||
|
|
||||||
|
from UM.Job import Job
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import struct
|
import struct
|
||||||
@ -53,6 +54,7 @@ class ThreeMFReader(MeshReader):
|
|||||||
#for vertex in object.mesh.vertices.vertex:
|
#for vertex in object.mesh.vertices.vertex:
|
||||||
for vertex in object.findall(".//3mf:vertex", self._namespaces):
|
for vertex in object.findall(".//3mf:vertex", self._namespaces):
|
||||||
vertex_list.append([vertex.get("x"), vertex.get("y"), vertex.get("z")])
|
vertex_list.append([vertex.get("x"), vertex.get("y"), vertex.get("z")])
|
||||||
|
Job.yieldThread()
|
||||||
|
|
||||||
triangles = object.findall(".//3mf:triangle", self._namespaces)
|
triangles = object.findall(".//3mf:triangle", self._namespaces)
|
||||||
|
|
||||||
@ -64,6 +66,8 @@ class ThreeMFReader(MeshReader):
|
|||||||
v2 = int(triangle.get("v2"))
|
v2 = int(triangle.get("v2"))
|
||||||
v3 = int(triangle.get("v3"))
|
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])
|
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.
|
#TODO: We currently do not check for normals and simply recalculate them.
|
||||||
mesh.calculateNormals()
|
mesh.calculateNormals()
|
||||||
node.setMeshData(mesh)
|
node.setMeshData(mesh)
|
||||||
@ -116,6 +120,8 @@ class ThreeMFReader(MeshReader):
|
|||||||
node.rotate(rotation)
|
node.rotate(rotation)
|
||||||
result.addChild(node)
|
result.addChild(node)
|
||||||
|
|
||||||
|
Job.yieldThread()
|
||||||
|
|
||||||
#If there is more then one object, group them.
|
#If there is more then one object, group them.
|
||||||
try:
|
try:
|
||||||
if len(objects) > 1:
|
if len(objects) > 1:
|
||||||
|
@ -38,10 +38,10 @@ class ProcessSlicedObjectListJob(Job):
|
|||||||
for node in DepthFirstIterator(self._scene.getRoot()):
|
for node in DepthFirstIterator(self._scene.getRoot()):
|
||||||
if type(node) is SceneNode and node.getMeshData():
|
if type(node) is SceneNode and node.getMeshData():
|
||||||
if node.callDecoration("getLayerData"):
|
if node.callDecoration("getLayerData"):
|
||||||
#if hasattr(node.getMeshData(), "layerData"):
|
|
||||||
self._scene.getRoot().removeChild(node)
|
self._scene.getRoot().removeChild(node)
|
||||||
else:
|
else:
|
||||||
objectIdMap[id(node)] = node
|
objectIdMap[id(node)] = node
|
||||||
|
Job.yieldThread()
|
||||||
|
|
||||||
settings = Application.getInstance().getMachineManager().getActiveProfile()
|
settings = Application.getInstance().getMachineManager().getActiveProfile()
|
||||||
layerHeight = settings.getSettingValue("layer_height")
|
layerHeight = settings.getSettingValue("layer_height")
|
||||||
@ -91,6 +91,8 @@ class ProcessSlicedObjectListJob(Job):
|
|||||||
|
|
||||||
layer_data.addPolygon(layer.id, polygon.type, points, polygon.line_width)
|
layer_data.addPolygon(layer.id, polygon.type, points, polygon.line_width)
|
||||||
|
|
||||||
|
Job.yieldThread()
|
||||||
|
|
||||||
current_layer += 1
|
current_layer += 1
|
||||||
progress = (current_layer / layer_count) * 100
|
progress = (current_layer / layer_count) * 100
|
||||||
# TODO: Rebuild the layer data mesh once the layer has been processed.
|
# TODO: Rebuild the layer data mesh once the layer has been processed.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user