Merge remote-tracking branch 'origin/master' into CURA-7290_manual_account_sync

# Conflicts:
#	cura/API/Account.py
This commit is contained in:
Nino van Hooff 2020-05-12 14:59:01 +02:00
commit b40b8e8489
1938 changed files with 5246 additions and 2008 deletions

1
.gitignore vendored
View file

@ -53,6 +53,7 @@ plugins/GodMode
plugins/OctoPrintPlugin
plugins/ProfileFlattener
plugins/SettingsGuide
plugins/SettingsGuide2
plugins/SVGToolpathReader
plugins/X3GWriter

View file

@ -42,7 +42,6 @@ class Account(QObject):
# Signal emitted when user logged in or out.
loginStateChanged = pyqtSignal(bool)
accessTokenChanged = pyqtSignal()
cloudPrintersDetectedChanged = pyqtSignal(bool)
syncRequested = pyqtSignal()
"""Sync services may connect to this signal to receive sync triggers.
Services should be resilient to receiving a signal while they are still syncing,
@ -142,10 +141,6 @@ class Account(QObject):
def isLoggedIn(self) -> bool:
return self._logged_in
@pyqtProperty(bool, notify=cloudPrintersDetectedChanged)
def newCloudPrintersDetected(self) -> bool:
return self._new_cloud_printers_detected
def _onLoginStateChanged(self, logged_in: bool = False, error_message: Optional[str] = None) -> None:
if error_message:
if self._error_message:

View file

@ -57,6 +57,7 @@ from cura.Machines.MachineErrorChecker import MachineErrorChecker
from cura.Machines.Models.BuildPlateModel import BuildPlateModel
from cura.Machines.Models.CustomQualityProfilesDropDownMenuModel import CustomQualityProfilesDropDownMenuModel
from cura.Machines.Models.DiscoveredPrintersModel import DiscoveredPrintersModel
from cura.Machines.Models.DiscoveredCloudPrintersModel import DiscoveredCloudPrintersModel
from cura.Machines.Models.ExtrudersModel import ExtrudersModel
from cura.Machines.Models.FavoriteMaterialsModel import FavoriteMaterialsModel
from cura.Machines.Models.FirstStartMachineActionsModel import FirstStartMachineActionsModel
@ -125,7 +126,7 @@ class CuraApplication(QtApplication):
# SettingVersion represents the set of settings available in the machine/extruder definitions.
# You need to make sure that this version number needs to be increased if there is any non-backwards-compatible
# changes of the settings.
SettingVersion = 13
SettingVersion = 15
Created = False
@ -202,6 +203,7 @@ class CuraApplication(QtApplication):
self._quality_management_model = None
self._discovered_printer_model = DiscoveredPrintersModel(self, parent = self)
self._discovered_cloud_printers_model = DiscoveredCloudPrintersModel(self, parent = self)
self._first_start_machine_actions_model = None
self._welcome_pages_model = WelcomePagesModel(self, parent = self)
self._add_printer_pages_model = AddPrinterPagesModel(self, parent = self)
@ -887,6 +889,10 @@ class CuraApplication(QtApplication):
def getDiscoveredPrintersModel(self, *args) -> "DiscoveredPrintersModel":
return self._discovered_printer_model
@pyqtSlot(result=QObject)
def getDiscoveredCloudPrintersModel(self, *args) -> "DiscoveredCloudPrintersModel":
return self._discovered_cloud_printers_model
@pyqtSlot(result = QObject)
def getFirstStartMachineActionsModel(self, *args) -> "FirstStartMachineActionsModel":
if self._first_start_machine_actions_model is None:
@ -1085,6 +1091,7 @@ class CuraApplication(QtApplication):
self.processEvents()
qmlRegisterType(DiscoveredPrintersModel, "Cura", 1, 0, "DiscoveredPrintersModel")
qmlRegisterType(DiscoveredCloudPrintersModel, "Cura", 1, 7, "DiscoveredCloudPrintersModel")
qmlRegisterSingletonType(QualityProfilesDropDownMenuModel, "Cura", 1, 0,
"QualityProfilesDropDownMenuModel", self.getQualityProfilesDropDownMenuModel)
qmlRegisterSingletonType(CustomQualityProfilesDropDownMenuModel, "Cura", 1, 0,

View file

@ -0,0 +1,71 @@
from typing import Optional, TYPE_CHECKING, List, Dict
from PyQt5.QtCore import QObject, pyqtSlot, Qt, pyqtSignal, pyqtProperty
from UM.Qt.ListModel import ListModel
if TYPE_CHECKING:
from cura.CuraApplication import CuraApplication
class DiscoveredCloudPrintersModel(ListModel):
"""
Model used to inform the application about newly added cloud printers, which are discovered from the user's account
"""
DeviceKeyRole = Qt.UserRole + 1
DeviceNameRole = Qt.UserRole + 2
DeviceTypeRole = Qt.UserRole + 3
DeviceFirmwareVersionRole = Qt.UserRole + 4
cloudPrintersDetectedChanged = pyqtSignal(bool)
def __init__(self, application: "CuraApplication", parent: Optional["QObject"] = None) -> None:
super().__init__(parent)
self.addRoleName(self.DeviceKeyRole, "key")
self.addRoleName(self.DeviceNameRole, "name")
self.addRoleName(self.DeviceTypeRole, "machine_type")
self.addRoleName(self.DeviceFirmwareVersionRole, "firmware_version")
self._discovered_cloud_printers_list = [] # type: List[Dict[str, str]]
self._application = application # type: CuraApplication
def addDiscoveredCloudPrinters(self, new_devices: List[Dict[str, str]]) -> None:
"""
Adds all the newly discovered cloud printers into the DiscoveredCloudPrintersModel.
:param new_devices: List of dictionaries which contain information about added cloud printers. Example:
{
"key": "YjW8pwGYcaUvaa0YgVyWeFkX3z",
"name": "NG 001",
"machine_type": "Ultimaker S5",
"firmware_version": "5.5.12.202001"
}
:return: None
"""
self._discovered_cloud_printers_list.extend(new_devices)
self._update()
# Inform whether new cloud printers have been detected. If they have, the welcome wizard can close.
self.cloudPrintersDetectedChanged.emit(len(new_devices) > 0)
@pyqtSlot()
def clear(self) -> None:
"""
Clears the contents of the DiscoveredCloudPrintersModel.
:return: None
"""
self._discovered_cloud_printers_list = []
self._update()
self.cloudPrintersDetectedChanged.emit(False)
def _update(self) -> None:
"""
Sorts the newly discovered cloud printers by name and then updates the ListModel.
:return: None
"""
items = self._discovered_cloud_printers_list[:]
items.sort(key = lambda k: k["name"])
self.setItems(items)

View file

@ -1,14 +1,16 @@
# Copyright (c) 2018 Ultimaker B.V.
# Copyright (c) 2020 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
from typing import Optional, TYPE_CHECKING
from UM.Qt.QtApplication import QtApplication
from UM.Logger import Logger
from UM.Math.Vector import Vector
from UM.Resources import Resources
from UM.View.RenderPass import RenderPass
from UM.View.GL.OpenGL import OpenGL
from UM.View.GL.ShaderProgram import InvalidShaderProgramError
from UM.View.RenderBatch import RenderBatch
from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator
@ -31,7 +33,11 @@ class PickingPass(RenderPass):
def render(self) -> None:
if not self._shader:
try:
self._shader = OpenGL.getInstance().createShaderProgram(Resources.getPath(Resources.Shaders, "camera_distance.shader"))
except InvalidShaderProgramError:
Logger.error("Unable to compile shader program: camera_distance.shader")
return
width, height = self.getSize()
self._gl.glViewport(0, 0, width, height)

View file

@ -1,10 +1,11 @@
# Copyright (c) 2018 Ultimaker B.V.
# Copyright (c) 2020 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
from typing import Optional, TYPE_CHECKING, cast
from UM.Application import Application
from UM.Logger import Logger
from UM.Resources import Resources
from UM.View.RenderPass import RenderPass
@ -63,6 +64,8 @@ class PreviewPass(RenderPass):
self._shader.setUniformValue("u_shininess", 20.0)
self._shader.setUniformValue("u_renderError", 0.0) # We don't want any error markers!.
self._shader.setUniformValue("u_faceId", -1) # Don't render any selected faces in the preview.
else:
Logger.error("Unable to compile shader program: overhang.shader")
if not self._non_printing_shader:
if self._non_printing_shader:

View file

@ -1,4 +1,4 @@
# Copyright (c) 2019 Ultimaker B.V.
# Copyright (c) 2020 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
import time
@ -1424,6 +1424,9 @@ class MachineManager(QObject):
machine_definition_id = self._global_container_stack.definition.id
machine_node = ContainerTree.getInstance().machines.get(machine_definition_id)
variant_node = machine_node.variants.get(variant_name)
if variant_node is None:
Logger.error("There is no variant with the name {variant_name}.")
return
self.setVariant(position, variant_node)
@pyqtSlot(str, "QVariant")

View file

@ -21,6 +21,11 @@ class AddPrinterPagesModel(WelcomePagesModel):
"page_url": self._getBuiltinWelcomePagePath("AddPrinterByIpContent.qml"),
"next_page_id": "machine_actions",
})
self._pages.append({"id": "add_cloud_printers",
"page_url": self._getBuiltinWelcomePagePath("AddCloudPrintersView.qml"),
"is_final_page": True,
"next_page_button_text": self._catalog.i18nc("@action:button", "Finish"),
})
self._pages.append({"id": "machine_actions",
"page_url": self._getBuiltinWelcomePagePath("FirstStartMachineActionsContent.qml"),
"should_show_function": self.shouldShowMachineActions,

View file

@ -119,8 +119,10 @@ class WelcomePagesModel(ListModel):
return
next_page_index = idx
is_final_page = page_item.get("is_final_page")
# If we have reached the last page, emit allFinished signal and reset.
if next_page_index == len(self._items):
if next_page_index == len(self._items) or is_final_page:
self.atEnd()
return
@ -255,6 +257,11 @@ class WelcomePagesModel(ListModel):
"page_url": self._getBuiltinWelcomePagePath("AddPrinterByIpContent.qml"),
"next_page_id": "machine_actions",
},
{"id": "add_cloud_printers",
"page_url": self._getBuiltinWelcomePagePath("AddCloudPrintersView.qml"),
"is_final_page": True, # If we end up in this page, the next button will close the dialog
"next_page_button_text": self._catalog.i18nc("@action:button", "Finish"),
},
{"id": "machine_actions",
"page_url": self._getBuiltinWelcomePagePath("FirstStartMachineActionsContent.qml"),
"should_show_function": self.shouldShowMachineActions,

View file

@ -19,3 +19,4 @@ Index
The following chapters are available in this documentation:
* [Repositories](repositories.md): An overview of the repositories that together make up the Cura application.
* [Profiles](profiles/profiles.md): About the setting and profile system of Cura.
* [Scene](scene/scene.md): How Cura's 3D scene looks.

View file

@ -0,0 +1,27 @@
Build Volume
====
The build volume is a scene node. This node gets placed somewhere in the scene. This is a specialised scene node that draws the build volume and all of its bits and pieces.
Volume bounds
----
The build volume draws a cube (for rectangular build plates) that represents the printable build volume. This outline is drawn with a blue line. To render this, the Build Volume scene node generates a cube and instructs OpenGL to draw a wireframe of this cube. This way the wireframe is always a single pixel wide regardless of view distance. This cube is automatically resized when the relevant settings change, like the width, height and depth of the printer, the shape of the build plate, the Print Sequence or the gantry height.
The build volume also draws a grid underneath the build volume. The grid features 1cm lines which allows the user to roughly estimate how big its print is or the distance between prints. It also features a finer 1mm line pattern within that grid. The grid is drawn as a single quad. This quad is then sent to the graphical card with a specialised shader which draws the grid pattern.
For elliptical build plates, the volume bounds are drawn as two circles, one at the top and one at the bottom of the available height. The build plate grid is drawn as a tesselated circle, but with the same shader.
Disallowed areas
----
The build volume also calculates and draws the disallowed areas. These are drawn as a grey shadow. The point of these disallowed areas is to denote the areas where the user is not allowed to place any objects. The reason to forbid placing an object can be a lot of things.
One disallowed area that is always present is the border around the build volume. This border is there to prevent the nozzle from going outside of the bounds of the build volume. For instance, if you were to print an object with a brim of 8mm, you won't be able to place that object closer than 8mm to the edge of the build volume. Doing so would draw part of the brim outside of the build volume. The width of these disallowed areas depends on a bunch of things. Most commonly the build plate adhesion setting or the Avoid Distance setting is the culprit. However this border is also affected by the draft shield, ooze shield and Support Horizontal Expansion, among others.
Another disallowed area stems from the distance between the nozzles for some multi-extrusion printers. The total build volume in Cura is normally the volume that can be reached by either nozzle. However for every extruder that your print uses, the build volume will be shrunk to the intersecting area that all used nozzles can reach. This is done by adding disallowed areas near the border. For instance, if you have two extruders with 18mm X distance between them, and your print uses only the left extruder, there will be an extra border of 18mm on the right hand side of the printer, because the left nozzle can't reach that far to the right. If you then use both extruders, there will be an 18mm border on both sides.
There are also disallowed areas for features that are printed. There are as of this writing two such disallowed areas: The prime tower and the prime blob. You can't print an object on those locations since they would intersect with the printed feature.
Then there are disallowed areas imposed by the current printer. Some printers have things in the way of your print, such as clips that hold the build plate down, or cameras, switching bays or wiping brushes. These are encoded in the `machine_disallowed_areas` and `nozzle_disallowed_areas` settings, as polygons. The difference between these two settings is that one is intended to describe where the print head is not allowed to move. The other is intended to describe where the currently active nozzle is not allowed to move. This distinction is meant to allow inactive nozzles to move over things like build plate clips or stickers, which can slide underneath an inactive nozzle.
Finally, there are disallowed areas imposed by other objects that you want to print. Each object and group has an associated Convex Hull Node, which denotes the volume that the object is going to be taking up while printing. This convex hull is projected down to the build plate and determines there the volume that the object is going to occupy.
Each type of disallowed area is affected by certain settings. The border around the build volume, for instance, is affected by the brim, but the disallowed areas for printed objects are not. This is because the brim could go outside of the build volume but the brim can't hit any other objects. If the brim comes too close to other objects, it merges with the brim of those objects. As such, generating each type of disallowed area requires specialised business logic to determine how the setting affects the disallowed area. It needs to take the highest of two settings sometimes, or it needs to sum them together, multiplying a certain line width by an accompanying line count setting, and so on. All this logic is implemented in the BuildVolume class.

26
docs/scene/scene.md Normal file
View file

@ -0,0 +1,26 @@
Scene
====
The 3D scene in Cura is designed as a [Scene Graph](https://en.wikipedia.org/wiki/Scene_graph), which is common in many 3D graphics applications. The scene graph of Cura is usually very flat, but has the possibility to have nested objects which inherit transformations from each other.
Scene Graph
----
Cura's scene graph is a mere tree data structure. This tree contains all scene nodes, which represent the objects in the 3D scene.
The main idea behind the scene tree is that each scene node has a transformation applied to it. The scene nodes can be nested beneath other scene nodes. The transformation of the parents is then also applied to the children. This way you can have scene nodes grouped together and transform the group as a whole. Since the transformations are all linear, this ensures that the elements of this group stay in the same relative position and orientation. It will look as if the whole group is a single object. This idea is very common for games where objects are often composed of multiple 3D models but need to move together as a whole. For Cura it is used to group objects together and to transform the collision area correctly.
A Typical Scene
----
Cura's scene has a few nodes that are always present, and a few nodes that are repeated for every object that the user loads onto their build plate. To give an idea of how a scene normally looks, this is an overview of a typical scene tree for Cura.
* Root
* Camera
* [Build volume](build_volume.md)
* Platform
* Object 1
* Group 1
* Object 2
* Object 3
* Object 1 convex hull node
* Object 2 convex hull node
* Object 3 convex hull node
* Group 1 convex hull node

View file

@ -489,7 +489,7 @@ class CuraEngineBackend(QObject, Backend):
#
# \param source The scene node that was changed.
def _onSceneChanged(self, source: SceneNode) -> None:
if not source.callDecoration("isSliceable"):
if not source.callDecoration("isSliceable") and source != self._scene.getRoot():
return
# This case checks if the source node is a node that contains GCode. In this case the

View file

@ -43,7 +43,7 @@ UM.Dialog
TextField {
id: peak_height
objectName: "Peak_Height"
validator: RegExpValidator {regExp: /^-?\d{1,3}([\,|\.]\d*)?$/}
validator: RegExpValidator {regExp: /^\d{1,3}([\,|\.]\d*)?$/}
width: 180 * screenScaleFactor
onTextChanged: { manager.onPeakHeightChanged(text) }
}

View file

@ -50,7 +50,7 @@ class ImageReader(MeshReader):
size = max(self._ui.getWidth(), self._ui.getDepth())
return self._generateSceneNode(file_name, size, self._ui.peak_height, self._ui.base_height, self._ui.smoothing, 512, self._ui.lighter_is_higher, self._ui.use_transparency_model, self._ui.transmittance_1mm)
def _generateSceneNode(self, file_name, xz_size, peak_height, base_height, blur_iterations, max_size, lighter_is_higher, use_transparency_model, transmittance_1mm):
def _generateSceneNode(self, file_name, xz_size, height_from_base, base_height, blur_iterations, max_size, lighter_is_higher, use_transparency_model, transmittance_1mm):
scene_node = SceneNode()
mesh = MeshBuilder()
@ -68,8 +68,10 @@ class ImageReader(MeshReader):
if img.width() < 2 or img.height() < 2:
img = img.scaled(width, height, Qt.IgnoreAspectRatio)
height_from_base = max(height_from_base, 0)
base_height = max(base_height, 0)
peak_height = max(peak_height, -base_height)
peak_height = base_height + height_from_base
xz_size = max(xz_size, 1)
scale_vector = Vector(xz_size, peak_height, xz_size)

View file

@ -155,8 +155,10 @@ class ImageReaderUI(QObject):
if len(value) > 0:
try:
self.peak_height = float(value.replace(",", "."))
if self.peak_height < 0:
self.peak_height = 2.5
except ValueError: # Can happen with incomplete numbers, such as "-".
self._width = 0
self.peak_height = 2.5 # restore default
else:
self.peak_height = 0

View file

@ -108,13 +108,12 @@ class PauseAtHeight(Script):
"type": "float",
"default_value": 3.3333
},
"redo_layers":
"redo_layer":
{
"label": "Redo Layers",
"description": "Redo a number of previous layers after a pause to increases adhesion.",
"unit": "layers",
"type": "int",
"default_value": 0
"label": "Redo Layer",
"description": "Redo the last layer before the pause, to get the filament flowing again after having oozed a bit during the pause.",
"type": "bool",
"default_value": false
},
"standby_temperature":
{
@ -160,7 +159,7 @@ class PauseAtHeight(Script):
park_x = self.getSettingValueByKey("head_park_x")
park_y = self.getSettingValueByKey("head_park_y")
layers_started = False
redo_layers = self.getSettingValueByKey("redo_layers")
redo_layer = self.getSettingValueByKey("redo_layer")
standby_temperature = self.getSettingValueByKey("standby_temperature")
firmware_retract = Application.getInstance().getGlobalContainerStack().getProperty("machine_firmware_retract", "value")
control_temperatures = Application.getInstance().getGlobalContainerStack().getProperty("machine_nozzle_temp_enabled", "value")
@ -264,15 +263,14 @@ class PauseAtHeight(Script):
if current_e >= 0:
break
# include a number of previous layers
for i in range(1, redo_layers + 1):
prev_layer = data[index - i]
# Maybe redo the last layer.
if redo_layer:
prev_layer = data[index - 1]
layer = prev_layer + layer
# Get extruder's absolute position at the
# beginning of the first layer redone
# beginning of the redone layer.
# see https://github.com/nallath/PostProcessingPlugin/issues/55
if i == redo_layers:
# Get X and Y from the next layer (better position for
# the nozzle)
x, y = self.getNextXY(layer)

View file

@ -77,7 +77,7 @@ class SimulationPass(RenderPass):
self._layer_shader.setUniformValue("u_max_thickness", 1)
self._layer_shader.setUniformValue("u_min_thickness", 0)
self._layer_shader.setUniformValue("u_layer_view_type", 1)
self._layer_shader.setUniformValue("u_extruder_opacity", [1, 1, 1, 1])
self._layer_shader.setUniformValue("u_extruder_opacity", [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]])
self._layer_shader.setUniformValue("u_show_travel_moves", 0)
self._layer_shader.setUniformValue("u_show_helpers", 1)
self._layer_shader.setUniformValue("u_show_skin", 1)

View file

@ -12,6 +12,7 @@ from UM.Event import Event, KeyEvent
from UM.Job import Job
from UM.Logger import Logger
from UM.Math.Color import Color
from UM.Math.Matrix import Matrix
from UM.Mesh.MeshBuilder import MeshBuilder
from UM.Message import Message
from UM.Platform import Platform
@ -139,7 +140,7 @@ class SimulationView(CuraView):
def _resetSettings(self) -> None:
self._layer_view_type = 0 # type: int # 0 is material color, 1 is color by linetype, 2 is speed, 3 is layer thickness
self._extruder_count = 0
self._extruder_opacity = [1.0, 1.0, 1.0, 1.0]
self._extruder_opacity = [[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]
self._show_travel_moves = False
self._show_helpers = True
self._show_skin = True
@ -308,15 +309,17 @@ class SimulationView(CuraView):
## Set the extruder opacity
#
# \param extruder_nr 0..3
# \param extruder_nr 0..15
# \param opacity 0.0 .. 1.0
def setExtruderOpacity(self, extruder_nr: int, opacity: float) -> None:
if 0 <= extruder_nr <= 3:
self._extruder_opacity[extruder_nr] = opacity
if 0 <= extruder_nr <= 15:
self._extruder_opacity[extruder_nr // 4][extruder_nr % 4] = opacity
self.currentLayerNumChanged.emit()
def getExtruderOpacities(self)-> List[float]:
return self._extruder_opacity
def getExtruderOpacities(self) -> Matrix:
# NOTE: Extruder opacities are stored in a matrix for (minor) performance reasons (w.r.t. OpenGL/shaders).
# If more than 16 extruders are called for, this should be converted to a sampler1d.
return Matrix(self._extruder_opacity)
def setShowTravelMoves(self, show):
self._show_travel_moves = show

View file

@ -152,7 +152,7 @@ fragment41core =
u_active_extruder = 0.0
u_shade_factor = 0.60
u_layer_view_type = 0
u_extruder_opacity = [1.0, 1.0, 1.0, 1.0]
u_extruder_opacity = [[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]
u_show_travel_moves = 0
u_show_helpers = 1

View file

@ -11,7 +11,7 @@ vertex41core =
uniform lowp float u_max_thickness;
uniform lowp float u_min_thickness;
uniform lowp int u_layer_view_type;
uniform lowp vec4 u_extruder_opacity; // currently only for max 4 extruders, others always visible
uniform lowp mat4 u_extruder_opacity; // currently only for max 16 extruders, others always visible
uniform highp mat4 u_normalMatrix;
@ -31,7 +31,7 @@ vertex41core =
out highp vec3 v_normal;
out lowp vec2 v_line_dim;
out highp int v_extruder;
out highp vec4 v_extruder_opacity;
out highp mat4 v_extruder_opacity;
out float v_line_type;
out lowp vec4 f_color;
@ -121,7 +121,7 @@ geometry41core =
in vec3 v_normal[];
in vec2 v_line_dim[];
in int v_extruder[];
in vec4 v_extruder_opacity[];
in mat4 v_extruder_opacity[];
in float v_line_type[];
out vec4 f_color;
@ -152,7 +152,7 @@ geometry41core =
float size_x;
float size_y;
if ((v_extruder_opacity[0][v_extruder[0]] == 0.0) && (v_line_type[0] != 8) && (v_line_type[0] != 9)) {
if ((v_extruder_opacity[0][int(mod(v_extruder[0], 4))][v_extruder[0] / 4] == 0.0) && (v_line_type[0] != 8) && (v_line_type[0] != 9)) {
return;
}
// See LayerPolygon; 8 is MoveCombingType, 9 is RetractionType
@ -304,7 +304,7 @@ fragment41core =
[defaults]
u_active_extruder = 0.0
u_layer_view_type = 0
u_extruder_opacity = [1.0, 1.0, 1.0, 1.0]
u_extruder_opacity = [[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]
u_specularColor = [0.4, 0.4, 0.4, 1.0]
u_ambientColor = [0.3, 0.3, 0.3, 0.0]

View file

@ -6,7 +6,7 @@ vertex41core =
uniform highp mat4 u_projectionMatrix;
uniform lowp float u_active_extruder;
uniform lowp vec4 u_extruder_opacity; // currently only for max 4 extruders, others always visible
uniform lowp mat4 u_extruder_opacity; // currently only for max 16 extruders, others always visible
uniform highp mat4 u_normalMatrix;
@ -25,7 +25,7 @@ vertex41core =
out highp vec3 v_normal;
out lowp vec2 v_line_dim;
out highp int v_extruder;
out highp vec4 v_extruder_opacity;
out highp mat4 v_extruder_opacity;
out float v_line_type;
out lowp vec4 f_color;
@ -75,7 +75,7 @@ geometry41core =
in vec3 v_normal[];
in vec2 v_line_dim[];
in int v_extruder[];
in vec4 v_extruder_opacity[];
in mat4 v_extruder_opacity[];
in float v_line_type[];
out vec4 f_color;
@ -106,7 +106,7 @@ geometry41core =
float size_x;
float size_y;
if ((v_extruder_opacity[0][v_extruder[0]] == 0.0) && (v_line_type[0] != 8) && (v_line_type[0] != 9)) {
if ((v_extruder_opacity[0][int(mod(v_extruder[0], 4))][v_extruder[0] / 4] == 0.0) && (v_line_type[0] != 8) && (v_line_type[0] != 9)) {
return;
}
// See LayerPolygon; 8 is MoveCombingType, 9 is RetractionType
@ -256,7 +256,7 @@ fragment41core =
[defaults]
u_active_extruder = 0.0
u_extruder_opacity = [1.0, 1.0, 1.0, 1.0]
u_extruder_opacity = [[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]
u_specularColor = [0.4, 0.4, 0.4, 1.0]
u_ambientColor = [0.3, 0.3, 0.3, 0.0]

View file

@ -157,7 +157,7 @@ fragment41core =
u_active_extruder = 0.0
u_shade_factor = 0.60
u_layer_view_type = 0
u_extruder_opacity = [1.0, 1.0, 1.0, 1.0]
u_extruder_opacity = [[1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0], [1.0, 1.0, 1.0, 1.0]]
u_show_travel_moves = 0
u_show_helpers = 1

View file

@ -93,8 +93,8 @@ class CloudPackageChecker(QObject):
self._application.getCuraAPI().account.setSyncState(self.SYNC_SERVICE_NAME, SyncState.SUCCESS)
def _handleCompatibilityData(self, subscribed_packages_payload: List[Dict[str, Any]]) -> None:
user_subscribed_packages = [plugin["package_id"] for plugin in subscribed_packages_payload]
user_installed_packages = self._package_manager.getUserInstalledPackages()
user_subscribed_packages = {plugin["package_id"] for plugin in subscribed_packages_payload}
user_installed_packages = self._package_manager.getAllInstalledPackageIDs()
if user_subscribed_packages == self._last_check_packages:
# nothing new here

View file

@ -105,10 +105,6 @@ class CloudOutputDeviceManager:
self._onDevicesDiscovered(new_clusters)
# Inform whether new cloud printers have been detected. If they have, the welcome wizard can close.
self._account._new_cloud_printers_detected = len(new_clusters) > 0
self._account.cloudPrintersDetectedChanged.emit(len(new_clusters) > 0)
removed_device_keys = set(self._remote_clusters.keys()) - set(online_clusters.keys())
for device_id in removed_device_keys:
self._onDiscoveredDeviceRemoved(device_id)
@ -145,10 +141,20 @@ class CloudOutputDeviceManager:
if machine_manager.getMachine(device.printerType, {self.META_CLUSTER_ID: device.key}) is None \
and machine_manager.getMachine(device.printerType, {self.META_NETWORK_KEY: cluster_data.host_name + "*"}) is None: # The host name is part of the network key.
new_devices.append(device)
elif device.getId() not in self._remote_clusters:
self._remote_clusters[device.getId()] = device
remote_clusters_added = True
# Inform the Cloud printers model about new devices.
new_devices_list_of_dicts = [{
"key": d.getId(),
"name": d.name,
"machine_type": d.printerTypeName,
"firmware_version": d.firmwareVersion} for d in new_devices]
discovered_cloud_printers_model = CuraApplication.getInstance().getDiscoveredCloudPrintersModel()
discovered_cloud_printers_model.addDiscoveredCloudPrinters(new_devices_list_of_dicts)
if not new_devices:
if remote_clusters_added:
self._connectToActiveMachine()

View file

@ -1,4 +1,4 @@
# Copyright (c) 2019 Ultimaker B.V.
# Copyright (c) 2020 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
import os
@ -367,11 +367,18 @@ class USBPrinterOutputDevice(PrinterOutputDevice):
self._sendCommand("M84")
def _sendNextGcodeLine(self):
if self._gcode_position >= len(self._gcode):
"""
Send the next line of g-code, at the current `_gcode_position`, via a
serial port to the printer.
If the print is done, this sets `_is_printing` to `False` as well.
"""
try:
line = self._gcode[self._gcode_position]
except IndexError: # End of print, or print got cancelled.
self._printers[0].updateActivePrintJob(None)
self._is_printing = False
return
line = self._gcode[self._gcode_position]
if ";" in line:
line = line[:line.find(";")]

View file

@ -26,7 +26,7 @@ class VersionUpgrade45to46(VersionUpgrade):
parser.read_string(serialized)
# Update version number.
parser["metadata"]["setting_version"] = "12"
parser["metadata"]["setting_version"] = "13"
# Remove deleted settings from the visible settings list.
if "general" in parser and "visible_settings" in parser["general"]:
@ -54,13 +54,20 @@ class VersionUpgrade45to46(VersionUpgrade):
parser.read_string(serialized)
# Update version number.
parser["metadata"]["setting_version"] = "12"
parser["metadata"]["setting_version"] = "13"
if "values" in parser:
for removed in _removed_settings:
if removed in parser["values"]:
del parser["values"][removed]
if "meshfix_maximum_deviation" in parser["values"]:
maximum_deviation = parser["values"]["meshfix_maximum_deviation"]
if maximum_deviation.startswith("="):
maximum_deviation = maximum_deviation[1:]
maximum_deviation = "=(" + maximum_deviation + ") / 2"
parser["values"]["meshfix_maximum_deviation"] = maximum_deviation
result = io.StringIO()
parser.write(result)
return [filename], [result.getvalue()]
@ -79,7 +86,7 @@ class VersionUpgrade45to46(VersionUpgrade):
# Update version number.
if "metadata" not in parser:
parser["metadata"] = {}
parser["metadata"]["setting_version"] = "12"
parser["metadata"]["setting_version"] = "13"
result = io.StringIO()
parser.write(result)

View file

@ -14,13 +14,13 @@ def getMetaData() -> Dict[str, Any]:
return {
"version_upgrade": {
# From To Upgrade function
("preferences", 6000011): ("preferences", 6000012, upgrade.upgradePreferences),
("machine_stack", 4000011): ("machine_stack", 4000012, upgrade.upgradeStack),
("extruder_train", 4000011): ("extruder_train", 4000012, upgrade.upgradeStack),
("definition_changes", 4000011): ("definition_changes", 4000012, upgrade.upgradeInstanceContainer),
("quality_changes", 4000011): ("quality_changes", 4000012, upgrade.upgradeInstanceContainer),
("quality", 4000011): ("quality", 4000012, upgrade.upgradeInstanceContainer),
("user", 4000011): ("user", 4000012, upgrade.upgradeInstanceContainer),
("preferences", 6000011): ("preferences", 6000013, upgrade.upgradePreferences),
("machine_stack", 4000011): ("machine_stack", 4000013, upgrade.upgradeStack),
("extruder_train", 4000011): ("extruder_train", 4000013, upgrade.upgradeStack),
("definition_changes", 4000011): ("definition_changes", 4000013, upgrade.upgradeInstanceContainer),
("quality_changes", 4000011): ("quality_changes", 4000013, upgrade.upgradeInstanceContainer),
("quality", 4000011): ("quality", 4000013, upgrade.upgradeInstanceContainer),
("user", 4000011): ("user", 4000013, upgrade.upgradeInstanceContainer),
},
"sources": {
"preferences": {

View file

@ -6,8 +6,7 @@ from typing import Tuple, List
import io
from UM.VersionUpgrade import VersionUpgrade
class VersionUpgrade46to47(VersionUpgrade):
class VersionUpgrade460to462(VersionUpgrade):
def upgradePreferences(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]:
"""
Upgrades preferences to have the new version number.
@ -20,7 +19,7 @@ class VersionUpgrade46to47(VersionUpgrade):
parser.read_string(serialized)
# Update version number.
parser["metadata"]["setting_version"] = "13"
parser["metadata"]["setting_version"] = "14"
result = io.StringIO()
parser.write(result)
@ -41,18 +40,19 @@ class VersionUpgrade46to47(VersionUpgrade):
parser.read_string(serialized)
# Update version number.
parser["metadata"]["setting_version"] = "13"
parser["metadata"]["setting_version"] = "14"
if "values" in parser:
# Maximum Deviation's effect was corrected. Previously the deviation
# ended up being only half of what the user had entered. This was
# fixed in Cura 4.7 so there we need to halve the deviation that the
# user had entered.
# user had entered. This halving was accidentally merged into 4.6 and had to be reverted
# back in 4.6.2.
if "meshfix_maximum_deviation" in parser["values"]:
maximum_deviation = parser["values"]["meshfix_maximum_deviation"]
if maximum_deviation.startswith("="):
maximum_deviation = maximum_deviation[1:]
maximum_deviation = "=(" + maximum_deviation + ") / 2"
maximum_deviation = "=(" + maximum_deviation + ") * 2"
parser["values"]["meshfix_maximum_deviation"] = maximum_deviation
result = io.StringIO()
@ -73,7 +73,7 @@ class VersionUpgrade46to47(VersionUpgrade):
# Update version number.
if "metadata" not in parser:
parser["metadata"] = {}
parser["metadata"]["setting_version"] = "13"
parser["metadata"]["setting_version"] = "14"
result = io.StringIO()
parser.write(result)

