Merge branch 'main' into CURA-12352_different-minimum-layer-time-for-layers-that-contain-overhangs

This commit is contained in:
HellAholic 2025-02-03 10:05:10 +01:00 committed by GitHub
commit 4be40f770c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
25 changed files with 361 additions and 125 deletions

View File

@ -75,7 +75,7 @@ app = BUNDLE(
coll, coll,
name='{{ display_name }}.app', name='{{ display_name }}.app',
icon={{ icon }}, icon={{ icon }},
bundle_identifier={{ osx_bundle_identifier }} + "_" + '{{ display_name }}'.replace(" ", "_") + "_" {{ short_version }}, bundle_identifier={{ osx_bundle_identifier }} + "_" + '{{ display_name }}'.replace(" ", "_"),
version={{ version }}, version={{ version }},
info_plist={ info_plist={
'CFBundleDisplayName': '{{ display_name }}', 'CFBundleDisplayName': '{{ display_name }}',

View File

@ -5,7 +5,7 @@ requirements:
- "curaengine/5.10.0-alpha.0@ultimaker/testing" - "curaengine/5.10.0-alpha.0@ultimaker/testing"
- "cura_binary_data/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" - "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" - "pysavitar/5.4.0-alpha.0@ultimaker/stable"
- "pynest2d/5.4.0-alpha.0@ultimaker/stable" - "pynest2d/5.4.0-alpha.0@ultimaker/stable"
requirements_internal: requirements_internal:

View File

@ -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. # Cura is released under the terms of the LGPLv3 or higher.
from PyQt6.QtCore import pyqtProperty, QObject, pyqtSignal from PyQt6.QtCore import pyqtProperty, QObject, pyqtSignal
from typing import List from typing import List
from UM.Settings.ContainerRegistry import ContainerRegistry
from UM.Settings.DefinitionContainer import DefinitionContainer
MYPY = False MYPY = False
if MYPY: if MYPY:
from cura.PrinterOutput.Models.ExtruderConfigurationModel import ExtruderConfigurationModel from cura.PrinterOutput.Models.ExtruderConfigurationModel import ExtruderConfigurationModel
@ -68,6 +71,15 @@ class PrinterConfigurationModel(QObject):
return True return True
return False 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): def __str__(self):
message_chunks = [] message_chunks = []
message_chunks.append("Printer type: " + self._printer_type) message_chunks.append("Printer type: " + self._printer_type)

View File

@ -1678,7 +1678,7 @@ class MachineManager(QObject):
intent_category = self.activeIntentCategory, intent_category = self.activeIntentCategory,
intent_name = IntentCategoryModel.translation(self.activeIntentCategory, "name", self.activeIntentCategory.title()), 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, 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 is_experimental = self.isActiveQualityExperimental and self.isActiveQualitySupported
) )

View File

@ -154,7 +154,7 @@ if __name__ == "__main__":
parser.add_argument("--app_name", required = True, type = str, help = "Filename of the .app that will be contained within the dmg/pkg") parser.add_argument("--app_name", required = True, type = str, help = "Filename of the .app that will be contained within the dmg/pkg")
args = parser.parse_args() args = parser.parse_args()
cura_version = args.cura_conan_version.split("/")[-1] cura_version = args.cura_conan_version.replace("+","-") # + is not allowed for bundle identifier
app_name = f"{args.app_name}.app" app_name = f"{args.app_name}.app"

View File

@ -214,7 +214,7 @@ Item
settingStoreIndex: propertyStoreIndex settingStoreIndex: propertyStoreIndex
labelText: catalog.i18nc("@label", "Y min") labelText: catalog.i18nc("@label", "Y min ( '-' towards back)")
labelFont: base.labelFont labelFont: base.labelFont
labelWidth: base.labelWidth labelWidth: base.labelWidth
controlWidth: base.controlWidth controlWidth: base.controlWidth
@ -254,7 +254,7 @@ Item
settingKey: "machine_head_with_fans_polygon" settingKey: "machine_head_with_fans_polygon"
settingStoreIndex: propertyStoreIndex settingStoreIndex: propertyStoreIndex
labelText: catalog.i18nc("@label", "Y max") labelText: catalog.i18nc("@label", "Y max ( '+' towards front)")
labelFont: base.labelFont labelFont: base.labelFont
labelWidth: base.labelWidth labelWidth: base.labelWidth
controlWidth: base.controlWidth controlWidth: base.controlWidth

View File

