Merge branch 'master' of github.com:Ultimaker/Cura into CURA-7038

This commit is contained in:
Dimitriovski 2019-12-23 17:48:15 +01:00
commit 4b86400661
No known key found for this signature in database
GPG Key ID: 4E62757E2B0D304D
321 changed files with 5664 additions and 887 deletions

View File

@ -1,6 +1,12 @@
--- ---
name: CI/CD name: CI/CD
on: [push, pull_request] on:
push:
branches:
- master
- 'WIP**'
- '4.*'
pull_request:
jobs: jobs:
build: build:
name: Build and test name: Build and test

View File

@ -1,4 +1,4 @@
# Copyright (c) 2018 Ultimaker B.V. # Copyright (c) 2019 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher. # Cura is released under the terms of the LGPLv3 or higher.
import platform import platform
@ -7,13 +7,14 @@ import faulthandler
import tempfile import tempfile
import os import os
import os.path import os.path
import time import uuid
import json import json
import ssl import locale
import urllib.request from typing import cast
import urllib.error
import certifi from sentry_sdk.hub import Hub
from sentry_sdk.utils import event_from_exception
from sentry_sdk import configure_scope
from PyQt5.QtCore import QT_VERSION_STR, PYQT_VERSION_STR, QUrl from PyQt5.QtCore import QT_VERSION_STR, PYQT_VERSION_STR, QUrl
from PyQt5.QtWidgets import QDialog, QDialogButtonBox, QVBoxLayout, QLabel, QTextEdit, QGroupBox, QCheckBox, QPushButton from PyQt5.QtWidgets import QDialog, QDialogButtonBox, QVBoxLayout, QLabel, QTextEdit, QGroupBox, QCheckBox, QPushButton
@ -24,7 +25,6 @@ from UM.Logger import Logger
from UM.View.GL.OpenGL import OpenGL from UM.View.GL.OpenGL import OpenGL
from UM.i18n import i18nCatalog from UM.i18n import i18nCatalog
from UM.Resources import Resources from UM.Resources import Resources
from cura import ApplicationMetadata from cura import ApplicationMetadata
catalog = i18nCatalog("cura") catalog = i18nCatalog("cura")
@ -46,9 +46,8 @@ skip_exception_types = [
GeneratorExit GeneratorExit
] ]
class CrashHandler:
crash_url = "https://stats.ultimaker.com/api/cura"
class CrashHandler:
def __init__(self, exception_type, value, tb, has_started = True): def __init__(self, exception_type, value, tb, has_started = True):
self.exception_type = exception_type self.exception_type = exception_type
self.value = value self.value = value
@ -56,21 +55,20 @@ class CrashHandler:
self.has_started = has_started self.has_started = has_started
self.dialog = None # Don't create a QDialog before there is a QApplication self.dialog = None # Don't create a QDialog before there is a QApplication
# While we create the GUI, the information will be stored for sending afterwards
self.data = dict()
self.data["time_stamp"] = time.time()
Logger.log("c", "An uncaught error has occurred!") Logger.log("c", "An uncaught error has occurred!")
for line in traceback.format_exception(exception_type, value, tb): for line in traceback.format_exception(exception_type, value, tb):
for part in line.rstrip("\n").split("\n"): for part in line.rstrip("\n").split("\n"):
Logger.log("c", part) Logger.log("c", part)
self.data = {}
# If Cura has fully started, we only show fatal errors. # If Cura has fully started, we only show fatal errors.
# If Cura has not fully started yet, we always show the early crash dialog. Otherwise, Cura will just crash # If Cura has not fully started yet, we always show the early crash dialog. Otherwise, Cura will just crash
# without any information. # without any information.
if has_started and exception_type in skip_exception_types: if has_started and exception_type in skip_exception_types:
return return
with configure_scope() as scope:
scope.set_tag("during_startup", not has_started)
if not has_started: if not has_started:
self._send_report_checkbox = None self._send_report_checkbox = None
self.early_crash_dialog = self._createEarlyCrashDialog() self.early_crash_dialog = self._createEarlyCrashDialog()
@ -179,25 +177,42 @@ class CrashHandler:
try: try:
from UM.Application import Application from UM.Application import Application
self.cura_version = Application.getInstance().getVersion() self.cura_version = Application.getInstance().getVersion()
self.cura_locale = Application.getInstance().getPreferences().getValue("general/language")
except: except:
self.cura_version = catalog.i18nc("@label unknown version of Cura", "Unknown") self.cura_version = catalog.i18nc("@label unknown version of Cura", "Unknown")
self.cura_locale = "??_??"
self.data["cura_version"] = self.cura_version
self.data["os"] = {"type": platform.system(), "version": platform.version()}
self.data["qt_version"] = QT_VERSION_STR
self.data["pyqt_version"] = PYQT_VERSION_STR
self.data["locale_os"] = locale.getlocale(locale.LC_MESSAGES)[0] if hasattr(locale, "LC_MESSAGES") else \
locale.getdefaultlocale()[0]
self.data["locale_cura"] = self.cura_locale
crash_info = "<b>" + catalog.i18nc("@label Cura version number", "Cura version") + ":</b> " + str(self.cura_version) + "<br/>" crash_info = "<b>" + catalog.i18nc("@label Cura version number", "Cura version") + ":</b> " + str(self.cura_version) + "<br/>"
crash_info += "<b>" + catalog.i18nc("@label Cura build type", "Cura build type") + ":</b> " + str(ApplicationMetadata.CuraBuildType) + "<br/>" crash_info += "<b>" + catalog.i18nc("@label", "Cura language") + ":</b> " + str(self.cura_locale) + "<br/>"
crash_info += "<b>" + catalog.i18nc("@label", "OS language") + ":</b> " + str(self.data["locale_os"]) + "<br/>"
crash_info += "<b>" + catalog.i18nc("@label Type of platform", "Platform") + ":</b> " + str(platform.platform()) + "<br/>" crash_info += "<b>" + catalog.i18nc("@label Type of platform", "Platform") + ":</b> " + str(platform.platform()) + "<br/>"
crash_info += "<b>" + catalog.i18nc("@label", "Qt version") + ":</b> " + str(QT_VERSION_STR) + "<br/>" crash_info += "<b>" + catalog.i18nc("@label", "Qt version") + ":</b> " + str(QT_VERSION_STR) + "<br/>"
crash_info += "<b>" + catalog.i18nc("@label", "PyQt version") + ":</b> " + str(PYQT_VERSION_STR) + "<br/>" crash_info += "<b>" + catalog.i18nc("@label", "PyQt version") + ":</b> " + str(PYQT_VERSION_STR) + "<br/>"
crash_info += "<b>" + catalog.i18nc("@label OpenGL version", "OpenGL") + ":</b> " + str(self._getOpenGLInfo()) + "<br/>" crash_info += "<b>" + catalog.i18nc("@label OpenGL version", "OpenGL") + ":</b> " + str(self._getOpenGLInfo()) + "<br/>"
label.setText(crash_info) label.setText(crash_info)
layout.addWidget(label) layout.addWidget(label)
group.setLayout(layout) group.setLayout(layout)
self.data["cura_version"] = self.cura_version with configure_scope() as scope:
self.data["cura_build_type"] = ApplicationMetadata.CuraBuildType scope.set_tag("qt_version", QT_VERSION_STR)
self.data["os"] = {"type": platform.system(), "version": platform.version()} scope.set_tag("pyqt_version", PYQT_VERSION_STR)
self.data["qt_version"] = QT_VERSION_STR scope.set_tag("os", platform.system())
self.data["pyqt_version"] = PYQT_VERSION_STR scope.set_tag("os_version", platform.version())
scope.set_tag("locale_os", self.data["locale_os"])
scope.set_tag("locale_cura", self.cura_locale)
scope.set_tag("is_enterprise", ApplicationMetadata.IsEnterpriseVersion)
scope.set_user({"id": str(uuid.getnode())})
return group return group
@ -215,6 +230,30 @@ class CrashHandler:
self.data["opengl"] = {"version": opengl_instance.getOpenGLVersion(), "vendor": opengl_instance.getGPUVendorName(), "type": opengl_instance.getGPUType()} self.data["opengl"] = {"version": opengl_instance.getOpenGLVersion(), "vendor": opengl_instance.getGPUVendorName(), "type": opengl_instance.getGPUType()}
active_machine_definition_id = "unknown"
active_machine_manufacturer = "unknown"
try:
from cura.CuraApplication import CuraApplication
application = cast(CuraApplication, Application.getInstance())
machine_manager = application.getMachineManager()
global_stack = machine_manager.activeMachine
if global_stack is None:
active_machine_definition_id = "empty"
active_machine_manufacturer = "empty"
else:
active_machine_definition_id = global_stack.definition.getId()
active_machine_manufacturer = global_stack.definition.getMetaDataEntry("manufacturer", "unknown")
except:
pass
with configure_scope() as scope:
scope.set_tag("opengl_version", opengl_instance.getOpenGLVersion())
scope.set_tag("gpu_vendor", opengl_instance.getGPUVendorName())
scope.set_tag("gpu_type", opengl_instance.getGPUType())
scope.set_tag("active_machine", active_machine_definition_id)
scope.set_tag("active_machine_manufacturer", active_machine_manufacturer)
return info return info
def _exceptionInfoWidget(self): def _exceptionInfoWidget(self):
@ -296,6 +335,10 @@ class CrashHandler:
"module_name": module_name, "version": module_version, "is_plugin": isPlugin} "module_name": module_name, "version": module_version, "is_plugin": isPlugin}
self.data["exception"] = exception_dict self.data["exception"] = exception_dict
with configure_scope() as scope:
scope.set_tag("is_plugin", isPlugin)
scope.set_tag("module", module_name)
return group return group
def _logInfoWidget(self): def _logInfoWidget(self):
@ -353,31 +396,11 @@ class CrashHandler:
# Before sending data, the user comments are stored # Before sending data, the user comments are stored
self.data["user_info"] = self.user_description_text_area.toPlainText() self.data["user_info"] = self.user_description_text_area.toPlainText()
# Convert data to bytes
binary_data = json.dumps(self.data).encode("utf-8")
# CURA-6698 Create an SSL context and use certifi CA certificates for verification.
context = ssl.SSLContext(protocol=ssl.PROTOCOL_TLSv1_2)
context.load_verify_locations(cafile = certifi.where())
# Submit data
kwoptions = {"data": binary_data,
"timeout": 5,
"context": context}
Logger.log("i", "Sending crash report info to [%s]...", self.crash_url)
if not self.has_started:
print("Sending crash report info to [%s]...\n" % self.crash_url)
try: try:
f = urllib.request.urlopen(self.crash_url, **kwoptions) hub = Hub.current
Logger.log("i", "Sent crash report info.") event, hint = event_from_exception((self.exception_type, self.value, self.traceback))
if not self.has_started: hub.capture_event(event, hint=hint)
print("Sent crash report info.\n") hub.flush()
f.close()
except urllib.error.HTTPError as e:
Logger.logException("e", "An HTTP error occurred while trying to send crash report")
if not self.has_started:
print("An HTTP error occurred while trying to send crash report: %s" % e)
except Exception as e: # We don't want any exception to cause problems except Exception as e: # We don't want any exception to cause problems
Logger.logException("e", "An exception occurred while trying to send crash report") Logger.logException("e", "An exception occurred while trying to send crash report")
if not self.has_started: if not self.has_started:

View File

@ -60,28 +60,38 @@ class MaterialNode(ContainerNode):
container_registry = ContainerRegistry.getInstance() container_registry = ContainerRegistry.getInstance()
# Find all quality profiles that fit on this material. # Find all quality profiles that fit on this material.
if not self.variant.machine.has_machine_quality: # Need to find the global qualities. if not self.variant.machine.has_machine_quality: # Need to find the global qualities.
qualities = container_registry.findInstanceContainersMetadata(type = "quality", definition = "fdmprinter") qualities = container_registry.findInstanceContainersMetadata(type = "quality",
definition = "fdmprinter")
elif not self.variant.machine.has_materials: elif not self.variant.machine.has_materials:
qualities = container_registry.findInstanceContainersMetadata(type="quality", definition=self.variant.machine.quality_definition) qualities = container_registry.findInstanceContainersMetadata(type = "quality",
definition = self.variant.machine.quality_definition)
else: else:
if self.variant.machine.has_variants: if self.variant.machine.has_variants:
# Need to find the qualities that specify a material profile with the same material type. # Need to find the qualities that specify a material profile with the same material type.
qualities = container_registry.findInstanceContainersMetadata(type = "quality", definition = self.variant.machine.quality_definition, variant = self.variant.variant_name, material = self.container_id) # First try by exact material ID. qualities = container_registry.findInstanceContainersMetadata(type = "quality",
definition = self.variant.machine.quality_definition,
variant = self.variant.variant_name,
material = self.base_file) # First try by exact material ID.
# CURA-7070
# The quality profiles only reference a material with the material_root_id. They will never state something
# such as "generic_pla_ultimaker_s5_AA_0.4". So we search with the "base_file" which is the material_root_id.
else: else:
qualities = container_registry.findInstanceContainersMetadata(type = "quality", definition = self.variant.machine.quality_definition, material = self.container_id) qualities = container_registry.findInstanceContainersMetadata(type = "quality", definition = self.variant.machine.quality_definition, material = self.base_file)
if not qualities: if not qualities:
my_material_type = self.material_type my_material_type = self.material_type
if self.variant.machine.has_variants: if self.variant.machine.has_variants:
qualities_any_material = container_registry.findInstanceContainersMetadata(type = "quality", definition = self.variant.machine.quality_definition, variant = self.variant.variant_name) qualities_any_material = container_registry.findInstanceContainersMetadata(type = "quality",
definition = self.variant.machine.quality_definition,
variant = self.variant.variant_name)
else: else:
qualities_any_material = container_registry.findInstanceContainersMetadata(type = "quality", definition = self.variant.machine.quality_definition) qualities_any_material = container_registry.findInstanceContainersMetadata(type = "quality", definition = self.variant.machine.quality_definition)
for material_metadata in container_registry.findInstanceContainersMetadata(type = "material", material = my_material_type): for material_metadata in container_registry.findInstanceContainersMetadata(type = "material", material = my_material_type):
qualities.extend((quality for quality in qualities_any_material if quality.get("material") == material_metadata["id"])) qualities.extend((quality for quality in qualities_any_material if quality.get("material") == material_metadata["base_file"]))
if not qualities: # No quality profiles found. Go by GUID then. if not qualities: # No quality profiles found. Go by GUID then.
my_guid = self.guid my_guid = self.guid
for material_metadata in container_registry.findInstanceContainersMetadata(type = "material", guid = my_guid): for material_metadata in container_registry.findInstanceContainersMetadata(type = "material", guid = my_guid):
qualities.extend((quality for quality in qualities_any_material if quality["material"] == material_metadata["id"])) qualities.extend((quality for quality in qualities_any_material if quality["material"] == material_metadata["base_file"]))
if not qualities: if not qualities:
# There are still some machines that should use global profiles in the extruder, so do that now. # There are still some machines that should use global profiles in the extruder, so do that now.

View File

@ -43,7 +43,7 @@ class CuraFormulaFunctions:
extruder_stack = global_stack.extruderList[int(extruder_position)] extruder_stack = global_stack.extruderList[int(extruder_position)]
except IndexError: except IndexError:
if extruder_position != 0: if extruder_position != 0:
Logger.log("w", "Value for %s of extruder %s was requested, but that extruder is not available. Returning the result form extruder 0 instead" % (property_key, extruder_position)) Logger.log("w", "Value for %s of extruder %s was requested, but that extruder is not available. Returning the result from extruder 0 instead" % (property_key, extruder_position))
# This fixes a very specific fringe case; If a profile was created for a custom printer and one of the # This fixes a very specific fringe case; If a profile was created for a custom printer and one of the
# extruder settings has been set to non zero and the profile is loaded for a machine that has only a single extruder # extruder settings has been set to non zero and the profile is loaded for a machine that has only a single extruder
# it would cause all kinds of issues (and eventually a crash). # it would cause all kinds of issues (and eventually a crash).

View File

@ -894,8 +894,8 @@ class MachineManager(QObject):
@pyqtSlot(int, bool) @pyqtSlot(int, bool)
def setExtruderEnabled(self, position: int, enabled: bool) -> None: def setExtruderEnabled(self, position: int, enabled: bool) -> None:
if self._global_container_stack is None: if self._global_container_stack is None or str(position) not in self._global_container_stack.extruders:
Logger.log("w", "Could not find extruder on position %s", position) Logger.log("w", "Could not find extruder on position %s.", position)
return return
extruder = self._global_container_stack.extruderList[position] extruder = self._global_container_stack.extruderList[position]

View File

@ -9,8 +9,11 @@ import os
import sys import sys
from UM.Platform import Platform from UM.Platform import Platform
from cura import ApplicationMetadata
from cura.ApplicationMetadata import CuraAppName from cura.ApplicationMetadata import CuraAppName
import sentry_sdk
parser = argparse.ArgumentParser(prog = "cura", parser = argparse.ArgumentParser(prog = "cura",
add_help = False) add_help = False)
parser.add_argument("--debug", parser.add_argument("--debug",
@ -18,8 +21,25 @@ parser.add_argument("--debug",
default = False, default = False,
help = "Turn on the debug mode by setting this option." help = "Turn on the debug mode by setting this option."
) )
known_args = vars(parser.parse_known_args()[0]) known_args = vars(parser.parse_known_args()[0])
sentry_env = "production"
if ApplicationMetadata.CuraVersion == "master":
sentry_env = "development"
try:
if ApplicationMetadata.CuraVersion.split(".")[2] == "99":
sentry_env = "nightly"
except IndexError:
pass
sentry_sdk.init("https://5034bf0054fb4b889f82896326e79b13@sentry.io/1821564",
environment = sentry_env,
release = "cura%s" % ApplicationMetadata.CuraVersion,
default_integrations = False,
max_breadcrumbs = 300,
server_name = "cura")
if not known_args["debug"]: if not known_args["debug"]:
def get_cura_dir_path(): def get_cura_dir_path():
if Platform.isWindows(): if Platform.isWindows():

View File

@ -0,0 +1 @@
<mxfile host="www.draw.io" modified="2019-12-20T12:41:33.716Z" agent="Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:66.0) Gecko/20100101 Firefox/66.0" etag="exp7abRcULgdJsv-qAei" version="12.4.3" type="device" pages="1"><diagram id="05EojhSyumsKE0fvOSX8" name="Page-1">7ZtNb9s4EIZ/jY+70LftY+NkuwskQFrvts2pYCRaIkqLBkXXcn79Di3Ssk3ZTR195EDAB82IpIZ8ZgzxBTXyZ8vyI0er7IElmI48JylH/u3I89zA80by5yTbyjOOxpUj5SRRjWrHnLxg5XSUd00SXBw1FIxRQVbHzpjlOY7FkQ9xzjbHzRaMHj91hVJsOOYxoqb3K0lEVnkn3rj2/41Jmuknu9G0urNEurGaSZGhhG0OXP7dyJ9xxkR1tSxnmMrF0+tS9fvrzN19YBzn4jUdvnDvJQzwv+sXOp0/lfHk+3fxh1+N8hPRtZrwXSn4OsF8LlD8Q0Uutno5ig1ZUpSDdbNguZirOw7YcUZoco+2bC3DKWR3bd1kjJMXaI8o3HLBAbe5ULS9SI5GKJ0xyjg4crZ7QN2piqV6DMcFdHvU03ZPXA+oPGp4jwqhA2SUolVBnnchy45LxFOS3zAh2FI1UuuBucDl2YV29/gg7zFbYsG30ER3mCriKuXdsbI3dQK5gfJlB8nj+YFKXJW06X7smitcKLS/gTkwMP9XYG7QhTmLHRzOfuATGg2AECVpDibFC9lNLhqByvmg3IKt5GArFJM8vd+1uQ1qz2c1celi0HdBd9WRkSTBueTHBBLoeZ9fK0ZysVuY8AZ+sH4z589wFELgM7Dd2oafbM7FjOUwF0R23DBkwgbLbHgd5PP1YpJXpCGTXwc66ohzaHD+tAZKQsY4y1Cewl+phd4u9NAbGHpkQP8nF3JGlnS7pMeTgUmPz5e3Rd0qatcJBmY9MVg/IIE5gVcoC7tl2P5rX9C6gj01YH9BgNr+h7fPOhz6HU3vbA9g3+IFyYkgLLfvad2Rnwz9oua6F8lb3u1uxpyhX9c8k/dHyp61nmG1lbdrK4GWEw8g+06v2opWOK248tZ6Psf+vLrSjLqzejbVUiuvdI69QV/pGbupnlqBpRvWDQpLz6wvKKgWdruwmzSWnmmb0qkVWTrD3aCy9Izb1E+tzNIV7QadpWfapoJqdZZe0DcILT2jN/VUK7R0uDFrUFr6Be6ae3B7juWtWosfvrtzLK65A7day1UlXVXM+z3J4pqbbqu1dI598LMsrrn/tlpLN6wHP83imrtvq7V0BHv48yyuufm2WktnuAc/0eKau2+rtXRFe/gzLZc33PaFrTP0gx9q0Z+3WK2ln43Z4KdafBO4gRnnyQf58RVYMUVFQWKpg4illk1gCfj2m1x2WE9lPikKO+O2PLK22iqJOOgG1pMeEa7rTtLQfargcGJ853Wig8AE2JrH+NLUq3YC8RRfo5cdMAsbkGkfxxQJ8vM43iaO6gmPMm9H58/I6BLVQ1TzVL3qbDAG8oLjgaLpyUDVQhgDAXq0PWim6upswF50ErDvXIzLDy62h4sqgjrH9wzekPbmYa7fT/sr0lcaj/CaDPFjflgUV5RPi6Wgc+qd10LknaTK+MpaiMa/KKqWaiE4DbjfWgCz/iK1al5/1+vf/Q8=</diagram></mxfile>

BIN
docs/Profile Stack.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View File

@ -0,0 +1 @@
<mxfile host="www.draw.io" modified="2019-12-20T12:34:56.339Z" agent="Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:66.0) Gecko/20100101 Firefox/66.0" etag="1NLsmsxIqXUmOJee4m9D" version="12.4.3" type="device" pages="1"><diagram id="K0t5C8WxT4tyKudoHXNk" name="Page-1">7VzbcqM4EP0aP+4WSFzsx8SZmd2tpCqTbO1kn1KKkW3VYOQBObHn61cyF0MLM9jhkmyo8gMSLXQ5R+rTDckIT1fbLyFZL2+4R/0RMrztCF+NEDIthEbqZ3i7uMZ13LhiETIvMTpU3LOfNKk0ktoN82hUMBSc+4Kti5UzHgR0Jgp1JAz5S9Fszv1ir2uyoFrF/Yz4eu035ollXDtG7qH+D8oWy7Rn05nEd1YkNU5mEi2Jx19yVfjTCE9DzkV8tdpOqa8WL12XuN3nI3ezgYU0EHUa/OXdPfz4exV+fRLWl92tG9388/m35CnPxN8kE/4zEOqB8ZDFLl2H6IWtfBLI0uWcB+I+uWPI8mzJfO+a7PhGjSMSZPY9LV0uech+Snviy1umrJC3Q5HAjFXrOfP9Kfd5KCsCvu/g0OhePSzpJqSRbHabztcEVTdkWzC8JpFIB8h9n6wj9rQfsmq4IuGCBZdcCL5KjJKFoKGg26MrbGa4ScJTvqIi3EmTtIGTQJ1w3URWXH45MMecJDbLPGvShiRh6yJ7dtbdnWQ3CRZyCll/2SZJ+7MMrT+npDvkFHsjvqBhQAS95JvAi/Iskhe5mR6q9tw6gWdY4xnb8+xxJrtdcDVTOSi8vciQyHFPIiL21An5dwq4UkIf4rNFIIs+natmClImN/RFUi34Wj1sTWYsWFzvba6sQ81dsk6qisu2c3+/aZfM82ig2MUFEeQpY/+ay5nsF9K+lD+53FPjd3tky4FPZdk8lOVPmYdiygM5F8L2rKKSpy9UcbUeBY9vY52XCS+wTotSGkJe5FlYIMSp6Fsa+vJ0pCGTp8KAdbNY207PWE80rD06ZwETjAcD2g2jPUY9o516oBzcz0RubKUghgO9LdhNY9w37rpw/LGROIndo9it6YB404jjmlKyNcRtDfCvMeCdhApyWv+vUMEtSndslmg0qyxUwBWhwqsAdgaR1txutit3MyoRaWVgt7aZ3eH07hJvu0SmdYr3eFBp3aPuloi0TlE39SM9H4sNyLeFvGmUqLVuoddPeA1lGngXKkMuSzOfRBGbKUElVqn+olsmHpJFV9f/qmu5snHpapu7dbVLC4Ec/UO+kGuliodm+1LaLh4c9bRkPBBUcgJ8E85o1dTT1wRSuNEqDN1yDHOY2SWQpXUh9Ylgz8XxVuRvbxVtcwJwXBSAaAIeEc8zaZVP64MHZe8XMl8DHhSvg/YgCT3Z5cySbXV8wBgM2DUrxwXtsWsDVscjaDTNbOqO7qiIHcKUX4cpFgDRrKtkshOw+ZNNTzA+kYg+ylUfhOsZaYdxpSfrPVJBeoJxyCe3h3fvkQrSE4tZqDKA3SzYvQcoqSh9lUo9U3Gm6jZVunXUbYMq1aopUmN315dKxSBNmanWU1WqBT5VQJZbS6U2JQyR/gr62LEy6MLTdSEa1wx40yOn+aNEfz8RkNWgCE93GvFWecOKsDqrNeDdLN79K0I9pv8oImFcUySgI+nIbkSCbYAMlHumSLBtmMoCD2oolQXFiGUYleOC9hhhwOoWUln4pMB3EC2/Fi0OyJRip+bRlh6BjR9tWA92pf3gwk51YdgoB/6tSBasRx+nu7AzXNFbeBvj1PRh+Mjm7caHWeDTffvcQNcGvsKG3+s05cMs4MOSv0g56sOgvVF4fdOSD9ODso/Ce/Q+eI9AIO+cy3voXG2rHd7bE+DErUn1fpz0wXs9RO2W92Z/vDfeBe8d+HYahhp1ee+CDKkFN1BDvHcBj5FZfd5D+2543+BXJ++N93W/Ouk3VncMSItzz3sQq2O7Hd7DASMLV4/LgBu7i1hd/ybhdN6fyeFzvtJqkPeTd3Hcm4AVDlTldWlvwhRVS8e9Cd+XmdUyB9pbdnVKS3MPp9p34U4sPT3SrTvpMWyuK6P6dSdaZnRy5r6C8TduKXzQ30Pb1ePqI/VroQ/L+7pRc7+fRcDX35ror0178BWw1VK2CI/h9qp2J9DenLzquJfFw/85ic0P/y0Gf/oP</diagram></mxfile>

BIN
docs/Profile Structure.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

View File

@ -790,7 +790,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
container_info = ContainerInfo(None, None, None) container_info = ContainerInfo(None, None, None)
quality_changes_info.extruder_info_dict["0"] = container_info quality_changes_info.extruder_info_dict["0"] = container_info
# If the global stack we're "targeting" has never been active, but was updated from Cura 3.4, # If the global stack we're "targeting" has never been active, but was updated from Cura 3.4,
# it might not have it's extruders set properly. # it might not have its extruders set properly.
if not global_stack.extruders: if not global_stack.extruders:
ExtruderManager.getInstance().fixSingleExtrusionMachineExtruderDefinition(global_stack) ExtruderManager.getInstance().fixSingleExtrusionMachineExtruderDefinition(global_stack)
extruder_stack = global_stack.extruders["0"] extruder_stack = global_stack.extruders["0"]

View File

@ -97,7 +97,6 @@ Cura.MachineAction
text: Cura.MachineManager.activeMachine.name text: Cura.MachineManager.activeMachine.name
horizontalAlignment: Text.AlignHCenter horizontalAlignment: Text.AlignHCenter
font: UM.Theme.getFont("large_bold") font: UM.Theme.getFont("large_bold")
color: UM.Theme.getColor("text")
renderType: Text.NativeRendering renderType: Text.NativeRendering
} }