View file

@ -0,0 +1,59 @@
# Copyright (c) 2020 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
from typing import Any, Dict, TYPE_CHECKING
from . import VersionUpgrade460to462
if TYPE_CHECKING:
from UM.Application import Application
upgrade = VersionUpgrade460to462.VersionUpgrade460to462()
def getMetaData() -> Dict[str, Any]:
return {
"version_upgrade": {
# From To Upgrade function
("preferences", 6000013): ("preferences", 6000014, upgrade.upgradePreferences),
("machine_stack", 4000013): ("machine_stack", 4000014, upgrade.upgradeStack),
("extruder_train", 4000013): ("extruder_train", 4000014, upgrade.upgradeStack),
("definition_changes", 4000013): ("definition_changes", 4000014, upgrade.upgradeInstanceContainer),
("quality_changes", 4000013): ("quality_changes", 4000014, upgrade.upgradeInstanceContainer),
("quality", 4000013): ("quality", 4000014, upgrade.upgradeInstanceContainer),
("user", 4000013): ("user", 4000014, upgrade.upgradeInstanceContainer),
},
"sources": {
"preferences": {
"get_version": upgrade.getCfgVersion,
"location": {"."}
},
"machine_stack": {
"get_version": upgrade.getCfgVersion,
"location": {"./machine_instances"}
},
"extruder_train": {
"get_version": upgrade.getCfgVersion,
"location": {"./extruders"}
},
"definition_changes": {
"get_version": upgrade.getCfgVersion,
"location": {"./definition_changes"}
},
"quality_changes": {
"get_version": upgrade.getCfgVersion,
"location": {"./quality_changes"}
},
"quality": {
"get_version": upgrade.getCfgVersion,
"location": {"./quality"}
},
"user": {
"get_version": upgrade.getCfgVersion,
"location": {"./user"}
}
}
}
def register(app: "Application") -> Dict[str, Any]:
return {"version_upgrade": upgrade}

