CURA-4557 add checking on material change as well

This commit is contained in:
Jack Ha 2018-03-19 16:50:35 +01:00
parent ef7139d3b2
commit e958516913

View file

@ -8,6 +8,7 @@ from UM.Application import Application
from UM.Extension import Extension from UM.Extension import Extension
from UM.Message import Message from UM.Message import Message
from UM.i18n import i18nCatalog from UM.i18n import i18nCatalog
from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator
catalog = i18nCatalog("cura") catalog = i18nCatalog("cura")
@ -24,7 +25,7 @@ class ModelChecker(Extension):
super().__init__() super().__init__()
self._update_timer = QTimer() self._update_timer = QTimer()
self._update_timer.setInterval(5000) self._update_timer.setInterval(2000)
self._update_timer.setSingleShot(True) self._update_timer.setSingleShot(True)
self._update_timer.timeout.connect(self.checkObjects) self._update_timer.timeout.connect(self.checkObjects)
@ -32,8 +33,11 @@ class ModelChecker(Extension):
self._warning_model_names = set() # Collect the names of models so we show the next warning with timeout self._warning_model_names = set() # Collect the names of models so we show the next warning with timeout
## Reacting to an event. ## Application.getInstance().initializationFinished.connect(self.bindSignals)
def bindSignals(self):
Application.getInstance().getController().getScene().sceneChanged.connect(self._onSceneChanged) Application.getInstance().getController().getScene().sceneChanged.connect(self._onSceneChanged)
Application.getInstance().getMachineManager().rootMaterialChanged.connect(self._checkAllSliceableNodes)
def checkObjects(self): def checkObjects(self):
warning_nodes = [] warning_nodes = []
@ -61,6 +65,7 @@ class ModelChecker(Extension):
bbox = node.getBoundingBox() bbox = node.getBoundingBox()
if bbox.width >= WARNING_SIZE_XY or bbox.depth >= WARNING_SIZE_XY or bbox.height >= WARNING_SIZE_Z: if bbox.width >= WARNING_SIZE_XY or bbox.depth >= WARNING_SIZE_XY or bbox.height >= WARNING_SIZE_Z:
warning_nodes.append(node) warning_nodes.append(node)
self._nodes_to_check = set()
# Display warning message # Display warning message
if warning_nodes: if warning_nodes:
@ -84,3 +89,12 @@ class ModelChecker(Extension):
if isinstance(source, CuraSceneNode) and source.callDecoration("isSliceable"): if isinstance(source, CuraSceneNode) and source.callDecoration("isSliceable"):
self._nodes_to_check.add(source) self._nodes_to_check.add(source)
self._update_timer.start() self._update_timer.start()
def _checkAllSliceableNodes(self, *args):
# Add all scene nodes
scene = Application.getInstance().getController().getScene()
for node in DepthFirstIterator(scene.getRoot()):
if node.callDecoration("isSliceable"):
self._nodes_to_check.add(node)
if self._nodes_to_check:
self._update_timer.start()