Merge branch 'CURA-10475_engineplugin' into CURA-10446_modify_gcode_path

This commit is contained in:
c.lamboo 2023-08-28 10:43:37 +02:00
commit ffe6447244
26 changed files with 192 additions and 104 deletions

View File

@ -144,7 +144,9 @@ jobs:
run: echo -n "$GPG_PRIVATE_KEY" | base64 --decode | gpg --import run: echo -n "$GPG_PRIVATE_KEY" | base64 --decode | gpg --import
- name: Get Conan configuration - name: Get Conan configuration
run: conan config install https://github.com/Ultimaker/conan-config.git run: |
conan config install https://github.com/Ultimaker/conan-config.git
conan config install https://github.com/Ultimaker/conan-config.git -a "-b runner/${{ runner.os }}/${{ runner.arch }}"
- name: Use Conan download cache (Bash) - name: Use Conan download cache (Bash)
run: conan config set storage.download_cache="$HOME/.conan/conan_download_cache" run: conan config set storage.download_cache="$HOME/.conan/conan_download_cache"

View File

@ -144,15 +144,13 @@ jobs:
p12-password: ${{ secrets.MACOS_CERT_PASSPHRASE }} p12-password: ${{ secrets.MACOS_CERT_PASSPHRASE }}
- name: Get Conan configuration - name: Get Conan configuration
run: conan config install https://github.com/Ultimaker/conan-config.git run: |
conan config install https://github.com/Ultimaker/conan-config.git
conan config install https://github.com/Ultimaker/conan-config.git -a "-b runner/${{ runner.os }}/${{ runner.arch }}"
- name: Use Conan download cache (Bash) - name: Use Conan download cache (Bash)
run: conan config set storage.download_cache="$HOME/.conan/conan_download_cache" run: conan config set storage.download_cache="$HOME/.conan/conan_download_cache"
- name: Set architecture conan profile
if: ${{ inputs.architecture == 'X64' }}
run: conan profile update settings.arch=x86_64 default
- name: Create the Packages (Bash) - 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" 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"

View File

@ -114,7 +114,9 @@ jobs:
run: conan profile new default --detect --force run: conan profile new default --detect --force
- name: Get Conan configuration - name: Get Conan configuration
run: conan config install https://github.com/Ultimaker/conan-config.git run: |
conan config install https://github.com/Ultimaker/conan-config.git
conan config install https://github.com/Ultimaker/conan-config.git -a "-b runner/${{ runner.os }}/${{ runner.arch }}"
- name: Use Conan download cache (Powershell) - name: Use Conan download cache (Powershell)
run: conan config set storage.download_cache="C:\Users\runneradmin\.conan\conan_download_cache" run: conan config set storage.download_cache="C:\Users\runneradmin\.conan\conan_download_cache"

View File

@ -111,11 +111,7 @@ class ConvexHullDecorator(SceneNodeDecorator):
# Parent can be None if node is just loaded. # Parent can be None if node is just loaded.
if self._isSingularOneAtATimeNode(): if self._isSingularOneAtATimeNode():
hull = self.getConvexHullHeadFull() return self.getConvexHullHeadFull()
if hull is None:
return None
hull = self._add2DAdhesionMargin(hull)
return hull
return self._compute2DConvexHull() return self._compute2DConvexHull()
@ -323,6 +319,7 @@ class ConvexHullDecorator(SceneNodeDecorator):
def _compute2DConvexHeadFull(self) -> Optional[Polygon]: def _compute2DConvexHeadFull(self) -> Optional[Polygon]:
convex_hull = self._compute2DConvexHull() convex_hull = self._compute2DConvexHull()
convex_hull = self._add2DAdhesionMargin(convex_hull)
if convex_hull: if convex_hull:
return convex_hull.getMinkowskiHull(self._getHeadAndFans()) return convex_hull.getMinkowskiHull(self._getHeadAndFans())
return None return None

View File

@ -153,6 +153,6 @@ if __name__ == "__main__":
app_name = f"{args.app_name}.app" app_name = f"{args.app_name}.app"
if args.build_pkg: 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: 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)

View File