View File

@ -40,11 +40,13 @@ Item
// update active type label // update active type label
for (var button in meshTypeButtons.children) for (var button in meshTypeButtons.children)
{ {
if (meshTypeButtons.children[button].checked){ if (meshTypeButtons.children[button].checked)
{
meshTypeLabel.text = catalog.i18nc("@label", "Mesh Type") + ": " + meshTypeButtons.children[button].text meshTypeLabel.text = catalog.i18nc("@label", "Mesh Type") + ": " + meshTypeButtons.children[button].text
break break
} }
} }
visibility_handler.addSkipResetSetting(currentMeshType)
} }
function setOverhangsMeshType() function setOverhangsMeshType()
@ -129,7 +131,7 @@ Item
} }
Label Label
{ {
id: meshTypeLabel id: meshTypeLabel
font: UM.Theme.getFont("default") font: UM.Theme.getFont("default")
@ -203,6 +205,7 @@ Item
visibilityHandler: Cura.PerObjectSettingVisibilityHandler visibilityHandler: Cura.PerObjectSettingVisibilityHandler
{ {
id: visibility_handler
selectedObjectId: UM.ActiveTool.properties.getValue("SelectedObjectId") selectedObjectId: UM.ActiveTool.properties.getValue("SelectedObjectId")
} }
@ -319,10 +322,7 @@ Item
Connections Connections
{ {
target: inheritStackProvider target: inheritStackProvider
onPropertiesChanged: onPropertiesChanged: provider.forcePropertiesChanged()
{
provider.forcePropertiesChanged()
}
} }
Connections Connections
@ -458,5 +458,4 @@ Item
Cura.SettingUnknown { } Cura.SettingUnknown { }
} }
} }

View File

