mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-25 07:33:57 -06:00
Merge branch 'main' into CURA-9494_nightly
This commit is contained in:
commit
81b2aeaf4e
33 changed files with 331 additions and 132 deletions
5
.github/workflows/linux.yml
vendored
5
.github/workflows/linux.yml
vendored
|
@ -154,6 +154,11 @@ jobs:
|
|||
- name: Create the Packages (Bash)
|
||||
run: conan install $CURA_CONAN_VERSION ${{ inputs.conan_args }} --build=missing --update -if cura_inst -g VirtualPythonEnv -o cura:enterprise=$ENTERPRISE -o cura:staging=$STAGING --json "cura_inst/conan_install_info.json"
|
||||
|
||||
- name: Upload the Package(s)
|
||||
if: always()
|
||||
run: |
|
||||
conan upload "*" -r cura --all -c
|
||||
|
||||
- name: Set Environment variables for Cura (bash)
|
||||
run: |
|
||||
. ./cura_inst/bin/activate_github_actions_env.sh
|
||||
|
|
5
.github/workflows/macos.yml
vendored
5
.github/workflows/macos.yml
vendored
|
@ -154,6 +154,11 @@ jobs:
|
|||
- name: Create the Packages (Bash)
|
||||
run: conan install $CURA_CONAN_VERSION ${{ inputs.conan_args }} --build=missing --update -if cura_inst -g VirtualPythonEnv -o cura:enterprise=$ENTERPRISE -o cura:staging=$STAGING --json "cura_inst/conan_install_info.json"
|
||||
|
||||
- name: Upload the Package(s)
|
||||
if: always()
|
||||
run: |
|
||||
conan upload "*" -r cura --all -c
|
||||
|
||||
- name: Set Environment variables for Cura (bash)
|
||||
run: |
|
||||
. ./cura_inst/bin/activate_github_actions_env.sh
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
conan==1.56.0
|
||||
conan==1.60.2
|
||||
sip
|
||||
|
|
7
.github/workflows/windows.yml
vendored
7
.github/workflows/windows.yml
vendored
|
@ -124,6 +124,11 @@ jobs:
|
|||
- name: Create the Packages (Powershell)
|
||||
run: conan install $Env:CURA_CONAN_VERSION ${{ inputs.conan_args }} --build=missing --update -if cura_inst -g VirtualPythonEnv -o cura:enterprise=$Env:ENTERPRISE -o cura:staging=$Env:STAGING --json "cura_inst/conan_install_info.json"
|
||||
|
||||
- name: Upload the Package(s)
|
||||
if: always()
|
||||
run: |
|
||||
conan upload "*" -r cura --all -c
|
||||
|
||||
- name: Set Environment variables for Cura (Powershell)
|
||||
run: |
|
||||
echo "${Env:WIX}\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
|
||||
|
@ -277,4 +282,4 @@ jobs:
|
|||
success_body: "Installers for ${{ inputs.cura_conan_version }}"
|
||||
failure_title: "Failed to create the Cura distributions"
|
||||
failure_body: "Failed to create at least 1 installer for ${{ inputs.cura_conan_version }}"
|
||||
secrets: inherit
|
||||
secrets: inherit
|
||||
|
|
66
conanfile.py
66
conanfile.py
|
@ -10,7 +10,7 @@ from conan.tools.env import VirtualRunEnv, Environment, VirtualBuildEnv
|
|||
from conan.tools.scm import Version
|
||||
from conan.errors import ConanInvalidConfiguration, ConanException
|
||||
|
||||
required_conan_version = ">=1.54 <=1.56.0 || >=1.58.0 <2.0.0"
|
||||
required_conan_version = ">=1.58.0 <2.0.0"
|
||||
|
||||
|
||||
class CuraConan(ConanFile):
|
||||
|
@ -293,6 +293,7 @@ class CuraConan(ConanFile):
|
|||
self.options["pysavitar"].shared = True
|
||||
self.options["pynest2d"].shared = True
|
||||
self.options["cpython"].shared = True
|
||||
self.options["boost"].header_only = True
|
||||
|
||||
def validate(self):
|
||||
version = self.conf_info.get("user.cura:version", default = self.version, check_type = str)
|
||||
|
@ -300,10 +301,11 @@ class CuraConan(ConanFile):
|
|||
raise ConanInvalidConfiguration("Only versions 5+ are support")
|
||||
|
||||
def requirements(self):
|
||||
self.requires("pyarcus/5.2.2")
|
||||
self.requires("boost/1.82.0")
|
||||
self.requires("pyarcus/(latest)@ultimaker/cura_10951")
|
||||
self.requires("curaengine/(latest)@ultimaker/testing")
|
||||
self.requires("pysavitar/5.2.2")
|
||||
self.requires("pynest2d/5.2.2")
|
||||
self.requires("pysavitar/(latest)@ultimaker/cura_10951")
|
||||
self.requires("pynest2d/(latest)@ultimaker/cura_10951")
|
||||
self.requires("uranium/(latest)@ultimaker/testing")
|
||||
self.requires("cura_binary_data/(latest)@ultimaker/testing")
|
||||
self.requires("cpython/3.10.4")
|
||||
|
@ -338,7 +340,38 @@ class CuraConan(ConanFile):
|
|||
vr.generate()
|
||||
|
||||
self._generate_cura_version(os.path.join(self.source_folder, "cura"))
|
||||
self._generate_about_versions(os.path.join(self.source_folder, "resources","qml", "Dialogs"))
|
||||
|
||||
if not self.in_local_cache:
|
||||
# Copy CuraEngine.exe to bindirs of Virtual Python Environment
|
||||
curaengine = self.dependencies["curaengine"].cpp_info
|
||||
copy(self, "CuraEngine.exe", curaengine.bindirs[0], self.source_folder, keep_path = False)
|
||||
copy(self, "CuraEngine", curaengine.bindirs[0], self.source_folder, keep_path = False)
|
||||
|
||||
# Copy resources of cura_binary_data
|
||||
cura_binary_data = self.dependencies["cura_binary_data"].cpp_info
|
||||
copy(self, "*", cura_binary_data.resdirs[0], str(self._share_dir.joinpath("cura")), keep_path = True)
|
||||
copy(self, "*", cura_binary_data.resdirs[1], str(self._share_dir.joinpath("uranium")), keep_path = True)
|
||||
if self.settings.os == "Windows":
|
||||
copy(self, "*", cura_binary_data.resdirs[2], str(self._share_dir.joinpath("windows")), keep_path = True)
|
||||
|
||||
for dependency in self.dependencies.host.values():
|
||||
for bindir in dependency.cpp_info.bindirs:
|
||||
copy(self, "*.dll", bindir, str(self._site_packages), keep_path = False)
|
||||
for libdir in dependency.cpp_info.libdirs:
|
||||
copy(self, "*.pyd", libdir, str(self._site_packages), keep_path = False)
|
||||
copy(self, "*.pyi", libdir, str(self._site_packages), keep_path = False)
|
||||
copy(self, "*.dylib", libdir, str(self._base_dir.joinpath("lib")), keep_path = False)
|
||||
|
||||
# Copy materials (flat)
|
||||
rmdir(self, os.path.join(self.source_folder, "resources", "materials"))
|
||||
fdm_materials = self.dependencies["fdm_materials"].cpp_info
|
||||
copy(self, "*", fdm_materials.resdirs[0], self.source_folder)
|
||||
|
||||
# Copy internal resources
|
||||
if self.options.internal:
|
||||
cura_private_data = self.dependencies["cura_private_data"].cpp_info
|
||||
copy(self, "*", cura_private_data.resdirs[0], str(self._share_dir.joinpath("cura")))
|
||||
|
||||
if self.options.devtools:
|
||||
entitlements_file = "'{}'".format(os.path.join(self.source_folder, "packaging", "MacOS", "cura.entitlements"))
|
||||
|
@ -357,8 +390,6 @@ class CuraConan(ConanFile):
|
|||
pot = self.python_requires["translationextractor"].module.ExtractTranslations(self, cpp_info.bindirs[0])
|
||||
pot.generate()
|
||||
|
||||
self._generate_about_versions(os.path.join(self.source_folder, "resources","qml", "Dialogs"))
|
||||
|
||||
def build(self):
|
||||
if self.options.devtools:
|
||||
if self.settings.os != "Windows" or self.conf.get("tools.microsoft.bash:path", check_type = str):
|
||||
|
@ -370,29 +401,6 @@ class CuraConan(ConanFile):
|
|||
cpp_info = self.dependencies["gettext"].cpp_info
|
||||
self.run(f"{cpp_info.bindirs[0]}/msgfmt {po_file} -o {mo_file} -f", env="conanbuild", ignore_errors=True)
|
||||
|
||||
def imports(self):
|
||||
self.copy("CuraEngine.exe", root_package = "curaengine", src = "@bindirs", dst = "", keep_path = False)
|
||||
self.copy("CuraEngine", root_package = "curaengine", src = "@bindirs", dst = "", keep_path = False)
|
||||
|
||||
rmdir(self, os.path.join(self.source_folder, "resources", "materials"))
|
||||
self.copy("*.fdm_material", root_package = "fdm_materials", src = "@resdirs", dst = "resources/materials", keep_path = False)
|
||||
self.copy("*.sig", root_package = "fdm_materials", src = "@resdirs", dst = "resources/materials", keep_path = False)
|
||||
|
||||
if self.options.internal:
|
||||
self.copy("*", root_package = "cura_private_data", src = self.deps_cpp_info["cura_private_data"].resdirs[0],
|
||||
dst = self._share_dir.joinpath("cura", "resources"), keep_path = True)
|
||||
|
||||
# Copy resources of cura_binary_data
|
||||
self.copy("*", root_package = "cura_binary_data", src = self.deps_cpp_info["cura_binary_data"].resdirs[0],
|
||||
dst = self._share_dir.joinpath("cura", "resources"), keep_path = True)
|
||||
self.copy("*", root_package = "cura_binary_data", src = self.deps_cpp_info["cura_binary_data"].resdirs[1],
|
||||
dst =self._share_dir.joinpath("uranium", "resources"), keep_path = True)
|
||||
|
||||
self.copy("*.dll", src = "@bindirs", dst = self._site_packages)
|
||||
self.copy("*.pyd", src = "@libdirs", dst = self._site_packages)
|
||||
self.copy("*.pyi", src = "@libdirs", dst = self._site_packages)
|
||||
self.copy("*.dylib", src = "@libdirs", dst = self._script_dir)
|
||||
|
||||
def deploy(self):
|
||||
# Copy CuraEngine.exe to bindirs of Virtual Python Environment
|
||||
curaengine = self.dependencies["curaengine"].cpp_info
|
||||
|
|
|
@ -410,7 +410,9 @@ class CuraApplication(QtApplication):
|
|||
|
||||
SettingFunction.registerOperator("extruderValue", self._cura_formula_functions.getValueInExtruder)
|
||||
SettingFunction.registerOperator("extruderValues", self._cura_formula_functions.getValuesInAllExtruders)
|
||||
SettingFunction.registerOperator("anyExtruderNrWithOrDefault", self._cura_formula_functions.getAnyExtruderPositionWithOrDefault)
|
||||
SettingFunction.registerOperator("anyExtruderWithMaterial", self._cura_formula_functions.getExtruderPositionWithMaterial)
|
||||
SettingFunction.registerOperator("anyExtruderNrWithOrDefault",
|
||||
self._cura_formula_functions.getAnyExtruderPositionWithOrDefault)
|
||||
SettingFunction.registerOperator("resolveOrValue", self._cura_formula_functions.getResolveOrValue)
|
||||
SettingFunction.registerOperator("defaultExtruderPosition", self._cura_formula_functions.getDefaultExtruderPosition)
|
||||
SettingFunction.registerOperator("valueFromContainer", self._cura_formula_functions.getValueFromContainerAtIndex)
|
||||
|
|
|
@ -111,11 +111,7 @@ class ConvexHullDecorator(SceneNodeDecorator):
|
|||
|
||||
# Parent can be None if node is just loaded.
|
||||
if self._isSingularOneAtATimeNode():
|
||||
hull = self.getConvexHullHeadFull()
|
||||
if hull is None:
|
||||
return None
|
||||
hull = self._add2DAdhesionMargin(hull)
|
||||
return hull
|
||||
return self.getConvexHullHeadFull()
|
||||
|
||||
return self._compute2DConvexHull()
|
||||
|
||||
|
@ -323,6 +319,7 @@ class ConvexHullDecorator(SceneNodeDecorator):
|
|||
|
||||
def _compute2DConvexHeadFull(self) -> Optional[Polygon]:
|
||||
convex_hull = self._compute2DConvexHull()
|
||||
convex_hull = self._add2DAdhesionMargin(convex_hull)
|
||||
if convex_hull:
|
||||
return convex_hull.getMinkowskiHull(self._getHeadAndFans())
|
||||
return None
|
||||
|
|
|
@ -99,12 +99,21 @@ class CuraFormulaFunctions:
|
|||
|
||||
# Get the first extruder that adheres to a specific (boolean) property, like 'material_is_support_material'.
|
||||
def getAnyExtruderPositionWithOrDefault(self, filter_key: str,
|
||||
context: Optional["PropertyEvaluationContext"] = None) -> str:
|
||||
context: Optional["PropertyEvaluationContext"] = None) -> str:
|
||||
for extruder in self._getActiveExtruders(context):
|
||||
value = extruder.getRawProperty(filter_key, "value", context=context)
|
||||
if value is None or not value:
|
||||
continue
|
||||
return str(extruder.position)
|
||||
|
||||
# Get the first extruder with material that adheres to a specific (boolean) property, like 'material_is_support_material'.
|
||||
def getExtruderPositionWithMaterial(self, filter_key: str,
|
||||
context: Optional["PropertyEvaluationContext"] = None) -> str:
|
||||
for extruder in self._getActiveExtruders(context):
|
||||
material_container = extruder.material
|
||||
value = material_container.getProperty(filter_key, "value", context)
|
||||
if value is not None:
|
||||
return str(extruder.position)
|
||||
return self.getDefaultExtruderPosition()
|
||||
|
||||
# Get the resolve value or value for a given key.
|
||||
|
|
|
@ -54,7 +54,10 @@ There are also a few extra things that can be used in these expressions:
|
|||
* The function `extruderValue(extruder, key)` will evaluate a particular setting for a particular extruder.
|
||||
* The function `resolveOrValue(key)` will perform the full setting evaluation as described in this document for the current context (so if this setting is being evaluated for the second extruder it would perform it as if coming from the second extruder).
|
||||
* The function `defaultExtruderPosition()` will get the first extruder that is not disabled. For instance, if a printer has three extruders but the first is disabled, this would return `1` to indicate the second extruder (0-indexed).
|
||||
* The function `anyExtruderNrWithOrDefault(key)` will filter the list of extruders on the key, and then give the first index for which it is true, or if none of them are, the default one as specified by the 'default extruder position' function above.
|
||||
* The function `anyExtruderNrWithOrDefault(key)` will filter the list of extruders on the key, and then give the first
|
||||
index for which it is true, or if none of them are, the default one as specified by the 'default extruder position'
|
||||
function above.
|
||||
* The function `anyExtruderWithMaterial(key)` will filter the list of extruders on the key of material quality, and then give the first index for which it is true, or if none of them are, the default one as specified by the 'default extruder position' function above.
|
||||
* The function `valueFromContainer(key, index)` will get a setting value from the global stack, but skip the first few containers in that stack. It will skip until it reaches a particular index in the container stack.
|
||||
* The function `extruderValueFromContainer(key, index)` will get a setting value from the current extruder stack, but skip the first few containers in that stack. It will skip until it reaches a particular index in the container stack.
|
||||
|
||||
|
|
|
@ -153,6 +153,6 @@ if __name__ == "__main__":
|
|||
app_name = f"{args.app_name}.app"
|
||||
|
||||
if args.build_pkg:
|
||||
create_pkg_installer(args.filename + ".pkg", args.dist_path, cura_version, app_name)
|
||||
create_pkg_installer(f"{args.filename}.pkg", args.dist_path, cura_version, app_name)
|
||||
if args.build_dmg:
|
||||
create_dmg(args.filename + ".dmg", args.dist_path, args.source_path, app_name)
|
||||
create_dmg(f"{args.filename}.dmg", args.dist_path, args.source_path, app_name)
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
# Copyright (c) 2018 Ultimaker B.V.
|
||||
# Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
import os
|
||||
import os.path
|
||||
|
||||
from UM.Application import Application
|
||||
|
@ -143,38 +144,44 @@ class RemovableDriveOutputDevice(OutputDevice):
|
|||
|
||||
def _onFinished(self, job):
|
||||
if self._stream:
|
||||
# Explicitly closing the stream flushes the write-buffer
|
||||
error = job.getError()
|
||||
try:
|
||||
# Explicitly closing the stream flushes the write-buffer
|
||||
self._stream.close()
|
||||
self._stream = None
|
||||
except:
|
||||
Logger.logException("w", "An exception occurred while trying to write to removable drive.")
|
||||
message = Message(catalog.i18nc("@info:status", "Could not save to removable drive {0}: {1}").format(self.getName(),str(job.getError())),
|
||||
title = catalog.i18nc("@info:title", "Error"),
|
||||
message_type = Message.MessageType.ERROR)
|
||||
except Exception as e:
|
||||
if not error:
|
||||
# Only log new error if there was no previous one
|
||||
error = e
|
||||
|
||||
self._stream = None
|
||||
self._writing = False
|
||||
self.writeFinished.emit(self)
|
||||
|
||||
if not error:
|
||||
message = Message(
|
||||
catalog.i18nc("@info:status", "Saved to Removable Drive {0} as {1}").format(self.getName(),
|
||||
os.path.basename(
|
||||
job.getFileName())),
|
||||
title=catalog.i18nc("@info:title", "File Saved"),
|
||||
message_type=Message.MessageType.POSITIVE)
|
||||
message.addAction("eject", catalog.i18nc("@action:button", "Eject"), "eject",
|
||||
catalog.i18nc("@action", "Eject removable device {0}").format(self.getName()))
|
||||
message.actionTriggered.connect(self._onActionTriggered)
|
||||
message.show()
|
||||
self.writeSuccess.emit(self)
|
||||
else:
|
||||
try:
|
||||
os.remove(job.getFileName())
|
||||
except Exception as e:
|
||||
Logger.logException("e", "Exception when trying to remove incomplete exported file %s",
|
||||
str(job.getFileName()))
|
||||
message = Message(catalog.i18nc("@info:status",
|
||||
"Could not save to removable drive {0}: {1}").format(self.getName(),
|
||||
str(job.getError())),
|
||||
title=catalog.i18nc("@info:title", "Error"),
|
||||
message_type=Message.MessageType.ERROR)
|
||||
message.show()
|
||||
self.writeError.emit(self)
|
||||
return
|
||||
|
||||
self._writing = False
|
||||
self.writeFinished.emit(self)
|
||||
if job.getResult():
|
||||
message = Message(catalog.i18nc("@info:status", "Saved to Removable Drive {0} as {1}").format(self.getName(), os.path.basename(job.getFileName())),
|
||||
title = catalog.i18nc("@info:title", "File Saved"),
|
||||
message_type = Message.MessageType.POSITIVE)
|
||||
message.addAction("eject", catalog.i18nc("@action:button", "Eject"), "eject", catalog.i18nc("@action", "Eject removable device {0}").format(self.getName()))
|
||||
message.actionTriggered.connect(self._onActionTriggered)
|
||||
message.show()
|
||||
self.writeSuccess.emit(self)
|
||||
else:
|
||||
message = Message(catalog.i18nc("@info:status",
|
||||
"Could not save to removable drive {0}: {1}").format(self.getName(),
|
||||
str(job.getError())),
|
||||
title = catalog.i18nc("@info:title", "Error"),
|
||||
message_type = Message.MessageType.ERROR)
|
||||
message.show()
|
||||
self.writeError.emit(self)
|
||||
job.getStream().close()
|
||||
|
||||
def _onActionTriggered(self, message, action):
|
||||
if action == "eject":
|
||||
|
|
|
@ -37,24 +37,13 @@ class NewPrinterDetectedMessage(Message):
|
|||
|
||||
def finalize(self, new_devices_added, new_output_devices):
|
||||
self.setProgress(None)
|
||||
num_devices_added = len(new_devices_added)
|
||||
max_disp_devices = 3
|
||||
|
||||
if num_devices_added > max_disp_devices:
|
||||
num_hidden = num_devices_added - max_disp_devices
|
||||
device_name_list = ["<li>{} ({})</li>".format(device.name, device.printerTypeName) for device in
|
||||
new_output_devices[0: max_disp_devices]]
|
||||
device_name_list.append(
|
||||
"<li>" + self.i18n_catalog.i18ncp("info:{0} gets replaced by a number of printers", "... and {0} other",
|
||||
"... and {0} others", num_hidden) + "</li>")
|
||||
device_names = "".join(device_name_list)
|
||||
else:
|
||||
device_names = "".join(
|
||||
["<li>{} ({})</li>".format(device.name, device.printerTypeName) for device in new_devices_added])
|
||||
|
||||
if new_devices_added:
|
||||
message_text = self.i18n_catalog.i18nc("info:status",
|
||||
"Printers added from Digital Factory:") + f"<ul>{device_names}</ul>"
|
||||
device_names = ""
|
||||
for device in new_devices_added:
|
||||
device_names = device_names + "<li>{} ({})</li>".format(device.name, device.printerTypeName)
|
||||
message_title = self.i18n_catalog.i18nc("info:status", "Printers added from Digital Factory:")
|
||||
message_text = f"{message_title}<ul>{device_names}</ul>"
|
||||
self.setText(message_text)
|
||||
else:
|
||||
self.hide()
|
||||
|
|
|
@ -1664,16 +1664,28 @@
|
|||
"small_skin_width":
|
||||
{
|
||||
"label": "Small Top/Bottom Width",
|
||||
"description": "Small top/bottom regions are filled with walls instead of the default top/bottom pattern. This helps to avoids jerky motions.",
|
||||
"description": "Small top/bottom regions are filled with walls instead of the default top/bottom pattern. This helps to avoids jerky motions. Off for the topmost (air-exposed) layer by default (see 'Small Top/Bottom On Surface').",
|
||||
"value": "skin_line_width * 2",
|
||||
"default_value": 1,
|
||||
"minimum_value": "0",
|
||||
"maximum_value_warning": "skin_line_width * 3",
|
||||
"type": "float",
|
||||
"enabled": "(top_layers > 0 or bottom_layers > 0) and top_bottom_pattern != 'concentric'",
|
||||
"limit_to_extruder": "top_bottom_extruder_nr",
|
||||
"settable_per_mesh": true,
|
||||
"unit": "mm"
|
||||
},
|
||||
"small_skin_on_surface":
|
||||
{
|
||||
"label": "Small Top/Bottom On Surface",
|
||||
"description": "Enable small (up to 'Small Top/Bottom Width') regions on the topmost skinned layer (exposed to air) to be filled with walls instead of the default pattern.",
|
||||
"value": "False",
|
||||
"default_value": false,
|
||||
"type": "bool",
|
||||
"enabled": "small_skin_width > 0 and top_layers > 0",
|
||||
"limit_to_extruder": "top_bottom_extruder_nr",
|
||||
"settable_per_mesh": true
|
||||
},
|
||||
"skin_no_small_gaps_heuristic":
|
||||
{
|
||||
"label": "No Skin in Z Gaps",
|
||||
|
@ -4488,7 +4500,7 @@
|
|||
"type": "extruder",
|
||||
"default_value": "0",
|
||||
"enabled": "(support_enable or support_meshes_present) and extruders_enabled_count > 1",
|
||||
"value": "int(defaultExtruderPosition())",
|
||||
"value": "int(anyExtruderWithMaterial('material_is_support_material'))",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": false,
|
||||
"children":
|
||||
|
|
|
@ -5,13 +5,14 @@
|
|||
"metadata":
|
||||
{
|
||||
"visible": true,
|
||||
"author": "willuhmjs",
|
||||
"platform": "kingroon_kp3s.stl",
|
||||
"quality_definition": "kingroon_base",
|
||||
"author": "willuhmjs"
|
||||
"quality_definition": "kingroon_base"
|
||||
},
|
||||
"overrides":
|
||||
{
|
||||
"machine_acceleration": { "value": 1000 },
|
||||
"machine_depth": { "default_value": 200 },
|
||||
"machine_height": { "default_value": 200 },
|
||||
"machine_max_acceleration_e": { "value": 1000 },
|
||||
"machine_max_acceleration_x": { "value": 1000 },
|
||||
|
@ -23,7 +24,7 @@
|
|||
"machine_max_feedrate_z": { "value": 4 },
|
||||
"machine_max_jerk_xy": { "value": 15 },
|
||||
"machine_max_jerk_z": { "value": 0.4 },
|
||||
"machine_name": { "default_value": "Kingroon KP3S" },
|
||||
"machine_name": { "default_value": "Kingroon KP3S Pro" },
|
||||
"machine_steps_per_mm_e": { "value": 764 },
|
||||
"machine_steps_per_mm_x": { "value": 160 },
|
||||
"machine_steps_per_mm_y": { "value": 160 },
|
||||
|
@ -34,4 +35,4 @@
|
|||
"retraction_speed": { "value": 40 },
|
||||
"speed_z_hop": { "value": 4 }
|
||||
}
|
||||
}
|
||||
}
|
60
resources/definitions/matterhackers_pulsexe_e444m.def.json
Normal file
60
resources/definitions/matterhackers_pulsexe_e444m.def.json
Normal file
|
@ -0,0 +1,60 @@
|
|||
{
|
||||
"version": 2,
|
||||
"name": "Pulse XE E-444M",
|
||||
"inherits": "fdmprinter",
|
||||
"metadata":
|
||||
{
|
||||
"visible": true,
|
||||
"author": "Zwitch Guitars",
|
||||
"manufacturer": "MatterHackers",
|
||||
"file_formats": "text/x-gcode",
|
||||
"first_start_actions": [ "MachineSettingsAction" ],
|
||||
"has_machine_quality": false,
|
||||
"has_materials": true,
|
||||
"has_variants": false,
|
||||
"machine_extruder_trains": { "0": "matterhackers_extruder" },
|
||||
"preferred_material": "generic_pla",
|
||||
"preferred_quality_type": "normal"
|
||||
},
|
||||
"overrides":
|
||||
{
|
||||
"adhesion_type": { "value": "skirt" },
|
||||
"cool_fan_full_at_height": { "value": "layer_height_0 + 2 * layer_height" },
|
||||
"cool_min_layer_time": { "value": 10 },
|
||||
"gantry_height": { "value": 23 },
|
||||
"machine_acceleration": { "value": 1300 },
|
||||
"machine_depth": { "default_value": 220 },
|
||||
"machine_end_gcode": { "default_value": "M104 S0 ; turn off extruder\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X0 Y{machine_depth}; home X axis and push Y forward\nG28 Z0\nM84 ; disable motors" },
|
||||
"machine_gcode_flavor": { "default_value": "Marlin" },
|
||||
"machine_head_with_fans_polygon":
|
||||
{
|
||||
"default_value": [
|
||||
[-28, 45],
|
||||
[-28, -18],
|
||||
[40, 45],
|
||||
[40, -18]
|
||||
]
|
||||
},
|
||||
"machine_heated_bed": { "default_value": true },
|
||||
"machine_height": { "default_value": 215 },
|
||||
"machine_max_feedrate_e": { "value": 75 },
|
||||
"machine_max_feedrate_x": { "value": 300 },
|
||||
"machine_max_feedrate_y": { "value": 300 },
|
||||
"machine_max_feedrate_z": { "value": 30 },
|
||||
"machine_name": { "default_value": "Pulse XE E-444M" },
|
||||
"machine_start_gcode": { "default_value": "G21 ; set units to millimeters\nG90 ; use absolute positioning\nM82 ; absolute extrusion mode\nG28 ; home axes\nM104 S{material_print_temperature_layer_0} ; set extruder temp\nM140 S{material_bed_temperature_layer_0} ; set bed temp\nM190 S{material_bed_temperature_layer_0} ; wait for bed temp\nM109 S{material_print_temperature_layer_0} ; wait for extruder temp\nG29 ; mesh bed leveling\n\nG92 E0\nG1 X5 Y5 Z0.8 F1800\nG1 X100 Z0.3 E25 F900\nG92 E0\nG1 E-2 F2400" },
|
||||
"machine_steps_per_mm_e": { "value": 415 },
|
||||
"machine_steps_per_mm_x": { "value": 80 },
|
||||
"machine_steps_per_mm_y": { "value": 80 },
|
||||
"machine_steps_per_mm_z": { "value": 400 },
|
||||
"machine_width": { "default_value": 250 },
|
||||
"material_diameter": { "value": 1.75 },
|
||||
"optimize_wall_printing_order": { "value": true },
|
||||
"speed_layer_0": { "value": 20.0 },
|
||||
"speed_print": { "value": 50 },
|
||||
"top_bottom_thickness": { "value": "layer_height_0 + layer_height * 3" },
|
||||
"travel_retract_before_outer_wall": { "value": true },
|
||||
"wall_thickness": { "value": "line_width * 2" },
|
||||
"z_seam_type": { "value": "back" }
|
||||
}
|
||||
}
|
|
@ -57,7 +57,7 @@
|
|||
[25, 49],
|
||||
[25, -49],
|
||||
[-25, -49],
|
||||
[25, 49]
|
||||
[-25, 49]
|
||||
]
|
||||
},
|
||||
"machine_heated_bed": { "default_value": true },
|
||||
|
|
|
@ -54,7 +54,7 @@
|
|||
[25, 49],
|
||||
[25, -49],
|
||||
[-25, -49],
|
||||
[25, 49]
|
||||
[-25, 49]
|
||||
]
|
||||
},
|
||||
"machine_heated_bed": { "default_value": true },
|
||||
|
|
|
@ -51,7 +51,7 @@
|
|||
[25, 49],
|
||||
[25, -49],
|
||||
[-25, -49],
|
||||
[25, 49]
|
||||
[-25, 49]
|
||||
]
|
||||
},
|
||||
"machine_heated_bed": { "default_value": true },
|
||||
|
|
16
resources/extruders/matterhackers_extruder.def.json
Normal file
16
resources/extruders/matterhackers_extruder.def.json
Normal file
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"version": 2,
|
||||
"name": "Extruder 1",
|
||||
"inherits": "fdmextruder",
|
||||
"metadata":
|
||||
{
|
||||
"machine": "matterhackers_pulsexe_e444m",
|
||||
"position": "0"
|
||||
},
|
||||
"overrides":
|
||||
{
|
||||
"extruder_nr": { "default_value": 0 },
|
||||
"machine_nozzle_size": { "default_value": 0.4 },
|
||||
"material_diameter": { "default_value": 1.75 }
|
||||
}
|
||||
}
|
|
@ -60,6 +60,7 @@ Item
|
|||
property alias showProfileFolder: showProfileFolderAction
|
||||
property alias documentation: documentationAction
|
||||
property alias showTroubleshooting: showTroubleShootingAction
|
||||
property alias openSponsershipPage: openSponsershipPageAction
|
||||
property alias reportBug: reportBugAction
|
||||
property alias whatsNew: whatsNewAction
|
||||
property alias about: aboutAction
|
||||
|
@ -90,6 +91,13 @@ Item
|
|||
text: catalog.i18nc("@action:inmenu", "Show Online Troubleshooting")
|
||||
}
|
||||
|
||||
Action
|
||||
{
|
||||
id: openSponsershipPageAction
|
||||
onTriggered: Qt.openUrlExternally("https://ultimaker.com/software/ultimaker-cura/sponsor/")
|
||||
text: catalog.i18nc("@action:inmenu", "Sponsor Cura")
|
||||
}
|
||||
|
||||
Action
|
||||
{
|
||||
id: toggleFullScreenAction
|
||||
|
|
|
@ -57,10 +57,10 @@ Popup
|
|||
permissionsRequired: []
|
||||
},
|
||||
{
|
||||
displayName: "UltiMaker Academy", //Not translated, since it's a brand name.
|
||||
thumbnail: UM.Theme.getIcon("Knowledge"),
|
||||
description: catalog.i18nc("@tooltip:button", "Become a 3D printing expert with UltiMaker e-learning."),
|
||||
link: "https://academy.ultimaker.com/?utm_source=cura&utm_medium=software&utm_campaign=switcher-academy",
|
||||
displayName: catalog.i18nc("@label:button", "Sponsor Cura"),
|
||||
thumbnail: UM.Theme.getIcon("Heart"),
|
||||
description: catalog.i18nc("@tooltip:button", "Show your support for Cura with a donation."),
|
||||
link: "https://ultimaker.com/software/ultimaker-cura/sponsor/",
|
||||
permissionsRequired: []
|
||||
},
|
||||
{
|
||||
|
|
|
@ -17,6 +17,7 @@ Cura.Menu
|
|||
Cura.MenuItem { action: Cura.Actions.showTroubleshooting}
|
||||
Cura.MenuItem { action: Cura.Actions.documentation }
|
||||
Cura.MenuItem { action: Cura.Actions.reportBug }
|
||||
Cura.MenuItem { action: Cura.Actions.openSponsershipPage }
|
||||
Cura.MenuSeparator { }
|
||||
Cura.MenuItem { action: Cura.Actions.whatsNew }
|
||||
Cura.MenuItem { action: Cura.Actions.about }
|
||||
|
|
|
@ -4,41 +4,11 @@
|
|||
import QtQuick 2.10
|
||||
import QtQuick.Controls 2.3
|
||||
|
||||
import UM 1.5 as UM
|
||||
import UM 1.7 as UM
|
||||
import Cura 1.1 as Cura
|
||||
|
||||
|
||||
//
|
||||
// Cura-style TextArea with scrolls
|
||||
//
|
||||
Flickable
|
||||
// Wrapper to UM.ScrollableTextArea which was originally placed here
|
||||
UM.ScrollableTextArea
|
||||
{
|
||||
id: scrollableTextAreaBase
|
||||
property bool do_borders: true
|
||||
property var back_color: UM.Theme.getColor("main_background")
|
||||
property alias textArea: flickableTextArea
|
||||
|
||||
ScrollBar.vertical: UM.ScrollBar {}
|
||||
|
||||
TextArea.flickable: TextArea
|
||||
{
|
||||
id: flickableTextArea
|
||||
|
||||
background: Rectangle //Providing the background color and border.
|
||||
{
|
||||
anchors.fill: parent
|
||||
anchors.margins: -border.width
|
||||
|
||||
color: scrollableTextAreaBase.back_color
|
||||
border.color: UM.Theme.getColor("thick_lining")
|
||||
border.width: scrollableTextAreaBase.do_borders ? UM.Theme.getSize("default_lining").width : 0
|
||||
}
|
||||
|
||||
font: UM.Theme.getFont("default")
|
||||
color: UM.Theme.getColor("text")
|
||||
textFormat: TextEdit.PlainText
|
||||
renderType: Text.NativeRendering
|
||||
wrapMode: Text.Wrap
|
||||
selectByMouse: true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -34,6 +34,8 @@ bottom_thickness
|
|||
bottom_layers
|
||||
ironing_enabled
|
||||
skin_monotonic
|
||||
small_skin_width
|
||||
small_skin_on_surface
|
||||
|
||||
[infill]
|
||||
infill_extruder_nr
|
||||
|
|
|
@ -60,6 +60,7 @@ skin_monotonic
|
|||
connect_skin_polygons
|
||||
skin_angles
|
||||
small_skin_width
|
||||
small_skin_on_surface
|
||||
skin_no_small_gaps_heuristic
|
||||
skin_outline_count
|
||||
ironing_enabled
|
||||
|
|
7
resources/themes/cura-light/icons/default/Heart.svg
Normal file
7
resources/themes/cura-light/icons/default/Heart.svg
Normal file
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" version="1.1">
|
||||
<path d="M 10.152344 1.246094 C 9.238281 1.449219 8.480469 1.976562 7.972656 2.765625 C 7.777344 3.070312 7.5 3.726562 7.5 3.890625 C 7.5 4.046875 7.621094 4.242188 7.757812 4.304688 C 8.0625 4.445312 8.300781 4.316406 8.4375 3.953125 C 8.851562 2.851562 9.621094 2.210938 10.664062 2.121094 C 11.789062 2.027344 12.867188 2.835938 13.359375 4.140625 C 13.527344 4.578125 13.667969 4.734375 13.898438 4.734375 C 14.132812 4.734375 14.277344 4.574219 14.457031 4.140625 C 14.679688 3.578125 14.886719 3.257812 15.28125 2.859375 C 15.792969 2.34375 16.308594 2.109375 16.929688 2.109375 C 17.496094 2.109375 18.144531 2.347656 18.566406 2.714844 C 18.867188 2.976562 19.195312 3.472656 19.347656 3.890625 C 19.507812 4.355469 19.546875 5.15625 19.433594 5.648438 C 19.160156 6.816406 18.191406 7.933594 15.355469 10.367188 L 13.960938 11.570312 L 12.707031 10.507812 C 10.703125 8.8125 9.902344 8.066406 9.160156 7.203125 C 8.996094 7.011719 8.949219 6.984375 8.785156 6.984375 C 8.511719 6.988281 8.296875 7.199219 8.296875 7.472656 C 8.296875 7.820312 9.484375 9.015625 11.578125 10.78125 C 12.078125 11.203125 12.773438 11.789062 13.117188 12.078125 C 13.738281 12.609375 13.875 12.691406 14.078125 12.636719 C 14.199219 12.609375 16.867188 10.332031 17.804688 9.460938 C 19.425781 7.949219 20.179688 6.839844 20.390625 5.644531 C 20.476562 5.171875 20.429688 4.253906 20.296875 3.796875 C 20.023438 2.847656 19.316406 1.953125 18.515625 1.554688 C 18.035156 1.316406 17.683594 1.222656 17.152344 1.183594 C 15.960938 1.105469 14.871094 1.679688 14.121094 2.777344 C 13.929688 3.054688 13.894531 3.089844 13.851562 3.019531 C 13.828125 2.976562 13.683594 2.773438 13.535156 2.574219 C 13.078125 1.960938 12.515625 1.546875 11.835938 1.332031 C 11.351562 1.175781 10.628906 1.140625 10.152344 1.246094 Z M 10.152344 1.246094 "/>
|
||||
<path d="M 7.613281 5.457031 C 7.441406 5.628906 7.410156 5.785156 7.519531 5.996094 C 7.738281 6.417969 8.390625 6.230469 8.390625 5.738281 C 8.390625 5.558594 8.113281 5.296875 7.921875 5.296875 C 7.816406 5.296875 7.730469 5.339844 7.613281 5.457031 Z M 7.613281 5.457031 "/>
|
||||
<path d="M 0.160156 11.738281 L 0 11.898438 L 0 16.238281 C 0 20.957031 -0.0078125 20.773438 0.257812 20.898438 C 0.414062 20.964844 3.410156 20.976562 3.65625 20.90625 C 4.011719 20.808594 4.332031 20.539062 4.574219 20.128906 C 4.621094 20.042969 4.636719 20.042969 5.019531 20.128906 C 5.671875 20.269531 5.941406 20.394531 7.457031 21.304688 C 8.257812 21.789062 9.085938 22.253906 9.296875 22.339844 C 10.617188 22.910156 12.121094 22.976562 13.5 22.535156 C 13.691406 22.472656 15.277344 21.792969 17.015625 21.023438 C 18.753906 20.257812 20.683594 19.410156 21.304688 19.140625 C 23.105469 18.351562 23.25 18.277344 23.523438 17.980469 C 23.855469 17.617188 23.972656 17.296875 23.976562 16.757812 C 23.976562 16.382812 23.957031 16.304688 23.828125 16.027344 C 23.746094 15.851562 23.605469 15.632812 23.511719 15.527344 C 23.15625 15.136719 22.453125 14.898438 21.929688 14.996094 C 21.789062 15.019531 20.660156 15.390625 19.410156 15.816406 C 18.167969 16.242188 17.148438 16.59375 17.140625 16.59375 C 17.136719 16.59375 17.132812 16.421875 17.128906 16.203125 C 17.128906 15.871094 17.109375 15.773438 16.984375 15.515625 C 16.714844 14.945312 16.246094 14.566406 15.664062 14.441406 C 15.511719 14.410156 14.792969 14.390625 13.765625 14.390625 L 12.117188 14.390625 L 10.945312 13.730469 C 10.304688 13.363281 9.613281 12.988281 9.421875 12.890625 C 8.757812 12.554688 8.734375 12.546875 6.554688 12.527344 L 4.601562 12.511719 L 4.542969 12.371094 C 4.457031 12.160156 4.105469 11.820312 3.851562 11.703125 C 3.640625 11.605469 3.5625 11.601562 1.976562 11.585938 L 0.324219 11.574219 Z M 3.589844 12.675781 L 3.75 12.835938 L 3.75 16.238281 C 3.75 18.773438 3.734375 19.667969 3.695312 19.757812 C 3.585938 19.996094 3.484375 20.015625 2.15625 20.015625 L 0.9375 20.015625 L 0.9375 12.515625 L 3.429688 12.515625 Z M 8.671875 13.578125 C 8.816406 13.632812 9.542969 14.019531 10.289062 14.4375 C 11.035156 14.859375 11.738281 15.230469 11.855469 15.265625 C 12.007812 15.316406 12.472656 15.328125 13.757812 15.328125 L 15.449219 15.328125 L 15.683594 15.445312 C 15.816406 15.511719 15.960938 15.617188 16.011719 15.691406 C 16.351562 16.144531 16.234375 16.777344 15.765625 17.066406 L 15.585938 17.179688 L 12.953125 17.203125 L 10.3125 17.226562 L 10.183594 17.351562 C 9.992188 17.546875 10.003906 17.820312 10.210938 18.003906 L 10.359375 18.140625 L 15.585938 18.140625 L 15.914062 18.019531 C 16.097656 17.953125 17.222656 17.566406 18.421875 17.152344 C 19.621094 16.734375 20.90625 16.292969 21.28125 16.164062 C 22.035156 15.902344 22.320312 15.871094 22.613281 16.007812 C 23.003906 16.195312 23.171875 16.746094 22.960938 17.152344 C 22.898438 17.269531 22.800781 17.398438 22.734375 17.445312 C 22.667969 17.492188 20.527344 18.453125 17.976562 19.574219 C 14.753906 20.996094 13.199219 21.65625 12.890625 21.742188 C 12.507812 21.84375 12.347656 21.859375 11.695312 21.863281 C 10.902344 21.867188 10.652344 21.828125 10.03125 21.621094 C 9.546875 21.460938 9.410156 21.382812 7.878906 20.472656 C 7.144531 20.027344 6.445312 19.621094 6.328125 19.566406 C 6.027344 19.421875 5.429688 19.238281 5.027344 19.171875 L 4.6875 19.117188 L 4.6875 13.449219 L 6.554688 13.460938 C 8.300781 13.480469 8.429688 13.484375 8.671875 13.578125 Z M 8.671875 13.578125 "/>
|
||||
<path d="M 2.035156 13.613281 C 1.859375 13.785156 1.832031 13.941406 1.941406 14.152344 C 2.160156 14.574219 2.8125 14.386719 2.8125 13.894531 C 2.8125 13.714844 2.535156 13.453125 2.34375 13.453125 C 2.234375 13.453125 2.152344 13.496094 2.035156 13.613281 Z M 2.035156 13.613281 "/>
|
||||
</svg>
|
After Width: | Height: | Size: 5.7 KiB |
13
resources/variants/kingroon/kingroon_kp3s_pro_0.2.inst.cfg
Normal file
13
resources/variants/kingroon/kingroon_kp3s_pro_0.2.inst.cfg
Normal file
|
@ -0,0 +1,13 @@
|
|||
[general]
|
||||
definition = kingroon_kp3s_pro
|
||||
name = 0.2mm Nozzle
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
hardware_type = nozzle
|
||||
setting_version = 22
|
||||
type = variant
|
||||
|
||||
[values]
|
||||
machine_nozzle_size = 0.2
|
||||
|
13
resources/variants/kingroon/kingroon_kp3s_pro_0.3.inst.cfg
Normal file
13
resources/variants/kingroon/kingroon_kp3s_pro_0.3.inst.cfg
Normal file
|
@ -0,0 +1,13 @@
|
|||
[general]
|
||||
definition = kingroon_kp3s_pro
|
||||
name = 0.3mm Nozzle
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
hardware_type = nozzle
|
||||
setting_version = 22
|
||||
type = variant
|
||||
|
||||
[values]
|
||||
machine_nozzle_size = 0.3
|
||||
|
13
resources/variants/kingroon/kingroon_kp3s_pro_0.4.inst.cfg
Normal file
13
resources/variants/kingroon/kingroon_kp3s_pro_0.4.inst.cfg
Normal file
|
@ -0,0 +1,13 @@
|
|||
[general]
|
||||
definition = kingroon_kp3s_pro
|
||||
name = 0.4mm Nozzle
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
hardware_type = nozzle
|
||||
setting_version = 22
|
||||
type = variant
|
||||
|
||||
[values]
|
||||
machine_nozzle_size = 0.4
|
||||
|
13
resources/variants/kingroon/kingroon_kp3s_pro_0.5.inst.cfg
Normal file
13
resources/variants/kingroon/kingroon_kp3s_pro_0.5.inst.cfg
Normal file
|
@ -0,0 +1,13 @@
|
|||
[general]
|
||||
definition = kingroon_kp3s_pro
|
||||
name = 0.5mm Nozzle
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
hardware_type = nozzle
|
||||
setting_version = 22
|
||||
type = variant
|
||||
|
||||
[values]
|
||||
machine_nozzle_size = 0.5
|
||||
|
13
resources/variants/kingroon/kingroon_kp3s_pro_0.6.inst.cfg
Normal file
13
resources/variants/kingroon/kingroon_kp3s_pro_0.6.inst.cfg
Normal file
|
@ -0,0 +1,13 @@
|
|||
[general]
|
||||
definition = kingroon_kp3s_pro
|
||||
name = 0.6mm Nozzle
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
hardware_type = nozzle
|
||||
setting_version = 22
|
||||
type = variant
|
||||
|
||||
[values]
|
||||
machine_nozzle_size = 0.6
|
||||
|
13
resources/variants/kingroon/kingroon_kp3s_pro_0.8.inst.cfg
Normal file
13
resources/variants/kingroon/kingroon_kp3s_pro_0.8.inst.cfg
Normal file
|
@ -0,0 +1,13 @@
|
|||
[general]
|
||||
definition = kingroon_kp3s_pro
|
||||
name = 0.8mm Nozzle
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
hardware_type = nozzle
|
||||
setting_version = 22
|
||||
type = variant
|
||||
|
||||
[values]
|
||||
machine_nozzle_size = 0.8
|
||||
|
13
resources/variants/kingroon/kingroon_kp3s_pro_1.0.inst.cfg
Normal file
13
resources/variants/kingroon/kingroon_kp3s_pro_1.0.inst.cfg
Normal file
|
@ -0,0 +1,13 @@
|
|||
[general]
|
||||
definition = kingroon_kp3s_pro
|
||||
name = 1.0mm Nozzle
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
hardware_type = nozzle
|
||||
setting_version = 22
|
||||
type = variant
|
||||
|
||||
[values]
|
||||
machine_nozzle_size = 1.0
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue