Merge branch 'main' into ja-i18n-improve

This commit is contained in:
Erwan MATHIEU 2024-10-08 13:02:38 +02:00 committed by GitHub
commit fa34d24528
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7673 changed files with 63614 additions and 8391 deletions

View file

@ -16,7 +16,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4
- uses: technote-space/get-diff-action@v6
with:

View file

@ -15,7 +15,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
uses: actions/checkout@v4
with:
fetch-depth: 2
@ -55,7 +55,7 @@ jobs:
echo ${{ github.event.pull_request.head.repo.full_name }} > printer-linter-result/pr-head-repo.txt
echo ${{ github.event.pull_request.head.sha }} > printer-linter-result/pr-head-sha.txt
- uses: actions/upload-artifact@v2
- uses: actions/upload-artifact@v4
with:
name: printer-linter-result
path: printer-linter-result/

View file

@ -9,6 +9,11 @@ on:
required: true
type: string
publish_release_description:
description: 'Create the GitHub release (if existing, the description will be overridden based on the changelog)'
required: true
type: boolean
jobs:
parse-version:
name: Parse input version string
@ -153,10 +158,12 @@ jobs:
ref: ${{ needs.parse-version.outputs.branch_name }}
- name: Extract changelog
if: ${{ inputs.publish_release_description }}
run: python ./scripts/extract_changelog.py --version ${{ needs.parse-version.outputs.version_major }}.${{ needs.parse-version.outputs.version_minor }}.${{ needs.parse-version.outputs.version_patch }} --changelog ./resources/texts/change_log.txt > formatted_changelog.txt
- name: Create release
uses: notpeelz/action-gh-create-release@v5.0.1
if: ${{ inputs.publish_release_description }}
with:
target: ${{ needs.create-tags.outputs.main_commit }}
tag: ${{ inputs.cura_version }}

View file

@ -10,7 +10,7 @@ requirements:
- "pynest2d/5.3.0"
- "native_cad_plugin/2.0.0"
requirements_internal:
- "fdm_materials/(latest)@internal/testing"
- "fdm_materials/5.8.1"
- "cura_private_data/(latest)@internal/testing"
urls:
default:

View file

@ -232,6 +232,7 @@ class Account(QObject):
def _onProfileChanged(self, profile: Optional[UserProfile]) -> None:
self._user_profile = profile
self._updatePermissions()
self.userProfileChanged.emit()
def _sync(self) -> None:

View file

@ -139,7 +139,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 = 23
SettingVersion = 24
Created = False

View file

@ -48,6 +48,7 @@ class MachineNode(ContainerNode):
self.preferred_variant_name = my_metadata.get("preferred_variant_name", "")
self.preferred_material = my_metadata.get("preferred_material", "")
self.preferred_quality_type = my_metadata.get("preferred_quality_type", "")
self.supports_abstract_color = parseBool(my_metadata.get("supports_abstract_color", "false"))
self._loadAll()

View file

@ -127,13 +127,12 @@ class QualityManagementModel(ListModel):
# have no container for the global stack, because "my_profile" just got renamed to "my_new_profile". This results
# in crashes because the rest of the system assumes that all data in a QualityChangesGroup will be correct.
#
# Renaming the container for the global stack in the end seems to be ok, because the assumption is mostly based
# on the quality changes container for the global stack.
# This is why we use the "supress_signals" flag for the set name. This basically makes the change silent.
for metadata in quality_changes_group.metadata_per_extruder.values():
extruder_container = cast(InstanceContainer, container_registry.findContainers(id = metadata["id"])[0])
extruder_container.setName(new_name)
extruder_container.setName(new_name, supress_signals=True)
global_container = cast(InstanceContainer, container_registry.findContainers(id = quality_changes_group.metadata_for_global["id"])[0])
global_container.setName(new_name)
global_container.setName(new_name, supress_signals=True)
quality_changes_group.name = new_name

View file

@ -63,6 +63,8 @@ class VariantNode(ContainerNode):
filtered_materials = [material for material in materials if not self.machine.isExcludedMaterialBaseFile(material["id"])]
for material in filtered_materials:
if material.get("abstract_color", False) and not self.machine.supports_abstract_color:
continue # do not show abstract color profiles if the machine does not support them
base_file = material["base_file"]
if base_file not in self.materials:
self.materials[base_file] = MaterialNode(material["id"], variant = self)
@ -126,6 +128,8 @@ class VariantNode(ContainerNode):
return # We won't add any materials.
material_definition = container.getMetaDataEntry("definition")
if (not self.machine.supports_abstract_color) and container.getMetaDataEntry("abstract_color", False):
return
base_file = container.getMetaDataEntry("base_file")
if self.machine.isExcludedMaterialBaseFile(base_file):
return # Material is forbidden for this printer.

View file

@ -28,14 +28,15 @@ class FormatMaps:
# A map from the material-name in their native file-formats to some info, including the internal name we use.
MATERIAL_MAP = {
"abs": {"name": "ABS", "guid": "2780b345-577b-4a24-a2c5-12e6aad3e690"},
"abs": {"name": "ABS", "guid": "e0f1d581-cc6b-4e36-8f3c-3f5601ecba5f"},
"abs-cf10": {"name": "ABS-CF", "guid": "495a0ce5-9daf-4a16-b7b2-06856d82394d"},
"abs-wss1": {"name": "ABS-R", "guid": "88c8919c-6a09-471a-b7b6-e801263d862d"},
"asa": {"name": "ASA", "guid": "f79bc612-21eb-482e-ad6c-87d75bdde066"},
"nylon12-cf": {"name": "Nylon 12 CF", "guid": "3c6f2877-71cc-4760-84e6-4b89ab243e3b"},
"nylon": {"name": "Nylon", "guid": "283d439a-3490-4481-920c-c51d8cdecf9c"},
"nylon-cf": {"name": "Nylon CF", "guid": "17abb865-ca73-4ccd-aeda-38e294c9c60b"},
"nylon": {"name": "Nylon", "guid": "9475b03d-fd19-48a2-b7b5-be1fb46abb02"},
"pc": {"name": "PC", "guid": "62414577-94d1-490d-b1e4-7ef3ec40db02"},
"petg": {"name": "PETG", "guid": "69386c85-5b6c-421a-bec5-aeb1fb33f060"},
"petg": {"name": "PETG", "guid": "2d004bbd-d1bb-47f8-beac-b066702d5273"},
"pla": {"name": "PLA", "guid": "abb9c58e-1f56-48d1-bd8f-055fde3a5b56"},
"pva": {"name": "PVA", "guid": "add51ef2-86eb-4c39-afd5-5586564f0715"},
"wss1": {"name": "RapidRinse", "guid": "a140ef8f-4f26-4e73-abe0-cfc29d6d1024"},
@ -44,7 +45,8 @@ class FormatMaps:
"cpe": {"name": "CPE", "guid": "da1872c1-b991-4795-80ad-bdac0f131726"},
"hips": {"name": "HIPS", "guid": "a468d86a-220c-47eb-99a5-bbb47e514eb0"},
"tpu": {"name": "TPU 95A", "guid": "19baa6a9-94ff-478b-b4a1-8157b74358d2"},
"im-pla": {"name": "Tough", "guid": "de031137-a8ca-4a72-bd1b-17bb964033ad"}
"im-pla": {"name": "Tough", "guid": "96fca5d9-0371-4516-9e96-8e8182677f3c"}
# /!\ When changing this list, make sure the changes are reported accordingly on Digital Factory
}
__inverse_printer_name: Optional[Dict[str, str]] = None

View file

@ -5,7 +5,7 @@ from typing import Any, cast, List, Optional, Dict
from PyQt6.QtCore import pyqtProperty, pyqtSignal, QObject
from UM.Application import Application
from UM.Decorators import override
from UM.Decorators import CachedMemberFunctions, override
from UM.FlameProfiler import pyqtSlot
from UM.Logger import Logger
from UM.Settings.ContainerStack import ContainerStack, InvalidContainerStackError
@ -237,6 +237,7 @@ class CuraContainerStack(ContainerStack):
:param new_value: The new value to set the property to.
"""
CachedMemberFunctions.clearInstanceCache(self)
container_index = _ContainerIndexes.UserChanges
self._containers[container_index].setProperty(key, property_name, property_value, container, set_from_cache)

View file

@ -5,7 +5,7 @@ from typing import Any, Dict, TYPE_CHECKING, Optional
from PyQt6.QtCore import pyqtProperty, pyqtSignal
from UM.Decorators import override
from UM.Decorators import CachedMemberFunctions, override
from UM.MimeTypeDatabase import MimeType, MimeTypeDatabase
from UM.Settings.ContainerStack import ContainerStack
from UM.Settings.ContainerRegistry import ContainerRegistry
@ -86,6 +86,7 @@ class ExtruderStack(CuraContainerStack):
def setCompatibleMaterialDiameter(self, value: float) -> None:
old_approximate_diameter = self.getApproximateMaterialDiameter()
if self.getCompatibleMaterialDiameter() != value:
CachedMemberFunctions.clearInstanceCache(self)
self.definitionChanges.setProperty("material_diameter", "value", value)
self.compatibleMaterialDiameterChanged.emit()

View file

@ -133,6 +133,7 @@ CreateShortCut "$SMPROGRAMS\{{ app_name }}\UltiMaker Cura website.lnk" "$INSTDIR
WriteRegStr ${REG_ROOT} "${REG_APP_PATH}" "" "$INSTDIR\${MAIN_APP_EXE}"
WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "DisplayName" "${APP_NAME}"
WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "UninstallString" "$INSTDIR\uninstall.exe"
WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "QuietUninstallString" '"$INSTDIR\uninstall.exe" /S'
WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "DisplayIcon" "$INSTDIR\${MAIN_APP_EXE}"
WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "DisplayVersion" "${VERSION}"
WriteRegStr ${REG_ROOT} "${UNINSTALL_PATH}" "Publisher" "${COMP_NAME}"

View file

@ -8,9 +8,12 @@ from io import StringIO
from threading import Lock
import zipfile
from typing import Dict, Any
from pathlib import Path
from zipfile import ZipFile
from UM.Application import Application
from UM.Logger import Logger
from UM.PluginRegistry import PluginRegistry
from UM.Preferences import Preferences
from UM.Settings.ContainerRegistry import ContainerRegistry
from UM.Workspace.WorkspaceWriter import WorkspaceWriter
@ -33,7 +36,7 @@ class ThreeMFWorkspaceWriter(WorkspaceWriter):
if self._ucp_model != model:
self._ucp_model = model
def _write(self, stream, nodes, mode=WorkspaceWriter.OutputMode.BinaryMode):
def _write(self, stream, nodes, mode, include_log):
application = Application.getInstance()
machine_manager = application.getMachineManager()
@ -79,6 +82,11 @@ class ThreeMFWorkspaceWriter(WorkspaceWriter):
if self._ucp_model is not None:
user_settings_data = self._getUserSettings(self._ucp_model)
ThreeMFWriter._storeMetadataJson(user_settings_data, archive, USER_SETTINGS_PATH)
# Write log file
if include_log:
ThreeMFWorkspaceWriter._writeLogFile(archive)
except PermissionError:
self.setInformation(catalog.i18nc("@error:zip", "No permission to write the workspace here."))
Logger.error("No permission to write workspace to this stream.")
@ -125,8 +133,8 @@ class ThreeMFWorkspaceWriter(WorkspaceWriter):
return True
def write(self, stream, nodes, mode=WorkspaceWriter.OutputMode.BinaryMode):
success = self._write(stream, nodes, mode=WorkspaceWriter.OutputMode.BinaryMode)
def write(self, stream, nodes, mode=WorkspaceWriter.OutputMode.BinaryMode, **kwargs):
success = self._write(stream, nodes, WorkspaceWriter.OutputMode.BinaryMode, kwargs.get("include_log", False))
self._ucp_model = None
return success
@ -191,6 +199,17 @@ class ThreeMFWorkspaceWriter(WorkspaceWriter):
Logger.error("File became inaccessible while writing to it: {archive_filename}".format(archive_filename = archive.fp.name))
return
@staticmethod
def _writeLogFile(archive: ZipFile) -> None:
"""Helper function that writes the Cura log file to the archive.
:param archive: The archive to write to.
"""
file_logger = PluginRegistry.getInstance().getPluginObject("FileLogger")
file_logger.flush()
for file_path in file_logger.getFilesPaths():
archive.write(file_path, arcname=f"log/{Path(file_path).name}")
@staticmethod
def _getUserSettings(model: SettingsExportModel) -> Dict[str, Dict[str, Any]]:
user_settings = {}

View file

@ -197,7 +197,8 @@ class CuraEngineBackend(QObject, Backend):
self._slicing_error_message.actionTriggered.connect(self._reportBackendError)
self._resetLastSliceTimeStats()
self._snapshot: Optional[QImage] = None
self._snapshot: Optional[QImage] = None
self._last_socket_error: Optional[Arcus.Error] = None
application.initializationFinished.connect(self.initialize)
@ -569,7 +570,20 @@ class CuraEngineBackend(QObject, Backend):
return
# Preparation completed, send it to the backend.
self._socket.sendMessage(job.getSliceMessage())
immediate_success = self._socket.sendMessage(job.getSliceMessage())
if (not CuraApplication.getInstance().getUseExternalBackend()) and (not immediate_success):
if self._last_socket_error is not None and self._last_socket_error.getErrorCode() == Arcus.ErrorCode.MessageTooBigError:
error_txt = catalog.i18nc("@info:status", "Unable to send the model data to the engine. Please try to use a less detailed model, or reduce the number of instances.")
else:
error_txt = catalog.i18nc("@info:status", "Unable to send the model data to the engine. Please try again, or contact support.")
self._error_message = Message(error_txt,
title=catalog.i18nc("@info:title", "Unable to slice"),
message_type=Message.MessageType.WARNING)
self._error_message.show()
self.setState(BackendState.Error)
self.backendError.emit(job)
return
# Notify the user that it's now up to the backend to do its job
self.setState(BackendState.Processing)
@ -691,6 +705,7 @@ class CuraEngineBackend(QObject, Backend):
if error.getErrorCode() == Arcus.ErrorCode.Debug:
return
self._last_socket_error = error
self._terminate()
self._createSocket()

View file

@ -49,7 +49,20 @@ class StartJobResult(IntEnum):
ObjectsWithDisabledExtruder = 8
class GcodeStartEndFormatter(Formatter):
class GcodeConditionState(IntEnum):
OutsideCondition = 1
ConditionFalse = 2
ConditionTrue = 3
ConditionDone = 4
class GcodeInstruction(IntEnum):
Skip = 1
Evaluate = 2
EvaluateAndWrite = 3
class GcodeStartEndFormatter:
# Formatter class that handles token expansion in start/end gcode
# Example of a start/end gcode string:
# ```
@ -63,22 +76,50 @@ class GcodeStartEndFormatter(Formatter):
# will be used. Alternatively, if the expression is formatted as "{[expression], [extruder_nr]}",
# then the expression will be evaluated with the extruder stack of the specified extruder_nr.
_extruder_regex = re.compile(r"^\s*(?P<expression>.*)\s*,\s*(?P<extruder_nr_expr>.*)\s*$")
_instruction_regex = re.compile(r"{(?P<condition>if|else|elif|endif)?\s*(?P<expression>.*?)\s*(?:,\s*(?P<extruder_nr_expr>.*))?\s*}(?P<end_of_line>\n?)")
def __init__(self, all_extruder_settings: Dict[str, Any], default_extruder_nr: int = -1) -> None:
def __init__(self, all_extruder_settings: Dict[str, Dict[str, Any]], default_extruder_nr: int = -1) -> None:
super().__init__()
self._all_extruder_settings: Dict[str, Any] = all_extruder_settings
self._all_extruder_settings: Dict[str, Dict[str, Any]] = all_extruder_settings
self._default_extruder_nr: int = default_extruder_nr
self._cura_application = CuraApplication.getInstance()
self._extruder_manager = ExtruderManager.getInstance()
def get_field(self, field_name, args: [str], kwargs: dict) -> Tuple[str, str]:
# get_field method parses all fields in the format-string and parses them individually to the get_value method.
# e.g. for a string "Hello {foo.bar}" would the complete field "foo.bar" would be passed to get_field, and then
# the individual parts "foo" and "bar" would be passed to get_value. This poses a problem for us, because want
# to parse the entire field as a single expression. To solve this, we override the get_field method and return
# the entire field as the expression.
return self.get_value(field_name, args, kwargs), field_name
def format(self, text: str) -> str:
remaining_text: str = text
result: str = ""
def get_value(self, expression: str, args: [str], kwargs: dict) -> str:
self._condition_state: GcodeConditionState = GcodeConditionState.OutsideCondition
while len(remaining_text) > 0:
next_code_match = self._instruction_regex.search(remaining_text)
if next_code_match is not None:
expression_start, expression_end = next_code_match.span()
if expression_start > 0:
result += self._process_statement(remaining_text[:expression_start])
result += self._process_code(next_code_match)
remaining_text = remaining_text[expression_end:]
else:
result += self._process_statement(remaining_text)
remaining_text = ""
return result
def _process_statement(self, statement: str) -> str:
if self._condition_state in [GcodeConditionState.OutsideCondition, GcodeConditionState.ConditionTrue]:
return statement
else:
return ""
def _process_code(self, code: re.Match) -> str:
condition: Optional[str] = code.group("condition")
expression: Optional[str] = code.group("expression")
extruder_nr_expr: Optional[str] = code.group("extruder_nr_expr")
end_of_line: Optional[str] = code.group("end_of_line")
# The following variables are not settings, but only become available after slicing.
# when these variables are encountered, we return them as-is. They are replaced later
@ -87,53 +128,100 @@ class GcodeStartEndFormatter(Formatter):
if expression in post_slice_data_variables:
return f"{{{expression}}}"
extruder_nr = str(self._default_extruder_nr)
extruder_nr: str = str(self._default_extruder_nr)
instruction: GcodeInstruction = GcodeInstruction.Skip
# The settings may specify a specific extruder to use. This is done by
# formatting the expression as "{expression}, {extruder_nr_expr}". If the
# expression is formatted like this, we extract the extruder_nr and use
# it to get the value from the correct extruder stack.
match = self._extruder_regex.match(expression)
if match:
expression = match.group("expression")
extruder_nr_expr = match.group("extruder_nr_expr")
if extruder_nr_expr.isdigit():
extruder_nr = extruder_nr_expr
if condition is None:
# This is a classic statement
if self._condition_state in [GcodeConditionState.OutsideCondition, GcodeConditionState.ConditionTrue]:
# Skip and move to next
instruction = GcodeInstruction.EvaluateAndWrite
else:
# This is a condition statement, first check validity
if condition == "if":
if self._condition_state != GcodeConditionState.OutsideCondition:
raise SyntaxError("Nested conditions are not supported")
else:
# We get the value of the extruder_nr_expr from `_all_extruder_settings` dictionary
# rather than the global container stack. The `_all_extruder_settings["-1"]` is a
# dict-representation of the global container stack, with additional properties such
# as `initial_extruder_nr`. As users may enter such expressions we can't use the
# global container stack.
extruder_nr = str(self._all_extruder_settings["-1"].get(extruder_nr_expr, "-1"))
if self._condition_state == GcodeConditionState.OutsideCondition:
raise SyntaxError("Condition should start with an 'if' statement")
if extruder_nr in self._all_extruder_settings:
additional_variables = self._all_extruder_settings[extruder_nr].copy()
else:
Logger.warning(f"Extruder {extruder_nr} does not exist, using global settings")
additional_variables = self._all_extruder_settings["-1"].copy()
if condition == "if":
# First instruction, just evaluate it
instruction = GcodeInstruction.Evaluate
# Add the arguments and keyword arguments to the additional settings. These
# are currently _not_ used, but they are added for consistency with the
# base Formatter class.
for key, value in enumerate(args):
additional_variables[key] = value
for key, value in kwargs.items():
additional_variables[key] = value
else:
if self._condition_state == GcodeConditionState.ConditionTrue:
# We have reached the next condition after a valid one has been found, skip the rest
self._condition_state = GcodeConditionState.ConditionDone
if extruder_nr == "-1":
container_stack = CuraApplication.getInstance().getGlobalContainerStack()
else:
container_stack = ExtruderManager.getInstance().getExtruderStack(extruder_nr)
if not container_stack:
if condition == "elif":
if self._condition_state == GcodeConditionState.ConditionFalse:
# New instruction, and valid condition has not been reached so far => evaluate it
instruction = GcodeInstruction.Evaluate
else:
# New instruction, but valid condition has already been reached => skip it
instruction = GcodeInstruction.Skip
elif condition == "else":
instruction = GcodeInstruction.Skip # Never evaluate, expression should be empty
if self._condition_state == GcodeConditionState.ConditionFalse:
# Fallback instruction, and valid condition has not been reached so far => active next
self._condition_state = GcodeConditionState.ConditionTrue
elif condition == "endif":
instruction = GcodeInstruction.Skip # Never evaluate, expression should be empty
self._condition_state = GcodeConditionState.OutsideCondition
if instruction >= GcodeInstruction.Evaluate and extruder_nr_expr is not None:
extruder_nr_function = SettingFunction(extruder_nr_expr)
container_stack = self._cura_application.getGlobalContainerStack()
# We add the variables contained in `_all_extruder_settings["-1"]`, which is a dict-representation of the
# global container stack, with additional properties such as `initial_extruder_nr`. As users may enter such
# expressions we can't use the global container stack. The variables contained in the global container stack
# will then be inserted twice, which is not optimal but works well.
extruder_nr = str(extruder_nr_function(container_stack, additional_variables=self._all_extruder_settings["-1"]))
if instruction >= GcodeInstruction.Evaluate:
if extruder_nr in self._all_extruder_settings:
additional_variables = self._all_extruder_settings[extruder_nr].copy()
else:
Logger.warning(f"Extruder {extruder_nr} does not exist, using global settings")
container_stack = CuraApplication.getInstance().getGlobalContainerStack()
additional_variables = self._all_extruder_settings["-1"].copy()
setting_function = SettingFunction(expression)
value = setting_function(container_stack, additional_variables=additional_variables)
if extruder_nr == "-1":
container_stack = self._cura_application.getGlobalContainerStack()
else:
container_stack = self._extruder_manager.getExtruderStack(extruder_nr)
if not container_stack:
Logger.warning(f"Extruder {extruder_nr} does not exist, using global settings")
container_stack = self._cura_application.getGlobalContainerStack()
return value
setting_function = SettingFunction(expression)
value = setting_function(container_stack, additional_variables=additional_variables)
if instruction == GcodeInstruction.Evaluate:
if value:
self._condition_state = GcodeConditionState.ConditionTrue
else:
self._condition_state = GcodeConditionState.ConditionFalse
return ""
else:
value_str = str(value)
if end_of_line is not None:
# If we are evaluating an expression that is not a condition, restore the end of line
value_str += end_of_line
return value_str
else:
return ""
class StartSliceJob(Job):
@ -470,6 +558,9 @@ class StartSliceJob(Job):
result["day"] = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"][int(time.strftime("%w"))]
result["initial_extruder_nr"] = CuraApplication.getInstance().getExtruderManager().getInitialExtruderNr()
# If adding or changing a setting here, please update the associated wiki page
# https://github.com/Ultimaker/Cura/wiki/Start-End-G%E2%80%90Code
return result
def _cacheAllExtruderSettings(self):

View file

@ -182,7 +182,7 @@ Item
Cura.GcodeTextArea // "Extruder Start G-code"
{
anchors.top: parent.top
anchors.bottom: parent.bottom
anchors.bottom: buttonLearnMore.top
anchors.bottomMargin: UM.Theme.getSize("default_margin").height
anchors.left: parent.left
width: base.columnWidth - UM.Theme.getSize("default_margin").width
@ -196,7 +196,7 @@ Item
Cura.GcodeTextArea // "Extruder End G-code"
{
anchors.top: parent.top
anchors.bottom: parent.bottom
anchors.bottom: buttonLearnMore.top
anchors.bottomMargin: UM.Theme.getSize("default_margin").height
anchors.right: parent.right
width: base.columnWidth - UM.Theme.getSize("default_margin").width
@ -206,5 +206,17 @@ Item
settingKey: "machine_extruder_end_code"
settingStoreIndex: propertyStoreIndex
}
Cura.TertiaryButton
{
id: buttonLearnMore
text: catalog.i18nc("@button", "Learn more")
iconSource: UM.Theme.getIcon("LinkExternal")
isIconOnRightSide: true
onClicked: Qt.openUrlExternally("https://github.com/Ultimaker/Cura/wiki/Start-End-G%E2%80%90Code")
anchors.bottom: parent.bottom
anchors.right: parent.right
}
}
}

View file

@ -376,7 +376,7 @@ Item
anchors
{
top: upperBlock.bottom
bottom: parent.bottom
bottom: buttonLearnMore.top
left: parent.left
right: parent.right
margins: UM.Theme.getSize("default_margin").width
@ -403,5 +403,19 @@ Item
settingKey: "machine_end_gcode"
settingStoreIndex: propertyStoreIndex
}
}
Cura.TertiaryButton
{
id: buttonLearnMore
text: catalog.i18nc("@button", "Learn more")
iconSource: UM.Theme.getIcon("LinkExternal")
isIconOnRightSide: true
onClicked: Qt.openUrlExternally("https://github.com/Ultimaker/Cura/wiki/Start-End-G%E2%80%90Code")
anchors.bottom: parent.bottom
anchors.right: parent.right
anchors.margins: UM.Theme.getSize("default_margin").width
}
}

View file

@ -1,65 +1,217 @@
# Copyright (c) 2020 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
# Created by Wayne Porter
# Re-write in April of 2024 by GregValiant (Greg Foresi)
# Changes:
# Added an 'Enable' setting
# Added support for multi-line insertions (comma delimited)
# Added insertions in a range of layers or a single insertion at a layer. Numbers are consistent with the Cura Preview (base1)
# Added frequency of Insertion (once only, every layer, every 2nd, 3rd, 5th, 10th, 25th, 50th, 100th)
# Added support for 'One at a Time' print sequence
# Rafts are allowed and accounted for but no insertions are made in raft layers
from ..Script import Script
import re
from UM.Application import Application
class InsertAtLayerChange(Script):
def __init__(self):
super().__init__()
def getSettingDataString(self):
return """{
"name": "Insert at layer change",
"name": "Insert at Layer Change",
"key": "InsertAtLayerChange",
"metadata": {},
"version": 2,
"settings":
{
"insert_location":
"enabled":
{
"label": "When to insert",
"description": "Whether to insert code before or after layer change.",
"label": "Enable this script",
"description": "You must enable the script for it to run.",
"type": "bool",
"default_value": true,
"enabled": true
},
"insert_frequency":
{
"label": "How often to insert",
"description": "Every so many layers starting with the Start Layer OR as single insertion at a specific layer. If the print sequence is 'one_at_a_time' then the insertions will be made for every model. Insertions are made at the beginning of a layer.",
"type": "enum",
"options": {"before": "Before", "after": "After"},
"default_value": "before"
"options": {
"once_only": "One insertion only",
"every_layer": "Every Layer",
"every_2nd": "Every 2nd",
"every_3rd": "Every 3rd",
"every_5th": "Every 5th",
"every_10th": "Every 10th",
"every_25th": "Every 25th",
"every_50th": "Every 50th",
"every_100th": "Every 100th"},
"default_value": "every_layer",
"enabled": "enabled"
},
"start_layer":
{
"label": "Starting Layer",
"description": "The layer before which the first insertion will take place. If the Print_Sequence is 'All at Once' then use the layer numbers from the Cura Preview. Enter '1' to start at gcode LAYER:0. In 'One at a Time' mode use the layer numbers from the first model that prints AND all models will receive the same insertions. NOTE: There is never an insertion for raft layers.",
"type": "int",
"default_value": 1,
"minimum_value": 1,
"enabled": "insert_frequency != 'once_only' and enabled"
},
"end_layer":
{
"label": "Ending Layer",
"description": "The layer before which the last insertion will take place. Enter '-1' to indicate the entire file. Use layer numbers from the Cura Preview.",
"type": "int",
"default_value": -1,
"minimum_value": -1,
"enabled": "insert_frequency != 'once_only' and enabled"
},
"single_end_layer":
{
"label": "Layer # for Single Insertion.",
"description": "The layer before which the Gcode insertion will take place. Use the layer numbers from the Cura Preview.",
"type": "str",
"default_value": "",
"enabled": "insert_frequency == 'once_only' and enabled"
},
"gcode_to_add":
{
"label": "G-code to insert",
"description": "G-code to add before or after layer change.",
"label": "G-code to insert.",
"description": "G-code to add at start of the layer. Use a comma to delimit multi-line commands. EX: G28 X Y,M220 S100,M117 HELL0. NOTE: All inserted text will be converted to upper-case as some firmwares don't understand lower-case.",
"type": "str",
"default_value": ""
},
"skip_layers":
{
"label": "Skip layers",
"description": "Number of layers to skip between insertions (0 for every layer).",
"type": "int",
"default_value": 0,
"minimum_value": 0
"default_value": "",
"enabled": "enabled"
}
}
}"""
def execute(self, data):
gcode_to_add = self.getSettingValueByKey("gcode_to_add") + "\n"
skip_layers = self.getSettingValueByKey("skip_layers")
count = 0
for layer in data:
# Check that a layer is being printed
lines = layer.split("\n")
for line in lines:
if ";LAYER:" in line:
index = data.index(layer)
if count == 0:
if self.getSettingValueByKey("insert_location") == "before":
layer = gcode_to_add + layer
else:
layer = layer + gcode_to_add
data[index] = layer
count = (count + 1) % (skip_layers + 1)
break
return data
# Exit if the script is not enabled
if not bool(self.getSettingValueByKey("enabled")):
return data
#Initialize variables
mycode = self.getSettingValueByKey("gcode_to_add").upper()
start_layer = int(self.getSettingValueByKey("start_layer"))
end_layer = int(self.getSettingValueByKey("end_layer"))
when_to_insert = self.getSettingValueByKey("insert_frequency")
end_list = [0]
print_sequence = Application.getInstance().getGlobalContainerStack().getProperty("print_sequence", "value")
# Get the topmost layer number and adjust the end_list
if end_layer == -1:
if print_sequence == "all_at_once":
for lnum in range(0, len(data) - 1):
if ";LAYER:" in data[lnum]:
the_top = int(data[lnum].split(";LAYER:")[1].split("\n")[0])
end_list[0] = the_top
# Get the topmost layer number for each model and append it to the end_list
if print_sequence == "one_at_a_time":
for lnum in range(0, 10):
if ";LAYER:0" in data[lnum]:
start_at = lnum + 1
break
for lnum in range(start_at, len(data)-1, 1):
if ";LAYER:" in data[lnum] and not ";LAYER:0" in data[lnum] and not ";LAYER:-" in data[lnum]:
end_list[len(end_list) - 1] = int(data[lnum].split(";LAYER:")[1].split("\n")[0])
continue
if ";LAYER:0" in data[lnum]:
end_list.append(0)
elif end_layer != -1:
if print_sequence == "all_at_once":
# Catch an error if the entered End_Layer > the top layer in the gcode
for e_num, layer in enumerate(data):
if ";LAYER:" in layer:
top_layer = int(data[e_num].split(";LAYER:")[1].split("\n")[0])
end_list[0] = end_layer - 1
if top_layer < end_layer - 1:
end_list[0] = top_layer
elif print_sequence == "one_at_a_time":
# Find the index of the first Layer:0
for lnum in range(0, 10):
if ";LAYER:0" in data[lnum]:
start_at = lnum + 1
break
# Get the top layer number for each model
for lnum in range(start_at, len(data)-1):
if ";LAYER:" in data[lnum] and not ";LAYER:0" in data[lnum] and not ";LAYER:-" in data[lnum]:
end_list[len(end_list) - 1] = int(data[lnum].split(";LAYER:")[1].split("\n")[0])
if ";LAYER:0" in data[lnum]:
end_list.append(0)
# Adjust the end list if an end layer was named
for index, num in enumerate(end_list):
if num > end_layer - 1:
end_list[index] = end_layer - 1
#If the gcode_to_enter is multi-line then replace the commas with newline characters
if mycode != "":
if "," in mycode:
mycode = re.sub(",", "\n",mycode)
gcode_to_add = mycode
#Get the insertion frequency
match when_to_insert:
case "every_layer":
freq = 1
case "every_2nd":
freq = 2
case "every_3rd":
freq = 3
case "every_5th":
freq = 5
case "every_10th":
freq = 10
case "every_25th":
freq = 25
case "every_50th":
freq = 50
case "every_100th":
freq = 100
case "once_only":
the_insert_layer = int(self.getSettingValueByKey("single_end_layer"))-1
case _:
raise ValueError(f"Unexpected insertion frequency {when_to_insert}")
#Single insertion
if when_to_insert == "once_only":
# For print sequence 'All at once'
if print_sequence == "all_at_once":
for index, layer in enumerate(data):
if ";LAYER:" + str(the_insert_layer) + "\n" in layer:
lines = layer.split("\n")
lines.insert(1,gcode_to_add)
data[index] = "\n".join(lines)
return data
# For print sequence 'One at a time'
else:
for index, layer in enumerate(data):
if ";LAYER:" + str(the_insert_layer) + "\n" in layer:
lines = layer.split("\n")
lines.insert(1,gcode_to_add)
data[index] = "\n".join(lines)
return data
# For multiple insertions
if when_to_insert != "once_only":
# Search from the line after the first Layer:0 so we know when a model ends if in One at a Time mode.
first_0 = True
next_layer = start_layer - 1
end_layer = end_list.pop(0)
for index, layer in enumerate(data):
lines = layer.split("\n")
for l_index, line in enumerate(lines):
if ";LAYER:" in line:
layer_number = int(line.split(":")[1])
if layer_number == next_layer and layer_number <= end_layer:
lines.insert(l_index + 1,gcode_to_add)
data[index] = "\n".join(lines)
next_layer += freq
# Reset the next_layer for one-at-a-time
if next_layer > int(end_layer):
next_layer = start_layer - 1
# Index to the next end_layer when a Layer:0 is encountered
try:
if not first_0 and layer_number == 0:
end_layer = end_list.pop(0)
except:
pass
# Beyond the initial Layer:0 futher Layer:0's indicate the top layer of a model.
if layer_number == 0:
first_0 = False
break
return data

View file

@ -1,9 +1,15 @@
# Copyright (c) 2020 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
# Created by Wayne Porter
# Modified 5/15/2023 - Greg Valiant (Greg Foresi)
# Created by Wayne Porter
# Added insertion frequency
# Adjusted for use with Relative Extrusion
# Changed Retract to a boolean and when true use the regular Cura retract settings.
# Use the regular Cura settings for Travel Speed and Speed_Z instead of asking.
# Added code to check the E location to prevent retracts if the filament was already retracted.
# Added 'Pause before image' per LemanRus
from ..Script import Script
from UM.Application import Application
from UM.Logger import Logger
class TimeLapse(Script):
def __init__(self):
@ -11,7 +17,7 @@ class TimeLapse(Script):
def getSettingDataString(self):
return """{
"name": "Time Lapse",
"name": "Time Lapse Camera",
"key": "TimeLapse",
"metadata": {},
"version": 2,
@ -19,24 +25,49 @@ class TimeLapse(Script):
{
"trigger_command":
{
"label": "Trigger camera command",
"description": "G-code command used to trigger camera.",
"label": "Camera Trigger Command",
"description": "G-code command used to trigger the camera. The setting box will take any command and parameters.",
"type": "str",
"default_value": "M240"
},
"insert_frequency":
{
"label": "How often (layers)",
"description": "Every so many layers (always starts at the first layer whether it's the model or a raft).",
"type": "enum",
"options": {
"every_layer": "Every Layer",
"every_2nd": "Every 2nd",
"every_3rd": "Every 3rd",
"every_5th": "Every 5th",
"every_10th": "Every 10th",
"every_25th": "Every 25th",
"every_50th": "Every 50th",
"every_100th": "Every 100th"},
"default_value": "every_layer"
},
"anti_shake_length":
{
"label": "Pause before image",
"description": "How long to wait (in ms) before capturing the image. This is to allow the printer to 'settle down' after movement. To disable set this to '0'.",
"type": "int",
"default_value": 0,
"minimum_value": 0,
"unit": "ms"
},
"pause_length":
{
"label": "Pause length",
"label": "Pause after image",
"description": "How long to wait (in ms) after camera was triggered.",
"type": "int",
"default_value": 700,
"default_value": 500,
"minimum_value": 0,
"unit": "ms"
},
"park_print_head":
{
"label": "Park Print Head",
"description": "Park the print head out of the way. Assumes absolute positioning.",
"description": "Park the print head out of the way.",
"type": "bool",
"default_value": true
},
@ -55,90 +86,166 @@ class TimeLapse(Script):
"description": "What Y location does the head move to for photo.",
"unit": "mm",
"type": "float",
"default_value": 190,
"enabled": "park_print_head"
},
"park_feed_rate":
{
"label": "Park Feed Rate",
"description": "How fast does the head move to the park coordinates.",
"unit": "mm/s",
"type": "float",
"default_value": 9000,
"default_value": 0,
"enabled": "park_print_head"
},
"retract":
{
"label": "Retraction Distance",
"description": "Filament retraction distance for camera trigger.",
"unit": "mm",
"type": "int",
"default_value": 0
"label": "Retract when required",
"description": "Retract if there isn't already a retraction. If unchecked then there will be no retraction even if there is none in the gcode. If retractions are not enabled in Cura there won't be a retraction. regardless of this setting.",
"type": "bool",
"default_value": true
},
"zhop":
{
"label": "Z-Hop Height When Parking",
"description": "Z-hop length before parking",
"description": "The height to lift the nozzle off the print before parking.",
"unit": "mm",
"type": "float",
"default_value": 0
"default_value": 2.0,
"minimum_value": 0.0
},
"ensure_final_image":
{
"label": "Ensure Final Image",
"description": "Depending on how the layer numbers work out with the 'How Often' frequency there might not be an image taken at the end of the last layer. This will ensure that one is taken. There is no parking as the Ending Gcode comes right up.",
"type": "bool",
"default_value": false
}
}
}"""
def execute(self, data):
feed_rate = self.getSettingValueByKey("park_feed_rate")
mycura = Application.getInstance().getGlobalContainerStack()
relative_extrusion = bool(mycura.getProperty("relative_extrusion", "value"))
extruder = mycura.extruderList
retract_speed = int(extruder[0].getProperty("retraction_speed", "value"))*60
retract_dist = round(float(extruder[0].getProperty("retraction_amount", "value")), 2)
retract_enabled = bool(extruder[0].getProperty("retraction_enable", "value"))
firmware_retract = bool(mycura.getProperty("machine_firmware_retract", "value"))
speed_z = int(extruder[0].getProperty("speed_z_hop", "value"))*60
if relative_extrusion:
rel_cmd = 83
else:
rel_cmd = 82
travel_speed = int(extruder[0].getProperty("speed_travel", "value"))*60
park_print_head = self.getSettingValueByKey("park_print_head")
x_park = self.getSettingValueByKey("head_park_x")
y_park = self.getSettingValueByKey("head_park_y")
trigger_command = self.getSettingValueByKey("trigger_command")
pause_length = self.getSettingValueByKey("pause_length")
retract = int(self.getSettingValueByKey("retract"))
retract = bool(self.getSettingValueByKey("retract"))
zhop = self.getSettingValueByKey("zhop")
gcode_to_append = ";TimeLapse Begin\n"
ensure_final_image = bool(self.getSettingValueByKey("ensure_final_image"))
when_to_insert = self.getSettingValueByKey("insert_frequency")
last_x = 0
last_y = 0
last_z = 0
last_e = 0
prev_e = 0
is_retracted = False
gcode_to_append = ""
if park_print_head:
gcode_to_append += self.putValue(G=1, F=feed_rate,
X=x_park, Y=y_park) + " ;Park print head\n"
gcode_to_append += self.putValue(M=400) + " ;Wait for moves to finish\n"
gcode_to_append += trigger_command + " ;Snap Photo\n"
gcode_to_append += self.putValue(G=4, P=pause_length) + " ;Wait for camera\n"
for idx, layer in enumerate(data):
for line in layer.split("\n"):
if self.getValue(line, "G") in {0, 1}: # Track X,Y,Z location.
last_x = self.getValue(line, "X", last_x)
last_y = self.getValue(line, "Y", last_y)
last_z = self.getValue(line, "Z", last_z)
# Check that a layer is being printed
lines = layer.split("\n")
for line in lines:
if ";LAYER:" in line:
if retract != 0: # Retract the filament so no stringing happens
layer += self.putValue(M=83) + " ;Extrude Relative\n"
layer += self.putValue(G=1, E=-retract, F=3000) + " ;Retract filament\n"
layer += self.putValue(M=82) + " ;Extrude Absolute\n"
layer += self.putValue(M=400) + " ;Wait for moves to finish\n" # Wait to fully retract before hopping
if zhop != 0:
layer += self.putValue(G=1, Z=last_z+zhop, F=3000) + " ;Z-Hop\n"
layer += gcode_to_append
if zhop != 0:
layer += self.putValue(G=0, X=last_x, Y=last_y, Z=last_z) + "; Restore position \n"
else:
layer += self.putValue(G=0, X=last_x, Y=last_y) + "; Restore position \n"
if retract != 0:
layer += self.putValue(M=400) + " ;Wait for moves to finish\n"
layer += self.putValue(M=83) + " ;Extrude Relative\n"
layer += self.putValue(G=1, E=retract, F=3000) + " ;Retract filament\n"
layer += self.putValue(M=82) + " ;Extrude Absolute\n"
data[idx] = layer
break
gcode_to_append += f"G0 F{travel_speed} X{x_park} Y{y_park} ;Park print head\n"
gcode_to_append += "M400 ;Wait for moves to finish\n"
anti_shake_length = self.getSettingValueByKey("anti_shake_length")
if anti_shake_length > 0:
gcode_to_append += f"G4 P{anti_shake_length} ;Wait for printer to settle down\n"
gcode_to_append += trigger_command + " ;Snap the Image\n"
gcode_to_append += f"G4 P{pause_length} ;Wait for camera to finish\n"
match when_to_insert:
case "every_layer":
step_freq = 1
case "every_2nd":
step_freq = 2
case "every_3rd":
step_freq = 3
case "every_5th":
step_freq = 5
case "every_10th":
step_freq = 10
case "every_25th":
step_freq = 25
case "every_50th":
step_freq = 50
case "every_100th":
step_freq = 100
case _:
step_freq = 1
# Use the step_freq to index through the layers----------------------------------------
for num in range(2,len(data)-1,step_freq):
layer = data[num]
try:
# Track X,Y,Z location.--------------------------------------------------------
for line in layer.split("\n"):
if self.getValue(line, "G") in {0, 1}:
last_x = self.getValue(line, "X", last_x)
last_y = self.getValue(line, "Y", last_y)
last_z = self.getValue(line, "Z", last_z)
#Track the E location so that if there is already a retraction we don't double dip.
if rel_cmd == 82:
if " E" in line:
last_e = line.split("E")[1]
if float(last_e) < float(prev_e):
is_retracted = True
else:
is_retracted = False
prev_e = last_e
elif rel_cmd == 83:
if " E" in line:
last_e = line.split("E")[1]
if float(last_e) < 0:
is_retracted = True
else:
is_retracted = False
prev_e = last_e
if firmware_retract and self.getValue(line, "G") in {10, 11}:
if self.getValue(line, "G") == 10:
is_retracted = True
last_e = float(prev_e) - float(retract_dist)
if self.getValue(line, "G") == 11:
is_retracted = False
last_e = float(prev_e) + float(retract_dist)
prev_e = last_e
lines = layer.split("\n")
# Insert the code----------------------------------------------------
camera_code = ""
for line in lines:
if ";LAYER:" in line:
if retract and not is_retracted and retract_enabled: # Retract unless already retracted
camera_code += ";TYPE:CUSTOM-----------------TimeLapse Begin\n"
camera_code += "M83 ;Extrude Relative\n"
if not firmware_retract:
camera_code += f"G1 F{retract_speed} E-{retract_dist} ;Retract filament\n"
else:
camera_code += "G10 ;Retract filament\n"
else:
camera_code += ";TYPE:CUSTOM-----------------TimeLapse Begin\n"
if zhop != 0:
camera_code += f"G1 F{speed_z} Z{round(last_z + zhop,2)} ;Z-Hop\n"
camera_code += gcode_to_append
camera_code += f"G0 F{travel_speed} X{last_x} Y{last_y} ;Restore XY position\n"
if zhop != 0:
camera_code += f"G0 F{speed_z} Z{last_z} ;Restore Z position\n"
if retract and not is_retracted and retract_enabled:
if not firmware_retract:
camera_code += f"G1 F{retract_speed} E{retract_dist} ;Un-Retract filament\n"
else:
camera_code += "G11 ;Un-Retract filament\n"
camera_code += f"M{rel_cmd} ;Extrude Mode\n"
camera_code += f";{'-' * 28}TimeLapse End"
# Format the camera code to be inserted
temp_lines = camera_code.split("\n")
for temp_index, temp_line in enumerate(temp_lines):
if ";" in temp_line and not temp_line.startswith(";"):
temp_lines[temp_index] = temp_line.replace(temp_line.split(";")[0], temp_line.split(";")[0] + str(" " * (29 - len(temp_line.split(";")[0]))),1)
temp_lines = "\n".join(temp_lines)
lines.insert(len(lines) - 2, temp_lines)
data[num] = "\n".join(lines)
break
except Exception as e:
Logger.log("w", "TimeLapse Error: " + repr(e))
# Take a final image if there was no camera shot at the end of the last layer.
if "TimeLapse Begin" not in data[len(data) - (3 if retract_enabled else 2)] and ensure_final_image:
data[len(data)-1] = "M400 ; Wait for all moves to finish\n" + trigger_command + " ;Snap the final Image\n" + f"G4 P{pause_length} ;Wait for camera\n" + data[len(data)-1]
return data

View file

@ -0,0 +1,103 @@
# Copyright (c) 2024 UltiMaker
# Cura is released under the terms of the LGPLv3 or higher.
import configparser
from typing import Dict, List, Tuple
import io
from UM.VersionUpgrade import VersionUpgrade
# Just to be sure, since in my testing there were both 0.1.0 and 0.2.0 settings about.
_PLUGIN_NAME = "_plugin__curaenginegradualflow"
_FROM_PLUGINS_SETTINGS = {
"gradual_flow_enabled",
"max_flow_acceleration",
"layer_0_max_flow_acceleration",
"gradual_flow_discretisation_step_size",
"reset_flow_duration",
} # type: Set[str]
_NEW_SETTING_VERSION = "24"
class VersionUpgrade58to59(VersionUpgrade):
def upgradePreferences(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]:
"""
Upgrades preferences to remove from the visibility list the settings that were removed in this version.
It also changes the preferences to have the new version number.
This removes any settings that were removed in the new Cura version.
: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"] = _NEW_SETTING_VERSION
# Fix renamed settings for visibility
if "visible_settings" in parser["general"]:
all_setting_keys = parser["general"]["visible_settings"].strip().split(";")
if all_setting_keys:
for idx, key in enumerate(all_setting_keys):
if key.startswith(_PLUGIN_NAME):
all_setting_keys[idx] = key.split("__")[-1]
parser["general"]["visible_settings"] = ";".join(all_setting_keys)
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 remove the settings that were removed in this version.
It also changes the instance containers to have the new version number.
This removes any settings that were removed in the new Cura version and updates settings that need to be updated
with a new value.
: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"] = _NEW_SETTING_VERSION
# Rename settings.
if "values" in parser:
for key, value in parser["values"].items():
if key.startswith(_PLUGIN_NAME):
parser["values"][key.split("__")[-1]] = parser["values"][key]
del parser["values"][key]
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"] = _NEW_SETTING_VERSION
result = io.StringIO()
parser.write(result)
return [filename], [result.getvalue()]

