Merge remote-tracking branch 'origin/3.2'

This commit is contained in:
Lipu Fei 2018-02-01 11:23:20 +01:00
commit 25713a6e64
6 changed files with 111 additions and 17 deletions

View file

@ -60,18 +60,33 @@ class ExtruderStack(CuraContainerStack):
keys_to_copy = ["material_diameter", "machine_nozzle_size"] # these will be copied over to all extruders keys_to_copy = ["material_diameter", "machine_nozzle_size"] # these will be copied over to all extruders
for key in keys_to_copy: for key in keys_to_copy:
# Since material_diameter is not on the extruder definition, we need to add it here
# WARNING: this might be very dangerous and should be refactored ASAP!
definition = stack.getSettingDefinition(key)
if definition:
self.definition.addDefinition(definition)
# Only copy the value when this extruder doesn't have the value. # Only copy the value when this extruder doesn't have the value.
if self.definitionChanges.hasProperty(key, "value"): if self.definitionChanges.hasProperty(key, "value"):
continue continue
setting_value = stack.definitionChanges.getProperty(key, "value") # WARNING: this might be very dangerous and should be refactored ASAP!
if setting_value is None: #
# We cannot add a setting definition of "material_diameter" into the extruder's definition at runtime
# because all other machines which uses "fdmextruder" as the extruder definition will be affected.
#
# The problem is that single extrusion machines have their default material diameter defined in the global
# definitions. Now we automatically create an extruder stack for those machines using "fdmextruder"
# definition, which doesn't have the specific "material_diameter" and "machine_nozzle_size" defined for
# each machine. This results in wrong values which can be found in the MachineSettings dialog.
#
# To solve this, we put "material_diameter" back into the "fdmextruder" definition because modifying it in
# the extruder definition will affect all machines which uses the "fdmextruder" definition. Moreover, now
# we also check the value defined in the machine definition. If present, the value defined in the global
# stack's definition changes container will be copied. Otherwise, we will check if the default values in the
# machine definition and the extruder definition are the same, and if not, the default value in the machine
# definition will be copied to the extruder stack's definition changes.
#
setting_value_in_global_def_changes = stack.definitionChanges.getProperty(key, "value")
setting_value_in_global_def = stack.definition.getProperty(key, "value")
setting_value = setting_value_in_global_def
if setting_value_in_global_def_changes is not None:
setting_value = setting_value_in_global_def_changes
if setting_value == self.definition.getProperty(key, "value"):
continue continue
setting_definition = stack.getSettingDefinition(key) setting_definition = stack.getSettingDefinition(key)
@ -83,8 +98,11 @@ class ExtruderStack(CuraContainerStack):
# Make sure the material diameter is up to date for the extruder stack. # Make sure the material diameter is up to date for the extruder stack.
if key == "material_diameter": if key == "material_diameter":
from cura.CuraApplication import CuraApplication
machine_manager = CuraApplication.getInstance().getMachineManager()
position = self.getMetaDataEntry("position", "0") position = self.getMetaDataEntry("position", "0")
Application.getInstance().getExtruderManager().updateMaterialForDiameter(position) func = lambda p = position: CuraApplication.getInstance().getExtruderManager().updateMaterialForDiameter(p)
machine_manager.machine_extruder_material_update_dict[stack.getId()].append(func)
# NOTE: We cannot remove the setting from the global stack's definition changes container because for # NOTE: We cannot remove the setting from the global stack's definition changes container because for
# material diameter, it needs to be applied to all extruders, but here we don't know how many extruders # material diameter, it needs to be applied to all extruders, but here we don't know how many extruders

View file

@ -1,6 +1,7 @@
# Copyright (c) 2017 Ultimaker B.V. # Copyright (c) 2017 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.
import collections
import time import time
#Type hinting. #Type hinting.
from typing import Union, List, Dict from typing import Union, List, Dict
@ -51,6 +52,8 @@ class MachineManager(QObject):
self._active_container_stack = None # type: CuraContainerStack self._active_container_stack = None # type: CuraContainerStack
self._global_container_stack = None # type: GlobalStack self._global_container_stack = None # type: GlobalStack
self.machine_extruder_material_update_dict = collections.defaultdict(list)
# Used to store the new containers until after confirming the dialog # Used to store the new containers until after confirming the dialog
self._new_variant_container = None self._new_variant_container = None
self._new_buildplate_container = None self._new_buildplate_container = None
@ -334,6 +337,11 @@ class MachineManager(QObject):
extruder_stack.propertyChanged.connect(self._onPropertyChanged) extruder_stack.propertyChanged.connect(self._onPropertyChanged)
extruder_stack.containersChanged.connect(self._onInstanceContainersChanged) extruder_stack.containersChanged.connect(self._onInstanceContainersChanged)
if self._global_container_stack.getId() in self.machine_extruder_material_update_dict:
for func in self.machine_extruder_material_update_dict[self._global_container_stack.getId()]:
Application.getInstance().callLater(func)
del self.machine_extruder_material_update_dict[self._global_container_stack.getId()]
self._error_check_timer.start() self._error_check_timer.start()
## Update self._stacks_valid according to _checkStacksForErrors and emit if change. ## Update self._stacks_valid according to _checkStacksForErrors and emit if change.

View file