@ -7,133 +7,129 @@ import Cura 1.0 as Cura
import ".." import ".."
UM.Dialog UM.Dialog
{
id: settingPickDialog
title: catalog.i18nc("@title:window", "Select Settings to Customize for this model")
width: screenScaleFactor * 360
property var additional_excluded_settings
onVisibilityChanged:
{ {
id: settingPickDialog // force updating the model to sync it with addedSettingsModel
if (visible)
title: catalog.i18nc("@title:window", "Select Settings to Customize for this model")
width: screenScaleFactor * 360
property var additional_excluded_settings
onVisibilityChanged:
{ {
// force updating the model to sync it with addedSettingsModel listview.model.forceUpdate()
if (visible) updateFilter()
{ }
// Set skip setting, it will prevent from resetting selected mesh_type }
contents.model.visibilityHandler.addSkipResetSetting(currentMeshType)
listview.model.forceUpdate()
updateFilter() function updateFilter()
} {
var new_filter = {}
new_filter["settable_per_mesh"] = true
// Don't filter on "settable_per_meshgroup" any more when `printSequencePropertyProvider.properties.value`
// is set to "one_at_a_time", because the current backend architecture isn't ready for that.
if (filterInput.text != "")
{
new_filter["i18n_label"] = "*" + filterInput.text
} }
function updateFilter() listview.model.filter = new_filter
}
TextField
{
id: filterInput
anchors
{ {
var new_filter = {} top: parent.top
new_filter["settable_per_mesh"] = true left: parent.left
// Don't filter on "settable_per_meshgroup" any more when `printSequencePropertyProvider.properties.value` right: toggleShowAll.left
// is set to "one_at_a_time", because the current backend architecture isn't ready for that. rightMargin: UM.Theme.getSize("default_margin").width
if (filterInput.text != "")
{
new_filter["i18n_label"] = "*" + filterInput.text
}
listview.model.filter = new_filter
} }
TextField { placeholderText: catalog.i18nc("@label:textbox", "Filter...")
id: filterInput
anchors { onTextChanged: settingPickDialog.updateFilter()
top: parent.top }
left: parent.left
right: toggleShowAll.left
rightMargin: UM.Theme.getSize("default_margin").width
}
placeholderText: catalog.i18nc("@label:textbox", "Filter...") CheckBox
{
id: toggleShowAll
onTextChanged: settingPickDialog.updateFilter() anchors
{
top: parent.top
right: parent.right
} }
CheckBox text: catalog.i18nc("@label:checkbox", "Show all")
checked: listview.model.showAll
onClicked: listview.model.showAll = checked
}
ScrollView
{
id: scrollView
anchors
{ {
id: toggleShowAll top: filterInput.bottom
left: parent.left
anchors { right: parent.right
top: parent.top bottom: parent.bottom
right: parent.right
}
text: catalog.i18nc("@label:checkbox", "Show all")
checked: listview.model.showAll
onClicked:
{
listview.model.showAll = checked
}
} }
ListView
ScrollView
{ {
id: scrollView id:listview
model: UM.SettingDefinitionsModel
anchors
{ {
top: filterInput.bottom id: definitionsModel
left: parent.left containerId: Cura.MachineManager.activeMachine != null ? Cura.MachineManager.activeMachine.definition.id: ""
right: parent.right visibilityHandler: UM.SettingPreferenceVisibilityHandler {}
bottom: parent.bottom expanded: [ "*" ]
} exclude:
ListView
{
id:listview
model: UM.SettingDefinitionsModel
{ {
id: definitionsModel var excluded_settings = [ "machine_settings", "command_line_settings", "support_mesh", "anti_overhang_mesh", "cutting_mesh", "infill_mesh" ]
containerId: Cura.MachineManager.activeMachine != null ? Cura.MachineManager.activeMachine.definition.id: "" excluded_settings = excluded_settings.concat(settingPickDialog.additional_excluded_settings)
visibilityHandler: UM.SettingPreferenceVisibilityHandler {} return excluded_settings
expanded: [ "*" ] }
exclude: }
delegate:Loader
{
id: loader
width: parent.width
height: model.type != undefined ? UM.Theme.getSize("section").height : 0
property var definition: model
property var settingDefinitionsModel: definitionsModel
asynchronous: true
source:
{
switch(model.type)
{ {
var excluded_settings = [ "machine_settings", "command_line_settings", "support_mesh", "anti_overhang_mesh", "cutting_mesh", "infill_mesh" ] case "category":
excluded_settings = excluded_settings.concat(settingPickDialog.additional_excluded_settings) return "PerObjectCategory.qml"
return excluded_settings default:
return "PerObjectItem.qml"
} }
} }
delegate:Loader
{
id: loader
width: parent.width
height: model.type != undefined ? UM.Theme.getSize("section").height : 0
property var definition: model
property var settingDefinitionsModel: definitionsModel
asynchronous: true
source:
{
switch(model.type)
{
case "category":
return "PerObjectCategory.qml"
default:
return "PerObjectItem.qml"
}
}
}
Component.onCompleted: settingPickDialog.updateFilter()
} }
Component.onCompleted: settingPickDialog.updateFilter()
} }
}
rightButtons: [ rightButtons: [
Button { Button
text: catalog.i18nc("@action:button", "Close") {
onClicked: { text: catalog.i18nc("@action:button", "Close")
settingPickDialog.visible = false onClicked: settingPickDialog.visible = false
} }
} ]
] }
}

View File

@ -0,0 +1,55 @@
# Copyright (c) 2019 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
from UM.Logger import LogOutput
from typing import Set
from sentry_sdk import add_breadcrumb
from typing import Optional
import os
home_dir = os.path.expanduser("~")
class SentryLogger(LogOutput):
# Sentry (https://sentry.io) is the service that Cura uses for logging crashes. This logger ensures that the
# regular log entries that we create are added as breadcrumbs so when a crash actually happens, they are already
# processed and ready for sending.
# Note that this only prepares them for sending. It only sends them when the user actually agrees to sending the
# information.
_levels = {
"w": "warning",
"i": "info",
"c": "fatal",
"e": "error",
"d": "debug"
}
def __init__(self) -> None:
super().__init__()
self._show_once = set() # type: Set[str]
## Log the message to the sentry hub as a breadcrumb
# \param log_type "e" (error), "i"(info), "d"(debug), "w"(warning) or "c"(critical) (can postfix with "_once")
# \param message String containing message to be logged
def log(self, log_type: str, message: str) -> None:
level = self._translateLogType(log_type)
message = self._pruneSensitiveData(message)
if level is None:
if message not in self._show_once:
level = self._translateLogType(log_type[0])
if level is not None:
self._show_once.add(message)
add_breadcrumb(level = level, message = message)
else:
add_breadcrumb(level = level, message = message)
@staticmethod
def _pruneSensitiveData(message):
if home_dir in message:
message = message.replace(home_dir, "<user_home>")
return message
@staticmethod
def _translateLogType(log_type: str) -> Optional[str]:
return SentryLogger._levels.get(log_type)

View File

@ -0,0 +1,16 @@
# Copyright (c) 2019 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
from typing import TYPE_CHECKING, Dict, Any
from . import SentryLogger
if TYPE_CHECKING:
from UM.Application import Application
def getMetaData() -> Dict[str, Any]:
return {}
def register(app: "Application") -> Dict[str, Any]:
return {"logger": SentryLogger.SentryLogger()}

View File

@ -0,0 +1,8 @@
{
"name": "Sentry Logger",
"author": "Ultimaker B.V.",
"version": "1.0.0",
"description": "Logs certain events so that they can be used by the crash reporter",
"api": "7.0",
"i18n-catalog": "cura"
}

View File

@ -65,10 +65,7 @@ class SolidView(View):
else: else:
self._support_angle = support_angle_stack.getProperty("support_angle", "value") self._support_angle = support_angle_stack.getProperty("support_angle", "value")
def beginRendering(self): def _checkSetup(self):
scene = self.getController().getScene()
renderer = self.getRenderer()
if not self._extruders_model: if not self._extruders_model:
self._extruders_model = Application.getInstance().getExtrudersModel() self._extruders_model = Application.getInstance().getExtrudersModel()
@ -95,6 +92,12 @@ class SolidView(View):
self._support_mesh_shader.setUniformValue("u_vertical_stripes", True) self._support_mesh_shader.setUniformValue("u_vertical_stripes", True)
self._support_mesh_shader.setUniformValue("u_width", 5.0) self._support_mesh_shader.setUniformValue("u_width", 5.0)
def beginRendering(self):
scene = self.getController().getScene()
renderer = self.getRenderer()
self._checkSetup()
global_container_stack = Application.getInstance().getGlobalContainerStack() global_container_stack = Application.getInstance().getGlobalContainerStack()
if global_container_stack: if global_container_stack:
if Application.getInstance().getPreferences().getValue("view/show_overhang"): if Application.getInstance().getPreferences().getValue("view/show_overhang"):

View File

@ -239,7 +239,7 @@ class VersionUpgrade41to42(VersionUpgrade):
# #
# This renames the renamed settings in the containers. # This renames the renamed settings in the containers.
def upgradeInstanceContainer(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]: def upgradeInstanceContainer(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]:
parser = configparser.ConfigParser(interpolation = None, comment_prefixes=()) parser = configparser.ConfigParser(interpolation = None, comment_prefixes = ())
parser.read_string(serialized) parser.read_string(serialized)
# Update version number. # Update version number.

View File

@ -104,7 +104,7 @@ class VersionUpgrade42to43(VersionUpgrade):
# #
# This renames the renamed settings in the containers. # This renames the renamed settings in the containers.
def upgradeInstanceContainer(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]: def upgradeInstanceContainer(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]:
parser = configparser.ConfigParser(interpolation = None, comment_prefixes=()) parser = configparser.ConfigParser(interpolation = None, comment_prefixes = ())
parser.read_string(serialized) parser.read_string(serialized)
# Update version number. # Update version number.

View File

@ -52,7 +52,7 @@ class VersionUpgrade43to44(VersionUpgrade):
# #
# This renames the renamed settings in the containers. # This renames the renamed settings in the containers.
def upgradeInstanceContainer(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]: def upgradeInstanceContainer(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]:
parser = configparser.ConfigParser(interpolation = None, comment_prefixes=()) parser = configparser.ConfigParser(interpolation = None, comment_prefixes = ())
parser.read_string(serialized) parser.read_string(serialized)
# Update version number. # Update version number.

View File

@ -3,10 +3,17 @@ from typing import Tuple, List
import io import io
from UM.VersionUpgrade import VersionUpgrade from UM.VersionUpgrade import VersionUpgrade
# Merged preferences: machine_head_polygon and machine_head_with_fans_polygon -> machine_head_with_fans_polygon # Settings that were merged into one. Each one is a pair of settings. If both
# When both are present, machine_head_polygon will be removed # are overwritten, the key wins. If only the key or the value is overwritten,
# When only one of the two is present, it's value will be used # that value is used in the key.
_merged_settings = {
"machine_head_with_fans_polygon": "machine_head_polygon",
"support_wall_count": "support_tree_wall_count"
}
_removed_settings = {
"support_tree_wall_thickness"
}
class VersionUpgrade44to45(VersionUpgrade): class VersionUpgrade44to45(VersionUpgrade):
def getCfgVersion(self, serialised: str) -> int: def getCfgVersion(self, serialised: str) -> int:
@ -35,20 +42,26 @@ class VersionUpgrade44to45(VersionUpgrade):
# #
# This renames the renamed settings in the containers. # This renames the renamed settings in the containers.
def upgradeInstanceContainer(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]: def upgradeInstanceContainer(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]:
parser = configparser.ConfigParser(interpolation = None, comment_prefixes=()) parser = configparser.ConfigParser(interpolation = None, comment_prefixes = ())
parser.read_string(serialized) parser.read_string(serialized)
# Update version number. # Update version number.
parser["metadata"]["setting_version"] = "11" parser["metadata"]["setting_version"] = "11"
if "values" in parser: if "values" in parser:
# merge machine_head_with_fans_polygon (preferred) and machine_head_polygon # Merged settings: When two settings are merged, one is preferred.
if "machine_head_with_fans_polygon" in parser["values"]: # If the preferred one is available, that value is taken regardless
if "machine_head_polygon" in parser["values"]: # of the other one. If only the non-preferred one is available, that
del parser["values"]["machine_head_polygon"] # value is moved to the preferred setting value.
elif "machine_head_polygon" in parser["values"]: for preferred, removed in _merged_settings.items():
parser["values"]["machine_head_with_fans_polygon"] = parser["values"]["machine_head_polygon"] if removed in parser["values"]:
del parser["values"]["machine_head_polygon"] if preferred not in parser["values"]:
parser["values"][preferred] = parser["values"][removed]
del parser["values"][removed]
for removed in _removed_settings:
if removed in parser["values"]:
del parser["values"][removed]
result = io.StringIO() result = io.StringIO()
parser.write(result) parser.write(result)

View File

@ -1106,6 +1106,12 @@ class XmlMaterialProfile(InstanceContainer):
"break preparation speed": "material_break_preparation_speed", "break preparation speed": "material_break_preparation_speed",
"break preparation temperature": "material_break_preparation_temperature", "break preparation temperature": "material_break_preparation_temperature",
"break position": "material_break_retracted_position", "break position": "material_break_retracted_position",
"flush purge speed": "material_flush_purge_speed",
"flush purge length": "material_flush_purge_length",
"end of filament purge speed": "material_end_of_filament_purge_speed",
"end of filament purge length": "material_end_of_filament_purge_length",
"maximum park duration": "material_maximum_park_duration",
"no load move factor": "material_no_load_move_factor",
"break speed": "material_break_speed", "break speed": "material_break_speed",
"break temperature": "material_break_temperature" "break temperature": "material_break_temperature"
} # type: Dict[str, str] } # type: Dict[str, str]

View File