View file

@ -0,0 +1,61 @@
# Copyright (c) 2024 UltiMaker
# Cura is released under the terms of the LGPLv3 or higher.
from typing import Any, Dict, TYPE_CHECKING
from . import VersionUpgrade58to59
if TYPE_CHECKING:
from UM.Application import Application
upgrade = VersionUpgrade58to59.VersionUpgrade58to59()
def getMetaData() -> Dict[str, Any]:
return {
"version_upgrade": {
# From To Upgrade function
("preferences", 7000023): ("preferences", 7000024, upgrade.upgradePreferences),
("machine_stack", 6000023): ("machine_stack", 6000024, upgrade.upgradeStack),
("extruder_train", 6000023): ("extruder_train", 6000024, upgrade.upgradeStack),
("definition_changes", 4000023): ("definition_changes", 4000024, upgrade.upgradeInstanceContainer),
("quality_changes", 4000023): ("quality_changes", 4000024, upgrade.upgradeInstanceContainer),
("quality", 4000023): ("quality", 4000024, upgrade.upgradeInstanceContainer),
("user", 4000023): ("user", 4000024, upgrade.upgradeInstanceContainer),
("intent", 4000023): ("intent", 4000024, 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 5.8 to 5.9",
"author": "UltiMaker",
"version": "1.0.0",
"description": "Upgrades configurations from Cura 5.8 to Cura 5.9.",
"api": 8,
"i18n-catalog": "cura"
}

View file

@ -11,6 +11,7 @@ import xml.etree.ElementTree as ET
from UM.PluginRegistry import PluginRegistry
from UM.Resources import Resources
from UM.Logger import Logger
from UM.Decorators import CachedMemberFunctions
import UM.Dictionary
from UM.Settings.InstanceContainer import InstanceContainer
from UM.Settings.ContainerRegistry import ContainerRegistry
@ -71,6 +72,8 @@ class XmlMaterialProfile(InstanceContainer):
Logger.log("w", "Can't change metadata {key} of material {material_id} because it's read-only.".format(key = key, material_id = self.getId()))
return
CachedMemberFunctions.clearInstanceCache(self)
# Some metadata such as diameter should also be instantiated to be a setting. Go though all values for the
# "properties" field and apply the new values to SettingInstances as well.
new_setting_values_dict = {}
@ -480,6 +483,7 @@ class XmlMaterialProfile(InstanceContainer):
first.append(element)
def clearData(self):
CachedMemberFunctions.clearInstanceCache(self)
self._metadata = {
"id": self.getId(),
"name": ""
@ -519,6 +523,8 @@ class XmlMaterialProfile(InstanceContainer):
def deserialize(self, serialized, file_name = None):
"""Overridden from InstanceContainer"""
CachedMemberFunctions.clearInstanceCache(self)
containers_to_add = []
# update the serialized data first
from UM.Settings.Interfaces import ContainerInterface
@ -912,9 +918,6 @@ class XmlMaterialProfile(InstanceContainer):
base_metadata["properties"] = property_values
base_metadata["definition"] = "fdmprinter"
# Certain materials are loaded but should not be visible / selectable to the user.
base_metadata["visible"] = not base_metadata.get("abstract_color", False)
compatible_entries = data.iterfind("./um:settings/um:setting[@key='hardware compatible']", cls.__namespaces)
try:
common_compatibility = cls._parseCompatibleValue(next(compatible_entries).text) # type: ignore

View file

@ -1429,6 +1429,23 @@
}
}
},
"BASFUltrafuse316L": {
"package_info": {
"package_id": "BASFUltrafuse316L",
"package_type": "material",
"display_name": "BASF Ultrafuse 316L",
"description": "An innovative filament to produce 316L grade stainless steel parts.",
"package_version": "1.0.1",
"sdk_version": "8.6.0",
"website": "https://forward-am.com/material-portfolio/ultrafuse-filaments-for-fused-filaments-fabrication-fff/metal-filaments/ultrafuse-316l/",
"author": {
"author_id": "BASF",
"display_name": "BASF",
"email": null,
"website": "https://forward-am.com/"
}
}
},
"DagomaChromatikPLA": {
"package_info": {
"package_id": "DagomaChromatikPLA",
@ -1582,6 +1599,23 @@
}
}
},
"JabilTPE_SEBS1300_95a": {
"package_info": {
"package_id": "JabilTPE_SEBS1300_95a",
"package_type": "material",
"display_name": "Jabil TPE SEBS 1300 95a",
"description": "Soft material great for prototyping where rubber-like or elastomeric properties and durability are required.",
"package_version": "1.0.1",
"sdk_version": "8.6.0",
"website": "https://www.jabil.com/services/additive-manufacturing/additive-materials/compare-filaments/tpe-sebs-95a.html",
"author": {
"author_id": "Jabil",
"display_name": "Jabil",
"email": null,
"website": "https://www.jabil.com/"
}
}
},
"OctofiberPLA": {
"package_info": {
"package_id": "OctofiberPLA",
@ -1616,6 +1650,23 @@
}
}
},
"PolyMaxPC": {
"package_info": {
"package_id": "PolyMaxPC",
"package_type": "material",
"display_name": "PolyMax™ PC",
"description": "PolyMax™ PC is an engineered PC filament combining excellent strength, toughness, heat resistance and printing quality. It is the ideal choice for a wide range of engineering applications.",
"package_version": "1.0.1",
"sdk_version": "8.6.0",
"website": "http://www.polymaker.com/shop/polymax/",
"author": {
"author_id": "Polymaker",
"display_name": "Polymaker L.L.C.",
"email": "inquiry@polymaker.com",
"website": "https://www.polymaker.com"
}
}
},
"PolyMaxPLA": {
"package_info": {
"package_id": "PolyMaxPLA",
@ -1933,11 +1984,201 @@
}
}
},
"ULTIMAKERABSMETHOD": {
"package_info": {
"package_id": "ULTIMAKERABSMETHOD",
"package_type": "material",
"display_name": "ABS",
"description": "Example package for material and quality profiles for Ultimaker materials.",
"package_version": "2.0.0",
"sdk_version": "8.6.0",
"website": "https://ultimaker.com/materials/method-series-abs/",
"author": {
"author_id": "UltimakerPackages",
"display_name": "UltiMaker",
"email": "materials@ultimaker.com",
"website": "https://ultimaker.com",
"description": "Professional 3D printing made accessible.",
"support_website": "https://ultimaker.com/materials/method-materials/"
}
}
},
"ULTIMAKERNYLONMETHOD": {
"package_info": {
"package_id": "ULTIMAKERNYLONMETHOD",
"package_type": "material",
"display_name": "Nylon",
"description": "Example package for material and quality profiles for Ultimaker materials.",
"package_version": "2.0.0",
"sdk_version": "8.6.0",
"website": "https://ultimaker.com/materials/method-series-nylon/",
"author": {
"author_id": "UltimakerPackages",
"display_name": "UltiMaker",
"email": "materials@ultimaker.com",
"website": "https://ultimaker.com",
"description": "Professional 3D printing made accessible.",
"support_website": "https://ultimaker.com/materials/method-materials/"
}
}
},
"ULTIMAKERNYLONCFMETHOD": {
"package_info": {
"package_id": "ULTIMAKERNYLONCFMETHOD",
"package_type": "material",
"display_name": "Nylon Carbon Fiber",
"description": "Example package for material and quality profiles for Ultimaker materials.",
"package_version": "2.0.0",
"sdk_version": "8.6.0",
"website": "https://ultimaker.com/materials/method-series-nylon-carbon-fiber/",
"author": {
"author_id": "UltimakerPackages",
"display_name": "UltiMaker",
"email": "materials@ultimaker.com",
"website": "https://ultimaker.com",
"description": "Professional 3D printing made accessible.",
"support_website": "https://ultimaker.com/materials/method-materials/"
}
}
},
"ULTIMAKERPLAMETHOD": {
"package_info": {
"package_id": "ULTIMAKERPLAMETHOD",
"package_type": "material",
"display_name": "PLA",
"description": "Example package for material and quality profiles for Ultimaker materials.",
"package_version": "2.0.0",
"sdk_version": "8.6.0",
"website": "https://ultimaker.com/materials/method-series-pla/",
"author": {
"author_id": "UltimakerPackages",
"display_name": "UltiMaker",
"email": "materials@ultimaker.com",
"website": "https://ultimaker.com",
"description": "Professional 3D printing made accessible.",
"support_website": "https://ultimaker.com/materials/method-materials/"
}
}
},
"ULTIMAKERPVAMETHOD": {
"package_info": {
"package_id": "ULTIMAKERPVAMETHOD",
"package_type": "material",
"display_name": "PVA",
"description": "Example package for material and quality profiles for Ultimaker materials.",
"package_version": "2.0.0",
"sdk_version": "8.6.0",
"website": "https://ultimaker.com/materials/method-series-pva/",
"author": {
"author_id": "UltimakerPackages",
"display_name": "UltiMaker",
"email": "materials@ultimaker.com",
"website": "https://ultimaker.com",
"description": "Professional 3D printing made accessible.",
"support_website": "https://ultimaker.com/materials/method-materials/"
}
}
},
"ULTIMAKERPETGMETHOD": {
"package_info": {
"package_id": "ULTIMAKERPETGMETHOD",
"package_type": "material",
"display_name": "PETG",
"description": "Example package for material and quality profiles for Ultimaker materials.",
"package_version": "2.0.0",
"sdk_version": "8.6.0",
"website": "https://ultimaker.com/materials/method-series-petg/",
"author": {
"author_id": "UltimakerPackages",
"display_name": "UltiMaker",
"email": "materials@ultimaker.com",
"website": "https://ultimaker.com",
"description": "Professional 3D printing made accessible.",
"support_website": "https://ultimaker.com/materials/method-materials/"
}
}
},
"ULTIMAKERTOUGHMETHOD": {
"package_info": {
"package_id": "ULTIMAKERTOUGHMETHOD",
"package_type": "material",
"display_name": "Tough PLA",
"description": "Example package for material and quality profiles for Ultimaker materials.",
"package_version": "2.0.0",
"sdk_version": "8.6.0",
"website": "https://ultimaker.com/materials/method-series-tough/",
"author": {
"author_id": "UltimakerPackages",
"display_name": "UltiMaker",
"email": "materials@ultimaker.com",
"website": "https://ultimaker.com",
"description": "Professional 3D printing made accessible.",
"support_website": "https://ultimaker.com/materials/method-materials/"
}
}
},
"BASFMETALMETHOD": {
"package_info": {
"package_id": "BASFMETALMETHOD",
"package_type": "material",
"display_name": "BASF Ultrafuse 316L",
"description": "Example package for material and quality profiles for Ultimaker materials.",
"package_version": "2.0.0",
"sdk_version": "8.6.0",
"website": "https://ultimaker.com/materials/method-materials/#metal",
"author": {
"author_id": "UltimakerPackages",
"display_name": "UltiMaker",
"email": "materials@ultimaker.com",
"website": "https://ultimaker.com",
"description": "Professional 3D printing made accessible.",
"support_website": "https://ultimaker.com/materials/method-materials/"
}
}
},
"JABILSEBSMETHOD": {
"package_info": {
"package_id": "JABILSEBSMETHOD",
"package_type": "material",
"display_name": "Jabil TPE SEBS 95A",
"description": "Example package for material and quality profiles for Ultimaker materials.",
"package_version": "2.0.0",
"sdk_version": "8.6.0",
"website": "https://ultimaker.com/materials/method-materials/",
"author": {
"author_id": "UltimakerPackages",
"display_name": "UltiMaker",
"email": "materials@ultimaker.com",
"website": "https://ultimaker.com",
"description": "Professional 3D printing made accessible.",
"support_website": "https://ultimaker.com/materials/method-materials/"
}
}
},
"POLYMAKERPCMETHOD": {
"package_info": {
"package_id": "POLYMAKERPCMETHOD",
"package_type": "material",
"display_name": "Polymaker PolyMax PC",
"description": "Example package for material and quality profiles for Ultimaker materials.",
"package_version": "2.0.0",
"sdk_version": "8.6.0",
"website": "https://ultimaker.com/materials/method-materials/",
"author": {
"author_id": "UltimakerPackages",
"display_name": "UltiMaker",
"email": "materials@ultimaker.com",
"website": "https://ultimaker.com",
"description": "Professional 3D printing made accessible.",
"support_website": "https://ultimaker.com/materials/method-materials/"
}
}
},
"ULTIMAKERBASCFMETHOD": {
"package_info": {
"package_id": "ULTIMAKERBASCFMETHOD",
"package_type": "material",
"display_name": "Ultimaker ABS-CF",
"display_name": "ABS-CF",
"description": "Example package for material and quality profiles for Ultimaker materials.",
"package_version": "2.0.0",
"sdk_version": "8.6.0",
@ -1956,7 +2197,7 @@
"package_info": {
"package_id": "ULTIMAKERABSRMETHOD",
"package_type": "material",
"display_name": "Ultimaker ABS-R",
"display_name": "ABS-R",
"description": "Example package for material and quality profiles for Ultimaker materials.",
"package_version": "2.0.0",
"sdk_version": "8.6.0",
@ -1975,7 +2216,7 @@
"package_info": {
"package_id": "ULTIMAKERASAMETHOD",
"package_type": "material",
"display_name": "Ultimaker ASA",
"display_name": "ASA",
"description": "Example package for material and quality profiles for Ultimaker materials.",
"package_version": "2.0.0",
"sdk_version": "8.6.0",
@ -1994,7 +2235,7 @@
"package_info": {
"package_id": "ULTIMAKERNYLON12CFMETHOD",
"package_type": "material",
"display_name": "Ultimaker Nylon12 Carbon Fiber",
"display_name": "Nylon12 Carbon Fiber",
"description": "Example package for material and quality profiles for Ultimaker materials.",
"package_version": "2.0.0",
"sdk_version": "8.6.0",
@ -2013,7 +2254,7 @@
"package_info": {
"package_id": "ULTIMAKERRAPIDRINSEMETHOD",
"package_type": "material",
"display_name": "Ultimaker RapidRinse",
"display_name": "RapidRinse",
"description": "Example package for material and quality profiles for Ultimaker materials.",
"package_version": "2.0.0",
"sdk_version": "8.6.0",
@ -2032,7 +2273,7 @@
"package_info": {
"package_id": "ULTIMAKERSR30METHOD",
"package_type": "material",
"display_name": "Ultimaker SR-30",
"display_name": "SR-30",
"description": "Example package for material and quality profiles for Ultimaker materials.",
"package_version": "2.0.0",
"sdk_version": "8.6.0",

View file

@ -1 +1 @@
version: "5.8.0"
version: "5.9.0-alpha.0"

View file

@ -36,9 +36,9 @@
},
"machine_heated_bed": { "default_value": true },
"machine_height": { "default_value": 250 },
"machine_max_acceleration_e": { "value": 5000 },
"machine_max_acceleration_x": { "value": 5000.0 },
"machine_max_acceleration_y": { "value": 5000.0 },
"machine_max_acceleration_e": { "value": 2500 },
"machine_max_acceleration_x": { "value": 2500.0 },
"machine_max_acceleration_y": { "value": 2500.0 },
"machine_max_acceleration_z": { "value": 500.0 },
"machine_max_feedrate_e": { "value": 100 },
"machine_max_feedrate_x": { "value": 500 },

View file

@ -172,7 +172,6 @@
"default_value": 3,
"description": "The height difference between the tip of the nozzle and the lowest part of the print head.",
"label": "Nozzle Length",
"settable_globally": false,
"settable_per_extruder": true,
"settable_per_mesh": false,
"settable_per_meshgroup": false,

View file

@ -16,7 +16,8 @@
"preferred_quality_type": "normal",
"machine_extruder_trains": { "0": "fdmextruder" },
"supports_usb_connection": true,
"supports_network_connection": false
"supports_network_connection": false,
"supports_abstract_color": false
},
"settings":
{
@ -6063,7 +6064,7 @@
"none": "None"
},
"default_value": "brim",
"resolve": "extruderValue(adhesion_extruder_nr, 'adhesion_type')",
"resolve": "min(extruderValues('adhesion_type'), key=('raft', 'brim', 'skirt', 'none').index)",
"settable_per_mesh": false,
"settable_per_extruder": false
},
@ -8923,6 +8924,111 @@
"type": "bool",
"default_value": true,
"settable_per_mesh": true
},
"scarf_joint_seam_length":
{
"label": "Scarf Seam Length",
"description": "When greater than 0, a scarf joint will be created on the Z seam to make it less visible.",
"type": "float",
"default_value": 0,
"minimum_value": "0",
"unit": "mm",
"limit_to_extruder": "wall_0_extruder_nr",
"settable_per_extruder": true,
"settable_per_mesh": true
},
"scarf_joint_seam_start_height_ratio":
{
"label": "Scarf Seam Start Height",
"description": "This is the ratio over the total layer height where the scarf joint seam will start.",
"type": "float",
"default_value": 0,
"minimum_value": 0,
"maximum_value": 100.0,
"unit": "%",
"limit_to_extruder": "wall_0_extruder_nr",
"settable_per_extruder": true,
"settable_per_mesh": true
},
"scarf_split_distance":
{
"label": "Scarf Seam Split Distance",
"description": "This is the maximum length of an extrusion path when splitting a longer path to apply the scarf seam. A smaller distance will create a more precise but also more verbose G-Code.",
"type": "float",
"default_value": 1.0,
"minimum_value": 0.1,
"maximum_value": 100.0,
"unit": "mm",
"limit_to_extruder": "wall_0_extruder_nr",
"settable_per_extruder": true,
"settable_per_mesh": true
},
"wall_0_start_speed_ratio":
{
"label": "Outer Wall Start Speed Ratio",
"description": "This is the ratio of the top speed to start with when printing an outer wall.",
"type": "float",
"default_value": 100.0,
"minimum_value": 0.0,
"maximum_value": 100.0,
"unit": "%",
"limit_to_extruder": "wall_0_extruder_nr",
"settable_per_extruder": true,
"settable_per_mesh": true
},
"wall_0_acceleration":
{
"label": "Outer Wall Acceleration",
"description": "This is the acceleration with which to reach the top speed when printing an outer wall.",
"enabled": "wall_0_start_speed_ratio < 100.0",
"type": "float",
"default_value": 20.0,
"minimum_value": 1.0,
"maximum_value": 1000.0,
"unit": "mm/s\u00b2",
"limit_to_extruder": "wall_0_extruder_nr",
"settable_per_extruder": true,
"settable_per_mesh": true
},
"wall_0_end_speed_ratio":
{
"label": "Outer Wall End Speed Ratio",
"description": "This is the ratio of the top speed to end with when printing an outer wall.",
"type": "float",
"default_value": 100.0,
"minimum_value": 0.0,
"maximum_value": 100.0,
"unit": "%",
"limit_to_extruder": "wall_0_extruder_nr",
"settable_per_extruder": true,
"settable_per_mesh": true
},
"wall_0_deceleration":
{
"label": "Outer Wall Deceleration",
"description": "This is the deceleration with which to end printing an outer wall.",
"enabled": "wall_0_end_speed_ratio < 100.0",
"type": "float",
"default_value": 20.0,
"minimum_value": 1.0,
"maximum_value": 1000.0,
"unit": "mm/s\u00b2",
"limit_to_extruder": "wall_0_extruder_nr",
"settable_per_extruder": true,
"settable_per_mesh": true
},
"wall_0_speed_split_distance":
{
"label": "Outer Wall Speed Split Distance",
"description": "This is the maximum length of an extrusion path when splitting a longer path to apply the outer wall acceleration/deceleration. A smaller distance will create a more precise but also more verbose G-Code.",
"type": "float",
"default_value": 1.0,
"minimum_value": 0.1,
"maximum_value": 100.0,
"unit": "mm",
"limit_to_extruder": "wall_0_extruder_nr",
"settable_per_extruder": true,
"settable_per_mesh": true
}
}
},

View file

@ -70,14 +70,12 @@
"machine_max_feedrate_e": { "default_value": 45 },
"material_bed_temperature":
{
"maximum_value": "140",
"maximum_value_warning": "120",
"maximum_value": "120",
"minimum_value": "0"
},
"material_bed_temperature_layer_0":
{
"maximum_value": "140",
"maximum_value_warning": "120",
"maximum_value": "120",
"minimum_value": "0"
},
"material_print_temp_wait": { "value": false },

View file

@ -26,7 +26,9 @@
"ultimaker_petcf",
"ultimaker_petg",
"ultimaker_pva",
"ultimaker_tough_pla"
"ultimaker_tough_pla",
"generic_cffpps",
"ultimaker_ppscf"
],
"firmware_file": "MarlinUltimaker2.hex",
"has_machine_quality": true,

