Merge branch 'main' into propose_spiralize_eazao

This commit is contained in:
Remco Burema 2024-08-13 17:30:50 +02:00 committed by GitHub
commit ef38dc6b6b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
47 changed files with 461 additions and 225 deletions

View file

@ -6,9 +6,9 @@ body:
attributes:
value: |
### ✨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.
#### [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.
### Project File
@ -35,7 +35,7 @@ body:
- type: markdown
attributes:
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)
- type: input
attributes:

View file

@ -1,17 +1,17 @@
version: "5.8.0-beta.1"
version: "5.9.0-alpha.0"
requirements:
- "cura_resources/5.8.0-beta.1"
- "uranium/5.8.0-beta.1"
- "curaengine/5.8.0-beta.1"
- "cura_binary_data/5.8.0-beta.1"
- "fdm_materials/5.8.0-beta.1"
- "cura_resources/(latest)@ultimaker/testing"
- "uranium/(latest)@ultimaker/testing"
- "curaengine/(latest)@ultimaker/testing"
- "cura_binary_data/(latest)@ultimaker/testing"
- "fdm_materials/(latest)@ultimaker/testing"
- "curaengine_plugin_gradual_flow/0.1.0-beta.4"
- "dulcificum/0.2.1"
- "pysavitar/5.3.0"
- "pynest2d/5.3.0"
- "native_cad_plugin/2.0.0"
requirements_internal:
- "fdm_materials/5.8.0-beta.1"
- "fdm_materials/(latest)@internal/testing"
- "cura_private_data/(latest)@internal/testing"
urls:
default:

View file