@ -407,6 +407,23 @@
} }
} }
}, },
"SentryLogger": {
"package_info": {
"package_id": "SentryLogger",
"package_type": "plugin",
"display_name": "Sentry Logger",
"description": "Logs certain events so that they can be used by the crash reporter",
"package_version": "1.0.0",
"sdk_version": "7.0.0",
"website": "https://ultimaker.com",
"author": {
"author_id": "UltimakerPackages",
"display_name": "Ultimaker B.V.",
"email": "plugins@ultimaker.com",
"website": "https://ultimaker.com"
}
}
},
"SimulationView": { "SimulationView": {
"package_info": { "package_info": {
"package_id": "SimulationView", "package_id": "SimulationView",

View File

@ -58,9 +58,6 @@
"machine_nozzle_head_distance": { "machine_nozzle_head_distance": {
"default_value": 5 "default_value": 5
}, },
"machine_nozzle_expansion_angle": {
"default_value": 45
},
"machine_heat_zone_length": { "machine_heat_zone_length": {
"default_value": 20 "default_value": 20
}, },

View File

@ -0,0 +1,152 @@
{
"version": 2,
"name": "anet3d",
"inherits": "fdmprinter",
"metadata": {
"author": "Tiger.He",
"manufacturer": "Anet",
"category": "anet3d",
"visible": false,
"file_formats": "text/x-gcode",
"first_start_actions": ["MachineSettingsAction"],
"preferred_variant_name": "0.4mm Nozzle",
"preferred_quality_type": "standard",
"preferred_material": "generic_pla",
"machine_extruder_trains":
{
"0": "anet3d_extruder_0"
}
},
"overrides": {
"machine_max_feedrate_x": { "value": 500 },
"machine_max_feedrate_y": { "value": 500 },
"machine_max_feedrate_z": { "value": 10 },
"machine_max_feedrate_e": { "value": 50 },
"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 },
"machine_max_jerk_xy": { "value": 10 },
"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": 1000 },
"acceleration_travel": { "value": 1000 },
"acceleration_travel_layer_0": { "value": "acceleration_travel" },
"acceleration_roofing": { "enabled": "acceleration_enabled and roofing_layer_count > 0 and top_layers > 0" },
"jerk_print": { "value": 30.0 },
"jerk_travel": { "value": "jerk_print" },
"jerk_travel_layer_0": { "value": "jerk_travel" },
"acceleration_enabled": { "value": true },
"jerk_enabled": { "value": false },
"speed_print": { "value": 50.0 } ,
"speed_infill": { "value": "speed_print * 2" },
"speed_wall": { "value": "speed_print / 2" },
"speed_wall_0": { "value": "speed_wall" },
"speed_wall_x": { "value": "speed_wall" },
"speed_topbottom": { "value": "speed_print / 2" },
"speed_roofing": { "value": "speed_topbottom" },
"speed_travel": { "value": "150.0 if speed_print < 60 else 250.0 if speed_print > 100 else speed_print * 2.5" },
"speed_layer_0": { "value": "speed_print / 2" },
"speed_print_layer_0": { "value": "speed_layer_0" },
"speed_travel_layer_0": { "value": "100 if speed_layer_0 < 20 else 150 if speed_layer_0 > 30 else speed_layer_0 * 5" },
"speed_prime_tower": { "value": "speed_print" },
"speed_support": { "value": "speed_print" },
"speed_support_interface": { "value": "speed_print" },
"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": true },
"infill_overlap": { "value": 30.0 },
"skin_overlap": { "value": 10.0 },
"infill_wipe_dist": { "value": 1.0 },
"wall_0_wipe_dist": { "value": 0.2 },
"fill_perimeter_gaps": { "value": "'everywhere'" },
"fill_outline_gaps": { "value": false },
"filter_out_tiny_gaps": { "value": true },
"retraction_speed": {
"maximum_value_warning": "machine_max_feedrate_e if retraction_enable else float('inf')",
"maximum_value": 200
},
"retraction_retract_speed": {
"maximum_value_warning": "machine_max_feedrate_e if retraction_enable else float('inf')",
"maximum_value": 200
},
"retraction_prime_speed": {
"maximum_value_warning": "machine_max_feedrate_e if retraction_enable else float('inf')",
"maximum_value": 200
},
"retraction_hop_enabled": { "value": "False" },
"retraction_hop": { "value": 1 },
"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 },
"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" },
"top_bottom_thickness": {"value": "layer_height_0 + layer_height * 3" },
"wall_thickness": {"value": "line_width * 2" },
"material_print_temperature": {"minimum_value": "0"},
"material_bed_temperature": {"minimum_value": "0"},
"material_standby_temperature": {"minimum_value": "0"},
"extruder_prime_pos_y":{"minimum_value": "0","maximum_value": "machine_depth"},
"extruder_prime_pos_x":{"minimum_value": "0","maximum_value": "machine_width"},
"relative_extrusion":{"value": false,"enabled": false},
"machine_use_extruder_offset_to_offset_coords": {"default_value": true},
"machine_gcode_flavor": {"default_value": "RepRap (Marlin/Sprinter)"},
"machine_center_is_zero": {
"default_value": false
},
"gantry_height": {
"value": "0"
}
}
}

View File

@ -0,0 +1,31 @@
{
"version": 2,
"name": "Anet A2 PLUS",
"inherits": "anet3d",
"metadata": {
"visible": true,
"machine_extruder_trains":
{
"0": "anet3d_extruder_0"
}
},
"overrides": {
"machine_name": { "default_value": "Anet A2 PLUS" },
"machine_width": {
"default_value": 220
},
"machine_depth": {
"default_value": 270
},
"machine_height": {
"default_value": 220
},
"machine_start_gcode": {
"default_value": "G28 ;Home\nG1 Z15.0 F2000 ;Move the platform"
},
"machine_end_gcode": {
"default_value": "M104 S0\nM140 S0\nG92 E80\nG1 E-80 F2000\nG28 X0 Y0\nM84"
}
}
}

View File

@ -0,0 +1,31 @@
{
"version": 2,
"name": "Anet A2",
"inherits": "anet3d",
"metadata": {
"visible": true,
"machine_extruder_trains":
{
"0": "anet3d_extruder_0"
}
},
"overrides": {
"machine_name": { "default_value": "Anet A2" },
"machine_width": {
"default_value": 220
},
"machine_depth": {
"default_value": 220
},
"machine_height": {
"default_value": 220
},
"machine_start_gcode": {
"default_value": "G28 ;Home\nG1 Z15.0 F2000 ;Move the platform"
},
"machine_end_gcode": {
"default_value": "M104 S0\nM140 S0\nG92 E80\nG1 E-80 F2000\nG28 X0 Y0\nM84"
}
}
}

View File

@ -0,0 +1,31 @@
{
"version": 2,
"name": "Anet A6",
"inherits": "anet3d",
"metadata": {
"visible": true,
"machine_extruder_trains":
{
"0": "anet3d_extruder_0"
}
},
"overrides": {
"machine_name": { "default_value": "Anet A6" },
"machine_width": {
"default_value": 220
},
"machine_depth": {
"default_value": 220
},
"machine_height": {
"default_value": 250
},
"machine_start_gcode": {
"default_value": "G28 ;Home\nG1 Z15.0 F2000 ;Move the platform"
},
"machine_end_gcode": {
"default_value": "M104 S0\nM140 S0\nG92 E80\nG1 E-80 F2000\nG28 X0 Y0\nM84"
}
}
}

View File

@ -0,0 +1,31 @@
{
"version": 2,
"name": "Anet A8 PLUS",
"inherits": "anet3d",
"metadata": {
"visible": true,
"machine_extruder_trains":
{
"0": "anet3d_extruder_0"
}
},
"overrides": {
"machine_name": { "default_value": "Anet A8 PLUS" },
"machine_width": {
"default_value": 300
},
"machine_depth": {
"default_value": 300
},
"machine_height": {
"default_value": 350
},
"machine_start_gcode": {
"default_value": "G28 ;Home\nG1 Z15.0 F2000 ;Move the platform"
},
"machine_end_gcode": {
"default_value": "M104 S0\nM140 S0\nG92 E80\nG1 E-80 F2000\nG28 X0 Y0\nM84"
}
}
}

View File

@ -0,0 +1,31 @@
{
"version": 2,
"name": "Anet A8",
"inherits": "anet3d",
"metadata": {
"visible": true,
"machine_extruder_trains":
{
"0": "anet3d_extruder_0"
}
},
"overrides": {
"machine_name": { "default_value": "Anet A8" },
"machine_width": {
"default_value": 220
},
"machine_depth": {
"default_value": 220
},
"machine_height": {
"default_value": 240
},
"machine_start_gcode": {
"default_value": "G28 ;Home\nG1 Z15.0 F2000 ;Move the platform"
},
"machine_end_gcode": {
"default_value": "M104 S0\nM140 S0\nG92 E80\nG1 E-80 F2000\nG28 X0 Y0\nM84"
}
}
}

View File

@ -0,0 +1,31 @@
{
"version": 2,
"name": "Anet E10",
"inherits": "anet3d",
"metadata": {
"visible": true,
"machine_extruder_trains":
{
"0": "anet3d_extruder_0"
}
},
"overrides": {
"machine_name": { "default_value": "Anet E10" },
"machine_width": {
"default_value": 220
},
"machine_depth": {
"default_value": 270
},
"machine_height": {
"default_value": 300
},
"machine_start_gcode": {
"default_value": "G28 ;Home\nG1 Z15.0 F2000 ;Move the platform"
},
"machine_end_gcode": {
"default_value": "M104 S0\nM140 S0\nG92 E80\nG1 E-80 F2000\nG28 X0 Y0\nM84"
}
}
}

View File

@ -0,0 +1,31 @@
{
"version": 2,
"name": "Anet E12",
"inherits": "anet3d",
"metadata": {
"visible": true,
"machine_extruder_trains":
{
"0": "anet3d_extruder_0"
}
},
"overrides": {
"machine_name": { "default_value": "Anet E12" },
"machine_width": {
"default_value": 300
},
"machine_depth": {
"default_value": 300
},
"machine_height": {
"default_value": 400
},
"machine_start_gcode": {
"default_value": "G28 ;Home\nG1 Z15.0 F2000 ;Move the platform"
},
"machine_end_gcode": {
"default_value": "M104 S0\nM140 S0\nG92 E80\nG1 E-80 F2000\nG28 X0 Y0\nM84"
}
}
}

View File

@ -0,0 +1,31 @@
{
"version": 2,
"name": "Anet E16",
"inherits": "anet3d",
"metadata": {
"visible": true,
"machine_extruder_trains":
{
"0": "anet3d_extruder_0"
}
},
"overrides": {
"machine_name": { "default_value": "Anet E16" },
"machine_width": {
"default_value": 300
},
"machine_depth": {
"default_value": 300
},
"machine_height": {
"default_value": 400
},
"machine_start_gcode": {
"default_value": "G28 ;Home\nG1 Z15.0 F2000 ;Move the platform"
},
"machine_end_gcode": {
"default_value": "M104 S0\nM140 S0\nG92 E80\nG1 E-80 F2000\nG28 X0 Y0\nM84"
}
}
}

View File

@ -0,0 +1,31 @@
{
"version": 2,
"name": "Anet ET4 PRO",
"inherits": "anet3d",
"metadata": {
"visible": true,
"machine_extruder_trains":
{
"0": "anet3d_extruder_0"
}
},
"overrides": {
"machine_name": { "default_value": "Anet ET4 PRO" },
"machine_width": {
"default_value": 220
},
"machine_depth": {
"default_value": 220
},
"machine_height": {
"default_value": 250
},
"machine_start_gcode": {
"default_value": "G28 ;Home\nG1 Z15.0 F2000 ;Move the platform"
},
"machine_end_gcode": {
"default_value": "M104 S0\nM140 S0\nG92 E80\nG1 E-80 F2000\nG28 X0 Y0\nM84"
}
}
}

View File

@ -0,0 +1,31 @@
{
"version": 2,
"name": "Anet ET4 X",
"inherits": "anet3d",
"metadata": {
"visible": true,
"machine_extruder_trains":
{
"0": "anet3d_extruder_0"
}
},
"overrides": {
"machine_name": { "default_value": "Anet ET4 X" },
"machine_width": {
"default_value": 220
},
"machine_depth": {
"default_value": 220
},
"machine_height": {
"default_value": 250
},
"machine_start_gcode": {
"default_value": "G28 ;Home\nG1 Z15.0 F2000 ;Move the platform"
},
"machine_end_gcode": {
"default_value": "M104 S0\nM140 S0\nG92 E80\nG1 E-80 F2000\nG28 X0 Y0\nM84"
}
}
}

View File

@ -0,0 +1,31 @@
{
"version": 2,
"name": "Anet ET4",
"inherits": "anet3d",
"metadata": {
"visible": true,
"machine_extruder_trains":
{
"0": "anet3d_extruder_0"
}
},
"overrides": {
"machine_name": { "default_value": "Anet ET4" },
"machine_width": {
"default_value": 220
},
"machine_depth": {
"default_value": 220
},
"machine_height": {
"default_value": 250
},
"machine_start_gcode": {
"default_value": "G28 ;Home\nG1 Z15.0 F2000 ;Move the platform"
},
"machine_end_gcode": {
"default_value": "M104 S0\nM140 S0\nG92 E80\nG1 E-80 F2000\nG28 X0 Y0\nM84"
}
}
}

View File

@ -0,0 +1,31 @@
{
"version": 2,
"name": "Anet ET5 X",
"inherits": "anet3d",
"metadata": {
"visible": true,
"machine_extruder_trains":
{
"0": "anet3d_extruder_0"
}
},
"overrides": {
"machine_name": { "default_value": "Anet ET5 X" },
"machine_width": {
"default_value": 300
},
"machine_depth": {
"default_value": 300
},
"machine_height": {
"default_value": 400
},
"machine_start_gcode": {
"default_value": "G28 ;Home\nG1 Z15.0 F2000 ;Move the platform"
},
"machine_end_gcode": {
"default_value": "M104 S0\nM140 S0\nG92 E80\nG1 E-80 F2000\nG28 X0 Y0\nM84"
}
}
}

View File

@ -0,0 +1,31 @@
{
"version": 2,
"name": "Anet ET5",
"inherits": "anet3d",
"metadata": {
"visible": true,
"machine_extruder_trains":
{
"0": "anet3d_extruder_0"
}
},
"overrides": {
"machine_name": { "default_value": "Anet ET5" },
"machine_width": {
"default_value": 300
},
"machine_depth": {
"default_value": 300
},
"machine_height": {
"default_value": 400
},
"machine_start_gcode": {
"default_value": "G28 ;Home\nG1 Z15.0 F2000 ;Move the platform"
},
"machine_end_gcode": {
"default_value": "M104 S0\nM140 S0\nG92 E80\nG1 E-80 F2000\nG28 X0 Y0\nM84"
}
}
}

View File

@ -1,45 +0,0 @@
{
"version": 2,
"name": "Anet A6",
"inherits": "fdmprinter",
"metadata": {
"visible": true,
"author": "Mark",
"manufacturer": "Anet",
"file_formats": "text/x-gcode",
"platform": "aneta6_platform.stl",
"platform_offset": [0, -3.4, 0],
"machine_extruder_trains":
{
"0": "anet_a6_extruder_0"
}
},
"overrides": {
"machine_name": { "default_value": "Anet A6" },
"machine_heated_bed": {
"default_value": true
},
"machine_width": {
"default_value": 220
},
"machine_height": {
"default_value": 250
},
"machine_depth": {
"default_value": 220
},
"machine_center_is_zero": {
"default_value": false
},
"gantry_height": {
"value": "55"
},
"machine_start_gcode": {
"default_value": "G21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nG28 X0 Y0 ;move X/Y to min endstops\nG28 Z0 ;move Z to min endstops\nM84 ;steppers off\nM0 S12 ;wait 12 seconds\nM17 ;turn steppers on\nG1 Z10.0 F300 ;move the platform down 10mm\nG92 E0 ;zero the extruded length\nG1 F200 E8 ;extrude 8mm of feed stock\nG92 E0 ;zero the extruded length again\nM0 S5 ;wait 5 seconds\nG1 F9000\nM117 Printing..."
},
"machine_end_gcode": {
"default_value": "M104 S0 ;extruder heater off\nM140 S0 ;heated bed heater off (if you have it)\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+4 E-5 X-20 Y-20 F9000 ;move Z up a bit and retract filament even more\nG28 X0 Y0 ;move X/Y to min endstops, so the head is out of the way\nG1 Y210 F9000 ;move out to get part off\nM84 ;steppers off\nG90 ;absolute positioning"
}
}
}

View File

@ -2084,7 +2084,6 @@
"maximum_value": "machine_height", "maximum_value": "machine_height",
"type": "float", "type": "float",
"value": "0", "value": "0",
"comment": "This was put at 0 to keep the default behaviour the same, but in the original PR the 'value' was: resolveOrValue('infill_sparse_thickness') * (4 if infill_sparse_density < 12.5 else (3 if infill_sparse_density < 25 else (2 if infill_sparse_density < 50 else 1)))",
"limit_to_extruder": "infill_extruder_nr", "limit_to_extruder": "infill_extruder_nr",
"enabled": "infill_sparse_density > 0", "enabled": "infill_sparse_density > 0",
"settable_per_mesh": true, "settable_per_mesh": true,
@ -2420,6 +2419,54 @@
"settable_per_mesh": false, "settable_per_mesh": false,
"settable_per_extruder": true "settable_per_extruder": true
}, },
"material_flush_purge_speed":
{
"label": "Flush Purge Speed",
"description": "Material Station internal value",
"type": "float",
"default_value": 0.5,
"enabled": false
},
"material_flush_purge_length":
{
"label": "Flush Purge Length",
"description": "Material Station internal value",
"type": "float",
"default_value": 60,
"enabled": false
},
"material_end_of_filament_purge_speed":
{
"label": "End Of Filament Purge Speed",
"description": "Material Station internal value",
"type": "float",
"default_value": 0.5,
"enabled": false
},
"material_end_of_filament_purge_length":
{
"label": "End Of Filament Purge Length",
"description": "Material Station internal value",
"type": "float",
"default_value": 20,
"enabled": false
},
"material_maximum_park_duration":
{
"label": "Maximum Park Duration",
"description": "Material Station internal value",
"type": "float",
"default_value": 300,
"enabled": false
},
"material_no_load_move_factor":
{
"label": "No Load Move Factor",
"description": "Material Station internal value",
"type": "float",
"default_value": 0.940860215,
"enabled": false
},
"material_flow": "material_flow":
{ {
"label": "Flow", "label": "Flow",
@ -4233,8 +4280,8 @@
"minimum_value_warning": "1 if support_pattern == 'concentric' else 0", "minimum_value_warning": "1 if support_pattern == 'concentric' else 0",
"maximum_value_warning": "3", "maximum_value_warning": "3",
"type": "int", "type": "int",
"value": "1 if (support_pattern == 'grid' or support_pattern == 'triangles' or support_pattern == 'concentric') else 0", "value": "1 if support_tree_enable else (1 if (support_pattern == 'grid' or support_pattern == 'triangles' or support_pattern == 'concentric') else 0)",
"enabled": "support_enable", "enabled": "support_enable or support_tree_enable",
"limit_to_extruder": "support_infill_extruder_nr", "limit_to_extruder": "support_infill_extruder_nr",
"settable_per_mesh": false, "settable_per_mesh": false,
"settable_per_extruder": true "settable_per_extruder": true
@ -6186,38 +6233,6 @@
"settable_per_mesh": false, "settable_per_mesh": false,
"settable_per_extruder": true "settable_per_extruder": true
}, },
"support_tree_wall_thickness":
{
"label": "Tree Support Wall Thickness",
"description": "The thickness of the walls of the branches of tree support. Thicker walls take longer to print but don't fall over as easily.",
"unit": "mm",
"type": "float",
"minimum_value": "0",
"minimum_value_warning": "wall_line_width",
"default_value": 0.8,
"value": "support_line_width",
"limit_to_extruder": "support_infill_extruder_nr",
"enabled": "support_tree_enable",
"settable_per_mesh": false,
"settable_per_extruder": true,
"children":
{
"support_tree_wall_count":
{
"label": "Tree Support Wall Line Count",
"description": "The number of walls of the branches of tree support. Thicker walls take longer to print but don't fall over as easily.",
"type": "int",
"minimum_value": "0",
"minimum_value_warning": "1",
"default_value": 1,
"value": "round(support_tree_wall_thickness / support_line_width)",
"limit_to_extruder": "support_infill_extruder_nr",
"enabled": "support_tree_enable",
"settable_per_mesh": false,
"settable_per_extruder": true
}
}
},
"slicing_tolerance": "slicing_tolerance":
{ {
"label": "Slicing Tolerance", "label": "Slicing Tolerance",

View File

@ -0,0 +1,64 @@
{
"name": "Lotmaxx SC-10",
"version": 2,
"inherits": "fdmprinter",
"metadata": {
"visible": true,
"author": "lotmaxx.com",
"manufacturer": "Lotmaxx",
"file_formats": "text/x-gcode",
"platform": "lotmaxx_sc_10_20_platform.stl",
"has_materials": true,
"machine_extruder_trains":
{
"0": "lotmaxx_sc10_extruder_0"
}
},
"overrides": {
"machine_name": { "default_value": "Lotmaxx SC-10" },
"machine_width": { "default_value": 235 },
"machine_depth": { "default_value": 235 },
"machine_height": { "default_value": 320 },
"machine_head_with_fans_polygon": { "default_value": [[-32,11],[-32,-32],[28,-32],[28,11]] },
"gantry_height": { "value": 40 },
"machine_start_gcode": { "default_value": "; SC-10 Custom Start G-code\nG28 ; Home all axes\nG92 E0 ; Reset Extruder\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X0.1 Y20 Z0.3 F5000.0 ; Move to start position\nG1 X0.1 Y200.0 Z0.3 F1500.0 E15 ; Draw the first line\nG1 X0.4 Y200.0 Z0.3 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 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\n; End of custom start GCode" },
"machine_end_gcode": { "default_value": "; SC-10 Custom End G-code\nG4 ; Wait\nM220 S100 ; Reset Speed factor override percentage to default (100%)\nM221 S100 ; Reset Extrude factor override percentage to default (100%)\nG91 ; Set coordinates to relative\nG1 F1800 E-3 ; Retract filament 3 mm to prevent oozing\nG1 F3000 Z20 ; Move Z Axis up 20 mm to allow filament ooze freely\nG90 ; Set coordinates to absolute\nG1 X0 Y{machine_depth} F1000 ; Move Heat Bed to the front for easy print removal\nM84 ; Disable stepper motors\n; End of custom end GCode" },
"machine_max_jerk_xy":{ "value":10 },
"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 },
"jerk_print":{ "value":8 },
"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 * 2" },
"speed_wall":{ "value":"speed_print / 2" },
"speed_wall_0":{ "value":"speed_wall" },
"speed_wall_x":{ "value":"speed_wall" },
"speed_topbottom":{ "value":"speed_print / 2" },
"speed_roofing":{ "value":"speed_topbottom" },
"speed_travel":{ "value":"150.0 if speed_print < 60 else 250.0 if speed_print > 100 else speed_print * 2.5" },
"speed_layer_0":{ "value":20.0 },
"speed_print_layer_0":{ "value":"speed_layer_0" },
"speed_travel_layer_0":{ "value":"100 if speed_layer_0 < 20 else 150 if speed_layer_0 > 30 else speed_layer_0 * 5" },
"speed_prime_tower":{ "value":"speed_topbottom" },
"speed_support":{ "value":"speed_wall_0" },
"speed_support_interface":{ "value":"speed_topbottom" },
"skirt_brim_speed":{ "value":"speed_layer_0" },
"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 },
"meshfix_maximum_resolution":{ "value":"0.05" },
"meshfix_maximum_travel_resolution":{ "value":"meshfix_maximum_resolution" },
"adhesion_type": { "value": "'none' if support_enable else 'skirt'" },
"skirt_gap":{ "value":5.0 },
"skirt_line_count":{ "value":4 }
}
}

View File

@ -0,0 +1,64 @@
{
"name": "Lotmaxx SC-20",
"version": 2,
"inherits": "fdmprinter",
"metadata": {
"visible": true,
"author": "lotmaxx.com",
"manufacturer": "Lotmaxx",
"file_formats": "text/x-gcode",
"platform": "lotmaxx_sc_10_20_platform.stl",
"has_materials": true,
"machine_extruder_trains":
{
"0": "lotmaxx_sc20_extruder_0"
}
},
"overrides": {
"machine_name": { "default_value": "Lotmaxx SC-20" },
"machine_width": { "default_value": 235 },
"machine_depth": { "default_value": 235 },
"machine_height": { "default_value": 320 },
"machine_head_with_fans_polygon": { "default_value": [[-32,11],[-32,-32],[28,-32],[28,11]] },
"gantry_height": { "value": 40 },
"machine_start_gcode": { "default_value": "; SC-20 Custom Start G-code\nG28 ; Home all axes\nG92 E0 ; Reset Extruder\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X0.1 Y20 Z0.3 F5000.0 ; Move to start position\nG1 X0.1 Y200.0 Z0.3 F1500.0 E15 ; Draw the first line\nG1 X0.4 Y200.0 Z0.3 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 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\n; End of custom start GCode" },
"machine_end_gcode": { "default_value": "; SC-20 Custom End G-code\nG4 ; Wait\nM220 S100 ; Reset Speed factor override percentage to default (100%)\nM221 S100 ; Reset Extrude factor override percentage to default (100%)\nG91 ; Set coordinates to relative\nG1 F1800 E-3 ; Retract filament 3 mm to prevent oozing\nG1 F3000 Z20 ; Move Z Axis up 20 mm to allow filament ooze freely\nG90 ; Set coordinates to absolute\nG1 X0 Y{machine_depth} F1000 ; Move Heat Bed to the front for easy print removal\nM84 ; Disable stepper motors\n; End of custom end GCode" },
"machine_max_jerk_xy":{ "value":10 },
"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 },
"jerk_print":{ "value":8 },
"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 * 2" },
"speed_wall":{ "value":"speed_print / 2" },
"speed_wall_0":{ "value":"speed_wall" },
"speed_wall_x":{ "value":"speed_wall" },
"speed_topbottom":{ "value":"speed_print / 2" },
"speed_roofing":{ "value":"speed_topbottom" },
"speed_travel":{ "value":"150.0 if speed_print < 60 else 250.0 if speed_print > 100 else speed_print * 2.5" },
"speed_layer_0":{ "value":20.0 },
"speed_print_layer_0":{ "value":"speed_layer_0" },
"speed_travel_layer_0":{ "value":"100 if speed_layer_0 < 20 else 150 if speed_layer_0 > 30 else speed_layer_0 * 5" },
"speed_prime_tower":{ "value":"speed_topbottom" },
"speed_support":{ "value":"speed_wall_0" },
"speed_support_interface":{ "value":"speed_topbottom" },
"skirt_brim_speed":{ "value":"speed_layer_0" },
"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 },
"meshfix_maximum_resolution":{ "value":"0.05" },
"meshfix_maximum_travel_resolution":{ "value":"meshfix_maximum_resolution" },
"adhesion_type": { "value": "'none' if support_enable else 'skirt'" },
"skirt_gap":{ "value":5.0 },
"skirt_line_count":{ "value":4 }
}
}