View file

@ -0,0 +1,8 @@
{
"name": "Version Upgrade 4.6.0 to 4.6.2",
"author": "Ultimaker B.V.",
"version": "1.0.0",
"description": "Upgrades configurations from Cura 4.6.0 to Cura 4.6.2.",
"api": "7.2.0",
"i18n-catalog": "cura"
}

View file

@ -0,0 +1,104 @@
# Copyright (c) 2020 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
import configparser
from typing import Tuple, List
import io
from UM.VersionUpgrade import VersionUpgrade
class VersionUpgrade462to47(VersionUpgrade):
def upgradePreferences(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]:
"""
Upgrades preferences to have the new version number.
:param serialized: The original contents of the preferences file.
:param filename: The file name of the preferences file.
:return: A list of new file names, and a list of the new contents for
those files.
"""
parser = configparser.ConfigParser(interpolation = None)
parser.read_string(serialized)
# Update version number.
parser["metadata"]["setting_version"] = "15"
result = io.StringIO()
parser.write(result)
return [filename], [result.getvalue()]
def upgradeInstanceContainer(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]:
"""
Upgrades instance containers to have the new version number.
This changes the maximum deviation setting if that setting was present
in the profile.
:param serialized: The original contents of the instance container.
:param filename: The original file name of the instance container.
:return: A list of new file names, and a list of the new contents for
those files.
"""
parser = configparser.ConfigParser(interpolation = None, comment_prefixes = ())
parser.read_string(serialized)
# Update version number.
parser["metadata"]["setting_version"] = "15"
if "values" in parser:
# Maximum Deviation's effect was corrected. Previously the deviation
# ended up being only half of what the user had entered. This was
# fixed in Cura 4.7 so there we need to halve the deviation that the
# user had entered.
#
# This got accidentally merged in Cura 4.6.0. In 4.6.2 we removed
# that. In 4.7 it's not unmerged, so there we need to revert all
# that again.
if "meshfix_maximum_deviation" in parser["values"]:
maximum_deviation = parser["values"]["meshfix_maximum_deviation"]
if maximum_deviation.startswith("="):
maximum_deviation = maximum_deviation[1:]
maximum_deviation = "=(" + maximum_deviation + ") / 2"
parser["values"]["meshfix_maximum_deviation"] = maximum_deviation
result = io.StringIO()
parser.write(result)
return [filename], [result.getvalue()]
def upgradeStack(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]:
"""
Upgrades stacks to have the new version number.
:param serialized: The original contents of the stack.
:param filename: The original file name of the stack.
:return: A list of new file names, and a list of the new contents for
those files.
"""
parser = configparser.ConfigParser(interpolation = None)
parser.read_string(serialized)
# Update version number.
if "metadata" not in parser:
parser["metadata"] = {}
parser["metadata"]["setting_version"] = "15"
# Update Pause at Height script parameters if present.
if "post_processing_scripts" in parser["metadata"]:
new_scripts_entries = []
for script_str in parser["metadata"]["post_processing_scripts"].split("\n"):
if not script_str:
continue
script_str = script_str.replace(r"\\\n", "\n").replace(r"\\\\", "\\\\") # Unescape escape sequences.
script_parser = configparser.ConfigParser(interpolation=None)
script_parser.optionxform = str # type: ignore # Don't transform the setting keys as they are case-sensitive.
script_parser.read_string(script_str)
if "PauseAtHeight" in script_parser:
if "redo_layers" in script_parser["PauseAtHeight"]:
script_parser["PauseAtHeight"]["redo_layer"] = str(int(script_parser["PauseAtHeight"]["redo_layers"]) > 0)
del script_parser["PauseAtHeight"]["redo_layers"] # Has been renamed to without the S.
script_io = io.StringIO()
script_parser.write(script_io)
script_str = script_io.getvalue()
script_str = script_str.replace("\\\\", r"\\\\").replace("\n", r"\\\n") # Escape newlines because configparser sees those as section delimiters.
new_scripts_entries.append(script_str)
parser["metadata"]["post_processing_scripts"] = "\n".join(new_scripts_entries)
result = io.StringIO()
parser.write(result)
return [filename], [result.getvalue()]

View file

@ -3,24 +3,24 @@
from typing import Any, Dict, TYPE_CHECKING
from . import VersionUpgrade46to47
from . import VersionUpgrade462to47
if TYPE_CHECKING:
from UM.Application import Application
upgrade = VersionUpgrade46to47.VersionUpgrade46to47()
upgrade = VersionUpgrade462to47.VersionUpgrade462to47()
def getMetaData() -> Dict[str, Any]:
return {
"version_upgrade": {
# From To Upgrade function
("preferences", 6000012): ("preferences", 6000013, upgrade.upgradePreferences),
("machine_stack", 4000012): ("machine_stack", 4000013, upgrade.upgradeStack),
("extruder_train", 4000012): ("extruder_train", 4000013, upgrade.upgradeStack),
("definition_changes", 4000012): ("definition_changes", 4000013, upgrade.upgradeInstanceContainer),
("quality_changes", 4000012): ("quality_changes", 4000013, upgrade.upgradeInstanceContainer),
("quality", 4000012): ("quality", 4000013, upgrade.upgradeInstanceContainer),
("user", 4000012): ("user", 4000013, upgrade.upgradeInstanceContainer),
("preferences", 6000014): ("preferences", 6000015, upgrade.upgradePreferences),
("machine_stack", 4000014): ("machine_stack", 4000015, upgrade.upgradeStack),
("extruder_train", 4000014): ("extruder_train", 4000015, upgrade.upgradeStack),
("definition_changes", 4000014): ("definition_changes", 4000015, upgrade.upgradeInstanceContainer),
("quality_changes", 4000014): ("quality_changes", 4000015, upgrade.upgradeInstanceContainer),
("quality", 4000014): ("quality", 4000015, upgrade.upgradeInstanceContainer),
("user", 4000014): ("user", 4000015, upgrade.upgradeInstanceContainer),
},
"sources": {
"preferences": {

View file

@ -0,0 +1,8 @@
{
"name": "Version Upgrade 4.6.2 to 4.7",
"author": "Ultimaker B.V.",
"version": "1.0.0",
"description": "Upgrades configurations from Cura 4.6.2 to Cura 4.7.",
"api": "7.2.0",
"i18n-catalog": "cura"
}

View file

@ -1,8 +0,0 @@
{
"name": "Version Upgrade 4.6 to 4.7",
"author": "Ultimaker B.V.",
"version": "1.0.0",
"description": "Upgrades configurations from Cura 4.6 to Cura 4.7.",
"api": "7.2.0",
"i18n-catalog": "cura"
}

View file

@ -0,0 +1,116 @@
{
"version": 2,
"name": "Anycubic Mega Zero",
"inherits": "fdmprinter",
"metadata":
{
"visible": true,
"author": "kad",
"manufacturer": "Anycubic",
"file_formats": "text/x-gcode",
"platform": "anycubic_mega_zero_platform.stl",
"has_materials": true,
"has_machine_quality": true,
"preferred_quality_type": "normal",
"preferred_material": "generic_pla",
"machine_extruder_trains":
{
"0": "anycubic_mega_zero_extruder_0"
}
},
"overrides":
{
"machine_name":
{
"default_value": "Anycubic Mega Zero"
},
"machine_heated_bed":
{
"default_value": false
},
"machine_width":
{
"default_value": 220
},
"machine_depth":
{
"default_value": 220
},
"machine_height":
{
"default_value": 250
},
"machine_center_is_zero":
{
"default_value": false
},
"gantry_height":
{
"value": 25
},
"machine_gcode_flavor":
{
"default_value": "RepRap (Marlin/Sprinter)"
},
"machine_start_gcode":
{
"default_value": ";Sliced at: {day} {date} {time}\n;Basic settings: Layer height: {layer_height} Walls: {wall_thickness} Fill: {infill_sparse_density}\nG21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nM117 Start heating ...\nM104 S{material_print_temperature_layer_0}\nM117 Homing X/Y ...\nG28 X0 Y0 ;move X/Y to min endstops\nM117 Homing Z ...\nG28 Z0 ;move Z to min endstops\nG1 Z15.0 F{speed_travel} ;move the platform down 15mm\nM117 Heating ...\nM109 S{material_print_temperature_layer_0}\nM117 Start cleaning ...\nG92 E0 ;zero the extruded length\nG1 F200 E10 ;extrude 10mm of feed stock\nG92 E0 ;zero the extruded length again\nM117 Intro line ...\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X0.1 Y20 Z{layer_height} F5000.0 ; Move to start position\nG1 X0.1 Y200.0 Z{layer_height} F1500.0 E15 ; Draw the first line\nG1 X0.4 Y200.0 Z{layer_height} F5000.0 ; Move to side a little\nG1 X0.4 Y20 Z0.3 F1500.0 E30 ; Draw the second line\nG92 E0 ; Reset Extruder\nG1 E-1 F500 ; Retract filiment by 1 mm\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X5 Y20 Z0.3 F{speed_travel} ; Move over to prevent blob squish\nG1 F{speed_travel}\nG92 E0 ; Reset Extruder\nM117 Printing...\n"
},
"machine_end_gcode":
{
"default_value": "M117 Cooling down...\nM104 S0 ; turn off extruder\nM84 ; disable motors\nM107 ; Fan off\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+0.5 E-5 ;X-20 Y-20 F{speed_travel} ;move Z up a bit and retract filament even more\nG28 X0 ;move X to min endstops, so the head is out of the way\nG90 ;Absolute positionning\nG1 Y200 F3000 ;Present print\nM84 ;steppers off\nM300 P300 S4000\nM117 Finished.\n"
},
"machine_max_feedrate_x": { "value": 500 },
"machine_max_feedrate_y": { "value": 500 },
"machine_max_feedrate_z": { "value": 5 },
"machine_max_feedrate_e": { "value": 30 },
"machine_max_acceleration_x": { "value": 500 },
"machine_max_acceleration_y": { "value": 500 },
"machine_max_acceleration_z": { "value": 100 },
"machine_max_acceleration_e": { "value": 5000 },
"machine_acceleration": { "value": 500 },
"acceleration_print": { "value": 500 },
"acceleration_travel": { "value": 500 },
"acceleration_enabled": { "value": false },
"machine_max_jerk_xy": { "value": 10 },
"machine_max_jerk_z": { "value": 0.4 },
"machine_max_jerk_e": { "value": 5 },
"jerk_print": { "value": 10 },
"jerk_travel": { "value": "jerk_print" },
"jerk_travel_layer_0": { "value": "jerk_travel" },
"jerk_enabled": { "value": false },
"speed_print": { "value": 50.0 },
"speed_z_hop": { "value": "machine_max_feedrate_z" },
"optimize_wall_printing_order": { "value": "True" },
"material_initial_print_temperature": { "value": "material_print_temperature" },
"material_final_print_temperature": { "value": "material_print_temperature" },
"retraction_hop_enabled": { "value": "True" },
"retraction_hop": { "value": 0.2 },
"retraction_combing": { "default_value": "noskin" },
"retraction_combing_max_distance": { "value": 30 },
"travel_avoid_other_parts": { "value": true },
"travel_avoid_supports": { "value": true },
"travel_retract_before_outer_wall": { "value": true },
"retraction_enable": { "value": true },
"retraction_speed": { "value": 30 },
"retraction_amount": { "value": 7 },
"retraction_count_max": { "value": 100 },
"retraction_extrusion_window": { "value": 10 },
"retraction_min_travel": { "value": 1.5 },
"cool_fan_full_at_height": { "value": "layer_height_0" },
"adhesion_type": { "value": "'skirt'" },
"skirt_line_count": {"default_value": 3},
"support_xy_distance": { "value": "wall_line_width_0 * 2" },
"support_xy_distance_overhang": { "value": "wall_line_width_0" },
"support_z_distance": { "value": "layer_height if layer_height > 0.1 else layer_height*2" }
}
}

View file

@ -6,7 +6,7 @@
"type": "extruder",
"author": "Ultimaker",
"manufacturer": "Unknown",
"setting_version": 13,
"setting_version": 15,
"visible": false,
"position": "0"
},

View file

@ -6,7 +6,7 @@
"type": "machine",
"author": "Ultimaker",
"manufacturer": "Unknown",
"setting_version": 13,
"setting_version": 15,
"file_formats": "text/x-gcode;application/x-stl-ascii;application/x-stl-binary;application/x-wavefront-obj;application/x3g",
"visible": false,
"has_materials": true,

View file

@ -22,10 +22,10 @@
"default_value": 220
},
"machine_height": {
"default_value": 220
"default_value": 260
},
"machine_depth": {
"default_value": 260
"default_value": 220
}, "machine_center_is_zero": {
"default_value": false
},

View file

@ -17,12 +17,13 @@
"fabtotum_abs", "fabtotum_nylon", "fabtotum_pla", "fabtotum_tpu",
"fiberlogy_hd_pla",
"filo3d_pla", "filo3d_pla_green", "filo3d_pla_red",
"generic_abs", "generic_abs_175", "generic_cpe_175", "generic_hips_175", "generic_nylon_175", "generic_pc_175", "generic_petg_175", "generic_pla_175", "generic_pva_175", "generic_tpu_175",
"generic_abs", "generic_abs_175", "generic_cpe_175", "generic_hips_175", "generic_nylon_175", "generic_pc_175", "generic_petg_175", "generic_pva_175", "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",
"redd_abs", "redd_asa", "redd_hips", "redd_nylon", "redd_petg", "redd_pla", "redd_tpe",
"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",
"tizyx_abs", "tizyx_flex", "tizyx_petg", "tizyx_pla", "tizyx_pla_bois", "tizyx_pva",
@ -34,7 +35,7 @@
"preferred_variant_name": "0.4mm TP extruder",
"has_machine_quality": true,
"preferred_quality_type": "normal",
"preferred_quality_type": "high",
"machine_extruder_trains":
{

View file

@ -0,0 +1,35 @@
{
"version": 2,
"name": "Leapfrog Creatr HS",
"inherits": "fdmprinter",
"metadata": {
"visible": true,
"author": "Psychometer",
"manufacturer": "Leapfrog B.V.",
"file_formats": "text/x-gcode",
"supports_usb_connection": true,
"machine_extruder_trains":
{
"0": "leapfrog_creatr_hs_extruder_right",
"1": "leapfrog_creatr_hs_extruder_left"
}
},
"overrides": {
"machine_name": {"default_value": "Leapfrog Creatr HS" },
"machine_width": {"default_value": 270},
"machine_depth": {"default_value": 280},
"machine_height": {"default_value": 180},
"machine_shape": { "default_value": "Rectangular"},
"machine_center_is_zero": {"default_value": false},
"machine_heated_bed": {"default_value": true},
"build_volume_temperature": {"enabled": false},
"machine_gcode_flavor": {"default_value": "Marlin"},
"machine_head_with_fans_polygon": {"default_value": [[-40, -50 ], [-40, 100], [40, -50 ], [40, 100]]},
"gantry_height": {"value": "2"},
"machine_extruder_count": {"default_value": 2},
"machine_start_gcode": {"default_value": "M107 ; start with the fan off\nG28 X0 Y0 ; home XY axes\nG28 Z0 ; home Z\nG92 X0 Y0 Z0 E0 ; reset software positions\nG1 Z15.0 F180\nT0\nG92 E0 ; zero the extruded length\nG1 E3 F200\nG92 E0 ; zero the extruded length again\nG1 F225"},
"machine_end_gcode": {"default_value": "M104 S0 T0 ; turn off right extruder\nM104 S0 T1 ; turn off left extruder\nM140 S0 T0 ; turn off bed\nG1 Z200 F1200 ; drop bed\nG28 X0 ; home X axis\nM84 ; disable motors"}
}
}

View file

@ -0,0 +1,35 @@
{
"version": 2,
"name": "Leapfrog Creatr HS XL",
"inherits": "fdmprinter",
"metadata": {
"visible": true,
"author": "Psychometer",
"manufacturer": "Leapfrog B.V.",
"file_formats": "text/x-gcode",
"supports_usb_connection": true,
"machine_extruder_trains":
{
"0": "leapfrog_creatr_hs_xl_extruder_right",
"1": "leapfrog_creatr_hs_xl_extruder_left"
}
},
"overrides": {
"machine_name": {"default_value": "Leapfrog Creatr HS XL" },
"machine_width": {"default_value": 270},
"machine_depth": {"default_value": 280},
"machine_height": {"default_value": 590},
"machine_shape": { "default_value": "Rectangular"},
"machine_center_is_zero": {"default_value": false},
"machine_heated_bed": {"default_value": true},
"build_volume_temperature": {"enabled": false},
"machine_gcode_flavor": {"default_value": "Marlin"},
"machine_head_with_fans_polygon": {"default_value": [[-40, -50 ], [-40, 100], [40, -50 ], [40, 100]]},
"gantry_height": {"value": "2"},
"machine_extruder_count": {"default_value": 2},
"machine_start_gcode": {"default_value": "M107 ; start with the fan off\nG28 X0 Y0 ; home XY axes\nG28 Z0 ; home Z\nG92 X0 Y0 Z0 E0 ; reset software positions\nG1 Z15.0 F180\nT0\nG92 E0 ; zero the extruded length\nG1 E3 F200\nG92 E0 ; zero the extruded length again\nG1 F225"},
"machine_end_gcode": {"default_value": "G92 E0 ; Zero extruder\nG1 E-6.00 F1500 ; Retract filament\nM104 S0 T0 ; turn off right extruder\nM104 S0 T1 ; turn off left extruder\nM140 S0 T0 ; turn off bed\nG1 Z590 F1200 ; drop bed\nG28 X0 ; home X axis\nG1 Y270 F12000 ; Move Y axis to the backside\nM84 ; disable motors"}
}
}

View file

@ -171,7 +171,7 @@
"value": "0.1"
},
"meshfix_maximum_deviation": {
"value": "0.0015"
"value": "0.002"
},
"skin_outline_count": {
"value": 0

View file

@ -591,7 +591,7 @@
"value": "0.2"
},
"meshfix_maximum_deviation": {
"default_value": 0.005
"default_value": 0.003
},
"jerk_roofing": {
"value": "10"

View file

@ -0,0 +1,37 @@
{
"name": "Tronxy D01",
"version": 2,
"inherits": "tronxy_x",
"metadata": {
"quality_definition": "tronxy_x",
"visible": true,
"author": "AdderMk2",
"platform": "tronxy.stl"
},
"overrides": {
"machine_name": { "default_value": "Tronxy D01" },
"machine_width": { "default_value": 220 },
"machine_depth": { "default_value": 220 },
"machine_height": { "default_value": 220 },
"machine_head_with_fans_polygon": { "default_value": [
[-32, 45],
[-32, -30],
[32, -30],
[32, 45]
]
},
"gantry_height": { "value": 30 },
"machine_start_gcode": { "default_value": "; XY-2 Start Code\nG21\nG90\nM82\nM107 T0\nM140 S{material_bed_temperature}\nM104 S{material_print_temperature} T0\nM190 S{material_bed_temperature}\nM109 S{material_print_temperature} T0\nG28\nG92 E0\nG1 Z2.0 F3000 ; Move Z Axis up little to preventscratching of Heat Bed\nG1 X1 Y20 Z0.3 F3600.0 ; Move to start position\nG1 X1 Y220.0 Z0.3 F1500.0 E25 ; Draw the first line\nG1 X1.6 Y220.0 Z0.3 F3600.0 ; Move to side a little\nG1 X1.6 Y20 Z0.3 F1500.0 E50 ; Draw the second line\nG92 E0 ; Reset Extruder\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X5 Y20 Z0.3 F3600.0 ; Move over to prevent blob squish" },
"machine_max_feedrate_x": { "value": 150 },
"machine_max_feedrate_y": { "value": 150 },
"machine_max_feedrate_z": { "value": 20 },
"machine_max_feedrate_e": { "value": 120 },
"machine_max_acceleration_x": { "value": 150 },
"machine_max_acceleration_y": { "value": 150 },
"machine_max_acceleration_z": { "value": 150 },
"machine_max_acceleration_e": { "value": 150 },
"machine_acceleration": { "value": 120 }
}
}

View file

@ -0,0 +1,166 @@
{
"name": "Tronxy Base Printer",
"version": 2,
"inherits": "fdmprinter",
"metadata": {
"visible": false,
"author": "AdderMk2",
"manufacturer": "Tronxy",
"file_formats": "text/x-gcode",
"first_start_actions": ["MachineSettingsAction"],
"machine_extruder_trains": {
"0": "tronxy_base_extruder_0"
},
"has_materials": true,
"has_variants": true,
"has_machine_quality": true,
"variants_name": "Nozzle Size",
"preferred_variant_name": "0.4mm Nozzle",
"preferred_quality_type": "normal",
"preferred_material": "generic_pla"
},
"overrides": {
"machine_name": { "default_value": "Tronxy Base Printer" },
"machine_start_gcode": { "default_value": "G21\nG90\nM82\nM107 T0\nM140 S{material_bed_temperature}\nM104 S{material_print_temperature} T0\nM190 S{material_bed_temperature}\nM109 S{material_print_temperature} T0\nG28\nG92 E0\nG1 Z15.0 F{speed_travel}\nG0 E3 F200\nG92 E0\n" },
"machine_end_gcode": { "default_value": "M107 T0\nM104 S0\nM104 S0 T1\nM140 S0\nG92 E0\nG91\nG1 E-1 F300 \nG1 Z+0.5 E-5 X-20 Y-20 F9000\nG28 X0 Y0\nM84 ;steppers off\nG90 ;absolute positioning\n" },
"machine_max_feedrate_x": { "value": 100 },
"machine_max_feedrate_y": { "value": 100 },
"machine_max_feedrate_z": { "value": 10 },
"machine_max_feedrate_e": { "value": 50 },
"machine_max_acceleration_x": { "value": 120 },
"machine_max_acceleration_y": { "value": 120 },
"machine_max_acceleration_z": { "value": 120 },
"machine_max_acceleration_e": { "value": 120 },
"machine_acceleration": { "value": 100 },
"machine_max_jerk_xy": { "value": 20 },
"machine_max_jerk_z": { "value": 0.4 },
"machine_max_jerk_e": { "value": 5 },
"machine_heated_bed": { "default_value": true },
"material_diameter": { "default_value": 1.75 },
"acceleration_print": { "value": "machine_acceleration" },
"acceleration_travel": { "value": "machine_acceleration" },
"acceleration_travel_layer_0": { "value": "acceleration_travel" },
"acceleration_roofing": { "enabled": "acceleration_enabled and roofing_layer_count > 0 and top_layers > 0" },
"jerk_print": { "value": 20 },
"jerk_travel": { "value": "jerk_print" },
"jerk_travel_layer_0": { "value": "jerk_travel" },
"acceleration_enabled": { "value": false },
"jerk_enabled": { "value": false },
"speed_print": { "value": 60.0 } ,
"speed_infill": { "value": "speed_print" },
"speed_wall": { "value": "speed_print / 1.33" },
"speed_wall_0": { "value": "speed_wall" },
"speed_wall_x": { "value": "speed_wall" },
"speed_topbottom": { "value": "speed_print / 1.5" },
"speed_roofing": { "value": "speed_topbottom" },
"speed_travel": { "value": "60.0 if speed_print < 50 else 120.0 if speed_print > 80 else speed_print * 1.25" },
"speed_layer_0": { "value": 30.0 },
"speed_print_layer_0": { "value": "speed_layer_0" },
"speed_travel_layer_0": { "value": "45 if speed_layer_0 < 20 else 60 if speed_layer_0 > 30 else speed_layer_0 * 1.5" },
"speed_prime_tower": { "value": "speed_topbottom" },
"speed_support": { "value": "speed_wall_0" },
"speed_support_interface": { "value": "speed_topbottom" },
"speed_z_hop": { "value": 5 },
"skirt_brim_speed": { "value": "speed_layer_0" },
"line_width": { "value": "machine_nozzle_size" },
"optimize_wall_printing_order": { "value": "True" },
"material_initial_print_temperature": { "value": "material_print_temperature" },
"material_final_print_temperature": { "value": "material_print_temperature" },
"material_flow": { "value": 100 },
"travel_compensate_overlapping_walls_0_enabled": { "value": "False" },
"z_seam_type": { "value": "'back'" },
"z_seam_corner": { "value": "'z_seam_corner_weighted'" },
"infill_sparse_density": { "value": "20" },
"infill_pattern": { "value": "'lines' if infill_sparse_density > 50 else 'cubic'" },
"infill_before_walls": { "value": false },
"infill_overlap": { "value": 30.0 },
"skin_overlap": { "value": 10.0 },
"infill_wipe_dist": { "value": 0.0 },
"wall_0_wipe_dist": { "value": 0.0 },
"fill_perimeter_gaps": { "value": "'everywhere'" },
"fill_outline_gaps": { "value": false },
"filter_out_tiny_gaps": { "value": false },
"retraction_speed": {
"maximum_value_warning": "machine_max_feedrate_e",
"maximum_value": 200
},
"retraction_retract_speed": {
"maximum_value_warning": "machine_max_feedrate_e",
"maximum_value": 200
},
"retraction_prime_speed": {
"maximum_value_warning": "machine_max_feedrate_e",
"maximum_value": 200
},
"retraction_hop_enabled": { "value": "False" },
"retraction_hop": { "value": 0.2 },
"retraction_combing": { "value": "'off' if retraction_hop_enabled else 'noskin'" },
"retraction_combing_max_distance": { "value": 30 },
"travel_avoid_other_parts": { "value": true },
"travel_avoid_supports": { "value": true },
"travel_retract_before_outer_wall": { "value": true },
"retraction_enable": { "value": true },
"retraction_count_max": { "value": 100 },
"retraction_extrusion_window": { "value": 10 },
"retraction_min_travel": { "value": 1.5 },
"cool_fan_full_at_height": { "value": "layer_height_0 + 2 * layer_height" },
"cool_fan_enabled": { "value": true },
"cool_min_layer_time": { "value": 10 },
"adhesion_type": { "value": "'skirt'" },
"brim_replaces_support": { "value": false },
"skirt_gap": { "value": 10.0 },
"skirt_line_count": { "value": 3 },
"adaptive_layer_height_variation": { "value": 0.04 },
"adaptive_layer_height_variation_step": { "value": 0.04 },
"meshfix_maximum_resolution": { "value": "0.05" },
"meshfix_maximum_travel_resolution": { "value": "meshfix_maximum_resolution" },
"support_angle": { "value": "math.floor(math.degrees(math.atan(line_width/2.0/layer_height)))" },
"support_pattern": { "value": "'zigzag'" },
"support_infill_rate": { "value": "0 if support_tree_enable else 20" },
"support_use_towers": { "value": false },
"support_xy_distance": { "value": "wall_line_width_0 * 2" },
"support_xy_distance_overhang": { "value": "wall_line_width_0" },
"support_z_distance": { "value": "layer_height if layer_height >= 0.16 else layer_height*2" },
"support_xy_overrides_z": { "value": "'xy_overrides_z'" },
"support_wall_count": { "value": 1 },
"support_brim_enable": { "value": true },
"support_brim_width": { "value": 4 },
"support_interface_enable": { "value": true },
"support_interface_height": { "value": "layer_height * 4" },
"support_interface_density": { "value": 33.333 },
"support_interface_pattern": { "value": "'grid'" },
"support_interface_skip_height": { "value": 0.2 },
"minimum_support_area": { "value": 2 },
"minimum_interface_area": { "value": 10 },
"top_bottom_thickness": {"value": "layer_height_0 + layer_height * 3" },
"wall_thickness": {"value": "line_width * 2" }
}
}

View file

@ -0,0 +1,28 @@
{
"name": "Tronxy X5SA/X5ST/Pro",
"version": 2,
"inherits": "tronxy_x",
"metadata": {
"quality_definition": "tronxy_x",
"visible": true,
"author": "AdderMk2",
"platform": "tronxy.stl"
},
"overrides": {
"machine_name": { "default_value": "Tronxy X5SA" },
"machine_width": { "default_value": 330 },
"machine_depth": { "default_value": 330 },
"machine_height": { "default_value": 400 },
"machine_head_with_fans_polygon": { "default_value": [
[-48, 45],
[-48, -30],
[27, -30],
[27, 45]
]
},
"gantry_height": { "value": 40 },
"machine_start_gcode": { "default_value": "; X5SA Pro Start Code\nG21\nG90\nM82\nM107 T0\nM140 S{material_bed_temperature}\nM104 S{material_print_temperature} T0\nM190 S{material_bed_temperature}\nM109 S{material_print_temperature} T0\nG28\nG92 E0\n"},
"machine_end_gcode": { "default_value": "G91\nG1 E-2 F3000\nG1 E-2 Z0.2 F1200\nG1 X5 Y5 F3600\nG1 Z10\nG90\nG1 X0 Y0\nM106 S0\nM104 S0\nM140 S0\n\nM84 X Y E\n" }
}
}

View file

@ -0,0 +1,33 @@
{
"name": "Tronxy X5SA/X5ST/Pro 400",
"version": 2,
"inherits": "tronxy_x",
"metadata": {
"quality_definition": "tronxy_x",
"visible": true,
"author": "AdderMk2",
"platform": "tronxy.stl"
},
"overrides": {
"machine_name": { "default_value": "Tronxy X5SA 400" },
"machine_width": { "default_value": 400 },
"machine_depth": { "default_value": 400 },
"machine_height": { "default_value": 400 },
"machine_head_with_fans_polygon": { "default_value": [
[-48, 45],
[-48, -30],
[27, -30],
[27, 45]
]
},
"gantry_height": { "value": 40 },
"machine_start_gcode": { "default_value": "; X5SA Start Code\nG21\nG90\nM82\nM107 T0\nM140 S{material_bed_temperature}\nM104 S{material_print_temperature} T0\nM190 S{material_bed_temperature}\nM109 S{material_print_temperature} T0\nG28\nG92 E0\nG1 Z2.0 F3000 ; Move Z Axis up little to preventscratching of Heat Bed\nG1 X1 Y20 Z0.3 F3600.0 ; Move to start position\nG1 X1 Y370.0 Z0.3 F1500.0 E25 ; Draw the first line\nG1 X1.6 Y370.0 Z0.3 F3600.0 ; Move to side a little\nG1 X1.6 Y20 Z0.3 F1500.0 E50 ; Draw the second line\nG92 E0 ; Reset Extruder\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X5 Y20 Z0.3 F3600.0 ; Move over to prevent blob squish"},
"machine_end_gcode": { "default_value": "G91 ;Relative positioning\nG1 E-2 F2700 \nG1 E-2 Z0.2 F2400 \nG1 X5 Y5 F3000\nG1 Z10\nG90\n\nG1 X0 Y0 \nM106 S0\nM104 S0\nM140 S0\n\nM84 X Y E \n" },
"machine_max_feedrate_x": { "value": 100 },
"machine_max_feedrate_y": { "value": 100 },
"machine_max_feedrate_z": { "value": 20 },
"machine_max_feedrate_e": { "value": 120 }
}
}

View file

@ -0,0 +1,33 @@
{
"name": "Tronxy X5SA/X5ST/Pro 500",
"version": 2,
"inherits": "tronxy_x",
"metadata": {
"quality_definition": "tronxy_x",
"visible": true,
"author": "AdderMk2",
"platform": "tronxy.stl"
},
"overrides": {
"machine_name": { "default_value": "Tronxy X5SA 500" },
"machine_width": { "default_value": 500 },
"machine_depth": { "default_value": 500 },
"machine_height": { "default_value": 600 },
"machine_head_with_fans_polygon": { "default_value": [
[-48, 45],
[-48, -30],
[27, -30],
[27, 45]
]
},
"gantry_height": { "value": 40 },
"machine_start_gcode": { "default_value": "; X5SA Start Code\nG21\nG90\nM82\nM107 T0\nM140 S{material_bed_temperature}\nM104 S{material_print_temperature} T0\nM190 S{material_bed_temperature}\nM109 S{material_print_temperature} T0\nG28\nG92 E0\n "},
"machine_end_gcode": { "default_value": "G91 ;Relative positioning\nG1 E-2 F2700 \nG1 E-2 Z0.2 F2400 \nG1 X5 Y5 F3000\nG1 Z10\nG90\n\nG1 X0 Y0 \nM106 S0\nM104 S0\nM140 S0\n\nM84 X Y E \n" },
"machine_max_feedrate_x": { "value": 150 },
"machine_max_feedrate_y": { "value": 150 },
"machine_max_feedrate_z": { "value": 20 },
"machine_max_feedrate_e": { "value": 120 }
}
}

View file

@ -0,0 +1,38 @@
{
"name": "Tronxy XY-2",
"version": 2,
"inherits": "tronxy_x",
"metadata": {
"quality_definition": "tronxy_x",
"visible": true,
"author": "AdderMk2",
"platform": "tronxy.stl"
},
"overrides": {
"machine_name": { "default_value": "Tronxy XY-2" },
"machine_width": { "default_value": 220 },
"machine_depth": { "default_value": 220 },
"machine_height": { "default_value": 260 },
"machine_head_with_fans_polygon": { "default_value": [
[-30, 45],
[-30, -30],
[27, -30],
[27, 45]
]
},
"gantry_height": { "value": 40 },
"machine_start_gcode": { "default_value": "; XY-2 Start Code\nG21\nG90\nM82\nM107 T0\nM140 S{material_bed_temperature}\nM104 S{material_print_temperature} T0\nM190 S{material_bed_temperature}\nM109 S{material_print_temperature} T0\nG28\nG92 E0\n"},
"machine_end_gcode": { "default_value": "G91\nG1 E-2 F3000\nG1 E-2 Z0.2 F1200\nG1 X5 Y5 F3600\nG1 Z10\nG90\nG1 X0 Y{machine_depth}\nM106 S0 ;Turn-off fan\nM104 S0\nM140 S0\n\nM84 X Y E\n" },
"machine_max_feedrate_x": { "value": 100 },
"machine_max_feedrate_y": { "value": 100 },
"machine_max_feedrate_z": { "value": 20 },
"machine_max_feedrate_e": { "value": 120 },
"machine_max_acceleration_x": { "value": 150 },
"machine_max_acceleration_y": { "value": 150 },
"machine_max_acceleration_z": { "value": 150 },
"machine_max_acceleration_e": { "value": 150 },
"machine_acceleration": { "value": 80 }
}
}

View file

@ -0,0 +1,43 @@
{
"name": "Tronxy XY-2 Pro",
"version": 2,
"inherits": "tronxy_x",
"metadata": {
"quality_definition": "tronxy_x",
"visible": true,
"author": "AdderMk2",
"platform": "tronxy.stl"
},
"overrides": {
"machine_name": { "default_value": "Tronxy XY-2 Pro" },
"machine_width": { "default_value": 255 },
"machine_depth": { "default_value": 255 },
"machine_height": { "default_value": 260 },
"machine_head_with_fans_polygon": { "default_value": [
[-48, 45],
[-48, -30],
[27, -30],
[27, 45]
]
},
"gantry_height": { "value": 40 },
"machine_start_gcode": { "default_value": "; XY-2 Start Code\nG21\nG90\nM82\nM107 T0\nM140 S{material_bed_temperature}\nM104 S{material_print_temperature} T0\nM190 S{material_bed_temperature}\nM109 S{material_print_temperature} T0\nG28\nG92 E0\n"},
"machine_end_gcode": { "default_value": "G91\nG1 E-2 F3000\nG1 E-2 Z0.2 F1200\nG1 X5 Y5 F3600\nG1 Z10\nG90\nG1 X0 Y{machine_depth}\nM106 S0\nM104 S0\nM140 S0\n\nM84 X Y E\n" },
"machine_max_feedrate_x": { "value": 100 },
"machine_max_feedrate_y": { "value": 100 },
"machine_max_feedrate_z": { "value": 20 },
"machine_max_feedrate_e": { "value": 120 },
"machine_max_acceleration_x": { "value": 120 },
"machine_max_acceleration_y": { "value": 120 },
"machine_max_acceleration_z": { "value": 120 },
"machine_max_acceleration_e": { "value": 120 },
"machine_acceleration": { "value": 150 },
"machine_max_jerk_xy": { "value": 20 },
"machine_max_jerk_z": { "value": 0.4 },
"machine_max_jerk_e": { "value": 5 }
}
}

View file

@ -0,0 +1,38 @@
{
"name": "Tronxy XY-3",
"version": 2,
"inherits": "tronxy_x",
"metadata": {
"quality_definition": "tronxy_x",
"visible": true,
"author": "AdderMk2",
"platform": "tronxy.stl"
},
"overrides": {
"machine_name": { "default_value": "Tronxy XY-3" },
"machine_width": { "default_value": 310 },
"machine_depth": { "default_value": 310 },
"machine_height": { "default_value": 330 },
"machine_head_with_fans_polygon": { "default_value": [
[-30, 45],
[-30, -30],
[27, -30],
[27, 45]
]
},
"gantry_height": { "value": 30 },
"machine_start_gcode": { "default_value": "; XY-2 Start Code\nG21\nG90\nM82\nM107 T0\nM140 S{material_bed_temperature}\nM104 S{material_print_temperature} T0\nM190 S{material_bed_temperature}\nM109 S{material_print_temperature} T0\nG28\nG92 E0\n"},
"machine_end_gcode": { "default_value": "G91\nG1 E-2 F3000\nG1 E-2 Z0.2 F1200\nG1 X5 Y5 F3600\nG1 Z10\nG90\nG1 X0 Y{machine_depth}\nM106 S0\nM104 S0\nM140 S0\n\nM84 X Y E\n" },
"machine_max_feedrate_x": { "value": 100 },
"machine_max_feedrate_y": { "value": 100 },
"machine_max_feedrate_z": { "value": 20 },
"machine_max_feedrate_e": { "value": 120 },
"machine_max_acceleration_x": { "value": 150 },
"machine_max_acceleration_y": { "value": 150 },
"machine_max_acceleration_z": { "value": 150 },
"machine_max_acceleration_e": { "value": 150 },
"machine_acceleration": { "value": 80 }
}
}

View file

@ -32,13 +32,6 @@
"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",
@ -47,24 +40,6 @@
"filo3d_pla",
"filo3d_pla_green",
"filo3d_pla_red",
"generic_abs",
"generic_bam",
"generic_cffcpe",
"generic_cffpa",
"generic_cpe",
"generic_cpe_175",
"generic_cpe_plus",
"generic_gffcpe",
"generic_gffpa",
"generic_hips",
"generic_nylon",
"generic_pc",
"generic_petg",
"generic_pla",
"generic_pp",
"generic_pva",
"generic_tough_pla",
"generic_tpu",
"imade3d_petg_175",
"imade3d_pla_175",
"innofill_innoflex60_175",
@ -76,6 +51,13 @@
"polymax_pla",
"polyplus_pla",
"polywood_pla",
"redd_abs",
"redd_asa",
"redd_hips",
"redd_nylon",
"redd_petg",
"redd_pla",
"redd_tpe",
"structur3d_dap100silicone",
"tizyx_abs",
"tizyx_flex",
@ -146,8 +128,8 @@
},
"overrides": {
"machine_name": {"default_value": "UNI Base Printer"},
"machine_start_gcode": {"default_value": "G90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nG28 Z0 ;move Z to min endstops\nG28 X0 Y0 ;move X/Y to min endstops\nG92 E0 ;zero the extruded length\nG1 F5000 ;set speed\nG1 Z15 F5000 ;move to start position Y\nM117 Printing..."},
"machine_end_gcode": {"default_value": "M104 S0 ;extruder heater off\nM140 S0 ;heated bed heater off\nG91 ;relative positioning\nG1 E-4 F300 ;retract the filament a bit before lifting the nozzle to release some of the pressure\nG1 Z+0.5 E-5 X-20 Y-20 F5000 ;move Z up a bit and retract filament even more\nG28 Z0 ;move bed down\nG28 X0 Y0 ;move X/Y to min endstops so the head is out of the way\nM84 ;steppers off\nG90 ;absolute positioning\nM107 ;switch off cooling fan"},
"machine_start_gcode": {"default_value": ";Sliced at: {day} {date} {time}\nG21\nG90\nM82\nM220 S100\nM221 S100\nG28\nM190 S{material_bed_temperature_layer_0}\nM109 S{material_print_temperature_layer_0}\nG1 F600 Z15\nG92 E0\nG1 F300 E10\nM117 Printing...\n;\n"},
"machine_end_gcode": {"default_value": "G91\nG1 E-1 F600\nG1 Z+1 E-3 X-20 Y-20 F4800\nM104 S0\nM106 S0\nM140 S0\nM220 S100\nM221 S100\nG28\nG90\nM84\n;\n"},
"machine_heated_bed": {"default_value": true},
"material_diameter": {"default_value": 1.75},
"machine_shape": {"default_value": "rectangular"},

View file

@ -11,8 +11,8 @@
},
"overrides": {
"machine_name": {"default_value": "uni_mini"},
"machine_width": {"default_value": 180},
"machine_depth": {"default_value": 180},
"machine_width": {"default_value": 160},
"machine_depth": {"default_value": 160},
"machine_height": {"default_value": 175}
}
}