@ -1,6 +1,7 @@
# Copyright (c) 2018 Ultimaker B.V. # Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher. # Cura is released under the terms of the LGPLv3 or higher.
import os
import os.path import os.path
from UM.Application import Application from UM.Application import Application
@ -143,38 +144,44 @@ class RemovableDriveOutputDevice(OutputDevice):
def _onFinished(self, job): def _onFinished(self, job):
if self._stream: if self._stream:
# Explicitly closing the stream flushes the write-buffer error = job.getError()
try: try:
# Explicitly closing the stream flushes the write-buffer
self._stream.close() self._stream.close()
self._stream = None except Exception as e:
except: if not error:
Logger.logException("w", "An exception occurred while trying to write to removable drive.") # Only log new error if there was no previous one
message = Message(catalog.i18nc("@info:status", "Could not save to removable drive {0}: {1}").format(self.getName(),str(job.getError())), error = e
title = catalog.i18nc("@info:title", "Error"),
message_type = Message.MessageType.ERROR) 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() message.show()
self.writeError.emit(self) 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): def _onActionTriggered(self, message, action):
if action == "eject": if action == "eject":

View File

@ -37,24 +37,13 @@ class NewPrinterDetectedMessage(Message):
def finalize(self, new_devices_added, new_output_devices): def finalize(self, new_devices_added, new_output_devices):
self.setProgress(None) 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: if new_devices_added:
message_text = self.i18n_catalog.i18nc("info:status", device_names = ""
"Printers added from Digital Factory:") + f"<ul>{device_names}</ul>" 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) self.setText(message_text)
else: else:
self.hide() self.hide()

View File

@ -1664,16 +1664,28 @@
"small_skin_width": "small_skin_width":
{ {
"label": "Small Top/Bottom 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", "value": "skin_line_width * 2",
"default_value": 1, "default_value": 1,
"minimum_value": "0", "minimum_value": "0",
"maximum_value_warning": "skin_line_width * 3",
"type": "float", "type": "float",
"enabled": "(top_layers > 0 or bottom_layers > 0) and top_bottom_pattern != 'concentric'", "enabled": "(top_layers > 0 or bottom_layers > 0) and top_bottom_pattern != 'concentric'",
"limit_to_extruder": "top_bottom_extruder_nr", "limit_to_extruder": "top_bottom_extruder_nr",
"settable_per_mesh": true, "settable_per_mesh": true,
"unit": "mm" "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": "skin_no_small_gaps_heuristic":
{ {
"label": "No Skin in Z Gaps", "label": "No Skin in Z Gaps",

View File

@ -5,13 +5,14 @@
"metadata": "metadata":
{ {
"visible": true, "visible": true,
"author": "willuhmjs",
"platform": "kingroon_kp3s.stl", "platform": "kingroon_kp3s.stl",
"quality_definition": "kingroon_base", "quality_definition": "kingroon_base"
"author": "willuhmjs"
}, },
"overrides": "overrides":
{ {
"machine_acceleration": { "value": 1000 }, "machine_acceleration": { "value": 1000 },
"machine_depth": { "default_value": 200 },
"machine_height": { "default_value": 200 }, "machine_height": { "default_value": 200 },
"machine_max_acceleration_e": { "value": 1000 }, "machine_max_acceleration_e": { "value": 1000 },
"machine_max_acceleration_x": { "value": 1000 }, "machine_max_acceleration_x": { "value": 1000 },
@ -23,7 +24,7 @@
"machine_max_feedrate_z": { "value": 4 }, "machine_max_feedrate_z": { "value": 4 },
"machine_max_jerk_xy": { "value": 15 }, "machine_max_jerk_xy": { "value": 15 },
"machine_max_jerk_z": { "value": 0.4 }, "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_e": { "value": 764 },
"machine_steps_per_mm_x": { "value": 160 }, "machine_steps_per_mm_x": { "value": 160 },
"machine_steps_per_mm_y": { "value": 160 }, "machine_steps_per_mm_y": { "value": 160 },
@ -34,4 +35,4 @@
"retraction_speed": { "value": 40 }, "retraction_speed": { "value": 40 },
"speed_z_hop": { "value": 4 } "speed_z_hop": { "value": 4 }
} }
} }

View File

@ -57,7 +57,7 @@
[25, 49], [25, 49],
[25, -49], [25, -49],
[-25, -49], [-25, -49],
[25, 49] [-25, 49]
] ]
}, },
"machine_heated_bed": { "default_value": true }, "machine_heated_bed": { "default_value": true },

