mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-06-04 11:14:21 +08:00
Ignore sceneChange signals if the camera triggered them in some places
These places weren't interested in all changes. They can probably be more strict, but the camera is a really safe bet (and already greatly decreases the number of updates, especially when just moving the camera)
This commit is contained in:
parent
6143906fa4
commit
22b70e1a34
@ -1,6 +1,6 @@
|
|||||||
# Copyright (c) 2018 Ultimaker B.V.
|
# Copyright (c) 2018 Ultimaker B.V.
|
||||||
# Cura is released under the terms of the LGPLv3 or higher.
|
# Cura is released under the terms of the LGPLv3 or higher.
|
||||||
|
from UM.Scene.Camera import Camera
|
||||||
from cura.Scene.CuraSceneNode import CuraSceneNode
|
from cura.Scene.CuraSceneNode import CuraSceneNode
|
||||||
from cura.Settings.ExtruderManager import ExtruderManager
|
from cura.Settings.ExtruderManager import ExtruderManager
|
||||||
from UM.Application import Application #To modify the maximum zoom level.
|
from UM.Application import Application #To modify the maximum zoom level.
|
||||||
@ -112,8 +112,6 @@ class BuildVolume(SceneNode):
|
|||||||
self._setting_change_timer.setSingleShot(True)
|
self._setting_change_timer.setSingleShot(True)
|
||||||
self._setting_change_timer.timeout.connect(self._onSettingChangeTimerFinished)
|
self._setting_change_timer.timeout.connect(self._onSettingChangeTimerFinished)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Must be after setting _build_volume_message, apparently that is used in getMachineManager.
|
# Must be after setting _build_volume_message, apparently that is used in getMachineManager.
|
||||||
# activeQualityChanged is always emitted after setActiveVariant, setActiveMaterial and setActiveQuality.
|
# activeQualityChanged is always emitted after setActiveVariant, setActiveMaterial and setActiveQuality.
|
||||||
# Therefore this works.
|
# Therefore this works.
|
||||||
@ -131,7 +129,9 @@ class BuildVolume(SceneNode):
|
|||||||
|
|
||||||
def _onSceneChanged(self, source):
|
def _onSceneChanged(self, source):
|
||||||
if self._global_container_stack:
|
if self._global_container_stack:
|
||||||
self._scene_change_timer.start()
|
# Just ignore the camera scene updates. The build volume won't change because of it!
|
||||||
|
if not isinstance(source, Camera):
|
||||||
|
self._scene_change_timer.start()
|
||||||
|
|
||||||
def _onSceneChangeTimerFinished(self):
|
def _onSceneChangeTimerFinished(self):
|
||||||
root = self._application.getController().getScene().getRoot()
|
root = self._application.getController().getScene().getRoot()
|
||||||
@ -148,7 +148,7 @@ class BuildVolume(SceneNode):
|
|||||||
if active_extruder_changed is not None:
|
if active_extruder_changed is not None:
|
||||||
node.callDecoration("getActiveExtruderChangedSignal").disconnect(self._updateDisallowedAreasAndRebuild)
|
node.callDecoration("getActiveExtruderChangedSignal").disconnect(self._updateDisallowedAreasAndRebuild)
|
||||||
node.decoratorsChanged.disconnect(self._updateNodeListeners)
|
node.decoratorsChanged.disconnect(self._updateNodeListeners)
|
||||||
self._updateDisallowedAreasAndRebuild() # make sure we didn't miss anything before we updated the node listeners
|
self.rebuild()
|
||||||
|
|
||||||
self._scene_objects = new_scene_objects
|
self._scene_objects = new_scene_objects
|
||||||
self._onSettingPropertyChanged("print_sequence", "value") # Create fake event, so right settings are triggered.
|
self._onSettingPropertyChanged("print_sequence", "value") # Create fake event, so right settings are triggered.
|
||||||
@ -667,6 +667,7 @@ class BuildVolume(SceneNode):
|
|||||||
# ``_updateDisallowedAreas`` method itself shouldn't call ``rebuild``,
|
# ``_updateDisallowedAreas`` method itself shouldn't call ``rebuild``,
|
||||||
# since there may be other changes before it needs to be rebuilt, which
|
# since there may be other changes before it needs to be rebuilt, which
|
||||||
# would hit performance.
|
# would hit performance.
|
||||||
|
|
||||||
def _updateDisallowedAreasAndRebuild(self):
|
def _updateDisallowedAreasAndRebuild(self):
|
||||||
self._updateDisallowedAreas()
|
self._updateDisallowedAreas()
|
||||||
self._updateRaftThickness()
|
self._updateRaftThickness()
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
from PyQt5.QtCore import QTimer, pyqtSignal, pyqtProperty
|
from PyQt5.QtCore import QTimer, pyqtSignal, pyqtProperty
|
||||||
|
|
||||||
from UM.Application import Application
|
from UM.Application import Application
|
||||||
|
from UM.Scene.Camera import Camera
|
||||||
from UM.Scene.Selection import Selection
|
from UM.Scene.Selection import Selection
|
||||||
from UM.Qt.ListModel import ListModel
|
from UM.Qt.ListModel import ListModel
|
||||||
|
|
||||||
@ -51,7 +52,8 @@ class MultiBuildPlateModel(ListModel):
|
|||||||
return self._active_build_plate
|
return self._active_build_plate
|
||||||
|
|
||||||
def _updateSelectedObjectBuildPlateNumbersDelayed(self, *args):
|
def _updateSelectedObjectBuildPlateNumbersDelayed(self, *args):
|
||||||
self._update_timer.start()
|
if not isinstance(args[0], Camera):
|
||||||
|
self._update_timer.start()
|
||||||
|
|
||||||
def _updateSelectedObjectBuildPlateNumbers(self, *args):
|
def _updateSelectedObjectBuildPlateNumbers(self, *args):
|
||||||
result = set()
|
result = set()
|
||||||
|
@ -9,6 +9,7 @@ from UM.Application import Application
|
|||||||
from UM.Extension import Extension
|
from UM.Extension import Extension
|
||||||
from UM.Logger import Logger
|
from UM.Logger import Logger
|
||||||
from UM.Message import Message
|
from UM.Message import Message
|
||||||
|
from UM.Scene.Camera import Camera
|
||||||
from UM.i18n import i18nCatalog
|
from UM.i18n import i18nCatalog
|
||||||
from UM.PluginRegistry import PluginRegistry
|
from UM.PluginRegistry import PluginRegistry
|
||||||
from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator
|
from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator
|
||||||
@ -35,7 +36,12 @@ class ModelChecker(QObject, Extension):
|
|||||||
|
|
||||||
## Pass-through to allow UM.Signal to connect with a pyqtSignal.
|
## Pass-through to allow UM.Signal to connect with a pyqtSignal.
|
||||||
def _onChanged(self, *args, **kwargs):
|
def _onChanged(self, *args, **kwargs):
|
||||||
self.onChanged.emit()
|
# Ignore camera updates.
|
||||||
|
if len(args) == 0:
|
||||||
|
self.onChanged.emit()
|
||||||
|
return
|
||||||
|
if not isinstance(args[0], Camera):
|
||||||
|
self.onChanged.emit()
|
||||||
|
|
||||||
## Called when plug-ins are initialized.
|
## Called when plug-ins are initialized.
|
||||||
#
|
#
|
||||||
|
Loading…
x
Reference in New Issue
Block a user