mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-08-06 13:34:01 -06:00
Merge branch '2.5' into feature_version_upgrade_2.5
This commit is contained in:
commit
0a398738b7
10 changed files with 128 additions and 37 deletions
|
@ -5,6 +5,7 @@ from PyQt5.QtCore import QObject, pyqtSignal, pyqtProperty
|
|||
from UM.FlameProfiler import pyqtSlot
|
||||
|
||||
from UM.Application import Application
|
||||
from UM.Logger import Logger
|
||||
from UM.Qt.Duration import Duration
|
||||
from UM.Preferences import Preferences
|
||||
from UM.Settings.ContainerRegistry import ContainerRegistry
|
||||
|
@ -109,7 +110,12 @@ class PrintInformation(QObject):
|
|||
return self._material_costs
|
||||
|
||||
def _onPrintDurationMessage(self, total_time, material_amounts):
|
||||
self._current_print_time.setDuration(total_time)
|
||||
if total_time != total_time: # Check for NaN. Engine can sometimes give us weird values.
|
||||
Logger.log("w", "Received NaN for print duration message")
|
||||
self._current_print_time.setDuration(0)
|
||||
else:
|
||||
self._current_print_time.setDuration(total_time)
|
||||
|
||||
self.currentPrintTimeChanged.emit()
|
||||
|
||||
self._material_amounts = material_amounts
|
||||
|
|
7
cura/Settings/ExtruderManager.py
Normal file → Executable file
7
cura/Settings/ExtruderManager.py
Normal file → Executable file
|
@ -135,6 +135,13 @@ class ExtruderManager(QObject):
|
|||
return self._extruder_trains[global_container_stack.getId()][str(index)]
|
||||
return None
|
||||
|
||||
## Get all extruder stacks
|
||||
def getExtruderStacks(self):
|
||||
result = []
|
||||
for i in range(self.extruderCount):
|
||||
result.append(self.getExtruderStack(i))
|
||||
return result
|
||||
|
||||
## Adds all extruders of a specific machine definition to the extruder
|
||||
# manager.
|
||||
#
|
||||
|
|
29
cura/Settings/MachineManager.py
Normal file → Executable file
29
cura/Settings/MachineManager.py
Normal file → Executable file
|
@ -731,8 +731,11 @@ class MachineManager(QObject):
|
|||
else:
|
||||
self._material_incompatible_message.hide()
|
||||
|
||||
new_quality_id = old_quality.getId()
|
||||
quality_type = old_quality.getMetaDataEntry("quality_type")
|
||||
quality_type = None
|
||||
new_quality_id = None
|
||||
if old_quality:
|
||||
new_quality_id = old_quality.getId()
|
||||
quality_type = old_quality.getMetaDataEntry("quality_type")
|
||||
if old_quality_changes:
|
||||
quality_type = old_quality_changes.getMetaDataEntry("quality_type")
|
||||
new_quality_id = old_quality_changes.getId()
|
||||
|
@ -740,16 +743,20 @@ class MachineManager(QObject):
|
|||
# See if the requested quality type is available in the new situation.
|
||||
machine_definition = self._active_container_stack.getBottom()
|
||||
quality_manager = QualityManager.getInstance()
|
||||
candidate_quality = quality_manager.findQualityByQualityType(quality_type,
|
||||
quality_manager.getWholeMachineDefinition(machine_definition),
|
||||
[material_container])
|
||||
candidate_quality = None
|
||||
if quality_type:
|
||||
candidate_quality = quality_manager.findQualityByQualityType(quality_type,
|
||||
quality_manager.getWholeMachineDefinition(machine_definition),
|
||||
[material_container])
|
||||
if not candidate_quality or candidate_quality.getId() == "empty_quality":
|
||||
# Fall back to a quality
|
||||
new_quality = quality_manager.findQualityByQualityType(None,
|
||||
quality_manager.getWholeMachineDefinition(machine_definition),
|
||||
[material_container])
|
||||
if new_quality:
|
||||
new_quality_id = new_quality.getId()
|
||||
# Fall back to a quality (which must be compatible with all other extruders)
|
||||
new_qualities = quality_manager.findAllUsableQualitiesForMachineAndExtruders(
|
||||
self._global_container_stack, ExtruderManager.getInstance().getExtruderStacks())
|
||||
|
||||
if new_qualities:
|
||||
new_quality_id = new_qualities[0].getId() # Just pick the first available one
|
||||
else:
|
||||
Logger.log("w", "No quality profile found that matches the current machine and extruders.")
|
||||
else:
|
||||
if not old_quality_changes:
|
||||
new_quality_id = candidate_quality.getId()
|
||||
|
|
|
@ -92,7 +92,12 @@ class ThreeMFReader(MeshReader):
|
|||
um_node.setMeshData(mesh_data)
|
||||
|
||||
for child in savitar_node.getChildren():
|
||||
um_node.addChild(self._convertSavitarNodeToUMNode(child))
|
||||
child_node = self._convertSavitarNodeToUMNode(child)
|
||||
if child_node:
|
||||
um_node.addChild(child_node)
|
||||
|
||||
if um_node.getMeshData() is None and len(um_node.getChildren()) == 0:
|
||||
return None
|
||||
|
||||
settings = savitar_node.getSettings()
|
||||
|
||||
|
@ -152,6 +157,8 @@ class ThreeMFReader(MeshReader):
|
|||
self._unit = scene_3mf.getUnit()
|
||||
for node in scene_3mf.getSceneNodes():
|
||||
um_node = self._convertSavitarNodeToUMNode(node)
|
||||
if um_node is None:
|
||||
continue
|
||||
# compensate for original center position, if object(s) is/are not around its zero position
|
||||
|
||||
transform_matrix = Matrix()
|
||||
|
|
|
@ -1,9 +1,59 @@
|
|||
[2.5.0]
|
||||
*Layerview double slider.
|
||||
The layerview now has a nice slider with double handles where you can drag maximum layer, minimum layer and the layer range. Thansk to community member Aldo Hoeben for this feature.
|
||||
*Speed.
|
||||
We’ve given the system a tweak, to make changing printers, profiles, materials and print cores even quicker than ever. That means less hanging around, more time printing. We’ve also adjusted the start-up speed, which is now five seconds faster.
|
||||
|
||||
*Included PauseBackendPlugin.
|
||||
This enables pausing the backend and manually start the backend. Thanks to community member Aldo Hoeben for this feature.
|
||||
*Speedup engine – Multi-threading.
|
||||
This is one of the most significant improvements, making slicing even faster. Just like computers with multiple cores, Cura can process multiple operations at the same time. How’s that for efficient?
|
||||
|
||||
*Better layout for 3D layer view options.
|
||||
Need things to be a bit clearer? We’ve now incorporated an improved layer view for computers that support OpenGL 4.1. For OpenGL 2.0 we will automatically switch to the old layer view. Thanks to community member Aldo Hoeben for the fancy double handle slider.
|
||||
|
||||
*Disable automatic slicing.
|
||||
Some users told us that slicing slowed down their workflow when it auto-starts, and to improve the user experience, we added an option to disable auto-slicing if required. Thanks to community member Aldo Hoeben for contributing to this one.
|
||||
|
||||
*Solidworks & Cura macro.
|
||||
This macro is designed to run inside SolidWorks, open Cura and load the current document / part. You should also be able to add this macro to your toolbar inside Solidworks.
|
||||
|
||||
*Auto-scale off by default.
|
||||
This change needs no explanation!
|
||||
|
||||
*Preheat the build plate (with a connected printer).
|
||||
You can now set your Ultimaker 3 to preheat the build plate, which reduces the downtime, letting you manually speed up your printing workflow. All you need to do is use the ‘preheat’ function in the Print Monitor screen, and set the correct temperature for the active material(s).
|
||||
|
||||
*G-code reader.
|
||||
The g-code reader has been reintroduced, which means you can load g-code from file and display it in layer view. You can also print saved g-code files with Cura, share and re-use them, and you can check that your printed object looks right via the g-code viewer.
|
||||
|
||||
*Switching profiles.
|
||||
When you change a printing profile after customizing print settings, you have an option (shown in a popup) to transfer your customizations to the new profile or discard those modifications and continue with default settings instead. We’ve made this dialog window more informative and intuitive.
|
||||
|
||||
*Print cost calculation.
|
||||
Cura now contains code to help you calculate the cost of your print. To do so, you’ll need to enter a cost per spool and an amount of materials per spool. You can also set the cost per material and gain better control of your expenses. Thanks to our community member Aldo Hoeben for adding this feature.
|
||||
|
||||
*Bug fixes
|
||||
|
||||
Property renaming: Properties that start with ‘get’ have been renamed to avoid confusion.
|
||||
Window overflow: This is now fixed.
|
||||
Multiple machine prefixes: Multiple machine prefixes are gone when loading and saving projects.
|
||||
Removal of file extension: When you save a file or project (without changing the file type), no file extension is added to the name. It’s only when you change to another file type that the extension is added.
|
||||
Ultimaker 3 Extended connectivity: Selecting Ultimaker 3 Extended in Cura let you connect and print with Ultimaker 3, without any warning. This now has been fixed.
|
||||
Different Y / Z colors: Y and Z colors in the tool menu are now different to the colors on the build plate.
|
||||
No collision areas: No collision areas were generated for some models.
|
||||
Perimeter gaps: Perimeter gaps are not filled often enough; we’ve now amended this.
|
||||
File location after restart: The old version of Cura didn’t remember the last opened file location after it’s been restarted. Now it does!
|
||||
Project name: The project name changes after the project is opened.
|
||||
Slicing when error value is given (print core 2): When a support is printed with extruder 2 (PVA), some support settings will trigger a slice when an error value is given. We’ve now sorted this out.
|
||||
Support Towers: Support Towers can now be disabled.
|
||||
Support bottoms: When putting one object on top of another with some space in between, and selecting support with support bottom interface, no support bottom is printed. This has now been resolved.
|
||||
Summary box size: We’ve enlarged the summary box when saving your project.
|
||||
Cubic subdivision infill: In the past, the cubic subdivision infill sometimes didn’t produce the infill (WIN) – this has now been addressed.
|
||||
Spiralize outer contour and fill small gaps: When combining Fill Gaps Between Walls with Spiralize Outer Contour, the model gets a massive infill.
|
||||
Experimental post-processing plugin: Since the TwaekAtZ post-processing plugin is not officially supported, we added the ‘Experimental’ tag.
|
||||
|
||||
*3rd party printers (bug fixes)
|
||||
|
||||
Folgertech printer definition has been added
|
||||
Hello BEE Prusa printer definition has been added
|
||||
Material profiles for Cartesio printers have been updated
|
||||
|
||||
[2.4.0]
|
||||
*Project saving & opening
|
||||
|
|
24
resources/definitions/fdmprinter.def.json
Normal file → Executable file
24
resources/definitions/fdmprinter.def.json
Normal file → Executable file
|
@ -1318,10 +1318,10 @@
|
|||
"enabled": "expand_upper_skins or expand_lower_skins",
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
"min_skin_angle_for_expansion":
|
||||
"max_skin_angle_for_expansion":
|
||||
{
|
||||
"label": "Minimum Skin Angle for Expansion",
|
||||
"description": "Top and or bottom surfaces of your object with an angle larger than this setting, won't have their top/bottom skin expanded. This avoids expanding the narrow skin areas that are created when the model surface has a near vertical slope.",
|
||||
"label": "Maximum Skin Angle for Expansion",
|
||||
"description": "Top and or bottom surfaces of your object with an angle larger than this setting, won't have their top/bottom skin expanded. This avoids expanding the narrow skin areas that are created when the model surface has a near vertical slope. An angle of 0° is horizontal, while an angle of 90° is vertical.",
|
||||
"unit": "°",
|
||||
"type": "float",
|
||||
"minimum_value": "0",
|
||||
|
@ -1340,7 +1340,7 @@
|
|||
"unit": "mm",
|
||||
"type": "float",
|
||||
"default_value": 2.24,
|
||||
"value": "top_layers * layer_height / math.tan(math.radians(min_skin_angle_for_expansion))",
|
||||
"value": "top_layers * layer_height / math.tan(math.radians(max_skin_angle_for_expansion))",
|
||||
"minimum_value": "0",
|
||||
"enabled": "expand_upper_skins or expand_lower_skins",
|
||||
"settable_per_mesh": true
|
||||
|
@ -2556,16 +2556,6 @@
|
|||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": true
|
||||
},
|
||||
"start_layers_at_same_position":
|
||||
{
|
||||
"label": "Start Layers with the Same Part",
|
||||
"description": "In each layer start with printing the object near the same point, so that we don't start a new layer with printing the piece which the previous layer ended with. This makes for better overhangs and small parts, but increases printing time.",
|
||||
"type": "bool",
|
||||
"default_value": false,
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false,
|
||||
"settable_per_meshgroup": true
|
||||
},
|
||||
"layer_start_x":
|
||||
{
|
||||
"label": "Layer Start X",
|
||||
|
@ -2574,9 +2564,8 @@
|
|||
"type": "float",
|
||||
"default_value": 0.0,
|
||||
"minimum_value": "0",
|
||||
"enabled": "start_layers_at_same_position",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false,
|
||||
"settable_per_extruder": true,
|
||||
"settable_per_meshgroup": true
|
||||
},
|
||||
"layer_start_y":
|
||||
|
@ -2587,9 +2576,8 @@
|
|||
"type": "float",
|
||||
"default_value": 0.0,
|
||||
"minimum_value": "0",
|
||||
"enabled": "start_layers_at_same_position",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false,
|
||||
"settable_per_extruder": true,
|
||||
"settable_per_meshgroup": true
|
||||
},
|
||||
"retraction_hop_enabled": {
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
"has_machine_materials": true,
|
||||
"has_variant_materials": true,
|
||||
"has_variants": true,
|
||||
"preferred_variant": "*aa*",
|
||||
"preferred_variant": "*aa04*",
|
||||
"preferred_quality": "*Normal*",
|
||||
"variants_name": "Print core",
|
||||
"machine_extruder_trains":
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
"has_variant_materials": true,
|
||||
"has_materials": true,
|
||||
"has_variants": true,
|
||||
"preferred_variant": "*aa*",
|
||||
"preferred_variant": "*aa04*",
|
||||
"variants_name": "Print core",
|
||||
"machine_extruder_trains":
|
||||
{
|
||||
|
|
13
resources/quality/ultimaker3/um3_global_Superdraft_Quality.inst.cfg
Executable file
13
resources/quality/ultimaker3/um3_global_Superdraft_Quality.inst.cfg
Executable file
|
@ -0,0 +1,13 @@
|
|||
[general]
|
||||
version = 2
|
||||
name = Superdraft Quality
|
||||
definition = ultimaker3
|
||||
|
||||
[metadata]
|
||||
type = quality
|
||||
quality_type = superdraft
|
||||
global_quality = True
|
||||
weight = -2
|
||||
|
||||
[values]
|
||||
layer_height = 0.4
|
13
resources/quality/ultimaker3/um3_global_Verydraft_Quality.inst.cfg
Executable file
13
resources/quality/ultimaker3/um3_global_Verydraft_Quality.inst.cfg
Executable file
|
@ -0,0 +1,13 @@
|
|||
[general]
|
||||
version = 2
|
||||
name = Verydraft Quality
|
||||
definition = ultimaker3
|
||||
|
||||
[metadata]
|
||||
type = quality
|
||||
quality_type = verydraft
|
||||
global_quality = True
|
||||
weight = -2
|
||||
|
||||
[values]
|
||||
layer_height = 0.3
|
Loading…
Add table
Add a link
Reference in a new issue