@ -1,3 +1,49 @@
[3.2.0]
*Tree support
Experimental tree-like support structure that uses branches to support prints. Branches grow and multiply towards the model, with fewer contact points than alternative support methods. This results in better surface finishes for organic-shaped prints.
*Adaptive layers
Prints with a variable layer thickness which adapts to the angle of the models surfaces. The result is high-quality surface finishes with a marginally increased print time. This setting can be found under the experimental category.
*Faster startup
Printer definitions are now loaded when adding a printer, instead of loading all available printers on startup.
*Backface culling in layer view
Doubled frame rate by only rendering visible surfaces of the model in the layer view, instead of rendering the entire model. Good for lower spec GPUs as it is less resource-intensive.
*Multi build plate
Experimental feature that creates separate build plates with shared settings in a single session, eliminating the need to clear the build plate multiple times. Multiple build plates can be sliced and sent to a printer or printer group in Cura Connect. This feature must be enabled manually in the preferences general tab.
*Improved mesh type selection
New button in the left toolbar to edit per model settings, giving the user more control over where to place support. Objects can be used as meshes, with a drop down list where Print as support, Don't overlap support with other models, Modify settings for overlap with other models, or Modify settings for infill of other models can be specified. Contributed by fieldOfView.
*View optimization
Quick camera controls introduced in version 3.1 have been revised to create more accurate isometric, front, left, and right views.
*Updated sidebar to QtQuick 2.0
Application framework updated to increase speed, achieve a better width and style fit, and gives users dropdown menus that are styled to fit the enabled Ultimaker Cura theme, instead of the operating systems theme.
*Hide sidebar
The sidebar can now be hidden/shown by selecting View > Expand/Collapse Sidebar, or with the hotkey CMD + E (Mac) or CTRL + E (PC and Linux).
*Disable Send slice information
A shortcut to disable Send slice information has been added to the first launch to make it easier for privacy-conscious users to keep slice information private.
*Signed binaries (Windows)
For security-conscious users, the Windows installer and Windows binaries have been digitally signed to prevent “Unknown application” warnings and virus scanner false-positives.
*Start/end gcode script per extruder
Variables from both extruders in the start and end gcode snippets can now be accessed and edited, creating uniformity between profiles in different slicing environments. Contributed by fieldOfView.
*OctoPrint plugin added to plugin browser
This plugin enables printers managed with OctoPrint to print via Ultimaker Cura interface (version 3.2 or later).
*Bugfixes
- Fixed a bug where the mirror tool and center model options when used together would reset the model transformations
- Updated config file path to fix crashes caused by user config files that are located on remote drives
- Updated Arduino drivers to fix triggering errors during OTA updates in shared environments. This also fixes an issue when upgrading the firmware of the Ultimaker Original.
- Fixed an issue where arranging small models would fail, due to conflict with small model files combined with the “Ensure models are kept apart” option
[3.1.0] [3.1.0]
*Profile added for 0.25 mm print core *Profile added for 0.25 mm print core
This new print core gives extra fine line widths which gives prints extra definition and surface quality. This new print core gives extra fine line widths which gives prints extra definition and surface quality.

View file

@ -54,11 +54,10 @@ class PostProcessingPlugin(QObject, Extension):
## Execute all post-processing scripts on the gcode. ## Execute all post-processing scripts on the gcode.
def execute(self, output_device): def execute(self, output_device):
scene = Application.getInstance().getController().getScene() scene = Application.getInstance().getController().getScene()
gcode_dict = None # If the scene does not have a gcode, do nothing
if not hasattr(scene, "gcode_dict"):
if hasattr(scene, "gcode_dict"): return
gcode_dict = getattr(scene, "gcode_dict") gcode_dict = getattr(scene, "gcode_dict")
if not gcode_dict: if not gcode_dict:
return return

View file

@ -1,4 +1,4 @@
# Copyright (c) 2017 Ultimaker B.V. # Copyright (c) 2018 Ultimaker B.V.
# Uranium is released under the terms of the LGPLv3 or higher. # Uranium is released under the terms of the LGPLv3 or higher.
from UM.Settings.ContainerRegistry import ContainerRegistry from UM.Settings.ContainerRegistry import ContainerRegistry
@ -21,8 +21,7 @@ class UM2UpgradeSelection(MachineAction):
self._current_global_stack = None self._current_global_stack = None
from cura.CuraApplication import CuraApplication Application.getInstance().globalContainerStackChanged.connect(self._onGlobalStackChanged)
CuraApplication.getInstance().globalContainerStackChanged.connect(self._onGlobalStackChanged)
self._reset() self._reset()
def _reset(self): def _reset(self):

View file

@ -216,6 +216,30 @@
"enabled": false "enabled": false
} }
} }
},
"material":
{
"label": "Material",
"icon": "category_material",
"description": "Material",
"type": "category",
"children":
{
"material_diameter":
{
"label": "Diameter",
"description": "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament.",
"unit": "mm",
"type": "float",
"default_value": 2.85,
"minimum_value": "0.0001",
"minimum_value_warning": "0.4",
"maximum_value_warning": "3.5",
"enabled": "machine_gcode_flavor != \"UltiGCode\"",
"settable_per_mesh": false,
"settable_per_extruder": true
}
}
} }
} }
} }