View file

@ -21,7 +21,9 @@
"generic_hips",
"generic_petcf",
"structur3d_",
"ultimaker_petcf"
"ultimaker_petcf",
"generic_cffpps",
"ultimaker_ppscf"
],
"firmware_update_info":
{

View file

@ -39,6 +39,7 @@
"preferred_quality_type": "draft",
"preferred_variant_name": "AA 0.4",
"supported_actions": [ "DiscoverUM3Action" ],
"supports_abstract_color": true,
"supports_material_export": true,
"supports_network_connection": true,
"supports_usb_connection": false,
@ -112,10 +113,10 @@
"machine_head_with_fans_polygon":
{
"default_value": [
[-30, -80],
[-30, 20],
[50, 20],
[50, -80]
[-35, -80],
[-35, 30],
[55, 30],
[55, -80]
]
},
"machine_heated_bed": { "default_value": true },

View file

@ -23,19 +23,7 @@
"fabtotum_",
"fdplast_",
"filo3d_",
"generic_asa_175",
"generic_abs_175",
"generic_bvoh_175",
"generic_petg_175",
"generic_pla_175",
"generic_tough_pla_175",
"generic_pva_175",
"generic_cffpa_175",
"generic_cpe_175",
"generic_nylon_175",
"generic_hips_175",
"generic_pc_175",
"generic_tpu_175",
"generic_",
"goofoo_",
"ideagen3D_",
"imade3d_",
@ -44,6 +32,7 @@
"leapfrog_",
"polyflex_pla",
"polymax_pla",
"polymaker_polymax_pc_175",
"polyplus_pla",
"polywood_pla",
"redd_",
@ -53,23 +42,23 @@
"ultimaker_absr_175",
"ultimaker_abscf_175",
"ultimaker_bvoh_175",
"ultimaker_petg_175",
"ultimaker_cffpa_175",
"ultimaker_cpe_175",
"ultimaker_nylon_175",
"ultimaker_hips_175",
"ultimaker_pc_175",
"ultimaker_tpu_175",
"ultimaker_tough_pla_175",
"ultimaker_rapidrinse_175",
"ultimaker_sr30",
"ultimaker_metallic_pla_175",
"verbatim_",
"Vertex_",
"volumic_",
"xyzprinting_",
"zyyx_pro_",
"octofiber_",
"fiberlogy_"
"fiberlogy_",
"ultimaker_metallic_pla_175"
],
"has_machine_materials": true,
"has_machine_quality": true,
@ -98,39 +87,7 @@
"overrides":
{
"build_volume_temperature": { "maximum_value": "67" },
"machine_depth": { "default_value": 236.48 },
"machine_disallowed_areas":
{
"default_value": [
[
[-141.65, -118.11],
[141.65, -118.11],
[141.65, -94],
[-141.65, -94]
],
[
[-141.65, 118.37],
[141.65, 118.37],
[141.65, 94],
[-141.65, 94]
],
[
[-141.65, -118.11],
[-75, -118.11],
[-75, 118.37],
[-141.65, 118.37]
],
[
[75, -118.11],
[141.65, -118.11],
[141.65, 118.37],
[75, 118.37]
]
]
},
"machine_height": { "default_value": 196 },
"machine_name": { "default_value": "UltiMaker Method" },
"machine_width": { "default_value": 283.3 },
"prime_tower_position_x": { "value": "(150 / 2 + resolveOrValue('prime_tower_size') / 2) if resolveOrValue('machine_shape') == 'elliptic' else (150 - (resolveOrValue('prime_tower_base_size') if (resolveOrValue('adhesion_type') == 'raft' or resolveOrValue('prime_tower_brim_enable')) else 0) - max(max(extruderValues('travel_avoid_distance')) + max(extruderValues('support_offset')) + (extruderValue(skirt_brim_extruder_nr, 'skirt_brim_line_width') * extruderValue(skirt_brim_extruder_nr, 'skirt_line_count') * extruderValue(skirt_brim_extruder_nr, 'initial_layer_line_width_factor') / 100 + extruderValue(skirt_brim_extruder_nr, 'skirt_gap') if resolveOrValue('adhesion_type') == 'skirt' else 0) + (resolveOrValue('draft_shield_dist') if resolveOrValue('draft_shield_enabled') else 0), max(map(abs, extruderValues('machine_nozzle_offset_x'))), 1)) - (150 / 2 if resolveOrValue('machine_center_is_zero') else 0)" },
"prime_tower_position_y": { "value": "190 - prime_tower_size - (resolveOrValue('prime_tower_base_size') if (resolveOrValue('adhesion_type') == 'raft' or resolveOrValue('prime_tower_brim_enable')) else 0) - max(max(extruderValues('travel_avoid_distance')) + max(extruderValues('support_offset')) + (extruderValue(skirt_brim_extruder_nr, 'skirt_brim_line_width') * extruderValue(skirt_brim_extruder_nr, 'skirt_line_count') * extruderValue(skirt_brim_extruder_nr, 'initial_layer_line_width_factor') / 100 + extruderValue(skirt_brim_extruder_nr, 'skirt_gap') if resolveOrValue('adhesion_type') == 'skirt' else 0) + (resolveOrValue('draft_shield_dist') if resolveOrValue('draft_shield_enabled') else 0), max(map(abs, extruderValues('machine_nozzle_offset_y'))), 1) - (190 / 2 if resolveOrValue('machine_center_is_zero') else 0)" }
}

View file

@ -9,42 +9,7 @@
"manufacturer": "Ultimaker B.V.",
"file_formats": "application/x-makerbot",
"platform": "ultimaker_method_platform.stl",
"exclude_materials": [
"dsm_",
"Essentium_",
"imade3d_",
"chromatik_",
"3D-Fuel_",
"bestfilament_",
"emotiontech_",
"eryone_",
"eSUN_",
"Extrudr_",
"fabtotum_",
"fdplast_",
"filo3d_",
"generic_",
"ultimaker_rapidrinse_175",
"goofoo_",
"ideagen3D_",
"imade3d_",
"innofill_",
"layer_one_",
"leapfrog_",
"polyflex_pla",
"polymax_pla",
"polyplus_pla",
"polywood_pla",
"redd_",
"tizyx_",
"verbatim_",
"Vertex_",
"volumic_",
"xyzprinting_",
"zyyx_pro_",
"octofiber_",
"fiberlogy_"
],
"exclude_materials": [],
"has_machine_materials": true,
"has_machine_quality": true,
"has_materials": true,
@ -170,13 +135,15 @@
"enabled": false,
"value": "acceleration_print"
},
"adhesion_extruder_nr": { "value": 0 },
"adhesion_extruder_nr":
{
"enabled": false,
"value": "min(extruderValues('extruder_nr'))"
},
"adhesion_type": { "value": "'raft'" },
"bottom_thickness": { "value": "top_bottom_thickness" },
"bridge_enable_more_layers": { "value": true },
"bridge_fan_speed": { "value": "cool_fan_speed_max" },
"bridge_fan_speed_2": { "value": "(cool_fan_speed_max + cool_fan_speed_min) / 2" },
"bridge_fan_speed_3": { "value": "cool_fan_speed_min" },
"bridge_settings_enabled": { "value": true },
"bridge_skin_density": { "value": 100 },
"bridge_skin_density_2": { "value": 100 },
"bridge_skin_density_3": { "value": 100 },
@ -195,14 +162,38 @@
{
"force_depends_on_settings": [ "support_extruder_nr" ]
},
"cool_fan_full_at_height": { "value": "1 if resolveOrValue('adhesion_type') == 'raft' else layer_height + layer_height_0" },
"cool_fan_full_layer": { "value": "1 if resolveOrValue('adhesion_type') == 'raft' else 3" },
"default_material_bed_temperature": { "resolve": "min(extruderValues('default_material_bed_temperature'))" },
"extruder_prime_pos_abs": { "default_value": true },
"gradual_support_infill_steps": { "value": 0 },
"group_outer_walls": { "value": false },
"infill_angles":
{
"value": [
45,
45,
45,
45,
45,
135,
135,
135,
135,
135
]
},
"infill_before_walls": { "value": false },
"infill_material_flow": { "value": "material_flow" },
"infill_overlap": { "value": 0 },
"infill_pattern": { "value": "'grid' if infill_sparse_density < 80 else 'lines'" },
"infill_pattern": { "value": "'zigzag'" },
"infill_wipe_dist": { "value": 0 },
"initial_layer_line_width_factor":
{
"maximum_value": 350,
"maximum_value_warning": 320,
"value": "100 if resolveOrValue('adhesion_type') == 'raft' else 200"
},
"inset_direction": { "value": "'inside_out'" },
"jerk_enabled":
{
@ -309,22 +300,37 @@
"enabled": false,
"value": "jerk_print"
},
"layer_height_0": { "value": "layer_height if resolveOrValue('adhesion_type') == 'raft' else layer_height * 1.25" },
"machine_acceleration": { "default_value": 3000 },
"machine_center_is_zero": { "value": true },
"machine_depth": { "default_value": 236.48 },
"machine_disallowed_areas": { "value": "[ [ [-141.65, -118.11], [141.65, -118.11], [141.65, -95.205], [-141.65, -95.205] ], [ [-141.65, 118.37], [141.65, 118.37], [141.65, 95.205], [-141.65, 95.205] ], [ [-141.65, -118.11], [-114.249, -118.11], [-114.249, 118.37], [-141.65, 118.37] ], [ [76.149, -118.11], [141.65, -118.11], [141.65, 118.37], [76.149, 118.37] ] ] if max(extruderValues('extruder_nr')) == 0 else [ [ [-141.65, -118.11], [141.65, -118.11], [141.65, -95.205], [-141.65, -95.205] ], [ [-141.65, 118.37], [141.65, 118.37], [141.65, 95.205], [-141.65, 95.205] ], [ [-141.65, -118.11], [-76.149, -118.11], [-76.149, 118.37], [-141.65, 118.37] ], [ [76.149, -118.11], [141.65, -118.11], [141.65, 118.37], [76.149, 118.37] ] ]" },
"machine_end_gcode": { "default_value": "" },
"machine_extruder_count": { "default_value": 2 },
"machine_gcode_flavor": { "default_value": "Griffin" },
"machine_heated_bed": { "default_value": false },
"machine_heated_build_volume": { "default_value": true },
"machine_height": { "default_value": 196.749 },
"machine_min_cool_heat_time_window": { "value": 15 },
"machine_name": { "default_value": "UltiMaker Method" },
"machine_nozzle_cool_down_speed": { "value": 0.8 },
"machine_nozzle_heat_up_speed": { "value": 3.5 },
"machine_scale_fan_speed_zero_to_one": { "value": true },
"machine_start_gcode": { "default_value": "G0 Z20" },
"machine_width": { "default_value": 283.3 },
"material_bed_temperature": { "enabled": "machine_heated_bed" },
"material_final_print_temperature":
{
"maximum_value": "material_print_temperature",
"minimum_value": "material_standby_temperature"
},
"material_flow": { "value": 100 },
"material_initial_print_temperature": { "value": "material_print_temperature-10" },
"material_initial_print_temperature":
{
"maximum_value": "material_print_temperature",
"minimum_value": "material_standby_temperature",
"value": "material_print_temperature-5"
},
"material_print_temperature":
{
"force_depends_on_settings": [ "support_extruder_nr" ]
@ -336,20 +342,34 @@
"multiple_mesh_overlap": { "value": 0 },
"optimize_wall_printing_order": { "value": true },
"prime_blob_enable": { "enabled": false },
"prime_tower_base_curve_magnitude": { "value": 2 },
"prime_tower_base_height": { "value": 6 },
"prime_tower_base_size": { "value": 10 },
"prime_tower_enable": { "value": false },
"prime_tower_flow": { "value": "material_flow" },
"prime_tower_line_width": { "value": 1 },
"prime_tower_line_width":
{
"maximum_value": 2,
"maximum_value_warning": 1.5,
"value": 1
},
"prime_tower_mode":
{
"resolve": "'normal'",
"value": "'normal'"
},
"prime_tower_raft_base_line_spacing": { "value": "raft_base_line_width" },
"prime_tower_wipe_enabled": { "value": true },
"print_sequence": { "enabled": false },
"raft_acceleration": { "enabled": false },
"raft_airgap":
{
"force_depends_on_settings": [ "support_extruder_nr" ]
},
"raft_base_acceleration": { "enabled": false },
"raft_base_extruder_nr":
{
"enabled": false,
"value": "min(extruderValues('extruder_nr'))"
},
"raft_base_fan_speed": { "value": 0 },
"raft_base_jerk": { "enabled": false },
"raft_base_line_spacing":
{
"force_depends_on_settings": [ "raft_interface_extruder_nr" ],
@ -358,9 +378,10 @@
"raft_base_line_width":
{
"force_depends_on_settings": [ "raft_interface_extruder_nr" ],
"maximum_value": 2.5,
"maximum_value_warning": 1.8,
"value": 1.4
},
"raft_base_speed": { "value": 10 },
"raft_base_thickness":
{
"force_depends_on_settings": [
@ -369,24 +390,24 @@
],
"value": 0.8
},
"raft_base_wall_count":
{
"force_depends_on_settings": [ "support_extruder_nr" ],
"value": "raft_wall_count"
},
"raft_interface_extruder_nr": { "value": "raft_surface_extruder_nr" },
"raft_base_wall_count": { "value": "raft_wall_count" },
"raft_interface_acceleration": { "enabled": false },
"raft_interface_extruder_nr": { "value": "max(extruderValues('extruder_nr'))" },
"raft_interface_fan_speed": { "value": 0 },
"raft_interface_infill_overlap":
{
"force_depends_on_settings": [ "raft_interface_extruder_nr" ]
},
"raft_interface_infill_overlap_mm": { "maximum_value_warning": "2 * machine_nozzle_size" },
"raft_interface_jerk": { "enabled": false },
"raft_interface_layers": { "value": 2 },
"raft_interface_line_spacing":
{
"force_depends_on_settings": [
"raft_base_thickness",
"raft_interface_extruder_nr"
]
],
"minimum_value_warning": "raft_interface_line_width * 0.8"
},
"raft_interface_line_width":
{
@ -396,7 +417,11 @@
],
"value": 0.7
},
"raft_interface_speed": { "value": 90 },
"raft_interface_speed":
{
"force_depends_on_settings": [ "support_extruder_nr" ],
"value": "raft_speed * 5"
},
"raft_interface_thickness": { "value": 0.3 },
"raft_interface_wall_count": { "value": "raft_wall_count" },
"raft_interface_z_offset":
@ -406,14 +431,18 @@
"raft_interface_extruder_nr"
]
},
"raft_jerk": { "enabled": false },
"raft_margin": { "value": 1.2 },
"raft_smoothing": { "value": 9.5 },
"raft_surface_extruder_nr": { "value": "int(anyExtruderWithMaterial('material_is_support_material')) if support_enable and extruderValue(support_extruder_nr,'material_is_support_material') else raft_base_extruder_nr" },
"raft_speed": { "value": 10 },
"raft_surface_acceleration": { "enabled": false },
"raft_surface_extruder_nr": { "value": "max(extruderValues('extruder_nr'))" },
"raft_surface_fan_speed": { "value": 0 },
"raft_surface_flow":
{
"force_depends_on_settings": [ "support_extruder_nr" ]
},
"raft_surface_jerk": { "enabled": false },
"raft_surface_speed":
{
"force_depends_on_settings": [ "support_extruder_nr" ]
@ -430,27 +459,55 @@
"raft_wall_count": { "value": 2 },
"retract_at_layer_change": { "value": true },
"retraction_amount": { "value": 0.75 },
"retraction_combing": { "value": "'off'" },
"retraction_combing":
{
"enabled": false,
"value": "'off'"
},
"retraction_combing_max_distance": { "value": "speed_travel / 10" },
"retraction_count_max": { "value": 100 },
"retraction_extrusion_window": { "value": 0 },
"retraction_hop": { "value": 0.4 },
"retraction_hop_enabled": { "value": true },
"retraction_hop_only_when_collides": { "value": false },
"retraction_min_travel": { "value": "0.6" },
"retraction_min_travel":
{
"minimum_value_warning": "line_width * 1.25",
"value": 0.6
},
"retraction_prime_speed": { "value": "retraction_speed" },
"retraction_speed": { "value": 5 },
"roofing_layer_count": { "value": 2 },
"roofing_material_flow": { "value": "material_flow" },
"roofing_monotonic": { "value": true },
"roofing_angles":
{
"value": [45, 135]
},
"roofing_layer_count":
{
"maximum_value_warning": 10,
"minimum_value": 0,
"minimum_value_warning": 1,
"value": 2
},
"skin_angles":
{
"value": [0, 90]
},
"skin_material_flow": { "value": "material_flow" },
"skin_material_flow_layer_0": { "value": "material_flow" },
"skin_monotonic": { "value": true },
"skin_outline_count": { "value": 0 },
"skin_overlap": { "value": 0 },
"skin_preshrink": { "value": 0 },
"skirt_brim_extruder_nr":
{
"enabled": false,
"value": "min(extruderValues('extruder_nr'))"
},
"skirt_brim_line_width": { "value": 1 },
"skirt_brim_material_flow": { "value": "material_flow" },
"skirt_brim_minimal_length": { "value": 500 },
"skirt_gap": { "value": 2 },
"skirt_height": { "value": 3 },
"small_skin_width": { "value": 4 },
"speed_equalize_flow_width_factor": { "value": 0 },
"speed_prime_tower": { "value": "speed_topbottom" },
@ -465,34 +522,58 @@
"speed_wall_x": { "value": "speed_wall" },
"support_angle": { "value": 40 },
"support_bottom_height": { "value": "2*support_infill_sparse_thickness" },
"support_bottom_line_width":
{
"maximum_value": 3,
"maximum_value_warning": 1.8
},
"support_bottom_material_flow": { "value": "material_flow" },
"support_bottom_wall_count": { "value": "0" },
"support_bottom_wall_count":
{
"maximum_value": 8,
"maximum_value_warning": 6,
"value": 0
},
"support_brim_enable": { "value": false },
"support_conical_min_width": { "value": 10 },
"support_enable": { "value": true },
"support_extruder_nr": { "value": "int(anyExtruderWithMaterial('material_is_support_material'))" },
"support_fan_enable": { "value": "True" },
"support_infill_angles":
{
"value": [
45
]
},
"support_infill_rate": { "value": 20.0 },
"support_infill_sparse_thickness": { "value": "layer_height" },
"support_interface_enable": { "value": true },
"support_interface_height": { "value": "4*support_infill_sparse_thickness" },
"support_interface_material_flow": { "value": "material_flow" },
"support_interface_offset": { "value": "1" },
"support_interface_pattern": { "value": "'lines'" },
"support_interface_pattern": { "value": "'zigzag' if support_wall_count > 1 else 'lines'" },
"support_interface_wall_count": { "value": "1" },
"support_join_distance": { "value": "4.5 if support_wall_count > 1 else 2" },
"support_material_flow": { "value": "material_flow" },
"support_offset": { "value": "1.8" },
"support_pattern": { "value": "'lines'" },
"support_offset": { "value": "2.4 if support_wall_count > 1 else 1.8" },
"support_pattern": { "value": "'zigzag' if support_wall_count > 1 else 'lines'" },
"support_roof_height": { "value": "4*layer_height" },
"support_roof_material_flow": { "value": "material_flow" },
"support_supported_skin_fan_speed": { "value": "cool_fan_speed_max" },
"support_use_towers": { "value": "False" },
"support_use_towers": { "value": false },
"support_wall_count": { "value": "2 if support_conical_enabled or support_structure == 'tree' else 0" },
"support_xy_distance": { "value": 0.2 },
"support_xy_distance_overhang": { "value": "support_xy_distance" },
"switch_extruder_retraction_amount": { "value": 0.5 },
"switch_extruder_retraction_speeds": { "value": "retraction_speed" },
"top_bottom_thickness": { "value": "5*layer_height" },
"top_bottom_pattern": { "value": "'zigzag'" },
"top_bottom_pattern_0": { "value": "'zigzag'" },
"top_bottom_thickness":
{
"minimum_value_warning": 0.3,
"value": "4*layer_height"
},
"top_thickness": { "value": "top_bottom_thickness * 1.5" },
"travel_avoid_distance": { "value": "3 if extruders_enabled_count > 1 else machine_nozzle_tip_outer_diameter / 2 * 1.5" },
"travel_avoid_other_parts": { "value": false },
"wall_0_inset": { "value": 0 },

View file

@ -36,14 +36,15 @@
"polywood_pla",
"redd_",
"tizyx_",
"ultimaker_tough_pla_175",
"verbatim_",
"Vertex_",
"volumic_",
"xyzprinting_",
"zyyx_pro_",
"octofiber_",
"fiberlogy_"
"fiberlogy_",
"ultimaker_nylon_175",
"ultimaker_metallic_pla_175"
],
"has_machine_materials": true,
"has_machine_quality": true,
@ -72,39 +73,7 @@
"overrides":
{
"build_volume_temperature": { "maximum_value": "107" },
"machine_depth": { "default_value": 236.48 },
"machine_disallowed_areas":
{
"default_value": [
[
[-141.65, -118.11],
[141.65, -118.11],
[141.65, -94],
[-141.65, -94]
],
[
[-141.65, 118.37],
[141.65, 118.37],
[141.65, 94],
[-141.65, 94]
],
[
[-141.65, -118.11],
[-75, -118.11],
[-75, 118.37],
[-141.65, 118.37]
],
[
[75, -118.11],
[141.65, -118.11],
[141.65, 118.37],
[75, 118.37]
]
]
},
"machine_height": { "default_value": 196 },
"machine_name": { "default_value": "UltiMaker Method X" },
"machine_width": { "default_value": 283.3 },
"prime_tower_position_x": { "value": "(150 / 2 + resolveOrValue('prime_tower_size') / 2) if resolveOrValue('machine_shape') == 'elliptic' else (150 - (resolveOrValue('prime_tower_base_size') if (resolveOrValue('adhesion_type') == 'raft' or resolveOrValue('prime_tower_brim_enable')) else 0) - max(max(extruderValues('travel_avoid_distance')) + max(extruderValues('support_offset')) + (extruderValue(skirt_brim_extruder_nr, 'skirt_brim_line_width') * extruderValue(skirt_brim_extruder_nr, 'skirt_line_count') * extruderValue(skirt_brim_extruder_nr, 'initial_layer_line_width_factor') / 100 + extruderValue(skirt_brim_extruder_nr, 'skirt_gap') if resolveOrValue('adhesion_type') == 'skirt' else 0) + (resolveOrValue('draft_shield_dist') if resolveOrValue('draft_shield_enabled') else 0), max(map(abs, extruderValues('machine_nozzle_offset_x'))), 1)) - (150 / 2 if resolveOrValue('machine_center_is_zero') else 0)" },
"prime_tower_position_y": { "value": "190 - prime_tower_size - (resolveOrValue('prime_tower_base_size') if (resolveOrValue('adhesion_type') == 'raft' or resolveOrValue('prime_tower_brim_enable')) else 0) - max(max(extruderValues('travel_avoid_distance')) + max(extruderValues('support_offset')) + (extruderValue(skirt_brim_extruder_nr, 'skirt_brim_line_width') * extruderValue(skirt_brim_extruder_nr, 'skirt_line_count') * extruderValue(skirt_brim_extruder_nr, 'initial_layer_line_width_factor') / 100 + extruderValue(skirt_brim_extruder_nr, 'skirt_gap') if resolveOrValue('adhesion_type') == 'skirt' else 0) + (resolveOrValue('draft_shield_dist') if resolveOrValue('draft_shield_enabled') else 0), max(map(abs, extruderValues('machine_nozzle_offset_y'))), 1) - (190 / 2 if resolveOrValue('machine_center_is_zero') else 0)" }
}

