Diego Prado Gesto 6 лет назад
Родитель
Сommit
762a1b1bfd

+ 3 - 2
cura/Arranging/Arrange.py

@@ -97,8 +97,9 @@ class Arrange:
 
         # Ensure that the object is above the build platform
         node.removeDecorator(ZOffsetDecorator.ZOffsetDecorator)
-        if node.getBoundingBox():
-            center_y = node.getWorldPosition().y - node.getBoundingBox().bottom
+        bbox = node.getBoundingBox()
+        if bbox:
+            center_y = node.getWorldPosition().y - bbox.bottom
         else:
             center_y = 0
 

+ 4 - 3
cura/CuraActions.py

@@ -49,9 +49,10 @@ class CuraActions(QObject):
     def homeCamera(self) -> None:
         scene = cura.CuraApplication.CuraApplication.getInstance().getController().getScene()
         camera = scene.getActiveCamera()
-        camera.setPosition(Vector(-80, 250, 700))
-        camera.setPerspective(True)
-        camera.lookAt(Vector(0, 0, 0))
+        if camera:
+            camera.setPosition(Vector(-80, 250, 700))
+            camera.setPerspective(True)
+            camera.lookAt(Vector(0, 0, 0))
 
     ##  Center all objects in the selection
     @pyqtSlot()

+ 6 - 3
cura/CuraApplication.py

@@ -84,6 +84,7 @@ from cura.Settings.SettingInheritanceManager import SettingInheritanceManager
 from cura.Settings.SimpleModeSettingsManager import SimpleModeSettingsManager
 
 from cura.Machines.VariantManager import VariantManager
+from plugins.SliceInfoPlugin.SliceInfo import SliceInfo
 
 from .SingleInstance import SingleInstance
 from .AutoSave import AutoSave
@@ -1722,11 +1723,13 @@ class CuraApplication(QtApplication):
         if not Selection.hasSelection():
             node = self.getController().getScene().findObject(cast(SelectionPass, self.getRenderer().getRenderPass("selection")).getIdAtPosition(x, y))
             if node:
-                while(node.getParent() and node.getParent().callDecoration("isGroup")):
-                    node = node.getParent()
+                parent = node.getParent()
+                while(parent and parent.callDecoration("isGroup")):
+                    node = parent
+                    parent = node.getParent()
 
                 Selection.add(node)
 
     @pyqtSlot()
     def showMoreInformationDialogForAnonymousDataCollection(self):
-        self._plugin_registry.getPluginObject("SliceInfoPlugin").showMoreInfoDialog()
+        cast(SliceInfo, self._plugin_registry.getPluginObject("SliceInfoPlugin")).showMoreInfoDialog()

+ 4 - 3
cura/Machines/MaterialManager.py

@@ -4,7 +4,7 @@
 from collections import defaultdict, OrderedDict
 import copy
 import uuid
-from typing import Dict
+from typing import Dict, cast
 from typing import Optional, TYPE_CHECKING
 
 from PyQt5.Qt import QTimer, QObject, pyqtSignal, pyqtSlot
@@ -416,13 +416,14 @@ class MaterialManager(QObject):
 
     ##  Get default material for given global stack, extruder position and extruder variant name
     #   you can provide the extruder_definition and then the position is ignored (useful when building up global stack in CuraStackBuilder)
-    def getDefaultMaterial(self, global_stack: "GlobalStack", position: str, extruder_variant_name: Optional[str], extruder_definition: Optional["ExtruderStack"] = None) -> Optional["MaterialNode"]:
+    def getDefaultMaterial(self, global_stack: "GlobalStack", position: str, extruder_variant_name: Optional[str], extruder_definition: Optional["DefinitionContainer"] = None) -> Optional["MaterialNode"]:
         node = None
         machine_definition = global_stack.definition
         if extruder_definition is None:
             extruder_definition = global_stack.extruders[position].definition
         if parseBool(global_stack.getMetaDataEntry("has_materials", False)):
-            material_diameter = extruder_definition.getProperty("material_diameter", "value")
+            # At this point the extruder_definition is not None
+            material_diameter = cast(DefinitionContainer, extruder_definition).getProperty("material_diameter", "value")
             if isinstance(material_diameter, SettingFunction):
                 material_diameter = material_diameter(global_stack)
             approximate_material_diameter = str(round(material_diameter))

+ 1 - 1
cura/Machines/Models/QualityProfilesDropDownMenuModel.py

@@ -104,6 +104,6 @@ class QualityProfilesDropDownMenuModel(ListModel):
         else:
             # Look for layer_height in the GlobalStack from material -> definition
             container = global_stack.definition
-            if container.hasProperty("layer_height", "value"):
+            if container and container.hasProperty("layer_height", "value"):
                 layer_height = container.getProperty("layer_height", "value")
         return float(layer_height)

+ 1 - 1
cura/PrinterOutputDevice.py

@@ -61,7 +61,7 @@ class PrinterOutputDevice(QObject, OutputDevice):
     uniqueConfigurationsChanged = pyqtSignal()
 
     def __init__(self, device_id: str, parent: QObject = None) -> None:
-        super().__init__(device_id = device_id, parent = parent)
+        super().__init__(device_id = device_id, parent = parent) # type: ignore  # MyPy complains with the multiple inheritance
 
         self._printers = []  # type: List[PrinterOutputModel]
         self._unique_configurations = []   # type: List[ConfigurationModel]

+ 2 - 1
cura/Settings/ContainerManager.py

@@ -4,6 +4,7 @@
 import os
 import urllib.parse
 import uuid
+from typing import Any
 from typing import Dict, Union
 
 from PyQt5.QtCore import QObject, QUrl, QVariant
@@ -43,7 +44,7 @@ class ContainerManager(QObject):
         self._machine_manager = self._application.getMachineManager()
         self._material_manager = self._application.getMaterialManager()
         self._quality_manager = self._application.getQualityManager()
-        self._container_name_filters = {}
+        self._container_name_filters = {}   # type: Dict[str, Dict[str, Any]]
 
     @pyqtSlot(str, str, result=str)
     def getContainerMetaDataEntry(self, container_id, entry_name):

+ 8 - 3
cura/Settings/CuraContainerStack.py

@@ -244,8 +244,9 @@ class CuraContainerStack(ContainerStack):
     #
     #   \throws InvalidContainerStackError Raised when no definition can be found for the stack.
     @override(ContainerStack)
-    def deserialize(self, contents: str, file_name: Optional[str] = None) -> None:
-        super().deserialize(contents, file_name)
+    def deserialize(self, serialized: str, file_name: Optional[str] = None) -> str:
+        # update the serialized data first
+        serialized = super().deserialize(serialized, file_name)
 
         new_containers = self._containers.copy()
         while len(new_containers) < len(_ContainerIndexes.IndexTypeMap):
@@ -253,10 +254,11 @@ class CuraContainerStack(ContainerStack):
 
         # Validate and ensure the list of containers matches with what we expect
         for index, type_name in _ContainerIndexes.IndexTypeMap.items():
+            container = None
             try:
                 container = new_containers[index]
             except IndexError:
-                container = None
+                pass
 
             if type_name == "definition":
                 if not container or not isinstance(container, DefinitionContainer):
@@ -283,6 +285,9 @@ class CuraContainerStack(ContainerStack):
             from cura.Settings.CuraStackBuilder import CuraStackBuilder
             CuraStackBuilder.createDefinitionChangesContainer(self, self.getId() + "_settings")
 
+        ## TODO; Deserialize the containers.
+        return serialized
+
     ## protected:
 
     # Helper to make sure we emit a PyQt signal on container changes.

+ 4 - 4
cura/Settings/MachineManager.py

@@ -3,7 +3,7 @@
 
 import collections
 import time
-from typing import Any, Callable, List, Dict, TYPE_CHECKING, Optional
+from typing import Any, Callable, List, Dict, TYPE_CHECKING, Optional, cast
 
 from UM.ConfigurationErrorMessage import ConfigurationErrorMessage
 from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator
@@ -1137,7 +1137,7 @@ class MachineManager(QObject):
         quality_changes_container = self._empty_quality_changes_container
         quality_container = self._empty_quality_container
         if quality_changes_group.node_for_global and quality_changes_group.node_for_global.getContainer():
-            quality_changes_container = quality_changes_group.node_for_global.getContainer()
+            quality_changes_container = cast(InstanceContainer, quality_changes_group.node_for_global.getContainer())
         if quality_group is not None and quality_group.node_for_global and quality_group.node_for_global.getContainer():
             quality_container = quality_group.node_for_global.getContainer()
 
@@ -1153,7 +1153,7 @@ class MachineManager(QObject):
             quality_changes_container = self._empty_quality_changes_container
             quality_container = self._empty_quality_container
             if quality_changes_node and quality_changes_node.getContainer():
-                quality_changes_container = quality_changes_node.getContainer()
+                quality_changes_container = cast(InstanceContainer, quality_changes_node.getContainer())
             if quality_node and quality_node.getContainer():
                 quality_container = quality_node.getContainer()
 
@@ -1279,7 +1279,7 @@ class MachineManager(QObject):
                 continue
 
             # The current material is not available, find the preferred one
-            material_node = self._material_manager.getDefaultMaterial(self._global_container_stack, position, current_variant_name)
+            material_node = self._material_manager.getDefaultMaterial(self._global_container_stack, position_item, current_variant_name)
             if material_node is not None:
                 self._setMaterial(position_item, material_node)
 

+ 2 - 0
cura/Settings/PerObjectContainerStack.py

@@ -19,6 +19,8 @@ class PerObjectContainerStack(CuraContainerStack):
         context.pushContainer(self)
 
         global_stack = Application.getInstance().getGlobalContainerStack()
+        if not global_stack:
+            return None
 
         # Return the user defined value if present, otherwise, evaluate the value according to the default routine.
         if self.getContainer(0).hasProperty(key, property_name):

Некоторые файлы не были показаны из-за большого количества измененных файлов