@ -46,6 +46,13 @@ class MakerbotWriter(MeshWriter):
suffixes=["makerbot"] suffixes=["makerbot"]
) )
) )
MimeTypeDatabase.addMimeType(
MimeType(
name="application/x-makerbot-replicator_plus",
comment="Makerbot Toolpath Package",
suffixes=["makerbot"]
)
)
_PNG_FORMAT = [ _PNG_FORMAT = [
{"prefix": "isometric_thumbnail", "width": 120, "height": 120}, {"prefix": "isometric_thumbnail", "width": 120, "height": 120},
@ -114,6 +121,8 @@ class MakerbotWriter(MeshWriter):
filename, filedata = "print.gcode", gcode_text_io.getvalue() filename, filedata = "print.gcode", gcode_text_io.getvalue()
case "application/x-makerbot": case "application/x-makerbot":
filename, filedata = "print.jsontoolpath", du.gcode_2_miracle_jtp(gcode_text_io.getvalue()) 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 _: case _:
raise Exception("Unsupported Mime type") raise Exception("Unsupported Mime type")

View File

@ -25,6 +25,12 @@ def getMetaData():
"description": catalog.i18nc("@item:inlistbox", "Makerbot Sketch Printfile"), "description": catalog.i18nc("@item:inlistbox", "Makerbot Sketch Printfile"),
"mime_type": "application/x-makerbot-sketch", "mime_type": "application/x-makerbot-sketch",
"mode": MakerbotWriter.MakerbotWriter.OutputMode.BinaryMode, "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,
} }
] ]
}, },

View File

@ -97,6 +97,8 @@ class USBPrinterOutputDevice(PrinterOutputDevice):
CuraApplication.getInstance().getOnExitCallbackManager().addCallback(self._checkActivePrintingUponAppExit) 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 # 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 # to exit. If so, it will show a confirmation before
def _checkActivePrintingUponAppExit(self) -> None: def _checkActivePrintingUponAppExit(self) -> None:
@ -144,6 +146,8 @@ class USBPrinterOutputDevice(PrinterOutputDevice):
CuraApplication.getInstance().getController().setActiveStage("MonitorStage") CuraApplication.getInstance().getController().setActiveStage("MonitorStage")
CuraApplication.getInstance().getPreferences().setValue("usb_printing/enabled", True)
#Find the g-code to print. #Find the g-code to print.
gcode_textio = StringIO() gcode_textio = StringIO()
gcode_writer = cast(MeshWriter, PluginRegistry.getInstance().getPluginObject("GCodeWriter")) gcode_writer = cast(MeshWriter, PluginRegistry.getInstance().getPluginObject("GCodeWriter"))

View File

