mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-06 22:47:29 -06:00
Merge remote-tracking branch 'origin/main' into CURA-12261-3dconnectionmouse
This commit is contained in:
commit
eb5c5a1ad9
58 changed files with 431 additions and 76 deletions
|
@ -5,7 +5,7 @@ requirements:
|
|||
- "curaengine/5.10.0-alpha.0@ultimaker/testing"
|
||||
- "cura_binary_data/5.10.0-alpha.0@ultimaker/testing"
|
||||
- "fdm_materials/5.10.0-alpha.0@ultimaker/testing"
|
||||
- "dulcificum/0.2.1@ultimaker/stable"
|
||||
- "dulcificum/0.3.0@ultimaker/stable"
|
||||
- "pysavitar/5.4.0-alpha.0@ultimaker/stable"
|
||||
- "pynest2d/5.4.0-alpha.0@ultimaker/stable"
|
||||
requirements_internal:
|
||||
|
|
|
@ -27,7 +27,6 @@ class CuraConan(ConanFile):
|
|||
generators = "VirtualPythonEnv"
|
||||
tool_requires = "gettext/0.22.5"
|
||||
|
||||
# FIXME: Remove specific branch once merged to main
|
||||
python_requires = "translationextractor/[>=2.2.0]@ultimaker/stable"
|
||||
|
||||
options = {
|
||||
|
|
|
@ -13,7 +13,9 @@ class FormatMaps:
|
|||
"fire_e": "ultimaker_method",
|
||||
"lava_f": "ultimaker_methodx",
|
||||
"magma_10": "ultimaker_methodxl",
|
||||
"sketch": "ultimaker_sketch"
|
||||
"sketch": "ultimaker_sketch",
|
||||
"sketch_large": "ultimaker_sketch_large",
|
||||
"sketch_sprint": "ultimaker_sketch_sprint"
|
||||
}
|
||||
|
||||
# A map from the extruder-name in their native file-formats to the internal name we use.
|
||||
|
|
|
@ -1,9 +1,12 @@
|
|||
# Copyright (c) 2018 Ultimaker B.V.
|
||||
# Copyright (c) 2025 UltiMaker
|
||||
# Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
from PyQt6.QtCore import pyqtProperty, QObject, pyqtSignal
|
||||
from typing import List
|
||||
|
||||
from UM.Settings.ContainerRegistry import ContainerRegistry
|
||||
from UM.Settings.DefinitionContainer import DefinitionContainer
|
||||
|
||||
MYPY = False
|
||||
if MYPY:
|
||||
from cura.PrinterOutput.Models.ExtruderConfigurationModel import ExtruderConfigurationModel
|
||||
|
@ -68,6 +71,15 @@ class PrinterConfigurationModel(QObject):
|
|||
return True
|
||||
return False
|
||||
|
||||
@pyqtProperty("QStringList", constant=True)
|
||||
def validCoresForPrinterType(self) -> List[str]:
|
||||
printers = ContainerRegistry.getInstance().findContainersMetadata(
|
||||
ignore_case=True, type="machine", name=self._printer_type, container_type=DefinitionContainer)
|
||||
id = printers[0]["id"] if len(printers) > 0 and "id" in printers[0] else ""
|
||||
definitions = ContainerRegistry.getInstance().findContainersMetadata(
|
||||
ignore_case=True, type="variant", definition=id+"*")
|
||||
return [x["name"] for x in definitions]
|
||||
|
||||
def __str__(self):
|
||||
message_chunks = []
|
||||
message_chunks.append("Printer type: " + self._printer_type)
|
||||
|
|
|
@ -1679,7 +1679,7 @@ class MachineManager(QObject):
|
|||
intent_category = self.activeIntentCategory,
|
||||
intent_name = IntentCategoryModel.translation(self.activeIntentCategory, "name", self.activeIntentCategory.title()),
|
||||
custom_profile = self.activeQualityOrQualityChangesName if global_stack.qualityChanges is not empty_quality_changes_container else None,
|
||||
layer_height = self.activeQualityLayerHeight if self.isActiveQualitySupported else None,
|
||||
layer_height = float("{:.2f}".format(self.activeQualityLayerHeight)) if self.isActiveQualitySupported else None,
|
||||
is_experimental = self.isActiveQualityExperimental and self.isActiveQualitySupported
|
||||
)
|
||||
|
||||
|
|
|
@ -46,6 +46,13 @@ class MakerbotWriter(MeshWriter):
|
|||
suffixes=["makerbot"]
|
||||
)
|
||||
)
|
||||
MimeTypeDatabase.addMimeType(
|
||||
MimeType(
|
||||
name="application/x-makerbot-replicator_plus",
|
||||
comment="Makerbot Toolpath Package",
|
||||
suffixes=["makerbot"]
|
||||
)
|
||||
)
|
||||
|
||||
_PNG_FORMAT = [
|
||||
{"prefix": "isometric_thumbnail", "width": 120, "height": 120},
|
||||
|
@ -114,6 +121,8 @@ class MakerbotWriter(MeshWriter):
|
|||
filename, filedata = "print.gcode", gcode_text_io.getvalue()
|
||||
case "application/x-makerbot":
|
||||
filename, filedata = "print.jsontoolpath", du.gcode_2_miracle_jtp(gcode_text_io.getvalue())
|
||||
case "application/x-makerbot-replicator_plus":
|
||||
filename, filedata = "print.jsontoolpath", du.gcode_2_miracle_jtp(gcode_text_io.getvalue(), nb_extruders=1)
|
||||
case _:
|
||||
raise Exception("Unsupported Mime type")
|
||||
|
||||
|
|
|
@ -25,6 +25,12 @@ def getMetaData():
|
|||
"description": catalog.i18nc("@item:inlistbox", "Makerbot Sketch Printfile"),
|
||||
"mime_type": "application/x-makerbot-sketch",
|
||||
"mode": MakerbotWriter.MakerbotWriter.OutputMode.BinaryMode,
|
||||
},
|
||||
{
|
||||
"extension": file_extension,
|
||||
"description": catalog.i18nc("@item:inlistbox", "Makerbot Replicator+ Printfile"),
|
||||
"mime_type": "application/x-makerbot-replicator_plus",
|
||||
"mode": MakerbotWriter.MakerbotWriter.OutputMode.BinaryMode,
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
|
@ -331,7 +331,7 @@ class CloudOutputDevice(UltimakerNetworkedPrinterOutputDevice):
|
|||
return False
|
||||
|
||||
[printer, *_] = self._printers
|
||||
return printer.type in ("MakerBot Method X", "MakerBot Method XL", "MakerBot Sketch")
|
||||
return printer.type in ("MakerBot Method", "MakerBot Method X", "MakerBot Method XL", "MakerBot Sketch", "MakerBot Sketch Large", "MakerBot Sketch Sprint")
|
||||
|
||||
@pyqtProperty(bool, notify=_cloudClusterPrintersChanged)
|
||||
def supportsPrintJobActions(self) -> bool:
|
||||
|
|
|
@ -3,5 +3,7 @@
|
|||
"ultimaker_methodx": "MakerBot Method X",
|
||||
"ultimaker_methodxl": "MakerBot Method XL",
|
||||
"ultimaker_factor4": "Ultimaker Factor 4",
|
||||
"ultimaker_sketch": "MakerBot Sketch"
|
||||
"ultimaker_sketch": "MakerBot Sketch",
|
||||
"ultimaker_sketch_large": "MakerBot Sketch Large",
|
||||
"ultimaker_sketch_sprint": "MakerBot Sketch Sprint"
|
||||
}
|
||||
|
|
|
@ -97,6 +97,8 @@ class USBPrinterOutputDevice(PrinterOutputDevice):
|
|||
|
||||
CuraApplication.getInstance().getOnExitCallbackManager().addCallback(self._checkActivePrintingUponAppExit)
|
||||
|
||||
CuraApplication.getInstance().getPreferences().addPreference("usb_printing/enabled", False)
|
||||
|
||||
# This is a callback function that checks if there is any printing in progress via USB when the application tries
|
||||
# to exit. If so, it will show a confirmation before
|
||||
def _checkActivePrintingUponAppExit(self) -> None:
|
||||
|
@ -144,6 +146,8 @@ class USBPrinterOutputDevice(PrinterOutputDevice):
|
|||
|
||||
CuraApplication.getInstance().getController().setActiveStage("MonitorStage")
|
||||
|
||||
CuraApplication.getInstance().getPreferences().setValue("usb_printing/enabled", True)
|
||||
|
||||
#Find the g-code to print.
|
||||
gcode_textio = StringIO()
|
||||
gcode_writer = cast(MeshWriter, PluginRegistry.getInstance().getPluginObject("GCodeWriter"))
|
||||
|
|
|
@ -0,0 +1,68 @@
|
|||
import configparser
|
||||
import io
|
||||
from typing import Dict, Tuple, List
|
||||
|
||||
from UM.VersionUpgrade import VersionUpgrade
|
||||
|
||||
_RENAMED_SETTINGS = {
|
||||
"wall_overhang_speed_factor": "wall_overhang_speed_factors"
|
||||
} # type: Dict[str, str]
|
||||
|
||||
_NEW_SETTING_VERSION = "25"
|
||||
|
||||
|
||||
class VersionUpgrade59to510(VersionUpgrade):
|
||||
def upgradePreferences(self, serialized: str, filename: str):
|
||||
parser = configparser.ConfigParser(interpolation = None)
|
||||
parser.read_string(serialized)
|
||||
|
||||
# Fix 'renamed'(ish) settings for visibility
|
||||
if "visible_settings" in parser["general"]:
|
||||
all_setting_keys = parser["general"]["visible_settings"].strip().split(";")
|
||||
if all_setting_keys:
|
||||
for idx, key in enumerate(all_setting_keys):
|
||||
if key in _RENAMED_SETTINGS:
|
||||
all_setting_keys[idx] = _RENAMED_SETTINGS[key]
|
||||
parser["general"]["visible_settings"] = ";".join(all_setting_keys)
|
||||
|
||||
# Update version number.
|
||||
parser["metadata"]["setting_version"] = _NEW_SETTING_VERSION
|
||||
|
||||
result = io.StringIO()
|
||||
parser.write(result)
|
||||
return [filename], [result.getvalue()]
|
||||
|
||||
def upgradeInstanceContainer(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]:
|
||||
parser = configparser.ConfigParser(interpolation = None, comment_prefixes = ())
|
||||
parser.read_string(serialized)
|
||||
|
||||
# Update version number.
|
||||
parser["metadata"]["setting_version"] = _NEW_SETTING_VERSION
|
||||
|
||||
if "values" in parser:
|
||||
for old_name, new_name in _RENAMED_SETTINGS.items():
|
||||
if old_name in parser["values"]:
|
||||
parser["values"][new_name] = parser["values"][old_name]
|
||||
del parser["values"][old_name]
|
||||
if "wall_overhang_speed_factors" in parser["values"]:
|
||||
old_value = float(parser["values"]["wall_overhang_speed_factors"])
|
||||
new_value = [max(1, int(round(old_value)))]
|
||||
parser["values"]["wall_overhang_speed_factor"] = str(new_value)
|
||||
|
||||
result = io.StringIO()
|
||||
parser.write(result)
|
||||
return [filename], [result.getvalue()]
|
||||
|
||||
def upgradeStack(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]:
|
||||
parser = configparser.ConfigParser(interpolation = None)
|
||||
parser.read_string(serialized)
|
||||
|
||||
# Update version number.
|
||||
if "metadata" not in parser:
|
||||
parser["metadata"] = {}
|
||||
|
||||
parser["metadata"]["setting_version"] = _NEW_SETTING_VERSION
|
||||
|
||||
result = io.StringIO()
|
||||
parser.write(result)
|
||||
return [filename], [result.getvalue()]
|
60
plugins/VersionUpgrade/VersionUpgrade59to510/__init__.py
Normal file
60
plugins/VersionUpgrade/VersionUpgrade59to510/__init__.py
Normal file
|
@ -0,0 +1,60 @@
|
|||
# Copyright (c) 2024 UltiMaker
|
||||
# Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
from typing import Any, Dict, TYPE_CHECKING
|
||||
|
||||
from . import VersionUpgrade59to510
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from UM.Application import Application
|
||||
|
||||
upgrade = VersionUpgrade59to510.VersionUpgrade59to510()
|
||||
|
||||
def getMetaData() -> Dict[str, Any]:
|
||||
return {
|
||||
"version_upgrade": {
|
||||
# From To Upgrade function
|
||||
("preferences", 7000024): ("preferences", 7000025, upgrade.upgradePreferences),
|
||||
("machine_stack", 6000024): ("machine_stack", 6000025, upgrade.upgradeStack),
|
||||
("extruder_train", 6000024): ("extruder_train", 6000025, upgrade.upgradeStack),
|
||||
("definition_changes", 4000024): ("definition_changes", 4000025, upgrade.upgradeInstanceContainer),
|
||||
("quality_changes", 4000024): ("quality_changes", 4000025, upgrade.upgradeInstanceContainer),
|
||||
("quality", 4000024): ("quality", 4000025, upgrade.upgradeInstanceContainer),
|
||||
("user", 4000024): ("user", 4000025, upgrade.upgradeInstanceContainer),
|
||||
("intent", 4000024): ("intent", 4000025, upgrade.upgradeInstanceContainer),
|
||||
},
|
||||
"sources": {
|
||||
"preferences": {
|
||||
"get_version": upgrade.getCfgVersion,
|
||||
"location": {"."}
|
||||
},
|
||||
"machine_stack": {
|
||||
"get_version": upgrade.getCfgVersion,
|
||||
"location": {"./machine_instances"}
|
||||
},
|
||||
"extruder_train": {
|
||||
"get_version": upgrade.getCfgVersion,
|
||||
"location": {"./extruders"}
|
||||
},
|
||||
"definition_changes": {
|
||||
"get_version": upgrade.getCfgVersion,
|
||||
"location": {"./definition_changes"}
|
||||
},
|
||||
"quality_changes": {
|
||||
"get_version": upgrade.getCfgVersion,
|
||||
"location": {"./quality_changes"}
|
||||
},
|
||||
"quality": {
|
||||
"get_version": upgrade.getCfgVersion,
|
||||
"location": {"./quality"}
|
||||
},
|
||||
"user": {
|
||||
"get_version": upgrade.getCfgVersion,
|
||||
"location": {"./user"}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
def register(app: "Application") -> Dict[str, Any]:
|
||||
return {"version_upgrade": upgrade}
|
8
plugins/VersionUpgrade/VersionUpgrade59to510/plugin.json
Normal file
8
plugins/VersionUpgrade/VersionUpgrade59to510/plugin.json
Normal file
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"name": "Version Upgrade 5.9 to 5.10",
|
||||
"author": "Ultimaker B.V.",
|
||||
"version": "1.0.0",
|
||||
"description": "Upgrades configurations from Cura 5.9 to Cura 5.10",
|
||||
"api": 8,
|
||||
"i18n-catalog": "cura"
|
||||
}
|
|
@ -120,7 +120,12 @@
|
|||
"support_z_distance": { "value": "layer_height * 2" },
|
||||
"top_bottom_thickness": { "value": "layer_height * 4" },
|
||||
"wall_overhang_angle": { "value": 55 },
|
||||
"wall_overhang_speed_factor": { "value": 55 },
|
||||
"wall_overhang_speed_factors":
|
||||
{
|
||||
"value": [
|
||||
55
|
||||
]
|
||||
},
|
||||
"zig_zaggify_infill": { "value": "infill_pattern == 'cross' or infill_pattern == 'cross_3d' or infill_pattern == 'lines'" }
|
||||
}
|
||||
}
|
|
@ -238,7 +238,12 @@
|
|||
"wall_extruder_nr": { "value": -1 },
|
||||
"wall_line_width_0": { "value": 0.44 },
|
||||
"wall_overhang_angle": { "value": 45 },
|
||||
"wall_overhang_speed_factor": { "value": 40 },
|
||||
"wall_overhang_speed_factors":
|
||||
{
|
||||
"value": [
|
||||
40
|
||||
]
|
||||
},
|
||||
"wall_thickness": { "value": 0.84 },
|
||||
"wall_x_extruder_nr": { "value": -1 },
|
||||
"zig_zaggify_infill": { "value": true }
|
||||
|
|
|
@ -167,7 +167,12 @@
|
|||
"travel_avoid_supports": { "value": "True" },
|
||||
"wall_line_width": { "value": "machine_nozzle_size" },
|
||||
"wall_overhang_angle": { "value": "75" },
|
||||
"wall_overhang_speed_factor": { "value": "50" },
|
||||
"wall_overhang_speed_factors":
|
||||
{
|
||||
"value": [
|
||||
50
|
||||
]
|
||||
},
|
||||
"zig_zaggify_infill": { "value": "True" }
|
||||
}
|
||||
}
|
|
@ -107,7 +107,7 @@
|
|||
"travel_retract_before_outer_wall": { "value": true },
|
||||
"wall_0_wipe_dist": { "value": 0.0 },
|
||||
"wall_overhang_angle": { "default_value": 75 },
|
||||
"wall_overhang_speed_factor": { "default_value": 50 },
|
||||
"wall_overhang_speed_factors": { "default_value": "[50]" },
|
||||
"wall_thickness": { "value": "line_width * 2" },
|
||||
"z_seam_corner": { "value": "'z_seam_corner_weighted'" },
|
||||
"z_seam_type": { "value": "'back'" }
|
||||
|
|
|
@ -3232,6 +3232,19 @@
|
|||
"minimum_value": 0.01,
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": true
|
||||
},
|
||||
"material_pressure_advance_factor":
|
||||
{
|
||||
"enabled": false,
|
||||
"label": "Pressure advance factor",
|
||||
"description": "Tuning factor for pressure advance, which is meant to synchronize extrusion with motion",
|
||||
"default_value": 0.05,
|
||||
"maximum_value_warning": 1.0,
|
||||
"minimum_value": 0,
|
||||
"type": "float",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": true,
|
||||
"settable_per_meshgroup": false
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -4715,6 +4728,31 @@
|
|||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": true
|
||||
},
|
||||
"cool_min_layer_time_overhang":
|
||||
{
|
||||
"label": "Minimum Layer Time with Overhang",
|
||||
"description": "The minimum time spent in a layer that contains overhanging extrusions. 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.",
|
||||
"unit": "s",
|
||||
"type": "float",
|
||||
"default_value": 5,
|
||||
"value": "cool_min_layer_time",
|
||||
"minimum_value": "0",
|
||||
"maximum_value_warning": "600",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": true
|
||||
},
|
||||
"cool_min_layer_time_overhang_min_segment_length":
|
||||
{
|
||||
"label": "Minimum Overhang Segment Length",
|
||||
"description": "When trying to apply the minimum layer time specific for overhanging layers, it will be applied only if at least one consecutive overhanging extrusion move is longer than this value.",
|
||||
"unit": "mm",
|
||||
"type": "float",
|
||||
"default_value": 5,
|
||||
"minimum_value": "0",
|
||||
"maximum_value_warning": "500",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": true
|
||||
},
|
||||
"cool_min_speed":
|
||||
{
|
||||
"label": "Minimum Speed",
|
||||
|
@ -8417,15 +8455,13 @@
|
|||
"value": "support_angle",
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
"wall_overhang_speed_factor":
|
||||
"wall_overhang_speed_factors":
|
||||
{
|
||||
"label": "Overhanging Wall Speed",
|
||||
"description": "Overhanging walls will be printed at this percentage of their normal print speed.",
|
||||
"label": "Overhanging Wall Speeds",
|
||||
"description": "Overhanging walls will be printed at a percentage of their normal print speed. You can specify multiple values, so that even more overhanging walls will be printed even slower, e.g. by setting [75, 50, 25]",
|
||||
"unit": "%",
|
||||
"type": "float",
|
||||
"default_value": 100,
|
||||
"minimum_value": "0.001",
|
||||
"minimum_value_warning": "25",
|
||||
"type": "[int]",
|
||||
"default_value": "[100]",
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
"bridge_settings_enabled":
|
||||
|
|
|
@ -109,7 +109,12 @@
|
|||
"travel_avoid_other_parts": { "default_value": false },
|
||||
"wall_line_width": { "value": "machine_nozzle_size" },
|
||||
"wall_overhang_angle": { "default_value": 75 },
|
||||
"wall_overhang_speed_factor": { "default_value": 50 },
|
||||
"wall_overhang_speed_factors":
|
||||
{
|
||||
"default_value": [
|
||||
50
|
||||
]
|
||||
},
|
||||
"zig_zaggify_infill": { "value": true }
|
||||
}
|
||||
}
|
|
@ -61,7 +61,12 @@
|
|||
"support_pattern": { "default_value": "lines" },
|
||||
"switch_extruder_retraction_amount": { "value": 100 },
|
||||
"switch_extruder_retraction_speeds": { "value": 60 },
|
||||
"wall_overhang_speed_factor": { "value": 50 },
|
||||
"wall_overhang_speed_factors":
|
||||
{
|
||||
"value": [
|
||||
50
|
||||
]
|
||||
},
|
||||
"z_seam_corner": { "default_value": "z_seam_corner_any" },
|
||||
"z_seam_relative": { "value": true },
|
||||
"z_seam_type": { "default_value": "sharpest_corner" },
|
||||
|
|
|
@ -109,7 +109,12 @@
|
|||
"travel_avoid_other_parts": { "default_value": false },
|
||||
"wall_line_width": { "value": "machine_nozzle_size" },
|
||||
"wall_overhang_angle": { "default_value": 75 },
|
||||
"wall_overhang_speed_factor": { "default_value": 50 },
|
||||
"wall_overhang_speed_factors":
|
||||
{
|
||||
"default_value": [
|
||||
50
|
||||
]
|
||||
},
|
||||
"zig_zaggify_infill": { "value": true }
|
||||
}
|
||||
}
|
|
@ -10,6 +10,6 @@
|
|||
"overrides":
|
||||
{
|
||||
"retraction_amount": { "default_value": 5 },
|
||||
"retraction_speed": { "value": "machine_max_feedrate_e" }
|
||||
"retraction_speed": { "value": "resolveOrValue('machine_max_feedrate_e')" }
|
||||
}
|
||||
}
|
|
@ -52,15 +52,13 @@
|
|||
"ultimaker_rapidrinse",
|
||||
"ultimaker_sr30",
|
||||
"ultimaker_petg",
|
||||
"ultimaker_metallic_pla",
|
||||
"basf_",
|
||||
"jabil_",
|
||||
"polymaker_",
|
||||
"ultimaker_rapidrinse",
|
||||
"ultimaker_sr30",
|
||||
"ultimaker_petg",
|
||||
"ultimaker_pva",
|
||||
"ultimaker_metallic_pla"
|
||||
"ultimaker_pva"
|
||||
],
|
||||
"has_machine_quality": true,
|
||||
"has_materials": true,
|
||||
|
|
|
@ -53,8 +53,7 @@
|
|||
"ultimaker_pva",
|
||||
"ultimaker_rapidrinse",
|
||||
"ultimaker_sr30",
|
||||
"ultimaker_petg",
|
||||
"ultimaker_metallic_pla"
|
||||
"ultimaker_petg"
|
||||
],
|
||||
"has_machine_quality": true,
|
||||
"has_materials": true,
|
||||
|
@ -380,10 +379,12 @@
|
|||
"wall_0_wipe_dist": { "value": 0.2 },
|
||||
"wall_line_width_x": { "value": 0.58 },
|
||||
"wall_overhang_angle": { "value": 35 },
|
||||
"wall_overhang_speed_factor":
|
||||
"wall_overhang_speed_factors":
|
||||
{
|
||||
"minimum_value_warning": 15,
|
||||
"value": 17.5
|
||||
"value": [
|
||||
18
|
||||
]
|
||||
},
|
||||
"wall_thickness": { "value": 1 },
|
||||
"wall_x_material_flow_layer_0": { "value": "material_flow" },
|
||||
|
|
|
@ -119,7 +119,12 @@
|
|||
"travel_avoid_other_parts": { "default_value": false },
|
||||
"wall_line_width": { "value": "machine_nozzle_size" },
|
||||
"wall_overhang_angle": { "default_value": 75 },
|
||||
"wall_overhang_speed_factor": { "default_value": 50 },
|
||||
"wall_overhang_speed_factors":
|
||||
{
|
||||
"default_value": [
|
||||
50
|
||||
]
|
||||
},
|
||||
"zig_zaggify_infill": { "value": true }
|
||||
}
|
||||
}
|
|
@ -195,7 +195,12 @@
|
|||
"travel_avoid_other_parts": { "default_value": false },
|
||||
"wall_line_width": { "value": "machine_nozzle_size" },
|
||||
"wall_overhang_angle": { "default_value": 75 },
|
||||
"wall_overhang_speed_factor": { "default_value": 50 },
|
||||
"wall_overhang_speed_factors":
|
||||
{
|
||||
"default_value": [
|
||||
50
|
||||
]
|
||||
},
|
||||
"xy_offset_layer_0": { "value": -0.3 },
|
||||
"z_seam_type": { "value": "'back'" },
|
||||
"zig_zaggify_infill": { "value": true }
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// Copyright (c) 2018 Ultimaker B.V.
|
||||
// Copyright (c) 2025 UltiMaker
|
||||
// Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
import QtQuick 2.7
|
||||
|
@ -12,7 +12,7 @@ Button
|
|||
id: configurationItem
|
||||
|
||||
property var configuration: null
|
||||
hoverEnabled: isValidMaterial
|
||||
hoverEnabled: isValidMaterial && isValidCore
|
||||
|
||||
property bool isValidMaterial:
|
||||
{
|
||||
|
@ -25,7 +25,6 @@ Button
|
|||
for (var index in extruderConfigurations)
|
||||
{
|
||||
var name = extruderConfigurations[index].material ? extruderConfigurations[index].material.name : ""
|
||||
|
||||
if (name == "" || name == "Unknown")
|
||||
{
|
||||
return false
|
||||
|
@ -34,6 +33,25 @@ Button
|
|||
return true
|
||||
}
|
||||
|
||||
property bool isValidCore:
|
||||
{
|
||||
if (configuration === null)
|
||||
{
|
||||
return false
|
||||
}
|
||||
var extruderConfigurations = configuration.extruderConfigurations
|
||||
var coresList = configuration.validCoresForPrinterType
|
||||
for (var index in extruderConfigurations)
|
||||
{
|
||||
var name = extruderConfigurations[index].hotendID ? extruderConfigurations[index].hotendID : ""
|
||||
if (name != "" && ! coresList.includes(name))
|
||||
{
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
background: Rectangle
|
||||
{
|
||||
color: parent.hovered ? UM.Theme.getColor("action_button_hovered") : UM.Theme.getColor("action_button")
|
||||
|
@ -60,7 +78,7 @@ Button
|
|||
right: parent.right
|
||||
rightMargin: UM.Theme.getSize("wide_margin").width
|
||||
}
|
||||
height: childrenRect.height
|
||||
height: unknownMaterial.visible ? unknownMaterial.height : (repeater.count > 0 ? repeater.itemAt(0).height : 0)
|
||||
spacing: UM.Theme.getSize("default_margin").width
|
||||
|
||||
Repeater
|
||||
|
@ -72,21 +90,20 @@ Button
|
|||
{
|
||||
width: Math.round(parent.width / (configuration !== null ? configuration.extruderConfigurations.length : 1))
|
||||
printCoreConfiguration: modelData
|
||||
visible: configurationItem.isValidMaterial
|
||||
visible: configurationItem.isValidMaterial && configurationItem.isValidCore
|
||||
}
|
||||
}
|
||||
|
||||
// Unknown material
|
||||
// Unknown material or core ('variant')
|
||||
Item
|
||||
{
|
||||
id: unknownMaterial
|
||||
height: unknownMaterialMessage.height + UM.Theme.getSize("thin_margin").width / 2
|
||||
height: unknownMaterialMessage.height
|
||||
width: parent.width
|
||||
|
||||
anchors.top: parent.top
|
||||
anchors.topMargin: UM.Theme.getSize("thin_margin").width / 2
|
||||
|
||||
visible: !configurationItem.isValidMaterial
|
||||
visible: ! (configurationItem.isValidMaterial && configurationItem.isValidCore)
|
||||
|
||||
UM.ColorImage
|
||||
{
|
||||
|
@ -102,13 +119,9 @@ Button
|
|||
UM.Label
|
||||
{
|
||||
id: unknownMaterialMessage
|
||||
text:
|
||||
{
|
||||
if (configuration === null)
|
||||
{
|
||||
return ""
|
||||
}
|
||||
|
||||
function whenUnknownMaterial()
|
||||
{
|
||||
var extruderConfigurations = configuration.extruderConfigurations
|
||||
var unknownMaterials = []
|
||||
for (var index in extruderConfigurations)
|
||||
|
@ -135,9 +148,47 @@ Button
|
|||
|
||||
unknownMaterials = "<b>" + unknownMaterials + "</b>"
|
||||
var draftResult = catalog.i18nc("@label", "This configuration is not available because %1 is not recognized. Please visit %2 to download the correct material profile.");
|
||||
var result = draftResult.arg(unknownMaterials).arg("<a href=' '>" + catalog.i18nc("@label","Marketplace") + "</a> ")
|
||||
return draftResult.arg(unknownMaterials).arg("<a href=' '>" + catalog.i18nc("@label","Marketplace") + "</a> ")
|
||||
}
|
||||
|
||||
return result
|
||||
function whenMismatchedCore()
|
||||
{
|
||||
var extruderConfigurations = configuration.extruderConfigurations
|
||||
var coresList = configuration.validCoresForPrinterType
|
||||
var mismatchedCores = []
|
||||
for (var index in extruderConfigurations)
|
||||
{
|
||||
var name = extruderConfigurations[index].hotendID ? extruderConfigurations[index].hotendID : ""
|
||||
if (name != "" && ! coresList.includes(name))
|
||||
{
|
||||
mismatchedCores.push(name)
|
||||
}
|
||||
}
|
||||
|
||||
mismatchedCores = "<b>" + mismatchedCores + "</b>"
|
||||
var draftResult = catalog.i18nc("@label", "This configuration is not available because there is a mismatch or other problem with core-type %1. Please visit %2 to check which cores this printer-type supports w.r.t. new slices.");
|
||||
return draftResult.arg(mismatchedCores).arg("<a href=' '>" + catalog.i18nc("@label","WEBSITE") + "</a> ")
|
||||
}
|
||||
|
||||
text:
|
||||
{
|
||||
if (configuration === null)
|
||||
{
|
||||
return ""
|
||||
}
|
||||
|
||||
var extruderConfigurations = configuration.extruderConfigurations
|
||||
var perExtruder = []
|
||||
for (var index in extruderConfigurations)
|
||||
{
|
||||
var matName = extruderConfigurations[index].material ? extruderConfigurations[index].material.name : ""
|
||||
var coreName = extruderConfigurations[index].hotendID ? extruderConfigurations[index].hotendID : ""
|
||||
perExtruder.push(` [${coreName}/${matName}]`)
|
||||
}
|
||||
|
||||
var configsStr = "<i>" + perExtruder + "</i>"
|
||||
var warnStr = isValidMaterial ? whenMismatchedCore() : whenUnknownMaterial()
|
||||
return configsStr + "<br/>" + warnStr
|
||||
}
|
||||
width: extruderRow.width
|
||||
|
||||
|
@ -225,7 +276,7 @@ Button
|
|||
|
||||
onClicked:
|
||||
{
|
||||
if(isValidMaterial)
|
||||
if (isValidMaterial && isValidCore)
|
||||
{
|
||||
toggleContent()
|
||||
Cura.MachineManager.applyRemoteConfiguration(configuration)
|
||||
|
|
|
@ -13,7 +13,7 @@ import "."
|
|||
Item
|
||||
{
|
||||
id: base
|
||||
height: enabled ? UM.Theme.getSize("section").height + UM.Theme.getSize("narrow_margin").height : 0
|
||||
height: enabled ? Math.max(UM.Theme.getSize("section").height, label.height) + UM.Theme.getSize("narrow_margin").height : 0
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
|
||||
|
|
|
@ -115,7 +115,7 @@ travel_avoid_other_parts = True
|
|||
travel_avoid_supports = True
|
||||
travel_retract_before_outer_wall = False
|
||||
wall_overhang_angle = 35.0
|
||||
wall_overhang_speed_factor = 60.0
|
||||
wall_overhang_speed_factors = [60]
|
||||
wall_thickness = =line_width*2
|
||||
z_seam_corner = z_seam_corner_inner
|
||||
z_seam_position = backright
|
||||
|
|
|
@ -59,5 +59,5 @@ support_xy_overrides_z = xy_overrides_z
|
|||
support_z_distance = 0.15
|
||||
top_skin_expand_distance = 2.4
|
||||
wall_overhang_angle = 30
|
||||
wall_overhang_speed_factor = 40
|
||||
wall_overhang_speed_factors = [40]
|
||||
|
||||
|
|
|
@ -52,5 +52,5 @@ support_xy_distance = 0.3
|
|||
support_xy_distance_overhang = 0.25
|
||||
support_z_distance = 0.15
|
||||
wall_overhang_angle = 30
|
||||
wall_overhang_speed_factor = 50
|
||||
wall_overhang_speed_factors = [50]
|
||||
|
||||
|
|
|
@ -58,5 +58,5 @@ support_xy_overrides_z = xy_overrides_z
|
|||
support_z_distance = 0.15
|
||||
top_skin_expand_distance = 2.4
|
||||
wall_overhang_angle = 30
|
||||
wall_overhang_speed_factor = 40
|
||||
wall_overhang_speed_factors = [40]
|
||||
|
||||
|
|
|
@ -57,5 +57,5 @@ support_xy_overrides_z = xy_overrides_z
|
|||
support_z_distance = 0.15
|
||||
top_skin_expand_distance = 2.4
|
||||
wall_overhang_angle = 30
|
||||
wall_overhang_speed_factor = 40
|
||||
wall_overhang_speed_factors = [40]
|
||||
|
||||
|
|
|
@ -59,5 +59,5 @@ support_xy_overrides_z = xy_overrides_z
|
|||
support_z_distance = 0.15
|
||||
top_skin_expand_distance = 2.4
|
||||
wall_overhang_angle = 30
|
||||
wall_overhang_speed_factor = 40
|
||||
wall_overhang_speed_factors = [40]
|
||||
|
||||
|
|
|
@ -58,5 +58,5 @@ support_xy_overrides_z = xy_overrides_z
|
|||
support_z_distance = 0.15
|
||||
top_skin_expand_distance = 2.4
|
||||
wall_overhang_angle = 30
|
||||
wall_overhang_speed_factor = 40
|
||||
wall_overhang_speed_factors = [40]
|
||||
|
||||
|
|
|
@ -57,5 +57,5 @@ support_xy_overrides_z = xy_overrides_z
|
|||
support_z_distance = 0.15
|
||||
top_skin_expand_distance = 2.4
|
||||
wall_overhang_angle = 30
|
||||
wall_overhang_speed_factor = 40
|
||||
wall_overhang_speed_factors = [40]
|
||||
|
||||
|
|
|
@ -54,5 +54,5 @@ support_xy_overrides_z = xy_overrides_z
|
|||
support_z_distance = 0.22
|
||||
top_skin_expand_distance = 2.4
|
||||
wall_overhang_angle = 30
|
||||
wall_overhang_speed_factor = 40
|
||||
wall_overhang_speed_factors = [40]
|
||||
|
||||
|
|
|
@ -59,5 +59,5 @@ support_xy_overrides_z = xy_overrides_z
|
|||
support_z_distance = 0.15
|
||||
top_skin_expand_distance = 2.4
|
||||
wall_overhang_angle = 30
|
||||
wall_overhang_speed_factor = 40
|
||||
wall_overhang_speed_factors = [40]
|
||||
|
||||
|
|
|
@ -52,5 +52,5 @@ support_xy_distance = 0.3
|
|||
support_xy_distance_overhang = 0.25
|
||||
support_z_distance = 0.15
|
||||
wall_overhang_angle = 30
|
||||
wall_overhang_speed_factor = 50
|
||||
wall_overhang_speed_factors = [50]
|
||||
|
||||
|
|
|
@ -58,5 +58,5 @@ support_xy_overrides_z = xy_overrides_z
|
|||
support_z_distance = 0.15
|
||||
top_skin_expand_distance = 2.4
|
||||
wall_overhang_angle = 30
|
||||
wall_overhang_speed_factor = 40
|
||||
wall_overhang_speed_factors = [40]
|
||||
|
||||
|
|
|
@ -57,5 +57,5 @@ support_xy_overrides_z = xy_overrides_z
|
|||
support_z_distance = 0.15
|
||||
top_skin_expand_distance = 2.4
|
||||
wall_overhang_angle = 30
|
||||
wall_overhang_speed_factor = 40
|
||||
wall_overhang_speed_factors = [40]
|
||||
|
||||
|
|
|
@ -59,5 +59,5 @@ support_xy_overrides_z = xy_overrides_z
|
|||
support_z_distance = 0.15
|
||||
top_skin_expand_distance = 2.4
|
||||
wall_overhang_angle = 30
|
||||
wall_overhang_speed_factor = 40
|
||||
wall_overhang_speed_factors = [40]
|
||||
|
||||
|
|
|
@ -54,5 +54,5 @@ support_xy_distance = 0.3
|
|||
support_xy_distance_overhang = 0.25
|
||||
support_z_distance = 0.15
|
||||
wall_overhang_angle = 30
|
||||
wall_overhang_speed_factor = 50
|
||||
wall_overhang_speed_factors = [50]
|
||||
|
||||
|
|
|
@ -57,5 +57,5 @@ support_xy_overrides_z = xy_overrides_z
|
|||
support_z_distance = 0.15
|
||||
top_skin_expand_distance = 2.4
|
||||
wall_overhang_angle = 30
|
||||
wall_overhang_speed_factor = 40
|
||||
wall_overhang_speed_factors = [40]
|
||||
|
||||
|
|
|
@ -57,5 +57,5 @@ support_xy_overrides_z = xy_overrides_z
|
|||
support_z_distance = 0.15
|
||||
top_skin_expand_distance = 2.4
|
||||
wall_overhang_angle = 30
|
||||
wall_overhang_speed_factor = 40
|
||||
wall_overhang_speed_factors = [40]
|
||||
|
||||
|
|
|
@ -59,5 +59,5 @@ support_xy_overrides_z = xy_overrides_z
|
|||
support_z_distance = 0.15
|
||||
top_skin_expand_distance = 2.4
|
||||
wall_overhang_angle = 30
|
||||
wall_overhang_speed_factor = 40
|
||||
wall_overhang_speed_factors = [40]
|
||||
|
||||
|
|
|
@ -57,5 +57,5 @@ support_xy_overrides_z = xy_overrides_z
|
|||
support_z_distance = 0.15
|
||||
top_skin_expand_distance = 2.4
|
||||
wall_overhang_angle = 30
|
||||
wall_overhang_speed_factor = 40
|
||||
wall_overhang_speed_factors = [40]
|
||||
|
||||
|
|
|
@ -57,5 +57,5 @@ support_xy_overrides_z = xy_overrides_z
|
|||
support_z_distance = 0.15
|
||||
top_skin_expand_distance = 2.4
|
||||
wall_overhang_angle = 30
|
||||
wall_overhang_speed_factor = 40
|
||||
wall_overhang_speed_factors = [40]
|
||||
|
||||
|
|
|
@ -54,5 +54,5 @@ support_xy_overrides_z = xy_overrides_z
|
|||
support_z_distance = 0.22
|
||||
top_skin_expand_distance = 2.4
|
||||
wall_overhang_angle = 30
|
||||
wall_overhang_speed_factor = 40
|
||||
wall_overhang_speed_factors = [40]
|
||||
|
||||
|
|
|
@ -59,5 +59,5 @@ support_xy_overrides_z = xy_overrides_z
|
|||
support_z_distance = 0.15
|
||||
top_skin_expand_distance = 2.4
|
||||
wall_overhang_angle = 30
|
||||
wall_overhang_speed_factor = 40
|
||||
wall_overhang_speed_factors = [40]
|
||||
|
||||
|
|
|
@ -54,5 +54,5 @@ support_xy_distance = 0.3
|
|||
support_xy_distance_overhang = 0.25
|
||||
support_z_distance = 0.15
|
||||
wall_overhang_angle = 30
|
||||
wall_overhang_speed_factor = 50
|
||||
wall_overhang_speed_factors = [50]
|
||||
|
||||
|
|
|
@ -57,5 +57,5 @@ support_xy_overrides_z = xy_overrides_z
|
|||
support_z_distance = 0.15
|
||||
top_skin_expand_distance = 2.4
|
||||
wall_overhang_angle = 30
|
||||
wall_overhang_speed_factor = 40
|
||||
wall_overhang_speed_factors = [40]
|
||||
|
||||
|
|
|
@ -57,5 +57,5 @@ support_xy_overrides_z = xy_overrides_z
|
|||
support_z_distance = 0.15
|
||||
top_skin_expand_distance = 2.4
|
||||
wall_overhang_angle = 30
|
||||
wall_overhang_speed_factor = 40
|
||||
wall_overhang_speed_factors = [40]
|
||||
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
[general]
|
||||
definition = ultimaker_sketch
|
||||
name = Fast
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
material = ultimaker_metallic_pla_175
|
||||
quality_type = draft
|
||||
setting_version = 24
|
||||
type = quality
|
||||
variant = 0.4mm
|
||||
weight = -2
|
||||
|
||||
[values]
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
[general]
|
||||
definition = ultimaker_sketch_large
|
||||
name = Fast
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
material = ultimaker_metallic_pla_175
|
||||
quality_type = draft
|
||||
setting_version = 24
|
||||
type = quality
|
||||
variant = 0.4mm
|
||||
weight = -2
|
||||
|
||||
[values]
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
[general]
|
||||
definition = ultimaker_sketch_sprint
|
||||
name = Fast
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
material = ultimaker_metallic_pla_175
|
||||
quality_type = draft
|
||||
setting_version = 24
|
||||
type = quality
|
||||
variant = 0.4mm
|
||||
weight = -2
|
||||
|
||||
[values]
|
||||
cool_min_temperature = 230
|
||||
infill_angles = [45,45,45,45,45,135,135,135,135,135]
|
||||
material_final_print_temperature = 230
|
||||
material_initial_print_temperature = 230
|
||||
speed_print = 125
|
||||
speed_roofing = 100
|
||||
speed_support_bottom = 100
|
||||
speed_support_interface = 125
|
||||
speed_topbottom = 100
|
||||
speed_wall = 75
|
||||
speed_wall_x = 100
|
||||
support_material_flow = 92
|
||||
wall_overhang_speed_factor = 23
|
||||
|
|
@ -248,6 +248,7 @@ cool_fan_speed_0
|
|||
cool_fan_full_at_height
|
||||
cool_fan_full_layer
|
||||
cool_min_layer_time
|
||||
cool_min_layer_time_overhang
|
||||
cool_min_speed
|
||||
cool_lift_head
|
||||
cool_during_extruder_switch
|
||||
|
|
|
@ -567,7 +567,7 @@
|
|||
"section_icon_column": [2.5, 2.5],
|
||||
|
||||
"setting": [25.0, 1.8],
|
||||
"setting_control": [11.0, 2.0],
|
||||
"setting_control": [9.0, 2.0],
|
||||
"setting_control_radius": [0.15, 0.15],
|
||||
"setting_control_depth_margin": [1.4, 0.0],
|
||||
"setting_unit_margin": [0.5, 0.5],
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue