Merge branch 'master' into feature_dark_colours_icons

CURA-4148

Resolve merge conflicts.
This commit is contained in:
Lipu Fei 2017-08-28 11:13:38 +02:00
commit 3fbdb27e8e
109 changed files with 614 additions and 377 deletions

1
.gitignore vendored
View file

@ -6,6 +6,7 @@ __pycache__
docs/html docs/html
*.log *.log
resources/i18n/en resources/i18n/en
resources/i18n/7s
resources/i18n/x-test resources/i18n/x-test
resources/firmware resources/firmware
resources/materials resources/materials

View file

@ -50,12 +50,11 @@ Third party plugins
* [X3G Writer](https://github.com/Ghostkeeper/X3GWriter): Adds support for exporting X3G files. * [X3G Writer](https://github.com/Ghostkeeper/X3GWriter): Adds support for exporting X3G files.
* [Auto orientation](https://github.com/nallath/CuraOrientationPlugin): Calculate the optimal orientation for a model. * [Auto orientation](https://github.com/nallath/CuraOrientationPlugin): Calculate the optimal orientation for a model.
* [OctoPrint Plugin](https://github.com/fieldofview/OctoPrintPlugin): Send printjobs directly to OctoPrint and monitor their progress in Cura. * [OctoPrint Plugin](https://github.com/fieldofview/OctoPrintPlugin): Send printjobs directly to OctoPrint and monitor their progress in Cura.
* [WirelessPrinting Plugin](https://github.com/probonopd/WirelessPrinting): Print wirelessly from Cura to your 3D printer connected to an ESP8266 module.
* [Electric Print Cost Calculator Plugin](https://github.com/zoff99/ElectricPrintCostCalculator): Calculate the electric costs of a print. * [Electric Print Cost Calculator Plugin](https://github.com/zoff99/ElectricPrintCostCalculator): Calculate the electric costs of a print.
Making profiles for other printers Making profiles for other printers
---------------------------------- ----------------------------------
There are two ways of doing it. You can either use the generator [here](http://quillford.github.io/CuraProfileMaker/) or you can use [this](https://github.com/Ultimaker/Cura/blob/master/resources/definitions/ultimaker_original.def.json) as a template. If your make of printer is not in the list of supported printers, and using the "Custom FDM Printer" does not offer enough flexibility, you can use [this](https://github.com/Ultimaker/Cura/blob/master/resources/definitions/ultimaker_original.def.json) as a template.
* Change the machine ID to something unique * Change the machine ID to something unique
* Change the machine_name to your printer's name * Change the machine_name to your printer's name
@ -63,12 +62,12 @@ There are two ways of doing it. You can either use the generator [here](http://q
* Set your machine's dimensions with machine_width, machine_depth, and machine_height * Set your machine's dimensions with machine_width, machine_depth, and machine_height
* If your printer's origin is in the center of the bed, set machine_center_is_zero to true. * If your printer's origin is in the center of the bed, set machine_center_is_zero to true.
* Set your print head dimensions with the machine_head_shape parameters * Set your print head dimensions with the machine_head_shape parameters
* Set the nozzle offset with machine_nozzle_offset_x and machine_nozzle_offset_y
* Set the start and end gcode in machine_start_gcode and machine_end_gcode * Set the start and end gcode in machine_start_gcode and machine_end_gcode
* If your printer has a heated bed, set visible to true under material_bed_temperature
Once you are done, put the profile you have made into resources/definitions, or in definitions in your cura profile folder. Once you are done, put the profile you have made into resources/definitions, or in definitions in your cura profile folder.
If you want to make a definition for a multi-extrusion printer, have a look at [this](https://github.com/Ultimaker/Cura/blob/master/resources/definitions/ultimaker_original_dual.def.json) as a template, along with the two extruder definitions it references [here](https://github.com/Ultimaker/Cura/blob/master/resources/extruders/ultimaker_original_dual_1st.def.json) and [here](https://github.com/Ultimaker/Cura/blob/master/resources/extruders/ultimaker_original_dual_2nd.def.json)
Translating Cura Translating Cura
---------------- ----------------
If you'd like to contribute a translation of Cura, please first look for [any existing translation](https://github.com/Ultimaker/Cura/tree/master/resources/i18n). If your language is already there in the source code but not in Cura's interface, it may be partially translated. If you'd like to contribute a translation of Cura, please first look for [any existing translation](https://github.com/Ultimaker/Cura/tree/master/resources/i18n). If your language is already there in the source code but not in Cura's interface, it may be partially translated.
@ -89,4 +88,4 @@ To submit your translation, ideally you would make two pull requests where all `
After the translation is submitted, the Cura maintainers will check for its completeness and check whether it is consistent. We will take special care to look for common mistakes, such as translating mark-up `<message>` code and such. We are often not fluent in every language, so we expect the translator and the international users to make corrections where necessary. Of course, there will always be some mistakes in every translation. After the translation is submitted, the Cura maintainers will check for its completeness and check whether it is consistent. We will take special care to look for common mistakes, such as translating mark-up `<message>` code and such. We are often not fluent in every language, so we expect the translator and the international users to make corrections where necessary. Of course, there will always be some mistakes in every translation.
When the next Cura release comes around, some of the texts will have changed and some new texts will have been added. Around the time when the beta is released we will invoke a string freeze, meaning that no developer is allowed to make changes to the texts. Then we will update the translation template `.pot` files and ask all our translators to update their translations. If you are unable to update the translation in time for the actual release, we will remove the language from the drop-down menu in the Preferences window. The translation stays in Cura however, so that someone might pick it up again later and update it with the newest texts. Also, users who had previously selected the language can still continue Cura in their language but English text will appear among the original text. When the next Cura release comes around, some of the texts will have changed and some new texts will have been added. Around the time when the beta is released we will invoke a string freeze, meaning that no developer is allowed to make changes to the texts. Then we will update the translation template `.pot` files and ask all our translators to update their translations. If you are unable to update the translation in time for the actual release, we will remove the language from the drop-down menu in the Preferences window. The translation stays in Cura however, so that someone might pick it up again later and update it with the newest texts. Also, users who had previously selected the language can still continue Cura in their language but English text will appear among the original text.

View file

@ -1,4 +1,4 @@
# Copyright (c) 2016 Ultimaker B.V. # Copyright (c) 2017 Ultimaker B.V.
# Cura is released under the terms of the AGPLv3 or higher. # Cura is released under the terms of the AGPLv3 or higher.
from cura.Settings.ExtruderManager import ExtruderManager from cura.Settings.ExtruderManager import ExtruderManager
@ -27,8 +27,9 @@ import math
from typing import List from typing import List
# Setting for clearance around the prime PRIME_CLEARANCE = 6.5 #Setting for clearance around the prime.
PRIME_CLEARANCE = 6.5 MAJOR_GRID_SIZE = 10 #Size of the grid cells.
MINOR_GRID_SIZE = 1
## Build volume is a special kind of node that is responsible for rendering the printable area & disallowed areas. ## Build volume is a special kind of node that is responsible for rendering the printable area & disallowed areas.
@ -44,6 +45,8 @@ class BuildVolume(SceneNode):
self._z_axis_color = None self._z_axis_color = None
self._disallowed_area_color = None self._disallowed_area_color = None
self._error_area_color = None self._error_area_color = None
self._grid_color = None
self._grid_minor_color = None
self._width = 0 self._width = 0
self._height = 0 self._height = 0
@ -56,8 +59,9 @@ class BuildVolume(SceneNode):
self._origin_line_length = 20 self._origin_line_length = 20
self._origin_line_width = 0.5 self._origin_line_width = 0.5
self._plate_mesh = None
self._grid_mesh = None self._grid_mesh = None
self._grid_shader = None self._plate_shader = None
self._disallowed_areas = [] self._disallowed_areas = []
self._disallowed_area_mesh = None self._disallowed_area_mesh = None
@ -167,14 +171,15 @@ class BuildVolume(SceneNode):
if not self._shader: if not self._shader:
self._shader = OpenGL.getInstance().createShaderProgram(Resources.getPath(Resources.Shaders, "default.shader")) self._shader = OpenGL.getInstance().createShaderProgram(Resources.getPath(Resources.Shaders, "default.shader"))
self._grid_shader = OpenGL.getInstance().createShaderProgram(Resources.getPath(Resources.Shaders, "grid.shader")) self._plate_shader = OpenGL.getInstance().createShaderProgram(Resources.getPath(Resources.Shaders, "color.shader"))
theme = Application.getInstance().getTheme() theme = Application.getInstance().getTheme()
self._grid_shader.setUniformValue("u_gridColor0", Color(*theme.getColor("buildplate").getRgb())) self._plate_shader.setUniformValue("u_color", Color(*theme.getColor("buildplate").getRgb()))
self._grid_shader.setUniformValue("u_gridColor1", Color(*theme.getColor("buildplate_alt").getRgb())) self._plate_shader.setUniformValue("u_z_bias", 0.000001)
renderer.queueNode(self, mode = RenderBatch.RenderMode.Lines) renderer.queueNode(self, mode = RenderBatch.RenderMode.Lines)
renderer.queueNode(self, mesh = self._origin_mesh) renderer.queueNode(self, mesh = self._origin_mesh)
renderer.queueNode(self, mesh = self._grid_mesh, shader = self._grid_shader, backface_cull = True) renderer.queueNode(self, mesh = self._plate_mesh, shader = self._plate_shader, backface_cull = True)
renderer.queueNode(self, mesh = self._grid_mesh, mode = RenderBatch.RenderMode.Lines, transparent = True)
if self._disallowed_area_mesh: if self._disallowed_area_mesh:
renderer.queueNode(self, mesh = self._disallowed_area_mesh, shader = self._shader, transparent = True, backface_cull = True, sort = -9) renderer.queueNode(self, mesh = self._disallowed_area_mesh, shader = self._shader, transparent = True, backface_cull = True, sort = -9)
@ -247,6 +252,8 @@ class BuildVolume(SceneNode):
self._z_axis_color = Color(*theme.getColor("z_axis").getRgb()) self._z_axis_color = Color(*theme.getColor("z_axis").getRgb())
self._disallowed_area_color = Color(*theme.getColor("disallowed_area").getRgb()) self._disallowed_area_color = Color(*theme.getColor("disallowed_area").getRgb())
self._error_area_color = Color(*theme.getColor("error_area").getRgb()) self._error_area_color = Color(*theme.getColor("error_area").getRgb())
self._grid_color = Color(*theme.getColor("buildplate_grid").getRgb())
self._grid_minor_color = Color(*theme.getColor("buildplate_grid_minor").getRgb())
min_w = -self._width / 2 min_w = -self._width / 2
max_w = self._width / 2 max_w = self._width / 2
@ -277,7 +284,7 @@ class BuildVolume(SceneNode):
self.setMeshData(mb.build()) self.setMeshData(mb.build())
# Build plate grid mesh # Build plate surface.
mb = MeshBuilder() mb = MeshBuilder()
mb.addQuad( mb.addQuad(
Vector(min_w, min_h - z_fight_distance, min_d), Vector(min_w, min_h - z_fight_distance, min_d),
@ -289,6 +296,30 @@ class BuildVolume(SceneNode):
for n in range(0, 6): for n in range(0, 6):
v = mb.getVertex(n) v = mb.getVertex(n)
mb.setVertexUVCoordinates(n, v[0], v[2]) mb.setVertexUVCoordinates(n, v[0], v[2])
self._plate_mesh = mb.build()
#Build plate grid mesh.
mb = MeshBuilder()
for x in range(0, int(math.ceil(max_w)), MAJOR_GRID_SIZE):
mb.addLine(Vector(x, min_h, min_d), Vector(x, min_h, max_d), color = self._grid_color)
#Start from 0 in both cases, so you need to do this in two for loops.
mb.addLine(Vector(-x, min_h, min_d), Vector(-x, min_h, max_d), color = self._grid_color)
for y in range(0, int(math.ceil(max_d)), MAJOR_GRID_SIZE):
mb.addLine(Vector(min_w, min_h, y), Vector(max_w, min_h, y), color = self._grid_color)
mb.addLine(Vector(min_w, min_h, -y), Vector(max_w, min_h, -y), color = self._grid_color)
#More fine grained grid.
for x in range(0, int(math.ceil(max_w)), MINOR_GRID_SIZE):
if x % MAJOR_GRID_SIZE == 0: #Don't overlap with the major grid.
pass
mb.addLine(Vector(x, min_h, min_d), Vector(x, min_h, max_d), color = self._grid_minor_color)
mb.addLine(Vector(-x, min_h, min_d), Vector(-x, min_h, max_d), color = self._grid_minor_color)
for y in range(0, int(math.ceil(max_d)), MINOR_GRID_SIZE):
if y % MAJOR_GRID_SIZE == 0:
pass
mb.addLine(Vector(min_w, min_h, y), Vector(max_w, min_h, y), color = self._grid_minor_color)
mb.addLine(Vector(min_w, min_h, -y), Vector(max_w, min_h, -y), color = self._grid_minor_color)
self._grid_mesh = mb.build() self._grid_mesh = mb.build()
else: else:
@ -304,7 +335,7 @@ class BuildVolume(SceneNode):
mb.addArc(max_w, Vector.Unit_Y, center = (0, max_h, 0), color = self._volume_outline_color) mb.addArc(max_w, Vector.Unit_Y, center = (0, max_h, 0), color = self._volume_outline_color)
self.setMeshData(mb.build().getTransformed(scale_matrix)) self.setMeshData(mb.build().getTransformed(scale_matrix))
# Build plate grid mesh # Build plate surface.
mb = MeshBuilder() mb = MeshBuilder()
mb.addVertex(0, min_h - z_fight_distance, 0) mb.addVertex(0, min_h - z_fight_distance, 0)
mb.addArc(max_w, Vector.Unit_Y, center = Vector(0, min_h - z_fight_distance, 0)) mb.addArc(max_w, Vector.Unit_Y, center = Vector(0, min_h - z_fight_distance, 0))
@ -318,7 +349,40 @@ class BuildVolume(SceneNode):
for n in range(0, mb.getVertexCount()): for n in range(0, mb.getVertexCount()):
v = mb.getVertex(n) v = mb.getVertex(n)
mb.setVertexUVCoordinates(n, v[0], v[2] * aspect) mb.setVertexUVCoordinates(n, v[0], v[2] * aspect)
self._grid_mesh = mb.build().getTransformed(scale_matrix) self._plate_mesh = mb.build().getTransformed(scale_matrix)
#Build plate grid mesh.
#We need to constrain the length of the lines to the build plate ellipsis. Time to get out the calculator!
mb = MeshBuilder()
for x in range(0, int(math.ceil(max_w)), MAJOR_GRID_SIZE):
#x / max_w is the fraction along the build plate we have progressed, counting from the centre.
#So x / max_w is sin(a), where a is the angle towards an endpoint of the grid line from the centre.
#So math.asin(x / max_w) is a.
#So math.cos(math.asin(x / max_w)) is half of the length of the grid line on a unit circle, which scales between 0 and 1.
length_factor = math.cos(math.asin(x / max_w))
mb.addLine(Vector(x, min_h, min_d * length_factor), Vector(x, min_h, max_d * length_factor), color = self._grid_color)
#Start from 0 in both cases, so you need to do this in two for loops.
mb.addLine(Vector(-x, min_h, min_d * length_factor), Vector(-x, min_h, max_d * length_factor), color = self._grid_color)
for y in range(0, int(math.ceil(max_d)), MAJOR_GRID_SIZE):
length_factor = math.sin(math.acos(y / max_d))
mb.addLine(Vector(min_w * length_factor, min_h, y), Vector(max_w * length_factor, min_h, y), color = self._grid_color)
mb.addLine(Vector(min_w * length_factor, min_h, -y), Vector(max_w * length_factor, min_h, -y), color = self._grid_color)
#More fine grained grid.
for x in range(0, int(math.ceil(max_w)), MINOR_GRID_SIZE):
if x % MAJOR_GRID_SIZE == 0: #Don't overlap with the major grid.
pass
length_factor = math.cos(math.asin(x / max_w))
mb.addLine(Vector(x, min_h, min_d * length_factor), Vector(x, min_h, max_d * length_factor), color = self._grid_minor_color)
mb.addLine(Vector(-x, min_h, min_d * length_factor), Vector(-x, min_h, max_d * length_factor), color = self._grid_minor_color)
for y in range(0, int(math.ceil(max_d)), MINOR_GRID_SIZE):
if y % MAJOR_GRID_SIZE == 0:
pass
length_factor = math.sin(math.acos(y / max_d))
mb.addLine(Vector(min_w * length_factor, min_h, y), Vector(max_w * length_factor, min_h, y), color = self._grid_minor_color)
mb.addLine(Vector(min_w * length_factor, min_h, -y), Vector(max_w * length_factor, min_h, -y), color = self._grid_minor_color)
self._grid_mesh = mb.build()
# Indication of the machine origin # Indication of the machine origin
if self._global_container_stack.getProperty("machine_center_is_zero", "value"): if self._global_container_stack.getProperty("machine_center_is_zero", "value"):

View file

@ -432,6 +432,7 @@ class CuraContainerStack(ContainerStack):
# - If the machine definition has a metadata entry "has_machine_materials", the definition of the material should # - If the machine definition has a metadata entry "has_machine_materials", the definition of the material should
# be the same as the machine definition for this stack. Otherwise, the definition should be "fdmprinter". # be the same as the machine definition for this stack. Otherwise, the definition should be "fdmprinter".
# - The container should have a metadata entry "type" with value "material". # - The container should have a metadata entry "type" with value "material".
# - The material should have an approximate diameter that matches the machine
# - If the machine definition has a metadata entry "has_variants" and set to True, the "variant" metadata entry of # - If the machine definition has a metadata entry "has_variants" and set to True, the "variant" metadata entry of
# the material should be the same as the ID of the variant in the stack. Only applies if "has_machine_materials" is also True. # the material should be the same as the ID of the variant in the stack. Only applies if "has_machine_materials" is also True.
# - If the stack currently has a material set, try to find a material that matches the current material by name. # - If the stack currently has a material set, try to find a material that matches the current material by name.
@ -460,6 +461,9 @@ class CuraContainerStack(ContainerStack):
if preferred_material: if preferred_material:
search_criteria["id"] = preferred_material search_criteria["id"] = preferred_material
approximate_material_diameter = str(round(self.getProperty("material_diameter", "value")))
search_criteria["approximate_diameter"] = approximate_material_diameter
materials = ContainerRegistry.getInstance().findInstanceContainers(**search_criteria) materials = ContainerRegistry.getInstance().findInstanceContainers(**search_criteria)
if not materials: if not materials:
Logger.log("w", "The preferred material \"{material}\" could not be found for stack {stack}", material = preferred_material, stack = self.id) Logger.log("w", "The preferred material \"{material}\" could not be found for stack {stack}", material = preferred_material, stack = self.id)

View file

@ -504,16 +504,6 @@ class MachineManager(QObject):
return result return result
@pyqtProperty("QVariantList", notify = activeVariantChanged)
def activeMaterialIds(self):
result = []
if ExtruderManager.getInstance().getActiveGlobalAndExtruderStacks() is not None:
for stack in ExtruderManager.getInstance().getActiveGlobalAndExtruderStacks():
if stack.variant and stack.variant != self._empty_variant_container:
result.append(stack.variant.getId())
return result
@pyqtProperty("QVariantList", notify = activeMaterialChanged) @pyqtProperty("QVariantList", notify = activeMaterialChanged)
def activeMaterialNames(self): def activeMaterialNames(self):
result = [] result = []

View file

@ -818,29 +818,27 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
each_extruder_stack.definitionChanges = each_changes_container each_extruder_stack.definitionChanges = each_changes_container
if self._resolve_strategies["material"] == "new": if self._resolve_strategies["material"] == "new":
# the actual material instance container can have an ID such as
# <material>_<machine>_<variant>
# which cannot be determined immediately, so here we use a HACK to find the right new material
# instance ID:
# - get the old material IDs for all material
# - find the old material with the longest common prefix in ID, that's the old material
# - update the name by replacing the old prefix with the new
# - find the new material container and set it to the stack
old_to_new_material_dict = {}
for each_material in material_containers: for each_material in material_containers:
old_material = global_stack.material # find the material's old name
for old_id, new_id in self._id_mapping.items():
# check if the old material container has been renamed to this material container ID if each_material.getId() == new_id:
# if the container hasn't been renamed, we do nothing. old_to_new_material_dict[old_id] = each_material
new_id = self._id_mapping.get(old_material.getId()) break
if new_id is None or new_id != each_material.getId():
continue
if old_material.getId() in self._id_mapping:
global_stack.material = each_material
# replace old material in global and extruder stacks with new
self._replaceStackMaterialWithNew(global_stack, old_to_new_material_dict)
if extruder_stacks:
for each_extruder_stack in extruder_stacks: for each_extruder_stack in extruder_stacks:
old_material = each_extruder_stack.material self._replaceStackMaterialWithNew(each_extruder_stack, old_to_new_material_dict)
# check if the old material container has been renamed to this material container ID
# if the container hasn't been renamed, we do nothing.
new_id = self._id_mapping.get(old_material.getId())
if new_id is None or new_id != each_material.getId():
continue
if old_material.getId() in self._id_mapping:
each_extruder_stack.material = each_material
if extruder_stacks: if extruder_stacks:
for stack in extruder_stacks: for stack in extruder_stacks:
@ -865,6 +863,61 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
nodes = [] nodes = []
return nodes return nodes
## HACK: Replaces the material container in the given stack with a newly created material container.
# This function is used when the user chooses to resolve material conflicts by creating new ones.
def _replaceStackMaterialWithNew(self, stack, old_new_material_dict):
# The material containers in the project file are 'parent' material such as "generic_pla",
# but a material container used in a global/extruder stack is a 'child' material,
# such as "generic_pla_ultimaker3_AA_0.4", which can be formalised as the following:
#
# <material_name>_<machine_name>_<variant_name>
#
# In the project loading, when a user chooses to resolve material conflicts by creating new ones,
# the old 'parent' material ID and the new 'parent' material ID are known, but not the child material IDs.
# In this case, the global stack and the extruder stacks need to use the newly created material, but the
# material containers they use are 'child' material. So, here, we need to find the right 'child' material for
# the stacks.
#
# This hack approach works as follows:
# - No matter there is a child material or not, the actual material we are looking for has the prefix
# "<material_name>", which is the old material name. For the material in a stack, we know that the new
# material's ID will be "<new_material_name>_blabla..", so we just need to replace the old material ID
# with the new one to get the new 'child' material.
# - Because the material containers have IDs such as "m #nn", if we use simple prefix matching, there can
# be a problem in the following scenario:
# - there are two materials in the project file, namely "m #1" and "m #11"
# - the child materials in use are for example: "m #1_um3_aa04", "m #11_um3_aa04"
# - if we only check for a simple prefix match, then "m #11_um3_aa04" will match with "m #1", but they
# are not the same material
# To avoid this, when doing the prefix matching, we use the result with the longest mactching prefix.
# find the old material ID
old_material_id_in_stack = stack.material.getId()
best_matching_old_material_id = None
best_matching_old_meterial_prefix_length = -1
for old_parent_material_id in old_new_material_dict:
if len(old_parent_material_id) < best_matching_old_meterial_prefix_length:
continue
if len(old_parent_material_id) <= len(old_material_id_in_stack):
if old_parent_material_id == old_material_id_in_stack[0:len(old_parent_material_id)]:
best_matching_old_meterial_prefix_length = len(old_parent_material_id)
best_matching_old_material_id = old_parent_material_id
if best_matching_old_material_id is None:
Logger.log("w", "Cannot find any matching old material ID for stack [%s] material [%s]. Something can go wrong",
stack.getId(), old_material_id_in_stack)
return
# find the new material container
new_material_id = old_new_material_dict[best_matching_old_material_id].getId() + old_material_id_in_stack[len(best_matching_old_material_id):]
new_material_containers = self._container_registry.findInstanceContainers(id = new_material_id, type = "material")
if not new_material_containers:
Logger.log("e", "Cannot find new material container [%s]", new_material_id)
return
# replace the material in the given stack
stack.material = new_material_containers[0]
def _stripFileToId(self, file): def _stripFileToId(self, file):
mime_type = MimeTypeDatabase.getMimeTypeForFile(file) mime_type = MimeTypeDatabase.getMimeTypeForFile(file)
file = mime_type.stripExtension(file) file = mime_type.stripExtension(file)

View file

@ -36,7 +36,7 @@ A dark theme for Cura. Select this theme to reduce eyestrain when working in dar
The top bar user interface been improved so that “Prepare” and “Print” have moved from the right side of the interface to the left side. The top bar user interface been improved so that “Prepare” and “Print” have moved from the right side of the interface to the left side.
*New keyboard shortcuts *New keyboard shortcuts
Models can now be manipulated on the build plate using hotkeys Q, A, Z, W, and tab keys. Q selects “move”, A selects “scale”, Z selects “rotate”, and W selects “mirror”. Use the tab key to navigate between interfaces. Models can now be manipulated on the build plate using hotkeys Q, A, Z, W, and tab keys. Q selects “move”, A selects “scale”, Z selects “rotate”, and W selects “mirror”. Use the tab key to navigate between settings.
*Plugin browser *Plugin browser
Easily download and install plugins using an integrated plugin browser. Go to “Extensions > Plugin Browser > Browse plugins” to select it. Easily download and install plugins using an integrated plugin browser. Go to “Extensions > Plugin Browser > Browse plugins” to select it.
@ -61,7 +61,7 @@ Polish language support added. This can be selected in the preferences menu.
- Crashes when adding printers - Crashes when adding printers
- Jerk fixes - Jerk fixes
- Z-hop over-extrusion - Z-hop over-extrusion
- Material diameter in machine settings
*3rd party printers *3rd party printers
- Peopoly Moai - Peopoly Moai

View file

@ -427,6 +427,7 @@ class CuraEngineBackend(QObject, Backend):
## Convenient function: set need_slicing, emit state and clear layer data ## Convenient function: set need_slicing, emit state and clear layer data
def needsSlicing(self): def needsSlicing(self):
self.stopSlicing()
self._need_slicing = True self._need_slicing = True
self.processingProgress.emit(0.0) self.processingProgress.emit(0.0)
self.backendStateChange.emit(BackendState.NotStarted) self.backendStateChange.emit(BackendState.NotStarted)

View file

@ -71,7 +71,7 @@ Item
id: layersLabel id: layersLabel
anchors.left: parent.left anchors.left: parent.left
text: catalog.i18nc("@label","View Mode: Layers") text: catalog.i18nc("@label","View Mode: Layers")
font.bold: true font: UM.Theme.getFont("default_bold");
color: UM.Theme.getColor("text") color: UM.Theme.getColor("text")
Layout.fillWidth: true Layout.fillWidth: true
elide: Text.ElideMiddle; elide: Text.ElideMiddle;
@ -90,6 +90,7 @@ Item
id: layerViewTypesLabel id: layerViewTypesLabel
anchors.left: parent.left anchors.left: parent.left
text: catalog.i18nc("@label","Color scheme") text: catalog.i18nc("@label","Color scheme")
font: UM.Theme.getFont("default");
visible: !UM.LayerView.compatibilityMode visible: !UM.LayerView.compatibilityMode
Layout.fillWidth: true Layout.fillWidth: true
color: UM.Theme.getColor("text") color: UM.Theme.getColor("text")
@ -148,6 +149,7 @@ Item
id: compatibilityModeLabel id: compatibilityModeLabel
anchors.left: parent.left anchors.left: parent.left
text: catalog.i18nc("@label","Compatibility Mode") text: catalog.i18nc("@label","Compatibility Mode")
font: UM.Theme.getFont("default")
color: UM.Theme.getColor("text") color: UM.Theme.getColor("text")
visible: UM.LayerView.compatibilityMode visible: UM.LayerView.compatibilityMode
Layout.fillWidth: true Layout.fillWidth: true
@ -210,6 +212,7 @@ Item
text: model.name text: model.name
elide: Text.ElideRight elide: Text.ElideRight
color: UM.Theme.getColor("text") color: UM.Theme.getColor("text")
font: UM.Theme.getFont("default")
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
anchors.left: extrudersModelCheckBox.left; anchors.left: extrudersModelCheckBox.left;
anchors.right: extrudersModelCheckBox.right; anchors.right: extrudersModelCheckBox.right;
@ -275,6 +278,7 @@ Item
Label Label
{ {
text: label text: label
font: UM.Theme.getFont("default")
elide: Text.ElideRight elide: Text.ElideRight
color: UM.Theme.getColor("text") color: UM.Theme.getColor("text")
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
@ -340,6 +344,7 @@ Item
Layout.preferredHeight: UM.Theme.getSize("layerview_row").height + UM.Theme.getSize("default_lining").height Layout.preferredHeight: UM.Theme.getSize("layerview_row").height + UM.Theme.getSize("default_lining").height
Layout.preferredWidth: UM.Theme.getSize("layerview_row").width Layout.preferredWidth: UM.Theme.getSize("layerview_row").width
color: UM.Theme.getColor("text") color: UM.Theme.getColor("text")
font: UM.Theme.getFont("default")
} }
} }
} }

View file

@ -233,6 +233,7 @@ Cura.MachineAction
property string label: catalog.i18nc("@label", "Gantry height") property string label: catalog.i18nc("@label", "Gantry height")
property string unit: catalog.i18nc("@label", "mm") property string unit: catalog.i18nc("@label", "mm")
property string tooltip: catalog.i18nc("@tooltip", "The height difference between the tip of the nozzle and the gantry system (X and Y axes). Used to prevent collisions between previous prints and the gantry when printing \"One at a Time\".") property string tooltip: catalog.i18nc("@tooltip", "The height difference between the tip of the nozzle and the gantry system (X and Y axes). Used to prevent collisions between previous prints and the gantry when printing \"One at a Time\".")
property bool forceUpdateOnChange: true
} }
Item { width: UM.Theme.getSize("default_margin").width; height: UM.Theme.getSize("default_margin").height } Item { width: UM.Theme.getSize("default_margin").width; height: UM.Theme.getSize("default_margin").height }

View file

@ -151,10 +151,43 @@ Item {
UM.SettingPropertyProvider UM.SettingPropertyProvider
{ {
id: inheritStackProvider id: inheritStackProvider
containerStackId: Cura.MachineManager.activeMachineId containerStackId: UM.ActiveTool.properties.getValue("ContainerID")
key: model.key key: model.key
watchedProperties: [ "limit_to_extruder" ] watchedProperties: [ "limit_to_extruder" ]
} }
Binding
{
target: provider
property: "containerStackId"
when: model.settable_per_extruder || (inheritStackProvider.properties.limit_to_extruder != null && inheritStackProvider.properties.limit_to_extruder >= 0);
value:
{
// associate this binding with Cura.MachineManager.activeMachineId in the beginning so this
// binding will be triggered when activeMachineId is changed too.
// Otherwise, if this value only depends on the extruderIds, it won't get updated when the
// machine gets changed.
var activeMachineId = Cura.MachineManager.activeMachineId;
if(!model.settable_per_extruder || machineExtruderCount.properties.value == 1)
{
//Not settable per extruder or there only is global, so we must pick global.
return activeMachineId;
}
if(inheritStackProvider.properties.limit_to_extruder != null && inheritStackProvider.properties.limit_to_extruder >= 0)
{
//We have limit_to_extruder, so pick that stack.
return ExtruderManager.extruderIds[String(inheritStackProvider.properties.limit_to_extruder)];
}
if(UM.ActiveTool.properties.getValue("ContainerID"))
{
//We're on an extruder tab. Pick the current extruder.
return UM.ActiveTool.properties.getValue("ContainerID");
}
//No extruder tab is selected. Pick the global stack. Shouldn't happen any more since we removed the global tab.
return activeMachineId;
}
}
} }
} }
} }

View file

@ -114,6 +114,10 @@ class VersionUpgrade25to26(VersionUpgrade):
parser.write(output) parser.write(output)
return [filename], [output.getvalue()] return [filename], [output.getvalue()]
## Upgrades a machine stack from version 2.5 to 2.6
#
# \param serialised The serialised form of a quality profile.
# \param filename The name of the file to upgrade.
def upgradeMachineStack(self, serialised, filename): def upgradeMachineStack(self, serialised, filename):
parser = configparser.ConfigParser(interpolation=None) parser = configparser.ConfigParser(interpolation=None)
parser.read_string(serialised) parser.read_string(serialised)
@ -127,7 +131,7 @@ class VersionUpgrade25to26(VersionUpgrade):
if definition_container_id == "custom" and not self._checkCustomFdmPrinterHasExtruderStack(machine_id): if definition_container_id == "custom" and not self._checkCustomFdmPrinterHasExtruderStack(machine_id):
# go through all extruders and make sure that this custom FDM printer has 8 extruder stacks. # go through all extruders and make sure that this custom FDM printer has 8 extruder stacks.
self._getNextUniqueCustomFdmPrinterExtruderStackIdIndex() self._acquireNextUniqueCustomFdmPrinterExtruderStackIdIndex()
for position in range(8): for position in range(8):
self._createCustomFdmPrinterExtruderStack(machine_id, position, quality_container_id, material_container_id) self._createCustomFdmPrinterExtruderStack(machine_id, position, quality_container_id, material_container_id)
@ -141,7 +145,8 @@ class VersionUpgrade25to26(VersionUpgrade):
return [filename], [output.getvalue()] return [filename], [output.getvalue()]
def _getNextUniqueCustomFdmPrinterExtruderStackIdIndex(self): ## Acquires the next unique extruder stack index number for the Custom FDM Printer.
def _acquireNextUniqueCustomFdmPrinterExtruderStackIdIndex(self):
extruder_stack_dir = Resources.getPath(CuraApplication.ResourceTypes.ExtruderStack) extruder_stack_dir = Resources.getPath(CuraApplication.ResourceTypes.ExtruderStack)
file_name_list = os.listdir(extruder_stack_dir) file_name_list = os.listdir(extruder_stack_dir)
file_name_list = [os.path.basename(file_name) for file_name in file_name_list] file_name_list = [os.path.basename(file_name) for file_name in file_name_list]
@ -185,6 +190,7 @@ class VersionUpgrade25to26(VersionUpgrade):
if machine_id != parser["metadata"]["machine"]: if machine_id != parser["metadata"]["machine"]:
continue continue
has_extruders = True has_extruders = True
break
return has_extruders return has_extruders
@ -198,6 +204,9 @@ class VersionUpgrade25to26(VersionUpgrade):
# create a definition changes container for this stack # create a definition changes container for this stack
definition_changes_parser = self._getCustomFdmPrinterDefinitionChanges(stack_id) definition_changes_parser = self._getCustomFdmPrinterDefinitionChanges(stack_id)
definition_changes_id = definition_changes_parser["general"]["name"] definition_changes_id = definition_changes_parser["general"]["name"]
# create a user settings container
user_settings_parser = self._getCustomFdmPrinterUserSettings(stack_id)
user_settings_id = user_settings_parser["general"]["name"]
parser = configparser.ConfigParser() parser = configparser.ConfigParser()
parser.add_section("general") parser.add_section("general")
@ -211,7 +220,7 @@ class VersionUpgrade25to26(VersionUpgrade):
parser["metadata"]["position"] = str(position) parser["metadata"]["position"] = str(position)
parser.add_section("containers") parser.add_section("containers")
parser["containers"]["0"] = "empty" parser["containers"]["0"] = user_settings_id
parser["containers"]["1"] = "empty_quality_changes" parser["containers"]["1"] = "empty_quality_changes"
parser["containers"]["2"] = quality_id parser["containers"]["2"] = quality_id
parser["containers"]["3"] = material_id parser["containers"]["3"] = material_id
@ -223,15 +232,22 @@ class VersionUpgrade25to26(VersionUpgrade):
definition_changes_parser.write(definition_changes_output) definition_changes_parser.write(definition_changes_output)
definition_changes_filename = quote_plus(definition_changes_id) + ".inst.cfg" definition_changes_filename = quote_plus(definition_changes_id) + ".inst.cfg"
user_settings_output = io.StringIO()
user_settings_parser.write(user_settings_output)
user_settings_filename = quote_plus(user_settings_id) + ".inst.cfg"
extruder_output = io.StringIO() extruder_output = io.StringIO()
parser.write(extruder_output) parser.write(extruder_output)
extruder_filename = quote_plus(stack_id) + ".extruder.cfg" extruder_filename = quote_plus(stack_id) + ".extruder.cfg"
extruder_stack_dir = Resources.getPath(CuraApplication.ResourceTypes.ExtruderStack) extruder_stack_dir = Resources.getPath(CuraApplication.ResourceTypes.ExtruderStack)
definition_changes_dir = Resources.getPath(CuraApplication.ResourceTypes.DefinitionChangesContainer) definition_changes_dir = Resources.getPath(CuraApplication.ResourceTypes.DefinitionChangesContainer)
user_settings_dir = Resources.getPath(CuraApplication.ResourceTypes.UserInstanceContainer)
with open(os.path.join(definition_changes_dir, definition_changes_filename), "w") as f: with open(os.path.join(definition_changes_dir, definition_changes_filename), "w") as f:
f.write(definition_changes_output.getvalue()) f.write(definition_changes_output.getvalue())
with open(os.path.join(user_settings_dir, user_settings_filename), "w") as f:
f.write(user_settings_output.getvalue())
with open(os.path.join(extruder_stack_dir, extruder_filename), "w") as f: with open(os.path.join(extruder_stack_dir, extruder_filename), "w") as f:
f.write(extruder_output.getvalue()) f.write(extruder_output.getvalue())
@ -255,3 +271,25 @@ class VersionUpgrade25to26(VersionUpgrade):
parser.add_section("values") parser.add_section("values")
return parser return parser
## Creates a user settings container which doesn't contain anything for the Custom FDM Printers.
# The container ID will be automatically generated according to the given stack name.
def _getCustomFdmPrinterUserSettings(self, stack_id: str):
# For the extruder stacks created in the upgrade, also create user_settings containers so the user changes
# will be saved.
user_settings_id = stack_id + "_user"
parser = configparser.ConfigParser()
parser.add_section("general")
parser["general"]["version"] = str(2)
parser["general"]["name"] = user_settings_id
parser["general"]["definition"] = "custom"
parser.add_section("metadata")
parser["metadata"]["extruder"] = stack_id
parser["metadata"]["type"] = "user"
parser["metadata"]["setting_version"] = str(1)
parser.add_section("values")
return parser

View file

@ -548,7 +548,17 @@ class XmlMaterialProfile(InstanceContainer):
if machine_compatibility: if machine_compatibility:
new_material_id = self.id + "_" + machine_id new_material_id = self.id + "_" + machine_id
new_material = XmlMaterialProfile(new_material_id) # The child or derived material container may already exist. This can happen when a material in a
# project file and the a material in Cura have the same ID.
# In the case if a derived material already exists, override that material container because if
# the data in the parent material has been changed, the derived ones should be updated too.
found_materials = ContainerRegistry.getInstance().findInstanceContainers(id = new_material_id)
is_new_material = False
if found_materials:
new_material = found_materials[0]
else:
new_material = XmlMaterialProfile(new_material_id)
is_new_material = True
# Update the private directly, as we want to prevent the lookup that is done when using setName # Update the private directly, as we want to prevent the lookup that is done when using setName
new_material._name = self.getName() new_material._name = self.getName()
@ -562,7 +572,8 @@ class XmlMaterialProfile(InstanceContainer):
new_material._dirty = False new_material._dirty = False
ContainerRegistry.getInstance().addContainer(new_material) if is_new_material:
ContainerRegistry.getInstance().addContainer(new_material)
hotends = machine.iterfind("./um:hotend", self.__namespaces) hotends = machine.iterfind("./um:hotend", self.__namespaces)
for hotend in hotends: for hotend in hotends:
@ -594,7 +605,15 @@ class XmlMaterialProfile(InstanceContainer):
new_hotend_id = self.id + "_" + machine_id + "_" + hotend_id.replace(" ", "_") new_hotend_id = self.id + "_" + machine_id + "_" + hotend_id.replace(" ", "_")
new_hotend_material = XmlMaterialProfile(new_hotend_id) # Same as machine compatibility, keep the derived material containers consistent with the parent
# material
found_materials = ContainerRegistry.getInstance().findInstanceContainers(id = new_hotend_id)
is_new_material = False
if found_materials:
new_hotend_material = found_materials[0]
else:
new_hotend_material = XmlMaterialProfile(new_hotend_id)
is_new_material = True
# Update the private directly, as we want to prevent the lookup that is done when using setName # Update the private directly, as we want to prevent the lookup that is done when using setName
new_hotend_material._name = self.getName() new_hotend_material._name = self.getName()
@ -612,7 +631,8 @@ class XmlMaterialProfile(InstanceContainer):
new_hotend_material._dirty = False new_hotend_material._dirty = False
ContainerRegistry.getInstance().addContainer(new_hotend_material) if is_new_material:
ContainerRegistry.getInstance().addContainer(new_hotend_material)
def _addSettingElement(self, builder, instance): def _addSettingElement(self, builder, instance):
try: try:

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "rikky", "author": "rikky",
"manufacturer": "101Hero", "manufacturer": "101Hero",
"category": "Other",
"machine_extruder_trains": "machine_extruder_trains":
{ {
"0": "fdmextruder" "0": "fdmextruder"

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "3Dator GmbH", "author": "3Dator GmbH",
"manufacturer": "3Dator GmbH", "manufacturer": "3Dator GmbH",
"category": "Other",
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"icon": "icon_ultimaker2", "icon": "icon_ultimaker2",
"supports_usb_connection": true, "supports_usb_connection": true,

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "ABAX 3d Technologies", "author": "ABAX 3d Technologies",
"manufacturer": "ABAX 3d Technologies", "manufacturer": "ABAX 3d Technologies",
"category": "Other",
"file_formats": "text/x-gcode" "file_formats": "text/x-gcode"
}, },
"overrides": { "overrides": {

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "ABAX 3d Technologies", "author": "ABAX 3d Technologies",
"manufacturer": "ABAX 3d Technologies", "manufacturer": "ABAX 3d Technologies",
"category": "Other",
"file_formats": "text/x-gcode" "file_formats": "text/x-gcode"
}, },
"overrides": { "overrides": {

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "ABAX 3d Technologies", "author": "ABAX 3d Technologies",
"manufacturer": "ABAX 3d Technologies", "manufacturer": "ABAX 3d Technologies",
"category": "Other",
"file_formats": "text/x-gcode" "file_formats": "text/x-gcode"
}, },
"overrides": { "overrides": {

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "ALYA", "author": "ALYA",
"manufacturer": "ALYA", "manufacturer": "ALYA",
"category": "Other",
"file_formats": "text/x-gcode" "file_formats": "text/x-gcode"
}, },

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "Ultimaker", "author": "Ultimaker",
"manufacturer": "BFB", "manufacturer": "BFB",
"category": "Other",
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"platform_offset": [ 0, 0, 0] "platform_offset": [ 0, 0, 0]
}, },

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "BQ", "author": "BQ",
"manufacturer": "BQ", "manufacturer": "BQ",
"category": "Other",
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"platform": "bq_hephestos_platform.stl", "platform": "bq_hephestos_platform.stl",
"platform_offset": [ 0, -82, 0] "platform_offset": [ 0, -82, 0]

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "BQ", "author": "BQ",
"manufacturer": "BQ", "manufacturer": "BQ",
"category": "Other",
"platform": "bq_hephestos_2_platform.stl", "platform": "bq_hephestos_2_platform.stl",
"platform_offset": [6, 1320, 0 ], "platform_offset": [6, 1320, 0 ],
"file_formats": "text/x-gcode" "file_formats": "text/x-gcode"

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"manufacturer": "BQ", "manufacturer": "BQ",
"author": "BQ", "author": "BQ",
"category": "Other",
"file_formats": "text/x-code", "file_formats": "text/x-code",
"platform": "bq_hephestos_platform.stl", "platform": "bq_hephestos_platform.stl",
"platform_offset": [ 0, -82, 0] "platform_offset": [ 0, -82, 0]

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "BQ", "author": "BQ",
"manufacturer": "BQ", "manufacturer": "BQ",
"category": "Other",
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"platform": "bq_witbox_platform.stl", "platform": "bq_witbox_platform.stl",
"platform_offset": [ 0, -145, -38] "platform_offset": [ 0, -145, -38]

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "BQ", "author": "BQ",
"manufacturer": "BQ", "manufacturer": "BQ",
"category": "Other",
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"platform": "bq_witbox_platform.stl", "platform": "bq_witbox_platform.stl",
"platform_offset": [0, -145, -38] "platform_offset": [0, -145, -38]

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "Scheepers", "author": "Scheepers",
"manufacturer": "Cartesio bv", "manufacturer": "Cartesio bv",
"category": "Other",
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"has_machine_quality": true, "has_machine_quality": true,

View file

@ -1,36 +0,0 @@
{
"id": "creality-cr10",
"name": "Creality CR-10",
"version": 2,
"inherits": "fdmprinter",
"metadata": {
"visible": true,
"author": "Michael Wildermuth",
"manufacturer": "Creality3D",
"category": "Other",
"file_formats": "text/x-gcode"
},
"overrides": {
"machine_width": {
"default_value": 300
},
"machine_height": {
"default_value": 400
},
"machine_depth": {
"default_value": 300
},
"machine_start_gcode": {
"default_value": "G21 ;metric values\nG90 ;absolute Positioning\nG28 ; home all axes\nG1 Z5 F3000 ; lift\nG1 X20 Y2 F1500 ; avoid binder clips\nG1 Z0.2 F3000 ; get ready to prime\nG92 E0 ; reset extrusion distance\nG1 X120 E10 F600 ; prime nozzle\nG1 X150 F5000 ; quick wipe"
},
"machine_end_gcode": {
"default_value": "G91\nG1 F1800 E-3\nG1 F3000 Z10\nG90\nG28 X0 Y0 ; home x and y axis\nM106 S0 ; turn off cooling fan\nM104 S0 ; turn off extruder\nM140 S0 ; turn off bed\nM84 ; disable motors"
},
"machine_heated_bed": {
"default_value": true
},
"gantry_height": {
"default_value": 30
}
}
}

View file

@ -0,0 +1,95 @@
{
"id": "creality-cr10_beta",
"name": "Creality CR-10 Beta",
"version": 2,
"inherits": "fdmprinter",
"metadata": {
"visible": true,
"author": "Michael Wildermuth",
"manufacturer": "Creality3D",
"file_formats": "text/x-gcode"
},
"overrides": {
"machine_width": {
"default_value": 300
},
"machine_height": {
"default_value": 400
},
"machine_depth": {
"default_value": 300
},
"material_diameter": {
"default_value": 1.75
},
"machine_nozzle_size": {
"default_value": 0.4
},
"layer_height": {
"default_value": 0.2
},
"layer_height_0": {
"default_value": 0.2
},
"top_bottom_thickness": {
"default_value": 0.6
},
"top_bottom_pattern": {
"default_value": "concentric"
},
"infill_pattern": {
"value": "'triangles'"
},
"retraction_enable": {
"default_value": true
},
"retraction_amount": {
"default_value": 5
},
"retraction_speed": {
"default_value": 40
},
"cool_min_layer_time": {
"default_value": 15
},
"adhesion_type": {
"default_value": "skirt"
},
"skirt_line_count": {
"default_value": 4
},
"skirt_gap": {
"default_value": 5
},
"machine_start_gcode": {
"default_value": "G21 ;metric values\nG90 ;absolute Positioning\nG28 ; home all axes\nG1 Z5 F3000 ; lift\nG1 X20 Y2 F1500 ; avoid binder clips\nG1 Z0.2 F3000 ; get ready to prime\nG92 E0 ; reset extrusion distance\nG1 X120 E10 F600 ; prime nozzle\nG1 X150 F5000 ; quick wipe"
},
"machine_end_gcode": {
"default_value": "G91\nG1 F1800 E-3\nG1 F3000 Z10\nG90\nG28 X0 Y0 ; home x and y axis\nM106 S0 ; turn off cooling fan\nM104 S0 ; turn off extruder\nM140 S0 ; turn off bed\nM84 ; disable motors"
},
"machine_heated_bed": {
"default_value": true
},
"gantry_height": {
"default_value": 30
},
"acceleration_enabled": {
"default_value": true
},
"acceleration_print": {
"default_value": 500
},
"acceleration_travel": {
"default_value": 500
},
"jerk_enabled": {
"default_value": true
},
"jerk_print": {
"default_value": 20
},
"jerk_travel": {
"default_value": 20
}
}
}

View file

@ -0,0 +1,23 @@
{
"id": "creality-cr10s4_beta",
"name": "Creality CR-10 S4 Beta",
"version": 2,
"inherits": "creality_cr10_beta",
"metadata": {
"visible": true,
"author": "Michael Wildermuth",
"manufacturer": "Creality3D",
"file_formats": "text/x-gcode"
},
"overrides": {
"machine_width": {
"default_value": 400
},
"machine_height": {
"default_value": 400
},
"machine_depth": {
"default_value": 400
}
}
}

View file

@ -0,0 +1,23 @@
{
"id": "creality-cr10s5_beta",
"name": "Creality CR-10 S5 Beta",
"version": 2,
"inherits": "creality_cr10_beta",
"metadata": {
"visible": true,
"author": "Michael Wildermuth",
"manufacturer": "Creality3D",
"file_formats": "text/x-gcode"
},
"overrides": {
"machine_width": {
"default_value": 500
},
"machine_height": {
"default_value": 500
},
"machine_depth": {
"default_value": 500
}
}
}

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "Dagoma", "author": "Dagoma",
"manufacturer": "Dagoma", "manufacturer": "Dagoma",
"category": "Other",
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"icon": "icon_ultimaker2.png", "icon": "icon_ultimaker2.png",
"platform": "discoeasy200.stl", "platform": "discoeasy200.stl",

View file

@ -4,39 +4,38 @@
"version": 2, "version": 2,
"inherits": "fdmprinter", "inherits": "fdmprinter",
"metadata": { "metadata": {
"visible": true, "visible": true,
"author": "Deltaprintr", "author": "Deltaprintr",
"manufacturer": "Deltaprintr", "manufacturer": "Deltaprintr",
"category": "Other", "file_formats": "text/x-gcode",
"file_formats": "text/x-gcode", "platform_offset": [0, 0, 0],
"platform_offset": [ 0, 0, 0], "platform": ""
"platform": "" },
},
"overrides": { "overrides": {
"machine_name": { "default_value": "Delta Go" }, "machine_name": { "default_value": "Delta Go" },
"material_diameter": { "default_value": 1.75 }, "material_diameter": { "default_value": 1.75 },
"default_material_print_temperature": { "default_value": 210 }, "default_material_print_temperature": { "default_value": 210 },
"speed_travel": { "default_value": 150 }, "speed_travel": { "default_value": 150 },
"prime_tower_size": { "default_value": 8.66 }, "prime_tower_size": { "default_value": 8.66 },
"infill_sparse_density": { "default_value": 10 }, "infill_sparse_density": { "default_value": 10 },
"speed_wall_x": { "default_value": 30 }, "speed_wall_x": { "default_value": 30 },
"speed_wall_0": { "default_value": 30 }, "speed_wall_0": { "default_value": 30 },
"speed_topbottom": { "default_value": 20 }, "speed_topbottom": { "default_value": 20 },
"layer_height": { "default_value": 0.15 }, "layer_height": { "default_value": 0.15 },
"speed_print": { "default_value": 30 }, "speed_print": { "default_value": 30 },
"machine_heated_bed": { "default_value": false }, "machine_heated_bed": { "default_value": false },
"machine_center_is_zero": { "default_value": true }, "machine_center_is_zero": { "default_value": true },
"machine_height": { "default_value": 154 }, "machine_height": { "default_value": 154 },
"machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" }, "machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" },
"machine_depth": { "default_value": 115 }, "machine_depth": { "default_value": 115 },
"machine_width": { "default_value": 115 }, "machine_width": { "default_value": 115 },
"raft_airgap": { "default_value": 0.15 }, "raft_airgap": { "default_value": 0.15 },
"retraction_hop_enabled": { "value": "True" }, "retraction_hop_enabled": { "value": "True" },
"retraction_amount": { "default_value": 4.1 }, "retraction_amount": { "default_value": 4.1 },
"retraction_speed": { "default_value": 500 }, "retraction_speed": { "default_value": 500 },
"retraction_hop": { "value": "0.2" }, "retraction_hop": { "value": "0.2" },
"retraction_hop_only_when_collides": { "value": "True" }, "retraction_hop_only_when_collides": { "value": "True" },
"brim_width": { "value": "5" }, "brim_width": { "value": "5" },
"machine_shape": { "default_value": "elliptic"} "machine_shape": { "default_value": "elliptic"}
} }
} }

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "Ultimaker", "author": "Ultimaker",
"manufacturer": "Danny Lu", "manufacturer": "Danny Lu",
"category": "Other",
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"platform_offset": [ 0, 0, 0] "platform_offset": [ 0, 0, 0]
}, },

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "nliaudat", "author": "nliaudat",
"manufacturer": "EasyArts (discontinued)", "manufacturer": "EasyArts (discontinued)",
"category": "Other",
"file_formats": "text/x-gcode" "file_formats": "text/x-gcode"
}, },
"overrides": { "overrides": {

View file

@ -6,7 +6,7 @@
{ {
"type": "machine", "type": "machine",
"author": "Ultimaker", "author": "Ultimaker",
"category": "Ultimaker", "category": "Other",
"manufacturer": "Unknown", "manufacturer": "Unknown",
"setting_version": 1, "setting_version": 1,
"file_formats": "text/x-gcode;application/x-stl-ascii;application/x-stl-binary;application/x-wavefront-obj;application/x3g", "file_formats": "text/x-gcode;application/x-stl-ascii;application/x-stl-binary;application/x-wavefront-obj;application/x3g",
@ -1510,6 +1510,44 @@
"limit_to_extruder": "infill_extruder_nr", "limit_to_extruder": "infill_extruder_nr",
"settable_per_mesh": true "settable_per_mesh": true
}, },
"skin_preshrink":
{
"label": "Skin Pre-Shrink Distance",
"description": "The distance the skins are shrunk before considering them for skin expansion. 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": 0,
"minimum_value": "0",
"limit_to_extruder": "top_bottom_extruder_nr",
"settable_per_mesh": true,
"children":
{
"top_skin_preshrink":
{
"label": "Top Skin Pre-Shrink Distance",
"description": "The distance the top skins are shrunk before considering them for skin expansion. 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": 0,
"value": "skin_preshrink",
"minimum_value": "0",
"limit_to_extruder": "top_bottom_extruder_nr",
"settable_per_mesh": true
},
"bottom_skin_preshrink":
{
"label": "Bottom Skin Pre-Shrink Distance",
"description": "The distance the bottom skins are shrunk before considering them for skin expansion. 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": 0,
"value": "skin_preshrink",
"minimum_value": "0",
"limit_to_extruder": "top_bottom_extruder_nr",
"settable_per_mesh": true
}
}
},
"expand_skins_into_infill": "expand_skins_into_infill":
{ {
"label": "Expand Skins Into Infill", "label": "Expand Skins Into Infill",
@ -4626,7 +4664,7 @@
"unit": "mm³", "unit": "mm³",
"default_value": 0, "default_value": 0,
"minimum_value": "0", "minimum_value": "0",
"maximum_value_warning": "0.5", "maximum_value_warning": "1",
"settable_per_mesh": false, "settable_per_mesh": false,
"settable_per_extruder": true "settable_per_extruder": true
}, },

View file

@ -6,7 +6,6 @@
"visible": true, "visible": true,
"author": "Jaime van Kessel & Paul Bussiere", "author": "Jaime van Kessel & Paul Bussiere",
"manufacturer": "Folger Tech", "manufacturer": "Folger Tech",
"category": "Other",
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"platform": "FT-5_build_plate.stl" "platform": "FT-5_build_plate.stl"
}, },

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "Simon Cor", "author": "Simon Cor",
"manufacturer": "German RepRap", "manufacturer": "German RepRap",
"category": "Other",
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"icon": "icon_ultimaker.png", "icon": "icon_ultimaker.png",
"platform": "grr_neo_platform.stl" "platform": "grr_neo_platform.stl"

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "BEEVERYCREATIVE", "author": "BEEVERYCREATIVE",
"manufacturer": "BEEVERYCREATIVE", "manufacturer": "BEEVERYCREATIVE",
"category": "Other",
"platform": "BEEVERYCREATIVE-helloBEEprusa.stl", "platform": "BEEVERYCREATIVE-helloBEEprusa.stl",
"platform_offset": [-226, -75, -196], "platform_offset": [-226, -75, -196],
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "IMADE3D", "author": "IMADE3D",
"manufacturer": "IMADE3D", "manufacturer": "IMADE3D",
"category": "Other",
"platform": "imade3d_jellybox_platform.stl", "platform": "imade3d_jellybox_platform.stl",
"platform_offset": [ 0, -0.3, 0], "platform_offset": [ 0, -0.3, 0],
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "Adam Rumjahn", "author": "Adam Rumjahn",
"manufacturer": "Innovo", "manufacturer": "Innovo",
"category": "Other",
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"platform": "inventor_platform.stl", "platform": "inventor_platform.stl",
"platform_offset": [-180, -0.25, 160] "platform_offset": [-180, -0.25, 160]

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "Ultimaker", "author": "Ultimaker",
"manufacturer": "Fracktal", "manufacturer": "Fracktal",
"category": "Other",
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"platform_offset": [ 0, 0, 0] "platform_offset": [ 0, 0, 0]
}, },

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "KEMIQ", "author": "KEMIQ",
"manufacturer": "KEMIQ", "manufacturer": "KEMIQ",
"category": "Other",
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"platform": "kemiq_q2.stl", "platform": "kemiq_q2.stl",
"has_machine_quality": true, "has_machine_quality": true,

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "KEMIQ", "author": "KEMIQ",
"manufacturer": "KEMIQ", "manufacturer": "KEMIQ",
"category": "Other",
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"platform": "kemiq_q2.stl", "platform": "kemiq_q2.stl",
"has_machine_quality": true, "has_machine_quality": true,

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "Claudio Sampaio (Patola)", "author": "Claudio Sampaio (Patola)",
"manufacturer": "Other", "manufacturer": "Other",
"category": "Other",
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"icon": "icon_ultimaker2", "icon": "icon_ultimaker2",
"platform": "kossel_platform.stl", "platform": "kossel_platform.stl",

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "Chris Petersen", "author": "Chris Petersen",
"manufacturer": "OpenBeam", "manufacturer": "OpenBeam",
"category": "Other",
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"icon": "icon_ultimaker2", "icon": "icon_ultimaker2",
"platform": "kossel_pro_build_platform.stl", "platform": "kossel_pro_build_platform.stl",

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "Ultimaker", "author": "Ultimaker",
"manufacturer": "Kupido", "manufacturer": "Kupido",
"category": "Other",
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"platform_offset": [ 0, 0, 0] "platform_offset": [ 0, 0, 0]
}, },

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "Ruben Dulek", "author": "Ruben Dulek",
"manufacturer": "Malyan", "manufacturer": "Malyan",
"category": "Other",
"file_formats": "application/x3g" "file_formats": "application/x3g"
}, },

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "makeR", "author": "makeR",
"manufacturer": "makeR", "manufacturer": "makeR",
"category": "Other",
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"icon": "icon_ultimaker2", "icon": "icon_ultimaker2",
"platform": "makeR_pegasus_platform.stl", "platform": "makeR_pegasus_platform.stl",

View file

@ -7,11 +7,10 @@
"visible": true, "visible": true,
"author": "makeR", "author": "makeR",
"manufacturer": "makeR", "manufacturer": "makeR",
"category": "Other",
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"icon": "icon_ultimaker2", "icon": "icon_ultimaker2",
"platform": "makeR_prusa_tairona_i3_platform.stl", "platform": "makeR_prusa_tairona_i3_platform.stl",
"platform_offset": [-2,0,0] "platform_offset": [-2, 0, 0]
}, },
"overrides": { "overrides": {

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "NA", "author": "NA",
"manufacturer": "NA", "manufacturer": "NA",
"category": "Other",
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"has_materials": false, "has_materials": false,
"supported_actions": [ "MachineSettingsAction", "UpgradeFirmware" ], "supported_actions": [ "MachineSettingsAction", "UpgradeFirmware" ],

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "NA", "author": "NA",
"manufacturer": "NA", "manufacturer": "NA",
"category": "Other",
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"has_materials": false, "has_materials": false,
"supported_actions": [ "MachineSettingsAction", "UpgradeFirmware" ], "supported_actions": [ "MachineSettingsAction", "UpgradeFirmware" ],

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "tvlgiao", "author": "tvlgiao",
"manufacturer": "3DMaker", "manufacturer": "3DMaker",
"category": "Other",
"file_formats": "text/x-gcode;application/x-stl-ascii;application/x-stl-binary;application/x-wavefront-obj", "file_formats": "text/x-gcode;application/x-stl-ascii;application/x-stl-binary;application/x-wavefront-obj",
"icon": "icon_ultimaker2.png", "icon": "icon_ultimaker2.png",
"platform": "makerstarter_platform.stl" "platform": "makerstarter_platform.stl"

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "Ultimaker", "author": "Ultimaker",
"manufacturer": "MakerBot", "manufacturer": "MakerBot",
"category": "Other",
"file_formats": "application/x3g", "file_formats": "application/x3g",
"platform_offset": [ 0, 0, 0] "platform_offset": [ 0, 0, 0]
}, },

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "RBC", "author": "RBC",
"manufacturer": "Mankati", "manufacturer": "Mankati",
"category": "Other",
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"platform": "mankati_fullscale_xt_plus_platform.stl" "platform": "mankati_fullscale_xt_plus_platform.stl"
}, },

View file

@ -7,7 +7,6 @@
{ {
"visible": true, "visible": true,
"author": "Bo Herrmannsen", "author": "Bo Herrmannsen",
"category": "Other",
"manufacturer": "Nophead", "manufacturer": "Nophead",
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"platform": "mendel90_platform.stl", "platform": "mendel90_platform.stl",

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "Ultimaker", "author": "Ultimaker",
"manufacturer": "ORD Solutions", "manufacturer": "ORD Solutions",
"category": "Other",
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"machine_extruder_trains": "machine_extruder_trains":
{ {

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "fieldOfView", "author": "fieldOfView",
"manufacturer": "Peopoly", "manufacturer": "Peopoly",
"category": "Other",
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"has_machine_quality": true, "has_machine_quality": true,
"has_materials": false "has_materials": false

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "Chris Pearson", "author": "Chris Pearson",
"manufacturer": "Printrbot", "manufacturer": "Printrbot",
"category": "Other",
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"platform": "printrbot_play.stl" "platform": "printrbot_play.stl"
}, },

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "Chris Pearson", "author": "Chris Pearson",
"manufacturer": "Printrbot", "manufacturer": "Printrbot",
"category": "Other",
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"platform": "" "platform": ""
}, },

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "Calvindog717", "author": "Calvindog717",
"manufacturer": "PrintrBot", "manufacturer": "PrintrBot",
"category": "Other",
"platform": "printrbot_simple_metal_platform.stl", "platform": "printrbot_simple_metal_platform.stl",
"platform_offset": [0, -3.45, 0], "platform_offset": [0, -3.45, 0],
"file_formats": "text/x-gcode" "file_formats": "text/x-gcode"

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "samsector", "author": "samsector",
"manufacturer": "PrintrBot", "manufacturer": "PrintrBot",
"category": "Other",
"platform": "printrbot_simple_metal_upgrade.stl", "platform": "printrbot_simple_metal_upgrade.stl",
"platform_offset": [0, -0.3, 0], "platform_offset": [0, -0.3, 0],
"file_formats": "text/x-gcode" "file_formats": "text/x-gcode"

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "Quillford", "author": "Quillford",
"manufacturer": "Prusajr", "manufacturer": "Prusajr",
"category": "Other",
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"icon": "icon_ultimaker2", "icon": "icon_ultimaker2",
"platform": "prusai3_platform.stl" "platform": "prusai3_platform.stl"

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "Apsu", "author": "Apsu",
"manufacturer": "Prusa Research", "manufacturer": "Prusa Research",
"category": "Other",
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"icon": "icon_ultimaker2", "icon": "icon_ultimaker2",
"platform": "prusai3_platform.stl", "platform": "prusai3_platform.stl",

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "guigashm", "author": "guigashm",
"manufacturer": "Prusajr", "manufacturer": "Prusajr",
"category": "Other",
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"icon": "icon_ultimaker2.png", "icon": "icon_ultimaker2.png",
"platform": "prusai3_xl_platform.stl" "platform": "prusai3_xl_platform.stl"

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "Ultimaker", "author": "Ultimaker",
"manufacturer": "Punchtec", "manufacturer": "Punchtec",
"category": "Other",
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"machine_extruder_trains": "machine_extruder_trains":
{ {

View file

@ -5,7 +5,6 @@
"inherits": "fdmprinter", "inherits": "fdmprinter",
"metadata": { "metadata": {
"author": "Simon Peter (based on RF100.ini by Conrad Electronic SE)", "author": "Simon Peter (based on RF100.ini by Conrad Electronic SE)",
"category": "Other",
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"manufacturer": "Renkforce", "manufacturer": "Renkforce",
"visible": true "visible": true

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "Ultimaker", "author": "Ultimaker",
"manufacturer": "Rigid3D", "manufacturer": "Rigid3D",
"category": "Other",
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"platform_offset": [ 0, 0, 0] "platform_offset": [ 0, 0, 0]
}, },

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "Ultimaker", "author": "Ultimaker",
"manufacturer": "Rigid3D", "manufacturer": "Rigid3D",
"category": "Other",
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"platform_offset": [ 0, 0, 0] "platform_offset": [ 0, 0, 0]
}, },

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "Ultimaker", "author": "Ultimaker",
"manufacturer": "Rigid3D", "manufacturer": "Rigid3D",
"category": "Other",
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"platform_offset": [ 0, 0, 0] "platform_offset": [ 0, 0, 0]
}, },

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "Ultimaker", "author": "Ultimaker",
"manufacturer": "Rigid3D", "manufacturer": "Rigid3D",
"category": "Other",
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"platform_offset": [ 0, 0, 0] "platform_offset": [ 0, 0, 0]
}, },

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "Rigid3D", "author": "Rigid3D",
"manufacturer": "Rigid3D", "manufacturer": "Rigid3D",
"category": "Other",
"has_materials": false, "has_materials": false,
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"platform": "rigid3d_zero2_platform.stl", "platform": "rigid3d_zero2_platform.stl",

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "RBC", "author": "RBC",
"manufacturer": "RigidBot", "manufacturer": "RigidBot",
"category": "Other",
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"platform": "rigidbot_platform.stl" "platform": "rigidbot_platform.stl"
}, },

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "RBC", "author": "RBC",
"manufacturer": "RigidBot", "manufacturer": "RigidBot",
"category": "Other",
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"platform": "rigidbotbig_platform.stl" "platform": "rigidbotbig_platform.stl"
}, },

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "Ultimaker", "author": "Ultimaker",
"manufacturer": "Robo 3D", "manufacturer": "Robo 3D",
"category": "Other",
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"platform_offset": [ 0, 0, 0] "platform_offset": [ 0, 0, 0]
}, },

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "typeamachines", "author": "typeamachines",
"manufacturer": "typeamachines", "manufacturer": "typeamachines",
"category": "Other",
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"platform": "tam_series1.stl", "platform": "tam_series1.stl",
"platform_offset": [-580.0, -6.23, 253.5], "platform_offset": [-580.0, -6.23, 253.5],

View file

@ -6,6 +6,7 @@
"metadata": { "metadata": {
"author": "Ultimaker", "author": "Ultimaker",
"manufacturer": "Ultimaker B.V.", "manufacturer": "Ultimaker B.V.",
"category": "Ultimaker",
"visible": false "visible": false
}, },
"overrides": { "overrides": {

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "Ultimaker", "author": "Ultimaker",
"manufacturer": "Ultimaker B.V.", "manufacturer": "Ultimaker B.V.",
"category": "Ultimaker",
"weight": 3, "weight": 3,
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"icon": "icon_ultimaker2.png", "icon": "icon_ultimaker2.png",

View file

@ -6,7 +6,6 @@
"metadata": { "metadata": {
"author": "Ultimaker", "author": "Ultimaker",
"manufacturer": "Ultimaker B.V.", "manufacturer": "Ultimaker B.V.",
"category": "Ultimaker",
"weight": 3, "weight": 3,
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"icon": "icon_ultimaker2.png", "icon": "icon_ultimaker2.png",

View file

@ -6,7 +6,6 @@
"metadata": { "metadata": {
"author": "Ultimaker", "author": "Ultimaker",
"manufacturer": "Ultimaker B.V.", "manufacturer": "Ultimaker B.V.",
"category": "Ultimaker",
"quality_definition": "ultimaker2_plus", "quality_definition": "ultimaker2_plus",
"weight": 2, "weight": 2,
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",

View file

@ -6,7 +6,6 @@
"metadata": { "metadata": {
"author": "Ultimaker", "author": "Ultimaker",
"manufacturer": "Ultimaker B.V.", "manufacturer": "Ultimaker B.V.",
"category": "Ultimaker",
"weight": 3, "weight": 3,
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"icon": "icon_ultimaker2.png", "icon": "icon_ultimaker2.png",

View file

@ -6,7 +6,6 @@
"metadata": { "metadata": {
"author": "Ultimaker", "author": "Ultimaker",
"manufacturer": "Ultimaker B.V.", "manufacturer": "Ultimaker B.V.",
"category": "Ultimaker",
"weight": 1, "weight": 1,
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"platform": "ultimaker2_platform.obj", "platform": "ultimaker2_platform.obj",

View file

@ -6,7 +6,6 @@
"metadata": { "metadata": {
"author": "Ultimaker", "author": "Ultimaker",
"manufacturer": "Ultimaker B.V.", "manufacturer": "Ultimaker B.V.",
"category": "Ultimaker",
"visible": true, "visible": true,
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"platform": "ultimaker3_platform.obj", "platform": "ultimaker3_platform.obj",

View file

@ -6,7 +6,6 @@
"metadata": { "metadata": {
"author": "Ultimaker", "author": "Ultimaker",
"manufacturer": "Ultimaker B.V.", "manufacturer": "Ultimaker B.V.",
"category": "Ultimaker",
"quality_definition": "ultimaker3", "quality_definition": "ultimaker3",
"visible": true, "visible": true,
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "Ultimaker", "author": "Ultimaker",
"manufacturer": "Ultimaker B.V.", "manufacturer": "Ultimaker B.V.",
"category": "Ultimaker",
"weight": 4, "weight": 4,
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"icon": "icon_ultimaker.png", "icon": "icon_ultimaker.png",

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "Ultimaker", "author": "Ultimaker",
"manufacturer": "Ultimaker B.V.", "manufacturer": "Ultimaker B.V.",
"category": "Ultimaker",
"weight": 4, "weight": 4,
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"icon": "icon_ultimaker.png", "icon": "icon_ultimaker.png",

View file

@ -6,7 +6,6 @@
"metadata": { "metadata": {
"author": "Ultimaker", "author": "Ultimaker",
"manufacturer": "Ultimaker B.V.", "manufacturer": "Ultimaker B.V.",
"category": "Ultimaker",
"weight": 4, "weight": 4,
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"icon": "icon_ultimaker.png", "icon": "icon_ultimaker.png",

View file

@ -6,7 +6,6 @@
"metadata": { "metadata": {
"author": "Unimatech", "author": "Unimatech",
"manufacturer": "Unimatech", "manufacturer": "Unimatech",
"category": "Other",
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"icon": "icon_ultimaker2.png" "icon": "icon_ultimaker2.png"
}, },

View file

@ -6,7 +6,6 @@
"metadata": { "metadata": {
"visible": true, "visible": true,
"manufacturer": "Velleman", "manufacturer": "Velleman",
"category": "Other",
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"icon": "icon_ultimaker2", "icon": "icon_ultimaker2",
"platform": "Vertex_build_panel.stl", "platform": "Vertex_build_panel.stl",

View file

@ -6,7 +6,6 @@
"metadata": { "metadata": {
"visible": true, "visible": true,
"manufacturer": "Velleman", "manufacturer": "Velleman",
"category": "Other",
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"icon": "icon_ultimaker2", "icon": "icon_ultimaker2",
"platform": "Vertex_build_panel.stl", "platform": "Vertex_build_panel.stl",

View file

@ -7,7 +7,6 @@
"visible": true, "visible": true,
"author": "Ultimaker", "author": "Ultimaker",
"manufacturer": "Unknown", "manufacturer": "Unknown",
"category": "Other",
"file_formats": "text/x-gcode", "file_formats": "text/x-gcode",
"platform_offset": [ 0, 0, 0] "platform_offset": [ 0, 0, 0]
}, },

View file

@ -39,17 +39,20 @@ Menu
visible: printerConnected && Cura.MachineManager.printerOutputDevices[0].materialNames.length > extruderIndex visible: printerConnected && Cura.MachineManager.printerOutputDevices[0].materialNames.length > extruderIndex
onTriggered: onTriggered:
{ {
var material_id = Cura.MachineManager.printerOutputDevices[0].materialIds[extruderIndex]; var activeExtruderIndex = ExtruderManager.activeExtruderIndex;
ExtruderManager.setActiveExtruderIndex(extruderIndex);
var materialId = Cura.MachineManager.printerOutputDevices[0].materialIds[extruderIndex];
var items = materialsModel.items; var items = materialsModel.items;
// materialsModel.find cannot be used because we need to look inside the metadata property of items // materialsModel.find cannot be used because we need to look inside the metadata property of items
for(var i in items) for(var i in items)
{ {
if (items[i]["metadata"]["GUID"] == material_id) if (items[i]["metadata"]["GUID"] == materialId)
{ {
Cura.MachineManager.setActiveMaterial(items[i].id); Cura.MachineManager.setActiveMaterial(items[i].id);
break; break;
} }
} }
ExtruderManager.setActiveExtruderIndex(activeExtruderIndex);
} }
} }
@ -64,12 +67,15 @@ Menu
MenuItem MenuItem
{ {
text: model.name text: model.name
checkable: true; checkable: true
checked: model.id == Cura.MachineManager.activeMaterialId; checked: model.id == Cura.MachineManager.allActiveMaterialIds[ExtruderManager.extruderIds[extruderIndex]]
exclusiveGroup: group; exclusiveGroup: group
onTriggered: onTriggered:
{ {
var activeExtruderIndex = ExtruderManager.activeExtruderIndex;
ExtruderManager.setActiveExtruderIndex(extruderIndex);
Cura.MachineManager.setActiveMaterial(model.id); Cura.MachineManager.setActiveMaterial(model.id);
ExtruderManager.setActiveExtruderIndex(activeExtruderIndex);
} }
} }
onObjectAdded: menu.insertItem(index, object) onObjectAdded: menu.insertItem(index, object)
@ -102,12 +108,15 @@ Menu
MenuItem MenuItem
{ {
text: model.name text: model.name
checkable: true; checkable: true
checked: model.id == Cura.MachineManager.activeMaterialId; checked: model.id == Cura.MachineManager.allActiveMaterialIds[ExtruderManager.extruderIds[extruderIndex]]
exclusiveGroup: group; exclusiveGroup: group
onTriggered: onTriggered:
{ {
var activeExtruderIndex = ExtruderManager.activeExtruderIndex;
ExtruderManager.setActiveExtruderIndex(extruderIndex);
Cura.MachineManager.setActiveMaterial(model.id); Cura.MachineManager.setActiveMaterial(model.id);
ExtruderManager.setActiveExtruderIndex(activeExtruderIndex);
} }
} }
onObjectAdded: brandMaterialsMenu.insertItem(index, object) onObjectAdded: brandMaterialsMenu.insertItem(index, object)

View file

@ -30,12 +30,15 @@ Menu
visible: printerConnected && Cura.MachineManager.printerOutputDevices[0].hotendIds.length > extruderIndex visible: printerConnected && Cura.MachineManager.printerOutputDevices[0].hotendIds.length > extruderIndex
onTriggered: onTriggered:
{ {
var activeExtruderIndex = ExtruderManager.activeExtruderIndex;
ExtruderManager.setActiveExtruderIndex(extruderIndex);
var hotendId = Cura.MachineManager.printerOutputDevices[0].hotendIds[extruderIndex]; var hotendId = Cura.MachineManager.printerOutputDevices[0].hotendIds[extruderIndex];
var itemIndex = nozzleInstantiator.model.find("name", hotendId); var itemIndex = nozzleInstantiator.model.find("name", hotendId);
if(itemIndex > -1) if(itemIndex > -1)
{ {
Cura.MachineManager.setActiveVariant(nozzleInstantiator.model.getItem(itemIndex).id) Cura.MachineManager.setActiveVariant(nozzleInstantiator.model.getItem(itemIndex).id);
} }
ExtruderManager.setActiveExtruderIndex(activeExtruderIndex);
} }
} }
@ -56,11 +59,17 @@ Menu
} }
} }
MenuItem { MenuItem {
text: model.name; text: model.name
checkable: true; checkable: true
checked: model.id == Cura.MachineManager.activeVariantId; checked: model.id == Cura.MachineManager.allActiveVariantIds[ExtruderManager.extruderIds[extruderIndex]]
exclusiveGroup: group exclusiveGroup: group
onTriggered: Cura.MachineManager.setActiveVariant(model.id) onTriggered:
{
var activeExtruderIndex = ExtruderManager.activeExtruderIndex;
ExtruderManager.setActiveExtruderIndex(extruderIndex);
Cura.MachineManager.setActiveVariant(model.id);
ExtruderManager.setActiveExtruderIndex(activeExtruderIndex);
}
} }
onObjectAdded: menu.insertItem(index, object) onObjectAdded: menu.insertItem(index, object)
onObjectRemoved: menu.removeItem(object) onObjectRemoved: menu.removeItem(object)

View file

@ -161,6 +161,12 @@ UM.PreferencesPage
append({ text: "Português do Brasil", code: "ptbr" }) append({ text: "Português do Brasil", code: "ptbr" })
append({ text: "Русский", code: "ru" }) append({ text: "Русский", code: "ru" })
append({ text: "Türkçe", code: "tr" }) append({ text: "Türkçe", code: "tr" })
var date_object = new Date();
if (date_object.getUTCMonth() == 8 && date_object.getUTCDate() == 19) //Only add Pirate on the 19th of September.
{
append({ text: "Pirate", code: "7s" })
}
} }
} }

View file

@ -248,6 +248,7 @@ Rectangle
width: parent.width * 0.7 + UM.Theme.getSize("sidebar_margin").width width: parent.width * 0.7 + UM.Theme.getSize("sidebar_margin").width
height: UM.Theme.getSize("setting_control").height height: UM.Theme.getSize("setting_control").height
anchors.left: globalProfileLabel.right
anchors.right: parent.right anchors.right: parent.right
tooltip: Cura.MachineManager.activeQualityName tooltip: Cura.MachineManager.activeQualityName
style: UM.Theme.styles.sidebar_header_button style: UM.Theme.styles.sidebar_header_button

View file

@ -160,46 +160,6 @@ Column
visible: !extruderSelectionRow.visible visible: !extruderSelectionRow.visible
} }
// Print core row
Item
{
id: printCoreRow
height: UM.Theme.getSize("sidebar_setup").height
visible: Cura.MachineManager.hasVariants && !sidebar.monitoringPrint && !sidebar.hideSettings
anchors
{
left: parent.left
leftMargin: UM.Theme.getSize("sidebar_margin").width
right: parent.right
rightMargin: UM.Theme.getSize("sidebar_margin").width
}
Text
{
id: printCoreLabel
text: Cura.MachineManager.activeDefinitionVariantsName;
width: parent.width * 0.45 - UM.Theme.getSize("sidebar_margin").width
font: UM.Theme.getFont("default");
color: UM.Theme.getColor("text");
}
ToolButton {
id: printCoreSelection
text: Cura.MachineManager.activeVariantName
tooltip: Cura.MachineManager.activeVariantName;
visible: Cura.MachineManager.hasVariants
height: UM.Theme.getSize("setting_control").height
width: parent.width * 0.7 + UM.Theme.getSize("sidebar_margin").width
anchors.right: parent.right
style: UM.Theme.styles.sidebar_header_button
activeFocusOnPress: true;
menu: NozzleMenu { extruderIndex: base.currentExtruderIndex }
}
}
// Material Row // Material Row
Item Item
{ {
@ -219,7 +179,7 @@ Column
{ {
id: materialLabel id: materialLabel
text: catalog.i18nc("@label","Material"); text: catalog.i18nc("@label","Material");
width: parent.width * 0.45 - UM.Theme.getSize("sidebar_margin").width width: parent.width * 0.45 - UM.Theme.getSize("default_margin").width
font: UM.Theme.getFont("default"); font: UM.Theme.getFont("default");
color: UM.Theme.getColor("text"); color: UM.Theme.getColor("text");
} }
@ -256,6 +216,46 @@ Column
} }
} }
// Print core row
Item
{
id: printCoreRow
height: UM.Theme.getSize("sidebar_setup").height
visible: Cura.MachineManager.hasVariants && !sidebar.monitoringPrint && !sidebar.hideSettings
anchors
{
left: parent.left
leftMargin: UM.Theme.getSize("sidebar_margin").width
right: parent.right
rightMargin: UM.Theme.getSize("sidebar_margin").width
}
Text
{
id: printCoreLabel
text: Cura.MachineManager.activeDefinitionVariantsName;
width: parent.width * 0.45 - UM.Theme.getSize("default_margin").width
font: UM.Theme.getFont("default");
color: UM.Theme.getColor("text");
}
ToolButton {
id: printCoreSelection
text: Cura.MachineManager.activeVariantName
tooltip: Cura.MachineManager.activeVariantName;
visible: Cura.MachineManager.hasVariants
height: UM.Theme.getSize("setting_control").height
width: parent.width * 0.7 + UM.Theme.getSize("sidebar_margin").width
anchors.right: parent.right
style: UM.Theme.styles.sidebar_header_button
activeFocusOnPress: true;
menu: NozzleMenu { extruderIndex: base.currentExtruderIndex }
}
}
// Material info row // Material info row
Item Item
{ {

View file

@ -57,8 +57,40 @@ Rectangle
id: showMonitor id: showMonitor
height: UM.Theme.getSize("sidebar_header").height height: UM.Theme.getSize("sidebar_header").height
onClicked: base.startMonitoringPrint() onClicked: base.startMonitoringPrint()
text: catalog.i18nc("@title:tab", "Print") text: catalog.i18nc("@title:tab", "Monitor")
iconSource: UM.Theme.getIcon("tab_monitor") iconSource: printerConnected ? UM.Theme.getIcon("tab_monitor_with_status") : UM.Theme.getIcon("tab_monitor")
property color overlayColor:
{
if(!printerAcceptsCommands)
{
return UM.Theme.getColor("status_unknown");
}
if(Cura.MachineManager.printerOutputDevices[0].printerState == "maintenance")
{
return UM.Theme.getColor("status_busy");
}
switch(Cura.MachineManager.printerOutputDevices[0].jobState)
{
case "printing":
case "pre_print":
case "wait_cleanup":
case "pausing":
case "resuming":
return UM.Theme.getColor("status_busy");
case "ready":
case "":
return UM.Theme.getColor("status_ready");
case "paused":
return UM.Theme.getColor("status_paused");
case "error":
return UM.Theme.getColor("status_stopped");
case "offline":
return UM.Theme.getColor("status_offline");
default:
return UM.Theme.getColor("text_reversed");
}
}
property string overlayIconSource: property string overlayIconSource:
{ {
if(!printerConnected) if(!printerConnected)

View file

@ -14,13 +14,7 @@ setting_version = 2
layer_height = 0.35 layer_height = 0.35
adhesion_type = skirt adhesion_type = skirt
speed_print = 70 speed_print = 60
speed_infill = 60
speed_layer_0 = 20
speed_wall_0 = 30
speed_wall_x = 50
speed_topbottom = 30
speed_travel = 120
material_print_temperature = 214 material_print_temperature = 214
material_bed_temperature = 60 material_bed_temperature = 60

View file

@ -14,13 +14,7 @@ setting_version = 2
layer_height = 0.06 layer_height = 0.06
adhesion_type = skirt adhesion_type = skirt
speed_print = 40 speed_print = 30
speed_infill = 50
speed_layer_0 = 15
speed_wall_0 = 20
speed_wall_x = 40
speed_topbottom = 20
speed_travel = 120
material_print_temperature = 214 material_print_temperature = 214
material_bed_temperature = 60 material_bed_temperature = 60

View file

@ -14,13 +14,7 @@ setting_version = 2
layer_height = 0.1 layer_height = 0.1
adhesion_type = skirt adhesion_type = skirt
speed_print = 50 speed_print = 40
speed_infill = 60
speed_layer_0 = 20
speed_wall_0 = 25
speed_wall_x = 45
speed_topbottom = 30
speed_travel = 120
material_print_temperature = 214 material_print_temperature = 214
material_bed_temperature = 60 material_bed_temperature = 60

View file

@ -14,13 +14,7 @@ setting_version = 2
layer_height = 0.2 layer_height = 0.2
adhesion_type = skirt adhesion_type = skirt
speed_print = 70 speed_print = 60
speed_infill = 60
speed_layer_0 = 20
speed_wall_0 = 30
speed_wall_x = 50
speed_topbottom = 30
speed_travel = 120
material_print_temperature = 214 material_print_temperature = 214
material_bed_temperature = 60 material_bed_temperature = 60

Some files were not shown because too many files have changed in this diff Show more