View file

@ -9,6 +9,44 @@
"manufacturer": "Ultimaker B.V.",
"file_formats": "application/x-makerbot",
"platform": "ultimaker_method_xl_platform.stl",
"exclude_materials": [
"dsm_",
"Essentium_",
"imade3d_",
"chromatik_",
"3D-Fuel_",
"bestfilament_",
"emotiontech_",
"eryone_",
"eSUN_",
"Extrudr_",
"fabtotum_",
"fdplast_",
"filo3d_",
"generic_",
"goofoo_",
"ideagen3D_",
"imade3d_",
"innofill_",
"layer_one_",
"leapfrog_",
"polyflex_pla",
"polymax_pla",
"polyplus_pla",
"polywood_pla",
"redd_",
"tizyx_",
"verbatim_",
"Vertex_",
"volumic_",
"xyzprinting_",
"zyyx_pro_",
"octofiber_",
"fiberlogy_",
"basf_ultrafuse_316l_175",
"ultimaker_nylon_175",
"ultimaker_metallic_pla_175"
],
"has_machine_materials": true,
"has_machine_quality": true,
"has_materials": true,
@ -18,6 +56,11 @@
"0": "ultimaker_methodxl_extruder_left",
"1": "ultimaker_methodxl_extruder_right"
},
"platform_offset": [
0,
0,
0
],
"preferred_quality_type": "draft",
"reference_machine_id": "magma_10",
"supports_network_connection": true,
@ -29,41 +72,24 @@
{
"build_volume_temperature": { "maximum_value": "100" },
"machine_depth": { "default_value": 320 },
"machine_disallowed_areas":
{
"default_value": [
[
[-204, -160],
[204, -160],
[204, -154.5],
[-204, -154.5]
],
[
[-204, 160],
[204, 160],
[204, 154.5],
[-204, 154.5]
],
[
[-205, -160],
[-154.5, -160],
[-154.5, 160],
[-205, 160]
],
[
[154.5, -160],
[205, -160],
[205, 160],
[154.5, 160]
]
]
},
"machine_disallowed_areas": { "value": "[ [ [-204, -160], [204, -160], [204, -154.5], [-204, -154.5] ], [ [-204, 160], [204, 160], [204, 154.5], [-204, 154.5] ], [ [-205, -160], [-191.5, -160], [-191.5, 160], [-205, 160] ], [ [154.5, -160], [205, -160], [205, 160], [154.5, 160] ] ] if max(extruderValues('extruder_nr')) == 0 else [ [ [-204, -160], [204, -160], [204, -154.5], [-204, -154.5] ], [ [-204, 160], [204, 160], [204, 154.5], [-204, 154.5] ], [ [-205, -160], [-154.5, -160], [-154.5, 160], [-205, 160] ], [ [154.5, -160], [205, -160], [205, 160], [154.5, 160] ] ]" },
"machine_heated_bed": { "default_value": true },
"machine_height": { "default_value": 320 },
"machine_height": { "default_value": 319.9 },
"machine_name": { "default_value": "UltiMaker Method XL" },
"machine_width": { "default_value": 410 },
"prime_tower_position_x": { "value": "(305 - (resolveOrValue('prime_tower_base_size') if (resolveOrValue('adhesion_type') == 'raft' or resolveOrValue('prime_tower_brim_enable')) else 0) - max(max(extruderValues('travel_avoid_distance')) + max(extruderValues('support_offset')) + (extruderValue(skirt_brim_extruder_nr, 'skirt_brim_line_width') * extruderValue(skirt_brim_extruder_nr, 'skirt_line_count') * extruderValue(skirt_brim_extruder_nr, 'initial_layer_line_width_factor') / 100 + extruderValue(skirt_brim_extruder_nr, 'skirt_gap') if resolveOrValue('adhesion_type') == 'skirt' else 0) + (resolveOrValue('draft_shield_dist') if resolveOrValue('draft_shield_enabled') else 0), max(map(abs, extruderValues('machine_nozzle_offset_x'))), 1)) - (305 / 2)" },
"prime_tower_position_y": { "value": "305 - prime_tower_size - (resolveOrValue('prime_tower_base_size') if (resolveOrValue('adhesion_type') == 'raft' or resolveOrValue('prime_tower_brim_enable')) else 0) - max(max(extruderValues('travel_avoid_distance')) + max(extruderValues('support_offset')) + (extruderValue(skirt_brim_extruder_nr, 'skirt_brim_line_width') * extruderValue(skirt_brim_extruder_nr, 'skirt_line_count') * extruderValue(skirt_brim_extruder_nr, 'initial_layer_line_width_factor') / 100 + extruderValue(skirt_brim_extruder_nr, 'skirt_gap') if resolveOrValue('adhesion_type') == 'skirt' else 0) + (resolveOrValue('draft_shield_dist') if resolveOrValue('draft_shield_enabled') else 0), max(map(abs, extruderValues('machine_nozzle_offset_y'))), 1) - (305 / 2)" },
"speed_travel": { "value": 500 }
"speed_travel":
{
"maximum_value": 500,
"maximum_value_warning": 450,
"value": 400
},
"speed_travel_layer_0":
{
"maximum_value": 500,
"maximum_value_warning": 450,
"value": 250
}
}
}

View file

@ -25,7 +25,9 @@
"ultimaker_petcf",
"ultimaker_petg",
"ultimaker_pva",
"ultimaker_tough_pla"
"ultimaker_tough_pla",
"generic_cffpps",
"ultimaker_ppscf"
],
"firmware_file": "MarlinUltimaker-{baudrate}.hex",
"firmware_hbk_file": "MarlinUltimaker-HBK-{baudrate}.hex",

View file

