mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-04-23 22:29:41 +08:00
Restore lost change after an errored merge
This reverts commit 946bf033066e561827da4d00afbc3b680cd7e552.
This commit is contained in:
parent
b334717a11
commit
f0cbd8e802
6
.github/ISSUE_TEMPLATE/SlicingCrash.yaml
vendored
6
.github/ISSUE_TEMPLATE/SlicingCrash.yaml
vendored
@ -6,9 +6,9 @@ body:
|
|||||||
attributes:
|
attributes:
|
||||||
value: |
|
value: |
|
||||||
### ✨Try our improved Cura 5.7✨
|
### ✨Try our improved Cura 5.7✨
|
||||||
Before filling out the report below, we want you to try the latest Cura 5.7 Beta.
|
Before filling out the report below, we want you to try the latest Cura 5.7.
|
||||||
This version of Cura has become significantly more reliable and has an updated slicing engine that will automatically send a report to the Cura Team for analysis.
|
This version of Cura has become significantly more reliable and has an updated slicing engine that will automatically send a report to the Cura Team for analysis.
|
||||||
#### [You can find the downloads here](https://github.com/Ultimaker/Cura/releases/tag/5.7.0-beta.1) ####
|
#### [You can find the downloads here](https://github.com/Ultimaker/Cura/releases/latest) ####
|
||||||
If you still encounter a crash you are still welcome to report the issue so we can use your model as a test case, you can find instructions on how to do that below.
|
If you still encounter a crash you are still welcome to report the issue so we can use your model as a test case, you can find instructions on how to do that below.
|
||||||
|
|
||||||
### Project File
|
### Project File
|
||||||
@ -35,7 +35,7 @@ body:
|
|||||||
- type: markdown
|
- type: markdown
|
||||||
attributes:
|
attributes:
|
||||||
value: |
|
value: |
|
||||||
We work hard on improving our slicing crashes. Our most recent release is 5.6.0.
|
We work hard on improving our slicing crashes. Our most recent release is 5.7.1.
|
||||||
If you are not on the latest version of Cura, [you can download it here](https://github.com/Ultimaker/Cura/releases/latest)
|
If you are not on the latest version of Cura, [you can download it here](https://github.com/Ultimaker/Cura/releases/latest)
|
||||||
- type: input
|
- type: input
|
||||||
attributes:
|
attributes:
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
version: "5.8.1"
|
version: "5.9.0-alpha.0"
|
||||||
requirements:
|
requirements:
|
||||||
- "cura_resources/(latest)@ultimaker/testing"
|
- "cura_resources/(latest)@ultimaker/testing"
|
||||||
- "uranium/(latest)@ultimaker/testing"
|
- "uranium/(latest)@ultimaker/testing"
|
||||||
|
@ -1,7 +1,13 @@
|
|||||||
# Copyright (c) 2018 Ultimaker B.V.
|
# Copyright (c) 2018 Ultimaker B.V.
|
||||||
# Cura is released under the terms of the LGPLv3 or higher.
|
# Cura is released under the terms of the LGPLv3 or higher.
|
||||||
|
|
||||||
from typing import TYPE_CHECKING
|
from dataclasses import asdict
|
||||||
|
|
||||||
|
from typing import cast, Dict, TYPE_CHECKING
|
||||||
|
|
||||||
|
from UM.Settings.InstanceContainer import InstanceContainer
|
||||||
|
from UM.Settings.SettingFunction import SettingFunction
|
||||||
|
from cura.Settings.GlobalStack import GlobalStack
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from cura.CuraApplication import CuraApplication
|
from cura.CuraApplication import CuraApplication
|
||||||
@ -47,3 +53,57 @@ class Settings:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
return self.application.getSidebarCustomMenuItems()
|
return self.application.getSidebarCustomMenuItems()
|
||||||
|
|
||||||
|
def getSliceMetadata(self) -> Dict[str, Dict[str, Dict[str, str]]]:
|
||||||
|
"""Get all changed settings and all settings. For each extruder and the global stack"""
|
||||||
|
print_information = self.application.getPrintInformation()
|
||||||
|
machine_manager = self.application.getMachineManager()
|
||||||
|
settings = {
|
||||||
|
"material": {
|
||||||
|
"length": print_information.materialLengths,
|
||||||
|
"weight": print_information.materialWeights,
|
||||||
|
"cost": print_information.materialCosts,
|
||||||
|
},
|
||||||
|
"global": {
|
||||||
|
"changes": {},
|
||||||
|
"all_settings": {},
|
||||||
|
},
|
||||||
|
"quality": asdict(machine_manager.activeQualityDisplayNameMap()),
|
||||||
|
}
|
||||||
|
|
||||||
|
def _retrieveValue(container: InstanceContainer, setting_: str):
|
||||||
|
value_ = container.getProperty(setting_, "value")
|
||||||
|
for _ in range(0, 1024): # Prevent possibly endless loop by not using a limit.
|
||||||
|
if not isinstance(value_, SettingFunction):
|
||||||
|
return value_ # Success!
|
||||||
|
value_ = value_(container)
|
||||||
|
return 0 # Fallback value after breaking possibly endless loop.
|
||||||
|
|
||||||
|
global_stack = cast(GlobalStack, self.application.getGlobalContainerStack())
|
||||||
|
|
||||||
|
# Add global user or quality changes
|
||||||
|
global_flattened_changes = InstanceContainer.createMergedInstanceContainer(global_stack.userChanges, global_stack.qualityChanges)
|
||||||
|
for setting in global_flattened_changes.getAllKeys():
|
||||||
|
settings["global"]["changes"][setting] = _retrieveValue(global_flattened_changes, setting)
|
||||||
|
|
||||||
|
# Get global all settings values without user or quality changes
|
||||||
|
for setting in global_stack.getAllKeys():
|
||||||
|
settings["global"]["all_settings"][setting] = _retrieveValue(global_stack, setting)
|
||||||
|
|
||||||
|
for i, extruder in enumerate(global_stack.extruderList):
|
||||||
|
# Add extruder fields to settings dictionary
|
||||||
|
settings[f"extruder_{i}"] = {
|
||||||
|
"changes": {},
|
||||||
|
"all_settings": {},
|
||||||
|
}
|
||||||
|
|
||||||
|
# Add extruder user or quality changes
|
||||||
|
extruder_flattened_changes = InstanceContainer.createMergedInstanceContainer(extruder.userChanges, extruder.qualityChanges)
|
||||||
|
for setting in extruder_flattened_changes.getAllKeys():
|
||||||
|
settings[f"extruder_{i}"]["changes"][setting] = _retrieveValue(extruder_flattened_changes, setting)
|
||||||
|
|
||||||
|
# Get extruder all settings values without user or quality changes
|
||||||
|
for setting in extruder.getAllKeys():
|
||||||
|
settings[f"extruder_{i}"]["all_settings"][setting] = _retrieveValue(extruder, setting)
|
||||||
|
|
||||||
|
return settings
|
||||||
|
106
cura/PrinterOutput/FormatMaps.py
Normal file
106
cura/PrinterOutput/FormatMaps.py
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
# Copyright (c) 2024 UltiMaker
|
||||||
|
# Cura is released under the terms of the LGPLv3 or higher.
|
||||||
|
|
||||||
|
from UM.Resources import Resources
|
||||||
|
|
||||||
|
import json
|
||||||
|
from typing import Dict, List, Optional
|
||||||
|
|
||||||
|
class FormatMaps:
|
||||||
|
|
||||||
|
# A map from the printer-type in their native file-formats to the internal name we use.
|
||||||
|
PRINTER_TYPE_NAME = {
|
||||||
|
"fire_e": "ultimaker_method",
|
||||||
|
"lava_f": "ultimaker_methodx",
|
||||||
|
"magma_10": "ultimaker_methodxl",
|
||||||
|
"sketch": "ultimaker_sketch"
|
||||||
|
}
|
||||||
|
|
||||||
|
# A map from the extruder-name in their native file-formats to the internal name we use.
|
||||||
|
EXTRUDER_NAME_MAP = {
|
||||||
|
"mk14_hot": "1XA",
|
||||||
|
"mk14_hot_s": "2XA",
|
||||||
|
"mk14_c": "1C",
|
||||||
|
"mk14": "1A",
|
||||||
|
"mk14_s": "2A",
|
||||||
|
"mk14_e": "LABS"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 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-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"},
|
||||||
|
"pc": {"name": "PC", "guid": "62414577-94d1-490d-b1e4-7ef3ec40db02"},
|
||||||
|
"petg": {"name": "PETG", "guid": "69386c85-5b6c-421a-bec5-aeb1fb33f060"},
|
||||||
|
"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"},
|
||||||
|
"sr30": {"name": "SR-30", "guid": "77873465-83a9-4283-bc44-4e542b8eb3eb"},
|
||||||
|
"bvoh": {"name": "BVOH", "guid": "923e604c-8432-4b09-96aa-9bbbd42207f4"},
|
||||||
|
"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"}
|
||||||
|
}
|
||||||
|
|
||||||
|
__inverse_printer_name: Optional[Dict[str, str]] = None
|
||||||
|
__inverse_extruder_type: Optional[Dict[str, str]] = None
|
||||||
|
__inverse_material_map: Optional[Dict[str, str]] = None
|
||||||
|
__product_to_id_map: Optional[Dict[str, List[str]]] = None
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def getInversePrinterNameMap(cls) -> Dict[str, str]:
|
||||||
|
"""Returns the inverse of the printer name map, that is, from the internal name to the name used in output."""
|
||||||
|
if cls.__inverse_printer_name is not None:
|
||||||
|
return cls.__inverse_printer_name
|
||||||
|
cls.__inverse_printer_name = {}
|
||||||
|
for key, value in cls.PRINTER_TYPE_NAME.items():
|
||||||
|
cls.__inverse_printer_name[value] = key
|
||||||
|
return cls.__inverse_printer_name
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def getInverseExtruderTypeMap(cls) -> Dict[str, str]:
|
||||||
|
"""Returns the inverse of the extruder type map, that is, from the internal name to the name used in output."""
|
||||||
|
if cls.__inverse_extruder_type is not None:
|
||||||
|
return cls.__inverse_extruder_type
|
||||||
|
cls.__inverse_extruder_type = {}
|
||||||
|
for key, value in cls.EXTRUDER_NAME_MAP.items():
|
||||||
|
cls.__inverse_extruder_type[value] = key
|
||||||
|
return cls.__inverse_extruder_type
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def getInverseMaterialMap(cls) -> Dict[str, str]:
|
||||||
|
"""Returns the inverse of the material map, that is, from the internal name to the name used in output.
|
||||||
|
|
||||||
|
Note that this drops the extra info saved in the non-inverse material map, use that if you need it.
|
||||||
|
"""
|
||||||
|
if cls.__inverse_material_map is not None:
|
||||||
|
return cls.__inverse_material_map
|
||||||
|
cls.__inverse_material_map = {}
|
||||||
|
for key, value in cls.MATERIAL_MAP.items():
|
||||||
|
cls.__inverse_material_map[value["name"]] = key
|
||||||
|
return cls.__inverse_material_map
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def getProductIdMap(cls) -> Dict[str, List[str]]:
|
||||||
|
"""Gets a mapping from product names (for example, in the XML files) to their definition IDs.
|
||||||
|
|
||||||
|
This loads the mapping from a file.
|
||||||
|
"""
|
||||||
|
if cls.__product_to_id_map is not None:
|
||||||
|
return cls.__product_to_id_map
|
||||||
|
|
||||||
|
product_to_id_file = Resources.getPath(Resources.Texts, "product_to_id.json")
|
||||||
|
with open(product_to_id_file, encoding = "utf-8") as f:
|
||||||
|
contents = ""
|
||||||
|
for line in f:
|
||||||
|
contents += line if "#" not in line else "".join([line.replace("#", str(n)) for n in range(1, 12)])
|
||||||
|
cls.__product_to_id_map = json.loads(contents)
|
||||||
|
cls.__product_to_id_map = {key: [value] for key, value in cls.__product_to_id_map.items()}
|
||||||
|
#This also loads "Ultimaker S5" -> "ultimaker_s5" even though that is not strictly necessary with the default to change spaces into underscores.
|
||||||
|
#However it is not always loaded with that default; this mapping is also used in serialize() without that default.
|
||||||
|
return cls.__product_to_id_map
|
@ -1,9 +1,10 @@
|
|||||||
# Copyright (c) 2018 Ultimaker B.V.
|
# Copyright (c) 2024 UltiMaker
|
||||||
# Cura is released under the terms of the LGPLv3 or higher.
|
# Cura is released under the terms of the LGPLv3 or higher.
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
from PyQt6.QtCore import pyqtProperty, QObject, pyqtSignal
|
from PyQt6.QtCore import pyqtProperty, QObject, pyqtSignal
|
||||||
|
|
||||||
|
from cura.PrinterOutput.FormatMaps import FormatMaps
|
||||||
from .MaterialOutputModel import MaterialOutputModel
|
from .MaterialOutputModel import MaterialOutputModel
|
||||||
|
|
||||||
|
|
||||||
@ -45,16 +46,8 @@ class ExtruderConfigurationModel(QObject):
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def applyNameMappingHotend(hotendId) -> str:
|
def applyNameMappingHotend(hotendId) -> str:
|
||||||
_EXTRUDER_NAME_MAP = {
|
if hotendId in FormatMaps.EXTRUDER_NAME_MAP:
|
||||||
"mk14_hot":"1XA",
|
return FormatMaps.EXTRUDER_NAME_MAP[hotendId]
|
||||||
"mk14_hot_s":"2XA",
|
|
||||||
"mk14_c":"1C",
|
|
||||||
"mk14":"1A",
|
|
||||||
"mk14_s":"2A",
|
|
||||||
"mk14_e": "LABS"
|
|
||||||
}
|
|
||||||
if hotendId in _EXTRUDER_NAME_MAP:
|
|
||||||
return _EXTRUDER_NAME_MAP[hotendId]
|
|
||||||
return hotendId
|
return hotendId
|
||||||
|
|
||||||
@pyqtProperty(str, fset = setHotendID, notify = extruderConfigurationChanged)
|
@pyqtProperty(str, fset = setHotendID, notify = extruderConfigurationChanged)
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
# Copyright (c) 2017 Ultimaker B.V.
|
# Copyright (c) 2024 UltiMaker
|
||||||
# Cura is released under the terms of the LGPLv3 or higher.
|
# Cura is released under the terms of the LGPLv3 or higher.
|
||||||
|
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
from PyQt6.QtCore import pyqtProperty, QObject
|
from PyQt6.QtCore import pyqtProperty, QObject
|
||||||
|
from cura.PrinterOutput.FormatMaps import FormatMaps
|
||||||
|
|
||||||
|
|
||||||
class MaterialOutputModel(QObject):
|
class MaterialOutputModel(QObject):
|
||||||
@ -23,30 +24,9 @@ class MaterialOutputModel(QObject):
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def getMaterialFromDefinition(guid, type, brand, name):
|
def getMaterialFromDefinition(guid, type, brand, name):
|
||||||
|
if guid is None and brand != "empty" and type in FormatMaps.MATERIAL_MAP:
|
||||||
_MATERIAL_MAP = { "abs" :{"name" :"ABS" ,"guid": "2780b345-577b-4a24-a2c5-12e6aad3e690"},
|
name = FormatMaps.MATERIAL_MAP[type]["name"]
|
||||||
"abs-cf10" :{"name": "ABS-CF" ,"guid": "495a0ce5-9daf-4a16-b7b2-06856d82394d"},
|
guid = FormatMaps.MATERIAL_MAP[type]["guid"]
|
||||||
"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"},
|
|
||||||
"pc" :{"name" :"PC" ,"guid": "62414577-94d1-490d-b1e4-7ef3ec40db02"},
|
|
||||||
"petg" :{"name" :"PETG" ,"guid": "69386c85-5b6c-421a-bec5-aeb1fb33f060"},
|
|
||||||
"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"},
|
|
||||||
"sr30" :{"name" :"SR-30" ,"guid": "77873465-83a9-4283-bc44-4e542b8eb3eb"},
|
|
||||||
"bvoh" :{"name" :"BVOH" ,"guid": "923e604c-8432-4b09-96aa-9bbbd42207f4"},
|
|
||||||
"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"}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if guid is None and brand != "empty" and type in _MATERIAL_MAP:
|
|
||||||
name = _MATERIAL_MAP[type]["name"]
|
|
||||||
guid = _MATERIAL_MAP[type]["guid"]
|
|
||||||
return name, guid
|
return name, guid
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# Copyright (c) 2021 Ultimaker B.V.
|
# Copyright (c) 2024 UltiMaker
|
||||||
# Cura is released under the terms of the LGPLv3 or higher.
|
# Cura is released under the terms of the LGPLv3 or higher.
|
||||||
|
|
||||||
from UM.FileHandler.FileHandler import FileHandler #For typing.
|
from UM.FileHandler.FileHandler import FileHandler #For typing.
|
||||||
@ -6,6 +6,7 @@ from UM.Logger import Logger
|
|||||||
from UM.Scene.SceneNode import SceneNode #For typing.
|
from UM.Scene.SceneNode import SceneNode #For typing.
|
||||||
from cura.API import Account
|
from cura.API import Account
|
||||||
from cura.CuraApplication import CuraApplication
|
from cura.CuraApplication import CuraApplication
|
||||||
|
from cura.PrinterOutput.FormatMaps import FormatMaps
|
||||||
|
|
||||||
from cura.PrinterOutput.PrinterOutputDevice import PrinterOutputDevice, ConnectionState, ConnectionType
|
from cura.PrinterOutput.PrinterOutputDevice import PrinterOutputDevice, ConnectionState, ConnectionType
|
||||||
|
|
||||||
@ -419,14 +420,8 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice):
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def applyPrinterTypeMapping(printer_type):
|
def applyPrinterTypeMapping(printer_type):
|
||||||
_PRINTER_TYPE_NAME = {
|
if printer_type in FormatMaps.PRINTER_TYPE_NAME:
|
||||||
"fire_e": "ultimaker_method",
|
return FormatMaps.PRINTER_TYPE_NAME[printer_type]
|
||||||
"lava_f": "ultimaker_methodx",
|
|
||||||
"magma_10": "ultimaker_methodxl",
|
|
||||||
"sketch": "ultimaker_sketch"
|
|
||||||
}
|
|
||||||
if printer_type in _PRINTER_TYPE_NAME:
|
|
||||||
return _PRINTER_TYPE_NAME[printer_type]
|
|
||||||
return printer_type
|
return printer_type
|
||||||
|
|
||||||
@pyqtProperty(str, constant = True)
|
@pyqtProperty(str, constant = True)
|
||||||
|
@ -114,22 +114,24 @@ class ThreeMFWriter(MeshWriter):
|
|||||||
|
|
||||||
mesh_data = um_node.getMeshData()
|
mesh_data = um_node.getMeshData()
|
||||||
|
|
||||||
|
node_matrix = um_node.getLocalTransformation()
|
||||||
|
node_matrix.preMultiply(transformation)
|
||||||
|
|
||||||
if center_mesh:
|
if center_mesh:
|
||||||
node_matrix = Matrix()
|
center_matrix = Matrix()
|
||||||
# compensate for original center position, if object(s) is/are not around its zero position
|
# compensate for original center position, if object(s) is/are not around its zero position
|
||||||
if mesh_data is not None:
|
if mesh_data is not None:
|
||||||
extents = mesh_data.getExtents()
|
extents = mesh_data.getExtents()
|
||||||
if extents is not None:
|
if extents is not None:
|
||||||
# We use a different coordinate space while writing, so flip Z and Y
|
# We use a different coordinate space while writing, so flip Z and Y
|
||||||
center_vector = Vector(extents.center.x, extents.center.y, extents.center.z)
|
center_vector = Vector(-extents.center.x, -extents.center.y, -extents.center.z)
|
||||||
node_matrix.setByTranslation(center_vector)
|
center_matrix.setByTranslation(center_vector)
|
||||||
node_matrix.multiply(um_node.getLocalTransformation())
|
node_matrix.preMultiply(center_matrix)
|
||||||
else:
|
|
||||||
node_matrix = um_node.getLocalTransformation()
|
|
||||||
|
|
||||||
matrix_string = ThreeMFWriter._convertMatrixToString(node_matrix.preMultiply(transformation))
|
matrix_string = ThreeMFWriter._convertMatrixToString(node_matrix)
|
||||||
|
|
||||||
savitar_node.setTransformation(matrix_string)
|
savitar_node.setTransformation(matrix_string)
|
||||||
|
|
||||||
if mesh_data is not None:
|
if mesh_data is not None:
|
||||||
savitar_node.getMeshData().setVerticesFromBytes(mesh_data.getVerticesAsByteArray())
|
savitar_node.getMeshData().setVerticesFromBytes(mesh_data.getVerticesAsByteArray())
|
||||||
indices_array = mesh_data.getIndicesAsByteArray()
|
indices_array = mesh_data.getIndicesAsByteArray()
|
||||||
|
@ -454,7 +454,12 @@ class StartSliceJob(Job):
|
|||||||
for extruder_stack in global_stack.extruderList:
|
for extruder_stack in global_stack.extruderList:
|
||||||
self._buildExtruderMessage(extruder_stack)
|
self._buildExtruderMessage(extruder_stack)
|
||||||
|
|
||||||
for plugin in CuraApplication.getInstance().getBackendPlugins():
|
backend_plugins = CuraApplication.getInstance().getBackendPlugins()
|
||||||
|
|
||||||
|
# Sort backend plugins by name. Not a very good strategy, but at least it is repeatable. This will be improved later.
|
||||||
|
backend_plugins = sorted(backend_plugins, key=lambda backend_plugin: backend_plugin.getId())
|
||||||
|
|
||||||
|
for plugin in backend_plugins:
|
||||||
if not plugin.usePlugin():
|
if not plugin.usePlugin():
|
||||||
continue
|
continue
|
||||||
for slot in plugin.getSupportedSlots():
|
for slot in plugin.getSupportedSlots():
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# Copyright (c) 2023 UltiMaker
|
# Copyright (c) 2024 UltiMaker
|
||||||
# Cura is released under the terms of the LGPLv3 or higher.
|
# Cura is released under the terms of the LGPLv3 or higher.
|
||||||
from io import StringIO, BufferedIOBase
|
from io import StringIO, BufferedIOBase
|
||||||
import json
|
import json
|
||||||
@ -18,6 +18,7 @@ from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator
|
|||||||
from UM.i18n import i18nCatalog
|
from UM.i18n import i18nCatalog
|
||||||
|
|
||||||
from cura.CuraApplication import CuraApplication
|
from cura.CuraApplication import CuraApplication
|
||||||
|
from cura.PrinterOutput.FormatMaps import FormatMaps
|
||||||
from cura.Snapshot import Snapshot
|
from cura.Snapshot import Snapshot
|
||||||
from cura.Utils.Threading import call_on_qt_thread
|
from cura.Utils.Threading import call_on_qt_thread
|
||||||
from cura.CuraVersion import ConanInstalls
|
from cura.CuraVersion import ConanInstalls
|
||||||
@ -137,6 +138,30 @@ class MakerbotWriter(MeshWriter):
|
|||||||
for png_file in png_files:
|
for png_file in png_files:
|
||||||
file, data = png_file["file"], png_file["data"]
|
file, data = png_file["file"], png_file["data"]
|
||||||
zip_stream.writestr(file, data)
|
zip_stream.writestr(file, data)
|
||||||
|
api = CuraApplication.getInstance().getCuraAPI()
|
||||||
|
metadata_json = api.interface.settings.getSliceMetadata()
|
||||||
|
|
||||||
|
# All the mapping stuff we have to do:
|
||||||
|
product_to_id_map = FormatMaps.getProductIdMap()
|
||||||
|
printer_name_map = FormatMaps.getInversePrinterNameMap()
|
||||||
|
extruder_type_map = FormatMaps.getInverseExtruderTypeMap()
|
||||||
|
material_map = FormatMaps.getInverseMaterialMap()
|
||||||
|
for key, value in metadata_json.items():
|
||||||
|
if "all_settings" in value:
|
||||||
|
if "machine_name" in value["all_settings"]:
|
||||||
|
machine_name = value["all_settings"]["machine_name"]
|
||||||
|
if machine_name in product_to_id_map:
|
||||||
|
machine_name = product_to_id_map[machine_name][0]
|
||||||
|
value["all_settings"]["machine_name"] = printer_name_map.get(machine_name, machine_name)
|
||||||
|
if "machine_nozzle_id" in value["all_settings"]:
|
||||||
|
extruder_type = value["all_settings"]["machine_nozzle_id"]
|
||||||
|
value["all_settings"]["machine_nozzle_id"] = extruder_type_map.get(extruder_type, extruder_type)
|
||||||
|
if "material_type" in value["all_settings"]:
|
||||||
|
material_type = value["all_settings"]["material_type"]
|
||||||
|
value["all_settings"]["material_type"] = material_map.get(material_type, material_type)
|
||||||
|
|
||||||
|
slice_metadata = json.dumps(metadata_json, separators=(", ", ": "), indent=4)
|
||||||
|
zip_stream.writestr("slicemetadata.json", slice_metadata)
|
||||||
except (IOError, OSError, BadZipFile) as ex:
|
except (IOError, OSError, BadZipFile) as ex:
|
||||||
Logger.log("e", f"Could not write to (.makerbot) file because: '{ex}'.")
|
Logger.log("e", f"Could not write to (.makerbot) file because: '{ex}'.")
|
||||||
self.setInformation(catalog.i18nc("@error", "MakerbotWriter could not save to the designated path."))
|
self.setInformation(catalog.i18nc("@error", "MakerbotWriter could not save to the designated path."))
|
||||||
|
@ -24,6 +24,7 @@ from UM.Settings.InstanceContainer import InstanceContainer
|
|||||||
from cura.CuraApplication import CuraApplication
|
from cura.CuraApplication import CuraApplication
|
||||||
from cura.Settings.GlobalStack import GlobalStack
|
from cura.Settings.GlobalStack import GlobalStack
|
||||||
from cura.Utils.Threading import call_on_qt_thread
|
from cura.Utils.Threading import call_on_qt_thread
|
||||||
|
from cura.API import CuraAPI
|
||||||
|
|
||||||
from UM.i18n import i18nCatalog
|
from UM.i18n import i18nCatalog
|
||||||
|
|
||||||
@ -85,7 +86,8 @@ class UFPWriter(MeshWriter):
|
|||||||
try:
|
try:
|
||||||
archive.addContentType(extension="json", mime_type="application/json")
|
archive.addContentType(extension="json", mime_type="application/json")
|
||||||
setting_textio = StringIO()
|
setting_textio = StringIO()
|
||||||
json.dump(self._getSliceMetadata(), setting_textio, separators=(", ", ": "), indent=4)
|
api = CuraApplication.getInstance().getCuraAPI()
|
||||||
|
json.dump(api.interface.settings.getSliceMetadata(), setting_textio, separators=(", ", ": "), indent=4)
|
||||||
steam = archive.getStream(SLICE_METADATA_PATH)
|
steam = archive.getStream(SLICE_METADATA_PATH)
|
||||||
steam.write(setting_textio.getvalue().encode("UTF-8"))
|
steam.write(setting_textio.getvalue().encode("UTF-8"))
|
||||||
except EnvironmentError as e:
|
except EnvironmentError as e:
|
||||||
@ -210,57 +212,3 @@ class UFPWriter(MeshWriter):
|
|||||||
return [{"name": item.getName()}
|
return [{"name": item.getName()}
|
||||||
for item in DepthFirstIterator(node)
|
for item in DepthFirstIterator(node)
|
||||||
if item.getMeshData() is not None and not item.callDecoration("isNonPrintingMesh")]
|
if item.getMeshData() is not None and not item.callDecoration("isNonPrintingMesh")]
|
||||||
|
|
||||||
def _getSliceMetadata(self) -> Dict[str, Dict[str, Dict[str, str]]]:
|
|
||||||
"""Get all changed settings and all settings. For each extruder and the global stack"""
|
|
||||||
print_information = CuraApplication.getInstance().getPrintInformation()
|
|
||||||
machine_manager = CuraApplication.getInstance().getMachineManager()
|
|
||||||
settings = {
|
|
||||||
"material": {
|
|
||||||
"length": print_information.materialLengths,
|
|
||||||
"weight": print_information.materialWeights,
|
|
||||||
"cost": print_information.materialCosts,
|
|
||||||
},
|
|
||||||
"global": {
|
|
||||||
"changes": {},
|
|
||||||
"all_settings": {},
|
|
||||||
},
|
|
||||||
"quality": asdict(machine_manager.activeQualityDisplayNameMap()),
|
|
||||||
}
|
|
||||||
|
|
||||||
def _retrieveValue(container: InstanceContainer, setting_: str):
|
|
||||||
value_ = container.getProperty(setting_, "value")
|
|
||||||
for _ in range(0, 1024): # Prevent possibly endless loop by not using a limit.
|
|
||||||
if not isinstance(value_, SettingFunction):
|
|
||||||
return value_ # Success!
|
|
||||||
value_ = value_(container)
|
|
||||||
return 0 # Fallback value after breaking possibly endless loop.
|
|
||||||
|
|
||||||
global_stack = cast(GlobalStack, Application.getInstance().getGlobalContainerStack())
|
|
||||||
|
|
||||||
# Add global user or quality changes
|
|
||||||
global_flattened_changes = InstanceContainer.createMergedInstanceContainer(global_stack.userChanges, global_stack.qualityChanges)
|
|
||||||
for setting in global_flattened_changes.getAllKeys():
|
|
||||||
settings["global"]["changes"][setting] = _retrieveValue(global_flattened_changes, setting)
|
|
||||||
|
|
||||||
# Get global all settings values without user or quality changes
|
|
||||||
for setting in global_stack.getAllKeys():
|
|
||||||
settings["global"]["all_settings"][setting] = _retrieveValue(global_stack, setting)
|
|
||||||
|
|
||||||
for i, extruder in enumerate(global_stack.extruderList):
|
|
||||||
# Add extruder fields to settings dictionary
|
|
||||||
settings[f"extruder_{i}"] = {
|
|
||||||
"changes": {},
|
|
||||||
"all_settings": {},
|
|
||||||
}
|
|
||||||
|
|
||||||
# Add extruder user or quality changes
|
|
||||||
extruder_flattened_changes = InstanceContainer.createMergedInstanceContainer(extruder.userChanges, extruder.qualityChanges)
|
|
||||||
for setting in extruder_flattened_changes.getAllKeys():
|
|
||||||
settings[f"extruder_{i}"]["changes"][setting] = _retrieveValue(extruder_flattened_changes, setting)
|
|
||||||
|
|
||||||
# Get extruder all settings values without user or quality changes
|
|
||||||
for setting in extruder.getAllKeys():
|
|
||||||
settings[f"extruder_{i}"]["all_settings"][setting] = _retrieveValue(extruder, setting)
|
|
||||||
|
|
||||||
return settings
|
|
||||||
|
@ -17,6 +17,7 @@ from UM.Settings.ContainerRegistry import ContainerRegistry
|
|||||||
from UM.ConfigurationErrorMessage import ConfigurationErrorMessage
|
from UM.ConfigurationErrorMessage import ConfigurationErrorMessage
|
||||||
|
|
||||||
from cura.CuraApplication import CuraApplication
|
from cura.CuraApplication import CuraApplication
|
||||||
|
from cura.PrinterOutput.FormatMaps import FormatMaps
|
||||||
from cura.Machines.VariantType import VariantType
|
from cura.Machines.VariantType import VariantType
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@ -249,7 +250,7 @@ class XmlMaterialProfile(InstanceContainer):
|
|||||||
machine_variant_map[definition_id][variant_name] = variant_dict
|
machine_variant_map[definition_id][variant_name] = variant_dict
|
||||||
|
|
||||||
# Map machine human-readable names to IDs
|
# Map machine human-readable names to IDs
|
||||||
product_id_map = self.getProductIdMap()
|
product_id_map = FormatMaps.getProductIdMap()
|
||||||
|
|
||||||
for definition_id, container in machine_container_map.items():
|
for definition_id, container in machine_container_map.items():
|
||||||
definition_id = container.getMetaDataEntry("definition")
|
definition_id = container.getMetaDataEntry("definition")
|
||||||
@ -647,7 +648,7 @@ class XmlMaterialProfile(InstanceContainer):
|
|||||||
self._dirty = False
|
self._dirty = False
|
||||||
|
|
||||||
# Map machine human-readable names to IDs
|
# Map machine human-readable names to IDs
|
||||||
product_id_map = self.getProductIdMap()
|
product_id_map = FormatMaps.getProductIdMap()
|
||||||
|
|
||||||
machines = data.iterfind("./um:settings/um:machine", self.__namespaces)
|
machines = data.iterfind("./um:settings/um:machine", self.__namespaces)
|
||||||
for machine in machines:
|
for machine in machines:
|
||||||
@ -923,7 +924,7 @@ class XmlMaterialProfile(InstanceContainer):
|
|||||||
result_metadata.append(base_metadata)
|
result_metadata.append(base_metadata)
|
||||||
|
|
||||||
# Map machine human-readable names to IDs
|
# Map machine human-readable names to IDs
|
||||||
product_id_map = cls.getProductIdMap()
|
product_id_map = FormatMaps.getProductIdMap()
|
||||||
|
|
||||||
for machine in data.iterfind("./um:settings/um:machine", cls.__namespaces):
|
for machine in data.iterfind("./um:settings/um:machine", cls.__namespaces):
|
||||||
machine_compatibility = common_compatibility
|
machine_compatibility = common_compatibility
|
||||||
@ -1127,29 +1128,6 @@ class XmlMaterialProfile(InstanceContainer):
|
|||||||
id_list = list(id_list)
|
id_list = list(id_list)
|
||||||
return id_list
|
return id_list
|
||||||
|
|
||||||
__product_to_id_map: Optional[Dict[str, List[str]]] = None
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def getProductIdMap(cls) -> Dict[str, List[str]]:
|
|
||||||
"""Gets a mapping from product names in the XML files to their definition IDs.
|
|
||||||
|
|
||||||
This loads the mapping from a file.
|
|
||||||
"""
|
|
||||||
if cls.__product_to_id_map is not None:
|
|
||||||
return cls.__product_to_id_map
|
|
||||||
|
|
||||||
plugin_path = cast(str, PluginRegistry.getInstance().getPluginPath("XmlMaterialProfile"))
|
|
||||||
product_to_id_file = os.path.join(plugin_path, "product_to_id.json")
|
|
||||||
with open(product_to_id_file, encoding = "utf-8") as f:
|
|
||||||
contents = ""
|
|
||||||
for line in f:
|
|
||||||
contents += line if "#" not in line else "".join([line.replace("#", str(n)) for n in range(1, 12)])
|
|
||||||
cls.__product_to_id_map = json.loads(contents)
|
|
||||||
cls.__product_to_id_map = {key: [value] for key, value in cls.__product_to_id_map.items()}
|
|
||||||
#This also loads "Ultimaker S5" -> "ultimaker_s5" even though that is not strictly necessary with the default to change spaces into underscores.
|
|
||||||
#However it is not always loaded with that default; this mapping is also used in serialize() without that default.
|
|
||||||
return cls.__product_to_id_map
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _parseCompatibleValue(value: str):
|
def _parseCompatibleValue(value: str):
|
||||||
"""Parse the value of the "material compatible" property."""
|
"""Parse the value of the "material compatible" property."""
|
||||||
|
@ -130,7 +130,6 @@
|
|||||||
"machine_min_cool_heat_time_window": { "default_value": 15.0 },
|
"machine_min_cool_heat_time_window": { "default_value": 15.0 },
|
||||||
"machine_name": { "default_value": "Mark2_for_Ultimaker2" },
|
"machine_name": { "default_value": "Mark2_for_Ultimaker2" },
|
||||||
"machine_nozzle_cool_down_speed": { "default_value": 1.5 },
|
"machine_nozzle_cool_down_speed": { "default_value": 1.5 },
|
||||||
"machine_nozzle_head_distance": { "default_value": 5 },
|
|
||||||
"machine_nozzle_heat_up_speed": { "default_value": 3.5 },
|
"machine_nozzle_heat_up_speed": { "default_value": 3.5 },
|
||||||
"machine_nozzle_size": { "default_value": 0.4 },
|
"machine_nozzle_size": { "default_value": 0.4 },
|
||||||
"machine_show_variants": { "default_value": true },
|
"machine_show_variants": { "default_value": true },
|
||||||
|
@ -65,7 +65,6 @@
|
|||||||
"machine_heated_bed": { "default_value": true },
|
"machine_heated_bed": { "default_value": true },
|
||||||
"machine_height": { "default_value": 340 },
|
"machine_height": { "default_value": 340 },
|
||||||
"machine_name": { "default_value": "Atom 3" },
|
"machine_name": { "default_value": "Atom 3" },
|
||||||
"machine_nozzle_head_distance": { "default_value": 6 },
|
|
||||||
"machine_shape": { "default_value": "elliptic" },
|
"machine_shape": { "default_value": "elliptic" },
|
||||||
"machine_show_variants": { "default_value": true },
|
"machine_show_variants": { "default_value": true },
|
||||||
"machine_start_gcode": { "default_value": ";MACHINE START CODE\nG21 ;metric values\nG90 ;absolute positioning\nG28 ;home\nG1 Z5 F9000\n;MACHINE START CODE" },
|
"machine_start_gcode": { "default_value": ";MACHINE START CODE\nG21 ;metric values\nG90 ;absolute positioning\nG28 ;home\nG1 Z5 F9000\n;MACHINE START CODE" },
|
||||||
|
18
resources/definitions/creality_crm4.def.json
Normal file
18
resources/definitions/creality_crm4.def.json
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"version": 2,
|
||||||
|
"name": "Creality CR-M4",
|
||||||
|
"inherits": "creality_base",
|
||||||
|
"metadata":
|
||||||
|
{
|
||||||
|
"visible": true,
|
||||||
|
"quality_definition": "creality_base"
|
||||||
|
},
|
||||||
|
"overrides":
|
||||||
|
{
|
||||||
|
"gantry_height": { "value": 35 },
|
||||||
|
"machine_depth": { "default_value": 450 },
|
||||||
|
"machine_height": { "default_value": 470 },
|
||||||
|
"machine_name": { "default_value": "Creality CR-M4" },
|
||||||
|
"machine_width": { "default_value": 450 }
|
||||||
|
}
|
||||||
|
}
|
@ -35,7 +35,6 @@
|
|||||||
"machine_max_feedrate_y": { "default_value": 300 },
|
"machine_max_feedrate_y": { "default_value": 300 },
|
||||||
"machine_max_feedrate_z": { "default_value": 40 },
|
"machine_max_feedrate_z": { "default_value": 40 },
|
||||||
"machine_name": { "default_value": "Diytech 220" },
|
"machine_name": { "default_value": "Diytech 220" },
|
||||||
"machine_nozzle_head_distance": { "default_value": 3 },
|
|
||||||
"machine_nozzle_tip_outer_diameter": { "default_value": 1 },
|
"machine_nozzle_tip_outer_diameter": { "default_value": 1 },
|
||||||
"machine_start_gcode": { "default_value": "G21\nG90\nM82\nM107\nG28\nG1 Z15 F200\nT0\nG92 E0\nG1 E16 F250\nG92 E0\n" },
|
"machine_start_gcode": { "default_value": "G21\nG90\nM82\nM107\nG28\nG1 Z15 F200\nT0\nG92 E0\nG1 E16 F250\nG92 E0\n" },
|
||||||
"machine_use_extruder_offset_to_offset_coords": { "default_value": true },
|
"machine_use_extruder_offset_to_offset_coords": { "default_value": true },
|
||||||
|
@ -122,7 +122,6 @@
|
|||||||
"machine_name": { "default_value": "dxu" },
|
"machine_name": { "default_value": "dxu" },
|
||||||
"machine_nozzle_cool_down_speed": { "default_value": 1.5 },
|
"machine_nozzle_cool_down_speed": { "default_value": 1.5 },
|
||||||
"machine_nozzle_expansion_angle": { "default_value": 45 },
|
"machine_nozzle_expansion_angle": { "default_value": 45 },
|
||||||
"machine_nozzle_head_distance": { "default_value": 5 },
|
|
||||||
"machine_nozzle_heat_up_speed": { "default_value": 3.5 },
|
"machine_nozzle_heat_up_speed": { "default_value": 3.5 },
|
||||||
"machine_nozzle_size": { "default_value": 0.4 },
|
"machine_nozzle_size": { "default_value": 0.4 },
|
||||||
"machine_show_variants": { "default_value": true },
|
"machine_show_variants": { "default_value": true },
|
||||||
|
@ -44,7 +44,6 @@
|
|||||||
"machine_max_jerk_xy": { "default_value": 10 },
|
"machine_max_jerk_xy": { "default_value": 10 },
|
||||||
"machine_max_jerk_z": { "default_value": 10 },
|
"machine_max_jerk_z": { "default_value": 10 },
|
||||||
"machine_name": { "default_value": "Erzay3D" },
|
"machine_name": { "default_value": "Erzay3D" },
|
||||||
"machine_nozzle_head_distance": { "default_value": 2.5 },
|
|
||||||
"machine_nozzle_size": { "default_value": 0.4 },
|
"machine_nozzle_size": { "default_value": 0.4 },
|
||||||
"machine_shape": { "default_value": "elliptic" },
|
"machine_shape": { "default_value": "elliptic" },
|
||||||
"machine_start_gcode": { "default_value": "G28\nG1 Z15.0 F6000\nG92 E0" },
|
"machine_start_gcode": { "default_value": "G28\nG1 Z15.0 F6000\nG92 E0" },
|
||||||
|
@ -167,6 +167,17 @@
|
|||||||
"type": "float",
|
"type": "float",
|
||||||
"unit": "mm"
|
"unit": "mm"
|
||||||
},
|
},
|
||||||
|
"machine_nozzle_head_distance":
|
||||||
|
{
|
||||||
|
"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_per_extruder": true,
|
||||||
|
"settable_per_mesh": false,
|
||||||
|
"settable_per_meshgroup": false,
|
||||||
|
"type": "float",
|
||||||
|
"unit": "mm"
|
||||||
|
},
|
||||||
"machine_nozzle_id":
|
"machine_nozzle_id":
|
||||||
{
|
{
|
||||||
"default_value": "unknown",
|
"default_value": "unknown",
|
||||||
|
@ -28,6 +28,18 @@
|
|||||||
"icon": "Printer",
|
"icon": "Printer",
|
||||||
"children":
|
"children":
|
||||||
{
|
{
|
||||||
|
"build_volume_fan_nr":
|
||||||
|
{
|
||||||
|
"label": "Build volume fan number",
|
||||||
|
"description": "The number of the fan that cools the build volume. If this is set to 0, it's means that there is no build volume fan",
|
||||||
|
"default_value": 0,
|
||||||
|
"minimum_value": "0",
|
||||||
|
"maximum_value": "999999",
|
||||||
|
"type": "int",
|
||||||
|
"settable_per_mesh": false,
|
||||||
|
"settable_per_extruder": false,
|
||||||
|
"settable_per_meshgroup": false
|
||||||
|
},
|
||||||
"machine_name":
|
"machine_name":
|
||||||
{
|
{
|
||||||
"label": "Machine Type",
|
"label": "Machine Type",
|
||||||
@ -289,17 +301,6 @@
|
|||||||
"settable_per_meshgroup": false,
|
"settable_per_meshgroup": false,
|
||||||
"settable_globally": false
|
"settable_globally": false
|
||||||
},
|
},
|
||||||
"machine_nozzle_head_distance":
|
|
||||||
{
|
|
||||||
"label": "Nozzle Length",
|
|
||||||
"description": "The height difference between the tip of the nozzle and the lowest part of the print head.",
|
|
||||||
"unit": "mm",
|
|
||||||
"default_value": 3,
|
|
||||||
"type": "float",
|
|
||||||
"settable_per_mesh": false,
|
|
||||||
"settable_per_extruder": true,
|
|
||||||
"settable_per_meshgroup": false
|
|
||||||
},
|
|
||||||
"machine_nozzle_expansion_angle":
|
"machine_nozzle_expansion_angle":
|
||||||
{
|
{
|
||||||
"label": "Nozzle Angle",
|
"label": "Nozzle Angle",
|
||||||
@ -4545,6 +4546,37 @@
|
|||||||
"settable_per_mesh": false,
|
"settable_per_mesh": false,
|
||||||
"settable_per_extruder": true
|
"settable_per_extruder": true
|
||||||
},
|
},
|
||||||
|
"build_fan_full_at_height":
|
||||||
|
{
|
||||||
|
"label": "Build Fan Speed at Height",
|
||||||
|
"description": "The height at which the fans spin on regular fan speed. At the layers below the fan speed gradually increases from Initial Fan Speed to Regular Fan Speed.",
|
||||||
|
"unit": "mm",
|
||||||
|
"type": "float",
|
||||||
|
"default_value": 0,
|
||||||
|
"minimum_value": "0",
|
||||||
|
"enabled": "build_volume_fan_nr != 0",
|
||||||
|
"maximum_value_warning": "10.0",
|
||||||
|
"settable_per_mesh": false,
|
||||||
|
"settable_per_extruder": false,
|
||||||
|
"settable_per_meshgroup": false,
|
||||||
|
"children":
|
||||||
|
{
|
||||||
|
"build_fan_full_layer":
|
||||||
|
{
|
||||||
|
"label": "Build Fan Speed at Layer",
|
||||||
|
"description": "The layer at which the build fans spin on full fan speed. This value is calculated and rounded to a whole number.",
|
||||||
|
"type": "int",
|
||||||
|
"default_value": 0,
|
||||||
|
"minimum_value": "0",
|
||||||
|
"enabled": "build_volume_fan_nr != 0",
|
||||||
|
"maximum_value_warning": "10 / resolveOrValue('layer_height')",
|
||||||
|
"value": "max(1, int(math.floor((build_fan_full_at_height - resolveOrValue('layer_height_0')) / resolveOrValue('layer_height')) + 2))",
|
||||||
|
"settable_per_mesh": false,
|
||||||
|
"settable_per_extruder": false,
|
||||||
|
"settable_per_meshgroup": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"cool_fan_speed":
|
"cool_fan_speed":
|
||||||
{
|
{
|
||||||
"label": "Fan Speed",
|
"label": "Fan Speed",
|
||||||
|
@ -27,7 +27,6 @@
|
|||||||
"machine_heated_bed": { "default_value": false },
|
"machine_heated_bed": { "default_value": false },
|
||||||
"machine_height": { "default_value": 200 },
|
"machine_height": { "default_value": 200 },
|
||||||
"machine_name": { "default_value": "3DMaker Starter" },
|
"machine_name": { "default_value": "3DMaker Starter" },
|
||||||
"machine_nozzle_head_distance": { "default_value": 3 },
|
|
||||||
"machine_nozzle_tip_outer_diameter": { "default_value": 1 },
|
"machine_nozzle_tip_outer_diameter": { "default_value": 1 },
|
||||||
"machine_width": { "default_value": 210 },
|
"machine_width": { "default_value": 210 },
|
||||||
"raft_airgap": { "default_value": 0.2 },
|
"raft_airgap": { "default_value": 0.2 },
|
||||||
|
@ -37,7 +37,6 @@
|
|||||||
"machine_heated_bed": { "default_value": true },
|
"machine_heated_bed": { "default_value": true },
|
||||||
"machine_height": { "default_value": 200 },
|
"machine_height": { "default_value": 200 },
|
||||||
"machine_name": { "default_value": "Mendel90" },
|
"machine_name": { "default_value": "Mendel90" },
|
||||||
"machine_nozzle_head_distance": { "default_value": 5 },
|
|
||||||
"machine_nozzle_tip_outer_diameter": { "default_value": 1 },
|
"machine_nozzle_tip_outer_diameter": { "default_value": 1 },
|
||||||
"machine_start_gcode": { "default_value": "G21 ;metric values\nG90 ;absolute positioning\nM82 ;absolute extrusion\nM107 ;start with the fan off\nG28 ;home\nG92 E0 ;zero the extruded length\nM140 S{material_bed_temperature_layer_0} ; set the bed temperature and continue on\nG1 X-50 Y98 F9000 ;go to the left of the top\nG1 Z0.05 ; close to the bed\nM104 S{material_print_temperature_layer_0}; pre-heat the extruder continue on\nM190 S{material_bed_temperature_layer_0} ;set the bed temp & wait\nM109 S{material_print_temperature_layer_0};set the extruder temp for layer 0 & wait\nG92 E0 ;zero the extruded length\nG1 X50 E10 F300 ; make a thick line to prime extruder\nG92 E0 ; reset extruder\nG1 E-4 F1800\nG1 Z0.3 ;lift Z\n" },
|
"machine_start_gcode": { "default_value": "G21 ;metric values\nG90 ;absolute positioning\nM82 ;absolute extrusion\nM107 ;start with the fan off\nG28 ;home\nG92 E0 ;zero the extruded length\nM140 S{material_bed_temperature_layer_0} ; set the bed temperature and continue on\nG1 X-50 Y98 F9000 ;go to the left of the top\nG1 Z0.05 ; close to the bed\nM104 S{material_print_temperature_layer_0}; pre-heat the extruder continue on\nM190 S{material_bed_temperature_layer_0} ;set the bed temp & wait\nM109 S{material_print_temperature_layer_0};set the extruder temp for layer 0 & wait\nG92 E0 ;zero the extruded length\nG1 X50 E10 F300 ; make a thick line to prime extruder\nG92 E0 ; reset extruder\nG1 E-4 F1800\nG1 Z0.3 ;lift Z\n" },
|
||||||
"machine_width": { "default_value": 200 },
|
"machine_width": { "default_value": 200 },
|
||||||
|
@ -78,7 +78,6 @@
|
|||||||
"machine_heat_zone_length": { "default_value": 20 },
|
"machine_heat_zone_length": { "default_value": 20 },
|
||||||
"machine_height": { "default_value": 205 },
|
"machine_height": { "default_value": 205 },
|
||||||
"machine_name": { "default_value": "Discov3ry Complete (Ultimaker 2+)" },
|
"machine_name": { "default_value": "Discov3ry Complete (Ultimaker 2+)" },
|
||||||
"machine_nozzle_head_distance": { "default_value": 5 },
|
|
||||||
"machine_show_variants": { "default_value": true },
|
"machine_show_variants": { "default_value": true },
|
||||||
"machine_start_gcode": { "default_value": "\n;Updated Firmware (.hex and Marlin .ino) for \n;Ultimaker 2+ with Discov3ry Extruder available at: \n;https://github.com/Structur3d/UM2.1Discov3ry-Firmware-beta \n;**Learn more at https://www.structur3d.io** \n \nM104 S{material_print_temperature} ;Start heating extruder \nM140 S{material_bed_temperature} ;Start heating bed \nG21 ;metric values \nG90 ;absolute positioning \nM82 ;set extruder to absolute mode \nM107 ;start with the fan off \nM302 ;allow cold extrusion \nM92 E2589 ;set extruder EEPROM steps/mm for paste \nG28 Z0 ;move Z to bottom endstops \nG28 X0 Y0 ;move X/Y to endstops \nG1 X15 Y0 F4000 ;move X/Y to front of printer \nG1 Z15.0 F9000 ;move the platform to 15mm \nG92 E0 ;zero the extruded length \nG1 F200 E10 ;extrude 10 mm of feed stock \nG92 E0 ;zero the extruded length again \nG1 F9000 \n;Put printing message on LCD screen \nM117 Printing..." },
|
"machine_start_gcode": { "default_value": "\n;Updated Firmware (.hex and Marlin .ino) for \n;Ultimaker 2+ with Discov3ry Extruder available at: \n;https://github.com/Structur3d/UM2.1Discov3ry-Firmware-beta \n;**Learn more at https://www.structur3d.io** \n \nM104 S{material_print_temperature} ;Start heating extruder \nM140 S{material_bed_temperature} ;Start heating bed \nG21 ;metric values \nG90 ;absolute positioning \nM82 ;set extruder to absolute mode \nM107 ;start with the fan off \nM302 ;allow cold extrusion \nM92 E2589 ;set extruder EEPROM steps/mm for paste \nG28 Z0 ;move Z to bottom endstops \nG28 X0 Y0 ;move X/Y to endstops \nG1 X15 Y0 F4000 ;move X/Y to front of printer \nG1 Z15.0 F9000 ;move the platform to 15mm \nG92 E0 ;zero the extruded length \nG1 F200 E10 ;extrude 10 mm of feed stock \nG92 E0 ;zero the extruded length again \nG1 F9000 \n;Put printing message on LCD screen \nM117 Printing..." },
|
||||||
"machine_width": { "default_value": 205 },
|
"machine_width": { "default_value": 205 },
|
||||||
|
@ -44,7 +44,6 @@
|
|||||||
"machine_max_acceleration_y": { "default_value": 6000 },
|
"machine_max_acceleration_y": { "default_value": 6000 },
|
||||||
"machine_max_acceleration_z": { "default_value": 12000 },
|
"machine_max_acceleration_z": { "default_value": 12000 },
|
||||||
"machine_name": { "default_value": "TypeAMachines" },
|
"machine_name": { "default_value": "TypeAMachines" },
|
||||||
"machine_nozzle_head_distance": { "default_value": 3 },
|
|
||||||
"machine_nozzle_tip_outer_diameter": { "default_value": 1 },
|
"machine_nozzle_tip_outer_diameter": { "default_value": 1 },
|
||||||
"machine_start_gcode": { "default_value": ";-- START GCODE --\n;Sliced for Type A Machines Series 1\n;Sliced at: {day} {date} {time}\n;Basic settings:\n;Layer height: {layer_height}\n;Walls: {wall_thickness}\n;Fill: {fill_distance}\n;Print Speed: {print_speed}\n;Support: {support}\n;Retraction Speed: {retraction_speed}\n;Retraction Distance: {retraction_amount}\n;Print time: {print_time}\n;Filament used: {filament_amount}m {filament_weight}g\n;Settings based on: {material_profile}\nG21 ;metric values\nG90 ;absolute positioning\nG28 ;move to endstops\nG29 ;allows for auto-levelling\nG1 Z15.0 F12000 ;move the platform down 15mm\nG1 X150 Y5 F9000 ;center\nM140 S{material_bed_temperature} ;Prep Heat Bed\nM109 S{default_material_print_temperature} ;Heat To temp\nM190 S{material_bed_temperature} ;Heat Bed to temp\nG1 X150 Y5 Z0.3 ;move the platform to purge extrusion\nG92 E0 ;zero the extruded length\nG1 F200 X250 E30 ;extrude 30mm of feed stock\nG92 E0 ;zero the extruded length again\nG1 X150 Y150 Z25 F12000 ;recenter and begin\nG1 F9000" },
|
"machine_start_gcode": { "default_value": ";-- START GCODE --\n;Sliced for Type A Machines Series 1\n;Sliced at: {day} {date} {time}\n;Basic settings:\n;Layer height: {layer_height}\n;Walls: {wall_thickness}\n;Fill: {fill_distance}\n;Print Speed: {print_speed}\n;Support: {support}\n;Retraction Speed: {retraction_speed}\n;Retraction Distance: {retraction_amount}\n;Print time: {print_time}\n;Filament used: {filament_amount}m {filament_weight}g\n;Settings based on: {material_profile}\nG21 ;metric values\nG90 ;absolute positioning\nG28 ;move to endstops\nG29 ;allows for auto-levelling\nG1 Z15.0 F12000 ;move the platform down 15mm\nG1 X150 Y5 F9000 ;center\nM140 S{material_bed_temperature} ;Prep Heat Bed\nM109 S{default_material_print_temperature} ;Heat To temp\nM190 S{material_bed_temperature} ;Heat Bed to temp\nG1 X150 Y5 Z0.3 ;move the platform to purge extrusion\nG92 E0 ;zero the extruded length\nG1 F200 X250 E30 ;extrude 30mm of feed stock\nG92 E0 ;zero the extruded length again\nG1 X150 Y150 Z25 F12000 ;recenter and begin\nG1 F9000" },
|
||||||
"machine_use_extruder_offset_to_offset_coords": { "default_value": true },
|
"machine_use_extruder_offset_to_offset_coords": { "default_value": true },
|
||||||
|
@ -95,7 +95,6 @@
|
|||||||
"machine_max_feedrate_y": { "default_value": 300 },
|
"machine_max_feedrate_y": { "default_value": 300 },
|
||||||
"machine_max_feedrate_z": { "default_value": 40 },
|
"machine_max_feedrate_z": { "default_value": 40 },
|
||||||
"machine_name": { "default_value": "Ultimaker 2" },
|
"machine_name": { "default_value": "Ultimaker 2" },
|
||||||
"machine_nozzle_head_distance": { "default_value": 3 },
|
|
||||||
"machine_nozzle_tip_outer_diameter": { "default_value": 1 },
|
"machine_nozzle_tip_outer_diameter": { "default_value": 1 },
|
||||||
"machine_start_gcode": { "value": "\"G0 F3000 Y50 ;avoid prime blob\" if machine_gcode_flavor == \"UltiGCode\" else \"G21 ;metric values\\nG90 ;absolute positioning\\nM82 ;set extruder to absolute mode\\nM107 ;start with the fan off\\nG28 Z0 ;move Z to bottom endstops\\nG28 X0 Y0 ;move X/Y to endstops\\nG1 X15 Y0 F4000 ;move X/Y to front of printer\\nG1 Z15.0 F9000 ;move the platform to 15mm\\nG92 E0 ;zero the extruded length\\nG1 F200 E10 ;extrude 10 mm of feed stock\\nG92 E0 ;zero the extruded length again\\nG1 Y50 F9000\\n;Put printing message on LCD screen\\nM117 Printing...\"" },
|
"machine_start_gcode": { "value": "\"G0 F3000 Y50 ;avoid prime blob\" if machine_gcode_flavor == \"UltiGCode\" else \"G21 ;metric values\\nG90 ;absolute positioning\\nM82 ;set extruder to absolute mode\\nM107 ;start with the fan off\\nG28 Z0 ;move Z to bottom endstops\\nG28 X0 Y0 ;move X/Y to endstops\\nG1 X15 Y0 F4000 ;move X/Y to front of printer\\nG1 Z15.0 F9000 ;move the platform to 15mm\\nG92 E0 ;zero the extruded length\\nG1 F200 E10 ;extrude 10 mm of feed stock\\nG92 E0 ;zero the extruded length again\\nG1 Y50 F9000\\n;Put printing message on LCD screen\\nM117 Printing...\"" },
|
||||||
"machine_use_extruder_offset_to_offset_coords": { "default_value": true },
|
"machine_use_extruder_offset_to_offset_coords": { "default_value": true },
|
||||||
|
@ -83,7 +83,6 @@
|
|||||||
"machine_heat_zone_length": { "default_value": 20 },
|
"machine_heat_zone_length": { "default_value": 20 },
|
||||||
"machine_height": { "default_value": 205 },
|
"machine_height": { "default_value": 205 },
|
||||||
"machine_name": { "default_value": "Ultimaker 2+" },
|
"machine_name": { "default_value": "Ultimaker 2+" },
|
||||||
"machine_nozzle_head_distance": { "default_value": 5 },
|
|
||||||
"machine_show_variants": { "default_value": true },
|
"machine_show_variants": { "default_value": true },
|
||||||
"speed_infill": { "value": "speed_print" },
|
"speed_infill": { "value": "speed_print" },
|
||||||
"speed_support": { "value": "speed_wall_0" },
|
"speed_support": { "value": "speed_wall_0" },
|
||||||
|
@ -92,7 +92,6 @@
|
|||||||
"machine_heat_zone_length": { "default_value": 20 },
|
"machine_heat_zone_length": { "default_value": 20 },
|
||||||
"machine_height": { "default_value": 205 },
|
"machine_height": { "default_value": 205 },
|
||||||
"machine_name": { "default_value": "Ultimaker 2+ Connect" },
|
"machine_name": { "default_value": "Ultimaker 2+ Connect" },
|
||||||
"machine_nozzle_head_distance": { "default_value": 5 },
|
|
||||||
"machine_show_variants": { "default_value": true },
|
"machine_show_variants": { "default_value": true },
|
||||||
"machine_start_gcode": { "value": "''" },
|
"machine_start_gcode": { "value": "''" },
|
||||||
"machine_width": { "default_value": 223 },
|
"machine_width": { "default_value": 223 },
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
"default_value": 0,
|
"default_value": 0,
|
||||||
"maximum_value": "1"
|
"maximum_value": "1"
|
||||||
},
|
},
|
||||||
|
"machine_nozzle_head_distance": { "default_value": 5 },
|
||||||
"machine_nozzle_offset_x": { "default_value": 0.0 },
|
"machine_nozzle_offset_x": { "default_value": 0.0 },
|
||||||
"machine_nozzle_offset_y": { "default_value": 0.0 }
|
"machine_nozzle_offset_y": { "default_value": 0.0 }
|
||||||
}
|
}
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
"default_value": 1,
|
"default_value": 1,
|
||||||
"maximum_value": "1"
|
"maximum_value": "1"
|
||||||
},
|
},
|
||||||
|
"machine_nozzle_head_distance": { "default_value": 5 },
|
||||||
"machine_nozzle_offset_x": { "default_value": 0.0 },
|
"machine_nozzle_offset_x": { "default_value": 0.0 },
|
||||||
"machine_nozzle_offset_y": { "default_value": 0.0 }
|
"machine_nozzle_offset_y": { "default_value": 0.0 }
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
"overrides":
|
"overrides":
|
||||||
{
|
{
|
||||||
"extruder_nr": { "default_value": 0 },
|
"extruder_nr": { "default_value": 0 },
|
||||||
|
"machine_nozzle_head_distance": { "default_value": 6 },
|
||||||
"machine_nozzle_size": { "default_value": 0.4 },
|
"machine_nozzle_size": { "default_value": 0.4 },
|
||||||
"material_diameter": { "default_value": 1.75 }
|
"material_diameter": { "default_value": 1.75 }
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
"overrides":
|
"overrides":
|
||||||
{
|
{
|
||||||
"extruder_nr": { "default_value": 0 },
|
"extruder_nr": { "default_value": 0 },
|
||||||
|
"machine_nozzle_head_distance": { "default_value": 3 },
|
||||||
"machine_nozzle_size": { "default_value": 0.4 },
|
"machine_nozzle_size": { "default_value": 0.4 },
|
||||||
"material_diameter": { "default_value": 1.75 }
|
"material_diameter": { "default_value": 1.75 }
|
||||||
}
|
}
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
"default_value": 0,
|
"default_value": 0,
|
||||||
"maximum_value": "1"
|
"maximum_value": "1"
|
||||||
},
|
},
|
||||||
|
"machine_nozzle_head_distance": { "default_value": 5 },
|
||||||
"machine_nozzle_offset_x": { "default_value": 0.0 },
|
"machine_nozzle_offset_x": { "default_value": 0.0 },
|
||||||
"machine_nozzle_offset_y": { "default_value": 0.0 },
|
"machine_nozzle_offset_y": { "default_value": 0.0 },
|
||||||
"machine_nozzle_size": { "default_value": 0.4 },
|
"machine_nozzle_size": { "default_value": 0.4 },
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
"default_value": 1,
|
"default_value": 1,
|
||||||
"maximum_value": "1"
|
"maximum_value": "1"
|
||||||
},
|
},
|
||||||
|
"machine_nozzle_head_distance": { "default_value": 5 },
|
||||||
"machine_nozzle_offset_x": { "default_value": 19.0 },
|
"machine_nozzle_offset_x": { "default_value": 19.0 },
|
||||||
"machine_nozzle_offset_y": { "default_value": 0.0 },
|
"machine_nozzle_offset_y": { "default_value": 0.0 },
|
||||||
"machine_nozzle_size": { "default_value": 0.4 },
|
"machine_nozzle_size": { "default_value": 0.4 },
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
"overrides":
|
"overrides":
|
||||||
{
|
{
|
||||||
"extruder_nr": { "default_value": 0 },
|
"extruder_nr": { "default_value": 0 },
|
||||||
|
"machine_nozzle_head_distance": { "default_value": 2.5 },
|
||||||
"machine_nozzle_size": { "default_value": 0.4 },
|
"machine_nozzle_size": { "default_value": 0.4 },
|
||||||
"material_diameter": { "default_value": 1.75 }
|
"material_diameter": { "default_value": 1.75 }
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
"overrides":
|
"overrides":
|
||||||
{
|
{
|
||||||
"extruder_nr": { "default_value": 0 },
|
"extruder_nr": { "default_value": 0 },
|
||||||
|
"machine_nozzle_head_distance": { "default_value": 3 },
|
||||||
"machine_nozzle_size": { "default_value": 0.4 },
|
"machine_nozzle_size": { "default_value": 0.4 },
|
||||||
"material_diameter": { "default_value": 1.75 }
|
"material_diameter": { "default_value": 1.75 }
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
"overrides":
|
"overrides":
|
||||||
{
|
{
|
||||||
"extruder_nr": { "default_value": 0 },
|
"extruder_nr": { "default_value": 0 },
|
||||||
|
"machine_nozzle_head_distance": { "default_value": 5 },
|
||||||
"machine_nozzle_size": { "default_value": 0.4 },
|
"machine_nozzle_size": { "default_value": 0.4 },
|
||||||
"material_diameter": { "default_value": 1.75 }
|
"material_diameter": { "default_value": 1.75 }
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
"overrides":
|
"overrides":
|
||||||
{
|
{
|
||||||
"extruder_nr": { "default_value": 0 },
|
"extruder_nr": { "default_value": 0 },
|
||||||
|
"machine_nozzle_head_distance": { "default_value": 5 },
|
||||||
"machine_nozzle_size": { "default_value": 0.84 },
|
"machine_nozzle_size": { "default_value": 0.84 },
|
||||||
"material_diameter": { "default_value": 3.175 }
|
"material_diameter": { "default_value": 3.175 }
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
"overrides":
|
"overrides":
|
||||||
{
|
{
|
||||||
"extruder_nr": { "default_value": 0 },
|
"extruder_nr": { "default_value": 0 },
|
||||||
|
"machine_nozzle_head_distance": { "default_value": 3 },
|
||||||
"machine_nozzle_size": { "default_value": 0.4 },
|
"machine_nozzle_size": { "default_value": 0.4 },
|
||||||
"material_diameter": { "default_value": 1.75 }
|
"material_diameter": { "default_value": 1.75 }
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
"overrides":
|
"overrides":
|
||||||
{
|
{
|
||||||
"extruder_nr": { "default_value": 0 },
|
"extruder_nr": { "default_value": 0 },
|
||||||
|
"machine_nozzle_head_distance": { "default_value": 3 },
|
||||||
"machine_nozzle_size": { "default_value": 0.4 },
|
"machine_nozzle_size": { "default_value": 0.4 },
|
||||||
"material_diameter": { "default_value": 2.85 }
|
"material_diameter": { "default_value": 2.85 }
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
"overrides":
|
"overrides":
|
||||||
{
|
{
|
||||||
"extruder_nr": { "default_value": 0 },
|
"extruder_nr": { "default_value": 0 },
|
||||||
|
"machine_nozzle_head_distance": { "default_value": 5 },
|
||||||
"machine_nozzle_size": { "default_value": 0.4 },
|
"machine_nozzle_size": { "default_value": 0.4 },
|
||||||
"material_diameter": { "default_value": 2.85 }
|
"material_diameter": { "default_value": 2.85 }
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
"overrides":
|
"overrides":
|
||||||
{
|
{
|
||||||
"extruder_nr": { "default_value": 0 },
|
"extruder_nr": { "default_value": 0 },
|
||||||
|
"machine_nozzle_head_distance": { "default_value": 5 },
|
||||||
"machine_nozzle_size": { "default_value": 0.4 },
|
"machine_nozzle_size": { "default_value": 0.4 },
|
||||||
"material_diameter": { "default_value": 2.85 }
|
"material_diameter": { "default_value": 2.85 }
|
||||||
}
|
}
|
||||||
|
@ -215,14 +215,14 @@ msgstr ""
|
|||||||
|
|
||||||
msgctxt "@label crash message"
|
msgctxt "@label crash message"
|
||||||
msgid ""
|
msgid ""
|
||||||
"<p><b>A fatal error has occurred in Cura. Please send us this Crash Report to fix the problem</p></b>\n"
|
"<p><b>A fatal error has occurred in Cura. Please send us this Crash Report to fix the problem</b></p>\n"
|
||||||
" <p>Please use the \"Send report\" button to post a bug report automatically to our servers</p>\n"
|
" <p>Please use the \"Send report\" button to post a bug report automatically to our servers</p>\n"
|
||||||
" "
|
" "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
msgctxt "@label crash message"
|
msgctxt "@label crash message"
|
||||||
msgid ""
|
msgid ""
|
||||||
"<p><b>Oops, UltiMaker Cura has encountered something that doesn't seem right.</p></b>\n"
|
"<p><b>Oops, UltiMaker Cura has encountered something that doesn't seem right.</b></p>\n"
|
||||||
" <p>We encountered an unrecoverable error during start up. It was possibly caused by some incorrect configuration files. We suggest to backup and reset your configuration.</p>\n"
|
" <p>We encountered an unrecoverable error during start up. It was possibly caused by some incorrect configuration files. We suggest to backup and reset your configuration.</p>\n"
|
||||||
" <p>Backups can be found in the configuration folder.</p>\n"
|
" <p>Backups can be found in the configuration folder.</p>\n"
|
||||||
" <p>Please send us this Crash Report to fix the problem.</p>\n"
|
" <p>Please send us this Crash Report to fix the problem.</p>\n"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user