mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-08-15 05:15:54 +08:00
Merge branch 'main' into CURA-12335_expose-bottom-skin-settings
This commit is contained in:
commit
654150526e
@ -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:
|
||||||
|
@ -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)
|
||||||
|
@ -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")
|
||||||
|
|
||||||
|
@ -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,
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -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')" }
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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,
|
||||||
|
@ -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,
|
||||||
|
@ -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)
|
||||||
|
@ -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
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user