Browse Source

Merge branch '4.0'

Ghostkeeper 6 years ago
parent
commit
650204dae7

+ 6 - 5
cura/BuildVolume.py

@@ -1,6 +1,6 @@
 # Copyright (c) 2018 Ultimaker B.V.
 # 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.Settings.ExtruderManager import ExtruderManager
 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.timeout.connect(self._onSettingChangeTimerFinished)
 
-
-
         # Must be after setting _build_volume_message, apparently that is used in getMachineManager.
         # activeQualityChanged is always emitted after setActiveVariant, setActiveMaterial and setActiveQuality.
         # Therefore this works.
@@ -131,7 +129,9 @@ class BuildVolume(SceneNode):
 
     def _onSceneChanged(self, source):
         if self._global_container_stack:
-            self._scene_change_timer.start()
+            # Ignore anything that is not something we can slice in the first place!
+            if source.callDecoration("isSliceable"):
+                self._scene_change_timer.start()
 
     def _onSceneChangeTimerFinished(self):
         root = self._application.getController().getScene().getRoot()
@@ -148,7 +148,7 @@ class BuildVolume(SceneNode):
                 if active_extruder_changed is not None:
                     node.callDecoration("getActiveExtruderChangedSignal").disconnect(self._updateDisallowedAreasAndRebuild)
                 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._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``,
     #   since there may be other changes before it needs to be rebuilt, which
     #   would hit performance.
+
     def _updateDisallowedAreasAndRebuild(self):
         self._updateDisallowedAreas()
         self._updateRaftThickness()

+ 9 - 5
cura/Machines/Models/MultiBuildPlateModel.py

@@ -4,6 +4,7 @@
 from PyQt5.QtCore import QTimer, pyqtSignal, pyqtProperty
 
 from UM.Application import Application
+from UM.Scene.Camera import Camera
 from UM.Scene.Selection import Selection
 from UM.Qt.ListModel import ListModel
 
@@ -34,8 +35,9 @@ class MultiBuildPlateModel(ListModel):
         self._active_build_plate = -1
 
     def setMaxBuildPlate(self, max_build_plate):
-        self._max_build_plate = max_build_plate
-        self.maxBuildPlateChanged.emit()
+        if self._max_build_plate != max_build_plate:
+            self._max_build_plate = max_build_plate
+            self.maxBuildPlateChanged.emit()
 
     ##  Return the highest build plate number
     @pyqtProperty(int, notify = maxBuildPlateChanged)
@@ -43,15 +45,17 @@ class MultiBuildPlateModel(ListModel):
         return self._max_build_plate
 
     def setActiveBuildPlate(self, nr):
-        self._active_build_plate = nr
-        self.activeBuildPlateChanged.emit()
+        if self._active_build_plate != nr:
+            self._active_build_plate = nr
+            self.activeBuildPlateChanged.emit()
 
     @pyqtProperty(int, notify = activeBuildPlateChanged)
     def activeBuildPlate(self):
         return self._active_build_plate
 
     def _updateSelectedObjectBuildPlateNumbersDelayed(self, *args):
-        self._update_timer.start()
+        if not isinstance(args[0], Camera):
+            self._update_timer.start()
 
     def _updateSelectedObjectBuildPlateNumbers(self, *args):
         result = set()

+ 1 - 1
cura/OAuth2/AuthorizationHelpers.py

@@ -92,7 +92,7 @@ class AuthorizationHelpers:
             })
         except requests.exceptions.ConnectionError:
             # Connection was suddenly dropped. Nothing we can do about that.
-            Logger.logException("e", "Something failed while attempting to parse the JWT token")
+            Logger.log("w", "Something failed while attempting to parse the JWT token")
             return None
         if token_request.status_code not in (200, 201):
             Logger.log("w", "Could not retrieve token data from auth server: %s", token_request.text)

+ 10 - 4
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()

+ 2 - 2
cura/PlatformPhysics.py

@@ -17,7 +17,6 @@ from cura.Scene import ZOffsetDecorator
 
 import random  # used for list shuffling
 
-
 class PlatformPhysics:
     def __init__(self, controller, volume):
         super().__init__()
@@ -40,8 +39,9 @@ class PlatformPhysics:
         Application.getInstance().getPreferences().addPreference("physics/automatic_drop_down", True)
 
     def _onSceneChanged(self, source):
-        if not source.getMeshData():
+        if not source.callDecoration("isSliceable"):
             return
+
         self._change_timer.start()
 
     def _onChangeTimerFinished(self):

+ 2 - 1
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

+ 2 - 1
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 source.callDecoration("isSliceable"):
             return
 
         # This case checks if the source node is a node that contains GCode. In this case the

+ 7 - 1
plugins/ModelChecker/ModelChecker.py

@@ -9,6 +9,7 @@ from UM.Application import Application
 from UM.Extension import Extension
 from UM.Logger import Logger
 from UM.Message import Message
+from UM.Scene.Camera import Camera
 from UM.i18n import i18nCatalog
 from UM.PluginRegistry import PluginRegistry
 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.
     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.
     #

+ 1 - 1
plugins/MonitorStage/MonitorMain.qml

@@ -11,7 +11,7 @@ Rectangle
 {
     id: viewportOverlay
 
-    property bool isConnected: Cura.MachineManager.activeMachineHasActiveNetworkConnection || Cura.MachineManager.activeMachineHasActiveCloudConnection
+    property bool isConnected: Cura.MachineManager.activeMachineHasNetworkConnection || Cura.MachineManager.activeMachineHasCloudConnection
     property bool isNetworkConfigurable: ["Ultimaker 3", "Ultimaker 3 Extended", "Ultimaker S5"].indexOf(Cura.MachineManager.activeMachineDefinitionName) > -1
     property bool isNetworkConfigured:
     {

+ 24 - 19
plugins/UM3NetworkPrinting/resources/qml/CameraButton.qml

@@ -7,34 +7,39 @@ import QtQuick.Controls.Styles 1.3
 import UM 1.3 as UM
 import Cura 1.0 as Cura
 
-Rectangle {
+Rectangle
+{
     id: base
 
     property var enabled: true
 
-    property var iconSource: null;
-    color: UM.Theme.getColor("monitor_icon_primary")
-    height: width;
-    radius: Math.round(0.5 * width);
-    width: 24 * screenScaleFactor;
+    property var iconSource: null
+    color: enabled ? UM.Theme.getColor("monitor_icon_primary") : UM.Theme.getColor("monitor_icon_disabled")
+    height: width
+    radius: Math.round(0.5 * width)
+    width: 24 * screenScaleFactor
 
-    UM.RecolorImage {
-        id: icon;
-        anchors {
-            horizontalCenter: parent.horizontalCenter;
-            verticalCenter: parent.verticalCenter;
+    UM.RecolorImage
+    {
+        id: icon
+        anchors
+        {
+            horizontalCenter: parent.horizontalCenter
+            verticalCenter: parent.verticalCenter
         }
-        color: UM.Theme.getColor("monitor_icon_accent");
-        height: width;
-        source: iconSource;
-        width: Math.round(parent.width / 2);
+        color: UM.Theme.getColor("monitor_icon_accent")
+        height: width
+        source: iconSource
+        width: Math.round(parent.width / 2)
     }
 
-    MouseArea {
-        id: clickArea;
-        anchors.fill: parent;
+    MouseArea
+    {
+        id: clickArea
+        anchors.fill: parent
         hoverEnabled: base.enabled
-        onClicked: {
+        onClicked:
+        {
             if (base.enabled)
             {
                 if (OutputDevice.activeCameraUrl != "")

Some files were not shown because too many files changed in this diff