Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/Ultimaker/Cura.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xcura/CuraApplication.py7
-rw-r--r--cura/UI/PrintInformation.py1
-rwxr-xr-xplugins/3MFReader/ThreeMFReader.py15
-rw-r--r--plugins/3MFWriter/ThreeMFWriter.py23
-rw-r--r--resources/definitions/fdmprinter.def.json602
-rw-r--r--resources/definitions/trimaker_cosmosII.def.json198
-rw-r--r--resources/definitions/trimaker_nebula.def.json198
-rw-r--r--resources/extruders/trimaker_cosmosII_extruder.def.json15
-rw-r--r--resources/extruders/trimaker_nebula_extruder.def.json15
-rw-r--r--resources/meshes/trimaker_cosmosII_platform.stlbin0 -> 643384 bytes
-rw-r--r--resources/meshes/trimaker_nebula_platform.stlbin0 -> 992684 bytes
-rw-r--r--resources/qml/Cura.qml5
-rw-r--r--resources/qml/Dialogs/AskOpenAsProjectOrModelsDialog.qml6
-rw-r--r--resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml6
-rw-r--r--resources/quality/trimaker_cosmosII/trimaker_cosmosII_fast.inst.cfg15
-rw-r--r--resources/quality/trimaker_cosmosII/trimaker_cosmosII_normal.inst.cfg15
-rw-r--r--resources/quality/trimaker_cosmosII/trimaker_cosmosII_slow.inst.cfg15
-rw-r--r--resources/quality/trimaker_nebula/trimaker_nebula_fast.inst.cfg15
-rw-r--r--resources/quality/trimaker_nebula/trimaker_nebula_normal.inst.cfg15
-rw-r--r--resources/quality/trimaker_nebula/trimaker_nebula_slow.inst.cfg15
-rw-r--r--resources/setting_visibility/advanced.cfg7
-rw-r--r--resources/setting_visibility/basic.cfg4
-rw-r--r--resources/setting_visibility/expert.cfg24
-rw-r--r--resources/themes/cura-light/icons/category_topbottom.svg7
-rw-r--r--run_mypy.py2
25 files changed, 900 insertions, 325 deletions
diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py
index bc4ae4c67e..ee73214e34 100755
--- a/cura/CuraApplication.py
+++ b/cura/CuraApplication.py
@@ -1733,7 +1733,7 @@ class CuraApplication(QtApplication):
def log(self, msg):
Logger.log("d", msg)
- openProjectFile = pyqtSignal(QUrl, arguments = ["project_file"]) # Emitted when a project file is about to open.
+ openProjectFile = pyqtSignal(QUrl, bool, arguments = ["project_file", "add_to_recent_files"]) # Emitted when a project file is about to open.
@pyqtSlot(QUrl, str, bool)
@pyqtSlot(QUrl, str)
@@ -1743,6 +1743,7 @@ class CuraApplication(QtApplication):
:param project_mode: How to handle project files. Either None(default): Follow user preference, "open_as_model"
or "open_as_project". This parameter is only considered if the file is a project file.
+ :param add_to_recent_files: Whether or not to add the file as an option to the Recent Files list.
"""
Logger.log("i", "Attempting to read file %s", file.toString())
if not file.isValid():
@@ -1768,7 +1769,7 @@ class CuraApplication(QtApplication):
if is_project_file and project_mode == "always_ask":
# present a dialog asking to open as project or import models
- self.callLater(self.openProjectFile.emit, file)
+ self.callLater(self.openProjectFile.emit, file, add_to_recent_files)
return
# Either the file is a model file or we want to load only models from project. Continue to load models.
@@ -1940,7 +1941,7 @@ class CuraApplication(QtApplication):
try:
result = workspace_reader.preRead(file_path, show_dialog=False)
return result == WorkspaceReader.PreReadResult.accepted
- except Exception:
+ except:
Logger.logException("e", "Could not check file %s", file_url)
return False
diff --git a/cura/UI/PrintInformation.py b/cura/UI/PrintInformation.py
index 22710165b3..10318b3a8b 100644
--- a/cura/UI/PrintInformation.py
+++ b/cura/UI/PrintInformation.py
@@ -301,6 +301,7 @@ class PrintInformation(QObject):
if self._base_name == "":
self._job_name = self.UNTITLED_JOB_NAME
self._is_user_specified_job_name = False
+ self._application.getController().getScene().clearMetaData()
self.jobNameChanged.emit()
return
diff --git a/plugins/3MFReader/ThreeMFReader.py b/plugins/3MFReader/ThreeMFReader.py
index 5fd218ca7c..37ca1e98aa 100755
--- a/plugins/3MFReader/ThreeMFReader.py
+++ b/plugins/3MFReader/ThreeMFReader.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2019 Ultimaker B.V.
+# Copyright (c) 2021 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
import os.path
@@ -163,9 +163,9 @@ class ThreeMFReader(MeshReader):
um_node.callDecoration("getStack").getTop().setDefinition(definition_id)
setting_container = um_node.callDecoration("getStack").getTop()
-
+ known_setting_keys = um_node.callDecoration("getStack").getAllKeys()
for key in settings:
- setting_value = settings[key]
+ setting_value = settings[key].value
# Extruder_nr is a special case.
if key == "extruder_nr":
@@ -175,7 +175,10 @@ class ThreeMFReader(MeshReader):
else:
Logger.log("w", "Unable to find extruder in position %s", setting_value)
continue
- setting_container.setProperty(key, "value", setting_value)
+ if key in known_setting_keys:
+ setting_container.setProperty(key, "value", setting_value)
+ else:
+ um_node.metadata[key] = settings[key]
if len(um_node.getChildren()) > 0 and um_node.getMeshData() is None:
if len(um_node.getAllChildren()) == 1:
@@ -206,6 +209,10 @@ class ThreeMFReader(MeshReader):
parser = Savitar.ThreeMFParser()
scene_3mf = parser.parse(archive.open("3D/3dmodel.model").read())
self._unit = scene_3mf.getUnit()
+
+ for key, value in scene_3mf.getMetadata().items():
+ CuraApplication.getInstance().getController().getScene().setMetaDataEntry(key, value)
+
for node in scene_3mf.getSceneNodes():
um_node = self._convertSavitarNodeToUMNode(node, file_name)
if um_node is None:
diff --git a/plugins/3MFWriter/ThreeMFWriter.py b/plugins/3MFWriter/ThreeMFWriter.py
index 6c02935080..c85eca88bf 100644
--- a/plugins/3MFWriter/ThreeMFWriter.py
+++ b/plugins/3MFWriter/ThreeMFWriter.py
@@ -14,6 +14,7 @@ from cura.CuraApplication import CuraApplication
import Savitar
import numpy
+import datetime
MYPY = False
try:
@@ -108,7 +109,11 @@ class ThreeMFWriter(MeshWriter):
# Get values for all changed settings & save them.
for key in changed_setting_keys:
- savitar_node.setSetting(key, str(stack.getProperty(key, "value")))
+ savitar_node.setSetting("cura:" + key, str(stack.getProperty(key, "value")))
+
+ # Store the metadata.
+ for key, value in um_node.metadata.items():
+ savitar_node.setSetting(key, value)
for child_node in um_node.getChildren():
# only save the nodes on the active build plate
@@ -145,6 +150,22 @@ class ThreeMFWriter(MeshWriter):
model_relation_element = ET.SubElement(relations_element, "Relationship", Target = "/3D/3dmodel.model", Id = "rel0", Type = "http://schemas.microsoft.com/3dmanufacturing/2013/01/3dmodel")
savitar_scene = Savitar.Scene()
+
+ metadata_to_store = CuraApplication.getInstance().getController().getScene().getMetaData()
+
+ for key, value in metadata_to_store.items():
+ savitar_scene.setMetaDataEntry(key, value)
+
+ current_time_string = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
+ if "Application" not in metadata_to_store:
+ # This might sound a bit strange, but this field should store the original application that created
+ # the 3mf. So if it was already set, leave it to whatever it was.
+ savitar_scene.setMetaDataEntry("Application", CuraApplication.getInstance().getApplicationDisplayName())
+ if "CreationDate" not in metadata_to_store:
+ savitar_scene.setMetaDataEntry("CreationDate", current_time_string)
+
+ savitar_scene.setMetaDataEntry("ModificationDate", current_time_string)
+
transformation_matrix = Matrix()
transformation_matrix._data[1, 1] = 0
transformation_matrix._data[1, 2] = -1
diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json
index 8eef1ce696..2bb2177129 100644
--- a/resources/definitions/fdmprinter.def.json
+++ b/resources/definitions/fdmprinter.def.json
@@ -977,7 +977,7 @@
},
"shell":
{
- "label": "Shell",
+ "label": "Walls",
"icon": "category_shell",
"description": "Shell",
"type": "category",
@@ -1129,184 +1129,6 @@
"limit_to_extruder": "wall_0_extruder_nr",
"settable_per_mesh": true
},
- "roofing_extruder_nr":
- {
- "label": "Top Surface Skin Extruder",
- "description": "The extruder train used for printing the top most skin. This is used in multi-extrusion.",
- "type": "optional_extruder",
- "default_value": "-1",
- "value": "top_bottom_extruder_nr",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": true,
- "settable_globally": true,
- "enabled": "extruders_enabled_count > 1 and max(extruderValues('roofing_layer_count')) > 0 and max(extruderValues('top_layers')) > 0"
- },
- "roofing_layer_count":
- {
- "label": "Top Surface Skin Layers",
- "description": "The number of top most skin layers. Usually only one top most layer is sufficient to generate higher quality top surfaces.",
- "default_value": 0,
- "minimum_value": "0",
- "maximum_value_warning": "top_layers - 1",
- "type": "int",
- "value": "0",
- "limit_to_extruder": "roofing_extruder_nr",
- "settable_per_mesh": true,
- "enabled": "top_layers > 0"
- },
- "top_bottom_extruder_nr":
- {
- "label": "Top/Bottom Extruder",
- "description": "The extruder train used for printing the top and bottom skin. This is used in multi-extrusion.",
- "type": "optional_extruder",
- "default_value": "-1",
- "settable_per_mesh": false,
- "settable_per_extruder": false,
- "settable_per_meshgroup": true,
- "settable_globally": true,
- "enabled": "extruders_enabled_count > 1"
- },
- "top_bottom_thickness":
- {
- "label": "Top/Bottom Thickness",
- "description": "The thickness of the top/bottom layers in the print. This value divided by the layer height defines the number of top/bottom layers.",
- "unit": "mm",
- "default_value": 0.8,
- "minimum_value": "0",
- "minimum_value_warning": "0.6",
- "maximum_value": "machine_height",
- "type": "float",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true,
- "children":
- {
- "top_thickness":
- {
- "label": "Top Thickness",
- "description": "The thickness of the top layers in the print. This value divided by the layer height defines the number of top layers.",
- "unit": "mm",
- "default_value": 0.8,
- "minimum_value": "0",
- "minimum_value_warning": "0.2 + resolveOrValue('layer_height')",
- "maximum_value": "machine_height",
- "type": "float",
- "value": "top_bottom_thickness",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true,
- "children":
- {
- "top_layers":
- {
- "label": "Top Layers",
- "description": "The number of top layers. When calculated by the top thickness, this value is rounded to a whole number.",
- "default_value": 8,
- "minimum_value": "0",
- "maximum_value_warning": "100",
- "type": "int",
- "minimum_value_warning": "2",
- "value": "0 if infill_sparse_density == 100 else math.ceil(round(top_thickness / resolveOrValue('layer_height'), 4))",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- }
- }
- },
- "bottom_thickness":
- {
- "label": "Bottom Thickness",
- "description": "The thickness of the bottom layers in the print. This value divided by the layer height defines the number of bottom layers.",
- "unit": "mm",
- "default_value": 0.6,
- "minimum_value": "0",
- "minimum_value_warning": "0.2 + resolveOrValue('layer_height')",
- "type": "float",
- "value": "top_bottom_thickness",
- "maximum_value": "machine_height",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true,
- "children":
- {
- "bottom_layers":
- {
- "label": "Bottom Layers",
- "description": "The number of bottom layers. When calculated by the bottom thickness, this value is rounded to a whole number.",
- "minimum_value": "0",
- "minimum_value_warning": "2",
- "default_value": 6,
- "type": "int",
- "value": "999999 if infill_sparse_density == 100 else math.ceil(round(bottom_thickness / resolveOrValue('layer_height'), 4))",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "initial_bottom_layers":
- {
- "label": "Initial Bottom Layers",
- "description": "The number of initial bottom layers, from the build-plate upwards. When calculated by the bottom thickness, this value is rounded to a whole number.",
- "minimum_value": "0",
- "minimum_value_warning": "2",
- "default_value": 6,
- "type": "int",
- "value": "bottom_layers",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- }
- }
- }
- }
- },
- "top_bottom_pattern":
- {
- "label": "Top/Bottom Pattern",
- "description": "The pattern of the top/bottom layers.",
- "type": "enum",
- "options":
- {
- "lines": "Lines",
- "concentric": "Concentric",
- "zigzag": "Zig Zag"
- },
- "default_value": "lines",
- "enabled": "top_layers > 0 or bottom_layers > 0",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "top_bottom_pattern_0":
- {
- "label": "Bottom Pattern Initial Layer",
- "description": "The pattern on the bottom of the print on the first layer.",
- "type": "enum",
- "options":
- {
- "lines": "Lines",
- "concentric": "Concentric",
- "zigzag": "Zig Zag"
- },
- "default_value": "lines",
- "enabled": "top_layers > 0 or bottom_layers > 0",
- "value": "top_bottom_pattern",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "connect_skin_polygons":
- {
- "label": "Connect Top/Bottom Polygons",
- "description": "Connect top/bottom skin paths where they run next to each other. For the concentric pattern enabling this setting greatly reduces the travel time, but because the connections can happen midway over infill this feature can reduce the top surface quality.",
- "type": "bool",
- "default_value": false,
- "enabled": "((top_layers > 0 or bottom_layers > 0) and top_bottom_pattern == 'concentric') or (initial_bottom_layers > 0 and top_bottom_pattern_0 == 'concentric') or (roofing_layer_count > 0 and roofing_pattern == 'concentric')",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "skin_angles":
- {
- "label": "Top/Bottom Line Directions",
- "description": "A list of integer line directions to use when the top/bottom layers use the lines or zig zag pattern. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the traditional default angles (45 and 135 degrees).",
- "type": "[int]",
- "default_value": "[ ]",
- "enabled": "(top_layers > 0 or bottom_layers > 0) and top_bottom_pattern != 'concentric'",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
"wall_0_inset":
{
"label": "Outer Wall Inset",
@@ -1537,6 +1359,194 @@
"enabled": "z_seam_type == 'back'",
"limit_to_extruder": "wall_0_extruder_nr",
"settable_per_mesh": true
+ }
+ }
+ },
+ "top_bottom":
+ {
+ "label": "Top/Bottom",
+ "icon": "category_topbottom",
+ "description": "Top/Bottom",
+ "type": "category",
+ "children":
+ {
+ "roofing_extruder_nr":
+ {
+ "label": "Top Surface Skin Extruder",
+ "description": "The extruder train used for printing the top most skin. This is used in multi-extrusion.",
+ "type": "optional_extruder",
+ "default_value": "-1",
+ "value": "top_bottom_extruder_nr",
+ "settable_per_mesh": false,
+ "settable_per_extruder": false,
+ "settable_per_meshgroup": true,
+ "settable_globally": true,
+ "enabled": "extruders_enabled_count > 1 and max(extruderValues('roofing_layer_count')) > 0 and max(extruderValues('top_layers')) > 0"
+ },
+ "roofing_layer_count":
+ {
+ "label": "Top Surface Skin Layers",
+ "description": "The number of top most skin layers. Usually only one top most layer is sufficient to generate higher quality top surfaces.",
+ "default_value": 0,
+ "minimum_value": "0",
+ "maximum_value_warning": "top_layers - 1",
+ "type": "int",
+ "value": "0",
+ "limit_to_extruder": "roofing_extruder_nr",
+ "settable_per_mesh": true,
+ "enabled": "top_layers > 0"
+ },
+ "top_bottom_extruder_nr":
+ {
+ "label": "Top/Bottom Extruder",
+ "description": "The extruder train used for printing the top and bottom skin. This is used in multi-extrusion.",
+ "type": "optional_extruder",
+ "default_value": "-1",
+ "settable_per_mesh": false,
+ "settable_per_extruder": false,
+ "settable_per_meshgroup": true,
+ "settable_globally": true,
+ "enabled": "extruders_enabled_count > 1"
+ },
+ "top_bottom_thickness":
+ {
+ "label": "Top/Bottom Thickness",
+ "description": "The thickness of the top/bottom layers in the print. This value divided by the layer height defines the number of top/bottom layers.",
+ "unit": "mm",
+ "default_value": 0.8,
+ "minimum_value": "0",
+ "minimum_value_warning": "0.6",
+ "maximum_value": "machine_height",
+ "type": "float",
+ "limit_to_extruder": "top_bottom_extruder_nr",
+ "settable_per_mesh": true,
+ "children":
+ {
+ "top_thickness":
+ {
+ "label": "Top Thickness",
+ "description": "The thickness of the top layers in the print. This value divided by the layer height defines the number of top layers.",
+ "unit": "mm",
+ "default_value": 0.8,
+ "minimum_value": "0",
+ "minimum_value_warning": "0.2 + resolveOrValue('layer_height')",
+ "maximum_value": "machine_height",
+ "type": "float",
+ "value": "top_bottom_thickness",
+ "limit_to_extruder": "top_bottom_extruder_nr",
+ "settable_per_mesh": true,
+ "children":
+ {
+ "top_layers":
+ {
+ "label": "Top Layers",
+ "description": "The number of top layers. When calculated by the top thickness, this value is rounded to a whole number.",
+ "default_value": 8,
+ "minimum_value": "0",
+ "maximum_value_warning": "100",
+ "type": "int",
+ "minimum_value_warning": "2",
+ "value": "0 if infill_sparse_density == 100 else math.ceil(round(top_thickness / resolveOrValue('layer_height'), 4))",
+ "limit_to_extruder": "top_bottom_extruder_nr",
+ "settable_per_mesh": true
+ }
+ }
+ },
+ "bottom_thickness":
+ {
+ "label": "Bottom Thickness",
+ "description": "The thickness of the bottom layers in the print. This value divided by the layer height defines the number of bottom layers.",
+ "unit": "mm",
+ "default_value": 0.6,
+ "minimum_value": "0",
+ "minimum_value_warning": "0.2 + resolveOrValue('layer_height')",
+ "type": "float",
+ "value": "top_bottom_thickness",
+ "maximum_value": "machine_height",
+ "limit_to_extruder": "top_bottom_extruder_nr",
+ "settable_per_mesh": true,
+ "children":
+ {
+ "bottom_layers":
+ {
+ "label": "Bottom Layers",
+ "description": "The number of bottom layers. When calculated by the bottom thickness, this value is rounded to a whole number.",
+ "minimum_value": "0",
+ "minimum_value_warning": "2",
+ "default_value": 6,
+ "type": "int",
+ "value": "999999 if infill_sparse_density == 100 else math.ceil(round(bottom_thickness / resolveOrValue('layer_height'), 4))",
+ "limit_to_extruder": "top_bottom_extruder_nr",
+ "settable_per_mesh": true
+ },
+ "initial_bottom_layers":
+ {
+ "label": "Initial Bottom Layers",
+ "description": "The number of initial bottom layers, from the build-plate upwards. When calculated by the bottom thickness, this value is rounded to a whole number.",
+ "minimum_value": "0",
+ "minimum_value_warning": "2",
+ "default_value": 6,
+ "type": "int",
+ "value": "bottom_layers",
+ "limit_to_extruder": "top_bottom_extruder_nr",
+ "settable_per_mesh": true
+ }
+ }
+ }
+ }
+ },
+ "top_bottom_pattern":
+ {
+ "label": "Top/Bottom Pattern",
+ "description": "The pattern of the top/bottom layers.",
+ "type": "enum",
+ "options":
+ {
+ "lines": "Lines",
+ "concentric": "Concentric",
+ "zigzag": "Zig Zag"
+ },
+ "default_value": "lines",
+ "enabled": "top_layers > 0 or bottom_layers > 0",
+ "limit_to_extruder": "top_bottom_extruder_nr",
+ "settable_per_mesh": true
+ },
+ "top_bottom_pattern_0":
+ {
+ "label": "Bottom Pattern Initial Layer",
+ "description": "The pattern on the bottom of the print on the first layer.",
+ "type": "enum",
+ "options":
+ {
+ "lines": "Lines",
+ "concentric": "Concentric",
+ "zigzag": "Zig Zag"
+ },
+ "default_value": "lines",
+ "enabled": "top_layers > 0 or bottom_layers > 0",
+ "value": "top_bottom_pattern",
+ "limit_to_extruder": "top_bottom_extruder_nr",
+ "settable_per_mesh": true
+ },
+ "connect_skin_polygons":
+ {
+ "label": "Connect Top/Bottom Polygons",
+ "description": "Connect top/bottom skin paths where they run next to each other. For the concentric pattern enabling this setting greatly reduces the travel time, but because the connections can happen midway over infill this feature can reduce the top surface quality.",
+ "type": "bool",
+ "default_value": false,
+ "enabled": "((top_layers > 0 or bottom_layers > 0) and top_bottom_pattern == 'concentric') or (initial_bottom_layers > 0 and top_bottom_pattern_0 == 'concentric') or (roofing_layer_count > 0 and roofing_pattern == 'concentric')",
+ "limit_to_extruder": "top_bottom_extruder_nr",
+ "settable_per_mesh": true
+ },
+ "skin_angles":
+ {
+ "label": "Top/Bottom Line Directions",
+ "description": "A list of integer line directions to use when the top/bottom layers use the lines or zig zag pattern. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the traditional default angles (45 and 135 degrees).",
+ "type": "[int]",
+ "default_value": "[ ]",
+ "enabled": "(top_layers > 0 or bottom_layers > 0) and top_bottom_pattern != 'concentric'",
+ "limit_to_extruder": "top_bottom_extruder_nr",
+ "settable_per_mesh": true
},
"skin_no_small_gaps_heuristic":
{
@@ -1708,6 +1718,123 @@
"settable_per_mesh": true
}
}
+ },
+ "skin_preshrink":
+ {
+ "label": "Skin Removal Width",
+ "description": "The largest width of skin areas which are to be removed. Every skin area smaller than this value will disappear. This can help in limiting the amount of time and material spent on printing top/bottom skin at slanted surfaces in the model.",
+ "unit": "mm",
+ "type": "float",
+ "default_value": 1,
+ "value": "wall_line_width_0 + (wall_line_count - 1) * wall_line_width_x",
+ "minimum_value": "0",
+ "maximum_value_warning": "wall_line_width_0 + (wall_line_count - 1) * wall_line_width_x",
+ "enabled": "top_layers > 0 or bottom_layers > 0",
+ "limit_to_extruder": "top_bottom_extruder_nr",
+ "settable_per_mesh": true,
+ "children":
+ {
+ "top_skin_preshrink":
+ {
+ "label": "Top Skin Removal Width",
+ "description": "The largest width of top skin areas which are to be removed. Every skin area smaller than this value will disappear. This can help in limiting the amount of time and material spent on printing top skin at slanted surfaces in the model.",
+ "unit": "mm",
+ "type": "float",
+ "default_value": 1,
+ "value": "skin_preshrink",
+ "maximum_value_warning": "wall_line_width_0 + (wall_line_count - 1) * wall_line_width_x",
+ "minimum_value": "0",
+ "enabled": "top_layers > 0 or bottom_layers > 0",
+ "limit_to_extruder": "top_bottom_extruder_nr",
+ "settable_per_mesh": true
+ },
+ "bottom_skin_preshrink":
+ {
+ "label": "Bottom Skin Removal Width",
+ "description": "The largest width of bottom skin areas which are to be removed. Every skin area smaller than this value will disappear. This can help in limiting the amount of time and material spent on printing bottom skin at slanted surfaces in the model.",
+ "unit": "mm",
+ "type": "float",
+ "default_value": 1,
+ "value": "skin_preshrink",
+ "maximum_value_warning": "wall_line_width_0 + (wall_line_count - 1) * wall_line_width_x",
+ "minimum_value": "0",
+ "enabled": "top_layers > 0 or bottom_layers > 0",
+ "limit_to_extruder": "top_bottom_extruder_nr",
+ "settable_per_mesh": true
+ }
+ }
+ },
+ "expand_skins_expand_distance":
+ {
+ "label": "Skin Expand Distance",
+ "description": "The distance the skins are expanded into the infill. Higher values makes the skin attach better to the infill pattern and makes the walls on neighboring layers adhere better to the skin. Lower values save amount of material used.",
+ "unit": "mm",
+ "type": "float",
+ "default_value": 1,
+ "value": "wall_line_width_0 + (wall_line_count - 1) * wall_line_width_x",
+ "minimum_value": "-skin_preshrink",
+ "limit_to_extruder": "top_bottom_extruder_nr",
+ "enabled": "top_layers > 0 or bottom_layers > 0",
+ "settable_per_mesh": true,
+ "children":
+ {
+ "top_skin_expand_distance":
+ {
+ "label": "Top Skin Expand Distance",
+ "description": "The distance the top skins are expanded into the infill. Higher values makes the skin attach better to the infill pattern and makes the walls on the layer above adhere better to the skin. Lower values save amount of material used.",
+ "unit": "mm",
+ "type": "float",
+ "default_value": 1,
+ "value": "expand_skins_expand_distance",
+ "minimum_value": "-top_skin_preshrink",
+ "enabled": "top_layers > 0 or bottom_layers > 0",
+ "limit_to_extruder": "top_bottom_extruder_nr",
+ "settable_per_mesh": true
+ },
+ "bottom_skin_expand_distance":
+ {
+ "label": "Bottom Skin Expand Distance",
+ "description": "The distance the bottom skins are expanded into the infill. Higher values makes the skin attach better to the infill pattern and makes the skin adhere better to the walls on the layer below. Lower values save amount of material used.",
+ "unit": "mm",
+ "type": "float",
+ "default_value": 1,
+ "value": "expand_skins_expand_distance",
+ "minimum_value": "-bottom_skin_preshrink",
+ "enabled": "top_layers > 0 or bottom_layers > 0",
+ "limit_to_extruder": "top_bottom_extruder_nr",
+ "settable_per_mesh": true
+ }
+ }
+ },
+ "max_skin_angle_for_expansion":
+ {
+ "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 and will cause no skin to be expanded, while an angle of 90° is vertical and will cause all skin to be expanded.",
+ "unit": "°",
+ "type": "float",
+ "minimum_value": "0",
+ "minimum_value_warning": "2",
+ "maximum_value": "90",
+ "default_value": 90,
+ "enabled": "(top_layers > 0 or bottom_layers > 0) and (top_skin_expand_distance > 0 or bottom_skin_expand_distance > 0)",
+ "limit_to_extruder": "top_bottom_extruder_nr",
+ "settable_per_mesh": true,
+ "children":
+ {
+ "min_skin_width_for_expansion":
+ {
+ "label": "Minimum Skin Width for Expansion",
+ "description": "Skin areas narrower than this are not expanded. This avoids expanding the narrow skin areas that are created when the model surface has a slope close to the vertical.",
+ "unit": "mm",
+ "type": "float",
+ "default_value": 0,
+ "value": "top_layers * layer_height / math.tan(math.radians(max_skin_angle_for_expansion))",
+ "minimum_value": "0",
+ "enabled": "(top_layers > 0 or bottom_layers > 0) and (top_skin_expand_distance > 0 or bottom_skin_expand_distance > 0)",
+ "limit_to_extruder": "top_bottom_extruder_nr",
+ "settable_per_mesh": true
+ }
+ }
}
}
},
@@ -2017,123 +2144,6 @@
"limit_to_extruder": "infill_extruder_nr",
"settable_per_mesh": true
},
- "skin_preshrink":
- {
- "label": "Skin Removal Width",
- "description": "The largest width of skin areas which are to be removed. Every skin area smaller than this value will disappear. This can help in limiting the amount of time and material spent on printing top/bottom skin at slanted surfaces in the model.",
- "unit": "mm",
- "type": "float",
- "default_value": 1,
- "value": "wall_line_width_0 + (wall_line_count - 1) * wall_line_width_x",
- "minimum_value": "0",
- "maximum_value_warning": "wall_line_width_0 + (wall_line_count - 1) * wall_line_width_x",
- "enabled": "top_layers > 0 or bottom_layers > 0",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true,
- "children":
- {
- "top_skin_preshrink":
- {
- "label": "Top Skin Removal Width",
- "description": "The largest width of top skin areas which are to be removed. Every skin area smaller than this value will disappear. This can help in limiting the amount of time and material spent on printing top skin at slanted surfaces in the model.",
- "unit": "mm",
- "type": "float",
- "default_value": 1,
- "value": "skin_preshrink",
- "maximum_value_warning": "wall_line_width_0 + (wall_line_count - 1) * wall_line_width_x",
- "minimum_value": "0",
- "enabled": "top_layers > 0 or bottom_layers > 0",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "bottom_skin_preshrink":
- {
- "label": "Bottom Skin Removal Width",
- "description": "The largest width of bottom skin areas which are to be removed. Every skin area smaller than this value will disappear. This can help in limiting the amount of time and material spent on printing bottom skin at slanted surfaces in the model.",
- "unit": "mm",
- "type": "float",
- "default_value": 1,
- "value": "skin_preshrink",
- "maximum_value_warning": "wall_line_width_0 + (wall_line_count - 1) * wall_line_width_x",
- "minimum_value": "0",
- "enabled": "top_layers > 0 or bottom_layers > 0",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- }
- }
- },
- "expand_skins_expand_distance":
- {
- "label": "Skin Expand Distance",
- "description": "The distance the skins are expanded into the infill. Higher values makes the skin attach better to the infill pattern and makes the walls on neighboring layers adhere better to the skin. Lower values save amount of material used.",
- "unit": "mm",
- "type": "float",
- "default_value": 1,
- "value": "wall_line_width_0 + (wall_line_count - 1) * wall_line_width_x",
- "minimum_value": "-skin_preshrink",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "enabled": "top_layers > 0 or bottom_layers > 0",
- "settable_per_mesh": true,
- "children":
- {
- "top_skin_expand_distance":
- {
- "label": "Top Skin Expand Distance",
- "description": "The distance the top skins are expanded into the infill. Higher values makes the skin attach better to the infill pattern and makes the walls on the layer above adhere better to the skin. Lower values save amount of material used.",
- "unit": "mm",
- "type": "float",
- "default_value": 1,
- "value": "expand_skins_expand_distance",
- "minimum_value": "-top_skin_preshrink",
- "enabled": "top_layers > 0 or bottom_layers > 0",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- },
- "bottom_skin_expand_distance":
- {
- "label": "Bottom Skin Expand Distance",
- "description": "The distance the bottom skins are expanded into the infill. Higher values makes the skin attach better to the infill pattern and makes the skin adhere better to the walls on the layer below. Lower values save amount of material used.",
- "unit": "mm",
- "type": "float",
- "default_value": 1,
- "value": "expand_skins_expand_distance",
- "minimum_value": "-bottom_skin_preshrink",
- "enabled": "top_layers > 0 or bottom_layers > 0",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- }
- }
- },
- "max_skin_angle_for_expansion":
- {
- "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 and will cause no skin to be expanded, while an angle of 90° is vertical and will cause all skin to be expanded.",
- "unit": "°",
- "type": "float",
- "minimum_value": "0",
- "minimum_value_warning": "2",
- "maximum_value": "90",
- "default_value": 90,
- "enabled": "(top_layers > 0 or bottom_layers > 0) and (top_skin_expand_distance > 0 or bottom_skin_expand_distance > 0)",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true,
- "children":
- {
- "min_skin_width_for_expansion":
- {
- "label": "Minimum Skin Width for Expansion",
- "description": "Skin areas narrower than this are not expanded. This avoids expanding the narrow skin areas that are created when the model surface has a slope close to the vertical.",
- "unit": "mm",
- "type": "float",
- "default_value": 0,
- "value": "top_layers * layer_height / math.tan(math.radians(max_skin_angle_for_expansion))",
- "minimum_value": "0",
- "enabled": "(top_layers > 0 or bottom_layers > 0) and (top_skin_expand_distance > 0 or bottom_skin_expand_distance > 0)",
- "limit_to_extruder": "top_bottom_extruder_nr",
- "settable_per_mesh": true
- }
- }
- },
"skin_edge_support_thickness":
{
"label": "Skin Edge Support Thickness",
diff --git a/resources/definitions/trimaker_cosmosII.def.json b/resources/definitions/trimaker_cosmosII.def.json
new file mode 100644
index 0000000000..45072df1b1
--- /dev/null
+++ b/resources/definitions/trimaker_cosmosII.def.json
@@ -0,0 +1,198 @@
+{
+ "version": 2,
+ "name": "Trimaker Cosmos II",
+ "inherits": "fdmprinter",
+ "metadata": {
+ "visible": true,
+ "author": "Trimaker",
+ "manufacturer": "Trimaker",
+ "file_formats": "text/x-gcode",
+ "platform": "trimaker_cosmosII_platform.stl",
+ "platform_offset": [-110.5, -28.3, 134],
+
+ "has_machine_quality": true,
+ "preferred_quality_type": "normal",
+ "preferred_material": "redd_pla",
+
+ "has_materials": true,
+ "machine_extruder_trains": {"0": "trimaker_cosmosII_extruder"},
+ "exclude_materials": [
+ "chromatik_pla",
+ "dsm_arnitel2045_175",
+ "dsm_novamid1070_175",
+ "emotiontech_abs",
+ "emotiontech_absx",
+ "emotiontech_asax",
+ "emotiontech_bvoh",
+ "emotiontech_hips",
+ "emotiontech_petg",
+ "emotiontech_pla",
+ "emotiontech_pva-m",
+ "emotiontech_pva-oks",
+ "emotiontech_pva-s",
+ "emotiontech_tpu98a",
+ "eSUN_PETG_Black",
+ "eSUN_PETG_Grey",
+ "eSUN_PETG_Purple",
+ "eSUN_PLA_PRO_Black",
+ "eSUN_PLA_PRO_Grey",
+ "eSUN_PLA_PRO_Purple",
+ "eSUN_PLA_PRO_White",
+ "fabtotum_abs",
+ "fabtotum_nylon",
+ "fabtotum_pla",
+ "fabtotum_tpu",
+ "fiberlogy_hd_pla",
+ "filo3d_pla",
+ "filo3d_pla_green",
+ "filo3d_pla_red",
+ "generic_abs_175",
+ "generic_bam",
+ "generic_cffcpe",
+ "generic_cffpa",
+ "generic_cpe",
+ "generic_cpe_175",
+ "generic_cpe_plus",
+ "generic_gffcpe",
+ "generic_gffpa",
+ "generic_hips",
+ "generic_hips_175",
+ "generic_nylon",
+ "generic_nylon_175",
+ "generic_pc",
+ "generic_pc_175",
+ "generic_petg",
+ "generic_petg_175",
+ "generic_pla",
+ "generic_pla_175",
+ "generic_pp",
+ "generic_pva",
+ "generic_pva_175",
+ "generic_tough_pla",
+ "generic_tpu",
+ "generic_tpu_175",
+ "imade3d_petg_175",
+ "imade3d_pla_175",
+ "innofill_innoflex60_175",
+ "leapfrog_abs_natural",
+ "leapfrog_epla_natural",
+ "leapfrog_pva_natural",
+ "octofiber_pla",
+ "polyflex_pla",
+ "polymax_pla",
+ "polyplus_pla",
+ "polywood_pla",
+ "structur3d_dap100silicone",
+ "tizyx_abs",
+ "tizyx_flex",
+ "tizyx_petg",
+ "tizyx_pla",
+ "tizyx_pla_bois",
+ "tizyx_pva",
+ "ultimaker_abs_black",
+ "ultimaker_abs_blue",
+ "ultimaker_abs_green",
+ "ultimaker_abs_grey",
+ "ultimaker_abs_orange",
+ "ultimaker_abs_pearl-gold",
+ "ultimaker_abs_red",
+ "ultimaker_abs_silver-metallic",
+ "ultimaker_abs_white",
+ "ultimaker_abs_yellow",
+ "ultimaker_bam",
+ "ultimaker_cpe_black",
+ "ultimaker_cpe_blue",
+ "ultimaker_cpe_dark-grey",
+ "ultimaker_cpe_green",
+ "ultimaker_cpe_light-grey",
+ "ultimaker_cpe_plus_black",
+ "ultimaker_cpe_plus_transparent",
+ "ultimaker_cpe_plus_white",
+ "ultimaker_cpe_red",
+ "ultimaker_cpe_transparent",
+ "ultimaker_cpe_white",
+ "ultimaker_cpe_yellow",
+ "ultimaker_nylon_black",
+ "ultimaker_nylon_transparent",
+ "ultimaker_pc_black",
+ "ultimaker_pc_transparent",
+ "ultimaker_pc_white",
+ "ultimaker_pla_black",
+ "ultimaker_pla_blue",
+ "ultimaker_pla_green",
+ "ultimaker_pla_magenta",
+ "ultimaker_pla_orange",
+ "ultimaker_pla_pearl-white",
+ "ultimaker_pla_red",
+ "ultimaker_pla_silver-metallic",
+ "ultimaker_pla_transparent",
+ "ultimaker_pla_white",
+ "ultimaker_pla_yellow",
+ "ultimaker_pp_transparent",
+ "ultimaker_pva",
+ "ultimaker_tough_pla_black",
+ "ultimaker_tough_pla_green",
+ "ultimaker_tough_pla_red",
+ "ultimaker_tough_pla_white",
+ "ultimaker_tpu_black",
+ "ultimaker_tpu_blue",
+ "ultimaker_tpu_red",
+ "ultimaker_tpu_white",
+ "verbatim_bvoh_175",
+ "Vertex_Delta_ABS",
+ "Vertex_Delta_PET",
+ "Vertex_Delta_PLA",
+ "Vertex_Delta_PLA_Glitter",
+ "Vertex_Delta_PLA_Mat",
+ "Vertex_Delta_PLA_Satin",
+ "Vertex_Delta_PLA_Wood",
+ "Vertex_Delta_TPU",
+ "zyyx_pro_flex",
+ "zyyx_pro_pla"
+ ]
+ },
+
+ "overrides": {
+
+ "machine_name": {"default_value": "Trimaker Cosmos II"},
+ "machine_width": {"default_value": 200},
+ "machine_depth": {"default_value": 200},
+ "machine_height": {"default_value": 200},
+
+ "layer_height": {"default_value": 0.2},
+ "material_flow": {"value": 100},
+ "xy_offset": {"default_value": 0},
+ "xy_offset_layer_0": {"value": -0.1},
+ "wall_thickness": {"value": "line_width * 3" },
+ "top_bottom_thickness": {"value": "layer_height * 6"},
+ "infill_sparse_density": {"default_value": 25},
+ "infill_pattern": {"value": "'grid'"},
+ "infill_sparse_thickness": {"value": "resolveOrValue('layer_height')"},
+ "default_material_bed_temperature": {"default_value": 60},
+ "default_material_print_temperature": {"default_value": 200},
+ "speed_print": {"default_value": 45},
+ "speed_travel": {"value": "speed_print if magic_spiralize else 100"},
+ "speed_wall_0": {"value": 35},
+ "speed_wall_x": {"value": 45},
+ "retraction_enable": {"default_value": true},
+ "retraction_amount": {"default_value": 1},
+ "retraction_speed": {"default_value": 45},
+ "cool_fan_enabled": {"default_value": true},
+ "cool_fan_speed": {"value": "100.0 if cool_fan_enabled else 0.0"},
+ "support_enable": {"default_value": true},
+ "support_type": {"default_value": "everywhere"},
+ "support_angle": {"default_value": 50},
+ "support_pattern": {"default_value": "zigzag"},
+ "support_z_distance": {"default_value": 0.17},
+ "support_xy_distance": {"default_value": 0.7},
+ "adhesion_type": {"default_value": "skirt"},
+
+ "gantry_height": {"value": 2},
+ "machine_start_gcode": {"default_value": ";Start GCode - Cosmos II - 3.x.x_SEGcTK_1.1\n M104 S120; Comienzo a calentar extrusor\n G21; Unidades en mm\n G90; absolute positioning\n M82; set extruder to absolute mode\n M107; Apagar FAN\n G28; Home\n M190 S{material_bed_temperature_layer_0}\n G29; Senso la cama\n M500\n G1 F5000 X0.5 Y0.5\n M109 S{material_print_temperature}\n M900 K0.04\n G1 F200 Z10\n G92 E0; Defino cero en la posición del actual del extrusor\n G1 F200 X0.5 Y0.5 Z0.300; Posiciono antes de hacer una línea\n G1 F900 X0.5 Y51.5 E2.56436; Hago una línea\n "},
+ "machine_end_gcode": {"default_value": ";CODIGO FINAL\n M107; Fan off\n G90; Set to absolute positioning\n G1 X0 Y0 Z201; Get extruder out of way\n G92 E0; Reset extruder position\n G1 E-1; Reduce filament pressure\n G92 E0; Reset extruder position again\n M140 S0; Disable heated bed\n M104 S0; Disable extruder\n M84; Turn steppers off"},
+ "machine_heated_bed": {"default_value": true},
+ "material_diameter": {"default_value": 1.75},
+ "machine_center_is_zero": {"default_value": false}
+
+ }
+}
diff --git a/resources/definitions/trimaker_nebula.def.json b/resources/definitions/trimaker_nebula.def.json
new file mode 100644
index 0000000000..46e57f96e5
--- /dev/null
+++ b/resources/definitions/trimaker_nebula.def.json
@@ -0,0 +1,198 @@
+{
+ "version": 2,
+ "name": "Trimaker Nebula",
+ "inherits": "fdmprinter",
+ "metadata": {
+ "visible": true,
+ "author": "Trimaker",
+ "manufacturer": "Trimaker",
+ "file_formats": "text/x-gcode",
+ "platform": "trimaker_nebula_platform.stl",
+
+ "has_machine_quality": true,
+ "preferred_quality_type": "normal",
+ "preferred_material": "redd_pla",
+
+ "platform_offset": [-117.5, -40, 147.5],
+ "has_materials": true,
+ "machine_extruder_trains": {"0": "trimaker_nebula_extruder"},
+ "exclude_materials": [
+ "chromatik_pla",
+ "dsm_arnitel2045_175",
+ "dsm_novamid1070_175",
+ "emotiontech_abs",
+ "emotiontech_absx",
+ "emotiontech_asax",
+ "emotiontech_bvoh",
+ "emotiontech_hips",
+ "emotiontech_petg",
+ "emotiontech_pla",
+ "emotiontech_pva-m",
+ "emotiontech_pva-oks",
+ "emotiontech_pva-s",
+ "emotiontech_tpu98a",
+ "eSUN_PETG_Black",
+ "eSUN_PETG_Grey",
+ "eSUN_PETG_Purple",
+ "eSUN_PLA_PRO_Black",
+ "eSUN_PLA_PRO_Grey",
+ "eSUN_PLA_PRO_Purple",
+ "eSUN_PLA_PRO_White",
+ "fabtotum_abs",
+ "fabtotum_nylon",
+ "fabtotum_pla",
+ "fabtotum_tpu",
+ "fiberlogy_hd_pla",
+ "filo3d_pla",
+ "filo3d_pla_green",
+ "filo3d_pla_red",
+ "generic_abs_175",
+ "generic_bam",
+ "generic_cffcpe",
+ "generic_cffpa",
+ "generic_cpe",
+ "generic_cpe_175",
+ "generic_cpe_plus",
+ "generic_gffcpe",
+ "generic_gffpa",
+ "generic_hips",
+ "generic_hips_175",
+ "generic_nylon",
+ "generic_nylon_175",
+ "generic_pc",
+ "generic_pc_175",
+ "generic_petg",
+ "generic_petg_175",
+ "generic_pla",
+ "generic_pla_175",
+ "generic_pp",
+ "generic_pva",
+ "generic_pva_175",
+ "generic_tough_pla",
+ "generic_tpu",
+ "generic_tpu_175",
+ "imade3d_petg_175",
+ "imade3d_pla_175",
+ "innofill_innoflex60_175",
+ "leapfrog_abs_natural",
+ "leapfrog_epla_natural",
+ "leapfrog_pva_natural",
+ "octofiber_pla",
+ "polyflex_pla",
+ "polymax_pla",
+ "polyplus_pla",
+ "polywood_pla",
+ "structur3d_dap100silicone",
+ "tizyx_abs",
+ "tizyx_flex",
+ "tizyx_petg",
+ "tizyx_pla",
+ "tizyx_pla_bois",
+ "tizyx_pva",
+ "ultimaker_abs_black",
+ "ultimaker_abs_blue",
+ "ultimaker_abs_green",
+ "ultimaker_abs_grey",
+ "ultimaker_abs_orange",
+ "ultimaker_abs_pearl-gold",
+ "ultimaker_abs_red",
+ "ultimaker_abs_silver-metallic",
+ "ultimaker_abs_white",
+ "ultimaker_abs_yellow",
+ "ultimaker_bam",
+ "ultimaker_cpe_black",
+ "ultimaker_cpe_blue",
+ "ultimaker_cpe_dark-grey",
+ "ultimaker_cpe_green",
+ "ultimaker_cpe_light-grey",
+ "ultimaker_cpe_plus_black",
+ "ultimaker_cpe_plus_transparent",
+ "ultimaker_cpe_plus_white",
+ "ultimaker_cpe_red",
+ "ultimaker_cpe_transparent",
+ "ultimaker_cpe_white",
+ "ultimaker_cpe_yellow",
+ "ultimaker_nylon_black",
+ "ultimaker_nylon_transparent",
+ "ultimaker_pc_black",
+ "ultimaker_pc_transparent",
+ "ultimaker_pc_white",
+ "ultimaker_pla_black",
+ "ultimaker_pla_blue",
+ "ultimaker_pla_green",
+ "ultimaker_pla_magenta",
+ "ultimaker_pla_orange",
+ "ultimaker_pla_pearl-white",
+ "ultimaker_pla_red",
+ "ultimaker_pla_silver-metallic",
+ "ultimaker_pla_transparent",
+ "ultimaker_pla_white",
+ "ultimaker_pla_yellow",
+ "ultimaker_pp_transparent",
+ "ultimaker_pva",
+ "ultimaker_tough_pla_black",
+ "ultimaker_tough_pla_green",
+ "ultimaker_tough_pla_red",
+ "ultimaker_tough_pla_white",
+ "ultimaker_tpu_black",
+ "ultimaker_tpu_blue",
+ "ultimaker_tpu_red",
+ "ultimaker_tpu_white",
+ "verbatim_bvoh_175",
+ "Vertex_Delta_ABS",
+ "Vertex_Delta_PET",
+ "Vertex_Delta_PLA",
+ "Vertex_Delta_PLA_Glitter",
+ "Vertex_Delta_PLA_Mat",
+ "Vertex_Delta_PLA_Satin",
+ "Vertex_Delta_PLA_Wood",
+ "Vertex_Delta_TPU",
+ "zyyx_pro_flex",
+ "zyyx_pro_pla"
+ ]
+ },
+
+ "overrides": {
+
+ "machine_name": {"default_value": "Trimaker Nebula"},
+ "machine_width": {"default_value": 230},
+ "machine_depth": {"default_value": 230},
+ "machine_height": {"default_value": 260},
+
+ "layer_height": {"default_value": 0.2},
+ "material_flow": {"value": 100},
+ "xy_offset": {"default_value": 0},
+ "xy_offset_layer_0": {"value": -0.1},
+ "wall_thickness": {"value": "line_width * 3" },
+ "top_bottom_thickness": {"value": "layer_height * 6"},
+ "infill_sparse_density": {"default_value": 25},
+ "infill_pattern": {"value": "'grid'"},
+ "infill_sparse_thickness": {"value": "resolveOrValue('layer_height')"},
+ "default_material_bed_temperature": {"default_value": 60},
+ "default_material_print_temperature": {"default_value": 200},
+ "speed_print": {"default_value": 45},
+ "speed_travel": {"value": "speed_print if magic_spiralize else 100"},
+ "speed_wall_0": {"value": 35},
+ "speed_wall_x": {"value": 45},
+ "retraction_enable": {"default_value": true},
+ "retraction_amount": {"default_value": 1},
+ "retraction_speed": {"default_value": 45},
+ "cool_fan_enabled": {"default_value": true},
+ "cool_fan_speed": {"value": "100.0 if cool_fan_enabled else 0.0"},
+ "support_enable": {"default_value": true},
+ "support_type": {"default_value": "everywhere"},
+ "support_angle": {"default_value": 50},
+ "support_pattern": {"default_value": "zigzag"},
+ "support_z_distance": {"default_value": 0.17},
+ "support_xy_distance": {"default_value": 0.7},
+ "adhesion_type": {"default_value": "skirt"},
+
+ "gantry_height": {"value": 2},
+ "machine_start_gcode": {"default_value": ";Trimaker Nebula Start Code\n G21; Unidades en mm\n G90; Posicion absoluta\n M82; Extrusor en modo absoluto\n M107; Fan apagado\n G28 X Y Z; Enviamos a home a todos los ejes\n M900 K=0; Linear advance desactivado\n M104 S110; Precalentamos el extrusor hasta 110 grados\n M190 S{material_bed_temperature_layer_0}; Calentamos cama y esperamos\n M109 S{material_print_temperature}; Calentamos extrusor y esperamos\n G92 E0; E=0\n G1 F200 X0.5 Y0.5 Z0.300\n G1 F900 X0.5 Y51.5 E2.56436; Hacemos una linea para limpiar extrusor\n"},
+ "machine_end_gcode": {"default_value": ";Trimaker Nebula End Code\n M107; Apagamos fan\n G90\n G92 E0\n G1 X0 Y200\n G91\n G1 Z5\n G92 E0\n M140 S0; Enfriamos\n M104 S0; Enfriamos\n M84\n G90\n M117 Impresion finalizada\n M300 S440 P700\n"},
+ "machine_heated_bed": {"default_value": true},
+ "material_diameter": {"default_value": 1.75},
+ "machine_center_is_zero": {"default_value": false}
+
+ }
+}
diff --git a/resources/extruders/trimaker_cosmosII_extruder.def.json b/resources/extruders/trimaker_cosmosII_extruder.def.json
new file mode 100644
index 0000000000..87c9394d96
--- /dev/null
+++ b/resources/extruders/trimaker_cosmosII_extruder.def.json
@@ -0,0 +1,15 @@
+{
+ "version": 2,
+ "name": "Extruder 1",
+ "inherits": "fdmextruder",
+ "metadata": {
+ "machine": "trimaker_cosmosII",
+ "position": "0"
+ },
+
+ "overrides": {
+ "extruder_nr": { "default_value": 0 },
+ "machine_nozzle_size": { "default_value": 0.4 },
+ "material_diameter": { "default_value": 1.75 }
+ }
+}
diff --git a/resources/extruders/trimaker_nebula_extruder.def.json b/resources/extruders/trimaker_nebula_extruder.def.json
new file mode 100644
index 0000000000..6dbd251edc
--- /dev/null
+++ b/resources/extruders/trimaker_nebula_extruder.def.json
@@ -0,0 +1,15 @@
+{
+ "version": 2,
+ "name": "Extruder 1",
+ "inherits": "fdmextruder",
+ "metadata": {
+ "machine": "trimaker_nebula",
+ "position": "0"
+ },
+
+ "overrides": {
+ "extruder_nr": { "default_value": 0 },
+ "machine_nozzle_size": { "default_value": 0.4 },
+ "material_diameter": { "default_value": 1.75 }
+ }
+}
diff --git a/resources/meshes/trimaker_cosmosII_platform.stl b/resources/meshes/trimaker_cosmosII_platform.stl
new file mode 100644
index 0000000000..dadebf5e81
--- /dev/null
+++ b/resources/meshes/trimaker_cosmosII_platform.stl
Binary files differ
diff --git a/resources/meshes/trimaker_nebula_platform.stl b/resources/meshes/trimaker_nebula_platform.stl
new file mode 100644
index 0000000000..f4f4c7b0be
--- /dev/null
+++ b/resources/meshes/trimaker_nebula_platform.stl
Binary files differ
diff --git a/resources/qml/Cura.qml b/resources/qml/Cura.qml
index bb7b5ac19c..7772cc041a 100644
--- a/resources/qml/Cura.qml
+++ b/resources/qml/Cura.qml
@@ -691,6 +691,9 @@ UM.MainWindow
function handleOpenFiles(selectedMultipleFiles, hasProjectFile, fileUrlList, projectFileUrlList)
{
+ // Make sure the files opened through the openFilesIncludingProjectDialog are added to the recent files list
+ openFilesIncludingProjectsDialog.addToRecent = true;
+
// we only allow opening one project file
if (selectedMultipleFiles && hasProjectFile)
{
@@ -717,6 +720,7 @@ UM.MainWindow
{
// ask whether to open as project or as models
askOpenAsProjectOrModelsDialog.fileUrl = projectFile;
+ askOpenAsProjectOrModelsDialog.addToRecent = true;
askOpenAsProjectOrModelsDialog.show();
}
}
@@ -776,6 +780,7 @@ UM.MainWindow
onOpenProjectFile:
{
askOpenAsProjectOrModelsDialog.fileUrl = project_file;
+ askOpenAsProjectOrModelsDialog.addToRecent = add_to_recent_files;
askOpenAsProjectOrModelsDialog.show();
}
}
diff --git a/resources/qml/Dialogs/AskOpenAsProjectOrModelsDialog.qml b/resources/qml/Dialogs/AskOpenAsProjectOrModelsDialog.qml
index 8c29fc7845..ba0d3fb6ca 100644
--- a/resources/qml/Dialogs/AskOpenAsProjectOrModelsDialog.qml
+++ b/resources/qml/Dialogs/AskOpenAsProjectOrModelsDialog.qml
@@ -29,6 +29,7 @@ UM.Dialog
modality: Qt.WindowModal
property var fileUrl
+ property var addToRecent: true //Whether to add this file to the recent files list after reading it.
// load the entire project
function loadProjectFile() {
@@ -37,8 +38,7 @@ UM.Dialog
UM.Preferences.setValue("cura/choice_on_open_project", "open_as_project")
}
- var addToRecent = UM.WorkspaceFileHandler.getAddToRecentFilesHint(base.fileUrl);
- UM.WorkspaceFileHandler.readLocalFile(base.fileUrl, addToRecent);
+ UM.WorkspaceFileHandler.readLocalFile(base.fileUrl, base.addToRecent);
base.hide()
}
@@ -50,7 +50,7 @@ UM.Dialog
UM.Preferences.setValue("cura/choice_on_open_project", "open_as_model")
}
- CuraApplication.readLocalFile(base.fileUrl, "open_as_model")
+ CuraApplication.readLocalFile(base.fileUrl, "open_as_model", base.addToRecent)
base.hide()
}
diff --git a/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml b/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml
index 2ba8a409ef..3f1900c66b 100644
--- a/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml
+++ b/resources/qml/Dialogs/OpenFilesIncludingProjectsDialog.qml
@@ -28,19 +28,19 @@ UM.Dialog
modality: Qt.WindowModal
property var fileUrls: []
+ property var addToRecent: true
property int spacerHeight: 10 * screenScaleFactor
function loadProjectFile(projectFile)
{
- var addToRecent = UM.WorkspaceFileHandler.getAddToRecentFilesHint(projectFile);
- UM.WorkspaceFileHandler.readLocalFile(projectFile, addToRecent);
+ UM.WorkspaceFileHandler.readLocalFile(projectFile, base.addToRecent);
}
function loadModelFiles(fileUrls)
{
for (var i in fileUrls)
{
- CuraApplication.readLocalFile(fileUrls[i], "open_as_model");
+ CuraApplication.readLocalFile(fileUrls[i], "open_as_model", base.addToRecent);
}
}
diff --git a/resources/quality/trimaker_cosmosII/trimaker_cosmosII_fast.inst.cfg b/resources/quality/trimaker_cosmosII/trimaker_cosmosII_fast.inst.cfg
new file mode 100644
index 0000000000..76b2004487
--- /dev/null
+++ b/resources/quality/trimaker_cosmosII/trimaker_cosmosII_fast.inst.cfg
@@ -0,0 +1,15 @@
+[general]
+version = 4
+name = Fast
+definition = trimaker_cosmosII
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = fast
+weight = 1
+global_quality = True
+
+[values]
+layer_height = 0.3
+speed_print = 60 \ No newline at end of file
diff --git a/resources/quality/trimaker_cosmosII/trimaker_cosmosII_normal.inst.cfg b/resources/quality/trimaker_cosmosII/trimaker_cosmosII_normal.inst.cfg
new file mode 100644
index 0000000000..9c6d8a1426
--- /dev/null
+++ b/resources/quality/trimaker_cosmosII/trimaker_cosmosII_normal.inst.cfg
@@ -0,0 +1,15 @@
+[general]
+version = 4
+name = Normal
+definition = trimaker_cosmosII
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = normal
+weight = 0
+global_quality = True
+
+[values]
+layer_height = 0.2
+speed_print = 45
diff --git a/resources/quality/trimaker_cosmosII/trimaker_cosmosII_slow.inst.cfg b/resources/quality/trimaker_cosmosII/trimaker_cosmosII_slow.inst.cfg
new file mode 100644
index 0000000000..c1074f44a6
--- /dev/null
+++ b/resources/quality/trimaker_cosmosII/trimaker_cosmosII_slow.inst.cfg
@@ -0,0 +1,15 @@
+[general]
+version = 4
+name = Slow
+definition = trimaker_cosmosII
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = slow
+weight = -1
+global_quality = True
+
+[values]
+layer_height = 0.1
+speed_print = 30 \ No newline at end of file
diff --git a/resources/quality/trimaker_nebula/trimaker_nebula_fast.inst.cfg b/resources/quality/trimaker_nebula/trimaker_nebula_fast.inst.cfg
new file mode 100644
index 0000000000..9ea35c1ffc
--- /dev/null
+++ b/resources/quality/trimaker_nebula/trimaker_nebula_fast.inst.cfg
@@ -0,0 +1,15 @@
+[general]
+version = 4
+name = Fast
+definition = trimaker_nebula
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = fast
+weight = 1
+global_quality = True
+
+[values]
+layer_height = 0.3
+speed_print = 60 \ No newline at end of file
diff --git a/resources/quality/trimaker_nebula/trimaker_nebula_normal.inst.cfg b/resources/quality/trimaker_nebula/trimaker_nebula_normal.inst.cfg
new file mode 100644
index 0000000000..05bb132f0e
--- /dev/null
+++ b/resources/quality/trimaker_nebula/trimaker_nebula_normal.inst.cfg
@@ -0,0 +1,15 @@
+[general]
+version = 4
+name = Normal
+definition = trimaker_nebula
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = normal
+weight = 0
+global_quality = True
+
+[values]
+layer_height = 0.2
+speed_print = 45
diff --git a/resources/quality/trimaker_nebula/trimaker_nebula_slow.inst.cfg b/resources/quality/trimaker_nebula/trimaker_nebula_slow.inst.cfg
new file mode 100644
index 0000000000..cee4fd8360
--- /dev/null
+++ b/resources/quality/trimaker_nebula/trimaker_nebula_slow.inst.cfg
@@ -0,0 +1,15 @@
+[general]
+version = 4
+name = Slow
+definition = trimaker_nebula
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = slow
+weight = -1
+global_quality = True
+
+[values]
+layer_height = 0.1
+speed_print = 30 \ No newline at end of file
diff --git a/resources/setting_visibility/advanced.cfg b/resources/setting_visibility/advanced.cfg
index 04f254e55d..dd44df06e9 100644
--- a/resources/setting_visibility/advanced.cfg
+++ b/resources/setting_visibility/advanced.cfg
@@ -21,14 +21,17 @@ wall_0_extruder_nr
wall_x_extruder_nr
wall_thickness
wall_line_count
+optimize_wall_printing_order
+fill_perimeter_gaps
+xy_offset
+
+[top_bottom]
top_bottom_extruder_nr
top_bottom_thickness
top_thickness
top_layers
bottom_thickness
bottom_layers
-optimize_wall_printing_order
-xy_offset
ironing_enabled
[infill]
diff --git a/resources/setting_visibility/basic.cfg b/resources/setting_visibility/basic.cfg
index 82045db93b..f23d498c7e 100644
--- a/resources/setting_visibility/basic.cfg
+++ b/resources/setting_visibility/basic.cfg
@@ -10,12 +10,14 @@ layer_height
[shell]
wall_thickness
wall_line_count
+xy_offset
+
+[top_bottom]
top_bottom_thickness
top_thickness
top_layers
bottom_thickness
bottom_layers
-xy_offset
[infill]
infill_sparse_density
diff --git a/resources/setting_visibility/expert.cfg b/resources/setting_visibility/expert.cfg
index e8206f03f2..d814339669 100644
--- a/resources/setting_visibility/expert.cfg
+++ b/resources/setting_visibility/expert.cfg
@@ -28,17 +28,6 @@ wall_x_extruder_nr
wall_thickness
wall_line_count
wall_0_wipe_dist
-roofing_layer_count
-top_bottom_extruder_nr
-top_bottom_thickness
-top_thickness
-top_layers
-bottom_thickness
-bottom_layers
-top_bottom_pattern
-top_bottom_pattern_0
-connect_skin_polygons
-skin_angles
wall_0_inset
optimize_wall_printing_order
outer_inset_first
@@ -54,6 +43,19 @@ z_seam_x
z_seam_y
z_seam_corner
z_seam_relative
+
+[top_bottom]
+roofing_layer_count
+top_bottom_extruder_nr
+top_bottom_thickness
+top_thickness
+top_layers
+bottom_thickness
+bottom_layers
+top_bottom_pattern
+top_bottom_pattern_0
+connect_skin_polygons
+skin_angles
skin_no_small_gaps_heuristic
skin_outline_count
ironing_enabled
diff --git a/resources/themes/cura-light/icons/category_topbottom.svg b/resources/themes/cura-light/icons/category_topbottom.svg
new file mode 100644
index 0000000000..7efefbd4bb
--- /dev/null
+++ b/resources/themes/cura-light/icons/category_topbottom.svg
@@ -0,0 +1,7 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 30">
+ <g stroke-width="1" stroke="black">
+ <polygon fill="none" points="6.5,3.5 9.5,11 3.5,26.5 26.5,26.5 20.5,11 23.5,3.5" />
+ <line x1="7.5" y1="6" x2="22.5" y2="6" />
+ <line x1="4.5" y1="24" x2="25.5" y2="24" />
+ </g>
+</svg> \ No newline at end of file
diff --git a/run_mypy.py b/run_mypy.py
index ec0583d43f..4486085064 100644
--- a/run_mypy.py
+++ b/run_mypy.py
@@ -73,7 +73,7 @@ def main():
for i, returncode in enumerate(pool.imap(partial(call, shell=True), commands)):
if returncode != 0:
- print("\nCommand %s failed checking. :(" % commands[i])
+ print("\nCommand {command} failed checking (code {errcode}). :(".format(command = commands[i], errcode = returncode))
success_code = 1
if success_code:
print("MYPY check was completed, but did not pass")