@ -384,6 +384,7 @@
"RepRap (RepRap)": "RepRap", "RepRap (RepRap)": "RepRap",
"UltiGCode": "Ultimaker 2", "UltiGCode": "Ultimaker 2",
"Griffin": "Griffin", "Griffin": "Griffin",
"Cheetah": "Griffin+Cheetah",
"Makerbot": "Makerbot", "Makerbot": "Makerbot",
"BFB": "Bits from Bytes", "BFB": "Bits from Bytes",
"MACH3": "Mach3", "MACH3": "Mach3",
@ -461,7 +462,7 @@
"machine_head_with_fans_polygon": "machine_head_with_fans_polygon":
{ {
"label": "Machine Head & Fan Polygon", "label": "Machine Head & Fan Polygon",
"description": "The shape of the print head. These are coordinates relative to the position of the print head, which is usually the position of its first extruder. The dimensions left and in front of the print head must be negative coordinates.", "description": "The dimensions of the print head used to determine 'Safe Model Distance' when printing 'One at a Time'. These numbers relate to the centerline of the first extruder nozzle. Left of the nozzle is 'X Min' and must be negative. Rear of the nozzle is 'Y Min' and must be negative. X Max (right) and Y Max (front) are positive numbers. Gantry height is the dimension from the build plate to the X gantry beam.",
"type": "polygon", "type": "polygon",
"default_value": [ "default_value": [
[-20, 10], [-20, 10],
@ -3231,6 +3232,19 @@
"minimum_value": 0.01, "minimum_value": 0.01,
"settable_per_mesh": false, "settable_per_mesh": false,
"settable_per_extruder": true "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
} }
} }
}, },
@ -7525,6 +7539,88 @@
"enabled": "retraction_enable and extruders_enabled_count > 1", "enabled": "retraction_enable and extruders_enabled_count > 1",
"settable_per_mesh": false, "settable_per_mesh": false,
"settable_per_extruder": true "settable_per_extruder": true
},
"interlocking_enable":
{
"label": "Generate Interlocking Structure",
"description": "At the locations where models touch, generate an interlocking beam structure. This improves the adhesion between models, especially models printed in different materials.",
"type": "bool",
"enabled": "extruders_enabled_count > 1",
"default_value": false,
"resolve": "(extruders_enabled_count > 1) and any(extruderValues('interlocking_enable'))",
"settable_per_mesh": false,
"settable_per_extruder": false
},
"interlocking_beam_width":
{
"label": "Interlocking Beam Width",
"description": "The width of the interlocking structure beams.",
"type": "float",
"unit": "mm",
"enabled": "extruders_enabled_count > 1 and resolveOrValue('interlocking_enable')",
"default_value": 0.8,
"value": "2 * wall_line_width_0",
"minimum_value": "min_odd_wall_line_width",
"maximum_value": "min(0.5 * machine_width, 0.5 * machine_depth)",
"maximum_value_warning": "max(extruderValues('wall_line_width_0')) * 6",
"settable_per_mesh": true,
"settable_per_extruder": true
},
"interlocking_orientation":
{
"label": "Interlocking Structure Orientation",
"description": "The height of the beams of the interlocking structure, measured in number of layers. Less layers is stronger, but more prone to defects.",
"unit": "\u00b0",
"type": "float",
"enabled": "extruders_enabled_count > 1 and resolveOrValue('interlocking_enable')",
"default_value": 22.5,
"minimum_value": "0",
"maximum_value": "360",
"resolve": "min(extruderValues('interlocking_orientation'))",
"settable_per_mesh": false,
"settable_per_extruder": false
},
"interlocking_beam_layer_count":
{
"label": "Interlocking Beam Layer Count",
"description": "The height of the beams of the interlocking structure, measured in number of layers. Less layers is stronger, but more prone to defects.",
"type": "int",
"enabled": "extruders_enabled_count > 1 and resolveOrValue('interlocking_enable')",
"default_value": 2,
"minimum_value": "1",
"maximum_value_warning": "50",
"resolve": "max(extruderValues('interlocking_beam_layer_count'))",
"settable_per_mesh": false,
"settable_per_extruder": false
},
"interlocking_depth":
{
"label": "Interlocking Depth",
"description": "The distance from the boundary between models to generate interlocking structure, measured in cells. Too few cells will result in poor adhesion.",
"type": "int",
"enabled": "extruders_enabled_count > 1 and resolveOrValue('interlocking_enable')",
"default_value": 2,
"minimum_value": "1",
"maximum_value": "10",
"maximum_value_warning": "5",
"resolve": "max(extruderValues('interlocking_depth'))",
"settable_per_mesh": false,
"settable_per_extruder": false
},
"interlocking_boundary_avoidance":
{
"label": "Interlocking Boundary Avoidance",
"description": "The distance from the outside of a model where interlocking structures will not be generated, measured in cells.",
"type": "int",
"enabled": "extruders_enabled_count > 1 and resolveOrValue('interlocking_enable')",
"default_value": 2,
"minimum_value": "0",
"minimum_value_warning": "resolveOrValue('interlocking_depth')",
"maximum_value": "10",
"maximum_value_warning": "5",
"resolve": "max(extruderValues('interlocking_boundary_avoidance'))",
"settable_per_mesh": false,
"settable_per_extruder": false
} }
} }
}, },
@ -7947,88 +8043,6 @@
"settable_per_mesh": true, "settable_per_mesh": true,
"settable_per_extruder": false "settable_per_extruder": false
}, },
"interlocking_enable":
{
"label": "Generate Interlocking Structure",
"description": "At the locations where models touch, generate an interlocking beam structure. This improves the adhesion between models, especially models printed in different materials.",
"type": "bool",
"enabled": "extruders_enabled_count > 1",
"default_value": false,
"resolve": "(extruders_enabled_count > 1) and any(extruderValues('interlocking_enable'))",
"settable_per_mesh": false,
"settable_per_extruder": false
},
"interlocking_beam_width":
{
"label": "Interlocking Beam Width",
"description": "The width of the interlocking structure beams.",
"type": "float",
"unit": "mm",
"enabled": "extruders_enabled_count > 1 and resolveOrValue('interlocking_enable')",
"default_value": 0.8,
"value": "2 * wall_line_width_0",
"minimum_value": "min_odd_wall_line_width",
"maximum_value": "min(0.5 * machine_width, 0.5 * machine_depth)",
"maximum_value_warning": "max(extruderValues('wall_line_width_0')) * 6",
"settable_per_mesh": true,
"settable_per_extruder": true
},
"interlocking_orientation":
{
"label": "Interlocking Structure Orientation",
"description": "The height of the beams of the interlocking structure, measured in number of layers. Less layers is stronger, but more prone to defects.",
"unit": "\u00b0",
"type": "float",
"enabled": "extruders_enabled_count > 1 and resolveOrValue('interlocking_enable')",
"default_value": 22.5,
"minimum_value": "0",
"maximum_value": "360",
"resolve": "min(extruderValues('interlocking_orientation'))",
"settable_per_mesh": false,
"settable_per_extruder": false
},
"interlocking_beam_layer_count":
{
"label": "Interlocking Beam Layer Count",
"description": "The height of the beams of the interlocking structure, measured in number of layers. Less layers is stronger, but more prone to defects.",
"type": "int",
"enabled": "extruders_enabled_count > 1 and resolveOrValue('interlocking_enable')",
"default_value": 2,
"minimum_value": "1",
"maximum_value_warning": "50",
"resolve": "max(extruderValues('interlocking_beam_layer_count'))",
"settable_per_mesh": false,
"settable_per_extruder": false
},
"interlocking_depth":
{
"label": "Interlocking Depth",
"description": "The distance from the boundary between models to generate interlocking structure, measured in cells. Too few cells will result in poor adhesion.",
"type": "int",
"enabled": "extruders_enabled_count > 1 and resolveOrValue('interlocking_enable')",
"default_value": 2,
"minimum_value": "1",
"maximum_value": "10",
"maximum_value_warning": "5",
"resolve": "max(extruderValues('interlocking_depth'))",
"settable_per_mesh": false,
"settable_per_extruder": false
},
"interlocking_boundary_avoidance":
{
"label": "Interlocking Boundary Avoidance",
"description": "The distance from the outside of a model where interlocking structures will not be generated, measured in cells.",
"type": "int",
"enabled": "extruders_enabled_count > 1 and resolveOrValue('interlocking_enable')",
"default_value": 2,
"minimum_value": "0",
"minimum_value_warning": "resolveOrValue('interlocking_depth')",
"maximum_value": "10",
"maximum_value_warning": "5",
"resolve": "max(extruderValues('interlocking_boundary_avoidance'))",
"settable_per_mesh": false,
"settable_per_extruder": false
},
"support_skip_some_zags": "support_skip_some_zags":
{ {
"label": "Break Up Support In Chunks", "label": "Break Up Support In Chunks",

View File

@ -10,6 +10,6 @@
"overrides": "overrides":
{ {
"retraction_amount": { "default_value": 5 }, "retraction_amount": { "default_value": 5 },
"retraction_speed": { "value": "machine_max_feedrate_e" } "retraction_speed": { "value": "resolveOrValue('machine_max_feedrate_e')" }
} }
} }