@ -17,7 +17,9 @@
"exclude_materials": [
"generic_hips",
"generic_flexible",
"structur3d_"
"generic_cffpps",
"structur3d_",
"ultimaker_ppscf"
],
"firmware_update_info":
{

View file

@ -18,7 +18,9 @@
"exclude_materials": [
"generic_hips",
"generic_flexible",
"structur3d_"
"generic_cffpps",
"structur3d_",
"ultimaker_ppscf"
],
"firmware_update_info":
{
@ -48,6 +50,7 @@
"preferred_variant_buildplate_name": "Glass",
"preferred_variant_name": "AA 0.4",
"supported_actions": [ "DiscoverUM3Action" ],
"supports_abstract_color": true,
"supports_material_export": true,
"supports_network_connection": true,
"supports_usb_connection": false,

View file

@ -36,6 +36,7 @@
"preferred_variant_name": "AA 0.4",
"quality_definition": "ultimaker_s5",
"supported_actions": [ "DiscoverUM3Action" ],
"supports_abstract_color": true,
"supports_material_export": true,
"supports_network_connection": true,
"supports_usb_connection": false,

View file

@ -0,0 +1,194 @@
{
"version": 2,
"name": "MakerBot Sketch",
"inherits": "ultimaker",
"metadata":
{
"visible": true,
"author": "Ultimaker",
"manufacturer": "Ultimaker B.V.",
"file_formats": "application/x-makerbot-sketch",
"platform": "ultimaker_sketch_platform.obj",
"exclude_materials": [
"dsm_",
"Essentium_",
"imade3d_",
"chromatik_",
"3D-Fuel_",
"bestfilament_",
"emotiontech_",
"eryone_",
"eSUN_",
"Extrudr_",
"fabtotum_",
"fdplast_",
"filo3d_",
"ultimaker_rapidrinse_175",
"goofoo_",
"ideagen3D_",
"imade3d_",
"innofill_",
"layer_one_",
"leapfrog_",
"polyflex_pla",
"polymax_pla",
"polyplus_pla",
"polywood_pla",
"redd_",
"tizyx_",
"verbatim_",
"Vertex_",
"volumic_",
"xyzprinting_",
"zyyx_pro_",
"octofiber_",
"fiberlogy_",
"generic_",
"ultimaker_asa",
"ultimaker_abs",
"ultimaker_nylon",
"ultimaker_pva",
"ultimaker_rapidrinse",
"ultimaker_sr30",
"ultimaker_petg",
"ultimaker_metallic_pla",
"basf_",
"jabil_",
"polymaker_",
"ultimaker_rapidrinse",
"ultimaker_sr30",
"ultimaker_petg",
"ultimaker_pva",
"ultimaker_metallic_pla"
],
"has_machine_quality": true,
"has_materials": true,
"has_variants": true,
"machine_extruder_trains": { "0": "ultimaker_sketch_extruder" },
"preferred_quality_type": "draft",
"preferred_variant_name": "0.4mm",
"reference_machine_id": "sketch",
"supports_network_connection": true,
"supports_usb_connection": false,
"variants_name": "Extruder",
"weight": -1
},
"overrides":
{
"acceleration_enabled":
{
"enabled": false,
"value": false
},
"adhesion_type": { "value": "'skirt'" },
"brim_width": { "value": "3" },
"cool_during_extruder_switch":
{
"enabled": false,
"value": false
},
"cool_fan_full_at_height": { "value": "layer_height + layer_height_0" },
"cool_fan_speed": { "value": 100 },
"cool_fan_speed_0": { "value": 0 },
"cool_min_layer_time": { "value": 8 },
"extruder_prime_pos_abs": { "default_value": true },
"fill_outline_gaps": { "value": false },
"gantry_height": { "value": "60" },
"infill_angles": { "value": "[45,45,45,45,45,135,135,135,135,135]" },
"infill_before_walls": { "value": false },
"infill_overlap": { "value": 0 },
"infill_pattern": { "value": "'zigzag'" },
"infill_sparse_density": { "value": 20 },
"infill_wipe_dist": { "value": 0 },
"initial_layer_line_width_factor": { "value": 125 },
"inset_direction": { "value": "'inside_out'" },
"jerk_enabled":
{
"enabled": false,
"value": false
},
"layer_height_0": { "value": "layer_height * 1.25" },
"layer_start_x": { "value": "sum(extruderValues('machine_extruder_start_pos_x')) / len(extruderValues('machine_extruder_start_pos_x'))" },
"layer_start_y": { "value": "sum(extruderValues('machine_extruder_start_pos_y')) / len(extruderValues('machine_extruder_start_pos_y'))" },
"machine_center_is_zero": { "default_value": true },
"machine_depth": { "default_value": 150 },
"machine_end_gcode": { "default_value": "M107; Disable Fan; \n; End of print; \n; End GCode\nM104 S0 T0; Set Toolhead Temp to 0\nM140 S0 T0; Set Platform Temp to 0\nG162 Z F1800; Move to max axes position\nG28 X Y; Home\nM652; Turn off back fan\nM132 X Y Z A B; Set Home Position\nG91; Use Relative Positioning\nM18; Disable Axes\n\n" },
"machine_extruder_count": { "default_value": 1 },
"machine_gcode_flavor": { "default_value": "Griffin" },
"machine_heated_bed": { "default_value": true },
"machine_height": { "default_value": 150 },
"machine_max_feedrate_x": { "default_value": 300 },
"machine_max_feedrate_y": { "default_value": 300 },
"machine_max_feedrate_z": { "default_value": 40 },
"machine_min_cool_heat_time_window": { "value": "15" },
"machine_name": { "default_value": "MakerBot Sketch" },
"machine_nozzle_cool_down_speed": { "default_value": 0.8 },
"machine_nozzle_heat_up_speed": { "default_value": 1.4 },
"machine_start_gcode": { "default_value": "M140 S50 T0; Set Platform Temp\nM104 S220 T0; Set Extruder Temp\nG90; Use Absolute Positioning\nG28; Home\nM132 X Y Z A B; Set Current Position to Home\nG161 X Y F3300; Move to min axes positions\nM7 T0; Wait For Platform to Heat\nM6 T0; Wait For Extruders to Heat\nM651; Turn on back fan\nM907 X100 Y100 Z40 A80 B20; Set Stepper Currents\nM106; Enable Cooling Fan\n; Purge Line\nG92 E0; Reset Extruder Axis Position\nG1 X-26.18 Y-75.90 Z0.200 F420\nG1 X26.18 Y-75.90 E10\nG92 E0; Reset Extruder Axis Position\n; Start GCode\n" },
"machine_width": { "default_value": 150 },
"material_diameter": { "default_value": 1.75 },
"material_flow": { "default_value": 100 },
"min_bead_width":
{
"minimum_value": "line_width * 0.5",
"minimum_value_warning": "line_width * 0.75",
"value": "line_width"
},
"min_wall_line_width":
{
"minimum_value": "line_width * 0.5",
"minimum_value_warning": "line_width * 0.75",
"value": "line_width"
},
"multiple_mesh_overlap": { "value": "0" },
"optimize_wall_printing_order": { "value": "True" },
"prime_blob_enable":
{
"default_value": true,
"enabled": true,
"value": "resolveOrValue('print_sequence') != 'one_at_a_time'"
},
"raft_margin": { "value": "5" },
"retract_at_layer_change": { "value": true },
"retraction_amount":
{
"maximum_value": 6,
"maximum_value_warning": 5.75,
"value": 5.5
},
"retraction_combing": { "value": "'no_outer_surfaces'" },
"retraction_min_travel": { "value": "2 * line_width" },
"retraction_prime_speed": { "value": "15" },
"retraction_speed": { "value": "25" },
"roofing_material_flow": { "value": 100 },
"skin_material_flow": { "value": 95 },
"skin_material_flow_layer_0": { "value": 100 },
"skirt_brim_line_width": { "value": 1 },
"skirt_brim_speed": { "value": 15 },
"skirt_height": { "value": 3 },
"speed_print": { "value": 50 },
"speed_roofing": { "value": "0.8 * speed_print" },
"speed_support": { "value": "0.7 * speed_print" },
"speed_support_interface": { "value": "speed_topbottom" },
"speed_topbottom": { "value": "speed_roofing" },
"speed_travel": { "value": 80 },
"speed_wall": { "value": "0.5 * speed_print" },
"speed_wall_0": { "value": "1 * speed_wall" },
"speed_wall_x": { "value": "1 * speed_wall" },
"speed_z_hop": { "value": 10 },
"support_angle": { "value": "45" },
"support_structure": { "value": "'tree'" },
"top_bottom_thickness": { "value": "4 * layer_height" },
"travel_avoid_distance": { "value": "machine_nozzle_tip_outer_diameter / 2 * 1.5" },
"travel_avoid_supports": { "value": true },
"wall_0_inset": { "value": "0" },
"wall_0_material_flow_layer_0": { "value": "1 * material_flow" },
"wall_thickness": { "value": "2 * machine_nozzle_size" },
"wall_x_material_flow": { "value": "0.95 * material_flow" },
"wall_x_material_flow_layer_0": { "value": "1 * material_flow" },
"xy_offset": { "value": 0 },
"xy_offset_layer_0": { "value": 0 },
"z_seam_corner": { "value": "'z_seam_corner_any'" },
"zig_zaggify_infill": { "value": "gradual_infill_steps == 0" }
}
}

View file

@ -0,0 +1,40 @@
{
"version": 2,
"name": "MakerBot Sketch Large",
"inherits": "ultimaker_sketch",
"metadata":
{
"visible": true,
"author": "Ultimaker",
"manufacturer": "Ultimaker B.V.",
"file_formats": "application/x-makerbot-sketch",
"platform": "ultimaker_sketch_large_platform.obj",
"has_machine_quality": true,
"has_materials": true,
"has_variants": true,
"machine_extruder_trains": { "0": "ultimaker_sketch_large_extruder" },
"preferred_material": "ultimaker_pla_175",
"preferred_quality_type": "draft",
"preferred_variant_name": "0.4mm",
"reference_machine_id": "sketch_large",
"supports_network_connection": true,
"supports_usb_connection": false,
"variants_name": "Extruder",
"weight": -1
},
"overrides":
{
"machine_depth": { "default_value": 200 },
"machine_height": { "default_value": 250 },
"machine_name": { "default_value": "MakerBot Sketch Large" },
"machine_width": { "default_value": 220 },
"retraction_amount":
{
"maximum_value": 6.5,
"maximum_value_warning": 6.25,
"value": 6
},
"retraction_prime_speed": { "value": "retraction_speed * 0.8" },
"speed_travel": { "value": 150 }
}
}

View file

@ -0,0 +1,395 @@
{
"version": 2,
"name": "MakerBot Sketch Sprint",
"inherits": "ultimaker",
"metadata":
{
"visible": true,
"author": "Ultimaker",
"manufacturer": "Ultimaker B.V.",
"file_formats": "application/x-makerbot-sketch",
"platform": "ultimaker_sketch_sprint_platform.obj",
"exclude_materials": [
"dsm_",
"Essentium_",
"imade3d_",
"chromatik_",
"3D-Fuel_",
"bestfilament_",
"emotiontech_",
"eryone_",
"eSUN_",
"Extrudr_",
"fabtotum_",
"fdplast_",
"filo3d_",
"goofoo_",
"ideagen3D_",
"imade3d_",
"innofill_",
"layer_one_",
"leapfrog_",
"polyflex_pla",
"polymax_pla",
"polyplus_pla",
"polywood_pla",
"redd_",
"tizyx_",
"verbatim_",
"Vertex_",
"volumic_",
"xyzprinting_",
"zyyx_pro_",
"octofiber_",
"fiberlogy_",
"generic_",
"basf_",
"jabil_",
"polymaker_",
"ultimaker_asa",
"ultimaker_abs",
"ultimaker_nylon",
"ultimaker_pva",
"ultimaker_rapidrinse",
"ultimaker_sr30",
"ultimaker_petg",
"ultimaker_metallic_pla"
],
"has_machine_quality": true,
"has_materials": true,
"has_variants": true,
"machine_extruder_trains": { "0": "ultimaker_sketch_sprint_extruder" },
"platform_offset": [
0,
0,
0
],
"platform_texture": "MakerbotSketchSprint.png",
"preferred_material": "ultimaker_pla_175",
"preferred_quality_type": "draft",
"preferred_variant_name": "0.4mm",
"reference_machine_id": "sketch_sprint",
"supports_network_connection": true,
"supports_usb_connection": false,
"variants_name": "Extruder",
"weight": -1
},
"overrides":
{
"acceleration_enabled": { "value": true },
"acceleration_layer_0": { "value": "acceleration_print * 0.05" },
"acceleration_print": { "value": 10000 },
"acceleration_print_layer_0": { "value": "acceleration_layer_0" },
"acceleration_roofing": { "value": "acceleration_print * 0.2" },
"acceleration_skirt_brim": { "value": "acceleration_layer_0" },
"acceleration_topbottom": { "value": "acceleration_print * 0.2" },
"acceleration_travel": { "value": "acceleration_print" },
"acceleration_travel_enabled": { "value": true },
"acceleration_travel_layer_0": { "value": "acceleration_travel * 0.2" },
"acceleration_wall": { "value": "acceleration_print * 0.5" },
"acceleration_wall_0_roofing": { "value": "acceleration_wall * 2/5" },
"acceleration_wall_x_roofing": { "value": "acceleration_wall * 2/5" },
"adhesion_type": { "value": "'none'" },
"bottom_layers": { "value": 3 },
"bridge_skin_density": { "value": 100 },
"bridge_skin_density_2": { "value": 75 },
"bridge_skin_density_3": { "value": 80 },
"bridge_skin_material_flow_3": { "value": 110 },
"bridge_skin_speed": { "value": 50 },
"bridge_skin_speed_2": { "value": 50 },
"bridge_skin_speed_3": { "value": 50 },
"bridge_sparse_infill_max_density": { "value": 15 },
"bridge_wall_min_length": { "value": 2.4 },
"bridge_wall_speed": { "value": 20 },
"brim_gap": { "value": 0.32 },
"brim_inside_margin": { "value": 1.6 },
"brim_line_count": { "value": 3 },
"brim_width": { "value": 2.4 },
"build_volume_fan_nr": { "value": 101 },
"cool_fan_full_layer": { "value": "1 if adhesion_type == 'raft' else 3" },
"cool_fan_speed_0": { "value": 0 },
"cool_min_layer_time": { "value": 3 },
"cool_min_layer_time_fan_speed_max": { "value": 10 },
"cool_min_speed": { "value": 20 },
"default_material_print_temperature":
{
"maximum_value": 280,
"maximum_value_warning": 240
},
"gantry_height": { "value": 27.5 },
"gradual_infill_steps": { "value": 0 },
"gradual_support_infill_steps": { "value": 0 },
"group_outer_walls": { "value": false },
"infill_angles":
{
"value": [
135
]
},
"infill_before_walls": { "value": false },
"infill_line_width": { "value": 0.45 },
"infill_overlap": { "value": 10 },
"infill_pattern": { "value": "'lines'" },
"infill_sparse_density": { "value": 15 },
"infill_wipe_dist": { "value": 0 },
"initial_layer_line_width_factor": { "value": 150 },
"inset_direction": { "value": "'inside_out'" },
"jerk_enabled":
{
"enabled": false,
"value": false
},
"jerk_travel_enabled": { "enabled": false },
"layer_height_0": { "value": "layer_height if adhesion_type == 'raft' else layer_height * 1.25" },
"line_width": { "value": 0.42 },
"machine_center_is_zero": { "default_value": true },
"machine_depth": { "default_value": 221.5 },
"machine_end_gcode": { "default_value": "M104 S0 T0\nM140 S0 T0\nG162 Z F1800\nG28 X Y\nM132 X Y A B\nM652\nG91" },
"machine_extruder_count": { "default_value": 1 },
"machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" },
"machine_heated_bed": { "default_value": true },
"machine_height": { "default_value": 220.4 },
"machine_max_feedrate_x": { "default_value": 600 },
"machine_max_feedrate_y": { "default_value": 600 },
"machine_max_feedrate_z": { "default_value": 40 },
"machine_min_cool_heat_time_window": { "value": "15" },
"machine_name": { "default_value": "MakerBot Sketch Sprint" },
"machine_start_gcode": { "default_value": "G28\nM132 X Y Z A B\nG1 Z50.000 F420\nG161 X Y F3300\nM7 T0\nM6 T0\nM651 S255\nG1 Z0.25 F6000\nG1 E-1.5 F800\nG1 E2 F800\nG1 X111 Y111 Z0.25 F4800\nG1 X111 Y-111 E25 F1200" },
"machine_width": { "default_value": 221.5 },
"material_bed_temp_wait": { "value": "False" },
"material_bed_temperature":
{
"maximum_value": 100,
"maximum_value_warning": 70
},
"material_bed_temperature_layer_0":
{
"maximum_value": 100,
"maximum_value_warning": 70
},
"material_diameter": { "default_value": 1.75 },
"material_flow": { "default_value": 100 },
"material_print_temperature":
{
"maximum_value": 280,
"maximum_value_warning": 240
},
"min_bead_width": { "value": 0.3 },
"multiple_mesh_overlap": { "value": "0" },
"raft_airgap": { "value": 0.35 },
"raft_base_acceleration": { "value": "acceleration_layer_0" },
"raft_base_speed":
{
"maximum_value": "raft_speed",
"maximum_value_warning": "raft_speed * 1/2",
"value": "raft_speed * 1/4"
},
"raft_interface_acceleration": { "value": "acceleration_print * 0.2" },
"raft_interface_line_width": { "value": 0.7 },
"raft_interface_speed":
{
"maximum_value": 300,
"maximum_value_warning": 275,
"value": "raft_speed * 3/4"
},
"raft_interface_wall_count": { "value": "raft_wall_count" },
"raft_margin": { "value": "1.5" },
"raft_smoothing": { "value": "9.5" },
"raft_speed": { "value": 200 },
"raft_surface_acceleration": { "value": "acceleration_print * 0.5" },
"raft_surface_line_width": { "value": 0.4 },
"raft_surface_speed":
{
"maximum_value": 300,
"maximum_value_warning": 275
},
"raft_surface_wall_count": { "value": "raft_wall_count" },
"raft_wall_count": { "value": 2 },
"retract_at_layer_change": { "value": true },
"retraction_amount": { "value": "1.0" },
"retraction_combing": { "value": "'all'" },
"retraction_combing_max_distance": { "value": 10 },
"retraction_count_max": { "value": 90 },
"retraction_extrusion_window": { "value": 1.2 },
"retraction_hop": { "value": 0.4 },
"retraction_hop_enabled": { "value": true },
"retraction_hop_only_when_collides": { "value": true },
"retraction_min_travel": { "value": 0.8 },
"retraction_prime_speed": { "value": "35" },
"retraction_speed": { "value": "35" },
"seam_overhang_angle": { "value": 30 },
"skin_edge_support_thickness": { "value": 0 },
"skin_material_flow": { "value": "material_flow" },
"skin_material_flow_layer_0": { "value": "material_flow * 0.95" },
"skin_monotonic": { "value": true },
"skin_outline_count": { "value": 0 },
"skin_overlap": { "value": 10 },
"skirt_brim_minimal_length": { "value": 250 },
"skirt_gap": { "value": 1.2 },
"skirt_height": { "value": 1 },
"small_feature_speed_factor": { "value": 10 },
"small_hole_max_size": { "value": 0 },
"speed_equalize_flow_width_factor": { "value": 100 },
"speed_infill":
{
"maximum_value": 300,
"maximum_value_warning": 275,
"value": "speed_print if infill_sparse_density < 70 else speed_print * 0.8"
},
"speed_layer_0":
{
"maximum_value": 200,
"maximum_value_warning": 175,
"value": "round(8/35 * speed_print)"
},
"speed_print":
{
"maximum_value": 300,
"maximum_value_warning": 275,
"value": 250
},
"speed_roofing":
{
"maximum_value": 300,
"maximum_value_warning": 275,
"value": "round(9/14 * speed_print)"
},
"speed_slowdown_layers": { "value": 2 },
"speed_support":
{
"maximum_value": 300,
"maximum_value_warning": 275,
"value": "1 * speed_print"
},
"speed_support_bottom":
{
"maximum_value": 300,
"maximum_value_warning": 275,
"value": "round(3/7 * speed_support)"
},
"speed_support_infill":
{
"maximum_value": 300,
"maximum_value_warning": 275
},
"speed_support_interface":
{
"maximum_value": 300,
"maximum_value_warning": 275,
"value": "round(23/35 * speed_support)"
},
"speed_support_roof":
{
"maximum_value": 300,
"maximum_value_warning": 275
},
"speed_topbottom":
{
"maximum_value": 300,
"maximum_value_warning": 275,
"value": "round(9/14 * speed_print)"
},
"speed_travel":
{
"maximum_value": 600,
"maximum_value_warning": 550,
"value": 500
},
"speed_travel_layer_0":
{
"maximum_value": 550,
"maximum_value_warning": 500,
"value": 250
},
"speed_wall":
{
"maximum_value": 300,
"maximum_value_warning": 275,
"value": "2/5 * speed_print"
},
"speed_wall_0":
{
"maximum_value": 300,
"maximum_value_warning": 275,
"value": "1 * speed_wall"
},
"speed_wall_0_roofing":
{
"maximum_value": 300,
"maximum_value_warning": 275,
"value": "speed_wall_0"
},
"speed_wall_x":
{
"maximum_value": 300,
"maximum_value_warning": 275,
"value": "round(1.428575 * speed_wall,0)"
},
"speed_wall_x_roofing":
{
"maximum_value": 300,
"maximum_value_warning": 275
},
"speed_z_hop":
{
"maximum_value": 24,
"maximum_value_warning": 22,
"value": 20
},
"support_angle": { "value": "60" },
"support_bottom_density": { "value": "support_infill_rate" },
"support_bottom_distance": { "value": "layer_height" },
"support_bottom_enable": { "value": true },
"support_bottom_height": { "value": "layer_height * 2" },
"support_brim_line_count": { "value": 5 },
"support_infill_angles":
{
"value": [
45
]
},
"support_infill_rate": { "value": 15 },
"support_interface_density": { "value": 80 },
"support_interface_enable": { "value": true },
"support_interface_height": { "value": "layer_height * 3" },
"support_interface_material_flow": { "value": "material_flow" },
"support_interface_offset": { "value": 1 },
"support_interface_pattern": { "value": "'lines'" },
"support_interface_wall_count": { "value": 0 },
"support_line_width": { "value": 0.32 },
"support_material_flow": { "value": "material_flow * 0.9" },
"support_offset": { "value": 1.6 },
"support_pattern": { "value": "'lines'" },
"support_roof_height": { "value": "support_interface_height" },
"support_roof_wall_count": { "value": "support_interface_wall_count" },
"support_top_distance": { "value": "support_z_distance" },
"support_use_towers": { "value": false },
"support_xy_distance": { "value": 0.3 },
"support_xy_overrides_z": { "value": "'xy_overrides_z'" },
"support_z_distance": { "value": "layer_height if support_structure == 'tree' else 0.25" },
"top_bottom_thickness": { "value": "5 * layer_height" },
"top_layers": { "value": 5 },
"travel_avoid_distance": { "value": 0.625 },
"travel_avoid_supports": { "value": true },
"wall_0_inset": { "value": "0" },
"wall_0_material_flow_layer_0": { "value": "material_flow * 0.95" },
"wall_0_wipe_dist": { "value": 0.2 },
"wall_line_width_x": { "value": 0.58 },
"wall_overhang_angle": { "value": 35 },
"wall_overhang_speed_factor":
{
"minimum_value_warning": 15,
"value": 17.5
},
"wall_thickness": { "value": 1 },
"wall_x_material_flow_layer_0": { "value": "material_flow" },
"xy_offset": { "value": 0 },
"xy_offset_layer_0": { "value": -0.1 },
"z_seam_corner": { "value": "'z_seam_corner_inner'" },
"z_seam_position": { "value": "'backleft'" },
"z_seam_type": { "value": "'sharpest_corner'" },
"z_seam_x": { "value": 150 },
"z_seam_y": { "value": 180 },
"zig_zaggify_infill": { "value": true }
}
}

View file

@ -1,63 +0,0 @@
{
"version": 2,
"name": "Zyyx Agile",
"inherits": "fdmprinter",
"metadata":
{
"visible": true,
"author": "Magicfirm Europe",
"manufacturer": "Magicfirm Europe",
"file_formats": "application/x3g",
"platform": "zyyx_platform.3mf",
"has_machine_quality": true,
"machine_extruder_trains": { "0": "zyyx_agile_extruder_0" },
"machine_x3g_variant": "z",
"preferred_material": "zyyx_pro_pla",
"preferred_quality_type": "normal",
"quality_definition": "zyyx_agile"
},
"overrides":
{
"gantry_height": { "value": "10" },
"infill_overlap": { "value": "12 if infill_sparse_density < 95 and infill_pattern != 'concentric' else 0" },
"machine_center_is_zero": { "default_value": true },
"machine_depth": { "default_value": 225 },
"machine_end_gcode": { "default_value": "; ZYYX 3D Printer end gcode\nM73 P100 ; end build progress\nG0 Z195 F1000 ; send Z axis to bottom of machine\nM104 S0 T0 ; cool down extruder\nM127 ; stop blower fan\nG162 X Y F3000 ; home XY maximum\nM18 ; disable stepper\nM70 P5 (ZYYX Print Finished!)\nM72 P1 ; play Ta-Da song\n" },
"machine_gcode_flavor": { "default_value": "Makerbot" },
"machine_head_with_fans_polygon":
{
"default_value": [
[-37, 50],
[25, 50],
[25, -40],
[-37, -40]
]
},
"machine_height": { "default_value": 195 },
"machine_name": { "default_value": "ZYYX Agile" },
"machine_start_gcode": { "default_value": "; ZYYX 3D Printer start gcode\nM73 P0; enable build progress\nG21; set units to mm\nG90; set positioning to absolute\nG130 X80 Y80 A127 B127 ; Set Stepper Vref to default value\nG162 X Y F3000; home XY axes maximum\nM133 T0 ; stabilize extruder temperature\nG161 Z F450\nG161 Z F450; home Z axis minimum\nG92 X0 Y0 Z0 E0\nG1 X0 Y0 Z5 F200\nG161 Z F200; home Z axis minimum again\nG92 X0 Y0 Z0 E0\nM131 A; store surface calibration point 1\nG1 X0 Y0 Z5 F200\nG1 X-177 Y0 Z5 F3000; move to 2nd probing point\nG161 Z F200\nM131 B; store surface calibration point 2\nG92 X-177 Y0 Z0 E0\nG1 X-177 Y0 Z5 F200\nG1 X0 Y0 Z5 F3000; move to home point\nG161 Z F200; home Z axis minimum again\nG92 X0 Y0 Z0 E0; set reference again\nG1 X0 Y0 Z5 F200; clear Z\nG1 X0 Y-225 Z5 F3000; move to 3rd calibration point\nG161 Z F200\nM131 AB; store surface calibration point 3\nM132 AB; activate auto leveling\nG92 X0 Y-225 Z0 E0\nG1 X0 Y-225 Z5 F200\nG162 X Y F3000\nG161 Z F200\nG92 X135 Y115 Z0 E0\nM132 Z; Recall stored home offset for Z axis\nG1 X135 Y115 Z5 F450; clear nozzle from hole\nG1 X0 Y115 Z5 F3000; clear nozzle from hole\nG92 E0 ; Set E to 0" },
"machine_steps_per_mm_e": { "default_value": 96.27520187033366 },
"machine_steps_per_mm_x": { "default_value": 88.888889 },
"machine_steps_per_mm_y": { "default_value": 88.888889 },
"machine_steps_per_mm_z": { "default_value": 400 },
"machine_width": { "default_value": 265 },
"material_final_print_temperature": { "value": "material_print_temperature" },
"material_initial_print_temperature": { "value": "material_print_temperature" },
"raft_airgap": { "default_value": 0.15 },
"raft_margin": { "default_value": 6 },
"retract_at_layer_change": { "default_value": true },
"retraction_amount": { "default_value": 0.7 },
"retraction_speed": { "default_value": 15 },
"speed_layer_0": { "value": 15 },
"speed_print": { "default_value": 50 },
"speed_travel": { "value": 80 },
"speed_wall": { "value": 25 },
"speed_wall_x": { "value": 35 },
"support_interface_density": { "default_value": 80 },
"support_interface_enable": { "default_value": true },
"support_interface_height": { "default_value": 0.8 },
"support_interface_pattern": { "default_value": "grid" },
"travel_avoid_other_parts": { "default_value": false },
"travel_retract_before_outer_wall": { "default_value": true }
}
}

View file

@ -0,0 +1,219 @@
{
"version": 2,
"name": "ZYYX+",
"inherits": "fdmprinter",
"metadata":
{
"visible": true,
"author": "Theodor Hansson",
"manufacturer": "ZYYX Labs AB",
"file_formats": "application/x3g",
"platform": "zyyx_platform.3mf",
"exclude_materials": [
"3D-Fuel_PLA_PRO_Black",
"3D-Fuel_PLA_SnapSupport",
"bestfilament_abs_skyblue",
"bestfilament_petg_orange",
"bestfilament_pla_green",
"leapfrog_abs_natural",
"leapfrog_epla_natural",
"leapfrog_pva_natural",
"goofoo_abs",
"goofoo_asa",
"goofoo_bronze_pla",
"goofoo_emarble_pla",
"goofoo_esilk_pla",
"goofoo_hips",
"goofoo_pa_cf",
"goofoo_pa",
"goofoo_pc",
"goofoo_peek",
"goofoo_petg",
"goofoo_pla",
"goofoo_pva",
"goofoo_tpe_83a",
"goofoo_tpu_87a",
"goofoo_tpu_95a",
"emotiontech_abs",
"emotiontech_absx",
"emotiontech_acetate",
"emotiontech_asax",
"emotiontech_bvoh",
"emotiontech_copa",
"emotiontech_hips",
"emotiontech_nylon_1030",
"emotiontech_nylon_1030cf",
"emotiontech_nylon_1070",
"emotiontech_pa6cf",
"emotiontech_pa6gf",
"emotiontech_pc",
"emotiontech_pekk",
"emotiontech_petg",
"emotiontech_pla",
"emotiontech_pla_hr_870",
"emotiontech_pva-m",
"emotiontech_pva-s",
"emotiontech_tpu98a",
"eryone_petg",
"eryone_pla_glow",
"eryone_pla_matte",
"eryone_pla_wood",
"eryone_pla",
"eryone_tpu",
"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",
"Extrudr_GreenTECPro_Anthracite_175",
"Extrudr_GreenTECPro_Black_175",
"Extrudr_GreenTECPro_Blue_175",
"Extrudr_GreenTECPro_Nature_175",
"Extrudr_GreenTECPro_Red_175",
"Extrudr_GreenTECPro_Silver_175",
"Extrudr_GreenTECPro_White_175",
"verbatim_bvoh_175",
"Vertex_Delta_ABS",
"Vertex_Delta_PET",
"Vertex_Delta_PLA",
"Vertex_Delta_TPU",
"chromatik_pla",
"dsm_arnitel2045_175",
"dsm_novamid1070_175",
"fabtotum_abs",
"fabtotum_nylon",
"fabtotum_pla",
"fabtotum_tpu",
"fdplast_abs_tomato",
"fdplast_petg_gray",
"fdplast_pla_olive",
"fiberlogy_hd_pla",
"filo3d_pla",
"filo3d_pla_green",
"filo3d_pla_red",
"ideagen3D_ToughPLA",
"imade3d_petg_green",
"imade3d_petg_pink",
"imade3d_pla_green",
"imade3d_pla_pink",
"imade3d_petg_175",
"imade3d_pla_175",
"innofill_innoflex60_175",
"layer_one_black_pla",
"layer_one_dark_gray_pla",
"layer_one_white_pla",
"octofiber_pla",
"polyflex_pla",
"polymax_pla",
"polyplus_pla",
"polywood_pla",
"redd_abs",
"redd_asa",
"redd_hips",
"redd_nylon",
"redd_petg",
"redd_pla",
"redd_tpe",
"tizyx_abs",
"tizyx_flex",
"tizyx_petg",
"tizyx_pla_bois",
"tizyx_pla",
"tizyx_pva",
"ultimaker_abscf_175",
"ultimaker_absr_175",
"ultimaker_asa_175",
"ultimaker_nylon12-cf_175",
"ultimaker_pla_175",
"ultimaker_pva_175",
"ultimaker_rapidrinse_175",
"ultimaker_sr30_175",
"ultimaker_tough_pla_175",
"Vertex_Delta_ABS",
"Vertex_Delta_PET",
"Vertex_Delta_PLA_Glitter",
"Vertex_Delta_PLA_Mat",
"Vertex_Delta_PLA_Satin",
"Vertex_Delta_PLA_Wood",
"Vertex_Delta_PLA",
"Vertex_Delta_TPU",
"volumic_abs_ultra",
"volumic_arma_ultra",
"volumic_asa_ultra",
"volumic_br80_ultra",
"volumic_bumper_ultra",
"volumic_cu80_ultra",
"volumic_flex93_ultra",
"volumic_medical_ultra",
"volumic_nylon_ultra",
"volumic_pekk_carbone",
"volumic_petg_ultra",
"volumic_petgcarbone_ultra",
"volumic_pla_ultra",
"volumic_pp_ultra",
"volumic_strong_ultra",
"volumic_support_ultra",
"xyzprinting_abs",
"xyzprinting_antibact_pla",
"xyzprinting_carbon_fiber",
"xyzprinting_colorinkjet_pla",
"xyzprinting_flexible",
"xyzprinting_metallic_pla",
"xyzprinting_nylon",
"xyzprinting_pahtcf15",
"xyzprinting_pc",
"xyzprinting_petcf15",
"xyzprinting_petg",
"xyzprinting_pla",
"xyzprinting_ppgf30",
"xyzprinting_tough_pla",
"xyzprinting_tpu",
"zyyx_abs-mm",
"zyyx_abs-perf",
"zyyx_flex95a",
"zyyx_petg",
"zyyx_petg-cf",
"zyyx_pla",
"zyyx_pro_flex",
"zyyx_pro_pla",
"zyyx_procarbon",
"zyyx_proglass",
"zyyx_pronylon"
],
"has_machine_quality": true,
"machine_extruder_trains": { "0": "zyyx_plus_extruder_0" },
"machine_x3g_variant": "z",
"preferred_material": "generic_pla",
"preferred_quality_type": "normal",
"quality_definition": "zyyx_plus",
"setting_version": 3
},
"overrides":
{
"gantry_height": { "value": "10" },
"infill_overlap": { "value": "12 if infill_sparse_density < 95 and infill_pattern != 'concentric' else 0" },
"machine_center_is_zero": { "default_value": true },
"machine_depth": { "default_value": 210 },
"machine_end_gcode": { "default_value": "; ZYYX 3D Printer end gcode\nM73 P100 ; end build progress\nG0 Z195 F1000 ; send Z axis to bottom of machine\nM104 S0 T0 ; cool down extruder\nM127 ; stop blower fan\nG162 X Y F3000 ; home XY maximum\nM18 ; disable stepper\nM70 P5 (ZYYX Print Finished!)\nM72 P1 ; play Ta-Da song\n" },
"machine_gcode_flavor": { "default_value": "Makerbot" },
"machine_head_with_fans_polygon":
{
"default_value": [
[-37, 50],
[25, 50],
[25, -40],
[-37, -40]
]
},
"machine_height": { "default_value": 195 },
"machine_name": { "default_value": "ZYYX+" },
"machine_start_gcode": { "default_value": "; ZYYX+ start gcode\n; Author Theodor Hansson 2024\nM73 P0; enable build progress\nM104 S{material_print_temperature_layer_0} T0; set nozzle temperature\nM126 S0; Turn off fan\nG21; set units to mm\nG90; set positioning to absolute\nG130 X80 Y80 A127 B127 ; Set Stepper Vref to default value\n\n; Home xy-axis\nG162 X Y F2500; home XY axes maximum\nG92 X0 Y0\nG1 X-5 Y-5 F2500\nG162 X Y F200; home XY axes maximum slowly\nG92 X132.5 Y120\n\n; Home z-axis\nG161 Z F1100; home Z axis minimum\nG92 Z0\nG1 Z2 F1100\nG161 Z F100; home Z axis minimum slowly\nG92 Z0\nM132 Z; Recall home offsets for Z\n\n; Calibrate point 1 (we're already at point 1)\nM131 A; store surface calibration point 1\nG1 Z2 F1100; back up from buildplate\n\n; Calibrate point 2\nG1 X-44.5 Y120 F7000; move to 2nd probing point\nG161 Z F100\nM131 B; store surface calibration point 1\nG1 Z2 F1100; back up from buildplate\n\n; Calibrate point 3\nG1 X132.5 Y-110 F7000; move to 2nd probing point\nG161 Z F100\nM131 AB; store surface calibration point 3\nG1 Z2 F1100; back up from buildplate\nM132 AB; Activate auto-leveling\nG1 Z1 F1000\n\n; Lay prime strip\nM133 T0; stabilize extruder temperature\nM126 S{cool_fan_speed_0}; Activate fan\nG4 P1000; Wait a little bit longer\nG1 X80 Y-110 Z0.2 F1000\nG1 X20 E9 F1000\nG1 X-20 E12.5 F1000\nG92 E0 ; Set E to 0\n\n; End of start gcode" },
"machine_steps_per_mm_e": { "default_value": 96.27520187033366 },
"machine_steps_per_mm_x": { "default_value": 88.888889 },
"machine_steps_per_mm_y": { "default_value": 88.888889 },
"machine_steps_per_mm_z": { "default_value": 400 },
"machine_width": { "default_value": 265 }
}
}

View file

@ -0,0 +1,249 @@
{
"version": 2,
"name": "ZYYX Pro",
"inherits": "fdmprinter",
"metadata":
{
"visible": true,
"author": "Theodor Hansson",
"manufacturer": "ZYYX Labs AB",
"file_formats": "application/x3g",
"platform": "zyyx_pro_platform.stl",
"exclude_materials": [
"3D-Fuel_PLA_PRO_Black",
"3D-Fuel_PLA_SnapSupport",
"bestfilament_abs_skyblue",
"bestfilament_petg_orange",
"bestfilament_pla_green",
"leapfrog_abs_natural",
"leapfrog_epla_natural",
"leapfrog_pva_natural",
"goofoo_abs",
"goofoo_asa",
"goofoo_bronze_pla",
"goofoo_emarble_pla",
"goofoo_esilk_pla",
"goofoo_hips",
"goofoo_pa_cf",
"goofoo_pa",
"goofoo_pc",
"goofoo_peek",
"goofoo_petg",
"goofoo_pla",
"goofoo_pva",
"goofoo_tpe_83a",
"goofoo_tpu_87a",
"goofoo_tpu_95a",
"emotiontech_abs",
"emotiontech_absx",
"emotiontech_acetate",
"emotiontech_asax",
"emotiontech_bvoh",
"emotiontech_copa",
"emotiontech_hips",
"emotiontech_nylon_1030",
"emotiontech_nylon_1030cf",
"emotiontech_nylon_1070",
"emotiontech_pa6cf",
"emotiontech_pa6gf",
"emotiontech_pc",
"emotiontech_pekk",
"emotiontech_petg",
"emotiontech_pla",
"emotiontech_pla_hr_870",
"emotiontech_pva-m",
"emotiontech_pva-s",
"emotiontech_tpu98a",
"eryone_petg",
"eryone_pla_matte",
"eryone_pla",
"eryone_tpu",
"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",
"Extrudr_GreenTECPro_Anthracite_175",
"Extrudr_GreenTECPro_Black_175",
"Extrudr_GreenTECPro_Blue_175",
"Extrudr_GreenTECPro_Nature_175",
"Extrudr_GreenTECPro_Red_175",
"Extrudr_GreenTECPro_Silver_175",
"Extrudr_GreenTECPro_White_175",
"verbatim_bvoh_175",
"Vertex_Delta_ABS",
"Vertex_Delta_PET",
"Vertex_Delta_PLA",
"Vertex_Delta_TPU",
"chromatik_pla",
"dsm_arnitel2045_175",
"dsm_novamid1070_175",
"fabtotum_abs",
"fabtotum_nylon",
"fabtotum_pla",
"fabtotum_tpu",
"fdplast_abs_tomato",
"fdplast_petg_gray",
"fdplast_pla_olive",
"fiberlogy_hd_pla",
"filo3d_pla",
"filo3d_pla_green",
"filo3d_pla_red",
"ideagen3D_ToughPLA",
"imade3d_petg_green",
"imade3d_petg_pink",
"imade3d_pla_green",
"imade3d_pla_pink",
"imade3d_petg_175",
"imade3d_pla_175",
"innofill_innoflex60_175",
"layer_one_black_pla",
"layer_one_dark_gray_pla",
"layer_one_white_pla",
"octofiber_pla",
"polyflex_pla",
"polymax_pla",
"polyplus_pla",
"polywood_pla",
"redd_abs",
"redd_asa",
"redd_hips",
"redd_nylon",
"redd_petg",
"redd_pla",
"redd_tpe",
"tizyx_abs",
"tizyx_flex",
"tizyx_petg",
"tizyx_pla_bois",
"tizyx_pla",
"tizyx_pva",
"ultimaker_abscf_175",
"ultimaker_absr_175",
"ultimaker_asa_175",
"ultimaker_nylon12-cf_175",
"ultimaker_pla_175",
"ultimaker_pva_175",
"ultimaker_rapidrinse_175",
"ultimaker_sr30_175",
"ultimaker_tough_pla_175",
"Vertex_Delta_ABS",
"Vertex_Delta_PET",
"Vertex_Delta_PLA_Glitter",
"Vertex_Delta_PLA_Mat",
"Vertex_Delta_PLA_Satin",
"Vertex_Delta_PLA_Wood",
"Vertex_Delta_PLA",
"Vertex_Delta_TPU",
"volumic_abs_ultra",
"volumic_arma_ultra",
"volumic_asa_ultra",
"volumic_br80_ultra",
"volumic_bumper_ultra",
"volumic_cu80_ultra",
"volumic_flex93_ultra",
"volumic_medical_ultra",
"volumic_nylon_ultra",
"volumic_pekk_carbone",
"volumic_petg_ultra",
"volumic_petgcarbone_ultra",
"volumic_pla_ultra",
"volumic_pp_ultra",
"volumic_strong_ultra",
"volumic_support_ultra",
"xyzprinting_abs",
"xyzprinting_antibact_pla",
"xyzprinting_carbon_fiber",
"xyzprinting_colorinkjet_pla",
"xyzprinting_flexible",
"xyzprinting_metallic_pla",
"xyzprinting_nylon",
"xyzprinting_pahtcf15",
"xyzprinting_pc",
"xyzprinting_petcf15",
"xyzprinting_petg",
"xyzprinting_pla",
"xyzprinting_ppgf30",
"xyzprinting_tough_pla",
"xyzprinting_tpu",
"zyyx_abs-mm",
"zyyx_abs-perf",
"zyyx_flex95a",
"zyyx_petg",
"zyyx_pla",
"zyyx_pro_flex",
"zyyx_pro_pla",
"zyyx_pronylon"
],
"has_machine_quality": true,
"has_materials": true,
"has_variants": true,
"machine": "zyyx_pro",
"machine_extruder_trains": { "0": "zyyx_pro_extruder" },
"machine_x3g_variant": "z",
"preferred_material": "generic_pla",
"preferred_variant_name": "Carbon0.6",
"quality_definition": "zyyx_pro",
"setting_version": 3,
"variants_name": "SwiftTool"
},
"overrides":
{
"gantry_height": { "value": "10" },
"infill_overlap": { "value": "12 if infill_sparse_density < 95 and infill_pattern != 'concentric' else 0" },
"machine_center_is_zero": { "default_value": true },
"machine_depth": { "default_value": 228 },
"machine_disallowed_areas":
{
"default_value": [
[
[-58, 117.5],
[-58, 108],
[-50, 108],
[-50, 117.5]
],
[
[119, 117.5],
[119, 108],
[140, 108],
[140, 117.5]
],
[
[-58, -117.5],
[-58, -108],
[-50, -108],
[-50, -117.5]
],
[
[119, -117.5],
[119, -108],
[140, -108],
[140, -117.5]
]
]
},
"machine_end_gcode": { "default_value": "; ZYYX 3D Printer end gcode\nM73 P100 ; end build progress\nG0 Z195 F1000 ; send Z axis to bottom of machine\nM104 S0 T0 ; cool down extruder\nM127 ; stop blower fan\nG162 X Y F3000 ; home XY maximum\nM18 ; disable stepper\nM70 P5 (ZYYX Print Finished!)\nM72 P1 ; play Ta-Da song\n" },
"machine_gcode_flavor": { "default_value": "Makerbot" },
"machine_head_with_fans_polygon":
{
"default_value": [
[-37, 50],
[25, 50],
[25, -40],
[-37, -40]
]
},
"machine_heated_bed": { "default_value": true },
"machine_height": { "default_value": 195 },
"machine_name": { "default_value": "ZYYX Pro" },
"machine_start_gcode": { "default_value": "; ZYYX Pro start gcode\n; Author Theodor Hansson 2024\nM73 P0; enable build progress\nM420 P20; set back fan speed 10 off 11-20 10-100%\nM140 S10 T0; set 100% heater power\nM140 S99 T0; set chamber heater negative hysteresis 19 degrees\nM140 S102 T0; set chamber heater positive hysteresis 2 degrees\nM140 S{material_bed_temperature_layer_0} T0; set chamber temperature\nM104 S{material_print_temperature_layer_0} T0; set nozzle temperature\nG21; set units to mm\nG90; set positioning to absolute\nG130 X80 Y90 A127 B127 ; Set Stepper Vref to default value\n\n; Home xy-axis\nG162 X Y F2500; home XY axes maximum\nG92 X0 Y0\nG1 X-5 Y-5 F2500\nG162 X Y F200; home XY axes maximum slowly\nG92 X135 Y114\n\n; Home z-axis\nG161 Z F1100; home Z axis minimum\nG92 Z0\nG1 Z2 F1100\nG161 Z F100; home Z axis minimum slowly\nG92 Z0\nM132 Z; Recall home offsets for Z\n\n; Calibrate point 1 (we're already at point 1)\nM131 A; store surface calibration point 1\nG1 Z2 F1100; back up from buildplate\n\n; Calibrate point 2\nG1 X-47 F7000; move to 2nd probing point\nG161 Z F100\nM131 B; store surface calibration point 1\nG1 Z2 F1100; back up from buildplate\n\n; Calibrate point 3\nG1 X135 Y-114 F7000; move to 2nd probing point\nG161 Z F100\nM131 AB; store surface calibration point 3\nG1 Z2 F1100; back up from buildplate\nM132 AB; Activate auto-leveling\n\n; Extrude material over hole\nM133 T0; stabilize extruder temperature\nM126 S{cool_fan_speed_0}; Activate fan\nG4 P1000; Wait a little bit longer\nG1 Z0.10 E500 F50\nG1 X115 Y-95 F1000\nG92 E0 ; Set E to 0\n; End of start gcode" },
"machine_steps_per_mm_e": { "default_value": 96.27520187033366 },
"machine_steps_per_mm_x": { "default_value": 88.888889 },
"machine_steps_per_mm_y": { "default_value": 88.888889 },
"machine_steps_per_mm_z": { "default_value": 400 },
"machine_width": { "default_value": 265 },
"material_diameter": { "default_value": 1.75 }
}
}

View file

@ -0,0 +1,82 @@
{
"version": 2,
"name": "ZYYX Pro II",
"inherits": "fdmprinter",
"metadata":
{
"visible": true,
"author": "ZYYX Labs AB",
"manufacturer": "ZYYX Labs AB",
"file_formats": "text/x-gcode",
"platform": "zyyx_pro_platform.stl",
"has_machine_quality": true,
"has_materials": true,
"has_variants": true,
"machine": "zyyx_pro_ii",
"machine_extruder_trains": { "0": "zyyx_pro_ii_extruder" },
"machine_x3g_variant": "z",
"preferred_material": "zyyx_pla",
"preferred_quality_type": "normal",
"preferred_variant_name": "Carbon0.4",
"quality_definition": "zyyx_pro_ii",
"setting_version": 3,
"variants_name": "SwiftTool24"
},
"overrides":
{
"gantry_height": { "value": "10" },
"infill_overlap": { "value": "12 if infill_sparse_density < 95 and infill_pattern != 'concentric' else 0" },
"machine_center_is_zero": { "default_value": true },
"machine_depth": { "default_value": 235 },
"machine_disallowed_areas":
{
"default_value": [
[
[-58, 117.5],
[-58, 108],
[-50, 108],
[-50, 117.5]
],
[
[119, 117.5],
[119, 108],
[140, 108],
[140, 117.5]
],
[
[-58, -117.5],
[-58, -108],
[-50, -108],
[-50, -117.5]
],
[
[119, -117.5],
[119, -108],
[140, -108],
[140, -117.5]
]
]
},
"machine_end_gcode": { "default_value": "; ZYYX 3D Printer end gcode\nM73 P100 ; end build progress\nG0 Z195 F1000 ; send Z axis to bottom of machine\nM104 S0 T0 ; cool down extruder\nM127 ; stop blower fan\nG162 X Y F3000 ; home XY maximum\nM18 ; disable stepper\nM70 P5 (ZYYX Print Finished!)\nM72 P1 ; play Ta-Da song\n" },
"machine_gcode_flavor": { "default_value": "Makerbot" },
"machine_head_with_fans_polygon":
{
"default_value": [
[-37, 50],
[25, 50],
[25, -40],
[-37, -40]
]
},
"machine_heated_bed": { "default_value": true },
"machine_height": { "default_value": 210 },
"machine_name": { "default_value": "ZYYX Pro II" },
"machine_start_gcode": { "default_value": ";start of ZYYX Pro II startcode\n M73 P0; enable build progress\n G21; set units to mm\n G90; set positioning to absolute\n G130 X80 Y80 A127 B127 ; Set Stepper Vref to default value\n G162 X Y F3000; home XY axes maximum\n G161 Z F450\n G161 Z F450; home Z axis minimum\n G92 X0 Y0 Z0 E0\n G1 X0 Y0 Z20 F3000\n G1 X-120 Y-110 Z10 F3000\n G130 X0 Y0 Z3 A0 B0 ; Set Stepper Vref to low value\n M420 P10; set back fan speed 10 off 11-20 10-100%\n M140 S10 T0; set 100% heater power\n M140 S99 T0; set chamber heater negative hysteresis 19 degrees\n M140 S110 T0; set chamber heater positive hysteresis 10 degrees\n M140 S{material_bed_temperature_layer_0} T0; set chamber temperature\n M104 S100 T0; set extruder temp 100 while heating\n M134 T0; wait for heated chamber temperature\n M420 P13; set fan speed 10 off 11-20 10-100%\n G130 X80 Y80 Z64 A127 B127 ; Set Stepper Vref to default value\n ; Perform probing of build plate\n G162 X Y F3000; home XY axes maximum\n G161 Z F450\n G161 Z F450; home Z axis minimum\n G92 X0 Y0 Z0 E0\n G1 X0 Y0 Z5 F200\n G161 Z F200; home Z axis minimum again\n G92 X0 Y0 Z0 E0\n M131 A; store surface calibration point 1\n G1 X0 Y0 Z5 F200\n G1 X-182 Y0 Z5 F3000; move to 2nd probing point\n G161 Z F200\n M131 B; store surface calibration point 2\n G92 X-182 Y0 Z0 E0\n G1 X-182 Y0 Z5 F200\n G1 X0 Y0 Z5 F3000; move to home point\n G161 Z F200; home Z axis minimum again\n G92 X0 Y0 Z0 E0; set reference again\n G1 X0 Y0 Z5 F200; clear Z\n G1 X0 Y-228 Z5 F3000; move to 3rd calibration point\n G161 Z F200\n M131 AB; store surface calibration point 3\n M132 AB; activate auto leveling\n G92 X0 Y-228 Z0 E0\n G1 X0 Y-228 Z5 F200\n G162 X Y F3000\n G161 Z F200\n G92 X135 Y115 Z0 E0\n M132 Z; Recall stored home offset for Z axis\n G1 X135 Y115 Z5 F450; clear nozzle from hole\n G1 X0 Y115 Z5 F3000; clear nozzle from hole\n ; end of ZYYX pro build plate calibration\n M127; turn off fan\n M104 S{material_print_temperature_layer_0} T0\n M133 T0 ; stabilize extruder temperature\n ;SET_ZXPARAM\n ;SET_SUPPORT_BUMPMAP\n G92 E0 ; Set E to 0\n ; end of ZYYX Pro II start code" },
"machine_steps_per_mm_e": { "default_value": 415 },
"machine_steps_per_mm_x": { "default_value": 88.888889 },
"machine_steps_per_mm_y": { "default_value": 88.888889 },
"machine_steps_per_mm_z": { "default_value": 400 },
"machine_width": { "default_value": 285 },
"material_diameter": { "default_value": 1.75 }
}
}

View file

@ -16,7 +16,7 @@
},
"machine_extruder_cooling_fan_number": { "default_value": 0 },
"machine_extruder_end_code": { "default_value": "M106 P{extruder_nr} S1.0\nG91\nG0 Z0.4 F600\nG90\nG0 X{prime_tower_position_x - prime_tower_size/2} Y{prime_tower_position_y + prime_tower_size/2} F6000" },
"machine_extruder_start_code": { "default_value": "G0 X{prime_tower_position_x - prime_tower_size/2} Y{prime_tower_position_y + prime_tower_size/2} F6000\nM104 S{material_print_temperature}\nG4 S5\nG91\nG0 Z-0.4 F600\nG90\nM107 P{(extruder_nr+1)%2}\nM106 P{extruder_nr} S{cool_fan_speed_0/100}" },
"machine_extruder_start_code": { "default_value": "G0 X{prime_tower_position_x - prime_tower_size/2} Y{prime_tower_position_y + prime_tower_size/2} F6000\nM104 S{material_print_temperature}\nG4 S5\nG91\nG0 Z-0.4 F600\nG90\nM107 P{(extruder_nr+1)%2}\nM106 P{extruder_nr} S{(layer_z > 1 ? cool_fan_speed/100 : cool_fan_speed_0/100)}" },
"machine_extruder_start_code_duration": { "default_value": 8 },
"machine_nozzle_offset_x": { "default_value": 0 },
"machine_nozzle_offset_y": { "default_value": 0 },