View File

@ -54,7 +54,7 @@
[25, 49], [25, 49],
[25, -49], [25, -49],
[-25, -49], [-25, -49],
[25, 49] [-25, 49]
] ]
}, },
"machine_heated_bed": { "default_value": true }, "machine_heated_bed": { "default_value": true },

View File

@ -51,7 +51,7 @@
[25, 49], [25, 49],
[25, -49], [25, -49],
[-25, -49], [-25, -49],
[25, 49] [-25, 49]
] ]
}, },
"machine_heated_bed": { "default_value": true }, "machine_heated_bed": { "default_value": true },

View File

@ -60,6 +60,7 @@ Item
property alias showProfileFolder: showProfileFolderAction property alias showProfileFolder: showProfileFolderAction
property alias documentation: documentationAction property alias documentation: documentationAction
property alias showTroubleshooting: showTroubleShootingAction property alias showTroubleshooting: showTroubleShootingAction
property alias openSponsershipPage: openSponsershipPageAction
property alias reportBug: reportBugAction property alias reportBug: reportBugAction
property alias whatsNew: whatsNewAction property alias whatsNew: whatsNewAction
property alias about: aboutAction property alias about: aboutAction
@ -90,6 +91,13 @@ Item
text: catalog.i18nc("@action:inmenu", "Show Online Troubleshooting") 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 Action
{ {
id: toggleFullScreenAction id: toggleFullScreenAction

View File

@ -57,10 +57,10 @@ Popup
permissionsRequired: [] permissionsRequired: []
}, },
{ {
displayName: "UltiMaker Academy", //Not translated, since it's a brand name. displayName: catalog.i18nc("@label:button", "Sponsor Cura"),
thumbnail: UM.Theme.getIcon("Knowledge"), thumbnail: UM.Theme.getIcon("Heart"),
description: catalog.i18nc("@tooltip:button", "Become a 3D printing expert with UltiMaker e-learning."), description: catalog.i18nc("@tooltip:button", "Show your support for Cura with a donation."),
link: "https://academy.ultimaker.com/?utm_source=cura&utm_medium=software&utm_campaign=switcher-academy", link: "https://ultimaker.com/software/ultimaker-cura/sponsor/",
permissionsRequired: [] permissionsRequired: []
}, },
{ {

View File

@ -17,6 +17,7 @@ Cura.Menu
Cura.MenuItem { action: Cura.Actions.showTroubleshooting} Cura.MenuItem { action: Cura.Actions.showTroubleshooting}
Cura.MenuItem { action: Cura.Actions.documentation } Cura.MenuItem { action: Cura.Actions.documentation }
Cura.MenuItem { action: Cura.Actions.reportBug } Cura.MenuItem { action: Cura.Actions.reportBug }
Cura.MenuItem { action: Cura.Actions.openSponsershipPage }
Cura.MenuSeparator { } Cura.MenuSeparator { }
Cura.MenuItem { action: Cura.Actions.whatsNew } Cura.MenuItem { action: Cura.Actions.whatsNew }
Cura.MenuItem { action: Cura.Actions.about } Cura.MenuItem { action: Cura.Actions.about }

View File

@ -4,41 +4,11 @@
import QtQuick 2.10 import QtQuick 2.10
import QtQuick.Controls 2.3 import QtQuick.Controls 2.3
import UM 1.5 as UM import UM 1.7 as UM
import Cura 1.1 as Cura import Cura 1.1 as Cura
// // Wrapper to UM.ScrollableTextArea which was originally placed here
// Cura-style TextArea with scrolls UM.ScrollableTextArea
//
Flickable
{ {
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
}
}

View File

@ -34,6 +34,8 @@ bottom_thickness
bottom_layers bottom_layers
ironing_enabled ironing_enabled
skin_monotonic skin_monotonic
small_skin_width
small_skin_on_surface
[infill] [infill]
infill_extruder_nr infill_extruder_nr

View File

@ -60,6 +60,7 @@ skin_monotonic
connect_skin_polygons connect_skin_polygons
skin_angles skin_angles
small_skin_width small_skin_width
small_skin_on_surface
skin_no_small_gaps_heuristic skin_no_small_gaps_heuristic
skin_outline_count skin_outline_count
ironing_enabled ironing_enabled

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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