View file

@ -0,0 +1,15 @@
{
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
"metadata": {
"machine": "anycubic_mega_zero",
"position": "0"
},
"overrides": {
"extruder_nr": { "default_value": 0 },
"machine_nozzle_size": { "default_value": 0.4 },
"material_diameter": { "default_value": 1.75 }
}
}

View file

@ -19,7 +19,7 @@
"default_value": "\n;changing to tool1\nM83\nM109 T0 S{material_print_temperature}\nG1 E{switch_extruder_retraction_amount} F300\nG1 E{switch_extruder_retraction_amount} F300\nG1 E{switch_extruder_retraction_amount} F300\nG1 E{switch_extruder_retraction_amount} F300\nG1 E-{switch_extruder_retraction_amount} F2400\nG1 Y40 F3000\nG1 X10 F12000\n\n"
},
"machine_extruder_end_code": {
"default_value": "\nG1 X10 Y120 F12000\nG1 X-25 F12000\nM109 T0 R{material_standby_temperature}\nG1 Y20 F3000\n; ending tool1\n\n"
"default_value": "\nG1 X10 Y40 F12000\nG1 X-25 F12000\nM109 T0 R{material_standby_temperature}\nG1 Y20 F3000\n; ending tool1\n\n"
}
}
}

View file

@ -19,7 +19,7 @@
"default_value": "\n;changing to tool2\nM83\nM109 T1 S{material_print_temperature}\nG1 E{switch_extruder_retraction_amount} F300\nG1 E{switch_extruder_retraction_amount} F300\nG1 E{switch_extruder_retraction_amount} F300\nG1 E{switch_extruder_retraction_amount} F300\nG1 E-{switch_extruder_retraction_amount} F2400\nG1 Y40 F3000\nG1 X10 F12000\n\n"
},
"machine_extruder_end_code": {
"default_value": "\nG1 X10 Y120 F12000\nG1 X-25 F12000\nM109 T1 R{material_standby_temperature}\nG1 Y20 F3000\n; ending tool2\n\n"
"default_value": "\nG1 X10 Y40 F12000\nG1 X-25 F12000\nM109 T1 R{material_standby_temperature}\nG1 Y20 F3000\n; ending tool2\n\n"
}
}
}