@ -1,7 +1,13 @@
# Copyright (c) 2018 Ultimaker B.V.
# 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:
from cura.CuraApplication import CuraApplication
@ -47,3 +53,57 @@ class Settings:
"""
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

View 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

View file

@ -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.
from typing import Optional
from PyQt6.QtCore import pyqtProperty, QObject, pyqtSignal
from cura.PrinterOutput.FormatMaps import FormatMaps
from .MaterialOutputModel import MaterialOutputModel
@ -45,16 +46,8 @@ class ExtruderConfigurationModel(QObject):
@staticmethod
def applyNameMappingHotend(hotendId) -> str:
_EXTRUDER_NAME_MAP = {
"mk14_hot":"1XA",
"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]
if hotendId in FormatMaps.EXTRUDER_NAME_MAP:
return FormatMaps.EXTRUDER_NAME_MAP[hotendId]
return hotendId
@pyqtProperty(str, fset = setHotendID, notify = extruderConfigurationChanged)

View file

@ -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.
from typing import Optional
from PyQt6.QtCore import pyqtProperty, QObject
from cura.PrinterOutput.FormatMaps import FormatMaps
class MaterialOutputModel(QObject):
@ -23,30 +24,9 @@ class MaterialOutputModel(QObject):
@staticmethod
def getMaterialFromDefinition(guid, type, brand, name):
_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"}
}
if guid is None and brand != "empty" and type in _MATERIAL_MAP:
name = _MATERIAL_MAP[type]["name"]
guid = _MATERIAL_MAP[type]["guid"]
if guid is None and brand != "empty" and type in FormatMaps.MATERIAL_MAP:
name = FormatMaps.MATERIAL_MAP[type]["name"]
guid = FormatMaps.MATERIAL_MAP[type]["guid"]
return name, guid

View file

@ -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.
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 cura.API import Account
from cura.CuraApplication import CuraApplication
from cura.PrinterOutput.FormatMaps import FormatMaps
from cura.PrinterOutput.PrinterOutputDevice import PrinterOutputDevice, ConnectionState, ConnectionType
@ -419,14 +420,8 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice):
@staticmethod
def applyPrinterTypeMapping(printer_type):
_PRINTER_TYPE_NAME = {
"fire_e": "ultimaker_method",
"lava_f": "ultimaker_methodx",
"magma_10": "ultimaker_methodxl",
"sketch": "ultimaker_sketch"
}
if printer_type in _PRINTER_TYPE_NAME:
return _PRINTER_TYPE_NAME[printer_type]
if printer_type in FormatMaps.PRINTER_TYPE_NAME:
return FormatMaps.PRINTER_TYPE_NAME[printer_type]
return printer_type
@pyqtProperty(str, constant = True)

View file

@ -114,22 +114,24 @@ class ThreeMFWriter(MeshWriter):
mesh_data = um_node.getMeshData()
node_matrix = um_node.getLocalTransformation()
node_matrix.preMultiply(transformation)
if center_mesh:
node_matrix = Matrix()
center_matrix = Matrix()
# compensate for original center position, if object(s) is/are not around its zero position
if mesh_data is not None:
extents = mesh_data.getExtents()
if extents is not None:
# 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)
node_matrix.setByTranslation(center_vector)
node_matrix.multiply(um_node.getLocalTransformation())
else:
node_matrix = um_node.getLocalTransformation()
center_vector = Vector(-extents.center.x, -extents.center.y, -extents.center.z)
center_matrix.setByTranslation(center_vector)
node_matrix.preMultiply(center_matrix)
matrix_string = ThreeMFWriter._convertMatrixToString(node_matrix.preMultiply(transformation))
matrix_string = ThreeMFWriter._convertMatrixToString(node_matrix)
savitar_node.setTransformation(matrix_string)
if mesh_data is not None:
savitar_node.getMeshData().setVerticesFromBytes(mesh_data.getVerticesAsByteArray())
indices_array = mesh_data.getIndicesAsByteArray()

View file

@ -366,7 +366,12 @@ class StartSliceJob(Job):
for extruder_stack in global_stack.extruderList:
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():
continue
for slot in plugin.getSupportedSlots():

View file

@ -1,4 +1,4 @@
# Copyright (c) 2023 UltiMaker
# Copyright (c) 2024 UltiMaker
# Cura is released under the terms of the LGPLv3 or higher.
from io import StringIO, BufferedIOBase
import json
@ -18,6 +18,7 @@ from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator
from UM.i18n import i18nCatalog
from cura.CuraApplication import CuraApplication
from cura.PrinterOutput.FormatMaps import FormatMaps
from cura.Snapshot import Snapshot
from cura.Utils.Threading import call_on_qt_thread
from cura.CuraVersion import ConanInstalls
@ -137,6 +138,30 @@ class MakerbotWriter(MeshWriter):
for png_file in png_files:
file, data = png_file["file"], png_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:
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."))

View file

@ -24,6 +24,7 @@ from UM.Settings.InstanceContainer import InstanceContainer
from cura.CuraApplication import CuraApplication
from cura.Settings.GlobalStack import GlobalStack
from cura.Utils.Threading import call_on_qt_thread
from cura.API import CuraAPI
from UM.i18n import i18nCatalog
@ -85,7 +86,8 @@ class UFPWriter(MeshWriter):
try:
archive.addContentType(extension="json", mime_type="application/json")
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.write(setting_textio.getvalue().encode("UTF-8"))
except EnvironmentError as e:
@ -210,57 +212,3 @@ class UFPWriter(MeshWriter):
return [{"name": item.getName()}
for item in DepthFirstIterator(node)
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

View file

@ -17,6 +17,7 @@ from UM.Settings.ContainerRegistry import ContainerRegistry
from UM.ConfigurationErrorMessage import ConfigurationErrorMessage
from cura.CuraApplication import CuraApplication
from cura.PrinterOutput.FormatMaps import FormatMaps
from cura.Machines.VariantType import VariantType
try:
@ -249,7 +250,7 @@ class XmlMaterialProfile(InstanceContainer):
machine_variant_map[definition_id][variant_name] = variant_dict
# 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():
definition_id = container.getMetaDataEntry("definition")
@ -647,7 +648,7 @@ class XmlMaterialProfile(InstanceContainer):
self._dirty = False
# 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)
for machine in machines:
@ -923,7 +924,7 @@ class XmlMaterialProfile(InstanceContainer):
result_metadata.append(base_metadata)
# 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):
machine_compatibility = common_compatibility
@ -1128,29 +1129,6 @@ class XmlMaterialProfile(InstanceContainer):
id_list = list(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
def _parseCompatibleValue(value: str):
"""Parse the value of the "material compatible" property."""

View file

@ -1 +1 @@
version: "5.8.0-beta.1"
version: "5.8.0"

View file

@ -130,7 +130,6 @@
"machine_min_cool_heat_time_window": { "default_value": 15.0 },
"machine_name": { "default_value": "Mark2_for_Ultimaker2" },
"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_size": { "default_value": 0.4 },
"machine_show_variants": { "default_value": true },

View file

@ -65,7 +65,6 @@
"machine_heated_bed": { "default_value": true },
"machine_height": { "default_value": 340 },
"machine_name": { "default_value": "Atom 3" },
"machine_nozzle_head_distance": { "default_value": 6 },
"machine_shape": { "default_value": "elliptic" },
"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" },

View 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 }
}
}

View file

@ -35,7 +35,6 @@
"machine_max_feedrate_y": { "default_value": 300 },
"machine_max_feedrate_z": { "default_value": 40 },
"machine_name": { "default_value": "Diytech 220" },
"machine_nozzle_head_distance": { "default_value": 3 },
"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_use_extruder_offset_to_offset_coords": { "default_value": true },

View file

@ -122,7 +122,6 @@
"machine_name": { "default_value": "dxu" },
"machine_nozzle_cool_down_speed": { "default_value": 1.5 },
"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_size": { "default_value": 0.4 },
"machine_show_variants": { "default_value": true },

View file

@ -44,7 +44,6 @@
"machine_max_jerk_xy": { "default_value": 10 },
"machine_max_jerk_z": { "default_value": 10 },
"machine_name": { "default_value": "Erzay3D" },
"machine_nozzle_head_distance": { "default_value": 2.5 },
"machine_nozzle_size": { "default_value": 0.4 },
"machine_shape": { "default_value": "elliptic" },
"machine_start_gcode": { "default_value": "G28\nG1 Z15.0 F6000\nG92 E0" },

View file

@ -167,6 +167,17 @@
"type": "float",
"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":
{
"default_value": "unknown",

View file

@ -28,6 +28,18 @@
"icon": "Printer",
"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":
{
"label": "Machine Type",
@ -289,17 +301,6 @@
"settable_per_meshgroup": 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":
{
"label": "Nozzle Angle",
@ -4467,6 +4468,37 @@
"settable_per_mesh": false,
"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":
{
"label": "Fan Speed",

View file

@ -27,7 +27,6 @@
"machine_heated_bed": { "default_value": false },
"machine_height": { "default_value": 200 },
"machine_name": { "default_value": "3DMaker Starter" },
"machine_nozzle_head_distance": { "default_value": 3 },
"machine_nozzle_tip_outer_diameter": { "default_value": 1 },
"machine_width": { "default_value": 210 },
"raft_airgap": { "default_value": 0.2 },

View file

@ -37,7 +37,6 @@
"machine_heated_bed": { "default_value": true },
"machine_height": { "default_value": 200 },
"machine_name": { "default_value": "Mendel90" },
"machine_nozzle_head_distance": { "default_value": 5 },
"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_width": { "default_value": 200 },

View file

@ -78,7 +78,6 @@
"machine_heat_zone_length": { "default_value": 20 },
"machine_height": { "default_value": 205 },
"machine_name": { "default_value": "Discov3ry Complete (Ultimaker 2+)" },
"machine_nozzle_head_distance": { "default_value": 5 },
"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_width": { "default_value": 205 },

View file

@ -44,7 +44,6 @@
"machine_max_acceleration_y": { "default_value": 6000 },
"machine_max_acceleration_z": { "default_value": 12000 },
"machine_name": { "default_value": "TypeAMachines" },
"machine_nozzle_head_distance": { "default_value": 3 },
"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_use_extruder_offset_to_offset_coords": { "default_value": true },

View file

@ -95,7 +95,6 @@
"machine_max_feedrate_y": { "default_value": 300 },
"machine_max_feedrate_z": { "default_value": 40 },
"machine_name": { "default_value": "Ultimaker 2" },
"machine_nozzle_head_distance": { "default_value": 3 },
"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_use_extruder_offset_to_offset_coords": { "default_value": true },

View file

@ -83,7 +83,6 @@
"machine_heat_zone_length": { "default_value": 20 },
"machine_height": { "default_value": 205 },
"machine_name": { "default_value": "Ultimaker 2+" },
"machine_nozzle_head_distance": { "default_value": 5 },
"machine_show_variants": { "default_value": true },
"speed_infill": { "value": "speed_print" },
"speed_support": { "value": "speed_wall_0" },

View file

@ -92,7 +92,6 @@
"machine_heat_zone_length": { "default_value": 20 },
"machine_height": { "default_value": 205 },
"machine_name": { "default_value": "Ultimaker 2+ Connect" },
"machine_nozzle_head_distance": { "default_value": 5 },
"machine_show_variants": { "default_value": true },
"machine_start_gcode": { "value": "''" },
"machine_width": { "default_value": 223 },

View file

@ -191,6 +191,10 @@
"bridge_wall_material_flow": { "value": "material_flow" },
"bridge_wall_speed": { "value": "speed_wall" },
"brim_width": { "value": 5 },
"cool_fan_enabled":
{
"force_depends_on_settings": [ "support_extruder_nr" ]
},
"default_material_bed_temperature": { "resolve": "min(extruderValues('default_material_bed_temperature'))" },
"extruder_prime_pos_abs": { "default_value": true },
"gradual_support_infill_steps": { "value": 0 },
@ -321,6 +325,10 @@
"material_bed_temperature": { "enabled": "machine_heated_bed" },
"material_flow": { "value": 100 },
"material_initial_print_temperature": { "value": "material_print_temperature-10" },
"material_print_temperature":
{
"force_depends_on_settings": [ "support_extruder_nr" ]
},
"material_shrinkage_percentage": { "enabled": true },
"min_bead_width": { "value": "0.75*line_width" },
"min_wall_line_width": { "value": 0.4 },
@ -337,24 +345,88 @@
"prime_tower_raft_base_line_spacing": { "value": "raft_base_line_width" },
"prime_tower_wipe_enabled": { "value": true },
"print_sequence": { "enabled": false },
"raft_airgap":
{
"force_depends_on_settings": [ "support_extruder_nr" ]
},
"raft_base_fan_speed": { "value": 0 },
"raft_base_line_spacing": { "value": "2*raft_base_line_width" },
"raft_base_line_width": { "value": 1.4 },
"raft_base_line_spacing":
{
"force_depends_on_settings": [ "raft_interface_extruder_nr" ],
"value": "2*raft_base_line_width"
},
"raft_base_line_width":
{
"force_depends_on_settings": [ "raft_interface_extruder_nr" ],
"value": 1.4
},
"raft_base_speed": { "value": 10 },
"raft_base_thickness": { "value": 0.8 },
"raft_base_wall_count": { "value": "raft_wall_count" },
"raft_base_thickness":
{
"force_depends_on_settings": [
"raft_interface_extruder_nr",
"support_extruder_nr"
],
"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_interface_fan_speed": { "value": 0 },
"raft_interface_infill_overlap":
{
"force_depends_on_settings": [ "raft_interface_extruder_nr" ]
},
"raft_interface_layers": { "value": 2 },
"raft_interface_line_width": { "value": 0.7 },
"raft_interface_line_spacing":
{
"force_depends_on_settings": [
"raft_base_thickness",
"raft_interface_extruder_nr"
]
},
"raft_interface_line_width":
{
"force_depends_on_settings": [
"raft_base_thickness",
"raft_interface_extruder_nr"
],
"value": 0.7
},
"raft_interface_speed": { "value": 90 },
"raft_interface_thickness": { "value": 0.3 },
"raft_interface_wall_count": { "value": "raft_wall_count" },
"raft_interface_z_offset":
{
"force_depends_on_settings": [
"raft_base_thickness",
"raft_interface_extruder_nr"
]
},
"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_surface_fan_speed": { "value": 0 },
"raft_surface_flow":
{
"force_depends_on_settings": [ "support_extruder_nr" ]
},
"raft_surface_speed":
{
"force_depends_on_settings": [ "support_extruder_nr" ]
},
"raft_surface_thickness":
{
"force_depends_on_settings": [ "support_extruder_nr" ]
},
"raft_surface_wall_count": { "value": "raft_wall_count" },
"raft_surface_z_offset":
{
"force_depends_on_settings": [ "support_extruder_nr" ]
},
"raft_wall_count": { "value": 2 },
"retract_at_layer_change": { "value": true },
"retraction_amount": { "value": 0.75 },

View file

@ -14,6 +14,7 @@
"default_value": 0,
"maximum_value": "1"
},
"machine_nozzle_head_distance": { "default_value": 5 },
"machine_nozzle_offset_x": { "default_value": 0.0 },
"machine_nozzle_offset_y": { "default_value": 0.0 }
}

View file

@ -14,6 +14,7 @@
"default_value": 1,
"maximum_value": "1"
},
"machine_nozzle_head_distance": { "default_value": 5 },
"machine_nozzle_offset_x": { "default_value": 0.0 },
"machine_nozzle_offset_y": { "default_value": 0.0 }
}

View file

@ -10,6 +10,7 @@
"overrides":
{
"extruder_nr": { "default_value": 0 },
"machine_nozzle_head_distance": { "default_value": 6 },
"machine_nozzle_size": { "default_value": 0.4 },
"material_diameter": { "default_value": 1.75 }
}

View file

@ -10,6 +10,7 @@
"overrides":
{
"extruder_nr": { "default_value": 0 },
"machine_nozzle_head_distance": { "default_value": 3 },
"machine_nozzle_size": { "default_value": 0.4 },
"material_diameter": { "default_value": 1.75 }
}

View file

@ -14,6 +14,7 @@
"default_value": 0,
"maximum_value": "1"
},
"machine_nozzle_head_distance": { "default_value": 5 },
"machine_nozzle_offset_x": { "default_value": 0.0 },
"machine_nozzle_offset_y": { "default_value": 0.0 },
"machine_nozzle_size": { "default_value": 0.4 },

View file

@ -14,6 +14,7 @@
"default_value": 1,
"maximum_value": "1"
},
"machine_nozzle_head_distance": { "default_value": 5 },
"machine_nozzle_offset_x": { "default_value": 19.0 },
"machine_nozzle_offset_y": { "default_value": 0.0 },
"machine_nozzle_size": { "default_value": 0.4 },

View file

@ -10,6 +10,7 @@
"overrides":
{
"extruder_nr": { "default_value": 0 },
"machine_nozzle_head_distance": { "default_value": 2.5 },
"machine_nozzle_size": { "default_value": 0.4 },
"material_diameter": { "default_value": 1.75 }
}

View file

@ -10,6 +10,7 @@
"overrides":
{
"extruder_nr": { "default_value": 0 },
"machine_nozzle_head_distance": { "default_value": 3 },
"machine_nozzle_size": { "default_value": 0.4 },
"material_diameter": { "default_value": 1.75 }
}

View file

@ -10,6 +10,7 @@
"overrides":
{
"extruder_nr": { "default_value": 0 },
"machine_nozzle_head_distance": { "default_value": 5 },
"machine_nozzle_size": { "default_value": 0.4 },
"material_diameter": { "default_value": 1.75 }
}

View file

@ -10,6 +10,7 @@
"overrides":
{
"extruder_nr": { "default_value": 0 },
"machine_nozzle_head_distance": { "default_value": 5 },
"machine_nozzle_size": { "default_value": 0.84 },
"material_diameter": { "default_value": 3.175 }
}

View file

@ -10,6 +10,7 @@
"overrides":
{
"extruder_nr": { "default_value": 0 },
"machine_nozzle_head_distance": { "default_value": 3 },
"machine_nozzle_size": { "default_value": 0.4 },
"material_diameter": { "default_value": 1.75 }
}

View file

@ -10,6 +10,7 @@
"overrides":
{
"extruder_nr": { "default_value": 0 },
"machine_nozzle_head_distance": { "default_value": 3 },
"machine_nozzle_size": { "default_value": 0.4 },
"material_diameter": { "default_value": 2.85 }
}

View file

@ -10,6 +10,7 @@
"overrides":
{
"extruder_nr": { "default_value": 0 },
"machine_nozzle_head_distance": { "default_value": 5 },
"machine_nozzle_size": { "default_value": 0.4 },
"material_diameter": { "default_value": 2.85 }
}

View file

@ -10,6 +10,7 @@
"overrides":
{
"extruder_nr": { "default_value": 0 },
"machine_nozzle_head_distance": { "default_value": 5 },
"machine_nozzle_size": { "default_value": 0.4 },
"material_diameter": { "default_value": 2.85 }
}

View file

@ -215,14 +215,14 @@ msgstr ""
msgctxt "@label crash message"
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"
" "
msgstr ""
msgctxt "@label crash message"
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>Backups can be found in the configuration folder.</p>\n"
" <p>Please send us this Crash Report to fix the problem.</p>\n"

View file

@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: Cura 5.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-07-08 09:05+0200\n"
"PO-Revision-Date: 2024-04-02 02:31+0200\n"
"PO-Revision-Date: 2024-07-23 03:24+0200\n"
"Last-Translator: Cláudio Sampaio <patola@gmail.com>\n"
"Language-Team: Cláudio Sampaio <patola@gmail.com>\n"
"Language: pt_BR\n"
@ -869,7 +869,7 @@ msgstr "Esquema de Cores"
msgctxt "@label"
msgid "Combination not recommended. Load BB core to slot 1 (left) for better reliability."
msgstr ""
msgstr "Combinação não recomendada. Carregue o núcleo BB no slot 1 (esquerda) para melhor confiabilidade."
msgctxt "@info"
msgid "Compare and save."
@ -2440,7 +2440,7 @@ msgstr "Gerador de Makerbot Printfile"
msgctxt "@item:inlistbox"
msgid "Makerbot Sketch Printfile"
msgstr ""
msgstr "Arquivo de Rascunho de Impressão Makerbot"
msgctxt "@error"
msgid "MakerbotWriter could not save to the designated path."
@ -3885,7 +3885,7 @@ msgstr "Buscar"
msgctxt "@label:textbox"
msgid "Search Printer"
msgstr ""
msgstr "Procurar Impressora"
msgctxt "@info"
msgid "Search in the browser"
@ -4765,7 +4765,7 @@ msgstr "Esta configuração não está disponível porque %1 não foi reconhecid
msgctxt "@text:window"
msgid "This is a Cura Universal project file. Would you like to open it as a Cura Universal Project or import the models from it?"
msgstr ""
msgstr "Este é um arquivo de projeto Cura Universal. Você gostaria de abrir como um Projeto Cura Universal ou importar os modelos dele?"
msgctxt "@text:window"
msgid "This is a Cura project file. Would you like to open it as a project or import the models from it?"

View file

@ -7,7 +7,7 @@ msgstr ""
"Project-Id-Version: Cura 5.7\n"
"Report-Msgid-Bugs-To: plugins@ultimaker.com\n"
"POT-Creation-Date: 2024-07-08 09:05+0000\n"
"PO-Revision-Date: 2024-04-02 02:04+0200\n"
"PO-Revision-Date: 2024-07-24 04:19+0200\n"
"Last-Translator: Cláudio Sampaio <patola@gmail.com>\n"
"Language-Team: Cláudio Sampaio <patola@gmail.com>\n"
"Language: pt_BR\n"
@ -23,7 +23,7 @@ msgstr "<html>Como gerar a torre de purga:<ul><li><b>Normal:</b> cria-se um bald
msgctxt "cool_during_extruder_switch description"
msgid "<html>Whether to activate the cooling fans during a nozzle switch. This can help reducing oozing by cooling the nozzle faster:<ul><li><b>Unchanged:</b> keep the fans as they were previously</li><li><b>Only last extruder:</b> turn on the fan of the last used extruder, but turn the others off (if any). This is useful if you have completely separate extruders.</li><li><b>All fans:</b> turn on all fans during nozzle switch. This is useful if you have a single cooling fan, or multiple fans that stay close to each other.</li></ul></html>"
msgstr ""
msgstr "<html>Decide se se deve ativar as ventoinhas de refrigeração durante uma troca de bico. Isto pode ajudar a reduzir escorrimento por esfriar o bico mais rápido:<ul><li><b>Não alterado:</b> mantém as ventoinhas como estavam previamente</li><li><b>Somente o último extrusor:</b> liga a ventoinha do último extrusor usado, mas desliga as outras (se houver). Isto é útil se você tem extrusores completamente separados.</li><li><b>Todas as ventoinhas:</b> liga todas as ventoinhas durante a troca de bico. Isto é útil se você tiver uma única ventoinha para refrigeração ou múltiplas ventoinhas perto umas das outras.</li></ul></html>"
msgctxt "brim_inside_margin description"
msgid "A brim around a model may touch an other model where you don't want it. This removes all brim within this distance from brimless models."
@ -163,7 +163,7 @@ msgstr "Todos de Uma Vez"
msgctxt "cool_during_extruder_switch option all_fans"
msgid "All fans"
msgstr ""
msgstr "Todas as ventoinhas"
msgctxt "resolution description"
msgid "All settings that influence the resolution of the print. These settings have a large impact on the quality (and print time)"
@ -631,7 +631,7 @@ msgstr "Refrigeração"
msgctxt "cool_during_extruder_switch label"
msgid "Cooling during extruder switch"
msgstr ""
msgstr "Refrigerando durante a troca de extrusor"
msgctxt "infill_pattern option cross"
msgid "Cross"
@ -2035,7 +2035,7 @@ msgstr "Makerbot"
msgctxt "support_z_seam_away_from_model description"
msgid "Manage the spatial relationship between the z seam of the support structure and the actual 3D model. This control is crucial as it allows users to ensure the seamless removal of support structures post-printing, without inflicting damage or leaving marks on the printed model."
msgstr ""
msgstr "Gerencia a relação espacial entre a costura Z da estrutura de suporte e o modelo 3D. Este controle é crucial já que permite a usuários assegurar a remoção limpa das estruturas de suporte pós-impressão sem infligir dano ou marcas no modelo impresso."
msgctxt "machine_gcode_flavor option RepRap (Marlin/Sprinter)"
msgid "Marlin"
@ -2215,7 +2215,7 @@ msgstr "Meio"
msgctxt "support_z_seam_min_distance label"
msgid "Min Z Seam Distance from Model"
msgstr ""
msgstr "Distância Z Mínima da Costura ao Modelo"
msgctxt "mold_width label"
msgid "Minimal Mold Width"
@ -2363,7 +2363,7 @@ msgstr "Múltiplas linhas de skirt te ajudam a fazer purga de sua extrusão melh
msgctxt "support_infill_density_multiplier_initial_layer description"
msgid "Multiplier for the infill on the initial layers of the support. Increasing this may help for bed adhesion."
msgstr ""
msgstr "Multiplicador para o preenchimento nas camadas iniciais do suporte. Aumentar este valor pode ajudar com aderência à mesa."
msgctxt "initial_layer_line_width_factor description"
msgid "Multiplier of the line width on the first layer. Increasing this could improve bed adhesion."
@ -2523,7 +2523,7 @@ msgstr "Um de Cada Vez"
msgctxt "cool_during_extruder_switch option only_last_extruder"
msgid "Only last extruder"
msgstr ""
msgstr "Somente o último extrusor"
msgctxt "retraction_hop_only_when_collides description"
msgid "Only perform a Z Hop when moving over printed parts which cannot be avoided by horizontal motion by Avoid Printed Parts when Traveling."
@ -2635,7 +2635,7 @@ msgstr "Porcentagem da velocidade da ventoinha a usar quando se imprimir a terce
msgctxt "z_seam_on_vertex description"
msgid "Place the z-seam on a polygon vertex. Switching this off can place the seam between vertices as well. (Keep in mind that this won't override the restrictions on placing the seam on an unsupported overhang.)"
msgstr ""
msgstr "Coloca a costura-z em um vértice de polígono. Desligar este ajuste permite colocar a costura entre vértices também. (Tenha em mente que isto não vai sobrepôr as restrições em colocar a costura em uma seção pendente não suportada.)"
msgctxt "minimum_polygon_circumference description"
msgid "Polygons in sliced layers that have a circumference smaller than this amount will be filtered out. Lower values lead to higher resolution mesh at the cost of slicing time. It is meant mostly for high resolution SLA printers and very tiny 3D models with a lot of details."
@ -2687,7 +2687,7 @@ msgstr "Distância Máxima de Ponte das Torres de Purga"
msgctxt "prime_tower_min_shell_thickness label"
msgid "Prime Tower Minimum Shell Thickness"
msgstr ""
msgstr "Espessura Mínima do Casco da Torre de Purga"
msgctxt "prime_tower_min_volume label"
msgid "Prime Tower Minimum Volume"
@ -2841,17 +2841,18 @@ msgctxt "raft_base_fan_speed label"
msgid "Raft Base Fan Speed"
msgstr "Velocidade de Ventoinha da Base do Raft"
#, fuzzy
msgctxt "raft_base_flow label"
msgid "Raft Base Flow"
msgstr ""
msgstr "Fluxo da Base do Raft"
msgctxt "raft_base_infill_overlap_mm label"
msgid "Raft Base Infill Overlap"
msgstr ""
msgstr "Sobreposição do Preenchimento da Base do Raft"
msgctxt "raft_base_infill_overlap label"
msgid "Raft Base Infill Overlap Percentage"
msgstr ""
msgstr "Porcentagem de Sobreposição do Preenchimento da Base do Raft"
msgctxt "raft_base_line_spacing label"
msgid "Raft Base Line Spacing"
@ -2895,23 +2896,23 @@ msgstr "Velocidade de Ventoinha no Raft"
msgctxt "raft_flow label"
msgid "Raft Flow"
msgstr ""
msgstr "Fluxo do Raft"
msgctxt "raft_interface_flow label"
msgid "Raft Interface Flow"
msgstr ""
msgstr "Fluxo da Interface do Raft"
msgctxt "raft_interface_infill_overlap_mm label"
msgid "Raft Interface Infill Overlap"
msgstr ""
msgstr "Sobreposição do Preenchimento da Interface do Raft"
msgctxt "raft_interface_infill_overlap label"
msgid "Raft Interface Infill Overlap Percentage"
msgstr ""
msgstr "Porcentagem de Sobreposição do Preenchimento da Interface do Raft"
msgctxt "raft_interface_z_offset label"
msgid "Raft Interface Z Offset"
msgstr ""
msgstr "Deslocamento Z da Interface do Raft"
msgctxt "raft_interface_margin label"
msgid "Raft Middle Extra Margin"
@ -2979,19 +2980,19 @@ msgstr "Amaciamento do Raft"
msgctxt "raft_surface_flow label"
msgid "Raft Surface Flow"
msgstr ""
msgstr "Fluxo da Superfície do Raft"
msgctxt "raft_surface_infill_overlap_mm label"
msgid "Raft Surface Infill Overlap"
msgstr ""
msgstr "Sobreposição do Preenchimento da Superfície do Raft"
msgctxt "raft_surface_infill_overlap label"
msgid "Raft Surface Infill Overlap Percentage"
msgstr ""
msgstr "Porcentagem de Sobreposição do Preenchimento da Superfície do Raft"
msgctxt "raft_surface_z_offset label"
msgid "Raft Surface Z Offset"
msgstr ""
msgstr "Deslocamento Z da Superfície do Raft"
msgctxt "raft_surface_margin label"
msgid "Raft Top Extra Margin"
@ -3231,7 +3232,7 @@ msgstr "Preferência do Canto da Costura"
msgctxt "seam_overhang_angle label"
msgid "Seam Overhanging Wall Angle"
msgstr ""
msgstr "Ângulo da Parede Pendente para Costura"
msgctxt "user_defined_print_order_enabled label"
msgid "Set Print Sequence Manually"
@ -3369,6 +3370,7 @@ msgctxt "small_hole_max_size label"
msgid "Small Hole Max Size"
msgstr "Tamanho Máximo de Furos Pequenos"
#, fuzzy
msgctxt "cool_min_temperature label"
msgid "Small Layer Printing Temperature"
msgstr "Temperatura de Impressão Final"
@ -3485,6 +3487,7 @@ msgctxt "support_bottom_distance label"
msgid "Support Bottom Distance"
msgstr "Distância Inferior do Suporte"
#, fuzzy
msgctxt "support_bottom_wall_count label"
msgid "Support Bottom Wall Line Count"
msgstr "Contagem de Linhas de Parede de Suporte"
@ -3579,7 +3582,7 @@ msgstr "Aceleração do Preenchimento do Suporte"
msgctxt "support_infill_density_multiplier_initial_layer label"
msgid "Support Infill Density Multiplier Initial Layer"
msgstr ""
msgstr "Camada Inicial do Multiplicador de Densidade de Preenchimento de Suporte"
msgctxt "support_infill_extruder_nr label"
msgid "Support Infill Extruder"
@ -3649,6 +3652,7 @@ msgctxt "support_interface_height label"
msgid "Support Interface Thickness"
msgstr "Espessura da Interface de Suporte"
#, fuzzy
msgctxt "support_interface_wall_count label"
msgid "Support Interface Wall Line Count"
msgstr "Contagem de Linhas de Parede de Suporte"
@ -3733,6 +3737,7 @@ msgctxt "support_roof_height label"
msgid "Support Roof Thickness"
msgstr "Espessura do Topo do Suporte"
#, fuzzy
msgctxt "support_roof_wall_count label"
msgid "Support Roof Wall Line Count"
msgstr "Contagem de Linhas de Parede de Suporte"
@ -3775,7 +3780,7 @@ msgstr "Distância em Z do Suporte"
msgctxt "support_z_seam_away_from_model label"
msgid "Support Z Seam Away from Model"
msgstr ""
msgstr "Suportar a Costura Z longe do Modelo"
msgctxt "support_interface_priority option support_lines_overwrite_interface_area"
msgid "Support lines preferred"
@ -3955,19 +3960,19 @@ msgstr "Aceleração com que se realizam os percursos."
msgctxt "raft_base_flow description"
msgid "The amount of material, relative to a normal extrusion line, to extrude during raft base printing. Having an increased flow may improve adhesion and raft structural strength."
msgstr ""
msgstr "A quantidade de material relativa a um filamento normal de extrusão a extrudar durante a impressão da base do raft. Ter um fluxo mais alto pode melhorar a aderência e a força estrutural do raft."
msgctxt "raft_interface_flow description"
msgid "The amount of material, relative to a normal extrusion line, to extrude during raft interface printing. Having an increased flow may improve adhesion and raft structural strength."
msgstr ""
msgstr "A quantidade de material relativa a um filamento normal de extrusão a extrudar durante a impressão da interface de raft. Ter um fluxo mais alto pode melhorar a aderência e a força estrutural do raft."
msgctxt "raft_flow description"
msgid "The amount of material, relative to a normal extrusion line, to extrude during raft printing. Having an increased flow may improve adhesion and raft structural strength."
msgstr ""
msgstr "A quantidade de material relativa a um filamento normal de extrusão a extrudar durante a impressão do raft. Ter um fluxo mais alto pode melhorar a aderência e a força estrutural do raft."
msgctxt "raft_surface_flow description"
msgid "The amount of material, relative to a normal extrusion line, to extrude during raft surface printing. Having an increased flow may improve adhesion and raft structural strength."
msgstr ""
msgstr "A quantidade de material relativa a um filamento normal de extrusão a extrudar durante a impressão da superfície do raft. Ter um fluxo mais alto pode melhorar a aderência e a força estrutural do raft."
msgctxt "ironing_flow description"
msgid "The amount of material, relative to a normal skin line, to extrude during ironing. Keeping the nozzle filled helps filling some of the crevices of the top surface, but too much results in overextrusion and blips on the side of the surface."
@ -3979,27 +3984,27 @@ msgstr "A quantidade de sobreposição entre o preenchimento e as paredes como u
msgctxt "raft_base_infill_overlap description"
msgid "The amount of overlap between the infill and the walls of the raft base, as a percentage of the infill line width. A slight overlap allows the walls to connect firmly to the infill."
msgstr ""
msgstr "A quantidade de sobreposição entre o preenchimento e as paredes da base do raft, como uma porcentagem da largura do filete de preenchimento. Uma sobreposição leve permite às paredes conectarem-se firmemente ao preenchimento."
msgctxt "raft_base_infill_overlap_mm description"
msgid "The amount of overlap between the infill and the walls of the raft base. A slight overlap allows the walls to connect firmly to the infill."
msgstr ""
msgstr "A quantidade de sobreposição entre o preenchimento e as paredes da base do raft. Uma sobreposição leve permite às paredes conectarem-se firmemente ao preenchimento."
msgctxt "raft_interface_infill_overlap description"
msgid "The amount of overlap between the infill and the walls of the raft interface, as a percentage of the infill line width. A slight overlap allows the walls to connect firmly to the infill."
msgstr ""
msgstr "A quantidade de sobreposição entre o preenchimento e as paredes da interface do raft, como uma porcentagem da largura do filete de preenchimento. Uma sobreposição leve permite às paredes conectarem-se firmemente ao preenchimento."
msgctxt "raft_interface_infill_overlap_mm description"
msgid "The amount of overlap between the infill and the walls of the raft interface. A slight overlap allows the walls to connect firmly to the infill."
msgstr ""
msgstr "A quantidade de sobreposição entre o preenchimento e as paredes da interface do raft. Uma sobreposição leve permite às paredes conectarem-se firmemente ao preenchimento."
msgctxt "raft_surface_infill_overlap description"
msgid "The amount of overlap between the infill and the walls of the raft surface, as a percentage of the infill line width. A slight overlap allows the walls to connect firmly to the infill."
msgstr ""
msgstr "A quantidade de sobreposição entre o preenchimento e as paredes da superfície do raft, como uma porcentagem da largura do filete de preenchimento. Uma sobreposição leve permite às paredes conectarem-se firmemente ao preenchimento."
msgctxt "raft_surface_infill_overlap_mm description"
msgid "The amount of overlap between the infill and the walls of the raft surface. A slight overlap allows the walls to connect firmly to the infill."
msgstr ""
msgstr "A quantidade de sobreposição entre o preenchimento e as paredes da superfície do raft. Uma sobreposição leve permite às paredes conectarem-se firmemente ao preenchimento."
msgctxt "infill_overlap_mm description"
msgid "The amount of overlap between the infill and the walls. A slight overlap allows the walls to connect firmly to the infill."
@ -4107,7 +4112,7 @@ msgstr "A distância entre as trajetórias de passagem a ferro."
msgctxt "support_z_seam_min_distance description"
msgid "The distance between the model and its support structure at the z-axis seam."
msgstr ""
msgstr "A distância entre o modelo e sua estrutura de suporta na costura do eixo Z."
msgctxt "travel_avoid_distance description"
msgid "The distance between the nozzle and already printed parts when avoiding during travel moves."
@ -4137,6 +4142,7 @@ msgctxt "brim_width description"
msgid "The distance from the model to the outermost brim line. A larger brim enhances adhesion to the build plate, but also reduces the effective print area."
msgstr "A distância do modelo à linha mais externa do brim. Um brim mais largo aumenta a aderência à mesa, mas também reduz a área efetiva de impressão."
#, fuzzy
msgctxt "interlocking_boundary_avoidance description"
msgid "The distance from the outside of a model where interlocking structures will not be generated, measured in cells."
msgstr "Distância da ponta do bico onde 'estacionar' o filamento quando seu extrusor não estiver sendo usado."
@ -4603,7 +4609,7 @@ msgstr "A mínima inclinação da área para que o suporte em escada tenha efeit
msgctxt "prime_tower_min_shell_thickness description"
msgid "The minimum thickness of the prime tower shell. You may increase it to make the prime tower stronger."
msgstr ""
msgstr "A espessura mínima do casco da torre de purga. Você pode aumentar este valor para tornar a torre de purga mais forte."
msgctxt "cool_min_layer_time description"
msgid "The minimum time spent in a layer. This forces the printer to slow down, to at least spend the time set here in one layer. This allows the printed material to cool down properly before printing the next layer. Layers may still take shorter than the minimal layer time if Lift Head is disabled and if the Minimum Speed would otherwise be violated."
@ -4689,14 +4695,17 @@ msgctxt "support_wall_count description"
msgid "The number of walls with which to surround support infill. Adding a wall can make support print more reliably and can support overhangs better, but increases print time and material used."
msgstr "O número de paredes com as quais contornar o preenchimento de suporte. Adicionar uma parede pode tornar a impressão de suporte mais confiável e apoiar seções pendentes melhor, mas aumenta tempo de impressão e material usado."
#, fuzzy
msgctxt "support_bottom_wall_count description"
msgid "The number of walls with which to surround support interface floor. Adding a wall can make support print more reliably and can support overhangs better, but increases print time and material used."
msgstr "O número de paredes com as quais contornar o preenchimento de suporte. Adicionar uma parede pode tornar a impressão de suporte mais confiável e apoiar seções pendentes melhor, mas aumenta tempo de impressão e material usado."
#, fuzzy
msgctxt "support_roof_wall_count description"
msgid "The number of walls with which to surround support interface roof. Adding a wall can make support print more reliably and can support overhangs better, but increases print time and material used."
msgstr "O número de paredes com as quais contornar o preenchimento de suporte. Adicionar uma parede pode tornar a impressão de suporte mais confiável e apoiar seções pendentes melhor, mas aumenta tempo de impressão e material usado."
#, fuzzy
msgctxt "support_interface_wall_count description"
msgid "The number of walls with which to surround support interface. Adding a wall can make support print more reliably and can support overhangs better, but increases print time and material used."
msgstr "O número de paredes com as quais contornar o preenchimento de suporte. Adicionar uma parede pode tornar a impressão de suporte mais confiável e apoiar seções pendentes melhor, mas aumenta tempo de impressão e material usado."
@ -5059,7 +5068,7 @@ msgstr "A largura do brim a ser impresso sob o suporte. Um brim mais largo melho
msgctxt "interlocking_beam_width description"
msgid "The width of the interlocking structure beams."
msgstr "A largura da torre de purga."
msgstr "A largura das faixas cruzadas de estrutura."
msgctxt "prime_tower_base_size description"
msgid "The width of the prime tower brim/base. A larger base enhances adhesion to the build plate, but also reduces the effective print area."
@ -5339,7 +5348,7 @@ msgstr "Diâmetro do Tronco"
msgctxt "seam_overhang_angle description"
msgid "Try to prevent seams on walls that overhang more than this angle. When the value is 90, no walls will be treated as overhanging."
msgstr ""
msgstr "Tentar prevenir costuras nas paredes que tenham seção pendente com ângulo maior que esse. Quando o valor for 90, nenhuma parede será tratada como seção pendente."
msgctxt "machine_gcode_flavor option UltiGCode"
msgid "Ultimaker 2"
@ -5347,7 +5356,7 @@ msgstr "Ultimaker 2"
msgctxt "cool_during_extruder_switch option unchanged"
msgid "Unchanged"
msgstr ""
msgstr "Não alterado"
msgctxt "meshfix_union_all label"
msgid "Union Overlapping Volumes"
@ -5515,11 +5524,11 @@ msgstr "Ao se imprimir paredes de ponte, a quantidade de material extrudado é m
msgctxt "raft_interface_z_offset description"
msgid "When printing the first layer of the raft interface, translate by this offset to customize the adhesion between base and interface. A negative offset should improve the adhesion."
msgstr ""
msgstr "Quando a primeira camada da interface de raft for impressa, traduza pelo valor deste deslocamento para personalizar a aderência entre a base e a interface. Um deslocamento negative deve melhorar a aderência."
msgctxt "raft_surface_z_offset description"
msgid "When printing the first layer of the raft surface, translate by this offset to customize the adhesion between interface and surface. A negative offset should improve the adhesion."
msgstr ""
msgstr "Quando a primeira camada da superfície de raft for impressora, traduza pelo valor deste deslocamento para personalizar a aderência entre a base e a superfície. Um deslocamento negative deve melhorar a aderência."
msgctxt "bridge_skin_material_flow_2 description"
msgid "When printing the second bridge skin layer, the amount of material extruded is multiplied by this value."
@ -5819,7 +5828,7 @@ msgstr "Alinhamento da Costura em Z"
msgctxt "z_seam_on_vertex label"
msgid "Z Seam On Vertex"
msgstr ""
msgstr "Costura Z No Vértice"
msgctxt "z_seam_position label"
msgid "Z Seam Position"