View file

@ -16,7 +16,7 @@
},
"machine_extruder_cooling_fan_number": { "default_value": 1 },
"machine_extruder_end_code": { "default_value": "M106 P{extruder_nr} S1.0\nG91\nG0 Z0.4 F600\nG90\nG0 X{prime_tower_position_x - prime_tower_size/2} Y{prime_tower_position_y + prime_tower_size/2} F6000" },
"machine_extruder_start_code": { "default_value": "G0 X{prime_tower_position_x - prime_tower_size/2} Y{prime_tower_position_y + prime_tower_size/2} F6000\nM104 S{material_print_temperature}\nG4 S5\nG91\nG0 Z-0.4 F600\nG90\nM107 P{(extruder_nr+1)%2}\nM106 P{extruder_nr} S{cool_fan_speed_0/100}" },
"machine_extruder_start_code": { "default_value": "G0 X{prime_tower_position_x - prime_tower_size/2} Y{prime_tower_position_y + prime_tower_size/2} F6000\nM104 S{material_print_temperature}\nG4 S5\nG91\nG0 Z-0.4 F600\nG90\nM107 P{(extruder_nr+1)%2}\nM106 P{extruder_nr} S{(layer_z > 1 ? cool_fan_speed/100 : cool_fan_speed_0/100)}" },
"machine_extruder_start_code_duration": { "default_value": 8 },
"machine_nozzle_offset_x": { "default_value": 0 },
"machine_nozzle_offset_y": { "default_value": 0 },