View file

@ -0,0 +1,18 @@
{
"version": 2,
"name": "Left extruder",
"inherits": "fdmextruder",
"metadata": {
"machine": "leapfrog_creatr_hs",
"position": "1"
},
"overrides": {
"extruder_nr": {
"default_value": 1
},
"machine_nozzle_size": { "default_value": 0.35 },
"material_diameter": { "default_value": 1.75 },
"machine_nozzle_offset_x": { "default_value": 20 },
"machine_nozzle_offset_y": { "default_value": 25 }
}
}

View file

@ -0,0 +1,18 @@
{
"version": 2,
"name": "Right extruder",
"inherits": "fdmextruder",
"metadata": {
"machine": "leapfrog_creatr_hs",
"position": "0"
},
"overrides": {
"extruder_nr": {
"default_value": 0
},
"machine_nozzle_size": { "default_value": 0.35 },
"material_diameter": { "default_value": 1.75 },
"machine_nozzle_offset_x": { "default_value": 35 },
"machine_nozzle_offset_y": { "default_value": 25 }
}
}

View file

@ -0,0 +1,18 @@
{
"version": 2,
"name": "Left extruder",
"inherits": "fdmextruder",
"metadata": {
"machine": "leapfrog_creatr_hs_xl",
"position": "1"
},
"overrides": {
"extruder_nr": {
"default_value": 1
},
"machine_nozzle_size": { "default_value": 0.35 },
"material_diameter": { "default_value": 1.75 },
"machine_nozzle_offset_x": { "default_value": 20 },
"machine_nozzle_offset_y": { "default_value": 25 }
}
}