View File

@ -52,15 +52,13 @@
"ultimaker_rapidrinse", "ultimaker_rapidrinse",
"ultimaker_sr30", "ultimaker_sr30",
"ultimaker_petg", "ultimaker_petg",
"ultimaker_metallic_pla",
"basf_", "basf_",
"jabil_", "jabil_",
"polymaker_", "polymaker_",
"ultimaker_rapidrinse", "ultimaker_rapidrinse",
"ultimaker_sr30", "ultimaker_sr30",
"ultimaker_petg", "ultimaker_petg",
"ultimaker_pva", "ultimaker_pva"
"ultimaker_metallic_pla"
], ],
"has_machine_quality": true, "has_machine_quality": true,
"has_materials": true, "has_materials": true,

View File

@ -53,8 +53,7 @@
"ultimaker_pva", "ultimaker_pva",
"ultimaker_rapidrinse", "ultimaker_rapidrinse",
"ultimaker_sr30", "ultimaker_sr30",
"ultimaker_petg", "ultimaker_petg"
"ultimaker_metallic_pla"
], ],
"has_machine_quality": true, "has_machine_quality": true,
"has_materials": true, "has_materials": true,

View File

@ -0,0 +1,42 @@
[general]
definition = ultimaker_sketch_sprint
name = Visual
version = 4
[metadata]
intent_category = visual
is_experimental = True
material = ultimaker_pla_175
quality_type = draft
setting_version = 24
type = intent
variant = 0.4mm
[values]
acceleration_roofing = 1500
acceleration_wall_0_roofing = 1500
acceleration_wall_x_roofing = 1500
cool_min_temperature = 220.0
hole_xy_offset = 0.2
hole_xy_offset_max_diameter = 3
inset_direction = inside_out
line_width = 0.4
material_final_print_temperature = =material_print_temperature
material_initial_print_temperature = =material_print_temperature
material_print_temperature = 220
min_bead_width = 0.34
min_wall_line_width = 0.34
roofing_line_width = 0.35
roofing_monotonic = False
roofing_pattern = lines
skin_monotonic = False
skin_outline_count = 0
skin_overlap = 25
small_feature_max_length = 25
small_feature_speed_factor = 40
small_hole_max_size = 4.5
small_skin_width = 4
speed_roofing = 100
wall_line_width_x = 0.4
z_seam_type = back

