diff --git a/cura/Machines/VariantManager.py b/cura/Machines/VariantManager.py index 9c8cff9efb..f6feb70e09 100644 --- a/cura/Machines/VariantManager.py +++ b/cura/Machines/VariantManager.py @@ -115,17 +115,24 @@ class VariantManager: # # Gets the default variant for the given machine definition. + # If the optional GlobalStack is given, the metadata information will be fetched from the GlobalStack instead of + # the DefinitionContainer. Because for machines such as UM2, you can enable Olsson Block, which will set + # "has_variants" to True in the GlobalStack. In those cases, we need to fetch metadata from the GlobalStack or + # it may not be correct. # def getDefaultVariantNode(self, machine_definition: "DefinitionContainer", - variant_type: VariantType) -> Optional["ContainerNode"]: + variant_type: "VariantType", + global_stack: Optional["GlobalStack"] = None) -> Optional["ContainerNode"]: machine_definition_id = machine_definition.getId() + container_for_metadata_fetching = global_stack if global_stack is not None else machine_definition + preferred_variant_name = None if variant_type == VariantType.BUILD_PLATE: - if parseBool(machine_definition.getMetaDataEntry("has_variant_buildplates", False)): - preferred_variant_name = machine_definition.getMetaDataEntry("preferred_variant_buildplate_name") + if parseBool(container_for_metadata_fetching.getMetaDataEntry("has_variant_buildplates", False)): + preferred_variant_name = container_for_metadata_fetching.getMetaDataEntry("preferred_variant_buildplate_name") else: - if parseBool(machine_definition.getMetaDataEntry("has_variants", False)): - preferred_variant_name = machine_definition.getMetaDataEntry("preferred_variant_name") + if parseBool(container_for_metadata_fetching.getMetaDataEntry("has_variants", False)): + preferred_variant_name = container_for_metadata_fetching.getMetaDataEntry("preferred_variant_name") node = None if preferred_variant_name: diff --git a/cura/Settings/CuraStackBuilder.py b/cura/Settings/CuraStackBuilder.py index 6374e6056c..58109d3a8d 100644 --- a/cura/Settings/CuraStackBuilder.py +++ b/cura/Settings/CuraStackBuilder.py @@ -114,7 +114,8 @@ class CuraStackBuilder: # get variant container for extruders extruder_variant_container = application.empty_variant_container - extruder_variant_node = variant_manager.getDefaultVariantNode(global_stack.definition, VariantType.NOZZLE) + extruder_variant_node = variant_manager.getDefaultVariantNode(global_stack.definition, VariantType.NOZZLE, + global_stack = global_stack) extruder_variant_name = None if extruder_variant_node: extruder_variant_container = extruder_variant_node.getContainer() diff --git a/plugins/SimulationView/LayerSlider.qml b/plugins/SimulationView/LayerSlider.qml index 841472a836..1552506969 100644 --- a/plugins/SimulationView/LayerSlider.qml +++ b/plugins/SimulationView/LayerSlider.qml @@ -234,6 +234,11 @@ Item UM.SimulationView.setCurrentLayer(value) var diff = (value - sliderRoot.maximumValue) / (sliderRoot.minimumValue - sliderRoot.maximumValue) + // In case there is only one layer, the diff value results in a NaN, so this is for catching this specific case + if (isNaN(diff)) + { + diff = 0 + } var newUpperYPosition = Math.round(diff * (sliderRoot.height - (2 * sliderRoot.handleSize + sliderRoot.minimumRangeHandleSize))) y = newUpperYPosition @@ -339,6 +344,11 @@ Item UM.SimulationView.setMinimumLayer(value) var diff = (value - sliderRoot.maximumValue) / (sliderRoot.minimumValue - sliderRoot.maximumValue) + // In case there is only one layer, the diff value results in a NaN, so this is for catching this specific case + if (isNaN(diff)) + { + diff = 0 + } var newLowerYPosition = Math.round((sliderRoot.handleSize + sliderRoot.minimumRangeHandleSize) + diff * (sliderRoot.height - (2 * sliderRoot.handleSize + sliderRoot.minimumRangeHandleSize))) y = newLowerYPosition diff --git a/plugins/SimulationView/SimulationView.py b/plugins/SimulationView/SimulationView.py index 8d739654d4..8467dfe8b2 100644 --- a/plugins/SimulationView/SimulationView.py +++ b/plugins/SimulationView/SimulationView.py @@ -346,7 +346,7 @@ class SimulationView(View): self._old_max_layers = self._max_layers ## Recalculate num max layers - new_max_layers = 0 + new_max_layers = -1 for node in DepthFirstIterator(scene.getRoot()): layer_data = node.callDecoration("getLayerData") if not layer_data: @@ -381,7 +381,7 @@ class SimulationView(View): if new_max_layers < layer_count: new_max_layers = layer_count - if new_max_layers > 0 and new_max_layers != self._old_max_layers: + if new_max_layers >= 0 and new_max_layers != self._old_max_layers: self._max_layers = new_max_layers # The qt slider has a bit of weird behavior that if the maxvalue needs to be changed first diff --git a/resources/definitions/ultimaker2.def.json b/resources/definitions/ultimaker2.def.json index aa684946c2..a91d2332b0 100644 --- a/resources/definitions/ultimaker2.def.json +++ b/resources/definitions/ultimaker2.def.json @@ -14,6 +14,7 @@ "platform_offset": [9, 0, 0], "has_materials": false, "has_machine_quality": true, + "preferred_variant_name": "0.4 mm", "exclude_materials": ["generic_hips", "generic_petg", "generic_bam", "ultimaker_bam", "generic_pva", "ultimaker_pva", "generic_tough_pla", "ultimaker_tough_pla_black", "ultimaker_tough_pla_green", "ultimaker_tough_pla_red", "ultimaker_tough_pla_white"], "first_start_actions": ["UM2UpgradeSelection"], "supported_actions":["UM2UpgradeSelection", "UpgradeFirmware"],