View file

@ -0,0 +1,18 @@
{
"version": 2,
"name": "Right extruder",
"inherits": "fdmextruder",
"metadata": {
"machine": "leapfrog_creatr_hs_xl",
"position": "0"
},
"overrides": {
"extruder_nr": {
"default_value": 0
},
"machine_nozzle_size": { "default_value": 0.35 },
"material_diameter": { "default_value": 1.75 },
"machine_nozzle_offset_x": { "default_value": 35 },
"machine_nozzle_offset_y": { "default_value": 25 }
}
}

View file

@ -0,0 +1,16 @@
{
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
"metadata": {
"machine": "tronxy_x",
"position": "0"
},
"overrides": {
"extruder_nr": { "default_value": 0 },
"machine_nozzle_size": { "default_value": 0.4 },
"material_diameter": { "default_value": 1.75 }
}
}

View file

@ -15,11 +15,11 @@
"machine_nozzle_offset_y": { "default_value": 0.0 },
"machine_extruder_start_code":
{
"default_value": "T0 ;switch to extruder 1\nG92 E0 ;reset extruder distance\nG1 F2000 E93 ;load filament\nG92 E0 ;reset extruder distance\nM104 S{material_print_temperature}\n;"
"default_value": ";T0 ;switch to extruder 1\n;G92 E0 ;reset extruder distance\n;G1 F2000 E93 ;load filament\n;G92 E0 ;reset extruder distance\n;M104 S{material_print_temperature}\n;\n"
},
"machine_extruder_end_code":
{
"default_value": "G92 E0 ;reset extruder distance\nG1 F800 E-5 ;short retract\nG1 F2400 X5 Y5 ;move near prime tower\nG1 F2000 E-93 ;long retract for filament removal\nG92 E0 ;reset extruder distance\nG90 ;absolute coordinate\n;"
"default_value": ";G92 E0 ;reset extruder distance\n;G1 F800 E-5 ;short retract\n;G1 F2400 X5 Y5 ;move near prime tower\n;G1 F2000 E-93 ;long retract for filament removal\n;G92 E0 ;reset extruder distance\n;G90 ;absolute coordinate\n;\n"
}
}
}