View File

@ -0,0 +1,42 @@
[general]
definition = ultimaker_sketch_sprint
name = Visual
version = 4
[metadata]
intent_category = visual
is_experimental = True
material = ultimaker_tough_pla_175
quality_type = draft
setting_version = 24
type = intent
variant = 0.4mm
[values]
acceleration_roofing = 1500
acceleration_wall_0_roofing = 1500
acceleration_wall_x_roofing = 1500
cool_min_temperature = 220.0
hole_xy_offset = 0.2
hole_xy_offset_max_diameter = 3
inset_direction = inside_out
line_width = 0.4
material_final_print_temperature = =material_print_temperature
material_initial_print_temperature = =material_print_temperature
material_print_temperature = 220
min_bead_width = 0.34
min_wall_line_width = 0.34
roofing_line_width = 0.35
roofing_monotonic = False
roofing_pattern = lines
skin_monotonic = False
skin_outline_count = 0
skin_overlap = 25
small_feature_max_length = 25
small_feature_speed_factor = 40
small_hole_max_size = 4.5
small_skin_width = 4
speed_roofing = 100
wall_line_width_x = 0.4
z_seam_type = back

View File

@ -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. // Cura is released under the terms of the LGPLv3 or higher.
import QtQuick 2.7 import QtQuick 2.7
@ -12,7 +12,7 @@ Button
id: configurationItem id: configurationItem
property var configuration: null property var configuration: null
hoverEnabled: isValidMaterial hoverEnabled: isValidMaterial && isValidCore
property bool isValidMaterial: property bool isValidMaterial:
{ {
@ -25,7 +25,6 @@ Button
for (var index in extruderConfigurations) for (var index in extruderConfigurations)
{ {
var name = extruderConfigurations[index].material ? extruderConfigurations[index].material.name : "" var name = extruderConfigurations[index].material ? extruderConfigurations[index].material.name : ""
if (name == "" || name == "Unknown") if (name == "" || name == "Unknown")
{ {
return false return false
@ -34,6 +33,25 @@ Button
return true 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 background: Rectangle
{ {
color: parent.hovered ? UM.Theme.getColor("action_button_hovered") : UM.Theme.getColor("action_button") color: parent.hovered ? UM.Theme.getColor("action_button_hovered") : UM.Theme.getColor("action_button")
@ -60,7 +78,7 @@ Button
right: parent.right right: parent.right
rightMargin: UM.Theme.getSize("wide_margin").width 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 spacing: UM.Theme.getSize("default_margin").width
Repeater Repeater
@ -72,21 +90,20 @@ Button
{ {
width: Math.round(parent.width / (configuration !== null ? configuration.extruderConfigurations.length : 1)) width: Math.round(parent.width / (configuration !== null ? configuration.extruderConfigurations.length : 1))
printCoreConfiguration: modelData printCoreConfiguration: modelData
visible: configurationItem.isValidMaterial visible: configurationItem.isValidMaterial && configurationItem.isValidCore
} }
} }
// Unknown material // Unknown material or core ('variant')
Item Item
{ {
id: unknownMaterial id: unknownMaterial
height: unknownMaterialMessage.height + UM.Theme.getSize("thin_margin").width / 2 height: unknownMaterialMessage.height
width: parent.width width: parent.width
anchors.top: parent.top anchors.top: parent.top
anchors.topMargin: UM.Theme.getSize("thin_margin").width / 2
visible: !configurationItem.isValidMaterial visible: ! (configurationItem.isValidMaterial && configurationItem.isValidCore)
UM.ColorImage UM.ColorImage
{ {
@ -102,13 +119,9 @@ Button
UM.Label UM.Label
{ {
id: unknownMaterialMessage id: unknownMaterialMessage
text:
{
if (configuration === null)
{
return ""
}
function whenUnknownMaterial()
{
var extruderConfigurations = configuration.extruderConfigurations var extruderConfigurations = configuration.extruderConfigurations
var unknownMaterials = [] var unknownMaterials = []
for (var index in extruderConfigurations) for (var index in extruderConfigurations)
@ -135,9 +148,47 @@ Button
unknownMaterials = "<b>" + unknownMaterials + "</b>" 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 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 width: extruderRow.width
@ -225,7 +276,7 @@ Button
onClicked: onClicked:
{ {
if(isValidMaterial) if (isValidMaterial && isValidCore)
{ {
toggleContent() toggleContent()
Cura.MachineManager.applyRemoteConfiguration(configuration) Cura.MachineManager.applyRemoteConfiguration(configuration)

View File

@ -669,12 +669,12 @@ UM.PreferencesPage
{ {
width: childrenRect.width width: childrenRect.width
height: childrenRect.height height: childrenRect.height
text: catalog.i18nc("@info:tooltip", "Should the Y axis of the translate toolhandle be flipped?") text: catalog.i18nc("@info:tooltip", "Should the Y axis of the translate toolhandle be flipped? This will only affect model's Y coordinate, all other settings such as machine Printhead settings are unaffected and still behave as before.")
UM.CheckBox UM.CheckBox
{ {
id: flipToolhandleYCheckbox id: flipToolhandleYCheckbox
text: catalog.i18nc("@option:check", "Flip toolhandle Y axis") text: catalog.i18nc("@option:check", "Flip model's toolhandle Y axis (restart required)")
checked: boolCheck(UM.Preferences.getValue("tool/flip_y_axis_tool_handle")) checked: boolCheck(UM.Preferences.getValue("tool/flip_y_axis_tool_handle"))
onCheckedChanged: UM.Preferences.setValue("tool/flip_y_axis_tool_handle", checked) onCheckedChanged: UM.Preferences.setValue("tool/flip_y_axis_tool_handle", checked)
} }

View File

@ -13,7 +13,7 @@ import "."
Item Item
{ {
id: base 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.left: parent.left
anchors.right: parent.right anchors.right: parent.right

View File

@ -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]

View File

@ -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]

View File

@ -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

View File

@ -133,6 +133,7 @@ prime_tower_mode
prime_tower_position_x prime_tower_position_x
prime_tower_position_y prime_tower_position_y
prime_tower_brim_enable prime_tower_brim_enable
interlocking_enable
[meshfix] [meshfix]
@ -144,7 +145,6 @@ magic_spiralize
smooth_spiralized_contours smooth_spiralized_contours
[experimental] [experimental]
interlocking_enable
conical_overhang_enabled conical_overhang_enabled
support_conical_enabled support_conical_enabled
adaptive_layer_height_enabled adaptive_layer_height_enabled

View File

@ -56,6 +56,7 @@ adhesion_extruder_nr
prime_tower_enable prime_tower_enable
prime_tower_position_x prime_tower_position_x
prime_tower_position_y prime_tower_position_y
interlocking_enable
[meshfix] [meshfix]

View File

@ -379,6 +379,12 @@ prime_tower_min_shell_thickness
ooze_shield_enabled ooze_shield_enabled
ooze_shield_angle ooze_shield_angle
ooze_shield_dist ooze_shield_dist
interlocking_enable
interlocking_beam_width
interlocking_orientation
interlocking_beam_layer_count
interlocking_dept
interlocking_boundary_avoidance
[meshfix] [meshfix]
meshfix_union_all meshfix_union_all
@ -429,12 +435,6 @@ roofing_monotonic
roofing_angles roofing_angles
infill_enable_travel_optimization infill_enable_travel_optimization
material_flow_temp_graph material_flow_temp_graph
interlocking_enable
interlocking_beam_width
interlocking_orientation
interlocking_beam_layer_count
interlocking_dept
interlocking_boundary_avoidance
support_skip_some_zags support_skip_some_zags
support_skip_zag_per_mm support_skip_zag_per_mm
support_zag_skip_count support_zag_skip_count

View File

@ -567,7 +567,7 @@
"section_icon_column": [2.5, 2.5], "section_icon_column": [2.5, 2.5],
"setting": [25.0, 1.8], "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_radius": [0.15, 0.15],
"setting_control_depth_margin": [1.4, 0.0], "setting_control_depth_margin": [1.4, 0.0],
"setting_unit_margin": [0.5, 0.5], "setting_unit_margin": [0.5, 0.5],