diff --git a/cura/ObjectsModel.py b/cura/ObjectsModel.py index 8354540783..f9f923b31d 100644 --- a/cura/ObjectsModel.py +++ b/cura/ObjectsModel.py @@ -5,6 +5,7 @@ from PyQt5.QtCore import QTimer from UM.Application import Application from UM.Qt.ListModel import ListModel +from UM.Scene.Camera import Camera from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator from UM.Scene.SceneNode import SceneNode from UM.Scene.Selection import Selection @@ -19,19 +20,24 @@ class ObjectsModel(ListModel): def __init__(self): super().__init__() - Application.getInstance().getController().getScene().sceneChanged.connect(self._updateDelayed) + Application.getInstance().getController().getScene().sceneChanged.connect(self._updateSceneDelayed) Application.getInstance().getPreferences().preferenceChanged.connect(self._updateDelayed) self._update_timer = QTimer() - self._update_timer.setInterval(100) + self._update_timer.setInterval(200) self._update_timer.setSingleShot(True) self._update_timer.timeout.connect(self._update) self._build_plate_number = -1 def setActiveBuildPlate(self, nr): - self._build_plate_number = nr - self._update() + if self._build_plate_number != nr: + self._build_plate_number = nr + self._update() + + def _updateSceneDelayed(self, source): + if not isinstance(source, Camera): + self._update_timer.start() def _updateDelayed(self, *args): self._update_timer.start() diff --git a/cura/Scene/CuraSceneController.py b/cura/Scene/CuraSceneController.py index 4b19271538..9f26ea7cc3 100644 --- a/cura/Scene/CuraSceneController.py +++ b/cura/Scene/CuraSceneController.py @@ -3,6 +3,7 @@ from UM.Logger import Logger from PyQt5.QtCore import Qt, pyqtSlot, QObject from PyQt5.QtWidgets import QApplication +from UM.Scene.Camera import Camera from cura.ObjectsModel import ObjectsModel from cura.Machines.Models.MultiBuildPlateModel import MultiBuildPlateModel @@ -33,7 +34,7 @@ class CuraSceneController(QObject): source = args[0] else: source = None - if not isinstance(source, SceneNode): + if not isinstance(source, SceneNode) or isinstance(source, Camera): return max_build_plate = self._calcMaxBuildPlate() changed = False diff --git a/plugins/CuraEngineBackend/CuraEngineBackend.py b/plugins/CuraEngineBackend/CuraEngineBackend.py index d5531a2773..aac79f6c28 100755 --- a/plugins/CuraEngineBackend/CuraEngineBackend.py +++ b/plugins/CuraEngineBackend/CuraEngineBackend.py @@ -10,6 +10,7 @@ from time import time from typing import Any, cast, Dict, List, Optional, Set, TYPE_CHECKING from UM.Backend.Backend import Backend, BackendState +from UM.Scene.Camera import Camera from UM.Scene.SceneNode import SceneNode from UM.Signal import Signal from UM.Logger import Logger @@ -476,7 +477,7 @@ class CuraEngineBackend(QObject, Backend): # # \param source The scene node that was changed. def _onSceneChanged(self, source: SceneNode) -> None: - if not isinstance(source, SceneNode): + if not isinstance(source, SceneNode) or isinstance(source, Camera): return # This case checks if the source node is a node that contains GCode. In this case the