View File

@ -47,9 +47,6 @@
"machine_nozzle_head_distance": { "machine_nozzle_head_distance": {
"default_value": 3 "default_value": 3
}, },
"machine_nozzle_expansion_angle": {
"default_value": 45
},
"layer_height_0": { "layer_height_0": {
"default_value": 0.2 "default_value": 0.2
}, },

View File

@ -58,9 +58,6 @@
"machine_nozzle_head_distance": { "machine_nozzle_head_distance": {
"default_value": 5 "default_value": 5
}, },
"machine_nozzle_expansion_angle": {
"default_value": 45
},
"machine_heat_zone_length": { "machine_heat_zone_length": {
"default_value": 16 "default_value": 16
}, },

File diff suppressed because it is too large Load Diff

View File

@ -76,9 +76,6 @@
"machine_nozzle_head_distance": { "machine_nozzle_head_distance": {
"default_value": 5 "default_value": 5
}, },
"machine_nozzle_expansion_angle": {
"default_value": 45
},
"machine_heat_zone_length": { "machine_heat_zone_length": {
"default_value": 20 "default_value": 20
}, },

View File

@ -47,7 +47,6 @@
"machine_nozzle_tip_outer_diameter": { "default_value": 1 }, "machine_nozzle_tip_outer_diameter": { "default_value": 1 },
"machine_nozzle_head_distance": { "default_value": 3 }, "machine_nozzle_head_distance": { "default_value": 3 },
"machine_nozzle_expansion_angle": { "default_value": 45 },
"machine_max_acceleration_x": { "default_value": 6000 }, "machine_max_acceleration_x": { "default_value": 6000 },
"machine_max_acceleration_y": { "default_value": 6000 }, "machine_max_acceleration_y": { "default_value": 6000 },