View file

@ -11,15 +11,15 @@
"extruder_nr": { "default_value": 1, "maximum_value": "1" },
"machine_nozzle_size": { "default_value": 0.4 },
"material_diameter": { "default_value": 1.75 },
"machine_nozzle_offset_x": { "default_value": 17.7 },
"machine_nozzle_offset_x": { "default_value": 0.0 },
"machine_nozzle_offset_y": { "default_value": 0.0 },
"machine_extruder_start_code":
{
"default_value": "T1 ;switch to extruder 2\nG92 E0 ;reset extruder distance\nG1 F2000 E93 ;load filament\nG92 E0 ;reset extruder distance\nM104 S{material_print_temperature}\n;"
"default_value": ";T1 ;switch to extruder 2\n;G92 E0 ;reset extruder distance\n;G1 F2000 E93 ;load filament\n;G92 E0 ;reset extruder distance\n;M104 S{material_print_temperature}\n;\n"
},
"machine_extruder_end_code":
{
"default_value": "G92 E0 ;reset extruder distance\nG1 F800 E-5 ;short retract\nG1 F2400 X5 Y5 ;move near prime tower\nG1 F2000 E-93 ;long retract for filament removal\nG92 E0 ;reset extruder distance\nG90 ;absolute coordinate\n;"
"default_value": ";G92 E0 ;reset extruder distance\n;G1 F800 E-5 ;short retract\n;G1 F2400 X5 Y5 ;move near prime tower\n;G1 F2000 E-93 ;long retract for filament removal\n;G92 E0 ;reset extruder distance\n;G90 ;absolute coordinate\n;\n"
}
}
}

View file

@ -4,7 +4,7 @@ name = Quick
definition = ultimaker_s3
[metadata]
setting_version = 13
setting_version = 15
type = intent
intent_category = quick
quality_type = draft

View file

@ -4,7 +4,7 @@ name = Accurate
definition = ultimaker_s3
[metadata]
setting_version = 13
setting_version = 15
type = intent
intent_category = engineering
quality_type = fast

View file

@ -4,7 +4,7 @@ name = Visual
definition = ultimaker_s3
[metadata]
setting_version = 13
setting_version = 15
type = intent
quality_type = fast
intent_category = visual

View file

@ -4,7 +4,7 @@ name = Visual
definition = ultimaker_s3
[metadata]
setting_version = 13
setting_version = 15
type = intent
quality_type = high
intent_category = visual

View file

@ -4,7 +4,7 @@ name = Accurate
definition = ultimaker_s3
[metadata]
setting_version = 13
setting_version = 15
type = intent
intent_category = engineering
quality_type = normal

View file

@ -4,7 +4,7 @@ name = Visual
definition = ultimaker_s3
[metadata]
setting_version = 13
setting_version = 15
type = intent
quality_type = normal
intent_category = visual

View file

@ -4,7 +4,7 @@ name = Accurate
definition = ultimaker_s3
[metadata]
setting_version = 13
setting_version = 15
type = intent
intent_category = engineering
quality_type = fast

View file

@ -4,7 +4,7 @@ name = Accurate
definition = ultimaker_s3
[metadata]
setting_version = 13
setting_version = 15
type = intent
intent_category = engineering
quality_type = normal

View file

@ -4,7 +4,7 @@ name = Accurate
definition = ultimaker_s3
[metadata]
setting_version = 13
setting_version = 15
type = intent
intent_category = engineering
quality_type = fast

View file

@ -4,7 +4,7 @@ name = Accurate
definition = ultimaker_s3
[metadata]
setting_version = 13
setting_version = 15
type = intent
intent_category = engineering
quality_type = normal

View file

@ -4,7 +4,7 @@ name = Accurate
definition = ultimaker_s3
[metadata]
setting_version = 13
setting_version = 15
type = intent
intent_category = engineering
quality_type = fast

View file

@ -4,7 +4,7 @@ name = Accurate
definition = ultimaker_s3
[metadata]
setting_version = 13
setting_version = 15
type = intent
intent_category = engineering
quality_type = normal

View file

@ -4,7 +4,7 @@ name = Accurate
definition = ultimaker_s3
[metadata]
setting_version = 13
setting_version = 15
type = intent
intent_category = engineering
quality_type = fast

View file

@ -4,7 +4,7 @@ name = Accurate
definition = ultimaker_s3
[metadata]
setting_version = 13
setting_version = 15
type = intent
intent_category = engineering
quality_type = normal

View file

@ -4,7 +4,7 @@ name = Quick
definition = ultimaker_s3
[metadata]
setting_version = 13
setting_version = 15
type = intent
intent_category = quick
quality_type = draft

View file

@ -4,7 +4,7 @@ name = Accurate
definition = ultimaker_s3
[metadata]
setting_version = 13
setting_version = 15
type = intent
intent_category = engineering
quality_type = fast

View file

@ -4,7 +4,7 @@ name = Visual
definition = ultimaker_s3
[metadata]
setting_version = 13
setting_version = 15
type = intent
quality_type = fast
intent_category = visual

View file

@ -4,7 +4,7 @@ name = Visual
definition = ultimaker_s3
[metadata]
setting_version = 13
setting_version = 15
type = intent
quality_type = high
intent_category = visual

View file

@ -4,7 +4,7 @@ name = Accurate
definition = ultimaker_s3
[metadata]
setting_version = 13
setting_version = 15
type = intent
intent_category = engineering
quality_type = normal

View file

@ -4,7 +4,7 @@ name = Visual
definition = ultimaker_s3
[metadata]
setting_version = 13
setting_version = 15
type = intent
quality_type = normal
intent_category = visual

View file

@ -4,7 +4,7 @@ name = Quick
definition = ultimaker_s3
[metadata]
setting_version = 13
setting_version = 15
type = intent
intent_category = quick
quality_type = draft

View file

@ -4,7 +4,7 @@ name = Accurate
definition = ultimaker_s3
[metadata]
setting_version = 13
setting_version = 15
type = intent
intent_category = engineering
quality_type = fast

View file

@ -4,7 +4,7 @@ name = Visual
definition = ultimaker_s3
[metadata]
setting_version = 13
setting_version = 15
type = intent
quality_type = fast
intent_category = visual

View file

@ -4,7 +4,7 @@ name = Visual
definition = ultimaker_s3
[metadata]
setting_version = 13
setting_version = 15
type = intent
quality_type = high
intent_category = visual

View file

@ -4,7 +4,7 @@ name = Accurate
definition = ultimaker_s3
[metadata]
setting_version = 13
setting_version = 15
type = intent
intent_category = engineering
quality_type = normal

View file

@ -4,7 +4,7 @@ name = Visual
definition = ultimaker_s3
[metadata]
setting_version = 13
setting_version = 15
type = intent
quality_type = normal
intent_category = visual

View file

@ -4,7 +4,7 @@ name = Quick
definition = ultimaker_s5
[metadata]
setting_version = 13
setting_version = 15
type = intent
intent_category = quick
quality_type = draft

View file

@ -4,7 +4,7 @@ name = Accurate
definition = ultimaker_s5
[metadata]
setting_version = 13
setting_version = 15
type = intent
intent_category = engineering
quality_type = fast

View file

@ -4,7 +4,7 @@ name = Visual
definition = ultimaker_s5
[metadata]
setting_version = 13
setting_version = 15
type = intent
quality_type = fast
intent_category = visual

View file

@ -4,7 +4,7 @@ name = Visual
definition = ultimaker_s5
[metadata]
setting_version = 13
setting_version = 15
type = intent
quality_type = high
intent_category = visual

View file

@ -4,7 +4,7 @@ name = Accurate
definition = ultimaker_s5
[metadata]
setting_version = 13
setting_version = 15
type = intent
intent_category = engineering
quality_type = normal

View file

@ -4,7 +4,7 @@ name = Visual
definition = ultimaker_s5
[metadata]
setting_version = 13
setting_version = 15
type = intent
quality_type = normal
intent_category = visual

View file

@ -4,7 +4,7 @@ name = Accurate
definition = ultimaker_s5
[metadata]
setting_version = 13
setting_version = 15
type = intent
intent_category = engineering
quality_type = fast

View file

@ -4,7 +4,7 @@ name = Accurate
definition = ultimaker_s5
[metadata]
setting_version = 13
setting_version = 15
type = intent
intent_category = engineering
quality_type = normal

View file

@ -4,7 +4,7 @@ name = Accurate
definition = ultimaker_s5
[metadata]
setting_version = 13
setting_version = 15
type = intent
intent_category = engineering
quality_type = fast

View file

@ -4,7 +4,7 @@ name = Accurate
definition = ultimaker_s5
[metadata]
setting_version = 13
setting_version = 15
type = intent
intent_category = engineering
quality_type = normal

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