View file

@ -16,7 +16,7 @@
},
"machine_extruder_cooling_fan_number": { "default_value": 0 },
"machine_extruder_end_code": { "default_value": "M106 P{extruder_nr} S1.0\nG91\nG0 Z0.4 F600\nG90\nG0 X{prime_tower_position_x - prime_tower_size/2} Y{prime_tower_position_y + prime_tower_size/2} F6000" },
"machine_extruder_start_code": { "default_value": "G0 X{prime_tower_position_x - prime_tower_size/2} Y{prime_tower_position_y + prime_tower_size/2} F6000\nM104 S{material_print_temperature}\nG4 S5\nG91\nG0 Z-0.4 F600\nG90\nM107 P{(extruder_nr+1)%2}\nM106 P{extruder_nr} S{cool_fan_speed_0/100}" },
"machine_extruder_start_code": { "default_value": "G0 X{prime_tower_position_x - prime_tower_size/2} Y{prime_tower_position_y + prime_tower_size/2} F6000\nM104 S{material_print_temperature}\nG4 S5\nG91\nG0 Z-0.4 F600\nG90\nM107 P{(extruder_nr+1)%2}\nM106 P{extruder_nr} S{(layer_z > 1 ? cool_fan_speed/100 : cool_fan_speed_0/100)}" },
"machine_extruder_start_code_duration": { "default_value": 8 },
"machine_nozzle_offset_x": { "default_value": 0 },
"machine_nozzle_offset_y": { "default_value": 0 },

View file

@ -16,7 +16,7 @@
},
"machine_extruder_cooling_fan_number": { "default_value": 1 },
"machine_extruder_end_code": { "default_value": "M106 P{extruder_nr} S1.0\nG91\nG0 Z0.4 F600\nG90\nG0 X{prime_tower_position_x - prime_tower_size/2} Y{prime_tower_position_y + prime_tower_size/2} F6000" },
"machine_extruder_start_code": { "default_value": "G0 X{prime_tower_position_x - prime_tower_size/2} Y{prime_tower_position_y + prime_tower_size/2} F6000\nM104 S{material_print_temperature}\nG4 S5\nG91\nG0 Z-0.4 F600\nG90\nM107 P{(extruder_nr+1)%2}\nM106 P{extruder_nr} S{cool_fan_speed_0/100}" },
"machine_extruder_start_code": { "default_value": "G0 X{prime_tower_position_x - prime_tower_size/2} Y{prime_tower_position_y + prime_tower_size/2} F6000\nM104 S{material_print_temperature}\nG4 S5\nG91\nG0 Z-0.4 F600\nG90\nM107 P{(extruder_nr+1)%2}\nM106 P{extruder_nr} S{(layer_z > 1 ? cool_fan_speed/100 : cool_fan_speed_0/100)}" },
"machine_extruder_start_code_duration": { "default_value": 8 },
"machine_nozzle_offset_x": { "default_value": 0 },
"machine_nozzle_offset_y": { "default_value": 0 },

View file

@ -16,7 +16,7 @@
},
"machine_extruder_cooling_fan_number": { "default_value": 0 },
"machine_extruder_end_code": { "default_value": "M106 P{extruder_nr} S1.0\nG91\nG0 Z0.4 F600\nG90\nG0 X{prime_tower_position_x - prime_tower_size/2} Y{prime_tower_position_y + prime_tower_size/2} F6000" },
"machine_extruder_start_code": { "default_value": "G0 X{prime_tower_position_x - prime_tower_size/2} Y{prime_tower_position_y + prime_tower_size/2} F6000\nM104 S{material_print_temperature}\nG4 S5\nG91\nG0 Z-0.4 F600\nG90\nM107 P{(extruder_nr+1)%2}\nM106 P{extruder_nr} S{cool_fan_speed_0/100}" },
"machine_extruder_start_code": { "default_value": "G0 X{prime_tower_position_x - prime_tower_size/2} Y{prime_tower_position_y + prime_tower_size/2} F6000\nM104 S{material_print_temperature}\nG4 S5\nG91\nG0 Z-0.4 F600\nG90\nM107 P{(extruder_nr+1)%2}\nM106 P{extruder_nr} S{(layer_z > 1 ? cool_fan_speed/100 : cool_fan_speed_0/100)}" },
"machine_extruder_start_code_duration": { "default_value": 10 },
"machine_nozzle_offset_x": { "default_value": 0 },
"machine_nozzle_offset_y": { "default_value": 0 },

View file

@ -16,7 +16,7 @@
},
"machine_extruder_cooling_fan_number": { "default_value": 1 },
"machine_extruder_end_code": { "default_value": "M106 P{extruder_nr} S1.0\nG91\nG0 Z0.4 F600\nG90\nG0 X{prime_tower_position_x - prime_tower_size/2} Y{prime_tower_position_y + prime_tower_size/2} F6000" },
"machine_extruder_start_code": { "default_value": "G0 X{prime_tower_position_x - prime_tower_size/2} Y{prime_tower_position_y + prime_tower_size/2} F6000\nM104 S{material_print_temperature}\nG4 S5\nG91\nG0 Z-0.4 F600\nG90\nM107 P{(extruder_nr+1)%2}\nM106 P{extruder_nr} S{cool_fan_speed_0/100}" },
"machine_extruder_start_code": { "default_value": "G0 X{prime_tower_position_x - prime_tower_size/2} Y{prime_tower_position_y + prime_tower_size/2} F6000\nM104 S{material_print_temperature}\nG4 S5\nG91\nG0 Z-0.4 F600\nG90\nM107 P{(extruder_nr+1)%2}\nM106 P{extruder_nr} S{(layer_z > 1 ? cool_fan_speed/100 : cool_fan_speed_0/100)}" },
"machine_extruder_start_code_duration": { "default_value": 10 },
"machine_nozzle_offset_x": { "default_value": 0 },
"machine_nozzle_offset_y": { "default_value": 0 },

View file

@ -0,0 +1,22 @@
{
"version": 2,
"name": "Extruder",
"inherits": "fdmextruder",
"metadata":
{
"machine": "ultimaker_sketch",
"position": "0"
},
"overrides":
{
"extruder_nr":
{
"default_value": 0,
"maximum_value": "1"
},
"machine_nozzle_offset_x": { "default_value": 0 },
"machine_nozzle_offset_y": { "default_value": 0 },
"machine_nozzle_size": { "default_value": 0.4 },
"material_diameter": { "default_value": 1.75 }
}
}

View file

@ -0,0 +1,22 @@
{
"version": 2,
"name": "Extruder",
"inherits": "fdmextruder",
"metadata":
{
"machine": "ultimaker_sketch_large",
"position": "0"
},
"overrides":
{
"extruder_nr":
{
"default_value": 0,
"maximum_value": "1"
},
"machine_nozzle_offset_x": { "default_value": 0 },
"machine_nozzle_offset_y": { "default_value": 0 },
"machine_nozzle_size": { "default_value": 0.4 },
"material_diameter": { "default_value": 1.75 }
}
}

View file

@ -0,0 +1,22 @@
{
"version": 2,
"name": "Extruder",
"inherits": "fdmextruder",
"metadata":
{
"machine": "ultimaker_sketch_sprint",
"position": "0"
},
"overrides":
{
"extruder_nr":
{
"default_value": 0,
"maximum_value": "1"
},
"machine_nozzle_offset_x": { "default_value": 0 },
"machine_nozzle_offset_y": { "default_value": 0 },
"machine_nozzle_size": { "default_value": 0.4 },
"material_diameter": { "default_value": 1.75 }
}
}

View file

@ -4,7 +4,7 @@
"inherits": "fdmextruder",
"metadata":
{
"machine": "zyyx_agile",
"machine": "zyyx_plus",
"position": "0"
},
"overrides":

View file

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

View file

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

View file

@ -857,7 +857,7 @@ msgid "Wall Ordering"
msgstr ""
msgctxt "inset_direction description"
msgid "Determines the order in which walls are printed. Printing outer walls earlier helps with dimensional accuracy, as faults from inner walls cannot propagate to the outside. However printing them later allows them to stack better when overhangs are printed. When there is an uneven amount of total innner walls, the 'center last line' is always printed last."
msgid "Determines the order in which walls are printed. Printing outer walls earlier helps with dimensional accuracy, as faults from inner walls cannot propagate to the outside. However printing them later allows them to stack better when overhangs are printed. When there is an uneven amount of total inner walls, the 'center last line' is always printed last."
msgstr ""
msgctxt "inset_direction option inside_out"

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

View file

@ -7,7 +7,7 @@ version = 4
intent_category = engineering
material = generic_abs
quality_type = D010
setting_version = 23
setting_version = 24
type = intent
variant = DBE 0.40mm

View file

@ -7,7 +7,7 @@ version = 4
intent_category = engineering
material = generic_abs
quality_type = D015
setting_version = 23
setting_version = 24
type = intent
variant = DBE 0.40mm

View file

@ -7,7 +7,7 @@ version = 4
intent_category = engineering
material = generic_abs
quality_type = D020
setting_version = 23
setting_version = 24
type = intent
variant = DBE 0.40mm

View file

@ -7,7 +7,7 @@ version = 4
intent_category = quick
material = generic_abs
quality_type = D020
setting_version = 23
setting_version = 24
type = intent
variant = DBE 0.40mm

View file

@ -7,7 +7,7 @@ version = 4
intent_category = quick
material = generic_abs
quality_type = D030
setting_version = 23
setting_version = 24
type = intent
variant = DBE 0.40mm

View file

@ -7,7 +7,7 @@ version = 4
intent_category = engineering
material = generic_abs
quality_type = D010
setting_version = 23
setting_version = 24
type = intent
variant = FBE 0.40mm

View file

@ -7,7 +7,7 @@ version = 4
intent_category = engineering
material = generic_abs
quality_type = D015
setting_version = 23
setting_version = 24
type = intent
variant = FBE 0.40mm

View file

@ -7,7 +7,7 @@ version = 4
intent_category = engineering
material = generic_abs
quality_type = D020
setting_version = 23
setting_version = 24
type = intent
variant = FBE 0.40mm

View file

@ -7,7 +7,7 @@ version = 4
intent_category = quick
material = generic_abs
quality_type = D020
setting_version = 23
setting_version = 24
type = intent
variant = FBE 0.40mm

View file

@ -7,7 +7,7 @@ version = 4
intent_category = quick
material = generic_abs
quality_type = D030
setting_version = 23
setting_version = 24
type = intent
variant = FBE 0.40mm

View file

@ -7,7 +7,7 @@ version = 4
intent_category = engineering
material = generic_petg
quality_type = D010
setting_version = 23
setting_version = 24
type = intent
variant = DBE 0.40mm

View file

@ -7,7 +7,7 @@ version = 4
intent_category = engineering
material = generic_petg
quality_type = D015
setting_version = 23
setting_version = 24
type = intent
variant = DBE 0.40mm

View file

@ -7,7 +7,7 @@ version = 4
intent_category = engineering
material = generic_petg
quality_type = D020
setting_version = 23
setting_version = 24
type = intent
variant = DBE 0.40mm

View file

@ -7,7 +7,7 @@ version = 4
intent_category = quick
material = generic_petg
quality_type = D020
setting_version = 23
setting_version = 24
type = intent
variant = DBE 0.40mm

View file

@ -7,7 +7,7 @@ version = 4
intent_category = quick
material = generic_petg
quality_type = D020
setting_version = 23
setting_version = 24
type = intent
variant = DBE 0.40mm

View file

@ -7,7 +7,7 @@ version = 4
intent_category = quick
material = generic_petg
quality_type = D030
setting_version = 23
setting_version = 24
type = intent
variant = DBE 0.40mm

View file

@ -7,7 +7,7 @@ version = 4
intent_category = engineering
material = generic_petg
quality_type = D010
setting_version = 23
setting_version = 24
type = intent
variant = FBE 0.40mm

View file

@ -7,7 +7,7 @@ version = 4
intent_category = engineering
material = generic_petg
quality_type = D015
setting_version = 23
setting_version = 24
type = intent
variant = FBE 0.40mm

View file

@ -7,7 +7,7 @@ version = 4
intent_category = engineering
material = generic_petg
quality_type = D020
setting_version = 23
setting_version = 24
type = intent
variant = FBE 0.40mm

View file

@ -7,7 +7,7 @@ version = 4
intent_category = quick
material = generic_petg
quality_type = D015
setting_version = 23
setting_version = 24
type = intent
variant = FBE 0.40mm

View file

@ -7,7 +7,7 @@ version = 4
intent_category = quick
material = generic_petg
quality_type = D020
setting_version = 23
setting_version = 24
type = intent
variant = FBE 0.40mm

View file

@ -7,7 +7,7 @@ version = 4
intent_category = quick
material = generic_petg
quality_type = D030
setting_version = 23
setting_version = 24
type = intent
variant = FBE 0.40mm

View file

@ -7,7 +7,7 @@ version = 4
intent_category = engineering
material = generic_pla
quality_type = D010
setting_version = 23
setting_version = 24
type = intent
variant = DBE 0.40mm

View file

@ -7,7 +7,7 @@ version = 4
intent_category = engineering
material = generic_pla
quality_type = D015
setting_version = 23
setting_version = 24
type = intent
variant = DBE 0.40mm

View file

@ -7,7 +7,7 @@ version = 4
intent_category = engineering
material = generic_pla
quality_type = D020
setting_version = 23
setting_version = 24
type = intent
variant = DBE 0.40mm

View file

@ -7,7 +7,7 @@ version = 4
intent_category = quick
material = generic_pla
quality_type = D020
setting_version = 23
setting_version = 24
type = intent
variant = DBE 0.40mm

View file

@ -7,7 +7,7 @@ version = 4
intent_category = quick
material = generic_pla
quality_type = D030
setting_version = 23
setting_version = 24
type = intent
variant = DBE 0.40mm

View file

@ -7,7 +7,7 @@ version = 4
intent_category = engineering
material = generic_pla
quality_type = D010
setting_version = 23
setting_version = 24
type = intent
variant = FBE 0.40mm

View file

@ -7,7 +7,7 @@ version = 4
intent_category = engineering
material = generic_pla
quality_type = D015
setting_version = 23
setting_version = 24
type = intent
variant = FBE 0.40mm

View file

@ -7,7 +7,7 @@ version = 4
intent_category = engineering
material = generic_pla
quality_type = D020
setting_version = 23
setting_version = 24
type = intent
variant = FBE 0.40mm

View file

@ -7,7 +7,7 @@ version = 4
intent_category = quick
material = generic_pla
quality_type = D020
setting_version = 23
setting_version = 24
type = intent
variant = FBE 0.40mm

View file

@ -7,7 +7,7 @@ version = 4
intent_category = quick
material = generic_pla
quality_type = D030
setting_version = 23
setting_version = 24
type = intent
variant = FBE 0.40mm

View file

@ -7,7 +7,7 @@ version = 4
intent_category = visual
material = generic_pla
quality_type = Elegoo_layer_005
setting_version = 23
setting_version = 24
type = intent
variant = 0.40mm_Elegoo_Nozzle

View file

@ -7,7 +7,7 @@ version = 4
intent_category = engineering
material = generic_pla
quality_type = Elegoo_layer_015
setting_version = 23
setting_version = 24
type = intent
variant = 0.40mm_Elegoo_Nozzle

View file

@ -7,7 +7,7 @@ version = 4
intent_category = visual
material = generic_pla
quality_type = Elegoo_layer_015
setting_version = 23
setting_version = 24
type = intent
variant = 0.40mm_Elegoo_Nozzle

View file

@ -7,7 +7,7 @@ version = 4
intent_category = engineering
material = generic_pla
quality_type = Elegoo_layer_010
setting_version = 23
setting_version = 24
type = intent
variant = 0.40mm_Elegoo_Nozzle

View file

@ -7,7 +7,7 @@ version = 4
intent_category = visual
material = generic_pla
quality_type = Elegoo_layer_010
setting_version = 23
setting_version = 24
type = intent
variant = 0.40mm_Elegoo_Nozzle

View file

@ -7,7 +7,7 @@ version = 4
intent_category = quick
material = generic_pla
quality_type = Elegoo_layer_020
setting_version = 23
setting_version = 24
type = intent
variant = 0.40mm_Elegoo_Nozzle

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