View File

@ -74,9 +74,6 @@
"machine_nozzle_head_distance": { "machine_nozzle_head_distance": {
"default_value": 3 "default_value": 3
}, },
"machine_nozzle_expansion_angle": {
"default_value": 45
},
"machine_max_feedrate_x": { "machine_max_feedrate_x": {
"default_value": 300 "default_value": 300
}, },

View File

@ -52,9 +52,6 @@
"machine_nozzle_head_distance": { "machine_nozzle_head_distance": {
"default_value": 5 "default_value": 5
}, },
"machine_nozzle_expansion_angle": {
"default_value": 45
},
"machine_heat_zone_length": { "machine_heat_zone_length": {
"default_value": 20 "default_value": 20
}, },

View File

@ -0,0 +1,18 @@
{
"name": "VORON2 250",
"version": 2,
"inherits": "voron2_base",
"metadata":
{
"visible": true,
"platform": "voron2_250_bed.stl",
"quality_definition": "voron2_base"
},
"overrides":
{
"machine_name": { "default_value": "VORON2 250" },
"machine_width": { "default_value": 250 },
"machine_depth": { "default_value": 250 },
"machine_height": { "default_value": 250 }
}
}

View File

@ -0,0 +1,18 @@
{
"name": "VORON2 300",
"version": 2,
"inherits": "voron2_base",
"metadata":
{
"visible": true,
"platform": "voron2_300_bed.stl",
"quality_definition": "voron2_base"
},
"overrides":
{
"machine_name": { "default_value": "VORON2 300" },
"machine_width": { "default_value": 300 },
"machine_depth": { "default_value": 300 },
"machine_height": { "default_value": 300 }
}
}

View File

@ -0,0 +1,18 @@
{
"name": "VORON2 350",
"version": 2,
"inherits": "voron2_base",
"metadata":
{
"visible": true,
"platform": "voron2_350_bed.stl",
"quality_definition": "voron2_base"
},
"overrides":
{
"machine_name": { "default_value": "VORON2 350" },
"machine_width": { "default_value": 350 },
"machine_depth": { "default_value": 350 },
"machine_height": { "default_value": 350 }
}
}

View File

@ -0,0 +1,155 @@
{
"name": "VORON2 Base",
"version": 2,
"inherits": "fdmprinter",
"metadata":
{
"visible": false,
"author": "Fulg, Maglin, pizzle_Dizzle",
"manufacturer": "VORONDesign",
"file_formats": "text/x-gcode",
"first_start_actions": ["MachineSettingsAction"],
"preferred_quality_type": "fast",
"has_machine_quality": true,
"has_materials": true,
"has_variants": true,
"variants_name": "Toolhead",
"preferred_variant_name": "V6 0.40mm",
"machine_extruder_trains": { "0": "voron2_extruder_0" },
"preferred_material": "generic_abs",
"exclude_materials": [
"ultimaker_abs_black",
"ultimaker_abs_blue",
"ultimaker_abs_green",
"ultimaker_abs_grey",
"ultimaker_abs_orange",
"ultimaker_abs_pearl-gold",
"ultimaker_abs_red",
"ultimaker_abs_silver-metallic",
"ultimaker_abs_white",
"ultimaker_abs_yellow",
"ultimaker_bam",
"ultimaker_cpe_black",
"ultimaker_cpe_blue",
"ultimaker_cpe_dark-grey",
"ultimaker_cpe_green",
"ultimaker_cpe_light-grey",
"ultimaker_cpe_plus_black",
"ultimaker_cpe_plus_transparent",
"ultimaker_cpe_plus_white",
"ultimaker_cpe_red",
"ultimaker_cpe_transparent",
"ultimaker_cpe_white",
"ultimaker_cpe_yellow",
"ultimaker_nylon_black",
"ultimaker_nylon_transparent",
"ultimaker_pc_black",
"ultimaker_pc_transparent",
"ultimaker_pc_white",
"ultimaker_pla_black",
"ultimaker_pla_blue",
"ultimaker_pla_green",
"ultimaker_pla_magenta",
"ultimaker_pla_orange",
"ultimaker_pla_pearl-white",
"ultimaker_pla_red",
"ultimaker_pla_silver-metallic",
"ultimaker_pla_transparent",
"ultimaker_pla_white",
"ultimaker_pla_yellow",
"ultimaker_pp_transparent",
"ultimaker_pva",
"ultimaker_tough_pla_black",
"ultimaker_tough_pla_green",
"ultimaker_tough_pla_red",
"ultimaker_tough_pla_white",
"ultimaker_tpu_black",
"ultimaker_tpu_blue",
"ultimaker_tpu_red",
"ultimaker_tpu_white"
]
},
"overrides":
{
"machine_name": { "default_value": "VORON2" },
"machine_width": { "default_value": 250 },
"machine_depth": { "default_value": 250 },
"machine_height": { "default_value": 250 },
"gantry_height": { "value": 30 },
"machine_heated_bed": { "default_value": true },
"machine_max_acceleration_x": { "default_value": 1500 },
"machine_max_acceleration_y": { "default_value": 1500 },
"machine_max_acceleration_z": { "default_value": 250 },
"machine_acceleration": { "default_value": 1500 },
"machine_max_jerk_xy": { "default_value": 20 },
"machine_max_jerk_z": { "default_value": 1 },
"machine_max_jerk_e": { "default_value": 60 },
"machine_steps_per_mm_x": { "default_value": 80 },
"machine_steps_per_mm_y": { "default_value": 80 },
"machine_steps_per_mm_z": { "default_value": 400 },
"machine_endstop_positive_direction_x": { "default_value": true },
"machine_endstop_positive_direction_y": { "default_value": true },
"machine_endstop_positive_direction_z": { "default_value": false },
"machine_feeder_wheel_diameter": { "default_value": 7.5 },
"machine_head_with_fans_polygon": { "default_value": [ [-35, 65], [-35, -50], [35, -50], [35, 65] ] },
"machine_max_feedrate_z": { "default_value": 40 },
"machine_max_feedrate_e": { "default_value": 120 },
"machine_gcode_flavor": { "default_value": "RepRap (RepRap)" },
"machine_start_gcode": { "default_value": "print_start" },
"machine_end_gcode": { "default_value": "print_end" },
"adhesion_type": { "default_value": "skirt" },
"skirt_brim_minimal_length": { "default_value": 550 },
"retraction_speed": { "default_value": 80, "maximum_value_warning": 130 },
"retraction_retract_speed": { "maximum_value_warning": 130 },
"retraction_prime_speed": { "value": "math.ceil(retraction_speed * 0.4)", "maximum_value_warning": 130 },
"retraction_hop_enabled": { "default_value": true },
"retraction_hop": { "default_value": 0.2 },
"retraction_combing": { "default_value": "noskin" },
"retraction_combing_max_distance": { "default_value": 10 },
"travel_avoid_other_parts": { "default_value": false },
"speed_travel": { "maximum_value": 300, "value": 300, "maximum_value_warning": 501 },
"speed_travel_layer_0": { "value": "math.ceil(speed_travel * 0.4)" },
"speed_layer_0": { "value": "math.ceil(speed_print * 0.25)" },
"speed_wall": { "value": "math.ceil(speed_print * 0.33)" },
"speed_wall_0": { "value": "math.ceil(speed_print * 0.33)" },
"speed_wall_x": { "value": "math.ceil(speed_print * 0.66)" },
"speed_topbottom": { "value": "math.ceil(speed_print * 0.33)" },
"speed_roofing": { "value": "math.ceil(speed_print * 0.33)" },
"speed_slowdown_layers": { "default_value": 4 },
"roofing_layer_count": { "value": 1 },
"optimize_wall_printing_order": { "default_value": true },
"infill_enable_travel_optimization": { "default_value": true },
"minimum_polygon_circumference": { "default_value": 0.2 },
"wall_overhang_angle": { "default_value": 75 },
"wall_overhang_speed_factor": { "default_value": 50 },
"bridge_settings_enabled": { "default_value": true },
"bridge_wall_coast": { "default_value": 10 },
"bridge_fan_speed": { "default_value": 100 },
"bridge_fan_speed_2": { "resolve": "max(cool_fan_speed, 50)" },
"bridge_fan_speed_3": { "resolve": "max(cool_fan_speed, 20)" },
"alternate_extra_perimeter": { "default_value": true },
"cool_min_layer_time_fan_speed_max": { "default_value": 20 },
"cool_min_layer_time": { "default_value": 15 },
"cool_fan_speed_min": { "value": "cool_fan_speed" },
"cool_fan_full_at_height": { "value": "resolveOrValue('layer_height_0') + resolveOrValue('layer_height') * max(1, cool_fan_full_layer - 1)" },
"cool_fan_full_layer": { "value": 4 },
"layer_height_0": { "resolve": "max(0.2, min(extruderValues('layer_height')))" },
"line_width": { "value": "machine_nozzle_size * 1.125" },
"wall_line_width": { "value": "machine_nozzle_size" },
"fill_perimeter_gaps": { "default_value": "nowhere" },
"fill_outline_gaps": { "default_value": true },
"meshfix_maximum_resolution": { "default_value": 0.01 },
"infill_before_walls": { "default_value": false },
"zig_zaggify_infill": { "value": true },
"min_infill_area": { "default_value": 5.0 },
"acceleration_enabled": { "default_value": false },
"acceleration_print": { "default_value": 2200 },
"acceleration_wall_0": { "value": 1800 },
"acceleration_layer_0": { "value": 1800 },
"acceleration_travel_layer_0": { "value": 1800 },
"acceleration_roofing": { "value": 1800 },
"jerk_enabled": { "default_value": false },
"jerk_wall_0": { "value": 10 },
"jerk_roofing": { "value": 10 }
}
}

