Recalculate the start / end elements when the layer is changed instead of on render

About with larger models, about 30-40% of the time of the render was spent on this.
This commit is contained in:
Jaime van Kessel 2020-01-02 13:26:39 +01:00
parent 9de2b39d38
commit 0d7421140f
No known key found for this signature in database
GPG key ID: 3710727397403C91
2 changed files with 37 additions and 25 deletions

View file

@ -71,6 +71,8 @@ class SimulationView(CuraView):
self._max_paths = 0
self._current_path_num = 0
self._minimum_path_num = 0
self.start_elements_index = 0
self.end_elements_index = 0
self.currentLayerNumChanged.connect(self._onCurrentLayerNumChanged)
self._busy = False
@ -243,6 +245,7 @@ class SimulationView(CuraView):
self._minimum_layer_num = self._current_layer_num
self._startUpdateTopLayers()
self.recalculateStartEndElements()
self.currentLayerNumChanged.emit()
@ -257,7 +260,7 @@ class SimulationView(CuraView):
self._current_layer_num = self._minimum_layer_num
self._startUpdateTopLayers()
self.recalculateStartEndElements()
self.currentLayerNumChanged.emit()
def setPath(self, value: int) -> None:
@ -359,6 +362,24 @@ class SimulationView(CuraView):
return 0.0 # If it's still max-float, there are no measurements. Use 0 then.
return self._min_thickness
def recalculateStartEndElements(self):
self.start_elements_index = 0
self.end_elements_index = 0
scene = self.getController().getScene()
for node in DepthFirstIterator(scene.getRoot()): # type: ignore
layer_data = node.callDecoration("getLayerData")
if not layer_data:
continue
# Found a the layer data!
element_counts = layer_data.getElementCounts()
for layer in sorted(element_counts.keys()):
if layer == self._current_layer_num:
break
if self._minimum_layer_num > layer:
self.start_elements_index += element_counts[layer]
self.end_elements_index += element_counts[layer]
def getMaxThickness(self) -> float:
return self._max_thickness