View File

@ -0,0 +1,14 @@
{
"name": "VORON2 Custom",
"version": 2,
"inherits": "voron2_base",
"metadata":
{
"visible": true,
"quality_definition": "voron2_base"
},
"overrides":
{
"machine_name": { "default_value": "VORON2 Custom" }
}
}

View File

@ -3,7 +3,7 @@
"name": "Extruder 1", "name": "Extruder 1",
"inherits": "fdmextruder", "inherits": "fdmextruder",
"metadata": { "metadata": {
"machine": "anet_a6", "machine": "anet3d",
"position": "0" "position": "0"
}, },

View File

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

View File

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

View File

@ -0,0 +1,16 @@
{
"version": 2,
"name": "Toolhead",
"inherits": "fdmextruder",
"metadata":
{
"machine": "voron2_base",
"position": "0"
},
"overrides":
{
"extruder_nr": { "default_value": 0, "maximum_value": 1 },
"material_diameter": { "default_value": 1.75 }
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,14 @@
[general]
version = 4
name = Extra Fast
definition = voron2_base
[metadata]
setting_version = 11
type = quality
quality_type = extrafast
global_quality = True
[values]
layer_height = 0.3

View File

@ -0,0 +1,14 @@
[general]
version = 4
name = Extra Fine
definition = voron2_base
[metadata]
setting_version = 11
type = quality
quality_type = extrafine
global_quality = True
[values]
layer_height = 0.06

View File

@ -0,0 +1,14 @@
[general]
version = 4
name = Fast
definition = voron2_base
[metadata]
setting_version = 11
type = quality
quality_type = fast
global_quality = True
[values]
layer_height = 0.2

View File

@ -0,0 +1,14 @@
[general]
version = 4
name = Fine
definition = voron2_base
[metadata]
setting_version = 11
type = quality
quality_type = fine
global_quality = True
[values]
layer_height = 0.1

View File

@ -0,0 +1,14 @@
[general]
version = 4
name = Normal
definition = voron2_base
[metadata]
setting_version = 11
type = quality
quality_type = normal
global_quality = True
[values]
layer_height = 0.15

View File

@ -0,0 +1,14 @@
[general]
version = 4
name = Sprint
definition = voron2_base
[metadata]
setting_version = 11
type = quality
quality_type = sprint
global_quality = True
[values]
layer_height = 0.4

View File

@ -0,0 +1,14 @@
[general]
version = 4
name = Super Sprint
definition = voron2_base
[metadata]
setting_version = 11
type = quality
quality_type = supersprint
global_quality = True
[values]
layer_height = 0.5

View File

@ -0,0 +1,14 @@
[general]
version = 4
name = Ultra Sprint
definition = voron2_base
[metadata]
setting_version = 11
type = quality
quality_type = ultrasprint
global_quality = True
[values]
layer_height = 0.6

View File

@ -0,0 +1,14 @@
[general]
version = 4
name = Extra Fine
definition = voron2_base
[metadata]
setting_version = 11
type = quality
quality_type = extrafine
material = generic_abs
variant = V6 0.25mm
[values]
speed_print = 300

View File

@ -0,0 +1,15 @@
[general]
version = 4
name = Fast
definition = voron2_base
[metadata]
setting_version = 11
type = quality
quality_type = fast
material = generic_abs
variant = V6 0.25mm
[values]
speed_print = 180

View File

@ -0,0 +1,15 @@
[general]
version = 4
name = Fine
definition = voron2_base
[metadata]
setting_version = 11
type = quality
quality_type = fine
material = generic_abs
variant = V6 0.25mm
[values]
speed_print = 300

View File

@ -0,0 +1,15 @@
[general]
version = 4
name = Normal
definition = voron2_base
[metadata]
setting_version = 11
type = quality
quality_type = normal
material = generic_abs
variant = V6 0.25mm
[values]
speed_print = 240

View File

@ -0,0 +1,14 @@
[general]
version = 4
name = Extra Fine
definition = voron2_base
[metadata]
setting_version = 11
type = quality
quality_type = extrafine
material = generic_nylon
variant = V6 0.25mm
[values]
speed_print = 300

View File

@ -0,0 +1,15 @@
[general]
version = 4
name = Fast
definition = voron2_base
[metadata]
setting_version = 11
type = quality
quality_type = fast
material = generic_nylon
variant = V6 0.25mm
[values]
speed_print = 180

View File

@ -0,0 +1,15 @@
[general]
version = 4
name = Fine
definition = voron2_base
[metadata]
setting_version = 11
type = quality
quality_type = fine
material = generic_nylon
variant = V6 0.25mm
[values]
speed_print = 300

View File

@ -0,0 +1,15 @@
[general]
version = 4
name = Normal
definition = voron2_base
[metadata]
setting_version = 11
type = quality
quality_type = normal
material = generic_nylon
variant = V6 0.25mm
[values]
speed_print = 240

View File

@ -0,0 +1,14 @@
[general]
version = 4
name = Extra Fine
definition = voron2_base
[metadata]
setting_version = 11
type = quality
quality_type = extrafine
material = generic_pc
variant = V6 0.25mm
[values]
speed_print = 300

View File

@ -0,0 +1,15 @@
[general]
version = 4
name = Fast
definition = voron2_base
[metadata]
setting_version = 11
type = quality
quality_type = fast
material = generic_pc
variant = V6 0.25mm
[values]
speed_print = 180

View File

@ -0,0 +1,15 @@
[general]
version = 4
name = Fine
definition = voron2_base
[metadata]
setting_version = 11
type = quality
quality_type = fine
material = generic_pc
variant = V6 0.25mm
[values]
speed_print = 300

View File

@ -0,0 +1,15 @@
[general]
version = 4
name = Normal
definition = voron2_base
[metadata]
setting_version = 11
type = quality
quality_type = normal
material = generic_pc
variant = V6 0.25mm
[values]
speed_print = 240

View File

@ -0,0 +1,14 @@
[general]
version = 4
name = Extra Fine
definition = voron2_base
[metadata]
setting_version = 11
type = quality
quality_type = extrafine
material = generic_petg
variant = V6 0.25mm
[values]
speed_print = 300

View File

@ -0,0 +1,15 @@
[general]
version = 4
name = Fast
definition = voron2_base
[metadata]
setting_version = 11
type = quality
quality_type = fast
material = generic_petg
variant = V6 0.25mm
[values]
speed_print = 180

View File

@ -0,0 +1,15 @@
[general]
version = 4
name = Fine
definition = voron2_base
[metadata]
setting_version = 11
type = quality
quality_type = fine
material = generic_petg
variant = V6 0.25mm
[values]
speed_print = 300

View File

@ -0,0 +1,15 @@
[general]
version = 4
name = Normal
definition = voron2_base
[metadata]
setting_version = 11
type = quality
quality_type = normal
material = generic_petg
variant = V6 0.25mm
[values]
speed_print = 240

View File

@ -0,0 +1,14 @@
[general]
version = 4
name = Extra Fine
definition = voron2_base
[metadata]
setting_version = 11
type = quality
quality_type = extrafine
material = generic_pla
variant = V6 0.25mm
[values]
speed_print = 300

View File

@ -0,0 +1,15 @@
[general]
version = 4
name = Fast
definition = voron2_base
[metadata]
setting_version = 11
type = quality
quality_type = fast
material = generic_pla
variant = V6 0.25mm
[values]
speed_print = 180

View File

@ -0,0 +1,15 @@
[general]
version = 4
name = Fine
definition = voron2_base
[metadata]
setting_version = 11
type = quality
quality_type = fine
material = generic_pla
variant = V6 0.25mm
[values]
speed_print = 300

View File

@ -0,0 +1,15 @@
[general]
version = 4
name = Normal
definition = voron2_base
[metadata]
setting_version = 11
type = quality
quality_type = normal
material = generic_pla
variant = V6 0.25mm
[values]
speed_print = 240

View File

@ -0,0 +1,15 @@
[general]
version = 4
name = Extra Fine
definition = voron2_base
[metadata]
setting_version = 11
type = quality
quality_type = extrafine
material = generic_abs
variant = V6 0.30mm
[values]
speed_print = 300

View File

@ -0,0 +1,15 @@
[general]
version = 4
name = Fast
definition = voron2_base
[metadata]
setting_version = 11
type = quality
quality_type = fast
material = generic_abs
variant = V6 0.30mm
[values]
speed_print = 160

View File

@ -0,0 +1,15 @@
[general]
version = 4
name = Fine
definition = voron2_base
[metadata]
setting_version = 11
type = quality
quality_type = fine
material = generic_abs
variant = V6 0.30mm
[values]
speed_print = 300

View File

@ -0,0 +1,15 @@
[general]
version = 4
name = Normal
definition = voron2_base
[metadata]
setting_version = 11
type = quality
quality_type = normal
material = generic_abs
variant = V6 0.30mm
[values]
speed_print = 200

View File

@ -0,0 +1,15 @@
[general]
version = 4
name = Extra Fine
definition = voron2_base
[metadata]
setting_version = 11
type = quality
quality_type = extrafine
material = generic_nylon
variant = V6 0.30mm
[values]
speed_print = 300

View File

@ -0,0 +1,15 @@
[general]
version = 4
name = Fast
definition = voron2_base
[metadata]
setting_version = 11
type = quality
quality_type = fast
material = generic_nylon
variant = V6 0.30mm
[values]
speed_print = 160

View File

@ -0,0 +1,15 @@
[general]
version = 4
name = Fine
definition = voron2_base
[metadata]
setting_version = 11
type = quality
quality_type = fine
material = generic_nylon
variant = V6 0.30mm
[values]
speed_print = 300

View File

@ -0,0 +1,15 @@
[general]
version = 4
name = Normal
definition = voron2_base
[metadata]
setting_version = 11
type = quality
quality_type = normal
material = generic_nylon
variant = V6 0.30mm
[values]
speed_print = 200

View File

@ -0,0 +1,15 @@
[general]
version = 4
name = Extra Fine
definition = voron2_base
[metadata]
setting_version = 11
type = quality
quality_type = extrafine
material = generic_pc
variant = V6 0.30mm
[values]
speed_print = 300

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