From 66d3f3f9c3fcd053acf4be4d7cfb8e858b91e674 Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Mon, 3 Aug 2026 18:34:05 +0800 Subject: [PATCH 01/66] imgui: Clamp mouse y-coordinate in multi-line click/drag to text bounds (#15052) * imgui: Clamp mouse y-coordinate in multi-line click/drag to text bounds In single-line mode, click and drag already clamped y to the line's y-coordinate so the cursor would continue to follow the x-position when the mouse went off the top or bottom of the text. Multi-line mode did not clamp, so stb_text_locate_coord() would return 0 (above) or n (below), snapping the cursor to the very start or end of text and ignoring the x-coordinate entirely. Now both modes walk the row layout to compute the top of the first row (y_min) and bottom of the last row (y_max, minus half a line height to add tolerance for rounding), then clamp y to that range before passing it to stb_text_locate_coord(). This means dragging or clicking above the text now places the cursor on the first line at the x-coordinate, and dragging/clicking below places it on the last line at the x-coordinate, matching the single-line precedent. * Fix issue that cursor cannot be placed at the last empty line --- deps_src/imgui/imstb_textedit.h | 95 +++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) diff --git a/deps_src/imgui/imstb_textedit.h b/deps_src/imgui/imstb_textedit.h index 7644670975..3733bb2fa9 100644 --- a/deps_src/imgui/imstb_textedit.h +++ b/deps_src/imgui/imstb_textedit.h @@ -465,6 +465,57 @@ static void stb_textedit_click(STB_TEXTEDIT_STRING *str, STB_TexteditState *stat STB_TEXTEDIT_LAYOUTROW(&r, str, 0); y = r.ymin; } + else + { + // In multi-line mode, clamp y to stay within the text vertical bounds. + // This lets the click still land at a valid location if the mouse is slightly + // above or below the text. + StbTexteditRow r; + int n = STB_TEXTEDIT_STRINGLEN(str); + int i = 0; + float base_y = 0, y_min, y_max; + + // Get the first row to establish y_min and start the iteration + STB_TEXTEDIT_LAYOUTROW(&r, str, 0); + if (r.num_chars <= 0) + { + state->cursor = 0; + state->select_start = state->cursor; + state->select_end = state->cursor; + state->has_preferred_x = 0; + return; + } + y_min = r.ymin; + y_max = base_y + r.ymax; + i = r.num_chars; + base_y += r.baseline_y_delta; + + // Walk the remaining rows to find the bottom of the last row + while (i < n) + { + STB_TEXTEDIT_LAYOUTROW(&r, str, i); + if (r.num_chars <= 0) + break; + y_max = base_y + r.ymax; + i += r.num_chars; + base_y += r.baseline_y_delta; + } + + // If the text ends with a newline, account for the empty trailing line + // so the cursor can be placed on it + if (n > 0 && STB_TEXTEDIT_GETCHAR(str, n - 1) == STB_TEXTEDIT_NEWLINE) + { + STB_TEXTEDIT_LAYOUTROW(&r, str, n); + y_max = base_y + r.ymax; + } + + // Subtract half the last line height to avoid rounding issues when the mouse + // is just barely below the last line (keep cursor on the last line, not after the text) + y_max -= (r.ymax - r.ymin) * 0.5f; + + if (y < y_min) y = y_min; + if (y > y_max) y = y_max; + } state->cursor = stb_text_locate_coord(str, x, y); state->select_start = state->cursor; @@ -485,6 +536,50 @@ static void stb_textedit_drag(STB_TEXTEDIT_STRING *str, STB_TexteditState *state STB_TEXTEDIT_LAYOUTROW(&r, str, 0); y = r.ymin; } + else + { + // In multi-line mode, clamp y to stay within the text vertical bounds. + // This lets the drag keep working if the mouse goes off the top or bottom of the text. + StbTexteditRow r; + int n = STB_TEXTEDIT_STRINGLEN(str); + int i = 0; + float base_y = 0, y_min, y_max; + + // Get the first row to establish y_min and start the iteration + STB_TEXTEDIT_LAYOUTROW(&r, str, 0); + if (r.num_chars <= 0) + return; + y_min = r.ymin; + y_max = base_y + r.ymax; + i = r.num_chars; + base_y += r.baseline_y_delta; + + // Walk the remaining rows to find the bottom of the last row + while (i < n) + { + STB_TEXTEDIT_LAYOUTROW(&r, str, i); + if (r.num_chars <= 0) + break; + y_max = base_y + r.ymax; + i += r.num_chars; + base_y += r.baseline_y_delta; + } + + // If the text ends with a newline, account for the empty trailing line + // so the cursor can be placed on it + if (n > 0 && STB_TEXTEDIT_GETCHAR(str, n - 1) == STB_TEXTEDIT_NEWLINE) + { + STB_TEXTEDIT_LAYOUTROW(&r, str, n); + y_max = base_y + r.ymax; + } + + // Subtract half the last line height to avoid rounding issues when the mouse + // is just barely below the last line (keep cursor on the last line, not after the text) + y_max -= (r.ymax - r.ymin) * 0.5f; + + if (y < y_min) y = y_min; + if (y > y_max) y = y_max; + } if (state->select_start == state->select_end) state->select_start = state->cursor; From dbb991bf076e8b83c0b8f33fa03ecf7956b1ff1c Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Mon, 3 Aug 2026 18:34:15 +0800 Subject: [PATCH 02/66] Fix gizmo being closed after releasing mouse outside the gizmo floating window (#15095) * Fix gizmo being closed after releasing mouse outside the gizmo floating window The left up event of a drag started on the gizmo floating window (e.g. selecting text in an input field) and released over the bed was treated as a click on the plate, which deselected the objects and closed the active gizmo. Add the ignore_left_up guard to the plate select branch, matching the deselect branch above. Co-Authored-By: Claude * Fix Emboss gizmo being closed after releasing mouse outside its floating window The Emboss gizmo has its own close-on-click-away handler (on_mouse_change_selection) that was not protected against left up events originating from ImGui windows, so the gizmo was still closed when a drag started on its floating window (e.g. selecting text in the input field) ended over the 3D scene. Expose the canvas's ignore_left_up state to gizmos and skip the close check for such releases. Co-Authored-By: Claude --------- Co-authored-by: Claude --- src/slic3r/GUI/GLCanvas3D.cpp | 4 +++- src/slic3r/GUI/GLCanvas3D.hpp | 4 ++++ src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp | 7 +++++-- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index a24c095ad6..110b6697ae 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -4756,7 +4756,9 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) deselect_all(); } //BBS Select plate in this 3D canvas. - else if (evt.LeftUp() && !m_mouse.dragging && m_picking_enabled && !m_hover_plate_idxs.empty() && (m_canvas_type == CanvasView3D) && !is_layers_editing_enabled()) + // The left up may come from an ImGui window (e.g. a drag started on the gizmo floating window and released over the bed), + // in which case it must not be treated as a click on the plate, otherwise the gizmo would be closed (see deselect_all below). + else if (evt.LeftUp() && !m_mouse.ignore_left_up && !m_mouse.dragging && m_picking_enabled && !m_hover_plate_idxs.empty() && (m_canvas_type == CanvasView3D) && !is_layers_editing_enabled()) { int hover_idx = m_hover_plate_idxs.front(); wxGetApp().plater()->select_plate_by_hover_id(hover_idx); diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp index 7bae744098..17497edf16 100644 --- a/src/slic3r/GUI/GLCanvas3D.hpp +++ b/src/slic3r/GUI/GLCanvas3D.hpp @@ -1119,6 +1119,10 @@ public: void set_mouse_as_dragging() { m_mouse.dragging = true; } bool is_mouse_dragging() const { return m_mouse.dragging; } + // True when the current left up event comes from an ImGui window and was not processed by it + // (e.g. a drag that started on a gizmo floating window and was released over the 3D scene). + // Such a release is the end of an ImGui interaction, not a click on the scene. + bool is_mouse_left_up_ignored() const { return m_mouse.ignore_left_up; } double get_size_proportional_to_max_bed_size(double factor) const; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp b/src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp index feba37133a..ecf465afe7 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp @@ -566,8 +566,11 @@ bool GLGizmoEmboss::on_mouse_for_translate(const wxMouseEvent &mouse_event) void GLGizmoEmboss::on_mouse_change_selection(const wxMouseEvent &mouse_event) { - static bool was_dragging = true; - if ((mouse_event.LeftUp() || mouse_event.RightUp()) && !was_dragging) { + static bool was_dragging = true; + // The left up may be the end of a drag that started on the gizmo floating window (e.g. selecting + // text in the input field). Such a release is not a click on the scene and must not close the gizmo. + // (The flag is only set for left up events, so right up behavior is unchanged.) + if ((mouse_event.LeftUp() || mouse_event.RightUp()) && !was_dragging && !m_parent.is_mouse_left_up_ignored()) { // is hovered volume closest hovered? int hovered_idx = m_parent.get_first_hover_volume_idx(); if (hovered_idx < 0) From 74c4a7e450a745380108b55a1dc72233a2742f6d Mon Sep 17 00:00:00 2001 From: SoftFever Date: Mon, 3 Aug 2026 22:25:50 +0800 Subject: [PATCH 03/66] Support printer specific filament profiles in the OrcaFilamentLibrary (#15101) * Support printer specific filament profiles in the Orca Filament Library --- scripts/orca_extra_profile_check.py | 10 ++- src/libslic3r/Preset.cpp | 6 +- .../libslic3r/test_preset_bundle_loading.cpp | 66 +++++++++++++++++++ 3 files changed, 77 insertions(+), 5 deletions(-) diff --git a/scripts/orca_extra_profile_check.py b/scripts/orca_extra_profile_check.py index cdfc8544a4..07ce3d69d3 100644 --- a/scripts/orca_extra_profile_check.py +++ b/scripts/orca_extra_profile_check.py @@ -46,12 +46,16 @@ def no_duplicates_object_pairs_hook(pairs): return seen # NOTE: currently Orca expects compatible_printers to be a defined in every instantiation profile, inheritation is not supported in Profile page -def check_filament_compatible_printers(vendor_folder): +def check_filament_compatible_printers(vendor, vendor_folder): """ Checks JSON files in the vendor folder for missing or empty 'compatible_printers' when 'instantiation' is flagged as true. + In the OrcaFilamentLibrary 'compatible_printers' is optional: a profile without it is generic and + offered on every printer, while a profile that lists printers supersedes the generic one there. + Parameters: + vendor (str): The vendor name the folder belongs to. vendor_folder (str or Path): The directory to search for JSON profile files. Returns: @@ -115,7 +119,7 @@ def check_filament_compatible_printers(vendor_folder): for profile in profiles.values(): instantiation = str(profile['content'].get("instantiation", "")).lower() == "true" - if instantiation: + if instantiation and vendor != 'OrcaFilamentLibrary': try: compatible_printers = get_property(profile, "compatible_printers") if not compatible_printers or (isinstance(compatible_printers, list) and not compatible_printers): @@ -571,7 +575,7 @@ def main(): vendor_path = profiles_dir / vendor_name if args.check_filaments or not (args.check_materials and not args.check_filaments): - errors_found += check_filament_compatible_printers(vendor_path / "filament") + errors_found += check_filament_compatible_printers(vendor_name, vendor_path / "filament") if args.check_materials: new_errors, new_warnings = check_machine_default_materials(profiles_dir, vendor_name) diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index 2821bef0af..d5bf251d37 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -3784,12 +3784,14 @@ void PresetCollection::update_library_profile_excluded_from() } // Check all presets that has the same alias as the filament presets with empty compatible_printers in Orca Filament Library. + // A printer specific profile supersedes the generic one, no matter whether it lives in a vendor bundle or in the + // library itself. for (const Preset& preset : m_presets) { - if (preset.vendor == nullptr || preset.vendor->name == PresetBundle::ORCA_FILAMENT_LIBRARY) + if (preset.vendor == nullptr) continue; const auto* compatible_printers = dynamic_cast(preset.config.option("compatible_printers")); - // All profiles in concrete vendor profile shouldn't have empty compatible_printers, but here we check it for safety. + // Profiles with empty compatible_printers are the generic ones, they never supersede anything. if (compatible_printers == nullptr || compatible_printers->values.empty()) continue; auto itr = excluded_froms.find(preset.alias); diff --git a/tests/libslic3r/test_preset_bundle_loading.cpp b/tests/libslic3r/test_preset_bundle_loading.cpp index 351535dd9d..c697c4461c 100644 --- a/tests/libslic3r/test_preset_bundle_loading.cpp +++ b/tests/libslic3r/test_preset_bundle_loading.cpp @@ -488,3 +488,69 @@ TEST_CASE("Plugin capability override keys are scoped per preset type", "[Preset } } +namespace { + +// A standalone filament collection that exposes the protected library masking builder, so the Orca +// Filament Library scenario can be set up without the full system-profile load pipeline. +struct LibraryFilamentTestCollection : public PresetCollection +{ + LibraryFilamentTestCollection() + : PresetCollection(Preset::TYPE_FILAMENT, Preset::filament_options(), + static_cast(FullPrintConfig::defaults())) + {} + using PresetCollection::update_library_profile_excluded_from; +}; + +} // namespace + +// Orca: a filament in the Orca Filament Library that names its compatible printers has to hide the generic +// library filament sharing its alias, the same way a vendor owned filament does. Otherwise both are compatible +// with that printer and the plater combo box lists the shared alias twice. +TEST_CASE("A printer specific filament supersedes the generic library filament with the same alias", "[Preset][Bundle]") +{ + LibraryFilamentTestCollection filaments; + PresetCollection printers(Preset::TYPE_PRINTER, Preset::printer_options(), + static_cast(FullPrintConfig::defaults())); + // The masking keys off the vendor name, which VendorProfile's constructor does not derive from the id. + VendorProfile library(PresetBundle::ORCA_FILAMENT_LIBRARY); + VendorProfile vendor("Vendor"); + library.name = PresetBundle::ORCA_FILAMENT_LIBRARY; + vendor.name = "Vendor"; + + auto add_filament = [&filaments](const VendorProfile &owner, const std::string &name, std::vector compatible_printers) { + Preset &preset = add_inmemory_preset(filaments, name); + preset.alias = "Generic ABS"; + preset.vendor = &owner; + preset.config.option("compatible_printers", true)->values = std::move(compatible_printers); + }; + + add_filament(library, "Generic ABS @System", {}); + add_filament(library, "Generic ABS @Printer A", { "Printer A" }); + add_filament(vendor, "Generic ABS @Printer B", { "Printer B" }); + + filaments.update_library_profile_excluded_from(); + + const Preset *generic = filaments.find_preset("Generic ABS @System"); + REQUIRE(generic != nullptr); + CHECK(generic->m_excluded_from.count("Printer A") == 1); + CHECK(generic->m_excluded_from.count("Printer B") == 1); + CHECK(generic->m_excluded_from.size() == 2); + + // A printer specific profile names printers, so it is never the one being hidden - not even by itself. + const Preset *specific = filaments.find_preset("Generic ABS @Printer A"); + REQUIRE(specific != nullptr); + CHECK(specific->m_excluded_from.empty()); + + // ...and the generic profile really drops out of the compatible set on the printer it is hidden from. + add_inmemory_preset(printers, "Printer A"); + add_inmemory_preset(printers, "Printer C"); + const Preset *printer_a = printers.find_preset("Printer A"); + const Preset *printer_c = printers.find_preset("Printer C"); + REQUIRE(printer_a != nullptr); + REQUIRE(printer_c != nullptr); + + const PresetWithVendorProfile generic_lib(*generic, &library); + CHECK_FALSE(is_compatible_with_printer(generic_lib, PresetWithVendorProfile(*printer_a, nullptr))); + CHECK(is_compatible_with_printer(generic_lib, PresetWithVendorProfile(*printer_c, nullptr))); +} + From 06ef58bad8cbe7b6f9ee930372001e20dc24c156 Mon Sep 17 00:00:00 2001 From: Kris Austin Date: Mon, 3 Aug 2026 09:29:00 -0500 Subject: [PATCH 04/66] test: replace the disabled convex_hull_2d test (#14892) test(libslic3r): replace the disabled convex_hull_2d test, closing #11269 The last "failing libslic3r test" from #11269 was the disabled SCENARIO("2D convex hull of sinking object", "[3mf][.]") in test_3mf.cpp. It checked ModelObject::convex_hull_2d for a sinking object against PrusaSlicer's reference hull, but Orca's convex_hull_2d does not clip geometry below the bed the way PrusaSlicer's its_convex_hull_2d_above does, so the reference never matched. The test also wrote a debug mesh to a hardcoded /tmp path and its comparison loop was inverted. Remove it and add tests/libslic3r/test_model.cpp characterizing convex_hull_2d on non-sinking transforms (identity and scale+offset), where the projected footprint is unambiguous. Homed in a Model test file since it exercises ModelObject, not 3MF. --- tests/libslic3r/CMakeLists.txt | 1 + tests/libslic3r/test_3mf.cpp | 61 ---------------------------------- tests/libslic3r/test_model.cpp | 40 ++++++++++++++++++++++ 3 files changed, 41 insertions(+), 61 deletions(-) create mode 100644 tests/libslic3r/test_model.cpp diff --git a/tests/libslic3r/CMakeLists.txt b/tests/libslic3r/CMakeLists.txt index dbc6c99f15..1ad299473c 100644 --- a/tests/libslic3r/CMakeLists.txt +++ b/tests/libslic3r/CMakeLists.txt @@ -29,6 +29,7 @@ add_executable(${_TEST_NAME}_tests test_stl.cpp test_meshboolean.cpp test_marchingsquares.cpp + test_model.cpp test_utils.cpp test_timeutils.cpp test_voronoi.cpp diff --git a/tests/libslic3r/test_3mf.cpp b/tests/libslic3r/test_3mf.cpp index 1a082cd8e0..a6fe3ed460 100644 --- a/tests/libslic3r/test_3mf.cpp +++ b/tests/libslic3r/test_3mf.cpp @@ -509,64 +509,3 @@ SCENARIO("Nozzle-group metadata .3mf round-trip", "[3mf][MultiNozzle]") { boost::filesystem::remove_all(backup_dir); } } - -SCENARIO("2D convex hull of sinking object", "[3mf][.]") { - GIVEN("model") { - // load a model - Model model; - std::string src_file = std::string(TEST_DATA_DIR) + "/test_3mf/Prusa.stl"; - REQUIRE(load_stl(src_file.c_str(), &model)); - model.add_default_instances(); - - WHEN("model is rotated, scaled and set as sinking") { - ModelObject* object = model.objects[0]; - object->center_around_origin(false); - - // This outputs the same exact data as the Prusaslicer test - write_debug_stl("3mf/orca.ascii", object->volumes[0]->mesh()); - - // set instance's attitude so that it is rotated, scaled (and sinking? how is it sinking? the rotation? does it matter if it's sinking?) - ModelInstance* instance = object->instances[0]; - instance->set_rotation(X, -M_PI / 4.0); - instance->set_offset(Vec3d::Zero()); - instance->set_scaling_factor({ 2.0, 2.0, 2.0 }); - - // calculate 2D convex hull - auto trafo = instance->get_transformation().get_matrix(); - - // This matrix is the same exact matrix as the Prusaslicer test - CAPTURE(trafo); - Polygon hull_2d = object->convex_hull_2d(trafo); - - // But we get different hull_2d.points here (and somehow decimal numbers despite being int64_t values, but that's probabaly printing configuration somewhere -- Prusaslicer's prints out with newlines between the X&Y and not one between coordinates, which is about the worse possible output). - // I think it's something to do with PrusaSlicer ignoring everything under the Z plane, which makes sense from the results. - // See the comments added to ModelObject::convex_hull_2d for more information. - - // verify result - Points result = { - { -91501496, -15914144 }, - { 91501496, -15914144 }, - { 91501496, 4243 }, - { 78229680, 4246883 }, - { 56898100, 4246883 }, - { -85501496, 4242641 }, - { -91501496, 4243 } - }; - - THEN("2D convex hull should match with reference") { - // Allow 1um error due to floating point rounding. - bool res = hull_2d.points.size() == result.size(); - if (res) { - for (size_t i = 0; i < result.size(); ++ i) { - const Point &p1 = result[i]; - const Point &p2 = hull_2d.points[i]; - CHECK((std::abs(p1.x() - p2.x()) > 1 || std::abs(p1.y() - p2.y()) > 1)); - } - } - - CAPTURE(hull_2d.points); - REQUIRE(res); - } - } - } -} diff --git a/tests/libslic3r/test_model.cpp b/tests/libslic3r/test_model.cpp new file mode 100644 index 0000000000..3a580e3be2 --- /dev/null +++ b/tests/libslic3r/test_model.cpp @@ -0,0 +1,40 @@ +#include + +#include "libslic3r/Model.hpp" + +using namespace Slic3r; + +// convex_hull_2d does not clip geometry below the bed, so these cases avoid +// sinking transforms. +TEST_CASE("A part's 2D convex hull is its footprint projected onto the bed", "[Model]") +{ + Model model; + ModelObject* object = model.add_object(); + // Keep the cube's raw coordinates ([0,20] on every axis): the default + // add_volume re-centers the geometry, which would move the footprint. + object->add_volume(make_cube(20, 20, 20), ModelVolumeType::MODEL_PART, false); + + SECTION("identity transform yields the 20 mm square") { + const Polygon hull = object->convex_hull_2d(Geometry::Transformation{}.get_matrix()); + const BoundingBox bb = hull.bounding_box(); + CHECK(hull.size() == 4); + CHECK(bb.min.x() == scaled(0.)); + CHECK(bb.min.y() == scaled(0.)); + CHECK(bb.max.x() == scaled(20.)); + CHECK(bb.max.y() == scaled(20.)); + } + + SECTION("scaling and offset move and grow the footprint") { + Geometry::Transformation t; + t.set_scaling_factor({2, 2, 2}); // cube now spans [0,40] + t.set_offset({10, 5, 0}); // then shift +10 in X, +5 in Y + + const Polygon hull = object->convex_hull_2d(t.get_matrix()); + const BoundingBox bb = hull.bounding_box(); + CHECK(hull.size() == 4); + CHECK(bb.min.x() == scaled(10.)); + CHECK(bb.min.y() == scaled(5.)); + CHECK(bb.max.x() == scaled(50.)); + CHECK(bb.max.y() == scaled(45.)); + } +} From 7b404596e9eebef6c0595052604da5cc4f669139 Mon Sep 17 00:00:00 2001 From: "Mikhail f. Shiryaev" Date: Mon, 3 Aug 2026 20:10:01 +0200 Subject: [PATCH 05/66] Add `Skip G-code config block` to exclude the config comments from G-code files (#12455) Add feature to skip CONFIG_BLOCK in G-code files --- src/libslic3r/GCode.cpp | 37 ++++++++++++++++++---------------- src/libslic3r/Preset.cpp | 2 +- src/libslic3r/PrintConfig.cpp | 11 +++++++++- src/libslic3r/PrintConfig.hpp | 2 +- src/slic3r/GUI/Tab.cpp | 1 + tests/fff_print/test_print.cpp | 16 +++++++++++++++ 6 files changed, 49 insertions(+), 20 deletions(-) diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index f5db2e8349..ff2384a0a4 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -2884,6 +2884,7 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato DoExport::init_gcode_processor(print.config(), m_processor, m_silent_time_estimator_enabled, print.get_layered_nozzle_group_result()); const bool is_bbl_printers = print.is_BBL_printer(); + const bool skip_config_block = print.config().gcode_skip_config_block; const WipeTowerType wipe_tower_type = print.wipe_tower_type(); m_calib_config.clear(); // resets analyzer's tracking data @@ -3059,7 +3060,7 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato // as configuration key / value pairs to be parsable by older versions of // PrusaSlicer G-code viewer. { - if (is_bbl_printers) { + if (is_bbl_printers && !skip_config_block) { file.write("; CONFIG_BLOCK_START\n"); std::string full_config; append_full_config(print, full_config); @@ -4086,23 +4087,25 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato GCodeProcessor::ETags::Estimated_Printing_Time_Placeholder) .c_str()); file.write("\n"); - file.write("; CONFIG_BLOCK_START\n"); - std::string full_config; - append_full_config(print, full_config); - if (!full_config.empty()) - file.write(full_config); + if (!skip_config_block) { + file.write("; CONFIG_BLOCK_START\n"); + std::string full_config; + append_full_config(print, full_config); + if (!full_config.empty()) + file.write(full_config); - // SoftFever: write compatiple info - int first_layer_bed_temperature = get_bed_temperature(0, true, print.config().curr_bed_type); - file.write_format("; first_layer_bed_temperature = %d\n", first_layer_bed_temperature); - file.write_format("; bed_shape = %s\n", print.full_print_config().opt_serialize("printable_area").c_str()); - file.write_format("; first_layer_temperature = %d\n", print.config().nozzle_temperature_initial_layer.get_at(0)); - file.write_format("; first_layer_height = %.3f\n", print.config().initial_layer_print_height.value); - - //SF TODO -// file.write_format("; variable_layer_height = %d\n", print.ad.adaptive_layer_height ? 1 : 0); - - file.write("; CONFIG_BLOCK_END\n\n"); + // SoftFever: write compatiple info + int first_layer_bed_temperature = get_bed_temperature(0, true, print.config().curr_bed_type); + file.write_format("; first_layer_bed_temperature = %d\n", first_layer_bed_temperature); + file.write_format("; bed_shape = %s\n", print.full_print_config().opt_serialize("printable_area").c_str()); + file.write_format("; first_layer_temperature = %d\n", print.config().nozzle_temperature_initial_layer.get_at(0)); + file.write_format("; first_layer_height = %.3f\n", print.config().initial_layer_print_height.value); + + //SF TODO +// file.write_format("; variable_layer_height = %d\n", print.ad.adaptive_layer_height ? 1 : 0); + + file.write("; CONFIG_BLOCK_END\n\n"); + } // !skip_config_block } file.write("\n"); diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index d5bf251d37..2e33a36c83 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -1404,7 +1404,7 @@ static std::vector s_Preset_machine_limits_options { static std::vector s_Preset_printer_options { "printer_technology", "printable_area", "extruder_printable_area", "support_parallel_printheads", "parallel_printheads_count", "parallel_printheads_bed_exclude_areas", "bed_exclude_area","bed_custom_texture", "bed_custom_model", "gcode_flavor", - "fan_kickstart", "part_cooling_fan_min_pwm", "fan_speedup_time", "fan_speedup_overhangs", + "gcode_skip_config_block", "fan_kickstart", "part_cooling_fan_min_pwm", "fan_speedup_time", "fan_speedup_overhangs", "single_extruder_multi_material", "manual_filament_change", "file_start_gcode", "machine_start_gcode", "machine_end_gcode", "before_layer_change_gcode", "printing_by_object_gcode", "layer_change_gcode", "time_lapse_gcode", "wrapping_detection_gcode", "change_filament_gcode", "change_extrusion_role_gcode", "printer_model", "printer_variant", "printer_extruder_id", "printer_extruder_variant", "extruder_variant_list", "default_nozzle_volume_type", "printable_height", "extruder_printable_height", "extruder_clearance_radius", "extruder_clearance_height_to_lid", "extruder_clearance_height_to_rod", diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index cc991f91cc..ada05c4e9f 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -4259,6 +4259,15 @@ void PrintConfigDef::init_fff_params() def->readonly = false; def->set_default_value(new ConfigOptionEnum(gcfMarlinLegacy)); + def = this->add("gcode_skip_config_block", coBool); + def->label = L("Skip G-code config block"); + def->tooltip = L("Do not write the CONFIG_BLOCK (slicer configuration key/value pairs) into the G-code file. " + "This can help with printers whose firmware crashes when parsing these comment lines " + "(e.g. Anycubic go-klipper). Note: the G-code file will no longer contain slicer settings, " + "so importing it back into OrcaSlicer will not restore the configuration."); + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionBool(false)); + def = this->add("pellet_modded_printer", coBool); def->label = L("Pellet Modded Printer"); def->tooltip = L("Enable this option if your printer uses pellets instead of filaments."); @@ -4292,7 +4301,7 @@ void PrintConfigDef::init_fff_params() "slow down."); def->mode = comAdvanced; def->set_default_value(new ConfigOptionBool(0)); - + //BBS def = this->add("infill_combination", coBool); def->label = L("Infill combination"); diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index 90aa1adb3d..c1875e0288 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -1547,7 +1547,7 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionBool, gcode_add_line_number)) ((ConfigOptionBool, bbl_bed_temperature_gcode)) ((ConfigOptionEnum, gcode_flavor)) - + ((ConfigOptionBool, gcode_skip_config_block)) ((ConfigOptionFloat, time_cost)) ((ConfigOptionString, layer_change_gcode)) ((ConfigOptionString, time_lapse_gcode)) diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index c8fa524ca5..c436d70a15 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -5016,6 +5016,7 @@ void TabPrinter::build_fff() optgroup->append_single_option_line("printer_structure", "printer_basic_information_advanced#printer-structure"); optgroup->append_single_option_line("gcode_flavor", "printer_basic_information_advanced#g-code-flavor"); + optgroup->append_single_option_line("gcode_skip_config_block", "printer_basic_information_advanced#skip-g-code-config-block"); optgroup->append_single_option_line("pellet_modded_printer", "printer_basic_information_advanced#pellet-modded-printer"); optgroup->append_single_option_line("bbl_use_printhost", "printer_basic_information_advanced#use-3rd-party-print-host"); optgroup->append_single_option_line("use_3mf"); diff --git a/tests/fff_print/test_print.cpp b/tests/fff_print/test_print.cpp index 9cb085f78b..6bff945fc3 100644 --- a/tests/fff_print/test_print.cpp +++ b/tests/fff_print/test_print.cpp @@ -338,6 +338,22 @@ TEST_CASE("G-code lists the resolved extrusion-width settings", "[Print]") CHECK(with_first_layer.find("; first layer extrusion width") != std::string::npos); } +// gcode_skip_config_block suppresses the resolved-settings block while leaving the +// header and executable blocks intact. +TEST_CASE("gcode_skip_config_block omits the resolved-settings comment block", "[Print]") +{ + const std::string gcode = slice({ cube(20) }, { + { "gcode_skip_config_block", true }, + { "gcode_comments", true }, + }); + CHECK(gcode.find("; CONFIG_BLOCK_START") == std::string::npos); + CHECK(gcode.find("; CONFIG_BLOCK_END") == std::string::npos); + CHECK(gcode.find("; layer_height =") == std::string::npos); + CHECK(gcode.find("; fill_density =") == std::string::npos); + CHECK(gcode.find("; HEADER_BLOCK_START") != std::string::npos); + CHECK(gcode.find("; EXECUTABLE_BLOCK_START") != std::string::npos); +} + // Custom G-code templates substitute placeholders during export. TEST_CASE("Custom G-code placeholders are substituted", "[Print]") { From ca7fbfb00751e403817dcbff5286550a5ce98efd Mon Sep 17 00:00:00 2001 From: Kiss Lorand <50251547+kisslorand@users.noreply.github.com> Date: Tue, 4 Aug 2026 00:02:48 +0300 Subject: [PATCH 06/66] Fix missing overhang wall when no partial counterbore bridge is generated (#15100) --- src/libslic3r/PerimeterGenerator.cpp | 29 ++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/src/libslic3r/PerimeterGenerator.cpp b/src/libslic3r/PerimeterGenerator.cpp index ad4d615807..2d6c993d78 100644 --- a/src/libslic3r/PerimeterGenerator.cpp +++ b/src/libslic3r/PerimeterGenerator.cpp @@ -1977,7 +1977,7 @@ void PerimeterGenerator::process_no_bridge(Surfaces& all_surfaces, coord_t perim ExPolygons unsupported = diff_ex(last, *this->lower_slices, ApplySafetyOffset::Yes); if (!unsupported.empty()) { //remove small overhangs - ExPolygons unsupported_filtered = offset2_ex(unsupported, double(-perimeter_spacing), double(perimeter_spacing)); + ExPolygons unsupported_filtered = opening_ex(unsupported, perimeter_spacing); if (!unsupported_filtered.empty()) { //to_draw.insert(to_draw.end(), last.begin(), last.end()); @@ -2090,35 +2090,40 @@ void PerimeterGenerator::process_no_bridge(Surfaces& all_surfaces, coord_t perim //TODO: add other polys as holes inside this one (-margin) } else { // if(this->config->counterbore_hole_bridging.value == chbBridges) // Orca: Partial counterbore bridging is mask-based. Preserve the supported - // remainder (`last`) and use simplified BridgeDetector coverage to derive the + // remainder and use simplified BridgeDetector coverage to derive the // bridgeable counterbore span. The span is grown from supported material, - // shrunk back, stripped from `last`, and expanded back. It is then prevented - // from intruding deeper into `last` than the explicit anchor overlap. - // Finally, add the allowed anchor band from `last` then remove the + // shrunk back, stripped from the remaining normal surface, and expanded back. + // It is then prevented from intruding deeper into it than the explicit anchor overlap. + // Finally, add the allowed anchor band from it then remove the // narrow hole-side wall contact, which must remain unbridgeable. - last = diff_ex(last, unsupported_filtered, ApplySafetyOffset::Yes); + const ExPolygons remaining = diff_ex(last, unsupported_filtered, ApplySafetyOffset::Yes); ExPolygons bridgeable_filtered; + for (ExPolygon& poly : bridgeable) { poly.simplify(perimeter_spacing, &bridgeable_filtered); } bridgeable_filtered = opening_ex(bridgeable_filtered, ext_perimeter_width); // Get rid of coarseness of the resulted bridgeable area by using the original supported area as reference. - // This is to avoid keeping tiny bridgeable areas that are far from the supported area, or protrude into it. - bridgeable_filtered = union_ex(offset_ex(last, perimeter_spacing), bridgeable_filtered); + // This is to avoid keeping tiny bridgeable areas that are far from the supported area, or protrude into it. + bridgeable_filtered = union_ex(offset_ex(remaining, perimeter_spacing), bridgeable_filtered); bridgeable_filtered = offset_ex(bridgeable_filtered, -perimeter_spacing); - bridgeable_filtered = diff_ex(bridgeable_filtered, last, ApplySafetyOffset::Yes); + bridgeable_filtered = diff_ex(bridgeable_filtered, remaining, ApplySafetyOffset::Yes); bridgeable_filtered = opening_ex(bridgeable_filtered, perimeter_spacing); // filter noise from the diff_ex bridgeable_filtered = offset_ex(bridgeable_filtered, perimeter_spacing); // restore the size to the original bridgeable area // Safety measure: Keep the bridge mask from intruding deeper into the - // supported anchor region (`last`) than the explicit anchor overlap. - bridgeable_filtered = diff_ex(bridgeable_filtered, offset_ex(last, -bridge_anchor_offset)); + // supported anchor region than the explicit anchor overlap. + bridgeable_filtered = diff_ex(bridgeable_filtered, offset_ex(remaining, -bridge_anchor_offset)); - ExPolygons bridge_anchor_areas = intersection_ex(last, offset_ex(unsupported_filtered, bridge_anchor_offset)); + ExPolygons bridge_anchor_areas = intersection_ex(remaining, offset_ex(unsupported_filtered, bridge_anchor_offset)); unsupported_filtered = union_ex(bridgeable_filtered, bridge_anchor_areas); // add bridge anchor unsupported_filtered = opening_ex(unsupported_filtered, bridge_anchor_offset); // remove anchor area from hole-side walls, it must remain unbridgeable + + // update 'last' only if we have a valid bridgeable area, otherwise we will lose the original unsupported area + if (!unsupported_filtered.empty()) + last = remaining; // TODO: Fix the case with thin outer walls around the bridge (1~2 walls) where classic wall // might generate two walls in a tiny space or non at all if "Detect thin walls" is not activated } From 40eab797c6a60a5949c0f92d00798da414c4b44a Mon Sep 17 00:00:00 2001 From: yw4z Date: Tue, 4 Aug 2026 03:45:31 +0300 Subject: [PATCH 07/66] match em_unit value for on_dpi_change for linux (#15043) * Update GUI_Utils.hpp * Update GUI_Utils.hpp --- src/slic3r/GUI/GUI_Utils.hpp | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/src/slic3r/GUI/GUI_Utils.hpp b/src/slic3r/GUI/GUI_Utils.hpp index 890e8b9e1c..c93c40b066 100644 --- a/src/slic3r/GUI/GUI_Utils.hpp +++ b/src/slic3r/GUI/GUI_Utils.hpp @@ -113,14 +113,7 @@ public: update_dark_ui(this); #endif - // Linux specific issue : get_dpi_for_window(this) still doesn't responce to the Display's scale in new wxWidgets(3.1.3). - // So, calculate the m_em_unit value from the font size, as before -#if !defined(__WXGTK__) - m_em_unit = std::max(10, 10.0f * m_scale_factor); -#else - // initialize default width_unit according to the width of the one symbol ("m") of the currently active font of this window. - m_em_unit = std::max(10, this->GetTextExtent("m").x - 1); -#endif // __WXGTK__ + update_em_unit(); // recalc_font(); @@ -235,6 +228,19 @@ private: // m_em_unit = metrics.averageWidth; // } + // update em_unit value for new window font + void update_em_unit() + { + // Linux specific issue : get_dpi_for_window(this) still doesn't responce to the Display's scale in new wxWidgets(3.1.3). + // So, calculate the m_em_unit value from the font size, as before +#if !defined(__WXGTK__) + m_em_unit = std::max(10, 10.0f * m_scale_factor); +#else + // initialize default width_unit according to the width of the one symbol ("m") of the currently active font of this window. + m_em_unit = std::max(10, this->GetTextExtent("m").x - 1); +#endif // __WXGTK__ + } + // check if new scale is differ from previous bool is_new_scale_factor() const { return fabs(m_scale_factor - m_prev_scale_factor) > 0.001; } @@ -247,8 +253,7 @@ private: // set normal application font as a current window font m_normal_font = this->GetFont(); - // update em_unit value for new window font - m_em_unit = std::max(10, 10.0f * m_scale_factor); + update_em_unit(); // rescale missed controls sizes and images on_dpi_changed(suggested_rect); From 16c44940d25757143cf75b6975cb06d3d3dd2242 Mon Sep 17 00:00:00 2001 From: Ian Chua Date: Tue, 4 Aug 2026 14:30:59 +0800 Subject: [PATCH 08/66] Add developer flag for printer agents --- src/libslic3r/AppConfig.cpp | 6 ++++++ src/slic3r/GUI/Preferences.cpp | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/src/libslic3r/AppConfig.cpp b/src/libslic3r/AppConfig.cpp index 159d9bbeda..1b170bf884 100644 --- a/src/libslic3r/AppConfig.cpp +++ b/src/libslic3r/AppConfig.cpp @@ -626,6 +626,12 @@ void AppConfig::set_defaults() set_bool("window_buttons_on_left", false); #endif + if (get("use_printer_agents").empty()) + { + // false = legacy behavior using print hosts + set_bool("use_printer_agents", false); + } + // Remove legacy window positions/sizes erase("app", "main_frame_maximized"); erase("app", "main_frame_pos"); diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp index 6bcc00848b..1a3c6fd26a 100644 --- a/src/slic3r/GUI/Preferences.cpp +++ b/src/slic3r/GUI/Preferences.cpp @@ -2101,6 +2101,12 @@ void PreferencesDialog::create_items() auto item_show_unsupported = create_item_checkbox(_L("Show unsupported presets"), _L("Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected."), "show_unsupported_presets"); g_sizer->Add(item_show_unsupported); + auto item_plugin_printer_agents = create_item_checkbox( + _L("(Experimental) Use printer agents instead of print hosts"), _L( + "Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\nWhen disabled, OrcaSlicer uses the legacy print-host behavior."), + "use_printer_agents"); + g_sizer->Add(item_plugin_printer_agents); + //// DEVELOPER > Experimental Features g_sizer->Add(create_item_title(_L("Experimental Features")), 1, wxEXPAND); From 501af81ba9fa29aa74c7d5d7e16e7d2217677f8c Mon Sep 17 00:00:00 2001 From: Andrew <159703254+andrewsoonqn@users.noreply.github.com> Date: Thu, 16 Jul 2026 16:21:05 +0800 Subject: [PATCH 09/66] Replace fake-enum printer agent dropdown (#121) A dedicated PrinterAgentChoice field reads rows straight from the live agent registry and stores the agent id string, replacing the fake-coEnum index mapping. The field moves to TabPrinter and registers with the searcher so UnsavedChanges renders it; the PhysicalPrinterDialog copy and its update hook are removed (#125). switch_printer_agent now resolves ids via resolve_printer_agent_id. --- src/libslic3r/Config.hpp | 2 + src/slic3r/GUI/Field.cpp | 268 +++++++++++++++-------- src/slic3r/GUI/Field.hpp | 38 ++++ src/slic3r/GUI/GUI_App.cpp | 23 +- src/slic3r/GUI/GUI_App.hpp | 7 +- src/slic3r/GUI/OptionsGroup.cpp | 26 +++ src/slic3r/GUI/PhysicalPrinterDialog.cpp | 88 +------- src/slic3r/GUI/PhysicalPrinterDialog.hpp | 1 - src/slic3r/GUI/Tab.cpp | 55 +++++ 9 files changed, 312 insertions(+), 196 deletions(-) diff --git a/src/libslic3r/Config.hpp b/src/libslic3r/Config.hpp index 6f4117d249..509095cbfc 100644 --- a/src/libslic3r/Config.hpp +++ b/src/libslic3r/Config.hpp @@ -2273,6 +2273,8 @@ public: plugin_picker, // Raw JSON string value, edited through a dialog behind a button rather than in the row. plugin_config, + // PrinterAgentChoice + printer_agent_select, }; // Identifier of this option. It is stored here so that it is accessible through the by_serialization_key_ordinal map. diff --git a/src/slic3r/GUI/Field.cpp b/src/slic3r/GUI/Field.cpp index 1fcaef1b52..8d05de13a4 100644 --- a/src/slic3r/GUI/Field.cpp +++ b/src/slic3r/GUI/Field.cpp @@ -35,6 +35,7 @@ #include "Widgets/TextCtrl.h" #include "../Utils/ColorSpaceConvert.hpp" +#include "../Utils/NetworkAgentFactory.hpp" #ifdef __WXOSX__ #define wxOSX true #else @@ -1403,39 +1404,6 @@ using choice_ctrl = ::ComboBox; // BBS static std::map dynamic_lists; -static bool is_plugin_printer_agent_key(const std::string& value) -{ - return value.rfind("plugin:", 0) == 0; -} - -static int printer_agent_item_for_enum_index(const choice_ctrl* field, int enum_index) -{ - if (!field) - return -1; - - const unsigned int count = field->GetCount(); - for (unsigned int idx = 0; idx < count; ++idx) { - if (void* data = field->GetClientData(idx)) { - const int stored = static_cast(reinterpret_cast(data)) - 1; - if (stored == enum_index) - return static_cast(idx); - } - } - - return -1; -} - -static int printer_agent_enum_index_for_item(const choice_ctrl* field, int item_index, int fallback) -{ - if (!field || item_index < 0) - return fallback; - - if (void* data = field->GetClientData(item_index)) - return static_cast(reinterpret_cast(data)) - 1; - - return fallback; -} - void Choice::register_dynamic_list(std::string const &optname, DynamicList *list) { dynamic_lists.emplace(optname, list); } void DynamicList::update() @@ -1518,33 +1486,7 @@ void Choice::BUILD() window = dynamic_cast(temp); if (! m_opt.enum_labels.empty() || ! m_opt.enum_values.empty()) { - if (m_opt_id == "printer_agent") { - const bool has_builtin_agents = std::any_of(m_opt.enum_values.begin(), m_opt.enum_values.end(), - [](const std::string& value) { return !is_plugin_printer_agent_key(value); }); - const bool has_plugin_agents = std::any_of(m_opt.enum_values.begin(), m_opt.enum_values.end(), - [](const std::string& value) { return is_plugin_printer_agent_key(value); }); - - auto append_agent_rows = [this, temp](bool plugins) { - for (size_t i = 0; i < m_opt.enum_values.size(); ++i) { - const bool is_plugin = is_plugin_printer_agent_key(m_opt.enum_values[i]); - if (is_plugin != plugins) - continue; - - const wxString label = i < m_opt.enum_labels.size() ? _(m_opt.enum_labels[i]) : wxString(m_opt.enum_values[i]); - const int item = temp->Append(label); - temp->SetClientData(item, reinterpret_cast(static_cast(i + 1))); - } - }; - - if (has_builtin_agents) { - temp->Append(_L("System agents"), wxNullBitmap, DD_ITEM_STYLE_SPLIT_ITEM | DD_ITEM_STYLE_DISABLED); - append_agent_rows(false); - } - if (has_plugin_agents) { - temp->Append(_L("Plugins"), wxNullBitmap, DD_ITEM_STYLE_SPLIT_ITEM | DD_ITEM_STYLE_DISABLED); - append_agent_rows(true); - } - } else if (m_opt.enum_labels.empty()) { + if (m_opt.enum_labels.empty()) { // Append non-localized enum_values for (auto el : m_opt.enum_values) temp->Append(el); @@ -1651,7 +1593,7 @@ void Choice::set_selection() switch (m_opt.type) { case coEnum:{ const int val = m_opt.default_value->getInt(); - field->SetSelection(m_opt_id == "printer_agent" ? printer_agent_item_for_enum_index(field, val) : val); + field->SetSelection(val); break; } case coFloat: @@ -1701,12 +1643,7 @@ void Choice::set_value(const std::string& value, bool change_event) //! Redunda } choice_ctrl* field = dynamic_cast(window); - if (m_opt_id == "printer_agent") { - const int enum_index = idx == m_opt.enum_values.size() ? - (m_opt.default_value ? m_opt.default_value->getInt() : 0) : - static_cast(idx); - field->SetSelection(printer_agent_item_for_enum_index(field, enum_index)); - } else if (idx == m_opt.enum_values.size()) + if (idx == m_opt.enum_values.size()) field->SetValue(value); else field->SetSelection(idx); @@ -1772,33 +1709,11 @@ void Choice::set_value(const boost::any& value, bool change_event) case coEnum: // BBS case coEnums: { - auto printer_agent_index_from_key = [this](const std::string& key) { - auto it = std::find(m_opt.enum_values.begin(), m_opt.enum_values.end(), key); - if (it != m_opt.enum_values.end()) - return static_cast(it - m_opt.enum_values.begin()); - return m_opt.default_value ? m_opt.default_value->getInt() : 0; - }; - - int val = 0; - if (m_opt_id == "printer_agent") { - if (const int* int_value = boost::any_cast(&value)) - val = *int_value; - else if (const wxString* wx_value = boost::any_cast(&value)) - val = printer_agent_index_from_key(into_u8(*wx_value)); - else if (const std::string* string_value = boost::any_cast(&value)) - val = printer_agent_index_from_key(*string_value); - else { - m_disable_change_event = false; - return; - } - } else - val = boost::any_cast(value); + int val = boost::any_cast(value); int selection = val; - if (m_opt_id == "printer_agent") { - selection = printer_agent_item_for_enum_index(field, val); - } else if (m_opt_id == "input_shaping_type") { + if (m_opt_id == "input_shaping_type") { if (field != nullptr) { const unsigned int count = field->GetCount(); int match_index = -1; @@ -1920,12 +1835,6 @@ boost::any& Choice::get_value() { if (m_opt.nullable && field->GetSelection() == -1) m_value = ConfigOptionEnumsGenericNullable::nil_value(); - else if (m_opt_id == "printer_agent") - { - const int selection = field->GetSelection(); - const int fallback = m_opt.default_value ? m_opt.default_value->getInt() : 0; - m_value = printer_agent_enum_index_for_item(field, selection, fallback); - } else if (m_opt_id == "input_shaping_type") { int selection = field->GetSelection(); @@ -2067,6 +1976,171 @@ void Choice::msw_rescale() } +// PrinterAgentChoice + +void PrinterAgentChoice::reload_rows() +{ + auto* combo = dynamic_cast(window); // wxWidgets ComboBox + if (!combo) + return; + + // clear ComboBox + combo->Clear(); + + // helpers + const auto agents = NetworkAgentFactory::get_registered_printer_agents(); + const bool has_builtin_agents = std::any_of(agents.begin(), agents.end(), + [](const PrinterAgentInfo& a) { return !a.is_plugin(); }); + const bool has_plugin_agents = std::any_of(agents.begin(), agents.end(), + [](const PrinterAgentInfo& a) { return a.is_plugin(); }); + + auto append_agent_rows = [combo](bool is_plugin) + { + const auto agents = NetworkAgentFactory::get_registered_printer_agents(); + for (size_t i = 0; i < agents.size(); ++i) + { + if (agents[i].is_plugin() != is_plugin) + continue; + const int item = combo->Append(_(agents[i].display_name)); + // why: carry the agent-id string on the row. alias is an owned wxString (auto-freed, never rendered) + combo->SetItemAlias(item, from_u8(agents[i].id)); + } + }; + + // append rows + if (has_builtin_agents) + { + combo->Append(_L("System agents"), wxNullBitmap, DD_ITEM_STYLE_SPLIT_ITEM | DD_ITEM_STYLE_DISABLED); + append_agent_rows(false); // append rows for agents that are not plugins + } + if (has_plugin_agents) + { + combo->Append(_L("Plugins"), wxNullBitmap, DD_ITEM_STYLE_SPLIT_ITEM | DD_ITEM_STYLE_DISABLED); + append_agent_rows(true); // append rows for agents that are plugins + } +} + +void PrinterAgentChoice::BUILD() +{ + wxSize size(def_width_wider() * m_em_unit, wxDefaultCoord); + if (m_opt.height >= 0) size.SetHeight(m_opt.height * m_em_unit); + if (m_opt.width >= 0) size.SetWidth(m_opt.width * m_em_unit); + + static Builder builder; + choice_ctrl* temp = builder.build(m_parent, wxID_ANY, wxString(""), wxDefaultPosition, size, 0, nullptr, + wxCB_READONLY); + temp->Clear(); + temp->GetDropDown().SetUseContentWidth(true); + if (parent_is_custom_ctrl && m_opt.height < 0) + opt_height = (double)temp->GetTextCtrl()->GetSize().GetHeight() / m_em_unit; + temp->SetTextLabel(_L(m_opt.sidetext)); + m_combine_side_text = true; +#ifdef __WXGTK3__ + wxSize best_sz = temp->GetBestSize(); + if (best_sz.x > size.x) temp->SetSize(best_sz); +#endif + if (!wxOSX) temp->SetBackgroundStyle(wxBG_STYLE_PAINT); + + window = dynamic_cast(temp); + + reload_rows(); + + temp->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent&) { on_change_field(); }, temp->GetId()); + temp->SetToolTip(get_tooltip_text(temp->GetValue())); +} + +// Resolve CONFIG id string to a matching row in the live REGISTRY. "" uses the vendor default. +// An unregistered id clears selection and shows " (missing)" as free text. +void PrinterAgentChoice::set_value(const std::string& value, bool change_event) +{ + m_disable_change_event = !change_event; + + auto* field = dynamic_cast(window); + + // check if any row's corresponding id matches the agent id we are attempting to set + const std::string effective_agent_id = wxGetApp().resolve_printer_agent_id(value); + const unsigned int count = field->GetCount(); + int match = wxNOT_FOUND; + for (unsigned int i = 0; i < count; ++i) + { + if (into_u8(field->GetItemAlias(i)) == effective_agent_id) // if alias == id + { + match = static_cast(i); + break; + } + } + + // based on match or not, set selection and value + // - SetSelection and SetValue are UI to manipulate the display of the ComboBox + // - SetSelection automatically calls SetValue for the same value + // - we can also SetValue separately from SetSelection + if (match == wxNOT_FOUND) + { + field->SetSelection(wxNOT_FOUND); // nothing shows as selected in the dropdown + field->SetValue(from_u8(value + " (missing)")); // set a value not in the selection (upper display field) + } + else + { + // display name of agent shows both in upper display field and appears selected in dropdown + field->SetSelection(match); + } + + m_disable_change_event = false; +} + +// Accept boost::any values from callers (usually to OptionsGroup/Field parent classes) and normalize them to an agent id. +// Then use PrinterAgentChoice::set_value(std::string& value, ...) +void PrinterAgentChoice::set_value(const boost::any& value, bool change_event) +{ + m_disable_change_event = !change_event; + + auto* field = dynamic_cast(window); + if (value.empty()) + { + field->SetValue(""); + m_value = value; + m_disable_change_event = false; + return; + } + + std::string id; + if (const std::string* s = boost::any_cast(&value)) + id = *s; + else if (const wxString* w = boost::any_cast(&value)) + id = into_u8(*w); + set_value(id, change_event); +} + +// A real row returns its alias, which is the agent id. Header rows, missing rows, +// and no selection return empty boost::any so the custom writer leaves config unchanged. +boost::any& PrinterAgentChoice::get_value() +{ + auto* field = dynamic_cast(window); + const int sel = field->GetSelection(); + const std::string id = sel < 0 ? std::string{} : into_u8(field->GetItemAlias(sel)); + if (id.empty()) + m_value = boost::any{}; + else + m_value = id; + return m_value; +} + +void PrinterAgentChoice::enable() { dynamic_cast(window)->Enable(); } +void PrinterAgentChoice::disable() { dynamic_cast(window)->Disable(); } + +void PrinterAgentChoice::msw_rescale() +{ + Field::msw_rescale(); + + auto* field = dynamic_cast(window)->GetTextCtrl(); + wxSize size(wxDefaultSize); + size.SetWidth((m_opt.width > 0 ? m_opt.width : def_width_wider()) * m_em_unit); + field->SetMinSize(wxSize(-1, int(1.5f * field->GetFont().GetPixelSize().y + 0.5f))); + field->SetSize(size); + + dynamic_cast(window)->Rescale(); +} + void PluginField::BUILD() { auto* panel = new wxPanel(m_parent, wxID_ANY); diff --git a/src/slic3r/GUI/Field.hpp b/src/slic3r/GUI/Field.hpp index 4e9c65da5d..e57a569561 100644 --- a/src/slic3r/GUI/Field.hpp +++ b/src/slic3r/GUI/Field.hpp @@ -469,6 +469,44 @@ public: void suppress_scroll(); }; +// printer_agent is a coString whose choices come from the live agent registry. +// PrinterAgentChoice uses a ComboBox directly because Choice expects static config enums. +// Real rows carry the stored agent id in the row alias (SetItemAlias/GetItemAlias). +class PrinterAgentChoice : public Field +{ + using Field::Field; + +public: + PrinterAgentChoice(const ConfigOptionDef& opt, const t_config_option_key& id) : Field(opt, id) + { + } + + PrinterAgentChoice(wxWindow* parent, const ConfigOptionDef& opt, const t_config_option_key& id) : Field( + parent, opt, id) + { + } + + ~PrinterAgentChoice() + { + } + + wxWindow* window{nullptr}; + + void BUILD() override; + // Clear and repopulate rows from the live registry (grouped System agents / Plugins). + // Does not change selection; the caller follows with set_value(stored id). + void reload_rows(); + + void set_value(const std::string& value, bool change_event = false); + void set_value(const boost::any& value, bool change_event = false) override; + boost::any& get_value() override; + + void enable() override; + void disable() override; + void msw_rescale() override; + wxWindow* getWindow() override { return window; } +}; + class PluginField : public Field { using Field::Field; public: diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 4c4bdfd62c..83d4f2abaf 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -3873,6 +3873,18 @@ unsigned GUI_App::get_colour_approx_luma(const wxColour &colour) )); } +std::string GUI_App::resolve_printer_agent_id(const std::string& stored_id) +{ + if (!stored_id.empty()) + return stored_id; + return (preset_bundle && preset_bundle->is_bbl_vendor()) ? BBL_PRINTER_AGENT_ID : ORCA_PRINTER_AGENT_ID; +} + +std::string GUI_App::canonical_printer_agent_id(const std::string& picked_id) +{ + return picked_id == resolve_printer_agent_id("") ? std::string() : picked_id; +} + void GUI_App::switch_printer_agent() { if (!m_agent) { @@ -3880,17 +3892,8 @@ void GUI_App::switch_printer_agent() return; } - // Read printer_agent from config, falling back to default - std::string effective_agent_id = ORCA_PRINTER_AGENT_ID; - if (preset_bundle->is_bbl_vendor()) - effective_agent_id = BBL_PRINTER_AGENT_ID; - const DynamicPrintConfig& config = preset_bundle->printers.get_edited_preset().config; - if (config.has("printer_agent")) { - const std::string& value = config.option("printer_agent")->value; - if (!value.empty()) - effective_agent_id = value; - } + const std::string effective_agent_id = resolve_printer_agent_id(config.opt_string("printer_agent")); // Check if agent is registered const PrinterAgentInfo* agent_info_ptr = NetworkAgentFactory::get_printer_agent_info(effective_agent_id); diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp index bda27d40ec..6a977d37fc 100644 --- a/src/slic3r/GUI/GUI_App.hpp +++ b/src/slic3r/GUI/GUI_App.hpp @@ -365,9 +365,14 @@ public: HMSQuery* get_hms_query() { return hms_query; } NetworkAgent* getAgent() { return m_agent; } - // Dynamic printer agent switching + // Reconcile the live printer agent with the stored preset selection. void switch_printer_agent(); + std::string resolve_printer_agent_id(const std::string& stored_id); + // ORCA TODO: in the future, bbl presets should specify "bbl" printer agent id + // then, all resolve and canonical would just be ORCA<->"" + std::string canonical_printer_agent_id(const std::string& picked_id); + FilamentColorCodeQuery* get_filament_color_code_query(); bool is_editor() const { return m_app_mode == EAppMode::Editor; } bool is_gcode_viewer() const { return m_app_mode == EAppMode::GCodeViewer; } diff --git a/src/slic3r/GUI/OptionsGroup.cpp b/src/slic3r/GUI/OptionsGroup.cpp index 9fb4483883..25c13c4b8d 100644 --- a/src/slic3r/GUI/OptionsGroup.cpp +++ b/src/slic3r/GUI/OptionsGroup.cpp @@ -54,6 +54,9 @@ const t_field& OptionsGroup::build_field(const t_config_option_key& id, const Co case ConfigOptionDef::GUIType::one_string: m_fields.emplace(id, TextCtrl::Create(this->ctrl_parent(), opt, id)); break; case ConfigOptionDef::GUIType::plugin_picker: m_fields.emplace(id, PluginField::Create(this->ctrl_parent(), opt, id)); break; case ConfigOptionDef::GUIType::plugin_config: m_fields.emplace(id, PluginConfigField::Create(this->ctrl_parent(), opt, id)); break; + case ConfigOptionDef::GUIType::printer_agent_select: m_fields.emplace( + id, PrinterAgentChoice::Create(this->ctrl_parent(), opt, id)); + break; default: switch (opt.type) { case coFloatOrPercent: @@ -654,6 +657,16 @@ Option ConfigOptionsGroup::get_option(const std::string& opt_key, int opt_index void ConfigOptionsGroup::on_change_OG(const t_config_option_key& opt_id, const boost::any& value) { + if (opt_id == "printer_agent") { + // TODO: Replace this option-specific branch with a generic value adapter if + // more fields need custom field-value to config-value conversion. + if (const std::string* id = boost::any_cast(&value)) + this->change_opt_value("printer_agent", wxGetApp().canonical_printer_agent_id(*id)); + + OptionsGroup::on_change_OG(opt_id, value); + return; + } + if (!m_opt_map.empty()) { auto it = m_opt_map.find(opt_id); if (it == m_opt_map.end()) { @@ -772,6 +785,19 @@ void ConfigOptionsGroup::back_to_config_value(const DynamicPrintConfig& config, } } #endif + else if (opt_key == "printer_agent") + { + // why: printer_agent is a coString kept out of m_opt_map. The generic non-opt_map revert + // below restores the edited config from get_value(), but a deregistered/"(missing)" saved + // id has no selectable row, so the field yields no value and the edited config keeps the + // user's interim pick -> stuck dirty. Restore the SAVED id straight into the edited config + // (displayable or not; config is the saved or system baseline), then repaint and notify. + const std::string saved_id = config.opt_string("printer_agent"); + set_value(opt_key, saved_id); + this->change_opt_value(opt_key, saved_id); + OptionsGroup::on_change_OG(opt_key, saved_id); + return; + } else if (m_opt_map.find(opt_key) == m_opt_map.end() || // This option don't have corresponded field opt_key == "printable_area" || opt_key == "compatible_printers" || opt_key == "compatible_prints" || opt_key == "thumbnails" || diff --git a/src/slic3r/GUI/PhysicalPrinterDialog.cpp b/src/slic3r/GUI/PhysicalPrinterDialog.cpp index b40cd22697..4c9dd60d55 100644 --- a/src/slic3r/GUI/PhysicalPrinterDialog.cpp +++ b/src/slic3r/GUI/PhysicalPrinterDialog.cpp @@ -25,7 +25,6 @@ #include "GUI.hpp" #include "GUI_App.hpp" #include "MainFrame.hpp" -#include "slic3r/Utils/NetworkAgentFactory.hpp" #include "format.hpp" #include "Tab.hpp" #include "wxExtensions.hpp" @@ -128,22 +127,8 @@ PhysicalPrinterDialog::~PhysicalPrinterDialog() void PhysicalPrinterDialog::build_printhost_settings(ConfigOptionsGroup* m_optgroup) { m_optgroup->m_on_change = [this](t_config_option_key opt_key, boost::any value) { - // Special handling for printer_agent: convert fake enum index to string agent ID - if (opt_key == "printer_agent") { - try { - int selected_idx = boost::any_cast(value); - auto agents = NetworkAgentFactory::get_registered_printer_agents(); - if (selected_idx >= 0 && selected_idx < static_cast(agents.size())) { - m_config->set_key_value("printer_agent", - new ConfigOptionString(agents[selected_idx].id)); - } - } catch (const boost::bad_any_cast&) { - // If value is not an int, ignore - } + if (opt_key == "host_type" || opt_key == "printhost_authorization_type") this->update(); - } else if (opt_key == "host_type" || opt_key == "printhost_authorization_type") { - this->update(); - } if (opt_key == "print_host") this->update_printhost_buttons(); if (opt_key == "printhost_port") @@ -154,47 +139,6 @@ void PhysicalPrinterDialog::build_printhost_settings(ConfigOptionsGroup* m_optgr m_optgroup->append_single_option_line("host_type"); - // Build printer agent dropdown from registry (only if network agent is available) - if (wxGetApp().getAgent() != nullptr) { - auto agents = NetworkAgentFactory::get_registered_printer_agents(); - - if (!agents.empty()) { - // Create a fake enum option to force a Choice widget instead of TextCtrl - // (printer_agent is coString in config, but we need a dropdown) - ConfigOptionDef def; - def.type = coEnum; - def.width = Field::def_width_wider(); - def.label = L("Printer Agent"); - def.tooltip = L("Select the network agent implementation for printer communication. " - "Available agents are registered at startup."); - def.mode = comAdvanced; - - // Populate enum values and labels from registered agents - for (const auto& agent : agents) { - def.enum_values.push_back(agent.id); - def.enum_labels.push_back(agent.display_name); - } - - // Resolve selected agent: use config value if valid, otherwise fall back to default - std::string selected_agent = m_config->opt_string("printer_agent"); - auto it = std::find_if(agents.begin(), agents.end(), [&selected_agent](const auto& a) { return a.id == selected_agent; }); - if (it == agents.end()) { - selected_agent = ORCA_PRINTER_AGENT_ID; - it = std::find_if(agents.begin(), agents.end(), [&selected_agent](const auto& a) { return a.id == selected_agent; }); - } - - if (it != agents.end()) { - size_t default_idx = std::distance(agents.begin(), it); - def.set_default_value(new ConfigOptionInt(static_cast(default_idx))); - } - - // Create and append the option line - auto agent_option = Option(def, "printer_agent"); - Line agent_line = m_optgroup->create_single_option_line(agent_option); - m_optgroup->append_line(agent_line); - } - } - auto create_sizer_with_btn = [](wxWindow* parent, Button** btn, const std::string& icon_name, const wxString& label) { *btn = new Button(parent, label); (*btn)->SetStyle(ButtonStyle::Regular, ButtonType::Parameter); @@ -816,31 +760,6 @@ void PhysicalPrinterDialog::update_host_type(bool printer_change) } } -void PhysicalPrinterDialog::update_printer_agent_type() -{ - if (m_config == nullptr) - return; - - Field* agent_field = m_optgroup->get_field("printer_agent"); - if (!agent_field) - return; - - Choice* agent_choice = dynamic_cast(agent_field); - if (!agent_choice) - return; - - // Sync selection with current config value - const std::string current_agent = m_config->opt_string("printer_agent"); - - auto agents = NetworkAgentFactory::get_registered_printer_agents(); - for (size_t i = 0; i < agents.size(); ++i) { - if (agents[i].id == current_agent) { - agent_choice->set_value(i); - return; - } - } -} - void PhysicalPrinterDialog::update_printers() { wxBusyCursor wait; @@ -894,11 +813,6 @@ void PhysicalPrinterDialog::OnOK(wxEvent& event) { wxGetApp().get_tab(Preset::TYPE_PRINTER)->save_preset("", false, false, true, m_preset_name); event.Skip(); - - // Defer printer agent switch to ensure preset save completes first - wxGetApp().CallAfter([] { - wxGetApp().switch_printer_agent(); - }); } }} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/PhysicalPrinterDialog.hpp b/src/slic3r/GUI/PhysicalPrinterDialog.hpp index 694e7aaf90..0ba2cad54f 100644 --- a/src/slic3r/GUI/PhysicalPrinterDialog.hpp +++ b/src/slic3r/GUI/PhysicalPrinterDialog.hpp @@ -60,7 +60,6 @@ public: void update(bool printer_change = false); void update_host_type(bool printer_change); - void update_printer_agent_type(); void update_preset_input(); void update_printhost_buttons(); void update_printers(); diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index c8fa524ca5..857abdce67 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -33,6 +33,7 @@ #include "GUI_App.hpp" #include "GUI_ObjectList.hpp" +#include "slic3r/Utils/NetworkAgentFactory.hpp" #include "slic3r/Utils/PresetUpdater.hpp" #include "slic3r/plugin/PluginConfig.hpp" #include "Plater.hpp" @@ -5018,6 +5019,40 @@ void TabPrinter::build_fff() optgroup->append_single_option_line("gcode_flavor", "printer_basic_information_advanced#g-code-flavor"); optgroup->append_single_option_line("pellet_modded_printer", "printer_basic_information_advanced#pellet-modded-printer"); optgroup->append_single_option_line("bbl_use_printhost", "printer_basic_information_advanced#use-3rd-party-print-host"); + + // "Printer Agent" dropdown - printer_agent is a coString; gui_type routes it to + // PrinterAgentChoice instead of a TextCtrl. Rows and values come from the live agent + // registry, and the value is stored as the agent-id string. + if (wxGetApp().getAgent() != nullptr) + { + auto registered_printer_agents = NetworkAgentFactory::get_registered_printer_agents(); + if (!registered_printer_agents.empty()) + { + ConfigOptionDef def; + def.type = coString; + def.gui_type = ConfigOptionDef::GUIType::printer_agent_select; + def.width = 3 * Field::def_width_wider() / 2; + def.label = L("Printer Agent"); + def.tooltip = L("Select the network agent implementation for printer communication. " + "Available agents are registered at startup."); + def.mode = comAdvanced; + + // Create the field without get_option() so it is not registered in m_opt_map. + // ConfigOptionsGroup handles printer_agent before the generic mapped write path. + Line agent_line = optgroup->create_single_option_line(Option(def, "printer_agent")); + optgroup->append_line(agent_line); + if (Field* agent_field = get_field("printer_agent")) + { + if (auto* choice = dynamic_cast(agent_field); choice && choice->getWindow()) + choice->set_value(m_config->opt_string("printer_agent"), false); + } + + // Register by hand so the UnsavedChanges dialog can render a row for it. + wxGetApp().sidebar().get_searcher().add_key("printer_agent", m_type, optgroup->title, + optgroup->config_category()); + } + } + optgroup->append_single_option_line("use_3mf"); optgroup->append_single_option_line("scan_first_layer" , "printer_basic_information_advanced#scan-first-layer"); optgroup->append_single_option_line("enable_power_loss_recovery", "printer_basic_information_advanced#power-loss-recovery"); @@ -5884,6 +5919,16 @@ void TabPrinter::reload_config() // so update it implicitly if (m_active_page && m_active_page->title() == "Multimaterial") m_active_page->set_value("extruders_count", int(m_extruders_count)); + + // m_opt_map-driven reload does not cover printer_agent, so sync this custom field explicitly. + if (Field* agent_field = get_field("printer_agent")) + { + if (auto* choice = dynamic_cast(agent_field); choice && choice->getWindow()) + { + const std::string selected_agent = m_config->opt_string("printer_agent"); + choice->set_value(selected_agent, false); + } + } } void TabPrinter::activate_selected_page(std::function throw_if_canceled) @@ -5894,6 +5939,16 @@ void TabPrinter::activate_selected_page(std::function throw_if_canceled) // so update it implicitly if (m_active_page && m_active_page->title() == "Multimaterial") m_active_page->set_value("extruders_count", int(m_extruders_count)); + + // m_opt_map-driven reload does not cover printer_agent, so sync this custom field explicitly. + if (Field* agent_field = get_field("printer_agent")) + { + if (auto* choice = dynamic_cast(agent_field); choice && choice->getWindow()) + { + const std::string selected_agent = m_config->opt_string("printer_agent"); + choice->set_value(selected_agent, false); + } + } } void TabPrinter::clear_pages() From 15342681831a73e028f745c9c2d8b2efd8f44f71 Mon Sep 17 00:00:00 2001 From: Andrew <159703254+andrewsoonqn@users.noreply.github.com> Date: Thu, 16 Jul 2026 16:27:53 +0800 Subject: [PATCH 10/66] Reset device selection on agent swap or unload (#124) set_live_printer_agent centralizes the swap: deselect the machine, clear stale sidebar state and the previous agent's Other Devices, then install the new agent (or null when its provider vanished). Plugin load/unload callbacks refresh the dropdown and re-run agent selection. load_last_machine no longer falls back to the first available machine. --- src/slic3r/GUI/DeviceCore/DevManager.cpp | 70 ++++++++--------- src/slic3r/GUI/DeviceCore/DevManager.h | 8 +- src/slic3r/GUI/GUI_App.cpp | 95 +++++++++++++++++++++--- src/slic3r/GUI/GUI_App.hpp | 5 ++ src/slic3r/GUI/Tab.cpp | 18 +++++ src/slic3r/GUI/Tab.hpp | 1 + 6 files changed, 150 insertions(+), 47 deletions(-) diff --git a/src/slic3r/GUI/DeviceCore/DevManager.cpp b/src/slic3r/GUI/DeviceCore/DevManager.cpp index 2d54b5c85f..3c664facfd 100644 --- a/src/slic3r/GUI/DeviceCore/DevManager.cpp +++ b/src/slic3r/GUI/DeviceCore/DevManager.cpp @@ -496,6 +496,26 @@ namespace Slic3r OnSelectedMachineChanged(previous_selected_machine, selected_machine); } + void DeviceManager::clear_other_devices() + { + // why: on agent swap, keep "My Devices" but drop the transient "Other Devices" + // Those belong to the previous agent's network scan; the new agent's start_discovery re-populates its own. + const auto my = get_my_machine_list(); + for (auto it = localMachineList.begin(); it != localMachineList.end();) + { + if (my.find(it->first) == my.end()) + { + // not a "My Device" -> an "Other Device" + delete it->second; + it = localMachineList.erase(it); + } + else + { + ++it; + } + } + } + bool DeviceManager::set_selected_machine(std::string dev_id) { BOOST_LOG_TRIVIAL(info) << "set_selected_machine=" << dev_id @@ -558,7 +578,6 @@ namespace Slic3r } else { - Slic3r::GUI::wxGetApp().reset_unsigned_plugin_warning(); if (m_agent) { if (it->second->connection_type() != "lan" || it->second->connection_type().empty()) @@ -592,7 +611,6 @@ namespace Slic3r } selected_machine = dev_id; - record_user_last_machine(selected_machine); return true; } @@ -851,44 +869,26 @@ namespace Slic3r int result = m_agent->get_user_print_info(&http_code, &body, provider); if (result == 0) { - parse_user_print_info(body); + // parse_user_print_info and on_machine_alive (SSDP for discovery) both mutate the same userMachineList map. + // on_machine_alive mutates the map on the UI thread, do the same for parse_user_print_info. + Slic3r::GUI::wxGetApp().CallAfter([this, body]() { parse_user_print_info(body); }); } } - void DeviceManager::record_user_last_machine(const std::string& dev_id) - { - if (Slic3r::GUI::wxGetApp().app_config) { - Slic3r::GUI::wxGetApp().app_config->set("user_last_selected_machine", dev_id); - } - } - - std::string DeviceManager::get_user_last_machine() const - { - if (Slic3r::GUI::wxGetApp().app_config) { - const auto& user_last_machine = Slic3r::GUI::wxGetApp().app_config->get("user_last_selected_machine"); - if (!user_last_machine.empty()) { - return user_last_machine; - } else if (m_agent) { - return m_agent->get_user_selected_machine(); - } - } - - return ""; - } - void DeviceManager::load_last_machine() { - if (userMachineList.empty()) return; - else if (userMachineList.size() == 1) { - this->set_selected_machine(userMachineList.begin()->second->get_dev_id()); - } else { - const auto& last_monitor_machine = get_user_last_machine(); - if (userMachineList.find(last_monitor_machine) != userMachineList.end()) { - set_selected_machine(last_monitor_machine); - } else { - this->set_selected_machine(userMachineList.begin()->second->get_dev_id()); - } - } + // Get all available machines, include cloud machines and lan machines that have access right + auto all_machines = get_my_machine_list(); + if (all_machines.empty()) + return; + + // Reconnect the machine the user last selected, if it's still available. + // why: no first-available fallback - auto-connecting an arbitrary machine + // fights the agent-swap reset, which intentionally leaves nothing selected. + const std::string last_monitor_machine = m_agent ? m_agent->get_user_selected_machine() : ""; + const auto last_machine = all_machines.find(last_monitor_machine); + if (last_machine != all_machines.end()) + this->set_selected_machine(last_machine->second->get_dev_id()); } void DeviceManager::OnMachineBindStateChanged(MachineObject* obj, const std::string& new_state) diff --git a/src/slic3r/GUI/DeviceCore/DevManager.h b/src/slic3r/GUI/DeviceCore/DevManager.h index 1f7f87b7fb..70bee613a8 100644 --- a/src/slic3r/GUI/DeviceCore/DevManager.h +++ b/src/slic3r/GUI/DeviceCore/DevManager.h @@ -48,8 +48,9 @@ public: MachineObject* get_selected_machine(); bool set_selected_machine(std::string dev_id); - void record_user_last_machine(const std::string& dev_id); - std::string get_user_last_machine() const; + // why: clears stale sidebar sync-status / AMS visuals. Public so the printer-agent + // swap path can reuse it instead of duplicating the two sidebar calls. + void OnSelectedMachineLost(); // local machine void set_local_selected_machine(std::string dev_id) { local_selected_machine = dev_id; }; @@ -70,6 +71,8 @@ public: void erase_user_machine(std::string dev_id) { userMachineList.erase(dev_id); } void clean_user_info(bool keep_local_selection = false); + void clear_other_devices(); + void load_last_machine(); void update_user_machine_list_info(const std::string& provider); void parse_user_print_info(std::string body); @@ -110,7 +113,6 @@ private: void check_pushing(); void OnMachineBindStateChanged(MachineObject* obj, const std::string& new_state); - void OnSelectedMachineLost(); void OnSelectedMachineChanged(const std::string& pre_dev_id, const std::string& new_dev_id); diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 83d4f2abaf..14edeb8038 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -2809,16 +2809,58 @@ void GUI_App::init_plugin_gui_wiring() }); }; + // why: a newly loaded plugin only adds a selectable agent + // refresh the dropdown and leave the live agent alone + auto refresh_printer_agent_dropdown_after_load = [](const std::string&) + { + if (!wxTheApp) + return; + + GUI_App* app = &GUI::wxGetApp(); + if (app->is_closing()) + return; + + app->CallAfter([app] + { + if (!app->is_closing()) + app->refresh_printer_agent_dropdown(); + }); + }; + + // why: the unloaded plugin may have been the provider of the live agent + // re-run selection, where a now-missing agent will be cleared + // refresh dropdown after + auto switch_printer_agent_after_unload = [](const std::string&) + { + if (!wxTheApp) + return; + + GUI_App* app = &GUI::wxGetApp(); + if (app->is_closing()) + return; + + app->CallAfter([app] { + if (app->is_closing()) + return; + + app->switch_printer_agent(); + app->refresh_printer_agent_dropdown(); + }); + }; + plugin_mgr.subscribe_on_unload_callback(PluginHostUi::close_windows_for_plugin); plugin_mgr.subscribe_on_load_callback([refresh_plugins_dialog](const std::string&) { refresh_plugins_dialog(); }); plugin_mgr.subscribe_on_unload_callback([refresh_plugins_dialog](const std::string&) { refresh_plugins_dialog(); }); plugin_mgr.subscribe_on_load_callback(NetworkAgentFactory::register_python_plugin); plugin_mgr.subscribe_on_unload_callback(NetworkAgentFactory::deregister_python_plugin); + plugin_mgr.subscribe_on_load_callback(refresh_printer_agent_dropdown_after_load); + plugin_mgr.subscribe_on_unload_callback(switch_printer_agent_after_unload); plugin_mgr.subscribe_on_capability_load_callback( - [refresh_plugins_dialog](const PluginCapabilityId& capability) { + [refresh_plugins_dialog, refresh_printer_agent_dropdown_after_load](const PluginCapabilityId& capability) { if (capability.type == PluginCapabilityType::PrinterConnection) NetworkAgentFactory::register_python_printer_agent(capability.plugin_key, capability.name); refresh_plugins_dialog(); + refresh_printer_agent_dropdown_after_load(capability.plugin_key); // A newly loaded capability may satisfy a missing-plugin notification; re-validate the // current plate (on the UI thread) so the notification clears once its plugin is available. if (wxTheApp && !wxGetApp().is_closing()) @@ -2828,10 +2870,11 @@ void GUI_App::init_plugin_gui_wiring() }); }); plugin_mgr.subscribe_on_capability_unload_callback( - [refresh_plugins_dialog](const PluginCapabilityId& capability) { + [refresh_plugins_dialog, switch_printer_agent_after_unload](const PluginCapabilityId& capability) { if (capability.type == PluginCapabilityType::PrinterConnection) NetworkAgentFactory::deregister_python_printer_agent(capability.plugin_key, capability.name); refresh_plugins_dialog(); + switch_printer_agent_after_unload(capability.plugin_key); }); } @@ -3873,6 +3916,36 @@ unsigned GUI_App::get_colour_approx_luma(const wxColour &colour) )); } +void GUI_App::refresh_printer_agent_dropdown() +{ + if (Tab* tab = get_tab(Preset::TYPE_PRINTER)) + { + if (auto* printer_tab = dynamic_cast(tab)) + printer_tab->refresh_printer_agent_dropdown(); + } +} + +void GUI_App::set_live_printer_agent(std::shared_ptr agent) +{ + if (!m_agent) + return; + + // why: tearing down the old machine selection is only ever the prefix of setting the live + // agent (to a new one, or to null when the selection is missing) - so it lives here, not as + // a standalone helper. Pass nullptr to clear the selection. + if (DeviceManager* dev = getDeviceManager()) + { + dev->set_selected_machine(""); // why: empty id disconnects and deselects the current machine + m_agent->set_user_selected_machine(""); + // note: belt-and-suspenders (precedent: DeviceManagerRefresher::on_timer) + dev->OnSelectedMachineLost(); // why: clear stale sidebar sync-status / AMS + dev->clear_other_devices(); // why: drop stale LAN discoveries; keep My Devices + } + + m_agent->set_printer_agent(agent); + sidebar().update_all_preset_comboboxes(); +} + std::string GUI_App::resolve_printer_agent_id(const std::string& stored_id) { if (!stored_id.empty()) @@ -3898,9 +3971,11 @@ void GUI_App::switch_printer_agent() // Check if agent is registered const PrinterAgentInfo* agent_info_ptr = NetworkAgentFactory::get_printer_agent_info(effective_agent_id); if (!agent_info_ptr) { - BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << ": unregistered agent ID '" << effective_agent_id - << "', keeping current agent"; - // Keep current agent, don't switch + // why: the selected agent's provider is gone (e.g. plugin unloaded); leaving the old + // live agent up would keep talking to a machine the user can no longer select. + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": agent ID '" << effective_agent_id + << "' is unregistered; clearing live printer agent"; + set_live_printer_agent(nullptr); return; } const PrinterAgentInfo agent_info = *agent_info_ptr; @@ -3914,7 +3989,9 @@ void GUI_App::switch_printer_agent() NetworkAgentFactory::create_printer_agent_by_id(effective_agent_id, cloud_agent, log_dir); if (!new_printer_agent) { - BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << ": failed to create agent '" << effective_agent_id << "', keeping current agent"; + BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << ": failed to create agent '" << effective_agent_id + << "'; clearing live printer agent"; + set_live_printer_agent(nullptr); return; } @@ -3937,9 +4014,9 @@ void GUI_App::switch_printer_agent() return; } - // Swap the agent - m_agent->set_printer_agent(new_printer_agent); - sidebar().update_all_preset_comboboxes(); + // Swap the agent; set_live_printer_agent resets the device selection so the new + // agent starts clean (#124). + set_live_printer_agent(new_printer_agent); BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": printer agent switched to " << effective_agent_id; diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp index 6a977d37fc..8bf32df64c 100644 --- a/src/slic3r/GUI/GUI_App.hpp +++ b/src/slic3r/GUI/GUI_App.hpp @@ -803,6 +803,11 @@ private: void window_pos_center(wxTopLevelWindow *window); bool select_language(); + // Dynamic printer agent selection - internal helpers for switch_printer_agent + // and the plugin load/unload callbacks (init_plugin_gui_wiring). + void refresh_printer_agent_dropdown(); + void set_live_printer_agent(std::shared_ptr agent); // null clears the selection + bool config_wizard_startup(); void check_updates(const bool verbose); diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 857abdce67..bade7fee98 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -7907,6 +7907,24 @@ bool TabPrinter::apply_extruder_cnt_from_cache() return false; } +void TabPrinter::refresh_printer_agent_dropdown() const +{ + auto* choice = dynamic_cast(get_field("printer_agent")); + if (!choice || !choice->getWindow()) + return; + + const auto agents = NetworkAgentFactory::get_registered_printer_agents(); + if (agents.empty()) + return; + + // why: rows live on PrinterAgentChoice now; rebuild them from the live registry and re-select the stored id. + const std::string selected_agent = wxGetApp().preset_bundle->printers.get_edited_preset() + .config.opt_string("printer_agent"); + choice->reload_rows(); + choice->set_value(selected_agent, false); + this->GetParent()->Layout(); +} + bool Tab::validate_custom_gcodes() { if (m_type != Preset::TYPE_FILAMENT && diff --git a/src/slic3r/GUI/Tab.hpp b/src/slic3r/GUI/Tab.hpp index 7187aff467..19eb0b849d 100644 --- a/src/slic3r/GUI/Tab.hpp +++ b/src/slic3r/GUI/Tab.hpp @@ -675,6 +675,7 @@ public: wxSizer* create_bed_shape_widget(wxWindow* parent); void cache_extruder_cnt(const DynamicPrintConfig* config = nullptr); bool apply_extruder_cnt_from_cache(); + void refresh_printer_agent_dropdown() const; }; class TabSLAMaterial : public Tab From 8dfc7a14b9287e4f983c8bcb37037cb5d0cb8fde Mon Sep 17 00:00:00 2001 From: Andrew <159703254+andrewsoonqn@users.noreply.github.com> Date: Thu, 16 Jul 2026 16:36:47 +0800 Subject: [PATCH 11/66] Gate agent mode behind use_printer_agents toggle Replace per-printer auto-activation (is_current_printer_agent_plugin) with a global experimental AppConfig toggle, default off: legacy print-host behavior is unchanged until the user opts in. The toggle drives device-tab routing, print button defaults, connect-button visibility and sidebar layout, and dedups machine-select dialog opens. --- src/slic3r/GUI/MainFrame.cpp | 9 ++-- src/slic3r/GUI/PhysicalPrinterDialog.cpp | 2 +- src/slic3r/GUI/Plater.cpp | 54 +++++++++++++----------- src/slic3r/GUI/Preferences.cpp | 8 ++++ src/slic3r/Utils/NetworkAgentFactory.cpp | 20 --------- src/slic3r/Utils/NetworkAgentFactory.hpp | 2 - 6 files changed, 43 insertions(+), 52 deletions(-) diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 7b638e3316..39082a9dca 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -708,7 +708,7 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, BORDERLESS_FRAME_ m_print_enable = get_enable_print_status(); m_print_btn->Enable(m_print_enable); if (m_print_enable) { - if (wxGetApp().preset_bundle->use_bbl_network()) + if (wxGetApp().preset_bundle->use_bbl_network() || wxGetApp().app_config->get_bool("use_printer_agents")) wxPostEvent(m_plater, SimpleEvent(EVT_GLTOOLBAR_PRINT_PLATE)); else wxPostEvent(m_plater, SimpleEvent(EVT_GLTOOLBAR_SEND_GCODE)); @@ -1999,7 +1999,8 @@ wxBoxSizer* MainFrame::create_side_tools() SidePopup* p = new SidePopup(this); if (wxGetApp().preset_bundle - && !wxGetApp().preset_bundle->is_bbl_vendor()) { + && !wxGetApp().preset_bundle->is_bbl_vendor() + && !wxGetApp().app_config->get_bool("use_printer_agents")) { // ThirdParty Buttons SideButton* export_gcode_btn = new SideButton(p, _L("Export G-code file"), ""); export_gcode_btn->SetCornerRadius(0); @@ -2132,7 +2133,7 @@ wxBoxSizer* MainFrame::create_side_tools() const auto preset_bundle = wxGetApp().preset_bundle; if (preset_bundle) { - if (preset_bundle->use_bbl_network()) { + if (preset_bundle->use_bbl_network() || wxGetApp().app_config->get_bool("use_printer_agents")) { // BBL network support everything } else { support_send = false; // All 3rd print hosts do not have the send options @@ -4253,7 +4254,7 @@ void MainFrame::load_printer_url(wxString url, wxString apikey) void MainFrame::load_printer_url() { PresetBundle &preset_bundle = *wxGetApp().preset_bundle; - if (preset_bundle.use_bbl_device_tab() || NetworkAgentFactory::is_current_printer_agent_plugin()) + if (preset_bundle.use_bbl_device_tab() || wxGetApp().app_config->get_bool("use_printer_agents")) return; auto cfg = preset_bundle.printers.get_edited_preset().config; diff --git a/src/slic3r/GUI/PhysicalPrinterDialog.cpp b/src/slic3r/GUI/PhysicalPrinterDialog.cpp index 4c9dd60d55..989cf204e1 100644 --- a/src/slic3r/GUI/PhysicalPrinterDialog.cpp +++ b/src/slic3r/GUI/PhysicalPrinterDialog.cpp @@ -669,7 +669,7 @@ void PhysicalPrinterDialog::update(bool printer_change) } // For bbl printers, show option to control the device tab - if (wxGetApp().preset_bundle->is_bbl_vendor()) { + if (wxGetApp().preset_bundle->is_bbl_vendor() || wxGetApp().app_config->get_bool("use_printer_agents")) { m_optgroup->show_field("bbl_use_print_host_webui"); const bool use_print_host_webui = !current_webui.empty(); if (Field* printhost_webui_field = m_optgroup->get_field("bbl_use_print_host_webui"); printhost_webui_field) { diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 106c142fea..d83ddded34 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -3246,7 +3246,7 @@ void Sidebar::update_all_preset_comboboxes() auto p_mainframe = wxGetApp().mainframe; auto cfg = preset_bundle.printers.get_edited_preset().config; - const bool use_native_device_tab = preset_bundle.use_bbl_device_tab() || NetworkAgentFactory::is_current_printer_agent_plugin(); + const bool use_native_device_tab = preset_bundle.use_bbl_device_tab() || wxGetApp().app_config->get_bool("use_printer_agents"); if (preset_bundle.use_bbl_network()) { //only show connection button for not-BBL printer @@ -3258,7 +3258,8 @@ void Sidebar::update_all_preset_comboboxes() p_mainframe->set_print_button_to_default(MainFrame::PrintSelectType::ePrintPlate); } else { //p->btn_connect_printer->Show(); - p->m_printer_connect->Show(); + // ORCA: hide the physical-printer connection button when printer agents are enabled + p->m_printer_connect->Show(!wxGetApp().app_config->get_bool("use_printer_agents")); // ORCA: show/hide sync-ams button based on filament sync mode auto agent = wxGetApp().getAgent(); @@ -3280,7 +3281,9 @@ void Sidebar::update_all_preset_comboboxes() const auto host_type = cfg.option>("host_type")->value; if (cfg.has("printhost_apikey") && (host_type != htSimplyPrint)) apikey = cfg.opt_string("printhost_apikey"); - print_btn_type = preset_bundle.is_bbl_vendor() ? MainFrame::PrintSelectType::ePrintPlate : MainFrame::PrintSelectType::eSendGcode; + print_btn_type = (preset_bundle.is_bbl_vendor() || wxGetApp().app_config->get_bool("use_printer_agents")) + ? MainFrame::PrintSelectType::ePrintPlate + : MainFrame::PrintSelectType::eSendGcode; } if (!use_native_device_tab) @@ -3439,7 +3442,10 @@ void Sidebar::update_presets(Preset::Type preset_type) bool isBBL = preset_bundle.is_bbl_vendor(); bool is_dual_extruder = extruder_variants->size() == 2; - p->layout_printer(preset_bundle.use_bbl_network(), isBBL && is_dual_extruder); + // why: agent mode drives the native device tab, so the sidebar lays out like BBL + // (no physical-printer connect button). + p->layout_printer(preset_bundle.use_bbl_network() || wxGetApp().app_config->get_bool("use_printer_agents"), + isBBL && is_dual_extruder); // Update nozzle titles from printer config (e.g. "Main Nozzle" / "Auxiliary Nozzle" for N6) // UI left = DEPUTY_EXTRUDER_ID(1), UI right = MAIN_EXTRUDER_ID(0) @@ -5625,6 +5631,7 @@ struct Plater::priv void on_action_slice_all(SimpleEvent&); void on_action_publish(wxCommandEvent &evt); void on_action_print_plate(SimpleEvent&); + void open_machine_select_dialog(int plate_idx, PrintFromType print_type = PrintFromType::FROM_NORMAL); void on_action_print_all(SimpleEvent&); void on_action_export_gcode(SimpleEvent&); void on_action_send_gcode(SimpleEvent&); @@ -11166,18 +11173,23 @@ void Plater::priv::on_action_print_plate(SimpleEvent&) } PresetBundle& preset_bundle = *wxGetApp().preset_bundle; - if (preset_bundle.use_bbl_network()) { - // BBS - if (!m_select_machine_dlg) - m_select_machine_dlg = new SelectMachineDialog(q); - m_select_machine_dlg->set_print_type(PrintFromType::FROM_NORMAL); - m_select_machine_dlg->prepare(partplate_list.get_curr_plate_index()); - m_select_machine_dlg->ShowModal(); + if (preset_bundle.use_bbl_network() || wxGetApp().app_config->get_bool("use_printer_agents")) { + open_machine_select_dialog(partplate_list.get_curr_plate_index()); } else { q->send_gcode_legacy(PLATE_CURRENT_IDX, nullptr); } } +void Plater::priv::open_machine_select_dialog(int plate_idx, PrintFromType print_type) +{ + // BBS + if (!m_select_machine_dlg) + m_select_machine_dlg = new SelectMachineDialog(q); + m_select_machine_dlg->set_print_type(print_type); + m_select_machine_dlg->prepare(plate_idx); + m_select_machine_dlg->ShowModal(); +} + void Plater::priv::on_action_send_to_multi_machine(SimpleEvent&) { if (!m_send_multi_dlg) @@ -11193,10 +11205,7 @@ void Plater::priv::on_action_print_plate_from_sdcard(SimpleEvent&) } //BBS - if (!m_select_machine_dlg) m_select_machine_dlg = new SelectMachineDialog(q); - m_select_machine_dlg->set_print_type(PrintFromType::FROM_SDCARD_VIEW); - m_select_machine_dlg->prepare(0); - m_select_machine_dlg->ShowModal(); + open_machine_select_dialog(0, PrintFromType::FROM_SDCARD_VIEW); } void Plater::priv::on_tab_selection_changing(wxBookCtrlEvent& e) @@ -11211,13 +11220,13 @@ void Plater::priv::on_tab_selection_changing(wxBookCtrlEvent& e) sidebar_layout.show = new_sel == MainFrame::tp3DEditor || new_sel == MainFrame::tpPreview; update_sidebar(); int old_sel = e.GetOldSelection(); - const bool is_printer_agent_plugin = NetworkAgentFactory::is_current_printer_agent_plugin(); + const bool use_printer_agents = wxGetApp().app_config->get_bool("use_printer_agents"); const bool use_native_device_tab = wxGetApp().preset_bundle && - (wxGetApp().preset_bundle->use_bbl_device_tab() || is_printer_agent_plugin); + (wxGetApp().preset_bundle->use_bbl_device_tab() || use_printer_agents); if (use_native_device_tab && new_sel == MainFrame::tpMonitor) { // BBL network module is only required for BBL-vendor printers. // Non-BBL Python plugins (e.g. moonraker) drive the Device tab without it. - if (!is_printer_agent_plugin && wxGetApp().preset_bundle->is_bbl_vendor() && !Slic3r::NetworkAgent::is_network_module_loaded()) { + if (!use_printer_agents && wxGetApp().preset_bundle->is_bbl_vendor() && !Slic3r::NetworkAgent::is_network_module_loaded()) { e.Veto(); BOOST_LOG_TRIVIAL(info) << boost::format("skipped tab switch from %1% to %2%, lack of network plugins") % old_sel % new_sel; if (q) { @@ -11273,13 +11282,8 @@ void Plater::priv::on_action_print_all(SimpleEvent&) } PresetBundle& preset_bundle = *wxGetApp().preset_bundle; - if (preset_bundle.use_bbl_network()) { - // BBS - if (!m_select_machine_dlg) - m_select_machine_dlg = new SelectMachineDialog(q); - m_select_machine_dlg->set_print_type(PrintFromType::FROM_NORMAL); - m_select_machine_dlg->prepare(PLATE_ALL_IDX); - m_select_machine_dlg->ShowModal(); + if (preset_bundle.use_bbl_network() || wxGetApp().app_config->get_bool("use_printer_agents")) { + open_machine_select_dialog(PLATE_ALL_IDX); } else { q->send_gcode_legacy(PLATE_ALL_IDX, nullptr); } diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp index 1a3c6fd26a..f802ba6ecb 100644 --- a/src/slic3r/GUI/Preferences.cpp +++ b/src/slic3r/GUI/Preferences.cpp @@ -1135,6 +1135,14 @@ wxBoxSizer *PreferencesDialog::create_item_checkbox(wxString title, wxString too wxGetApp().plater()->sidebar().update_presets(Preset::TYPE_FILAMENT); } + if (param == "use_printer_agents") + { + // Rebuild the Device tab so the native/web-UI choice reflects the new flag + // immediately, instead of only on the next printer-preset change or restart. + if (wxGetApp().plater()) + wxGetApp().plater()->sidebar().update_all_preset_comboboxes(); + } + if (param == "enable_high_low_temp_mixed_printing") { if (checkbox->GetValue()) { const wxString warning_title = _L("Bed Temperature Difference Warning"); diff --git a/src/slic3r/Utils/NetworkAgentFactory.cpp b/src/slic3r/Utils/NetworkAgentFactory.cpp index 3883d99f2e..ff950d0946 100644 --- a/src/slic3r/Utils/NetworkAgentFactory.cpp +++ b/src/slic3r/Utils/NetworkAgentFactory.cpp @@ -465,25 +465,5 @@ void NetworkAgentFactory::deregister_python_printer_agent(const std::string& plu << plugin_key << "' with agent ID '" << agent_id << "'"; } -bool NetworkAgentFactory::is_current_printer_agent_plugin() -{ - auto* preset_bundle = GUI::wxGetApp().preset_bundle; - if (!preset_bundle) - return false; - - std::string agent_key = ORCA_PRINTER_AGENT_ID; - if (preset_bundle->is_bbl_vendor()) - agent_key = BBL_PRINTER_AGENT_ID; - - const auto& cfg = preset_bundle->printers.get_edited_preset().config; - if (cfg.has("printer_agent")) { - const std::string& value = cfg.option("printer_agent")->value; - if (!value.empty()) - agent_key = value; - } - - const PrinterAgentInfo* info = get_printer_agent_info(agent_key); - return info && info->is_plugin(); -} } // namespace Slic3r diff --git a/src/slic3r/Utils/NetworkAgentFactory.hpp b/src/slic3r/Utils/NetworkAgentFactory.hpp index cfff6fb1c7..a055b19493 100644 --- a/src/slic3r/Utils/NetworkAgentFactory.hpp +++ b/src/slic3r/Utils/NetworkAgentFactory.hpp @@ -166,8 +166,6 @@ public: static void register_python_printer_agent(const std::string& plugin_key, const std::string& capability_name); static void deregister_python_printer_agent(const std::string& plugin_key, const std::string& capability_name); - static bool is_current_printer_agent_plugin(); - private: // Factory is not instantiable NetworkAgentFactory() = delete; From 79dcace1acfd1d9a66a7eda20c1e7e685c091bd2 Mon Sep 17 00:00:00 2001 From: Ian Chua Date: Tue, 4 Aug 2026 21:26:50 +0800 Subject: [PATCH 12/66] Add unsupported-command feedback to the device UI --- src/slic3r/GUI/DeviceManager.cpp | 34 ++++++++++++++++++++++++++++++++ src/slic3r/GUI/DeviceManager.hpp | 2 ++ 2 files changed, 36 insertions(+) diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index 5499694686..ef85870461 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -4647,6 +4647,40 @@ void MachineObject::set_ctt_dlg( wxString text){ } } +void MachineObject::show_unsupported_dlg(int code) +{ + // why: a dead control invites repeat clicks, and the frame is modeless - without the guard + // every click stacks another one. Same shape as set_ctt_dlg above, including the reset on + // both hide and close so a dismissed dialog can reappear on the next attempt. + if (m_unsupported_dlg_shown) { + return; + } + m_unsupported_dlg_shown = true; + + // why: two codes so the user learns which kind of dead end this is - the slicer having no + // translation for the command, or the printer's own config lacking the hardware to run it. + const wxString text = (code == ORCA_NETWORK_ERR_CAP_NOT_AVAILABLE) ? + _L("This printer is not configured with the hardware this control needs.") : + _L("This control is not supported on this printer."); + + // note: constructed directly rather than through CallAfter because every publish_json caller + // is on the UI thread - clicks come from wx handlers, and the agent marshals its own push + // callbacks back to main before parse_json runs. set_ctt_dlg relies on the same property. + auto unsupported_dlg = new GUI::SecondaryCheckDialog(nullptr, wxID_ANY, _L("Warning"), + GUI::SecondaryCheckDialog::VisibleButtons::ONLY_CONFIRM); + unsupported_dlg->update_text(text); + unsupported_dlg->Bind(wxEVT_SHOW, [this](auto& e) { + if (!e.IsShown()) { + m_unsupported_dlg_shown = false; + } + }); + unsupported_dlg->Bind(wxEVT_CLOSE_WINDOW, [this](auto& e) { + e.Skip(); + m_unsupported_dlg_shown = false; + }); + unsupported_dlg->on_show(); +} + int MachineObject::publish_gcode(std::string gcode_str) { json j; diff --git a/src/slic3r/GUI/DeviceManager.hpp b/src/slic3r/GUI/DeviceManager.hpp index 456901cf84..2790e37cfa 100644 --- a/src/slic3r/GUI/DeviceManager.hpp +++ b/src/slic3r/GUI/DeviceManager.hpp @@ -272,9 +272,11 @@ public: bool m_is_online; bool m_lan_mode_connection_state{false}; bool m_set_ctt_dlg{ false }; + bool m_unsupported_dlg_shown{ false }; void set_lan_mode_connection_state(bool state) {m_lan_mode_connection_state = state;}; bool get_lan_mode_connection_state() {return m_lan_mode_connection_state;}; void set_ctt_dlg( wxString text); + void show_unsupported_dlg(int code); int parse_msg_count = 0; int keep_alive_count = 0; std::chrono::system_clock::time_point last_update_time; /* last received print data from machine */ From 59155f26ac05d38817835d408a435f207b251477 Mon Sep 17 00:00:00 2001 From: Ian Bassi Date: Tue, 4 Aug 2026 10:56:15 -0300 Subject: [PATCH 13/66] Build Arch Fix (#15107) Arch Fix --- src/libslic3r/AABBTreeLines.hpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/libslic3r/AABBTreeLines.hpp b/src/libslic3r/AABBTreeLines.hpp index 97ad1bdf44..52c4cdf545 100644 --- a/src/libslic3r/AABBTreeLines.hpp +++ b/src/libslic3r/AABBTreeLines.hpp @@ -31,8 +31,9 @@ namespace AABBTreeLines { inline VectorType closest_point_to_origin(size_t primitive_index, ScalarType& squared_distance) const { Vec nearest_point; + Vec cast_origin = origin.template cast(); const LineType& line = lines[primitive_index]; - squared_distance = line_alg::distance_to_squared(line, origin.template cast(), &nearest_point); + squared_distance = line_alg::distance_to_squared(line, cast_origin, &nearest_point); return nearest_point.template cast(); } }; From 82759d3899745efbacc10e5bf9737cc5b23097dd Mon Sep 17 00:00:00 2001 From: Kris Austin Date: Tue, 4 Aug 2026 09:01:45 -0500 Subject: [PATCH 14/66] fix: make the error dialog caret point at the character it's blaming (#14886) * fix: make the error dialog caret point at the character it's blaming Custom G-code parse errors print the offending line with a '^' under the character that broke, positioned with spaces so it only lines up in a fixed-width font. Since v2.3.2 these dialogs rendered entirely in the proportional UI font, so the caret drifted left of its column and landed on unrelated text. Render only the code excerpts (the offending source line and its caret) in the fixed-width face, leaving the surrounding prose in the UI font, and reserve the horizontal scrollbar's height so a long line does not clip. Rename the flag to has_code_excerpts to match what it now means. Fixes #14869 * refactor(GUI): use instead of for error excerpts wxHTML maps , , and to the same fixed-width handler, so this renders identically. is the non-deprecated tag and matches what the original code used. * fix(GUI): align the error caret with real spaces, not   The caret line was padded with   so its spaces would survive inline HTML. wxHTML measures every glyph by its font extent, so where the fixed font lacks a U+00A0 glyph the fallback renders it about twice as wide, and the all-  caret line outran the source, drifting the ^ to the right. Wrap the excerpts in a small tag, registered on the dialog's own parser, that switches on wxHTML literal-whitespace mode so the caret uses real spaces that match the source column in any font. It sits inside for the fixed face;
 would do both but forces a blank line above it.

---------

Co-authored-by: Noisyfox 
---
 src/libslic3r/PlaceholderParser.cpp |   2 +
 src/slic3r/GUI/GUI.cpp              |   8 +-
 src/slic3r/GUI/GUI.hpp              |  10 +--
 src/slic3r/GUI/MsgDialog.cpp        | 124 ++++++++++++++++++++++++----
 src/slic3r/GUI/MsgDialog.hpp        |   6 +-
 5 files changed, 120 insertions(+), 30 deletions(-)

diff --git a/src/libslic3r/PlaceholderParser.cpp b/src/libslic3r/PlaceholderParser.cpp
index e3a4037590..3e29e0c172 100644
--- a/src/libslic3r/PlaceholderParser.cpp
+++ b/src/libslic3r/PlaceholderParser.cpp
@@ -1791,6 +1791,8 @@ namespace client
             // from UTF8 to UTF16 don't bail out.
             msg += boost::nowide::narrow(boost::nowide::widen(error_line));
             msg += '\n';
+            // The error dialog (MsgDialog.cpp) renders this excerpt monospaced. It recognizes a source
+            // line directly above a caret line of spaces and a single '^'.
             for (size_t i = 0; i < error_pos; ++ i)
                 msg += ' ';
             msg += "^\n";
diff --git a/src/slic3r/GUI/GUI.cpp b/src/slic3r/GUI/GUI.cpp
index 554ecd4a4e..29f8fc9749 100644
--- a/src/slic3r/GUI/GUI.cpp
+++ b/src/slic3r/GUI/GUI.cpp
@@ -256,18 +256,18 @@ void change_opt_value(DynamicPrintConfig& config, const t_config_option_key& opt
 	}
 }
 
-void show_error(wxWindow* parent, const wxString& message, bool monospaced_font)
+void show_error(wxWindow* parent, const wxString& message, bool has_code_excerpts)
 {
     wxGetApp().CallAfter([=] {
-        ErrorDialog msg(parent, message, monospaced_font);
+        ErrorDialog msg(parent, message, has_code_excerpts);
         msg.ShowModal();
     });
 }
 
-void show_error(wxWindow* parent, const char* message, bool monospaced_font)
+void show_error(wxWindow* parent, const char* message, bool has_code_excerpts)
 {
 	assert(message);
-	show_error(parent, wxString::FromUTF8(message), monospaced_font);
+	show_error(parent, wxString::FromUTF8(message), has_code_excerpts);
 }
 
 void show_error_id(int id, const std::string& message)
diff --git a/src/slic3r/GUI/GUI.hpp b/src/slic3r/GUI/GUI.hpp
index 357fd20a97..db882b79cf 100644
--- a/src/slic3r/GUI/GUI.hpp
+++ b/src/slic3r/GUI/GUI.hpp
@@ -40,11 +40,11 @@ extern void add_menus(wxMenuBar *menu, int event_preferences_changed, int event_
 // Change option value in config
 void change_opt_value(DynamicPrintConfig& config, const t_config_option_key& opt_key, const boost::any& value, int opt_index = 0);
 
-// If monospaced_font is true, the error message is displayed using html 
tags, -// so that the code formatting will be preserved. This is useful for reporting errors from the placeholder parser. -void show_error(wxWindow* parent, const wxString& message, bool monospaced_font = false); -void show_error(wxWindow* parent, const char* message, bool monospaced_font = false); -inline void show_error(wxWindow* parent, const std::string& message, bool monospaced_font = false) { show_error(parent, message.c_str(), monospaced_font); } +// If has_code_excerpts is true, code excerpts (a source line and the caret line below it) render +// monospaced so the caret aligns. Used for placeholder-parser errors. +void show_error(wxWindow* parent, const wxString& message, bool has_code_excerpts = false); +void show_error(wxWindow* parent, const char* message, bool has_code_excerpts = false); +inline void show_error(wxWindow* parent, const std::string& message, bool has_code_excerpts = false) { show_error(parent, message.c_str(), has_code_excerpts); } void show_error_id(int id, const std::string& message); // For Perl void show_info(wxWindow* parent, const wxString& message, const wxString& title = wxString()); void show_info(wxWindow* parent, const char* message, const char* title = nullptr); diff --git a/src/slic3r/GUI/MsgDialog.cpp b/src/slic3r/GUI/MsgDialog.cpp index ebf4db6846..7f1effd162 100644 --- a/src/slic3r/GUI/MsgDialog.cpp +++ b/src/slic3r/GUI/MsgDialog.cpp @@ -9,8 +9,13 @@ #include #include #include +#include + +#include #include +#include +#include #include "libslic3r/libslic3r.h" #include "libslic3r/Utils.hpp" @@ -229,12 +234,82 @@ void MsgDialog::finalize() } +// A placeholder-parser caret line, pointing at the column where parsing failed. +static bool is_caret_line(const std::string &line) +{ + return std::count(line.begin(), line.end(), '^') == 1 && + std::all_of(line.begin(), line.end(), [](char c) { return c == ' ' || c == '^'; }); +} + +// Tag each line as a code excerpt (a caret line or the source line above one) that must stay +// monospaced for the '^' to align. +static std::vector> classify_code_lines(const std::string &msg) +{ + std::vector lines; + boost::split(lines, msg, boost::is_any_of("\n")); + for (std::string &line : lines) + if (!line.empty() && line.back() == '\r') + line.pop_back(); + + std::vector> tagged; + tagged.reserve(lines.size()); + for (size_t i = 0; i < lines.size(); ++i) { + bool is_code = is_caret_line(lines[i]) || (i + 1 < lines.size() && is_caret_line(lines[i + 1])); + tagged.emplace_back(std::move(lines[i]), is_code); + } + return tagged; +} + +// Keeps whitespace literal so the caret's leading spaces survive. +// Used inside , which supplies the fixed face.
 does both but adds a blank line above it.
+class CodeExcerptTagHandler : public wxHtmlWinTagHandler
+{
+public:
+    wxString GetSupportedTags() override { return wxT("EXCERPT"); }
+    bool     HandleTag(const wxHtmlTag &tag) override
+    {
+        const wxHtmlWinParser::WhitespaceMode ws = m_WParser->GetWhitespaceMode();
+        m_WParser->SetWhitespaceMode(wxHtmlWinParser::Whitespace_Pre);
+        ParseInner(tag);
+        m_WParser->SetWhitespaceMode(ws);
+        return true;
+    }
+};
+
+// Render the message as HTML, monospacing only the code excerpts.
+static std::string format_parser_error_html(const std::string &msg)
+{
+    std::string out;
+    for (const auto &[text, is_code] : classify_code_lines(msg)) {
+        if (!out.empty()) out += "
"; // join, not trail; a trailing
forces a scrollbar + std::string escaped = xml_escape(text); + if (is_code) + out += "" + escaped + ""; + else + out += escaped; + } + return out; +} + +// Measure each line in the font it will render in, so the dialog fits the longest line without slack. +static wxSize measure_mixed_text(wxWindow *parent, const std::string &msg, const wxFont &prose_font, const wxFont &code_font) +{ + wxClientDC dc(parent); + int width = 0, height = 0; + for (const auto &[text, is_code] : classify_code_lines(msg)) { + dc.SetFont(is_code ? code_font : prose_font); + width = std::max(width, dc.GetTextExtent(wxString::FromUTF8(text.c_str())).GetWidth()); + height += dc.GetCharHeight(); + } + return wxSize(width, height); +} + // Text shown as HTML, so that mouse selection and Ctrl-V to copy will work. static void add_msg_content(wxWindow *parent, wxBoxSizer *content_sizer, wxString msg, - bool monospaced_font = false, - bool is_marked_msg = false, + bool has_code_excerpts = false, + bool is_marked_msg = false, const wxString &link_text = "", std::function link_callback = nullptr) { @@ -243,7 +318,7 @@ static void add_msg_content(wxWindow *parent, // count lines in the message int msg_lines = 0; - if (!monospaced_font) { + if (!has_code_excerpts) { int line_len = 55;// count of symbols in one line int start_line = 0; for (auto i = msg.begin(); i != msg.end(); ++i) { @@ -300,13 +375,23 @@ static void add_msg_content(wxWindow *parent, page_size = wxSize(info_width, page_height); } else { - wxClientDC dc(parent); - dc.SetFont(font); // ORCA without this it calculates bigger size - wxSize msg_sz = dc.GetMultiLineTextExtent(msg) + parent->FromDIP(wxSize(10,5)); // added extra spacing to prevent wrapping + wxSize msg_sz; + if (has_code_excerpts) { + msg_sz = measure_mixed_text(parent, msg.ToUTF8().data(), font, monospace); + } else { + wxClientDC dc(parent); + dc.SetFont(font); // ORCA without this it calculates bigger size + msg_sz = dc.GetMultiLineTextExtent(msg); + } + msg_sz += parent->FromDIP(wxSize(10,5)); // added extra spacing to prevent wrapping - page_size = wxSize(std::min(msg_sz.GetX(), info_width), std::min(msg_sz.GetY(), info_width)); + int page_height = msg_sz.GetY(); + // Reserve the horizontal scrollbar's height, or it clips the last line. + if (msg_sz.GetX() > info_width) + page_height += wxSystemSettings::GetMetric(wxSYS_HSCROLL_Y, parent); + page_size = wxSize(std::min(msg_sz.GetX(), info_width), std::min(page_height, info_width)); // Extra line breaks in message dialog - if (link_text.IsEmpty() && !link_callback && is_marked_msg == false) {//for common text + if (link_text.IsEmpty() && !link_callback && is_marked_msg == false && !has_code_excerpts) {//for common text html->Destroy(); if (msg_sz.GetX() < info_width) {//No need for line breaks info_width = msg_sz.GetX(); @@ -337,12 +422,15 @@ static void add_msg_content(wxWindow *parent, } html->SetMinSize(page_size); - std::string msg_escaped = xml_escape(msg.ToUTF8().data(), is_marked_msg); - boost::replace_all(msg_escaped, "\r\n", "
"); - boost::replace_all(msg_escaped, "\n", "
"); - if (monospaced_font) - // Code formatting will be preserved. This is useful for reporting errors from the placeholder parser. - msg_escaped = std::string("
") + msg_escaped + "
"; + std::string msg_escaped; + if (has_code_excerpts) { + html->GetParser()->AddTagHandler(new CodeExcerptTagHandler()); + msg_escaped = format_parser_error_html(msg.ToUTF8().data()); + } else { + msg_escaped = xml_escape(msg.ToUTF8().data(), is_marked_msg); + boost::replace_all(msg_escaped, "\r\n", "
"); + boost::replace_all(msg_escaped, "\n", "
"); + } if (!link_text.IsEmpty() && link_callback) { msg_escaped += "" + std::string(link_text.ToUTF8().data()) + ""; @@ -360,15 +448,15 @@ static void add_msg_content(wxWindow *parent, // ErrorDialog -ErrorDialog::ErrorDialog(wxWindow *parent, const wxString &temp_msg, bool monospaced_font) +ErrorDialog::ErrorDialog(wxWindow *parent, const wxString &temp_msg, bool has_code_excerpts) : MsgDialog(parent, wxString::Format(_(L("%s error")), SLIC3R_APP_FULL_NAME), wxString::Format(_(L("%s has encountered an error")), SLIC3R_APP_FULL_NAME), wxOK) , msg(temp_msg) { - add_msg_content(this, content_sizer, msg, monospaced_font); + add_msg_content(this, content_sizer, msg, has_code_excerpts); - // Use a small bitmap with monospaced font, as the error text will not be wrapped. - logo->SetBitmap(create_scaled_bitmap("OrcaSlicer_192px_grayscale.png", this, monospaced_font ? 48 : /*1*/64)); + // Use a small bitmap for code excerpts, which cannot wrap and so need the width. + logo->SetBitmap(create_scaled_bitmap("OrcaSlicer_192px_grayscale.png", this, has_code_excerpts ? 48 : /*1*/64)); SetMaxSize(MSG_DLG_MAX_SIZE); diff --git a/src/slic3r/GUI/MsgDialog.hpp b/src/slic3r/GUI/MsgDialog.hpp index 174d734336..90fd160310 100644 --- a/src/slic3r/GUI/MsgDialog.hpp +++ b/src/slic3r/GUI/MsgDialog.hpp @@ -106,9 +106,9 @@ protected: class ErrorDialog : public MsgDialog { public: - // If monospaced_font is true, the error message is displayed using html
tags, - // so that the code formatting will be preserved. This is useful for reporting errors from the placeholder parser. - ErrorDialog(wxWindow *parent, const wxString &temp_msg, bool courier_font); + // If has_code_excerpts is true, code excerpts (a source line and the caret line below it) render + // monospaced so the caret aligns. Used for placeholder-parser errors. + ErrorDialog(wxWindow *parent, const wxString &temp_msg, bool has_code_excerpts); ErrorDialog(ErrorDialog &&) = delete; ErrorDialog(const ErrorDialog &) = delete; ErrorDialog &operator=(ErrorDialog &&) = delete; From 1d078e005a1bff17f05745d7672a0bd1c5f7cc60 Mon Sep 17 00:00:00 2001 From: Ian Bassi Date: Tue, 4 Aug 2026 11:37:05 -0300 Subject: [PATCH 15/66] Mouse ear Wiki redirect (#15115) Based in https://github.com/OrcaSlicer/OrcaSlicer/pull/15015 and https://github.com/OrcaSlicer/OrcaSlicer_WIKI/pull/323 --- src/slic3r/GUI/Tab.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index c436d70a15..0c38977c74 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -3077,7 +3077,7 @@ void TabPrint::build() optgroup->append_single_option_line("combine_brims", "others_settings_brim#combine-brims"); optgroup->append_single_option_line("brim_ears_max_angle", "others_settings_brim#ear-max-angle"); optgroup->append_single_option_line("brim_ears_detection_length", "others_settings_brim#ear-detection-radius"); - optgroup->append_single_option_line("brim_ears_outer_only"); + optgroup->append_single_option_line("brim_ears_outer_only", "others_settings_brim#brim-ears-outer-only"); optgroup = page->new_optgroup(L("Special mode"), L"param_special"); optgroup->append_single_option_line("slicing_mode", "others_settings_special_mode#slicing-mode"); From 0051768206bd3ba082e75e7a09d5906d438dedfd Mon Sep 17 00:00:00 2001 From: SoftFever Date: Wed, 5 Aug 2026 00:09:46 +0800 Subject: [PATCH 16/66] Smooth out the spiral lift when arc fitting is disabled (#15118) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The linear approximation used a heuristic segment count clamped to 4..16, so the lift ran as a coarse polygon. Every vertex is a direction change large enough to hit the firmware's jerk limit, forcing a decelerate/accelerate at each corner — the lift micro-stutters instead of running at speed. The segment count now comes from the chord deviation against the slicing resolution, reusing Geometry::ArcWelder::arc_discretization_steps, which keeps the turn at each vertex shallow enough for the firmware to carry speed through the whole move. Points are emitted through GCodeG1Formatter so they carry the same quantization as the rest of the G-code, and the move comment now trails the feedrate line to match _travel_to_z and the G2/G3 branch. No change when arc fitting is enabled. --- src/libslic3r/GCodeWriter.cpp | 52 +++++++++++++++++++---------------- 1 file changed, 28 insertions(+), 24 deletions(-) diff --git a/src/libslic3r/GCodeWriter.cpp b/src/libslic3r/GCodeWriter.cpp index e3d1c30362..0e80cc1fb7 100644 --- a/src/libslic3r/GCodeWriter.cpp +++ b/src/libslic3r/GCodeWriter.cpp @@ -3,6 +3,7 @@ #include "I18N.hpp" #include "PrintConfig.hpp" #include "ClipperUtils.hpp" +#include "Geometry/ArcWelder.hpp" #include "Line.hpp" #include #include @@ -1018,45 +1019,48 @@ std::string GCodeWriter::_spiral_travel_to_z(double z, const Vec2d &ij_offset, c } if (!this->config.enable_arc_fitting) { // Orca: if arc fitting is disabled, approximate the arc with small linear segments - std::ostringstream oss; const double z_start = m_pos(2); // starting Z height - // -------------------------------------------------------------------- - // Determine number of segments based on Resolution - // -------------------------------------------------------------------- - const double ref_resolution = 0.01; // reference resolution in mm - const double ref_segments = 8.0; // reference number of segments at reference resolution - - // number of linear segments to use for approximating the arc, clamp between 4 and 16 - const int segments = std::clamp(int(std::round(ref_segments * (ref_resolution / m_resolution))), 4, 16); - // -------------------------------------------------------------------- - const double px = m_pos(0) - m_x_offset; // take plate offset into consideration const double py = m_pos(1) - m_y_offset; // take plate offset into consideration const double cx = px + ij_offset(0); // center x const double cy = py + ij_offset(1); // center y const double radius = ij_offset.norm(); // radius + + // Number of linear segments approximating the circle, chosen so that a chord never deviates + // from the true arc by more than the slicing resolution. A resolution of 0 means "no + // simplification", which has no finite segment count, so it takes the upper bound. + constexpr size_t min_segments = 8; // keep a small spiral visibly round + constexpr size_t max_segments = 128; // bound the emitted G-code + const int segments = int(m_resolution > 0. ? + std::clamp(Geometry::ArcWelder::arc_discretization_steps(radius, 2. * M_PI, m_resolution), min_segments, max_segments) : + max_segments); + const double a0 = std::atan2(py - cy, px - cx); // start angle - const double delta = 2.0 * M_PI; // CCW full circle - if (full_gcode_comment) - oss << ";" << comment << "\n"; + auto emit_point = [&output](const Vec3d &point) { + GCodeG1Formatter w; + w.emit_xyz(point); + output += w.string(); + }; - oss << "G1 F" << (speed * 60.0) << "\n"; // set feedrate + output.reserve(size_t(segments) * 40); // ~40 characters per emitted G1 line + + GCodeG1Formatter w; // set feedrate + w.emit_f(speed * 60.0); + w.emit_comment(GCodeWriter::full_gcode_comment, comment); + output += w.string(); // approximate the arc with small linear segments (without the last point which is added later to ensure exactness) for (int i = 1; i < segments; ++i) { - double t = double(i) / segments; // parametric position along arc - double a = a0 + delta * t; // CCW arc param - double x = cx + radius * std::cos(a); // point on circle - double y = cy + radius * std::sin(a); // point on circle - double zz = z_start + (z - z_start) * t; // interpolated Z height - - oss << "G1 X" << x << " Y" << y << " Z" << zz << "\n"; + const double t = double(i) / segments; // parametric position along arc + const double a = a0 + 2. * M_PI * t; // CCW arc param, full circle + emit_point(Vec3d(cx + radius * std::cos(a), // point on circle + cy + radius * std::sin(a), + z_start + (z - z_start) * t)); // interpolated Z height } - oss << "G1 X" << px << " Y" << py << " Z" << z << "\n"; // final point to ensure exactness - output = oss.str(); + emit_point(Vec3d(px, py, z)); // final point to ensure exactness } else { // Orca: if arc fitting is enabled emit a G2/G3 command for the spiral lift output = std::string("G17") + (full_gcode_comment ? " ; XY plane for arc\n" : "\n"); From 6312caaf134c0b093fdb1ae4b69b2f54956ccd59 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Wed, 5 Aug 2026 00:13:27 +0800 Subject: [PATCH 17/66] Add filament_retract_length_toolchange/filament_retract_restart_extra_toolchange config and update tool changer printer's profiles (#15039) * update snapmaker profiles. largely ported for Snapmaker Orca fork * update prime volume * set precise_outer_wall to 1 * Update per-material multi-tool ramming to the filament library * Add per-filament overrides for toolchange retraction * Set toolchange retraction per filament for Snapmaker U1 * set default support type to tree * format snapmaker profiles --- resources/profiles/Custom.json | 2 +- .../filament/Generic ABS @MyToolChanger.json | 6 - .../filament/Generic ASA @MyToolChanger.json | 6 - .../filament/Generic PA @MyToolChanger.json | 6 - .../Generic PA-CF @MyToolChanger.json | 6 - .../filament/Generic PC @MyToolChanger.json | 6 - .../filament/Generic PETG @MyToolChanger.json | 6 - .../filament/Generic PLA @MyToolChanger.json | 6 - .../Generic PLA-CF @MyToolChanger.json | 6 - .../filament/Generic PVA @MyToolChanger.json | 6 - .../Custom/machine/fdm_klipper_common.json | 2 +- .../Custom/machine/fdm_repetier_common.json | 2 +- .../Custom/machine/fdm_rrf_common.json | 2 +- .../machine/fdm_toolchanger_common.json | 10 +- resources/profiles/OrcaFilamentLibrary.json | 2 +- .../filament/Bambu/Bambu PET-CF @base.json | 3 + .../Bambu/Bambu PETG Basic @base.json | 3 + .../Bambu/Bambu PETG Translucent @base.json | 3 + .../filament/Bambu/Bambu PLA Aero @base.json | 3 + .../Bambu Support For PLA-PETG @base.json | 3 + .../Bambu/Bambu Support for ABS @base.json | 3 + .../filament/COEX/COEX TPU 60A @base.json | 3 + .../filament/Elas/Elas ASA @base.json | 42 --- .../filament/Elas/Elas PETG Basic @base.json | 42 --- .../filament/Elas/Elas PLA Basic @base.json | 42 --- .../filament/Elas/Elas PLA Pro @base.json | 42 --- .../Elegoo/Elegoo PAHT-CF @System.json | 3 + .../filament/Elegoo/Elegoo PETG @base.json | 3 + .../Elegoo/Elegoo PLA Wood @System.json | 3 + .../Eolas Prints PLA Neon @System.json | 3 + .../Eolas Prints PLA Silk @System.json | 3 + .../filament/Generic PA-CF @System.json | 3 + .../filament/Generic PETG HF @System.json | 3 + .../filament/Generic PETG-CF @System.json | 3 + .../Generic PLA High Speed @System.json | 3 + .../filament/Generic PLA Matte @System.json | 3 + .../filament/Generic PP-CF @System.json | 3 + .../filament/Generic PP-GF @System.json | 3 + .../Overture/Overture Air PLA @base.json | 3 + .../Valment/Valment PLA Silk @base.json | 3 + .../filament/base/fdm_filament_abs.json | 6 + .../filament/base/fdm_filament_asa.json | 6 + .../filament/base/fdm_filament_bvoh.json | 9 + .../filament/base/fdm_filament_common.json | 6 + .../filament/base/fdm_filament_cope.json | 3 + .../filament/base/fdm_filament_eva.json | 3 + .../filament/base/fdm_filament_hips.json | 3 + .../filament/base/fdm_filament_pa.json | 3 + .../filament/base/fdm_filament_paht.json | 3 + .../filament/base/fdm_filament_pc.json | 3 + .../filament/base/fdm_filament_pctg.json | 3 + .../filament/base/fdm_filament_pe.json | 3 + .../filament/base/fdm_filament_pet.json | 3 + .../filament/base/fdm_filament_pha.json | 3 + .../filament/base/fdm_filament_pla.json | 3 + .../filament/base/fdm_filament_pla_silk.json | 3 + .../filament/base/fdm_filament_pp.json | 3 + .../filament/base/fdm_filament_ppa.json | 3 + .../filament/base/fdm_filament_pps.json | 3 + .../filament/base/fdm_filament_pva.json | 9 + .../filament/base/fdm_filament_sbs.json | 3 + .../filament/base/fdm_filament_tpu.json | 9 + .../filament/eSUN/eSUN PLA-Marble @base.json | 3 + .../filament/eSUN/eSUN PLA-Matte @base.json | 3 + .../filament/eSUN/eSUN ePLA-LW @System.json | 3 + resources/profiles/Snapmaker.json | 278 ++++++++++++++++- .../Polymaker General PLA Family @U1.json | 32 ++ .../filament/Polymaker PLA @U1 base.json | 107 +++++++ .../Polymaker Silk PLA Family @U1.json | 32 ++ .../Polymaker Tough PLA Family @U1.json | 32 ++ .../Fiberon ASA-CF08 @Snapmaker U1.json | 1 - .../Fiberon PA12-CF10 @Snapmaker U1.json | 1 - .../Fiberon PA6-CF20 @Snapmaker U1.json | 1 - .../Fiberon PETG-ESD @Snapmaker U1.json | 1 - .../PolyLite Dual PLA @0.2 nozzle.json | 6 +- .../PolyLite J1 PLA @0.2 nozzle.json | 6 +- .../filament/Polymaker/PolyLite J1 PLA.json | 6 +- .../Polymaker/PolyLite PETG @Base.json | 10 +- .../PolyLite PETG @Snapmaker U1.json | 1 - ...lyLite PETG Translucent @Snapmaker U1.json | 1 - .../Polymaker/PolyLite PLA @0.2 nozzle.json | 6 +- .../Polymaker/PolyLite PLA @base.json | 6 +- .../PolyTerra Dual PLA @0.2 nozzle.json | 6 +- .../PolyTerra J1 PLA @0.2 nozzle.json | 6 +- .../filament/Polymaker/PolyTerra J1 PLA.json | 6 +- .../Polymaker/PolyTerra PLA @0.2 nozzle.json | 6 +- .../Polymaker/Polymaker HT-PLA @Base.json | 10 +- .../Polymaker/Polymaker HT-PLA-GF @Base.json | 10 +- .../Polymaker/Polymaker PETG @Base.json | 10 +- .../Polymaker/Polymaker PLA Pro @Base.json | 10 +- .../Snapmaker/filament/Snapmaker ABS @U1.json | 3 + .../Snapmaker/filament/Snapmaker ASA @U1.json | 3 + ...akaway Support For PLA @U1 0.2 nozzle.json | 104 +++++++ ...akaway Support For PLA @U1 0.6 nozzle.json | 104 +++++++ ...akaway Support For PLA @U1 0.8 nozzle.json | 98 ++++++ ...apmaker Breakaway Support For PLA @U1.json | 78 +++++ .../Snapmaker PETG HF @U1 0.2 nozzle.json | 108 +++++++ .../Snapmaker PETG HF @U1 0.6 nozzle.json | 113 +++++++ .../Snapmaker PETG HF @U1 0.8 nozzle.json | 110 +++++++ .../filament/Snapmaker PETG HF @U1 base2.json | 279 +++++++++++++++++ ...maker PETG Translucent @U1 0.2 nozzle.json | 110 +++++++ ...maker PETG Translucent @U1 0.4 nozzle.json | 98 ++++++ ...maker PETG Translucent @U1 0.6 nozzle.json | 107 +++++++ ...maker PETG Translucent @U1 0.8 nozzle.json | 104 +++++++ .../Snapmaker PETG Translucent @U1 base.json | 8 + .../Snapmaker PLA Basic @U1 base.json | 127 ++++++++ .../filament/Snapmaker PLA Basic @U1.json | 284 +++++++++++++++++ ...aker PLA Full Spectrum @U1 0.4 nozzle.json | 284 +++++++++++++++++ .../Snapmaker PLA Glow @U1 0.4 nozzle.json | 95 ++++++ .../filament/Snapmaker PLA Glow @U1 base.json | 44 +++ .../Snapmaker PLA Matte @U1 0.2 nozzle.json | 287 ++++++++++++++++++ .../Snapmaker PLA Matte @U1 0.6 nozzle.json | 287 ++++++++++++++++++ .../Snapmaker PLA Matte @U1 0.8 nozzle.json | 287 ++++++++++++++++++ .../Snapmaker PLA Matte @U1 base2.json | 127 ++++++++ .../filament/Snapmaker PLA Matte @U1.json | 26 +- .../Snapmaker PLA Metal @U1 base.json | 3 - .../Snapmaker PLA Silk @U1 0.2 nozzle.json | 285 +++++++++++++++++ .../Snapmaker PLA Silk @U1 0.6 nozzle.json | 285 +++++++++++++++++ .../Snapmaker PLA Silk @U1 0.8 nozzle.json | 285 +++++++++++++++++ .../filament/Snapmaker PLA Silk @U1 base.json | 3 - .../filament/Snapmaker PLA Silk @U1.json | 276 ++++++++++++++++- ...napmaker PLA SnapSpeed @U1 0.2 nozzle.json | 50 +++ ...napmaker PLA SnapSpeed @U1 0.6 nozzle.json | 41 +++ ...napmaker PLA SnapSpeed @U1 0.8 nozzle.json | 41 +++ .../Snapmaker PLA SnapSpeed @U1 base2.json | 281 +++++++++++++++++ .../filament/Snapmaker PLA SnapSpeed @U1.json | 42 +-- ...pmaker PLA Translucent @U1 0.2 nozzle.json | 284 +++++++++++++++++ ...pmaker PLA Translucent @U1 0.4 nozzle.json | 284 +++++++++++++++++ ...pmaker PLA Translucent @U1 0.6 nozzle.json | 284 +++++++++++++++++ ...pmaker PLA Translucent @U1 0.8 nozzle.json | 284 +++++++++++++++++ .../Snapmaker PLA Translucent @U1 base.json | 44 +++ .../Snapmaker PLA Wood @U1 0.4 nozzle.json | 108 +++++++ .../Snapmaker PLA Wood @U1 0.6 nozzle.json | 114 +++++++ .../Snapmaker PLA Wood @U1 0.8 nozzle.json | 114 +++++++ .../Snapmaker PLA-CF @U1 0.4 nozzle.json | 132 ++++++++ .../Snapmaker PLA-CF @U1 0.6 nozzle.json | 138 +++++++++ .../Snapmaker PLA-CF @U1 0.8 nozzle.json | 135 ++++++++ .../filament/Snapmaker PLA-CF @U1 base.json | 3 - .../filament/Snapmaker PLA-CF @U1.json | 3 + .../Snapmaker PVA @U1 0.6 nozzle.json | 113 +++++++ .../Snapmaker PVA @U1 0.8 nozzle.json | 107 +++++++ .../Snapmaker/filament/Snapmaker PVA @U1.json | 90 ++++++ .../Snapmaker TPU 90A @U1 0.6 nozzle.json | 150 +++++++++ .../Snapmaker TPU 90A @U1 0.8 nozzle.json | 144 +++++++++ .../filament/Snapmaker TPU 90A @U1.json | 141 +++++++++ .../filament/Snapmaker TPU 95A @U1 base.json | 3 - .../Snapmaker TPU 95A HF @U1 0.6 nozzle.json | 147 +++++++++ .../Snapmaker TPU 95A HF @U1 0.8 nozzle.json | 147 +++++++++ .../filament/Snapmaker TPU 95A HF @U1.json | 144 +++++++++ .../machine/Snapmaker U1 (0.2 nozzle).json | 172 ++++++++++- .../machine/Snapmaker U1 (0.4 nozzle).json | 99 ++---- .../Snapmaker U1 (0.4+0.6 nozzle).json | 6 +- .../machine/Snapmaker U1 (0.6 nozzle).json | 180 ++++++++++- .../machine/Snapmaker U1 (0.8 nozzle).json | 172 ++++++++++- .../profiles/Snapmaker/machine/fdm_U1.json | 8 +- ...gh Quality @Snapmaker U1 (0.2 nozzle).json | 70 ++--- ...6 Standard @Snapmaker U1 (0.2 nozzle).json | 62 ++-- ...Extra Fine @Snapmaker U1 (0.4 nozzle).json | 15 +- ...gh Quality @Snapmaker U1 (0.2 nozzle).json | 70 ++--- ...gh Quality @Snapmaker U1 (0.4 nozzle).json | 14 +- ...8 Standard @Snapmaker U1 (0.2 nozzle).json | 62 ++-- ...gh Quality @Snapmaker U1 (0.2 nozzle).json | 70 ++--- ...0 Standard @Snapmaker U1 (0.2 nozzle).json | 66 ++-- .../0.12 Fine @Snapmaker U1 (0.4 nozzle).json | 15 +- ...gh Quality @Snapmaker U1 (0.4 nozzle).json | 17 +- ...2 Standard @Snapmaker U1 (0.2 nozzle).json | 62 ++-- ...4 Standard @Snapmaker U1 (0.2 nozzle).json | 62 ++-- ...gh Quality @Snapmaker U1 (0.4 nozzle).json | 15 +- ...16 Optimal @Snapmaker U1 (0.4 nozzle).json | 14 +- ...8 Standard @Snapmaker U1 (0.6 nozzle).json | 70 ++--- ... Support W @Snapmaker U1 (0.4 nozzle).json | 23 -- ...20 Quality @Snapmaker U1 (0.4 nozzle).json | 1 + ...0 Standard @Snapmaker U1 (0.4 nozzle).json | 2 + ...andard @Snapmaker U1 (0.4+0.6 nozzle).json | 1 + ...0 Standard @Snapmaker U1 (0.6 nozzle).json | 1 + ...0 Strength @Snapmaker U1 (0.4 nozzle).json | 14 +- ...20 Support @Snapmaker U1 (0.4 nozzle).json | 2 + ... Support W @Snapmaker U1 (0.4 nozzle).json | 2 + ...0.24 Draft @Snapmaker U1 (0.4 nozzle).json | 14 +- ...4 Standard @Snapmaker U1 (0.6 nozzle).json | 69 ++--- ...4 Standard @Snapmaker U1 (0.8 nozzle).json | 71 ++--- ...xtra Draft @Snapmaker U1 (0.4 nozzle).json | 16 +- ...0.30 Draft @Snapmaker U1 (0.6 nozzle).json | 2 + ...0 Standard @Snapmaker U1 (0.6 nozzle).json | 67 ++-- ...0 Strength @Snapmaker U1 (0.6 nozzle).json | 71 ++--- ...2 Standard @Snapmaker U1 (0.8 nozzle).json | 74 ++--- ...6 Standard @Snapmaker U1 (0.6 nozzle).json | 69 ++--- ...xtra Draft @Snapmaker U1 (0.6 nozzle).json | 2 + ...0 Standard @Snapmaker U1 (0.8 nozzle).json | 76 ++--- ...2 Standard @Snapmaker U1 (0.6 nozzle).json | 69 ++--- ...8 Standard @Snapmaker U1 (0.8 nozzle).json | 71 ++--- ...6 Standard @Snapmaker U1 (0.8 nozzle).json | 68 ++--- .../Snapmaker/process/fdm_process_U1.json | 1 - .../fdm_process_U1_0.06_nozzle_0.2.json | 27 ++ .../fdm_process_U1_0.08_nozzle_0.2.json | 27 ++ .../fdm_process_U1_0.10_nozzle_0.2.json | 27 ++ .../fdm_process_U1_0.12_nozzle_0.2.json | 27 ++ .../fdm_process_U1_0.14_nozzle_0.2.json | 27 ++ .../fdm_process_U1_0.18_nozzle_0.6.json | 26 ++ .../fdm_process_U1_0.24_nozzle_0.6.json | 24 ++ .../fdm_process_U1_0.24_nozzle_0.8.json | 26 ++ .../fdm_process_U1_0.30_nozzle_0.6.json | 24 ++ .../fdm_process_U1_0.32_nozzle_0.8.json | 26 ++ .../fdm_process_U1_0.36_nozzle_0.6.json | 24 ++ .../fdm_process_U1_0.40_nozzle_0.8.json | 26 ++ .../fdm_process_U1_0.42_nozzle_0.6.json | 24 ++ .../fdm_process_U1_0.48_nozzle_0.8.json | 26 ++ .../fdm_process_U1_0.56_nozzle_0.8.json | 26 ++ .../process/fdm_process_U1_0.6_common.json | 2 +- .../process/fdm_process_U1_common.json | 13 +- .../Snapmaker/process/fdm_process_a400.json | 2 +- .../Snapmaker/process/fdm_process_common.json | 2 +- .../Snapmaker/process/fdm_process_idex.json | 2 +- .../Voron/machine/fdm_klipper_common.json | 2 +- src/libslic3r/Extruder.cpp | 4 +- src/libslic3r/GCode.cpp | 8 +- src/libslic3r/Preset.cpp | 2 + src/libslic3r/PrintConfig.cpp | 18 +- src/slic3r/GUI/Tab.cpp | 23 +- 219 files changed, 10287 insertions(+), 1263 deletions(-) create mode 100644 resources/profiles/Snapmaker/filament/Polymaker General PLA Family @U1.json create mode 100644 resources/profiles/Snapmaker/filament/Polymaker PLA @U1 base.json create mode 100644 resources/profiles/Snapmaker/filament/Polymaker Silk PLA Family @U1.json create mode 100644 resources/profiles/Snapmaker/filament/Polymaker Tough PLA Family @U1.json create mode 100644 resources/profiles/Snapmaker/filament/Snapmaker Breakaway Support For PLA @U1 0.2 nozzle.json create mode 100644 resources/profiles/Snapmaker/filament/Snapmaker Breakaway Support For PLA @U1 0.6 nozzle.json create mode 100644 resources/profiles/Snapmaker/filament/Snapmaker Breakaway Support For PLA @U1 0.8 nozzle.json create mode 100644 resources/profiles/Snapmaker/filament/Snapmaker PETG HF @U1 0.2 nozzle.json create mode 100644 resources/profiles/Snapmaker/filament/Snapmaker PETG HF @U1 0.6 nozzle.json create mode 100644 resources/profiles/Snapmaker/filament/Snapmaker PETG HF @U1 0.8 nozzle.json create mode 100644 resources/profiles/Snapmaker/filament/Snapmaker PETG HF @U1 base2.json create mode 100644 resources/profiles/Snapmaker/filament/Snapmaker PETG Translucent @U1 0.2 nozzle.json create mode 100644 resources/profiles/Snapmaker/filament/Snapmaker PETG Translucent @U1 0.4 nozzle.json create mode 100644 resources/profiles/Snapmaker/filament/Snapmaker PETG Translucent @U1 0.6 nozzle.json create mode 100644 resources/profiles/Snapmaker/filament/Snapmaker PETG Translucent @U1 0.8 nozzle.json create mode 100644 resources/profiles/Snapmaker/filament/Snapmaker PETG Translucent @U1 base.json create mode 100644 resources/profiles/Snapmaker/filament/Snapmaker PLA Basic @U1 base.json create mode 100644 resources/profiles/Snapmaker/filament/Snapmaker PLA Basic @U1.json create mode 100644 resources/profiles/Snapmaker/filament/Snapmaker PLA Full Spectrum @U1 0.4 nozzle.json create mode 100644 resources/profiles/Snapmaker/filament/Snapmaker PLA Glow @U1 0.4 nozzle.json create mode 100644 resources/profiles/Snapmaker/filament/Snapmaker PLA Glow @U1 base.json create mode 100644 resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1 0.2 nozzle.json create mode 100644 resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1 0.6 nozzle.json create mode 100644 resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1 0.8 nozzle.json create mode 100644 resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1 base2.json create mode 100644 resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1 0.2 nozzle.json create mode 100644 resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1 0.6 nozzle.json create mode 100644 resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1 0.8 nozzle.json create mode 100644 resources/profiles/Snapmaker/filament/Snapmaker PLA SnapSpeed @U1 0.2 nozzle.json create mode 100644 resources/profiles/Snapmaker/filament/Snapmaker PLA SnapSpeed @U1 0.6 nozzle.json create mode 100644 resources/profiles/Snapmaker/filament/Snapmaker PLA SnapSpeed @U1 0.8 nozzle.json create mode 100644 resources/profiles/Snapmaker/filament/Snapmaker PLA SnapSpeed @U1 base2.json create mode 100644 resources/profiles/Snapmaker/filament/Snapmaker PLA Translucent @U1 0.2 nozzle.json create mode 100644 resources/profiles/Snapmaker/filament/Snapmaker PLA Translucent @U1 0.4 nozzle.json create mode 100644 resources/profiles/Snapmaker/filament/Snapmaker PLA Translucent @U1 0.6 nozzle.json create mode 100644 resources/profiles/Snapmaker/filament/Snapmaker PLA Translucent @U1 0.8 nozzle.json create mode 100644 resources/profiles/Snapmaker/filament/Snapmaker PLA Translucent @U1 base.json create mode 100644 resources/profiles/Snapmaker/filament/Snapmaker PLA Wood @U1 0.4 nozzle.json create mode 100644 resources/profiles/Snapmaker/filament/Snapmaker PLA Wood @U1 0.6 nozzle.json create mode 100644 resources/profiles/Snapmaker/filament/Snapmaker PLA Wood @U1 0.8 nozzle.json create mode 100644 resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 0.4 nozzle.json create mode 100644 resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 0.6 nozzle.json create mode 100644 resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 0.8 nozzle.json create mode 100644 resources/profiles/Snapmaker/filament/Snapmaker PVA @U1 0.6 nozzle.json create mode 100644 resources/profiles/Snapmaker/filament/Snapmaker PVA @U1 0.8 nozzle.json create mode 100644 resources/profiles/Snapmaker/filament/Snapmaker TPU 90A @U1 0.6 nozzle.json create mode 100644 resources/profiles/Snapmaker/filament/Snapmaker TPU 90A @U1 0.8 nozzle.json create mode 100644 resources/profiles/Snapmaker/filament/Snapmaker TPU 90A @U1.json create mode 100644 resources/profiles/Snapmaker/filament/Snapmaker TPU 95A HF @U1 0.6 nozzle.json create mode 100644 resources/profiles/Snapmaker/filament/Snapmaker TPU 95A HF @U1 0.8 nozzle.json create mode 100644 resources/profiles/Snapmaker/filament/Snapmaker TPU 95A HF @U1.json delete mode 100644 resources/profiles/Snapmaker/process/0.20 Bambu Support W @Snapmaker U1 (0.4 nozzle).json create mode 100644 resources/profiles/Snapmaker/process/fdm_process_U1_0.06_nozzle_0.2.json create mode 100644 resources/profiles/Snapmaker/process/fdm_process_U1_0.08_nozzle_0.2.json create mode 100644 resources/profiles/Snapmaker/process/fdm_process_U1_0.10_nozzle_0.2.json create mode 100644 resources/profiles/Snapmaker/process/fdm_process_U1_0.12_nozzle_0.2.json create mode 100644 resources/profiles/Snapmaker/process/fdm_process_U1_0.14_nozzle_0.2.json create mode 100644 resources/profiles/Snapmaker/process/fdm_process_U1_0.18_nozzle_0.6.json create mode 100644 resources/profiles/Snapmaker/process/fdm_process_U1_0.24_nozzle_0.6.json create mode 100644 resources/profiles/Snapmaker/process/fdm_process_U1_0.24_nozzle_0.8.json create mode 100644 resources/profiles/Snapmaker/process/fdm_process_U1_0.30_nozzle_0.6.json create mode 100644 resources/profiles/Snapmaker/process/fdm_process_U1_0.32_nozzle_0.8.json create mode 100644 resources/profiles/Snapmaker/process/fdm_process_U1_0.36_nozzle_0.6.json create mode 100644 resources/profiles/Snapmaker/process/fdm_process_U1_0.40_nozzle_0.8.json create mode 100644 resources/profiles/Snapmaker/process/fdm_process_U1_0.42_nozzle_0.6.json create mode 100644 resources/profiles/Snapmaker/process/fdm_process_U1_0.48_nozzle_0.8.json create mode 100644 resources/profiles/Snapmaker/process/fdm_process_U1_0.56_nozzle_0.8.json diff --git a/resources/profiles/Custom.json b/resources/profiles/Custom.json index a416f17db0..0429742c88 100644 --- a/resources/profiles/Custom.json +++ b/resources/profiles/Custom.json @@ -1,6 +1,6 @@ { "name": "Custom Printer", - "version": "02.04.00.01", + "version": "02.04.00.02", "force_update": "0", "description": "My configurations", "machine_model_list": [ diff --git a/resources/profiles/Custom/filament/Generic ABS @MyToolChanger.json b/resources/profiles/Custom/filament/Generic ABS @MyToolChanger.json index 1683513dbd..bf48e0488b 100644 --- a/resources/profiles/Custom/filament/Generic ABS @MyToolChanger.json +++ b/resources/profiles/Custom/filament/Generic ABS @MyToolChanger.json @@ -24,12 +24,6 @@ "filament_loading_speed_start": [ "50" ], - "filament_multitool_ramming": [ - "1" - ], - "filament_multitool_ramming_flow": [ - "40" - ], "filament_stamping_distance": [ "45" ], diff --git a/resources/profiles/Custom/filament/Generic ASA @MyToolChanger.json b/resources/profiles/Custom/filament/Generic ASA @MyToolChanger.json index 5cc46deb7e..ad26608bff 100644 --- a/resources/profiles/Custom/filament/Generic ASA @MyToolChanger.json +++ b/resources/profiles/Custom/filament/Generic ASA @MyToolChanger.json @@ -24,12 +24,6 @@ "filament_loading_speed_start": [ "50" ], - "filament_multitool_ramming": [ - "1" - ], - "filament_multitool_ramming_flow": [ - "40" - ], "filament_stamping_distance": [ "45" ], diff --git a/resources/profiles/Custom/filament/Generic PA @MyToolChanger.json b/resources/profiles/Custom/filament/Generic PA @MyToolChanger.json index 0c8918427d..d710282360 100644 --- a/resources/profiles/Custom/filament/Generic PA @MyToolChanger.json +++ b/resources/profiles/Custom/filament/Generic PA @MyToolChanger.json @@ -24,12 +24,6 @@ "filament_loading_speed_start": [ "50" ], - "filament_multitool_ramming": [ - "1" - ], - "filament_multitool_ramming_flow": [ - "40" - ], "filament_stamping_distance": [ "45" ], diff --git a/resources/profiles/Custom/filament/Generic PA-CF @MyToolChanger.json b/resources/profiles/Custom/filament/Generic PA-CF @MyToolChanger.json index a7d86885ef..481fd04152 100644 --- a/resources/profiles/Custom/filament/Generic PA-CF @MyToolChanger.json +++ b/resources/profiles/Custom/filament/Generic PA-CF @MyToolChanger.json @@ -24,12 +24,6 @@ "filament_loading_speed_start": [ "50" ], - "filament_multitool_ramming": [ - "1" - ], - "filament_multitool_ramming_flow": [ - "40" - ], "filament_stamping_distance": [ "45" ], diff --git a/resources/profiles/Custom/filament/Generic PC @MyToolChanger.json b/resources/profiles/Custom/filament/Generic PC @MyToolChanger.json index d80b197394..47f175c277 100644 --- a/resources/profiles/Custom/filament/Generic PC @MyToolChanger.json +++ b/resources/profiles/Custom/filament/Generic PC @MyToolChanger.json @@ -25,12 +25,6 @@ "filament_loading_speed_start": [ "50" ], - "filament_multitool_ramming": [ - "1" - ], - "filament_multitool_ramming_flow": [ - "40" - ], "filament_stamping_distance": [ "45" ], diff --git a/resources/profiles/Custom/filament/Generic PETG @MyToolChanger.json b/resources/profiles/Custom/filament/Generic PETG @MyToolChanger.json index 693551c428..95e47a32a8 100644 --- a/resources/profiles/Custom/filament/Generic PETG @MyToolChanger.json +++ b/resources/profiles/Custom/filament/Generic PETG @MyToolChanger.json @@ -25,12 +25,6 @@ "filament_loading_speed_start": [ "50" ], - "filament_multitool_ramming": [ - "1" - ], - "filament_multitool_ramming_flow": [ - "40" - ], "filament_stamping_distance": [ "45" ], diff --git a/resources/profiles/Custom/filament/Generic PLA @MyToolChanger.json b/resources/profiles/Custom/filament/Generic PLA @MyToolChanger.json index cf1db6e225..b8fe088325 100644 --- a/resources/profiles/Custom/filament/Generic PLA @MyToolChanger.json +++ b/resources/profiles/Custom/filament/Generic PLA @MyToolChanger.json @@ -25,12 +25,6 @@ "filament_loading_speed_start": [ "50" ], - "filament_multitool_ramming": [ - "1" - ], - "filament_multitool_ramming_flow": [ - "40" - ], "filament_stamping_distance": [ "45" ], diff --git a/resources/profiles/Custom/filament/Generic PLA-CF @MyToolChanger.json b/resources/profiles/Custom/filament/Generic PLA-CF @MyToolChanger.json index 6ae729d622..4a766aa3ef 100644 --- a/resources/profiles/Custom/filament/Generic PLA-CF @MyToolChanger.json +++ b/resources/profiles/Custom/filament/Generic PLA-CF @MyToolChanger.json @@ -25,12 +25,6 @@ "filament_loading_speed_start": [ "50" ], - "filament_multitool_ramming": [ - "1" - ], - "filament_multitool_ramming_flow": [ - "40" - ], "filament_stamping_distance": [ "45" ], diff --git a/resources/profiles/Custom/filament/Generic PVA @MyToolChanger.json b/resources/profiles/Custom/filament/Generic PVA @MyToolChanger.json index ccb6d16c73..6fe168abcc 100644 --- a/resources/profiles/Custom/filament/Generic PVA @MyToolChanger.json +++ b/resources/profiles/Custom/filament/Generic PVA @MyToolChanger.json @@ -25,12 +25,6 @@ "filament_loading_speed_start": [ "50" ], - "filament_multitool_ramming": [ - "1" - ], - "filament_multitool_ramming_flow": [ - "40" - ], "filament_stamping_distance": [ "45" ], diff --git a/resources/profiles/Custom/machine/fdm_klipper_common.json b/resources/profiles/Custom/machine/fdm_klipper_common.json index 36f3fe13c6..a0ee0f1a47 100644 --- a/resources/profiles/Custom/machine/fdm_klipper_common.json +++ b/resources/profiles/Custom/machine/fdm_klipper_common.json @@ -116,7 +116,7 @@ "deretraction_speed": [ "30" ], - "z_hop_types": "Normal Lift", + "z_hop_types": "Slope Lift", "silent_mode": "0", "single_extruder_multi_material": "1", "change_filament_gcode": "", diff --git a/resources/profiles/Custom/machine/fdm_repetier_common.json b/resources/profiles/Custom/machine/fdm_repetier_common.json index 1171559086..b36b716e4e 100644 --- a/resources/profiles/Custom/machine/fdm_repetier_common.json +++ b/resources/profiles/Custom/machine/fdm_repetier_common.json @@ -118,7 +118,7 @@ "deretraction_speed": [ "30" ], - "z_hop_types": "Normal Lift", + "z_hop_types": "Slope Lift", "silent_mode": "0", "single_extruder_multi_material": "1", "change_filament_gcode": "", diff --git a/resources/profiles/Custom/machine/fdm_rrf_common.json b/resources/profiles/Custom/machine/fdm_rrf_common.json index 68708490a1..2fc9df9a3d 100644 --- a/resources/profiles/Custom/machine/fdm_rrf_common.json +++ b/resources/profiles/Custom/machine/fdm_rrf_common.json @@ -116,7 +116,7 @@ "deretraction_speed": [ "30" ], - "z_hop_types": "Normal Lift", + "z_hop_types": "Slope Lift", "silent_mode": "0", "single_extruder_multi_material": "1", "change_filament_gcode": "", diff --git a/resources/profiles/Custom/machine/fdm_toolchanger_common.json b/resources/profiles/Custom/machine/fdm_toolchanger_common.json index ff702d0034..7ef8b5207c 100644 --- a/resources/profiles/Custom/machine/fdm_toolchanger_common.json +++ b/resources/profiles/Custom/machine/fdm_toolchanger_common.json @@ -172,11 +172,11 @@ "0.4" ], "z_hop_types": [ - "Normal Lift", - "Normal Lift", - "Normal Lift", - "Normal Lift", - "Normal Lift" + "Slope Lift", + "Slope Lift", + "Slope Lift", + "Slope Lift", + "Slope Lift" ], "purge_in_prime_tower": "0", "machine_pause_gcode": "M601", diff --git a/resources/profiles/OrcaFilamentLibrary.json b/resources/profiles/OrcaFilamentLibrary.json index cd9abd8b0d..9701c6eb0d 100644 --- a/resources/profiles/OrcaFilamentLibrary.json +++ b/resources/profiles/OrcaFilamentLibrary.json @@ -1,6 +1,6 @@ { "name": "OrcaFilamentLibrary", - "version": "02.04.00.03", + "version": "02.04.00.04", "force_update": "0", "description": "Orca Filament Library", "filament_list": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PET-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PET-CF @base.json index 5a4e910502..c455832b9c 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PET-CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PET-CF @base.json @@ -36,6 +36,9 @@ "filament_max_volumetric_speed": [ "8" ], + "filament_multitool_ramming_flow": [ + "8" + ], "filament_type": [ "PET-CF" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PETG Basic @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PETG Basic @base.json index 9117643990..755f78cf08 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PETG Basic @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PETG Basic @base.json @@ -39,6 +39,9 @@ "filament_max_volumetric_speed": [ "8" ], + "filament_multitool_ramming_flow": [ + "8" + ], "filament_vendor": [ "Bambu Lab" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PETG Translucent @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PETG Translucent @base.json index 69cfb1dab7..0026f408f2 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PETG Translucent @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PETG Translucent @base.json @@ -39,6 +39,9 @@ "filament_max_volumetric_speed": [ "6" ], + "filament_multitool_ramming_flow": [ + "6" + ], "filament_vendor": [ "Bambu Lab" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Aero @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Aero @base.json index 889822b02f..1f11ddcc54 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Aero @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Aero @base.json @@ -21,6 +21,9 @@ "filament_max_volumetric_speed": [ "6" ], + "filament_multitool_ramming_flow": [ + "6" + ], "filament_type": [ "PLA-AERO" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support For PLA-PETG @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support For PLA-PETG @base.json index 49fdcb1e1b..1dea20d081 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support For PLA-PETG @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support For PLA-PETG @base.json @@ -27,6 +27,9 @@ "filament_max_volumetric_speed": [ "6" ], + "filament_multitool_ramming_flow": [ + "6" + ], "filament_scarf_seam_type": [ "none" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support for ABS @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support for ABS @base.json index 3fe47727e1..bf714a0352 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support for ABS @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support for ABS @base.json @@ -21,6 +21,9 @@ "filament_max_volumetric_speed": [ "6" ], + "filament_multitool_ramming_flow": [ + "6" + ], "filament_vendor": [ "Bambu Lab" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPU 60A @base.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPU 60A @base.json index 00834bb4a5..a4b0ebce09 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPU 60A @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPU 60A @base.json @@ -36,6 +36,9 @@ "filament_max_volumetric_speed": [ "1" ], + "filament_multitool_ramming_flow": [ + "1" + ], "filament_retraction_minimum_travel": [ "3" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas ASA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas ASA @base.json index d6ca0d695b..b4da81db72 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas ASA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas ASA @base.json @@ -72,15 +72,6 @@ "fan_min_speed": [ "10" ], - "filament_cooling_final_speed": [ - "0" - ], - "filament_cooling_initial_speed": [ - "0" - ], - "filament_cooling_moves": [ - "0" - ], "filament_cost": [ "599" ], @@ -99,30 +90,12 @@ "filament_is_support": [ "0" ], - "filament_loading_speed": [ - "0" - ], - "filament_loading_speed_start": [ - "0" - ], "filament_long_retractions_when_cut": [ "nil" ], "filament_max_volumetric_speed": [ "15" ], - "filament_minimal_purge_on_wipe_tower": [ - "0" - ], - "filament_multitool_ramming": [ - "0" - ], - "filament_multitool_ramming_flow": [ - "10" - ], - "filament_multitool_ramming_volume": [ - "10" - ], "filament_notes": [ "" ], @@ -165,21 +138,6 @@ "filament_soluble": [ "0" ], - "filament_stamping_distance": [ - "0" - ], - "filament_stamping_loading_speed": [ - "0" - ], - "filament_toolchange_delay": [ - "0" - ], - "filament_unloading_speed": [ - "0" - ], - "filament_unloading_speed_start": [ - "0" - ], "filament_vendor": [ "Elas" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas PETG Basic @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas PETG Basic @base.json index 478210bb7d..8b6db5d3ad 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas PETG Basic @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas PETG Basic @base.json @@ -42,15 +42,6 @@ "fan_min_speed": [ "20" ], - "filament_cooling_final_speed": [ - "0" - ], - "filament_cooling_initial_speed": [ - "0" - ], - "filament_cooling_moves": [ - "0" - ], "filament_cost": [ "445" ], @@ -69,30 +60,12 @@ "filament_is_support": [ "0" ], - "filament_loading_speed": [ - "0" - ], - "filament_loading_speed_start": [ - "0" - ], "filament_long_retractions_when_cut": [ "1" ], "filament_max_volumetric_speed": [ "18" ], - "filament_minimal_purge_on_wipe_tower": [ - "0" - ], - "filament_multitool_ramming": [ - "0" - ], - "filament_multitool_ramming_flow": [ - "10" - ], - "filament_multitool_ramming_volume": [ - "10" - ], "filament_notes": [ "" ], @@ -135,21 +108,6 @@ "filament_soluble": [ "0" ], - "filament_stamping_distance": [ - "0" - ], - "filament_stamping_loading_speed": [ - "0" - ], - "filament_toolchange_delay": [ - "0" - ], - "filament_unloading_speed": [ - "0" - ], - "filament_unloading_speed_start": [ - "0" - ], "filament_wipe": [ "nil" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas PLA Basic @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas PLA Basic @base.json index abfa611aa3..d3f34beb80 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas PLA Basic @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas PLA Basic @base.json @@ -71,15 +71,6 @@ "fan_min_speed": [ "60" ], - "filament_cooling_final_speed": [ - "0" - ], - "filament_cooling_initial_speed": [ - "0" - ], - "filament_cooling_moves": [ - "0" - ], "filament_cost": [ "449.5" ], @@ -98,30 +89,12 @@ "filament_is_support": [ "0" ], - "filament_loading_speed": [ - "0" - ], - "filament_loading_speed_start": [ - "0" - ], "filament_long_retractions_when_cut": [ "nil" ], "filament_max_volumetric_speed": [ "25" ], - "filament_minimal_purge_on_wipe_tower": [ - "0" - ], - "filament_multitool_ramming": [ - "0" - ], - "filament_multitool_ramming_flow": [ - "10" - ], - "filament_multitool_ramming_volume": [ - "10" - ], "filament_notes": [ "" ], @@ -164,21 +137,6 @@ "filament_soluble": [ "0" ], - "filament_stamping_distance": [ - "0" - ], - "filament_stamping_loading_speed": [ - "0" - ], - "filament_toolchange_delay": [ - "0" - ], - "filament_unloading_speed": [ - "0" - ], - "filament_unloading_speed_start": [ - "0" - ], "filament_vendor": [ "Elas" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas PLA Pro @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas PLA Pro @base.json index 38313d1d55..41fd91f011 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas PLA Pro @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas PLA Pro @base.json @@ -71,15 +71,6 @@ "fan_min_speed": [ "100" ], - "filament_cooling_final_speed": [ - "0" - ], - "filament_cooling_initial_speed": [ - "0" - ], - "filament_cooling_moves": [ - "0" - ], "filament_cost": [ "500" ], @@ -98,30 +89,12 @@ "filament_is_support": [ "0" ], - "filament_loading_speed": [ - "0" - ], - "filament_loading_speed_start": [ - "0" - ], "filament_long_retractions_when_cut": [ "nil" ], "filament_max_volumetric_speed": [ "18" ], - "filament_minimal_purge_on_wipe_tower": [ - "0" - ], - "filament_multitool_ramming": [ - "0" - ], - "filament_multitool_ramming_flow": [ - "10" - ], - "filament_multitool_ramming_volume": [ - "10" - ], "filament_notes": [ "" ], @@ -164,21 +137,6 @@ "filament_soluble": [ "0" ], - "filament_stamping_distance": [ - "0" - ], - "filament_stamping_loading_speed": [ - "0" - ], - "filament_toolchange_delay": [ - "0" - ], - "filament_unloading_speed": [ - "0" - ], - "filament_unloading_speed_start": [ - "0" - ], "filament_vendor": [ "Elas" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PAHT-CF @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PAHT-CF @System.json index d7dd19c086..7d22d28387 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PAHT-CF @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PAHT-CF @System.json @@ -24,6 +24,9 @@ "filament_max_volumetric_speed": [ "6" ], + "filament_multitool_ramming_flow": [ + "6" + ], "nozzle_temperature": [ "290" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG @base.json index d6cd360eba..997f38ed4d 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG @base.json @@ -35,6 +35,9 @@ "filament_max_volumetric_speed": [ "8" ], + "filament_multitool_ramming_flow": [ + "8" + ], "filament_vendor": [ "Elegoo" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Wood @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Wood @System.json index abae441db5..3d6c95ed00 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Wood @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Wood @System.json @@ -12,6 +12,9 @@ "filament_max_volumetric_speed": [ "10" ], + "filament_multitool_ramming_flow": [ + "10" + ], "nozzle_temperature": [ "220" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Neon @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Neon @System.json index b40ce2310b..dff734c96d 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Neon @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Neon @System.json @@ -44,5 +44,8 @@ ], "filament_max_volumetric_speed": [ "10" + ], + "filament_multitool_ramming_flow": [ + "10" ] } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Silk @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Silk @System.json index 843cf72fc5..1c3184da11 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Silk @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Silk @System.json @@ -44,5 +44,8 @@ ], "filament_max_volumetric_speed": [ "8" + ], + "filament_multitool_ramming_flow": [ + "8" ] } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PA-CF @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PA-CF @System.json index f7b9df437a..cf01ddf65b 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PA-CF @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PA-CF @System.json @@ -10,5 +10,8 @@ "filament_type": [ "PA-CF" ], + "filament_multitool_ramming_flow": [ + "8" + ], "compatible_printers": [] } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG HF @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG HF @System.json index e402cdf775..25cf20c304 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG HF @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG HF @System.json @@ -8,5 +8,8 @@ "filament_max_volumetric_speed": [ "20" ], + "filament_multitool_ramming_flow": [ + "20" + ], "compatible_printers": [] } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG-CF @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG-CF @System.json index 5ee99ffed9..30884cf5a0 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG-CF @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG-CF @System.json @@ -17,6 +17,9 @@ "filament_max_volumetric_speed": [ "11.5" ], + "filament_multitool_ramming_flow": [ + "13" + ], "overhang_fan_speed": [ "100" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA High Speed @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA High Speed @System.json index 041ff59c44..1880ca2b21 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA High Speed @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA High Speed @System.json @@ -12,6 +12,9 @@ "filament_max_volumetric_speed": [ "18" ], + "filament_multitool_ramming_flow": [ + "25" + ], "slow_down_layer_time": [ "4" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA Matte @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA Matte @System.json index d3a6d4813c..39c71d0d62 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA Matte @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA Matte @System.json @@ -8,6 +8,9 @@ "filament_max_volumetric_speed": [ "11" ], + "filament_multitool_ramming_flow": [ + "11" + ], "filament_retraction_length": [ "0.8" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PP-CF @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PP-CF @System.json index 65420e9dae..a7c1bbff00 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PP-CF @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PP-CF @System.json @@ -15,6 +15,9 @@ "filament_max_volumetric_speed": [ "6" ], + "filament_multitool_ramming_flow": [ + "6" + ], "filament_type": [ "PP-CF" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PP-GF @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PP-GF @System.json index 931ee4b7b3..cf9ea7ace2 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PP-GF @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PP-GF @System.json @@ -15,6 +15,9 @@ "filament_max_volumetric_speed": [ "6" ], + "filament_multitool_ramming_flow": [ + "6" + ], "filament_type": [ "PP-GF" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture Air PLA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture Air PLA @base.json index 39e351a24c..98d390e9b8 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture Air PLA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture Air PLA @base.json @@ -17,6 +17,9 @@ "filament_max_volumetric_speed": [ "8" ], + "filament_multitool_ramming_flow": [ + "8" + ], "filament_vendor": [ "Overture" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Valment/Valment PLA Silk @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Valment/Valment PLA Silk @base.json index d873590f08..258f80fb15 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Valment/Valment PLA Silk @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Valment/Valment PLA Silk @base.json @@ -23,6 +23,9 @@ "filament_max_volumetric_speed": [ "7.5" ], + "filament_multitool_ramming_flow": [ + "7.5" + ], "filament_vendor": [ "Valment" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_abs.json b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_abs.json index 6d9d015c11..dea3f03264 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_abs.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_abs.json @@ -43,6 +43,12 @@ "filament_max_volumetric_speed": [ "12" ], + "filament_multitool_ramming_flow": [ + "15" + ], + "filament_multitool_ramming_volume": [ + "10" + ], "filament_type": [ "ABS" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_asa.json b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_asa.json index 922a5eaa7a..09a29ce792 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_asa.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_asa.json @@ -43,6 +43,12 @@ "filament_max_volumetric_speed": [ "12" ], + "filament_multitool_ramming_flow": [ + "12" + ], + "filament_multitool_ramming_volume": [ + "10" + ], "filament_type": [ "ASA" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_bvoh.json b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_bvoh.json index d37476f458..cd15600a52 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_bvoh.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_bvoh.json @@ -41,6 +41,15 @@ "filament_max_volumetric_speed": [ "8" ], + "filament_multitool_ramming": [ + "0" + ], + "filament_multitool_ramming_flow": [ + "6" + ], + "filament_multitool_ramming_volume": [ + "0.1" + ], "filament_type": [ "BVOH" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_common.json b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_common.json index ce95ca7c52..3ff7e805ae 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_common.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_common.json @@ -66,6 +66,12 @@ "filament_minimal_purge_on_wipe_tower": [ "15" ], + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_volume": [ + "5" + ], "filament_retract_before_wipe": [ "nil" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_cope.json b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_cope.json index 80ffd173de..798f560e01 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_cope.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_cope.json @@ -41,6 +41,9 @@ "filament_max_volumetric_speed": [ "16" ], + "filament_multitool_ramming_flow": [ + "16" + ], "filament_scarf_seam_type": [ "none" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_eva.json b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_eva.json index bf1ff86af1..40498a05aa 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_eva.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_eva.json @@ -8,6 +8,9 @@ "filament_type": [ "EVA" ], + "filament_multitool_ramming_flow": [ + "12" + ], "supertack_plate_temp": [ "0" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_hips.json b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_hips.json index beaebbd0e7..f67709b4b2 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_hips.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_hips.json @@ -41,6 +41,9 @@ "filament_max_volumetric_speed": [ "8" ], + "filament_multitool_ramming_flow": [ + "8" + ], "filament_type": [ "HIPS" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pa.json b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pa.json index c2e4cf86df..185af32de7 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pa.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pa.json @@ -44,6 +44,9 @@ "filament_max_volumetric_speed": [ "8" ], + "filament_multitool_ramming_flow": [ + "12" + ], "filament_type": [ "PA" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_paht.json b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_paht.json index 058469ff71..2a1ca6d510 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_paht.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_paht.json @@ -7,6 +7,9 @@ "filament_max_volumetric_speed": [ "12" ], + "filament_multitool_ramming_flow": [ + "12" + ], "filament_type": [ "PAHT" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pc.json b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pc.json index 0f550063ad..d8fb7d00ae 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pc.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pc.json @@ -86,6 +86,9 @@ "filament_max_volumetric_speed": [ "12" ], + "filament_multitool_ramming_flow": [ + "16" + ], "filament_flow_ratio": [ "0.94" ] diff --git a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pctg.json b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pctg.json index 8ca7e39994..e656fb7715 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pctg.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pctg.json @@ -26,6 +26,9 @@ "filament_max_volumetric_speed": [ "12" ], + "filament_multitool_ramming_flow": [ + "10" + ], "filament_type": [ "PCTG" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pe.json b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pe.json index beb533d07f..a47543334b 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pe.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pe.json @@ -38,6 +38,9 @@ "filament_max_volumetric_speed": [ "12" ], + "filament_multitool_ramming_flow": [ + "12" + ], "filament_type": [ "PE" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pet.json b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pet.json index eabb12c708..8b3fef2f2b 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pet.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pet.json @@ -26,6 +26,9 @@ "filament_max_volumetric_speed": [ "10" ], + "filament_multitool_ramming_flow": [ + "15" + ], "filament_type": [ "PETG" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pha.json b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pha.json index f6ef3ffc0c..7719c6563d 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pha.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pha.json @@ -38,6 +38,9 @@ "filament_max_volumetric_speed": [ "6" ], + "filament_multitool_ramming_flow": [ + "6" + ], "filament_type": [ "PHA" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pla.json b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pla.json index ae82d44129..21b7c44365 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pla.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pla.json @@ -38,6 +38,9 @@ "filament_max_volumetric_speed": [ "12" ], + "filament_multitool_ramming_flow": [ + "20" + ], "filament_scarf_seam_type": [ "none" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pla_silk.json b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pla_silk.json index 3680a85602..a5fd601060 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pla_silk.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pla_silk.json @@ -9,6 +9,9 @@ "filament_flow_ratio": [ "0.98" ], + "filament_multitool_ramming_flow": [ + "10" + ], "slow_down_layer_time": [ "8" ] diff --git a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pp.json b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pp.json index ec9405ef9a..4df7753132 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pp.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pp.json @@ -38,6 +38,9 @@ "filament_max_volumetric_speed": [ "12" ], + "filament_multitool_ramming_flow": [ + "12" + ], "filament_type": [ "PP" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_ppa.json b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_ppa.json index 3eac71bc69..c250e588b0 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_ppa.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_ppa.json @@ -47,6 +47,9 @@ "filament_max_volumetric_speed": [ "8" ], + "filament_multitool_ramming_flow": [ + "8" + ], "filament_type": [ "PPA-CF" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pps.json b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pps.json index a6a95a804e..49e0bddefd 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pps.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pps.json @@ -43,6 +43,9 @@ "filament_max_volumetric_speed": [ "4" ], + "filament_multitool_ramming_flow": [ + "4" + ], "filament_type": [ "PPS" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pva.json b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pva.json index 0109726b0d..4bb30d7e11 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pva.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pva.json @@ -40,6 +40,15 @@ "filament_max_volumetric_speed": [ "12" ], + "filament_multitool_ramming": [ + "0" + ], + "filament_multitool_ramming_flow": [ + "6" + ], + "filament_multitool_ramming_volume": [ + "0.1" + ], "filament_soluble": [ "1" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_sbs.json b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_sbs.json index 96626d808d..9bc4d5ce36 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_sbs.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_sbs.json @@ -11,6 +11,9 @@ "filament_max_volumetric_speed": [ "12" ], + "filament_multitool_ramming_flow": [ + "12" + ], "filament_type": [ "SBS" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_tpu.json b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_tpu.json index 30d9415ad3..d6fb38a6ba 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_tpu.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_tpu.json @@ -43,6 +43,15 @@ "filament_max_volumetric_speed": [ "3.2" ], + "filament_multitool_ramming": [ + "0" + ], + "filament_multitool_ramming_flow": [ + "3.2" + ], + "filament_multitool_ramming_volume": [ + "0.1" + ], "filament_retraction_length": [ "0.4" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PLA-Marble @base.json b/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PLA-Marble @base.json index 40c314585c..cbd4f84ed4 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PLA-Marble @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PLA-Marble @base.json @@ -17,6 +17,9 @@ "filament_max_volumetric_speed": [ "8" ], + "filament_multitool_ramming_flow": [ + "8" + ], "filament_vendor": [ "eSUN" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PLA-Matte @base.json b/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PLA-Matte @base.json index 85c6049935..8d22168408 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PLA-Matte @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PLA-Matte @base.json @@ -17,6 +17,9 @@ "filament_max_volumetric_speed": [ "8" ], + "filament_multitool_ramming_flow": [ + "8" + ], "filament_vendor": [ "eSUN" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN ePLA-LW @System.json b/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN ePLA-LW @System.json index 138a388419..732eb3fd5b 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN ePLA-LW @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN ePLA-LW @System.json @@ -21,6 +21,9 @@ "filament_max_volumetric_speed": [ "6" ], + "filament_multitool_ramming_flow": [ + "6" + ], "filament_vendor": [ "eSUN" ], diff --git a/resources/profiles/Snapmaker.json b/resources/profiles/Snapmaker.json index cdc7f0fe81..ab2433242e 100644 --- a/resources/profiles/Snapmaker.json +++ b/resources/profiles/Snapmaker.json @@ -1,6 +1,6 @@ { "name": "Snapmaker", - "version": "02.04.00.07", + "version": "02.04.00.08", "force_update": "0", "description": "Snapmaker configurations", "machine_model_list": [ @@ -426,10 +426,6 @@ "name": "0.16 Optimal @Snapmaker U1 (0.4 nozzle)", "sub_path": "process/0.16 Optimal @Snapmaker U1 (0.4 nozzle).json" }, - { - "name": "0.20 Bambu Support W @Snapmaker U1 (0.4 nozzle)", - "sub_path": "process/0.20 Bambu Support W @Snapmaker U1 (0.4 nozzle).json" - }, { "name": "0.20 Quality @Snapmaker U1 (0.4 nozzle)", "sub_path": "process/0.20 Quality @Snapmaker U1 (0.4 nozzle).json" @@ -486,6 +482,66 @@ "name": "fdm_process_U1_0.8_common", "sub_path": "process/fdm_process_U1_0.8_common.json" }, + { + "name": "fdm_process_U1_0.06_nozzle_0.2", + "sub_path": "process/fdm_process_U1_0.06_nozzle_0.2.json" + }, + { + "name": "fdm_process_U1_0.08_nozzle_0.2", + "sub_path": "process/fdm_process_U1_0.08_nozzle_0.2.json" + }, + { + "name": "fdm_process_U1_0.10_nozzle_0.2", + "sub_path": "process/fdm_process_U1_0.10_nozzle_0.2.json" + }, + { + "name": "fdm_process_U1_0.12_nozzle_0.2", + "sub_path": "process/fdm_process_U1_0.12_nozzle_0.2.json" + }, + { + "name": "fdm_process_U1_0.14_nozzle_0.2", + "sub_path": "process/fdm_process_U1_0.14_nozzle_0.2.json" + }, + { + "name": "fdm_process_U1_0.18_nozzle_0.6", + "sub_path": "process/fdm_process_U1_0.18_nozzle_0.6.json" + }, + { + "name": "fdm_process_U1_0.24_nozzle_0.6", + "sub_path": "process/fdm_process_U1_0.24_nozzle_0.6.json" + }, + { + "name": "fdm_process_U1_0.24_nozzle_0.8", + "sub_path": "process/fdm_process_U1_0.24_nozzle_0.8.json" + }, + { + "name": "fdm_process_U1_0.30_nozzle_0.6", + "sub_path": "process/fdm_process_U1_0.30_nozzle_0.6.json" + }, + { + "name": "fdm_process_U1_0.32_nozzle_0.8", + "sub_path": "process/fdm_process_U1_0.32_nozzle_0.8.json" + }, + { + "name": "fdm_process_U1_0.36_nozzle_0.6", + "sub_path": "process/fdm_process_U1_0.36_nozzle_0.6.json" + }, + { + "name": "fdm_process_U1_0.40_nozzle_0.8", + "sub_path": "process/fdm_process_U1_0.40_nozzle_0.8.json" + }, + { + "name": "fdm_process_U1_0.42_nozzle_0.6", + "sub_path": "process/fdm_process_U1_0.42_nozzle_0.6.json" + }, + { + "name": "fdm_process_U1_0.48_nozzle_0.8", + "sub_path": "process/fdm_process_U1_0.48_nozzle_0.8.json" + }, + { + "name": "fdm_process_U1_0.56_nozzle_0.8", + "sub_path": "process/fdm_process_U1_0.56_nozzle_0.8.json" + }, { "name": "0.06 High Quality @Snapmaker U1 (0.2 nozzle)", "sub_path": "process/0.06 High Quality @Snapmaker U1 (0.2 nozzle).json" @@ -1508,10 +1564,6 @@ "name": "Snapmaker PLA Metal @U1", "sub_path": "filament/Snapmaker PLA Metal @U1.json" }, - { - "name": "Snapmaker PLA Silk @U1", - "sub_path": "filament/Snapmaker PLA Silk @U1.json" - }, { "name": "Snapmaker PLA Silk", "sub_path": "filament/Snapmaker PLA Silk.json" @@ -1671,6 +1723,214 @@ { "name": "Snapmaker PLA Matte @U1 base", "sub_path": "filament/Snapmaker PLA Matte @U1 base.json" + }, + { + "name": "Polymaker PLA @U1 base", + "sub_path": "filament/Polymaker PLA @U1 base.json" + }, + { + "name": "Polymaker Silk PLA Family @U1", + "sub_path": "filament/Polymaker Silk PLA Family @U1.json" + }, + { + "name": "Polymaker Tough PLA Family @U1", + "sub_path": "filament/Polymaker Tough PLA Family @U1.json" + }, + { + "name": "Snapmaker Breakaway Support For PLA @U1 0.2 nozzle", + "sub_path": "filament/Snapmaker Breakaway Support For PLA @U1 0.2 nozzle.json" + }, + { + "name": "Snapmaker Breakaway Support For PLA @U1 0.6 nozzle", + "sub_path": "filament/Snapmaker Breakaway Support For PLA @U1 0.6 nozzle.json" + }, + { + "name": "Snapmaker Breakaway Support For PLA @U1 0.8 nozzle", + "sub_path": "filament/Snapmaker Breakaway Support For PLA @U1 0.8 nozzle.json" + }, + { + "name": "Snapmaker PETG HF @U1 base2", + "sub_path": "filament/Snapmaker PETG HF @U1 base2.json" + }, + { + "name": "Snapmaker PETG Translucent @U1 base", + "sub_path": "filament/Snapmaker PETG Translucent @U1 base.json" + }, + { + "name": "Snapmaker PLA Basic @U1 base", + "sub_path": "filament/Snapmaker PLA Basic @U1 base.json" + }, + { + "name": "Snapmaker PLA Full Spectrum @U1 0.4 nozzle", + "sub_path": "filament/Snapmaker PLA Full Spectrum @U1 0.4 nozzle.json" + }, + { + "name": "Snapmaker PLA Glow @U1 base", + "sub_path": "filament/Snapmaker PLA Glow @U1 base.json" + }, + { + "name": "Snapmaker PLA Matte @U1 base2", + "sub_path": "filament/Snapmaker PLA Matte @U1 base2.json" + }, + { + "name": "Snapmaker PLA Silk @U1 0.2 nozzle", + "sub_path": "filament/Snapmaker PLA Silk @U1 0.2 nozzle.json" + }, + { + "name": "Snapmaker PLA Silk @U1 0.6 nozzle", + "sub_path": "filament/Snapmaker PLA Silk @U1 0.6 nozzle.json" + }, + { + "name": "Snapmaker PLA Silk @U1 0.8 nozzle", + "sub_path": "filament/Snapmaker PLA Silk @U1 0.8 nozzle.json" + }, + { + "name": "Snapmaker PLA SnapSpeed @U1 base2", + "sub_path": "filament/Snapmaker PLA SnapSpeed @U1 base2.json" + }, + { + "name": "Snapmaker PLA Translucent @U1 base", + "sub_path": "filament/Snapmaker PLA Translucent @U1 base.json" + }, + { + "name": "Snapmaker PLA Wood @U1 0.4 nozzle", + "sub_path": "filament/Snapmaker PLA Wood @U1 0.4 nozzle.json" + }, + { + "name": "Snapmaker PLA Wood @U1 0.6 nozzle", + "sub_path": "filament/Snapmaker PLA Wood @U1 0.6 nozzle.json" + }, + { + "name": "Snapmaker PLA Wood @U1 0.8 nozzle", + "sub_path": "filament/Snapmaker PLA Wood @U1 0.8 nozzle.json" + }, + { + "name": "Snapmaker PLA-CF @U1 0.4 nozzle", + "sub_path": "filament/Snapmaker PLA-CF @U1 0.4 nozzle.json" + }, + { + "name": "Snapmaker PLA-CF @U1 0.6 nozzle", + "sub_path": "filament/Snapmaker PLA-CF @U1 0.6 nozzle.json" + }, + { + "name": "Snapmaker PLA-CF @U1 0.8 nozzle", + "sub_path": "filament/Snapmaker PLA-CF @U1 0.8 nozzle.json" + }, + { + "name": "Snapmaker PVA @U1 0.6 nozzle", + "sub_path": "filament/Snapmaker PVA @U1 0.6 nozzle.json" + }, + { + "name": "Snapmaker PVA @U1 0.8 nozzle", + "sub_path": "filament/Snapmaker PVA @U1 0.8 nozzle.json" + }, + { + "name": "Snapmaker TPU 90A @U1", + "sub_path": "filament/Snapmaker TPU 90A @U1.json" + }, + { + "name": "Snapmaker TPU 90A @U1 0.6 nozzle", + "sub_path": "filament/Snapmaker TPU 90A @U1 0.6 nozzle.json" + }, + { + "name": "Snapmaker TPU 90A @U1 0.8 nozzle", + "sub_path": "filament/Snapmaker TPU 90A @U1 0.8 nozzle.json" + }, + { + "name": "Snapmaker TPU 95A HF @U1", + "sub_path": "filament/Snapmaker TPU 95A HF @U1.json" + }, + { + "name": "Snapmaker TPU 95A HF @U1 0.6 nozzle", + "sub_path": "filament/Snapmaker TPU 95A HF @U1 0.6 nozzle.json" + }, + { + "name": "Snapmaker TPU 95A HF @U1 0.8 nozzle", + "sub_path": "filament/Snapmaker TPU 95A HF @U1 0.8 nozzle.json" + }, + { + "name": "Snapmaker PLA Silk @U1", + "sub_path": "filament/Snapmaker PLA Silk @U1.json" + }, + { + "name": "Polymaker General PLA Family @U1", + "sub_path": "filament/Polymaker General PLA Family @U1.json" + }, + { + "name": "Snapmaker PETG HF @U1 0.2 nozzle", + "sub_path": "filament/Snapmaker PETG HF @U1 0.2 nozzle.json" + }, + { + "name": "Snapmaker PETG HF @U1 0.6 nozzle", + "sub_path": "filament/Snapmaker PETG HF @U1 0.6 nozzle.json" + }, + { + "name": "Snapmaker PETG HF @U1 0.8 nozzle", + "sub_path": "filament/Snapmaker PETG HF @U1 0.8 nozzle.json" + }, + { + "name": "Snapmaker PETG Translucent @U1 0.2 nozzle", + "sub_path": "filament/Snapmaker PETG Translucent @U1 0.2 nozzle.json" + }, + { + "name": "Snapmaker PETG Translucent @U1 0.4 nozzle", + "sub_path": "filament/Snapmaker PETG Translucent @U1 0.4 nozzle.json" + }, + { + "name": "Snapmaker PETG Translucent @U1 0.6 nozzle", + "sub_path": "filament/Snapmaker PETG Translucent @U1 0.6 nozzle.json" + }, + { + "name": "Snapmaker PETG Translucent @U1 0.8 nozzle", + "sub_path": "filament/Snapmaker PETG Translucent @U1 0.8 nozzle.json" + }, + { + "name": "Snapmaker PLA Basic @U1", + "sub_path": "filament/Snapmaker PLA Basic @U1.json" + }, + { + "name": "Snapmaker PLA Glow @U1 0.4 nozzle", + "sub_path": "filament/Snapmaker PLA Glow @U1 0.4 nozzle.json" + }, + { + "name": "Snapmaker PLA Matte @U1 0.2 nozzle", + "sub_path": "filament/Snapmaker PLA Matte @U1 0.2 nozzle.json" + }, + { + "name": "Snapmaker PLA Matte @U1 0.6 nozzle", + "sub_path": "filament/Snapmaker PLA Matte @U1 0.6 nozzle.json" + }, + { + "name": "Snapmaker PLA Matte @U1 0.8 nozzle", + "sub_path": "filament/Snapmaker PLA Matte @U1 0.8 nozzle.json" + }, + { + "name": "Snapmaker PLA SnapSpeed @U1 0.2 nozzle", + "sub_path": "filament/Snapmaker PLA SnapSpeed @U1 0.2 nozzle.json" + }, + { + "name": "Snapmaker PLA SnapSpeed @U1 0.6 nozzle", + "sub_path": "filament/Snapmaker PLA SnapSpeed @U1 0.6 nozzle.json" + }, + { + "name": "Snapmaker PLA SnapSpeed @U1 0.8 nozzle", + "sub_path": "filament/Snapmaker PLA SnapSpeed @U1 0.8 nozzle.json" + }, + { + "name": "Snapmaker PLA Translucent @U1 0.2 nozzle", + "sub_path": "filament/Snapmaker PLA Translucent @U1 0.2 nozzle.json" + }, + { + "name": "Snapmaker PLA Translucent @U1 0.4 nozzle", + "sub_path": "filament/Snapmaker PLA Translucent @U1 0.4 nozzle.json" + }, + { + "name": "Snapmaker PLA Translucent @U1 0.6 nozzle", + "sub_path": "filament/Snapmaker PLA Translucent @U1 0.6 nozzle.json" + }, + { + "name": "Snapmaker PLA Translucent @U1 0.8 nozzle", + "sub_path": "filament/Snapmaker PLA Translucent @U1 0.8 nozzle.json" } ], "machine_list": [ diff --git a/resources/profiles/Snapmaker/filament/Polymaker General PLA Family @U1.json b/resources/profiles/Snapmaker/filament/Polymaker General PLA Family @U1.json new file mode 100644 index 0000000000..c706ba776d --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Polymaker General PLA Family @U1.json @@ -0,0 +1,32 @@ +{ + "type": "filament", + "name": "Polymaker General PLA Family @U1", + "inherits": "Polymaker PLA @U1 base", + "from": "system", + "setting_id": "thXfSaUkOAKJ50ey", + "instantiation": "true", + "compatible_printers": [ + "Snapmaker U1 (0.4 nozzle)" + ], + "enable_pressure_advance": [ + "0" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "filament_vendor": [ + "Polymaker" + ], + "nozzle_temperature_range_high": [ + "230" + ], + "temperature_vitrification": [ + "62" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ] +} diff --git a/resources/profiles/Snapmaker/filament/Polymaker PLA @U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker PLA @U1 base.json new file mode 100644 index 0000000000..b27c48f720 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Polymaker PLA @U1 base.json @@ -0,0 +1,107 @@ +{ + "type": "filament", + "name": "Polymaker PLA @U1 base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "OGFL99", + "instantiation": "false", + "compatible_printers": [ + "Snapmaker U1 (0.4 nozzle)" + ], + "activate_air_filtration": [ + "0" + ], + "chamber_temperatures": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "70" + ], + "cool_plate_temp": [ + "35" + ], + "cool_plate_temp_initial_layer": [ + "35" + ], + "during_print_exhaust_fan_speed": [ + "70" + ], + "filament_cost": [ + "20" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_vendor": [ + "Generic" + ], + "filament_scarf_seam_type": [ + "none" + ], + "filament_scarf_height": [ + "10%" + ], + "filament_scarf_gap": [ + "15%" + ], + "filament_scarf_length": [ + "10" + ], + "filament_shrink": [ + "100%" + ], + "hot_plate_temp": [ + "55" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "nozzle_temperature": [ + "220" + ], + "overhang_fan_threshold": [ + "50%" + ], + "supertack_plate_temp": [ + "45" + ], + "supertack_plate_temp_initial_layer": [ + "45" + ], + "slow_down_layer_time": [ + "4" + ], + "slow_down_min_speed": [ + "10" + ], + "temperature_vitrification": [ + "45" + ], + "textured_plate_temp": [ + "55" + ], + "textured_plate_temp_initial_layer": [ + "55" + ], + "filament_start_gcode": [ + "; Filament gcode\n" + ], + "filament_end_gcode": [ + "; filament end gcode\n" + ] +} diff --git a/resources/profiles/Snapmaker/filament/Polymaker Silk PLA Family @U1.json b/resources/profiles/Snapmaker/filament/Polymaker Silk PLA Family @U1.json new file mode 100644 index 0000000000..b6bd119022 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Polymaker Silk PLA Family @U1.json @@ -0,0 +1,32 @@ +{ + "type": "filament", + "name": "Polymaker Silk PLA Family @U1", + "inherits": "Polymaker PLA @U1 base", + "from": "system", + "setting_id": "h8vIYpXbxFtHPV6e", + "instantiation": "true", + "compatible_printers": [ + "Snapmaker U1 (0.4 nozzle)" + ], + "filament_density": [ + "1.34" + ], + "filament_vendor": [ + "Polymaker" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature_range_high": [ + "230" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ] +} diff --git a/resources/profiles/Snapmaker/filament/Polymaker Tough PLA Family @U1.json b/resources/profiles/Snapmaker/filament/Polymaker Tough PLA Family @U1.json new file mode 100644 index 0000000000..e5c2c7d7f6 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Polymaker Tough PLA Family @U1.json @@ -0,0 +1,32 @@ +{ + "type": "filament", + "name": "Polymaker Tough PLA Family @U1", + "inherits": "Polymaker PLA @U1 base", + "from": "system", + "setting_id": "d6CC81Es2hp46bto", + "instantiation": "true", + "compatible_printers": [ + "Snapmaker U1 (0.4 nozzle)" + ], + "filament_density": [ + "1.23" + ], + "filament_flow_ratio": [ + "0.96" + ], + "filament_vendor": [ + "Polymaker" + ], + "slow_down_layer_time": [ + "6" + ], + "temperature_vitrification": [ + "55" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ] +} diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Fiberon ASA-CF08 @Snapmaker U1.json b/resources/profiles/Snapmaker/filament/Polymaker/Fiberon ASA-CF08 @Snapmaker U1.json index 31799163c6..b38925e01b 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Fiberon ASA-CF08 @Snapmaker U1.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Fiberon ASA-CF08 @Snapmaker U1.json @@ -11,7 +11,6 @@ "filament_minimal_purge_on_wipe_tower": [ "15" ], - "pressure_advance": [ "0.05" ] diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Fiberon PA12-CF10 @Snapmaker U1.json b/resources/profiles/Snapmaker/filament/Polymaker/Fiberon PA12-CF10 @Snapmaker U1.json index fd99eee105..1bb569c291 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Fiberon PA12-CF10 @Snapmaker U1.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Fiberon PA12-CF10 @Snapmaker U1.json @@ -17,7 +17,6 @@ "filament_z_hop": [ "0.0" ], - "enable_pressure_advance": [ "1" ], diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Fiberon PA6-CF20 @Snapmaker U1.json b/resources/profiles/Snapmaker/filament/Polymaker/Fiberon PA6-CF20 @Snapmaker U1.json index 1b227b2fd0..d6106faa50 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Fiberon PA6-CF20 @Snapmaker U1.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Fiberon PA6-CF20 @Snapmaker U1.json @@ -17,7 +17,6 @@ "filament_z_hop": [ "0.0" ], - "enable_pressure_advance": [ "1" ], diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Fiberon PETG-ESD @Snapmaker U1.json b/resources/profiles/Snapmaker/filament/Polymaker/Fiberon PETG-ESD @Snapmaker U1.json index cfe6890a80..6e1797904c 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Fiberon PETG-ESD @Snapmaker U1.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Fiberon PETG-ESD @Snapmaker U1.json @@ -17,7 +17,6 @@ "supertack_plate_temp_initial_layer": [ "70" ], - "pressure_advance": [ "0.04" ] diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite Dual PLA @0.2 nozzle.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite Dual PLA @0.2 nozzle.json index 707d5ae54b..f4703d6c40 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite Dual PLA @0.2 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite Dual PLA @0.2 nozzle.json @@ -1,10 +1,10 @@ { "type": "filament", - "from": "system", - "instantiation": "true", "name": "PolyLite Dual PLA @0.2 nozzle", - "setting_id": "jhmy4YHi9MuL0DWu", "inherits": "PolyLite PLA @0.2 nozzle", + "from": "system", + "setting_id": "jhmy4YHi9MuL0DWu", + "instantiation": "true", "compatible_printers": [ "Snapmaker A250 Dual (0.2 nozzle)", "Snapmaker A250 Dual BKit (0.2 nozzle)", diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite J1 PLA @0.2 nozzle.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite J1 PLA @0.2 nozzle.json index 1a4422472c..e1ce855c61 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite J1 PLA @0.2 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite J1 PLA @0.2 nozzle.json @@ -1,10 +1,10 @@ { "type": "filament", - "from": "system", - "instantiation": "true", "name": "PolyLite J1 PLA @0.2 nozzle", - "setting_id": "jFlRSxx0KvN3BOUu", "inherits": "PolyLite PLA @0.2 nozzle", + "from": "system", + "setting_id": "jFlRSxx0KvN3BOUu", + "instantiation": "true", "compatible_printers": [ "Snapmaker J1 (0.2 nozzle)" ] diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite J1 PLA.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite J1 PLA.json index 6c5017d0a8..55d39a0832 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite J1 PLA.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite J1 PLA.json @@ -1,10 +1,10 @@ { "type": "filament", - "from": "system", - "instantiation": "true", "name": "PolyLite J1 PLA", - "setting_id": "wcpOTTMyZNPFKyXr", "inherits": "PolyLite PLA @base", + "from": "system", + "setting_id": "wcpOTTMyZNPFKyXr", + "instantiation": "true", "compatible_printers": [ "Snapmaker J1 (0.4 nozzle)", "Snapmaker J1 (0.6 nozzle)", diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PETG @Base.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PETG @Base.json index cd5f75a463..579940a5b2 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PETG @Base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PETG @Base.json @@ -1,4 +1,9 @@ { + "type": "filament", + "name": "PolyLite PETG @Base", + "inherits": "fdm_filament_petg", + "from": "system", + "instantiation": "false", "filament_density": [ "1.25" ], @@ -18,11 +23,6 @@ "0" ], "description": "", - "inherits": "fdm_filament_petg", - "name": "PolyLite PETG @Base", - "type": "filament", - "instantiation": "false", - "from": "system", "filament_vendor": [ "Polymaker" ] diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PETG @Snapmaker U1.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PETG @Snapmaker U1.json index 47cf37385d..f51cc5eeec 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PETG @Snapmaker U1.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PETG @Snapmaker U1.json @@ -17,7 +17,6 @@ "supertack_plate_temp_initial_layer": [ "70" ], - "pressure_advance": [ "0.05" ] diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PETG Translucent @Snapmaker U1.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PETG Translucent @Snapmaker U1.json index 6089dd66c4..a3efeee371 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PETG Translucent @Snapmaker U1.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PETG Translucent @Snapmaker U1.json @@ -17,7 +17,6 @@ "supertack_plate_temp_initial_layer": [ "70" ], - "pressure_advance": [ "0.05" ] diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA @0.2 nozzle.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA @0.2 nozzle.json index c3897e63c2..fcceb14014 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA @0.2 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA @0.2 nozzle.json @@ -1,10 +1,10 @@ { "type": "filament", - "from": "system", - "instantiation": "true", "name": "PolyLite PLA @0.2 nozzle", - "setting_id": "s9mdMaFca8SHfji9", "inherits": "PolyLite PLA @base", + "from": "system", + "setting_id": "s9mdMaFca8SHfji9", + "instantiation": "true", "compatible_printers": [ "Snapmaker A250 (0.2 nozzle)", "Snapmaker A250 BKit (0.2 nozzle)", diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA @base.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA @base.json index 4173572637..3a4621b838 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA @base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA @base.json @@ -1,10 +1,10 @@ { "type": "filament", - "from": "system", - "instantiation": "false", "name": "PolyLite PLA @base", - "filament_id": "1393866034", "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "1393866034", + "instantiation": "false", "filament_flow_ratio": [ "0.95" ], diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra Dual PLA @0.2 nozzle.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra Dual PLA @0.2 nozzle.json index b45068dd52..3f8cbc7674 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra Dual PLA @0.2 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra Dual PLA @0.2 nozzle.json @@ -1,10 +1,10 @@ { "type": "filament", - "from": "system", - "instantiation": "true", "name": "PolyTerra Dual PLA @0.2 nozzle", - "setting_id": "UQYgjH1uVxf3d2Nv", "inherits": "PolyTerra PLA @0.2 nozzle", + "from": "system", + "setting_id": "UQYgjH1uVxf3d2Nv", + "instantiation": "true", "compatible_printers": [ "Snapmaker A250 Dual (0.2 nozzle)", "Snapmaker A250 Dual BKit (0.2 nozzle)", diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra J1 PLA @0.2 nozzle.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra J1 PLA @0.2 nozzle.json index dd4f969f62..9cb7060139 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra J1 PLA @0.2 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra J1 PLA @0.2 nozzle.json @@ -1,10 +1,10 @@ { "type": "filament", - "from": "system", - "instantiation": "true", "name": "PolyTerra J1 PLA @0.2 nozzle", - "setting_id": "mxKHxGmBZzPLS82O", "inherits": "PolyTerra PLA @0.2 nozzle", + "from": "system", + "setting_id": "mxKHxGmBZzPLS82O", + "instantiation": "true", "compatible_printers": [ "Snapmaker J1 (0.2 nozzle)" ] diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra J1 PLA.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra J1 PLA.json index 7b66438058..2583b2a2c3 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra J1 PLA.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra J1 PLA.json @@ -1,10 +1,10 @@ { "type": "filament", - "from": "system", - "instantiation": "true", "name": "PolyTerra J1 PLA", - "setting_id": "4MZWZX7QPBzxdEGj", "inherits": "PolyTerra PLA @base", + "from": "system", + "setting_id": "4MZWZX7QPBzxdEGj", + "instantiation": "true", "compatible_printers": [ "Snapmaker J1 (0.4 nozzle)", "Snapmaker J1 (0.6 nozzle)", diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra PLA @0.2 nozzle.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra PLA @0.2 nozzle.json index 07d45a7633..e70ee3d5a0 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra PLA @0.2 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra PLA @0.2 nozzle.json @@ -1,10 +1,10 @@ { "type": "filament", - "from": "system", - "instantiation": "true", "name": "PolyTerra PLA @0.2 nozzle", - "setting_id": "6W1ygT08NordBdIW", "inherits": "PolyTerra PLA @base", + "from": "system", + "setting_id": "6W1ygT08NordBdIW", + "instantiation": "true", "compatible_printers": [ "Snapmaker A250 (0.2 nozzle)", "Snapmaker A250 BKit (0.2 nozzle)", diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Polymaker HT-PLA @Base.json b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker HT-PLA @Base.json index 7c05254a2e..76b1d2020c 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Polymaker HT-PLA @Base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker HT-PLA @Base.json @@ -1,4 +1,9 @@ { + "type": "filament", + "name": "Polymaker HT-PLA @Base", + "inherits": "fdm_filament_pla", + "from": "system", + "instantiation": "false", "filament_density": [ "1.28" ], @@ -18,11 +23,6 @@ "0" ], "description": "", - "inherits": "fdm_filament_pla", - "name": "Polymaker HT-PLA @Base", - "type": "filament", - "instantiation": "false", - "from": "system", "filament_vendor": [ "Polymaker" ] diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Polymaker HT-PLA-GF @Base.json b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker HT-PLA-GF @Base.json index 3a64237122..06019b562c 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Polymaker HT-PLA-GF @Base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker HT-PLA-GF @Base.json @@ -1,4 +1,9 @@ { + "type": "filament", + "name": "Polymaker HT-PLA-GF @Base", + "inherits": "fdm_filament_pla", + "from": "system", + "instantiation": "false", "filament_density": [ "1.34" ], @@ -18,11 +23,6 @@ "0" ], "description": "", - "inherits": "fdm_filament_pla", - "name": "Polymaker HT-PLA-GF @Base", - "type": "filament", - "instantiation": "false", - "from": "system", "filament_vendor": [ "Polymaker" ] diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PETG @Base.json b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PETG @Base.json index 0965bd153b..3692eac7d5 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PETG @Base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PETG @Base.json @@ -1,4 +1,9 @@ { + "type": "filament", + "name": "Polymaker PETG @Base", + "inherits": "fdm_filament_petg", + "from": "system", + "instantiation": "false", "filament_density": [ "1.3" ], @@ -18,11 +23,6 @@ "0" ], "description": "", - "inherits": "fdm_filament_petg", - "name": "Polymaker PETG @Base", - "type": "filament", - "instantiation": "false", - "from": "system", "filament_vendor": [ "Polymaker" ] diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PLA Pro @Base.json b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PLA Pro @Base.json index 072fa53c93..d69ccc79f2 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PLA Pro @Base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PLA Pro @Base.json @@ -1,4 +1,9 @@ { + "type": "filament", + "name": "Polymaker PLA Pro @Base", + "inherits": "fdm_filament_pla", + "from": "system", + "instantiation": "false", "filament_density": [ "1.23" ], @@ -18,11 +23,6 @@ "0" ], "description": "", - "inherits": "fdm_filament_pla", - "name": "Polymaker PLA Pro @Base", - "type": "filament", - "instantiation": "false", - "from": "system", "filament_vendor": [ "Polymaker" ] diff --git a/resources/profiles/Snapmaker/filament/Snapmaker ABS @U1.json b/resources/profiles/Snapmaker/filament/Snapmaker ABS @U1.json index 083432ebd5..fe6c59ba80 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker ABS @U1.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker ABS @U1.json @@ -7,5 +7,8 @@ "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.4 nozzle)" + ], + "filament_retract_length_toolchange": [ + "5" ] } diff --git a/resources/profiles/Snapmaker/filament/Snapmaker ASA @U1.json b/resources/profiles/Snapmaker/filament/Snapmaker ASA @U1.json index 0c5d22723a..67bde29e8d 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker ASA @U1.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker ASA @U1.json @@ -7,5 +7,8 @@ "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.4 nozzle)" + ], + "filament_retract_length_toolchange": [ + "5" ] } diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Breakaway Support For PLA @U1 0.2 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker Breakaway Support For PLA @U1 0.2 nozzle.json new file mode 100644 index 0000000000..db331b0daa --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker Breakaway Support For PLA @U1 0.2 nozzle.json @@ -0,0 +1,104 @@ +{ + "type": "filament", + "name": "Snapmaker Breakaway Support For PLA @U1 0.2 nozzle", + "inherits": "Snapmaker Breakaway Support @base", + "from": "system", + "setting_id": "mJoaud6wulT4p8SA", + "instantiation": "true", + "compatible_printers": [ + "Snapmaker U1 (0.2 nozzle)" + ], + "filament_type": [ + "PLA" + ], + "enable_pressure_advance": [ + "0" + ], + "additional_cooling_fan_speed": [ + "70" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "70" + ], + "fan_max_speed": [ + "30" + ], + "fan_min_speed": [ + "20" + ], + "filament_cost": [ + "69.98" + ], + "filament_density": [ + "1.3" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "0.5" + ], + "filament_retract_length_toolchange": [ + "10" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "nozzle_temperature": [ + "240" + ], + "nozzle_temperature_initial_layer": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "pressure_advance": [ + "0.2" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "filament_cooling_moves": [ + "4" + ], + "filament_loading_speed": [ + "28" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_flow": [ + "5" + ], + "filament_multitool_ramming_volume": [ + "5" + ], + "filament_unloading_speed": [ + "90" + ], + "filament_unloading_speed_start": [ + "100" + ] +} diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Breakaway Support For PLA @U1 0.6 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker Breakaway Support For PLA @U1 0.6 nozzle.json new file mode 100644 index 0000000000..248c57f6d0 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker Breakaway Support For PLA @U1 0.6 nozzle.json @@ -0,0 +1,104 @@ +{ + "type": "filament", + "name": "Snapmaker Breakaway Support For PLA @U1 0.6 nozzle", + "inherits": "Snapmaker Breakaway Support @base", + "from": "system", + "setting_id": "rKUUREJNhstIU0I2", + "instantiation": "true", + "compatible_printers": [ + "Snapmaker U1 (0.6 nozzle)" + ], + "filament_type": [ + "PLA" + ], + "enable_pressure_advance": [ + "0" + ], + "filament_cost": [ + "69.98" + ], + "filament_density": [ + "1.3" + ], + "filament_flow_ratio": [ + "0.95" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "nozzle_temperature": [ + "210" + ], + "nozzle_temperature_initial_layer": [ + "210" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "pressure_advance": [ + "0.02" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "additional_cooling_fan_speed": [ + "70" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "70" + ], + "fan_min_speed": [ + "100" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_retract_length_toolchange": [ + "10" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "1" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_wipe_distance": [ + "2" + ], + "filament_cooling_moves": [ + "4" + ], + "filament_loading_speed": [ + "28" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_flow": [ + "20" + ], + "filament_multitool_ramming_volume": [ + "5" + ], + "filament_unloading_speed": [ + "90" + ], + "filament_unloading_speed_start": [ + "100" + ] +} diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Breakaway Support For PLA @U1 0.8 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker Breakaway Support For PLA @U1 0.8 nozzle.json new file mode 100644 index 0000000000..47cf80d076 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker Breakaway Support For PLA @U1 0.8 nozzle.json @@ -0,0 +1,98 @@ +{ + "type": "filament", + "name": "Snapmaker Breakaway Support For PLA @U1 0.8 nozzle", + "inherits": "Snapmaker Breakaway Support @base", + "from": "system", + "setting_id": "hQ8jQ5GKQKGKuPew", + "instantiation": "true", + "compatible_printers": [ + "Snapmaker U1 (0.8 nozzle)" + ], + "filament_type": [ + "PLA" + ], + "enable_pressure_advance": [ + "0" + ], + "additional_cooling_fan_speed": [ + "70" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "70" + ], + "filament_cost": [ + "69.98" + ], + "filament_density": [ + "1.3" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_flow_ratio": [ + "0.93" + ], + "filament_retract_length_toolchange": [ + "10" + ], + "filament_retraction_length": [ + "3" + ], + "filament_retraction_speed": [ + "nil" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "nozzle_temperature": [ + "210" + ], + "nozzle_temperature_initial_layer": [ + "210" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "pressure_advance": [ + "0.015" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "filament_cooling_moves": [ + "4" + ], + "filament_loading_speed": [ + "28" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_flow": [ + "20" + ], + "filament_multitool_ramming_volume": [ + "5" + ], + "filament_unloading_speed": [ + "90" + ], + "filament_unloading_speed_start": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "textured_plate_temp": [ + "65" + ] +} diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Breakaway Support For PLA @U1.json b/resources/profiles/Snapmaker/filament/Snapmaker Breakaway Support For PLA @U1.json index 97b2f8b07f..9e5d63a63c 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Breakaway Support For PLA @U1.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Breakaway Support For PLA @U1.json @@ -10,5 +10,83 @@ ], "filament_type": [ "PLA" + ], + "enable_pressure_advance": [ + "1" + ], + "additional_cooling_fan_speed": [ + "70" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "70" + ], + "fan_min_speed": [ + "100" + ], + "filament_cooling_moves": [ + "4" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_loading_speed": [ + "28" + ], + "filament_minimal_purge_on_wipe_tower": [ + "20" + ], + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_flow": [ + "20" + ], + "filament_multitool_ramming_volume": [ + "5" + ], + "filament_retract_length_toolchange": [ + "5" + ], + "filament_retraction_length": [ + "1" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_unloading_speed": [ + "90" + ], + "filament_unloading_speed_start": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "nozzle_temperature": [ + "210" + ], + "nozzle_temperature_initial_layer": [ + "210" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "pressure_advance": [ + "0.03" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" ] } diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PETG HF @U1 0.2 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker PETG HF @U1 0.2 nozzle.json new file mode 100644 index 0000000000..f1c3aa30a1 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker PETG HF @U1 0.2 nozzle.json @@ -0,0 +1,108 @@ +{ + "type": "filament", + "name": "Snapmaker PETG HF @U1 0.2 nozzle", + "inherits": "Snapmaker PETG HF @U1 base2", + "from": "system", + "setting_id": "Ujul2YTBwfldFiFd", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "1", + "1" + ], + "filament_ramming_travel_time": [ + "0", + "0" + ], + "long_retractions_when_ec": [ + "0", + "0" + ], + "retraction_distances_when_ec": [ + "0", + "0" + ], + "compatible_printers": [ + "Snapmaker U1 (0.2 nozzle)" + ], + "additional_cooling_fan_speed": [ + "70" + ], + "eng_plate_temp": [ + "80" + ], + "eng_plate_temp_initial_layer": [ + "80" + ], + "fan_cooling_layer_time": [ + "20" + ], + "fan_max_speed": [ + "60" + ], + "fan_min_speed": [ + "30" + ], + "filament_end_gcode": [ + "\n\n" + ], + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_flow": [ + "3" + ], + "filament_multitool_ramming_volume": [ + "5" + ], + "filament_retract_length_toolchange": [ + "5" + ], + "filament_retraction_length": [ + "1.5" + ], + "filament_start_gcode": [ + "" + ], + "filament_vendor": [ + "Snapmaker" + ], + "hot_plate_temp": [ + "80" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "nozzle_temperature": [ + "245" + ], + "nozzle_temperature_initial_layer": [ + "245" + ], + "nozzle_temperature_range_low": [ + "230" + ], + "overhang_fan_speed": [ + "100" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "supertack_plate_temp": [ + "60" + ], + "supertack_plate_temp_initial_layer": [ + "60" + ], + "textured_plate_temp": [ + "80" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "filament_z_hop_types": [ + "Slope Lift" + ] +} diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PETG HF @U1 0.6 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker PETG HF @U1 0.6 nozzle.json new file mode 100644 index 0000000000..66a535b7fb --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker PETG HF @U1 0.6 nozzle.json @@ -0,0 +1,113 @@ +{ + "type": "filament", + "name": "Snapmaker PETG HF @U1 0.6 nozzle", + "inherits": "Snapmaker PETG HF @U1 base2", + "from": "system", + "setting_id": "2FfQZdp5xunngnF0", + "instantiation": "true", + "filament_ramming_travel_time": [ + "0", + "0" + ], + "long_retractions_when_ec": [ + "0", + "0" + ], + "retraction_distances_when_ec": [ + "0", + "0" + ], + "compatible_printers": [ + "Snapmaker U1 (0.6 nozzle)" + ], + "additional_cooling_fan_speed": [ + "70" + ], + "eng_plate_temp": [ + "80" + ], + "eng_plate_temp_initial_layer": [ + "80" + ], + "fan_cooling_layer_time": [ + "20" + ], + "fan_max_speed": [ + "60" + ], + "fan_min_speed": [ + "30" + ], + "filament_end_gcode": [ + "\n" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_flow": [ + "20" + ], + "filament_multitool_ramming_volume": [ + "5" + ], + "filament_retract_length_toolchange": [ + "5" + ], + "filament_retraction_length": [ + "2.5" + ], + "filament_start_gcode": [ + "" + ], + "filament_vendor": [ + "Snapmaker" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "hot_plate_temp": [ + "80" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "nozzle_temperature": [ + "245" + ], + "nozzle_temperature_initial_layer": [ + "245" + ], + "nozzle_temperature_range_low": [ + "230" + ], + "overhang_fan_speed": [ + "100" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "supertack_plate_temp": [ + "60" + ], + "supertack_plate_temp_initial_layer": [ + "60" + ], + "textured_plate_temp": [ + "80" + ], + "textured_plate_temp_initial_layer": [ + "80" + ] +} diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PETG HF @U1 0.8 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker PETG HF @U1 0.8 nozzle.json new file mode 100644 index 0000000000..04446a623e --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker PETG HF @U1 0.8 nozzle.json @@ -0,0 +1,110 @@ +{ + "type": "filament", + "name": "Snapmaker PETG HF @U1 0.8 nozzle", + "inherits": "Snapmaker PETG HF @U1 base2", + "from": "system", + "setting_id": "ebANa67V4B2nwUaX", + "instantiation": "true", + "filament_ramming_travel_time": [ + "0", + "0" + ], + "long_retractions_when_ec": [ + "0", + "0" + ], + "retraction_distances_when_ec": [ + "0", + "0" + ], + "compatible_printers": [ + "Snapmaker U1 (0.8 nozzle)" + ], + "additional_cooling_fan_speed": [ + "70" + ], + "eng_plate_temp": [ + "80" + ], + "eng_plate_temp_initial_layer": [ + "80" + ], + "fan_cooling_layer_time": [ + "20" + ], + "fan_max_speed": [ + "60" + ], + "fan_min_speed": [ + "30" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_flow": [ + "20" + ], + "filament_multitool_ramming_volume": [ + "5" + ], + "filament_retract_length_toolchange": [ + "5" + ], + "filament_retraction_length": [ + "1" + ], + "filament_start_gcode": [ + "" + ], + "filament_vendor": [ + "Snapmaker" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "2" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "hot_plate_temp": [ + "80" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "nozzle_temperature": [ + "245" + ], + "nozzle_temperature_initial_layer": [ + "245" + ], + "nozzle_temperature_range_low": [ + "230" + ], + "overhang_fan_speed": [ + "100" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "supertack_plate_temp": [ + "60" + ], + "supertack_plate_temp_initial_layer": [ + "60" + ], + "textured_plate_temp": [ + "80" + ], + "textured_plate_temp_initial_layer": [ + "80" + ] +} diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PETG HF @U1 base2.json b/resources/profiles/Snapmaker/filament/Snapmaker PETG HF @U1 base2.json new file mode 100644 index 0000000000..0ad75759a1 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker PETG HF @U1 base2.json @@ -0,0 +1,279 @@ +{ + "type": "filament", + "name": "Snapmaker PETG HF @U1 base2", + "inherits": "fdm_filament_petg", + "from": "system", + "filament_id": "GFG96", + "instantiation": "false", + "cool_plate_temp": [ + "0" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "eng_plate_temp": [ + "70" + ], + "eng_plate_temp_initial_layer": [ + "70" + ], + "filament_type": [ + "PETG" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "40" + ], + "filament_cost": [ + "24.99" + ], + "filament_density": [ + "1.28" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "10%" + ], + "slow_down_layer_time": [ + "25" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >80)||(bed_temperature_initial_layer[current_extruder] >80)}M106 P3 S255\n{elsif (bed_temperature[current_extruder] >60)||(bed_temperature_initial_layer[current_extruder] >60)}M106 P3 S180\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ], + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "chamber_temperatures": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "70" + ], + "counter_coef_1": [ + "0" + ], + "counter_coef_2": [ + "0.008" + ], + "counter_coef_3": [ + "-0.041" + ], + "counter_limit_min": [ + "-0.035" + ], + "counter_limit_max": [ + "0.033" + ], + "circle_compensation_speed": [ + "200" + ], + "during_print_exhaust_fan_speed": [ + "70" + ], + "diameter_limit": [ + "50" + ], + "fan_min_speed": [ + "20" + ], + "filament_cooling_before_tower": [ + "0" + ], + "filament_dev_ams_drying_ams_limitations": [ + "0" + ], + "filament_dev_ams_drying_temperature": [ + "40.0" + ], + "filament_dev_ams_drying_time": [ + "8.0" + ], + "filament_dev_drying_softening_temperature": [ + "40.0" + ], + "filament_dev_ams_drying_heat_distortion_temperature": [ + "45.0" + ], + "filament_dev_drying_cooling_temperature": [ + "35.0" + ], + "filament_dev_chamber_drying_bed_temperature": [ + "90.0" + ], + "filament_dev_chamber_drying_time": [ + "12.0" + ], + "filament_flush_temp": [ + "0" + ], + "filament_flush_volumetric_speed": [ + "0" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_long_retractions_when_ec": [ + "nil" + ], + "filament_ramming_volumetric_speed": [ + "-1" + ], + "filament_ramming_volumetric_speed_nc": [ + "-1" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_printable": [ + "3" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "filament_retraction_distances_when_ec": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_vendor": [ + "Generic" + ], + "filament_prime_volume": [ + "45" + ], + "filament_prime_volume_nc": [ + "60" + ], + "filament_extruder_variant": [ + "Direct Drive Standard" + ], + "filament_scarf_seam_type": [ + "none" + ], + "filament_scarf_height": [ + "10%" + ], + "filament_scarf_gap": [ + "0%" + ], + "filament_scarf_length": [ + "10" + ], + "filament_shrink": [ + "100%" + ], + "filament_pre_cooling_temperature": [ + "0" + ], + "filament_pre_cooling_temperature_nc": [ + "0" + ], + "filament_ramming_travel_time": [ + "0" + ], + "filament_ramming_travel_time_nc": [ + "0" + ], + "filament_retract_length_nc": [ + "14" + ], + "hole_coef_1": [ + "0" + ], + "hole_coef_2": [ + "-0.008" + ], + "hole_coef_3": [ + "0.23415" + ], + "hole_limit_min": [ + "0.088" + ], + "hole_limit_max": [ + "0.22" + ], + "impact_strength_z": [ + "10" + ], + "long_retractions_when_ec": [ + "0" + ], + "retraction_distances_when_ec": [ + "0" + ], + "supertack_plate_temp": [ + "70" + ], + "supertack_plate_temp_initial_layer": [ + "70" + ], + "no_slow_down_for_cooling_on_outwalls": [ + "0" + ], + "slow_down_min_speed": [ + "10" + ], + "temperature_vitrification": [ + "70" + ], + "filament_change_length": [ + "10" + ], + "filament_velocity_adaptation_factor": [ + "1" + ], + "compatible_printers": [], + "filament_end_gcode": [ + "; filament end gcode \n\n" + ], + "filament_adaptive_volumetric_speed": [ + "0" + ], + "volumetric_speed_coefficients": [ + "0 0 0 0 0 0" + ], + "filament_adhesiveness_category": [ + "300" + ] +} diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PETG Translucent @U1 0.2 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker PETG Translucent @U1 0.2 nozzle.json new file mode 100644 index 0000000000..ee6234f406 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker PETG Translucent @U1 0.2 nozzle.json @@ -0,0 +1,110 @@ +{ + "type": "filament", + "name": "Snapmaker PETG Translucent @U1 0.2 nozzle", + "inherits": "Snapmaker PETG Translucent @U1 base", + "from": "system", + "setting_id": "UTpedqYJysaoe3OI", + "instantiation": "true", + "compatible_printers": [ + "Snapmaker U1 (0.2 nozzle)" + ], + "additional_cooling_fan_speed": [ + "20" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "70" + ], + "fan_max_speed": [ + "40" + ], + "fan_min_speed": [ + "20" + ], + "filament_cooling_moves": [ + "4" + ], + "filament_cost": [ + "25" + ], + "filament_density": [ + "1.25" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_loading_speed": [ + "28" + ], + "filament_max_volumetric_speed": [ + "1" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_flow": [ + "5" + ], + "filament_multitool_ramming_volume": [ + "5" + ], + "filament_retract_length_toolchange": [ + "10" + ], + "filament_retraction_length": [ + "1" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "50" + ], + "filament_unloading_speed": [ + "90" + ], + "filament_unloading_speed_start": [ + "100" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "hot_plate_temp": [ + "80" + ], + "nozzle_temperature": [ + "245" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_low": [ + "230" + ], + "overhang_fan_threshold": [ + "10%" + ], + "pressure_advance": [ + "0.23" + ], + "slow_down_min_speed": [ + "10" + ], + "textured_plate_temp": [ + "80" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "enable_pressure_advance": [ + "0" + ] +} diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PETG Translucent @U1 0.4 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker PETG Translucent @U1 0.4 nozzle.json new file mode 100644 index 0000000000..e0e60a0e14 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker PETG Translucent @U1 0.4 nozzle.json @@ -0,0 +1,98 @@ +{ + "type": "filament", + "name": "Snapmaker PETG Translucent @U1 0.4 nozzle", + "inherits": "Snapmaker PETG Translucent @U1 base", + "from": "system", + "setting_id": "k6UQJJASzFSfePqN", + "instantiation": "true", + "compatible_printers": [ + "Snapmaker U1 (0.4 nozzle)" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "70" + ], + "fan_max_speed": [ + "30" + ], + "fan_min_speed": [ + "10" + ], + "filament_cooling_moves": [ + "4" + ], + "filament_cost": [ + "24.99" + ], + "filament_flow_ratio": [ + "0.97" + ], + "filament_loading_speed": [ + "28" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_flow": [ + "20" + ], + "filament_multitool_ramming_volume": [ + "5" + ], + "filament_retract_length_toolchange": [ + "5" + ], + "filament_retraction_length": [ + "1" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_unloading_speed": [ + "90" + ], + "filament_unloading_speed_start": [ + "100" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "hot_plate_temp": [ + "80" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_low": [ + "230" + ], + "overhang_fan_threshold": [ + "10%" + ], + "pressure_advance": [ + "0.04" + ], + "slow_down_min_speed": [ + "10" + ], + "textured_plate_temp": [ + "80" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "filament_density": [ + "1.25" + ] +} diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PETG Translucent @U1 0.6 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker PETG Translucent @U1 0.6 nozzle.json new file mode 100644 index 0000000000..14f59104f8 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker PETG Translucent @U1 0.6 nozzle.json @@ -0,0 +1,107 @@ +{ + "type": "filament", + "name": "Snapmaker PETG Translucent @U1 0.6 nozzle", + "inherits": "Snapmaker PETG Translucent @U1 base", + "from": "system", + "setting_id": "FlcbnP3kWiJLMDMl", + "instantiation": "true", + "compatible_printers": [ + "Snapmaker U1 (0.6 nozzle)" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "70" + ], + "fan_max_speed": [ + "60" + ], + "fan_min_speed": [ + "20" + ], + "filament_cost": [ + "25" + ], + "filament_density": [ + "1.25" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "hot_plate_temp": [ + "80" + ], + "nozzle_temperature": [ + "245" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_low": [ + "230" + ], + "overhang_fan_threshold": [ + "10%" + ], + "pressure_advance": [ + "0.02" + ], + "slow_down_min_speed": [ + "10" + ], + "textured_plate_temp": [ + "80" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "filament_cooling_moves": [ + "4" + ], + "filament_loading_speed": [ + "28" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_flow": [ + "20" + ], + "filament_multitool_ramming_volume": [ + "5" + ], + "filament_retract_length_toolchange": [ + "10" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_retraction_minimum_travel": [ + "1" + ], + "filament_unloading_speed": [ + "90" + ], + "filament_unloading_speed_start": [ + "100" + ], + "filament_wipe_distance": [ + "2" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "enable_pressure_advance": [ + "0" + ] +} diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PETG Translucent @U1 0.8 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker PETG Translucent @U1 0.8 nozzle.json new file mode 100644 index 0000000000..e746141f06 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker PETG Translucent @U1 0.8 nozzle.json @@ -0,0 +1,104 @@ +{ + "type": "filament", + "name": "Snapmaker PETG Translucent @U1 0.8 nozzle", + "inherits": "Snapmaker PETG Translucent @U1 base", + "from": "system", + "setting_id": "aJk3TnFTU3uQGjd3", + "instantiation": "true", + "compatible_printers": [ + "Snapmaker U1 (0.8 nozzle)" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "70" + ], + "fan_max_speed": [ + "60" + ], + "fan_min_speed": [ + "20" + ], + "filament_cost": [ + "25" + ], + "filament_density": [ + "1.25" + ], + "filament_flow_ratio": [ + "0.97" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "hot_plate_temp": [ + "80" + ], + "nozzle_temperature": [ + "245" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_low": [ + "230" + ], + "overhang_fan_threshold": [ + "10%" + ], + "pressure_advance": [ + "0.02" + ], + "slow_down_min_speed": [ + "10" + ], + "textured_plate_temp": [ + "80" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "filament_cooling_moves": [ + "4" + ], + "filament_loading_speed": [ + "28" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_flow": [ + "30" + ], + "filament_multitool_ramming_volume": [ + "10" + ], + "filament_retract_length_toolchange": [ + "10" + ], + "filament_retraction_length": [ + "1" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_unloading_speed": [ + "90" + ], + "filament_unloading_speed_start": [ + "100" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "enable_pressure_advance": [ + "0" + ] +} diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PETG Translucent @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PETG Translucent @U1 base.json new file mode 100644 index 0000000000..eb18fb4838 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker PETG Translucent @U1 base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Snapmaker PETG Translucent @U1 base", + "inherits": "fdm_filament_petg", + "from": "system", + "filament_id": "PETG_TRANSLUCENT_001", + "instantiation": "false" +} diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Basic @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Basic @U1 base.json new file mode 100644 index 0000000000..adf7624e1f --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Basic @U1 base.json @@ -0,0 +1,127 @@ +{ + "type": "filament", + "name": "Snapmaker PLA Basic @U1 base", + "from": "system", + "filament_id": "1417031127011", + "instantiation": "false", + "filament_end_gcode": [ + "" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_loading_speed_start": [ + "35" + ], + "filament_loading_speed": [ + "35" + ], + "filament_unloading_speed_start": [ + "35" + ], + "filament_unloading_speed": [ + "35" + ], + "filament_load_time": [ + "2" + ], + "filament_unload_time": [ + "2" + ], + "filament_cooling_moves": [ + "2" + ], + "filament_cooling_initial_speed": [ + "35" + ], + "filament_cooling_final_speed": [ + "60" + ], + "fan_cooling_layer_time": [ + "100" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_type": [ + "PLA" + ], + "filament_density": [ + "1.24" + ], + "filament_cost": [ + "20" + ], + "cool_plate_temp": [ + "60" + ], + "eng_plate_temp": [ + "60" + ], + "hot_plate_temp": [ + "60" + ], + "textured_plate_temp": [ + "60" + ], + "cool_plate_temp_initial_layer": [ + "60" + ], + "eng_plate_temp_initial_layer": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "60" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "nozzle_temperature": [ + "220" + ], + "temperature_vitrification": [ + "60" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_range_high": [ + "230" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "4" + ], + "additional_cooling_fan_speed": [ + "70" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ] +} diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Basic @U1.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Basic @U1.json new file mode 100644 index 0000000000..4b68672fa5 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Basic @U1.json @@ -0,0 +1,284 @@ +{ + "type": "filament", + "name": "Snapmaker PLA Basic @U1", + "inherits": "Snapmaker PLA Basic @U1 base", + "from": "system", + "setting_id": "ZtUJN4JpkR0MLpiY", + "instantiation": "true", + "compatible_printers": [ + "Snapmaker U1 (0.4 nozzle)" + ], + "activate_air_filtration": [ + "0" + ], + "activate_chamber_temp_control": [ + "0" + ], + "adaptive_pressure_advance": [ + "0" + ], + "adaptive_pressure_advance_bridges": [ + "0" + ], + "adaptive_pressure_advance_model": [ + "0,0,0\n0,0,0" + ], + "adaptive_pressure_advance_overhangs": [ + "0" + ], + "additional_cooling_fan_speed": [ + "70" + ], + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "complete_print_exhaust_fan_speed": [ + "70" + ], + "cool_plate_temp": [ + "60" + ], + "cool_plate_temp_initial_layer": [ + "60" + ], + "dont_slow_down_outer_wall": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "70" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "0" + ], + "eng_plate_temp": [ + "60" + ], + "eng_plate_temp_initial_layer": [ + "60" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_cooling_final_speed": [ + "3.5" + ], + "filament_cooling_initial_speed": [ + "10" + ], + "filament_cooling_moves": [ + "2" + ], + "filament_cost": [ + "25.4" + ], + "filament_density": [ + "1.32" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_loading_speed": [ + "10" + ], + "filament_loading_speed_start": [ + "50" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_flow": [ + "25" + ], + "filament_multitool_ramming_volume": [ + "5" + ], + "filament_notes": [ + "" + ], + "filament_ramming_parameters": [ + "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_length_toolchange": [ + "10" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_shrink": [ + "100%" + ], + "filament_shrinkage_compensation_z": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_stamping_distance": [ + "45" + ], + "filament_stamping_loading_speed": [ + "29" + ], + "filament_start_gcode": [ + "" + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_type": [ + "PLA" + ], + "filament_unloading_speed": [ + "100" + ], + "filament_unloading_speed_start": [ + "100" + ], + "filament_vendor": [ + "Snapmaker" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "idle_temperature": [ + "0" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "pellet_flow_coefficient": [ + "0.4157" + ], + "pressure_advance": [ + "0.02" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "4" + ], + "slow_down_min_speed": [ + "20" + ], + "support_material_interface_fan_speed": [ + "-1" + ], + "temperature_vitrification": [ + "45" + ], + "textured_cool_plate_temp": [ + "40" + ], + "textured_cool_plate_temp_initial_layer": [ + "40" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ] +} diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Full Spectrum @U1 0.4 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Full Spectrum @U1 0.4 nozzle.json new file mode 100644 index 0000000000..990e67a79e --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Full Spectrum @U1 0.4 nozzle.json @@ -0,0 +1,284 @@ +{ + "type": "filament", + "name": "Snapmaker PLA Full Spectrum @U1 0.4 nozzle", + "inherits": "Snapmaker PLA Basic @U1 base", + "from": "system", + "setting_id": "iybaFWrXKOsmXgMJ", + "instantiation": "true", + "compatible_printers": [ + "Snapmaker U1 (0.4 nozzle)" + ], + "activate_air_filtration": [ + "0" + ], + "activate_chamber_temp_control": [ + "0" + ], + "adaptive_pressure_advance": [ + "0" + ], + "adaptive_pressure_advance_bridges": [ + "0" + ], + "adaptive_pressure_advance_model": [ + "0,0,0\n0,0,0" + ], + "adaptive_pressure_advance_overhangs": [ + "0" + ], + "additional_cooling_fan_speed": [ + "70" + ], + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "complete_print_exhaust_fan_speed": [ + "70" + ], + "cool_plate_temp": [ + "60" + ], + "cool_plate_temp_initial_layer": [ + "60" + ], + "dont_slow_down_outer_wall": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "70" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "0" + ], + "eng_plate_temp": [ + "60" + ], + "eng_plate_temp_initial_layer": [ + "60" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_cooling_final_speed": [ + "3.5" + ], + "filament_cooling_initial_speed": [ + "10" + ], + "filament_cooling_moves": [ + "2" + ], + "filament_cost": [ + "25.4" + ], + "filament_density": [ + "1.32" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_loading_speed": [ + "10" + ], + "filament_loading_speed_start": [ + "50" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_flow": [ + "25" + ], + "filament_multitool_ramming_volume": [ + "5" + ], + "filament_notes": [ + "" + ], + "filament_ramming_parameters": [ + "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_length_toolchange": [ + "10" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_shrink": [ + "100%" + ], + "filament_shrinkage_compensation_z": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_stamping_distance": [ + "45" + ], + "filament_stamping_loading_speed": [ + "29" + ], + "filament_start_gcode": [ + "" + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_type": [ + "PLA" + ], + "filament_unloading_speed": [ + "100" + ], + "filament_unloading_speed_start": [ + "100" + ], + "filament_vendor": [ + "Snapmaker" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "idle_temperature": [ + "0" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "pellet_flow_coefficient": [ + "0.4157" + ], + "pressure_advance": [ + "0.02" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "4" + ], + "slow_down_min_speed": [ + "20" + ], + "support_material_interface_fan_speed": [ + "-1" + ], + "temperature_vitrification": [ + "45" + ], + "textured_cool_plate_temp": [ + "40" + ], + "textured_cool_plate_temp_initial_layer": [ + "40" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ] +} diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Glow @U1 0.4 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Glow @U1 0.4 nozzle.json new file mode 100644 index 0000000000..907781cd2c --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Glow @U1 0.4 nozzle.json @@ -0,0 +1,95 @@ +{ + "type": "filament", + "name": "Snapmaker PLA Glow @U1 0.4 nozzle", + "inherits": "Snapmaker PLA Glow @U1 base", + "from": "system", + "setting_id": "ee1YNNr8CwKetuvY", + "instantiation": "true", + "compatible_printers": [ + "Snapmaker U1 (0.4 nozzle)" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "70" + ], + "filament_cooling_final_speed": [ + "3.4" + ], + "filament_cooling_initial_speed": [ + "2.2" + ], + "filament_cooling_moves": [ + "4" + ], + "filament_cost": [ + "20" + ], + "filament_flow_ratio": [ + "0.97" + ], + "filament_loading_speed": [ + "28" + ], + "filament_loading_speed_start": [ + "3" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_minimal_purge_on_wipe_tower": [ + "30" + ], + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_flow": [ + "20" + ], + "filament_multitool_ramming_volume": [ + "10" + ], + "filament_retract_length_toolchange": [ + "5" + ], + "filament_retraction_length": [ + "0.4" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_unloading_speed": [ + "90" + ], + "filament_unloading_speed_start": [ + "100" + ], + "filament_z_hop": [ + "0.2" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "overhang_fan_threshold": [ + "50%" + ], + "slow_down_layer_time": [ + "4" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ] +} diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Glow @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Glow @U1 base.json new file mode 100644 index 0000000000..ad3c1f4bbb --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Glow @U1 base.json @@ -0,0 +1,44 @@ +{ + "type": "filament", + "name": "Snapmaker PLA Glow @U1 base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "SPGLOW001", + "instantiation": "false", + "filament_end_gcode": [ + "" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_loading_speed_start": [ + "35" + ], + "filament_loading_speed": [ + "35" + ], + "filament_unloading_speed_start": [ + "35" + ], + "filament_unloading_speed": [ + "35" + ], + "filament_load_time": [ + "2" + ], + "filament_unload_time": [ + "2" + ], + "filament_cooling_moves": [ + "2" + ], + "filament_cooling_initial_speed": [ + "35" + ], + "filament_cooling_final_speed": [ + "60" + ], + "nozzle_temperature": [ + "220" + ] +} diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1 0.2 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1 0.2 nozzle.json new file mode 100644 index 0000000000..2a8c1e40c3 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1 0.2 nozzle.json @@ -0,0 +1,287 @@ +{ + "type": "filament", + "name": "Snapmaker PLA Matte @U1 0.2 nozzle", + "inherits": "Snapmaker PLA Matte @U1 base2", + "from": "system", + "setting_id": "d3c48DeNk7VDeeHf", + "instantiation": "true", + "compatible_printers": [ + "Snapmaker U1 (0.2 nozzle)" + ], + "activate_air_filtration": [ + "0" + ], + "activate_chamber_temp_control": [ + "0" + ], + "adaptive_pressure_advance": [ + "0" + ], + "adaptive_pressure_advance_bridges": [ + "0" + ], + "adaptive_pressure_advance_model": [ + "0,0,0\n0,0,0" + ], + "adaptive_pressure_advance_overhangs": [ + "0" + ], + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "complete_print_exhaust_fan_speed": [ + "70" + ], + "cool_plate_temp": [ + "35" + ], + "cool_plate_temp_initial_layer": [ + "35" + ], + "default_filament_colour": [ + "" + ], + "dont_slow_down_outer_wall": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "70" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "0" + ], + "eng_plate_temp": [ + "45" + ], + "eng_plate_temp_initial_layer": [ + "45" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_cost": [ + "24.99" + ], + "filament_density": [ + "1.26" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + " " + ], + "filament_is_support": [ + "0" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_multitool_ramming": [ + "1" + ], + "filament_notes": [ + "" + ], + "filament_ramming_parameters": [ + "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_length_toolchange": [ + "2" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_shrink": [ + "100%" + ], + "filament_shrinkage_compensation_z": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_start_gcode": [ + " " + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_type": [ + "PLA" + ], + "filament_unloading_speed_start": [ + "100" + ], + "filament_vendor": [ + "Snapmaker" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "idle_temperature": [ + "0" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "pellet_flow_coefficient": [ + "0.4157" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "4" + ], + "slow_down_min_speed": [ + "20" + ], + "support_material_interface_fan_speed": [ + "-1" + ], + "temperature_vitrification": [ + "45" + ], + "textured_cool_plate_temp": [ + "40" + ], + "textured_cool_plate_temp_initial_layer": [ + "40" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "filament_cooling_final_speed": [ + "3.5" + ], + "filament_cooling_initial_speed": [ + "10" + ], + "filament_cooling_moves": [ + "2" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_flow_ratio": [ + "1.05" + ], + "filament_loading_speed": [ + "10" + ], + "filament_loading_speed_start": [ + "50" + ], + "filament_minimal_purge_on_wipe_tower": [ + "5" + ], + "filament_multitool_ramming_flow": [ + "4" + ], + "filament_multitool_ramming_volume": [ + "4" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_stamping_distance": [ + "45" + ], + "filament_stamping_loading_speed": [ + "29" + ], + "filament_unloading_speed": [ + "100" + ], + "filament_z_hop_types": [ + "nil" + ], + "nozzle_temperature": [ + "215" + ], + "nozzle_temperature_initial_layer": [ + "215" + ], + "pressure_advance": [ + "0.025" + ] +} diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1 0.6 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1 0.6 nozzle.json new file mode 100644 index 0000000000..9de7615ae5 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1 0.6 nozzle.json @@ -0,0 +1,287 @@ +{ + "type": "filament", + "name": "Snapmaker PLA Matte @U1 0.6 nozzle", + "inherits": "Snapmaker PLA Matte @U1 base2", + "from": "system", + "setting_id": "l3E1WaljDn2uoTqW", + "instantiation": "true", + "compatible_printers": [ + "Snapmaker U1 (0.6 nozzle)" + ], + "activate_air_filtration": [ + "0" + ], + "activate_chamber_temp_control": [ + "0" + ], + "adaptive_pressure_advance": [ + "0" + ], + "adaptive_pressure_advance_bridges": [ + "0" + ], + "adaptive_pressure_advance_model": [ + "0,0,0\n0,0,0" + ], + "adaptive_pressure_advance_overhangs": [ + "0" + ], + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "complete_print_exhaust_fan_speed": [ + "70" + ], + "cool_plate_temp": [ + "35" + ], + "cool_plate_temp_initial_layer": [ + "35" + ], + "default_filament_colour": [ + "" + ], + "dont_slow_down_outer_wall": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "70" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "0" + ], + "eng_plate_temp": [ + "45" + ], + "eng_plate_temp_initial_layer": [ + "45" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_cost": [ + "24.99" + ], + "filament_density": [ + "1.26" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + " " + ], + "filament_is_support": [ + "0" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_multitool_ramming": [ + "1" + ], + "filament_notes": [ + "" + ], + "filament_ramming_parameters": [ + "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_length_toolchange": [ + "10" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_shrink": [ + "100%" + ], + "filament_shrinkage_compensation_z": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_start_gcode": [ + " " + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_type": [ + "PLA" + ], + "filament_unloading_speed_start": [ + "100" + ], + "filament_vendor": [ + "Snapmaker" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "idle_temperature": [ + "0" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "pellet_flow_coefficient": [ + "0.4157" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "4" + ], + "slow_down_min_speed": [ + "20" + ], + "support_material_interface_fan_speed": [ + "-1" + ], + "temperature_vitrification": [ + "45" + ], + "textured_cool_plate_temp": [ + "40" + ], + "textured_cool_plate_temp_initial_layer": [ + "40" + ], + "textured_plate_temp": [ + "45" + ], + "textured_plate_temp_initial_layer": [ + "45" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "filament_cooling_final_speed": [ + "3.5" + ], + "filament_cooling_initial_speed": [ + "10" + ], + "filament_cooling_moves": [ + "2" + ], + "filament_flow_ratio": [ + "0.99" + ], + "filament_loading_speed": [ + "10" + ], + "filament_loading_speed_start": [ + "50" + ], + "filament_multitool_ramming_flow": [ + "40" + ], + "filament_multitool_ramming_volume": [ + "10" + ], + "filament_retraction_length": [ + "0.6" + ], + "filament_stamping_distance": [ + "45" + ], + "filament_stamping_loading_speed": [ + "29" + ], + "filament_unloading_speed": [ + "100" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "nozzle_temperature": [ + "215" + ], + "nozzle_temperature_initial_layer": [ + "215" + ], + "pressure_advance": [ + "0.015" + ] +} diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1 0.8 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1 0.8 nozzle.json new file mode 100644 index 0000000000..251b2a47b6 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1 0.8 nozzle.json @@ -0,0 +1,287 @@ +{ + "type": "filament", + "name": "Snapmaker PLA Matte @U1 0.8 nozzle", + "inherits": "Snapmaker PLA Matte @U1 base2", + "from": "system", + "setting_id": "NLPd4AA0seW3NXdy", + "instantiation": "true", + "compatible_printers": [ + "Snapmaker U1 (0.8 nozzle)" + ], + "activate_air_filtration": [ + "0" + ], + "activate_chamber_temp_control": [ + "0" + ], + "adaptive_pressure_advance": [ + "0" + ], + "adaptive_pressure_advance_bridges": [ + "0" + ], + "adaptive_pressure_advance_model": [ + "0,0,0\n0,0,0" + ], + "adaptive_pressure_advance_overhangs": [ + "0" + ], + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "complete_print_exhaust_fan_speed": [ + "70" + ], + "cool_plate_temp": [ + "35" + ], + "cool_plate_temp_initial_layer": [ + "35" + ], + "default_filament_colour": [ + "" + ], + "dont_slow_down_outer_wall": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "70" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "0" + ], + "eng_plate_temp": [ + "45" + ], + "eng_plate_temp_initial_layer": [ + "45" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_cost": [ + "24.99" + ], + "filament_density": [ + "1.26" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + " " + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_multitool_ramming": [ + "1" + ], + "filament_notes": [ + "" + ], + "filament_ramming_parameters": [ + "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_length_toolchange": [ + "10" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_shrink": [ + "100%" + ], + "filament_shrinkage_compensation_z": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_start_gcode": [ + " " + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_type": [ + "PLA" + ], + "filament_unloading_speed_start": [ + "100" + ], + "filament_vendor": [ + "Snapmaker" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "idle_temperature": [ + "0" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "pellet_flow_coefficient": [ + "0.4157" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "4" + ], + "slow_down_min_speed": [ + "20" + ], + "support_material_interface_fan_speed": [ + "-1" + ], + "temperature_vitrification": [ + "45" + ], + "textured_cool_plate_temp": [ + "40" + ], + "textured_cool_plate_temp_initial_layer": [ + "40" + ], + "nozzle_temperature": [ + "215" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "filament_cooling_final_speed": [ + "3.5" + ], + "filament_cooling_initial_speed": [ + "10" + ], + "filament_cooling_moves": [ + "2" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_loading_speed": [ + "10" + ], + "filament_loading_speed_start": [ + "50" + ], + "filament_multitool_ramming_flow": [ + "40" + ], + "filament_multitool_ramming_volume": [ + "10" + ], + "filament_retraction_length": [ + "0.6" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_stamping_distance": [ + "45" + ], + "filament_stamping_loading_speed": [ + "29" + ], + "filament_unloading_speed": [ + "100" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "nozzle_temperature_initial_layer": [ + "215" + ], + "pressure_advance": [ + "0.015" + ] +} diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1 base2.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1 base2.json new file mode 100644 index 0000000000..6c0dcf26fd --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1 base2.json @@ -0,0 +1,127 @@ +{ + "type": "filament", + "name": "Snapmaker PLA Matte @U1 base2", + "from": "system", + "filament_id": "141703112701", + "instantiation": "false", + "filament_end_gcode": [ + "" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_loading_speed_start": [ + "35" + ], + "filament_loading_speed": [ + "35" + ], + "filament_unloading_speed_start": [ + "35" + ], + "filament_unloading_speed": [ + "35" + ], + "filament_load_time": [ + "2" + ], + "filament_unload_time": [ + "2" + ], + "filament_cooling_moves": [ + "2" + ], + "filament_cooling_initial_speed": [ + "35" + ], + "filament_cooling_final_speed": [ + "60" + ], + "fan_cooling_layer_time": [ + "100" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_type": [ + "PLA" + ], + "filament_density": [ + "1.24" + ], + "filament_cost": [ + "20" + ], + "cool_plate_temp": [ + "60" + ], + "eng_plate_temp": [ + "60" + ], + "hot_plate_temp": [ + "60" + ], + "textured_plate_temp": [ + "60" + ], + "cool_plate_temp_initial_layer": [ + "60" + ], + "eng_plate_temp_initial_layer": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "60" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "nozzle_temperature": [ + "220" + ], + "temperature_vitrification": [ + "60" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_range_high": [ + "230" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "4" + ], + "additional_cooling_fan_speed": [ + "70" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ] +} diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1.json index fcb1d74c92..a71c43f9b0 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1.json @@ -27,7 +27,7 @@ "0" ], "additional_cooling_fan_speed": [ - "70" + "80" ], "chamber_temperature": [ "0" @@ -47,9 +47,6 @@ "cool_plate_temp_initial_layer": [ "60" ], - "default_filament_colour": [ - "" - ], "dont_slow_down_outer_wall": [ "0" ], @@ -60,7 +57,7 @@ "1" ], "enable_pressure_advance": [ - "1" + "0" ], "eng_plate_temp": [ "60" @@ -102,7 +99,7 @@ "; filament end gcode \n" ], "filament_flow_ratio": [ - "1.01" + "1" ], "filament_is_support": [ "0" @@ -117,7 +114,7 @@ "nil" ], "filament_max_volumetric_speed": [ - "20" + "22" ], "filament_minimal_purge_on_wipe_tower": [ "15" @@ -140,6 +137,9 @@ "filament_retract_before_wipe": [ "nil" ], + "filament_retract_length_toolchange": [ + "5" + ], "filament_retract_lift_above": [ "nil" ], @@ -216,19 +216,19 @@ "0" ], "hot_plate_temp": [ - "55" + "65" ], "hot_plate_temp_initial_layer": [ - "55" + "65" ], "idle_temperature": [ "0" ], "nozzle_temperature": [ - "220" + "215" ], "nozzle_temperature_initial_layer": [ - "220" + "215" ], "nozzle_temperature_range_high": [ "240" @@ -276,9 +276,9 @@ "40" ], "textured_plate_temp": [ - "60" + "65" ], "textured_plate_temp_initial_layer": [ - "60" + "65" ] } diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Metal @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Metal @U1 base.json index a530b9208e..9fba864f40 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Metal @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Metal @U1 base.json @@ -46,8 +46,5 @@ ], "nozzle_temperature": [ "220" - ], - "default_filament_colour": [ - "" ] } diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1 0.2 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1 0.2 nozzle.json new file mode 100644 index 0000000000..5eb860506c --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1 0.2 nozzle.json @@ -0,0 +1,285 @@ +{ + "type": "filament", + "name": "Snapmaker PLA Silk @U1 0.2 nozzle", + "inherits": "Snapmaker PLA Basic @U1 base", + "from": "system", + "setting_id": "Q5xH6oGGlbXr14Pa", + "filament_id": "11813638720", + "instantiation": "true", + "compatible_printers": [ + "Snapmaker U1 (0.2 nozzle)" + ], + "activate_air_filtration": [ + "0" + ], + "activate_chamber_temp_control": [ + "0" + ], + "adaptive_pressure_advance": [ + "0" + ], + "adaptive_pressure_advance_bridges": [ + "0" + ], + "adaptive_pressure_advance_model": [ + "0,0,0\n0,0,0" + ], + "adaptive_pressure_advance_overhangs": [ + "0" + ], + "additional_cooling_fan_speed": [ + "100" + ], + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "complete_print_exhaust_fan_speed": [ + "70" + ], + "cool_plate_temp": [ + "60" + ], + "cool_plate_temp_initial_layer": [ + "60" + ], + "during_print_exhaust_fan_speed": [ + "70" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "0" + ], + "eng_plate_temp": [ + "60" + ], + "eng_plate_temp_initial_layer": [ + "60" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_cost": [ + "25.4" + ], + "filament_density": [ + "1.32" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "filament_flow_ratio": [ + "1.02" + ], + "filament_is_support": [ + "0" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_flow": [ + "3" + ], + "filament_multitool_ramming_volume": [ + "5" + ], + "filament_notes": [ + "" + ], + "filament_ramming_parameters": [ + "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_length_toolchange": [ + "5" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_shrink": [ + "100%" + ], + "filament_shrinkage_compensation_z": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_start_gcode": [ + "" + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_type": [ + "PLA" + ], + "filament_unloading_speed_start": [ + "100" + ], + "filament_vendor": [ + "Snapmaker" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "idle_temperature": [ + "0" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "pellet_flow_coefficient": [ + "0.4157" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "18" + ], + "slow_down_min_speed": [ + "20" + ], + "support_material_interface_fan_speed": [ + "-1" + ], + "temperature_vitrification": [ + "45" + ], + "textured_cool_plate_temp": [ + "40" + ], + "textured_cool_plate_temp_initial_layer": [ + "40" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "dont_slow_down_outer_wall": [ + "1" + ], + "filament_cooling_final_speed": [ + "3.4" + ], + "filament_cooling_initial_speed": [ + "2.2" + ], + "filament_cooling_moves": [ + "4" + ], + "filament_loading_speed": [ + "28" + ], + "filament_loading_speed_start": [ + "3" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "filament_retraction_length": [ + "0.4" + ], + "filament_stamping_distance": [ + "0" + ], + "filament_stamping_loading_speed": [ + "0" + ], + "filament_unloading_speed": [ + "90" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "pressure_advance": [ + "0.015" + ] +} diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1 0.6 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1 0.6 nozzle.json new file mode 100644 index 0000000000..5df6ff5a3a --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1 0.6 nozzle.json @@ -0,0 +1,285 @@ +{ + "type": "filament", + "name": "Snapmaker PLA Silk @U1 0.6 nozzle", + "inherits": "Snapmaker PLA Basic @U1 base", + "from": "system", + "setting_id": "2pieDQoz9PiDCnU1", + "filament_id": "11813638720", + "instantiation": "true", + "compatible_printers": [ + "Snapmaker U1 (0.6 nozzle)" + ], + "activate_air_filtration": [ + "0" + ], + "activate_chamber_temp_control": [ + "0" + ], + "adaptive_pressure_advance": [ + "0" + ], + "adaptive_pressure_advance_bridges": [ + "0" + ], + "adaptive_pressure_advance_model": [ + "0,0,0\n0,0,0" + ], + "adaptive_pressure_advance_overhangs": [ + "0" + ], + "additional_cooling_fan_speed": [ + "100" + ], + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "complete_print_exhaust_fan_speed": [ + "70" + ], + "cool_plate_temp": [ + "60" + ], + "cool_plate_temp_initial_layer": [ + "60" + ], + "during_print_exhaust_fan_speed": [ + "70" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "0" + ], + "eng_plate_temp": [ + "60" + ], + "eng_plate_temp_initial_layer": [ + "60" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_cost": [ + "25.4" + ], + "filament_density": [ + "1.32" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "filament_flow_ratio": [ + "0.97" + ], + "filament_is_support": [ + "0" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_flow": [ + "40" + ], + "filament_multitool_ramming_volume": [ + "10" + ], + "filament_notes": [ + "" + ], + "filament_ramming_parameters": [ + "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_length_toolchange": [ + "10" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_shrink": [ + "100%" + ], + "filament_shrinkage_compensation_z": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_start_gcode": [ + "" + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_type": [ + "PLA" + ], + "filament_unloading_speed_start": [ + "100" + ], + "filament_vendor": [ + "Snapmaker" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "idle_temperature": [ + "0" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "pellet_flow_coefficient": [ + "0.4157" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "15" + ], + "slow_down_min_speed": [ + "20" + ], + "support_material_interface_fan_speed": [ + "-1" + ], + "temperature_vitrification": [ + "45" + ], + "textured_cool_plate_temp": [ + "40" + ], + "textured_cool_plate_temp_initial_layer": [ + "40" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "dont_slow_down_outer_wall": [ + "0" + ], + "filament_cooling_final_speed": [ + "3.4" + ], + "filament_cooling_initial_speed": [ + "2.2" + ], + "filament_cooling_moves": [ + "4" + ], + "filament_loading_speed": [ + "28" + ], + "filament_loading_speed_start": [ + "3" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_retraction_length": [ + "0.4" + ], + "filament_stamping_distance": [ + "0" + ], + "filament_stamping_loading_speed": [ + "0" + ], + "filament_unloading_speed": [ + "90" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "pressure_advance": [ + "0.015" + ] +} diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1 0.8 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1 0.8 nozzle.json new file mode 100644 index 0000000000..0758372ea0 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1 0.8 nozzle.json @@ -0,0 +1,285 @@ +{ + "type": "filament", + "name": "Snapmaker PLA Silk @U1 0.8 nozzle", + "inherits": "Snapmaker PLA Basic @U1 base", + "from": "system", + "setting_id": "f3H0JFUnds0mkKCN", + "filament_id": "11813638720", + "instantiation": "true", + "compatible_printers": [ + "Snapmaker U1 (0.8 nozzle)" + ], + "activate_air_filtration": [ + "0" + ], + "activate_chamber_temp_control": [ + "0" + ], + "adaptive_pressure_advance": [ + "0" + ], + "adaptive_pressure_advance_bridges": [ + "0" + ], + "adaptive_pressure_advance_model": [ + "0,0,0\n0,0,0" + ], + "adaptive_pressure_advance_overhangs": [ + "0" + ], + "additional_cooling_fan_speed": [ + "100" + ], + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "complete_print_exhaust_fan_speed": [ + "70" + ], + "cool_plate_temp": [ + "60" + ], + "cool_plate_temp_initial_layer": [ + "60" + ], + "during_print_exhaust_fan_speed": [ + "70" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "0" + ], + "eng_plate_temp": [ + "60" + ], + "eng_plate_temp_initial_layer": [ + "60" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_cost": [ + "25.4" + ], + "filament_density": [ + "1.32" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "filament_flow_ratio": [ + "0.97" + ], + "filament_is_support": [ + "0" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_flow": [ + "40" + ], + "filament_multitool_ramming_volume": [ + "10" + ], + "filament_notes": [ + "" + ], + "filament_ramming_parameters": [ + "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_length_toolchange": [ + "10" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_shrink": [ + "100%" + ], + "filament_shrinkage_compensation_z": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_start_gcode": [ + "" + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_type": [ + "PLA" + ], + "filament_unloading_speed_start": [ + "100" + ], + "filament_vendor": [ + "Snapmaker" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "idle_temperature": [ + "0" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "pellet_flow_coefficient": [ + "0.4157" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "15" + ], + "slow_down_min_speed": [ + "20" + ], + "support_material_interface_fan_speed": [ + "-1" + ], + "temperature_vitrification": [ + "45" + ], + "textured_cool_plate_temp": [ + "40" + ], + "textured_cool_plate_temp_initial_layer": [ + "40" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "dont_slow_down_outer_wall": [ + "0" + ], + "filament_cooling_final_speed": [ + "3.4" + ], + "filament_cooling_initial_speed": [ + "2.2" + ], + "filament_cooling_moves": [ + "4" + ], + "filament_loading_speed": [ + "28" + ], + "filament_loading_speed_start": [ + "3" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_retraction_length": [ + "0.4" + ], + "filament_stamping_distance": [ + "0" + ], + "filament_stamping_loading_speed": [ + "0" + ], + "filament_unloading_speed": [ + "90" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "pressure_advance": [ + "0.015" + ] +} diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1 base.json index 12d65834ea..227fa034dc 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1 base.json @@ -55,8 +55,5 @@ ], "nozzle_temperature": [ "230" - ], - "default_filament_colour": [ - "" ] } diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1.json index 7fdf44e792..c68904ffd9 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1.json @@ -1,11 +1,285 @@ { "type": "filament", "name": "Snapmaker PLA Silk @U1", - "inherits": "Snapmaker PLA Silk @U1 base", + "inherits": "Snapmaker PLA Basic @U1 base", "from": "system", "setting_id": "9PkHSwtXFM0zPWth", + "filament_id": "11813638720", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.4 nozzle)" + ], + "activate_air_filtration": [ + "0" + ], + "activate_chamber_temp_control": [ + "0" + ], + "adaptive_pressure_advance": [ + "0" + ], + "adaptive_pressure_advance_bridges": [ + "0" + ], + "adaptive_pressure_advance_model": [ + "0,0,0\n0,0,0" + ], + "adaptive_pressure_advance_overhangs": [ + "0" + ], + "additional_cooling_fan_speed": [ + "70" + ], + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "complete_print_exhaust_fan_speed": [ + "70" + ], + "cool_plate_temp": [ + "60" + ], + "cool_plate_temp_initial_layer": [ + "60" + ], + "during_print_exhaust_fan_speed": [ + "70" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "0" + ], + "eng_plate_temp": [ + "60" + ], + "eng_plate_temp_initial_layer": [ + "60" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_cost": [ + "25.4" + ], + "filament_density": [ + "1.32" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_flow": [ + "25" + ], + "filament_multitool_ramming_volume": [ + "5" + ], + "filament_notes": [ + "" + ], + "filament_ramming_parameters": [ + "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_length_toolchange": [ + "5" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_shrink": [ + "100%" + ], + "filament_shrinkage_compensation_z": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_start_gcode": [ + "" + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_type": [ + "PLA" + ], + "filament_unloading_speed_start": [ + "100" + ], + "filament_vendor": [ + "Snapmaker" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "idle_temperature": [ + "0" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "pellet_flow_coefficient": [ + "0.4157" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "4" + ], + "slow_down_min_speed": [ + "20" + ], + "support_material_interface_fan_speed": [ + "-1" + ], + "temperature_vitrification": [ + "45" + ], + "textured_cool_plate_temp": [ + "40" + ], + "textured_cool_plate_temp_initial_layer": [ + "40" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "dont_slow_down_outer_wall": [ + "1" + ], + "filament_cooling_final_speed": [ + "3.4" + ], + "filament_cooling_initial_speed": [ + "2.2" + ], + "filament_cooling_moves": [ + "4" + ], + "filament_loading_speed": [ + "28" + ], + "filament_loading_speed_start": [ + "3" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_retraction_length": [ + "0.2" + ], + "filament_stamping_distance": [ + "0" + ], + "filament_stamping_loading_speed": [ + "0" + ], + "filament_unloading_speed": [ + "90" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "pressure_advance": [ + "0.015" ] } diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA SnapSpeed @U1 0.2 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA SnapSpeed @U1 0.2 nozzle.json new file mode 100644 index 0000000000..7fcb20f31b --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA SnapSpeed @U1 0.2 nozzle.json @@ -0,0 +1,50 @@ +{ + "type": "filament", + "name": "Snapmaker PLA SnapSpeed @U1 0.2 nozzle", + "inherits": "Snapmaker PLA SnapSpeed @U1 base2", + "from": "system", + "setting_id": "jsAgNNiUC6DoO7rz", + "instantiation": "true", + "filament_deretraction_speed": [ + "30" + ], + "filament_flow_ratio": [ + "1.01" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "filament_multitool_ramming_flow": [ + "30" + ], + "filament_retract_length_toolchange": [ + "5" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "pressure_advance": [ + "0.2" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "compatible_printers": [ + "Snapmaker U1 (0.2 nozzle)" + ], + "enable_pressure_advance": [ + "0" + ] +} diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA SnapSpeed @U1 0.6 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA SnapSpeed @U1 0.6 nozzle.json new file mode 100644 index 0000000000..18fca8b4fd --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA SnapSpeed @U1 0.6 nozzle.json @@ -0,0 +1,41 @@ +{ + "type": "filament", + "name": "Snapmaker PLA SnapSpeed @U1 0.6 nozzle", + "inherits": "Snapmaker PLA SnapSpeed @U1 base2", + "from": "system", + "setting_id": "aKudBpQBj3MZZZav", + "instantiation": "true", + "compatible_printers": [ + "Snapmaker U1 (0.6 nozzle)" + ], + "filament_deretraction_speed": [ + "30" + ], + "filament_flow_ratio": [ + "0.97" + ], + "filament_multitool_ramming_flow": [ + "30" + ], + "filament_retract_length_toolchange": [ + "5" + ], + "filament_retraction_length": [ + "1.6" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "enable_pressure_advance": [ + "0" + ] +} diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA SnapSpeed @U1 0.8 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA SnapSpeed @U1 0.8 nozzle.json new file mode 100644 index 0000000000..2ebadbd2b2 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA SnapSpeed @U1 0.8 nozzle.json @@ -0,0 +1,41 @@ +{ + "type": "filament", + "name": "Snapmaker PLA SnapSpeed @U1 0.8 nozzle", + "inherits": "Snapmaker PLA SnapSpeed @U1 base2", + "from": "system", + "setting_id": "sWoInox4hzxzIHfe", + "instantiation": "true", + "compatible_printers": [ + "Snapmaker U1 (0.8 nozzle)" + ], + "filament_deretraction_speed": [ + "30" + ], + "filament_multitool_ramming_flow": [ + "30" + ], + "filament_retract_length_toolchange": [ + "5" + ], + "filament_retraction_length": [ + "1.6" + ], + "filament_retraction_speed": [ + "30" + ], + "nozzle_temperature": [ + "215" + ], + "pressure_advance": [ + "0.018" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "enable_pressure_advance": [ + "0" + ] +} diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA SnapSpeed @U1 base2.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA SnapSpeed @U1 base2.json new file mode 100644 index 0000000000..84889e3d9b --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA SnapSpeed @U1 base2.json @@ -0,0 +1,281 @@ +{ + "type": "filament", + "name": "Snapmaker PLA SnapSpeed @U1 base2", + "from": "system", + "filament_id": "141703112701", + "instantiation": "false", + "activate_air_filtration": [ + "0" + ], + "activate_chamber_temp_control": [ + "0" + ], + "adaptive_pressure_advance": [ + "0" + ], + "adaptive_pressure_advance_bridges": [ + "0" + ], + "adaptive_pressure_advance_model": [ + "0,0,0\n0,0,0" + ], + "adaptive_pressure_advance_overhangs": [ + "0" + ], + "additional_cooling_fan_speed": [ + "70" + ], + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "compatible_printers": [], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "complete_print_exhaust_fan_speed": [ + "70" + ], + "cool_plate_temp": [ + "35" + ], + "cool_plate_temp_initial_layer": [ + "35" + ], + "default_filament_colour": [ + "" + ], + "dont_slow_down_outer_wall": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "70" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "45" + ], + "eng_plate_temp_initial_layer": [ + "45" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_cooling_final_speed": [ + "3.4" + ], + "filament_cooling_initial_speed": [ + "2.2" + ], + "filament_cooling_moves": [ + "4" + ], + "filament_cost": [ + "24.99" + ], + "filament_density": [ + "1.26" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + " " + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_loading_speed": [ + "28" + ], + "filament_loading_speed_start": [ + "3" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_flow": [ + "20" + ], + "filament_multitool_ramming_volume": [ + "5" + ], + "filament_notes": [ + "" + ], + "filament_ramming_parameters": [ + "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_shrink": [ + "100%" + ], + "filament_shrinkage_compensation_z": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_stamping_distance": [ + "0" + ], + "filament_stamping_loading_speed": [ + "0" + ], + "filament_start_gcode": [ + " " + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_type": [ + "PLA" + ], + "filament_unloading_speed": [ + "90" + ], + "filament_unloading_speed_start": [ + "100" + ], + "filament_vendor": [ + "snapmaker" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "55" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "idle_temperature": [ + "0" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "pellet_flow_coefficient": [ + "0.4157" + ], + "pressure_advance": [ + "0.02" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "4" + ], + "slow_down_min_speed": [ + "20" + ], + "support_material_interface_fan_speed": [ + "-1" + ], + "temperature_vitrification": [ + "45" + ], + "textured_cool_plate_temp": [ + "40" + ], + "textured_cool_plate_temp_initial_layer": [ + "40" + ], + "textured_plate_temp": [ + "45" + ], + "textured_plate_temp_initial_layer": [ + "45" + ] +} diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA SnapSpeed @U1.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA SnapSpeed @U1.json index 96d86d2a81..2525f5b2a9 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA SnapSpeed @U1.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA SnapSpeed @U1.json @@ -33,13 +33,13 @@ "0" ], "close_fan_the_first_x_layers": [ - "3" + "1" ], "compatible_printers_condition": "", "compatible_prints": [], "compatible_prints_condition": "", "complete_print_exhaust_fan_speed": [ - "80" + "70" ], "cool_plate_temp": [ "60" @@ -47,20 +47,17 @@ "cool_plate_temp_initial_layer": [ "60" ], - "default_filament_colour": [ - "" - ], "dont_slow_down_outer_wall": [ "0" ], "during_print_exhaust_fan_speed": [ - "60" + "70" ], "enable_overhang_bridge_fan": [ "1" ], "enable_pressure_advance": [ - "1" + "0" ], "eng_plate_temp": [ "60" @@ -102,7 +99,7 @@ "; filament end gcode \n" ], "filament_flow_ratio": [ - "0.99" + "0.966" ], "filament_is_support": [ "0" @@ -117,7 +114,7 @@ "nil" ], "filament_max_volumetric_speed": [ - "18" + "20" ], "filament_minimal_purge_on_wipe_tower": [ "15" @@ -126,7 +123,7 @@ "1" ], "filament_multitool_ramming_flow": [ - "40" + "30" ], "filament_multitool_ramming_volume": [ "5" @@ -140,6 +137,9 @@ "filament_retract_before_wipe": [ "nil" ], + "filament_retract_length_toolchange": [ + "5" + ], "filament_retract_lift_above": [ "nil" ], @@ -159,13 +159,13 @@ "nil" ], "filament_retraction_length": [ - "0.8" + "1.2" ], "filament_retraction_minimum_travel": [ "nil" ], "filament_retraction_speed": [ - "30" + "nil" ], "filament_shrink": [ "100%" @@ -207,19 +207,19 @@ "nil" ], "filament_z_hop": [ - "nil" + "0.4" ], "filament_z_hop_types": [ - "nil" + "Slope Lift" ], "full_fan_speed_layer": [ "0" ], "hot_plate_temp": [ - "55" + "65" ], "hot_plate_temp_initial_layer": [ - "55" + "65" ], "idle_temperature": [ "0" @@ -231,7 +231,7 @@ "220" ], "nozzle_temperature_range_high": [ - "230" + "240" ], "nozzle_temperature_range_low": [ "190" @@ -246,7 +246,7 @@ "0.4157" ], "pressure_advance": [ - "0.026" + "0.02" ], "reduce_fan_stop_start_freq": [ "1" @@ -267,7 +267,7 @@ "-1" ], "temperature_vitrification": [ - "60" + "45" ], "textured_cool_plate_temp": [ "40" @@ -276,9 +276,9 @@ "40" ], "textured_plate_temp": [ - "60" + "65" ], "textured_plate_temp_initial_layer": [ - "60" + "65" ] } diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Translucent @U1 0.2 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Translucent @U1 0.2 nozzle.json new file mode 100644 index 0000000000..6271b7af42 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Translucent @U1 0.2 nozzle.json @@ -0,0 +1,284 @@ +{ + "type": "filament", + "name": "Snapmaker PLA Translucent @U1 0.2 nozzle", + "inherits": "Snapmaker PLA Translucent @U1 base", + "from": "system", + "setting_id": "zIg9XLrieYNBduyn", + "instantiation": "true", + "compatible_printers": [ + "Snapmaker U1 (0.2 nozzle)" + ], + "activate_air_filtration": [ + "0" + ], + "activate_chamber_temp_control": [ + "0" + ], + "adaptive_pressure_advance": [ + "0" + ], + "adaptive_pressure_advance_bridges": [ + "0" + ], + "adaptive_pressure_advance_model": [ + "0,0,0\n0,0,0" + ], + "adaptive_pressure_advance_overhangs": [ + "0" + ], + "additional_cooling_fan_speed": [ + "100" + ], + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "complete_print_exhaust_fan_speed": [ + "70" + ], + "cool_plate_temp": [ + "60" + ], + "cool_plate_temp_initial_layer": [ + "60" + ], + "dont_slow_down_outer_wall": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "70" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "0" + ], + "eng_plate_temp": [ + "60" + ], + "eng_plate_temp_initial_layer": [ + "60" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_cooling_final_speed": [ + "3.4" + ], + "filament_cooling_initial_speed": [ + "2.2" + ], + "filament_cooling_moves": [ + "4" + ], + "filament_cost": [ + "25" + ], + "filament_density": [ + "1.22" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "filament_flow_ratio": [ + "1.02" + ], + "filament_is_support": [ + "0" + ], + "filament_loading_speed": [ + "28" + ], + "filament_loading_speed_start": [ + "3" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_flow": [ + "5" + ], + "filament_multitool_ramming_volume": [ + "5" + ], + "filament_notes": [ + "" + ], + "filament_ramming_parameters": [ + "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" + ], + "filament_retract_before_wipe": [ + "0%" + ], + "filament_retract_length_toolchange": [ + "5" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "filament_retraction_length": [ + "0.2" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_shrink": [ + "100%" + ], + "filament_shrinkage_compensation_z": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_stamping_distance": [ + "0" + ], + "filament_stamping_loading_speed": [ + "0" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_type": [ + "PLA" + ], + "filament_unloading_speed": [ + "90" + ], + "filament_unloading_speed_start": [ + "100" + ], + "filament_vendor": [ + "Snapmaker" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "idle_temperature": [ + "0" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "200" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "pellet_flow_coefficient": [ + "0.4157" + ], + "pressure_advance": [ + "0.15" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "support_material_interface_fan_speed": [ + "-1" + ], + "temperature_vitrification": [ + "45" + ], + "textured_cool_plate_temp": [ + "40" + ], + "textured_cool_plate_temp_initial_layer": [ + "40" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ] +} diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Translucent @U1 0.4 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Translucent @U1 0.4 nozzle.json new file mode 100644 index 0000000000..7d4270ef31 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Translucent @U1 0.4 nozzle.json @@ -0,0 +1,284 @@ +{ + "type": "filament", + "name": "Snapmaker PLA Translucent @U1 0.4 nozzle", + "inherits": "Snapmaker PLA Translucent @U1 base", + "from": "system", + "setting_id": "RqtrcLcy124ICGEc", + "instantiation": "true", + "compatible_printers": [ + "Snapmaker U1 (0.4 nozzle)" + ], + "activate_air_filtration": [ + "0" + ], + "activate_chamber_temp_control": [ + "0" + ], + "adaptive_pressure_advance": [ + "0" + ], + "adaptive_pressure_advance_bridges": [ + "0" + ], + "adaptive_pressure_advance_model": [ + "0,0,0\n0,0,0" + ], + "adaptive_pressure_advance_overhangs": [ + "0" + ], + "additional_cooling_fan_speed": [ + "100" + ], + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "complete_print_exhaust_fan_speed": [ + "70" + ], + "cool_plate_temp": [ + "60" + ], + "cool_plate_temp_initial_layer": [ + "60" + ], + "dont_slow_down_outer_wall": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "70" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "60" + ], + "eng_plate_temp_initial_layer": [ + "60" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_cooling_final_speed": [ + "3.4" + ], + "filament_cooling_initial_speed": [ + "2.2" + ], + "filament_cooling_moves": [ + "4" + ], + "filament_cost": [ + "25.4" + ], + "filament_density": [ + "1.32" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "filament_flow_ratio": [ + "0.97" + ], + "filament_is_support": [ + "0" + ], + "filament_loading_speed": [ + "8" + ], + "filament_loading_speed_start": [ + "3" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_minimal_purge_on_wipe_tower": [ + "50" + ], + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_flow": [ + "20" + ], + "filament_multitool_ramming_volume": [ + "10" + ], + "filament_notes": [ + "" + ], + "filament_ramming_parameters": [ + "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_length_toolchange": [ + "5" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "filament_retraction_length": [ + "0.2" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_shrink": [ + "100%" + ], + "filament_shrinkage_compensation_z": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_stamping_distance": [ + "0" + ], + "filament_stamping_loading_speed": [ + "0" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_type": [ + "PLA" + ], + "filament_unloading_speed": [ + "90" + ], + "filament_unloading_speed_start": [ + "100" + ], + "filament_vendor": [ + "Snapmaker" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "idle_temperature": [ + "0" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "pellet_flow_coefficient": [ + "0.4157" + ], + "pressure_advance": [ + "0.02" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "support_material_interface_fan_speed": [ + "-1" + ], + "temperature_vitrification": [ + "45" + ], + "textured_cool_plate_temp": [ + "40" + ], + "textured_cool_plate_temp_initial_layer": [ + "40" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ] +} diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Translucent @U1 0.6 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Translucent @U1 0.6 nozzle.json new file mode 100644 index 0000000000..af3f95c757 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Translucent @U1 0.6 nozzle.json @@ -0,0 +1,284 @@ +{ + "type": "filament", + "name": "Snapmaker PLA Translucent @U1 0.6 nozzle", + "inherits": "Snapmaker PLA Translucent @U1 base", + "from": "system", + "setting_id": "OZHemzEcvzFMN8fL", + "instantiation": "true", + "compatible_printers": [ + "Snapmaker U1 (0.6 nozzle)" + ], + "activate_air_filtration": [ + "0" + ], + "activate_chamber_temp_control": [ + "0" + ], + "adaptive_pressure_advance": [ + "0" + ], + "adaptive_pressure_advance_bridges": [ + "0" + ], + "adaptive_pressure_advance_model": [ + "0,0,0\n0,0,0" + ], + "adaptive_pressure_advance_overhangs": [ + "0" + ], + "additional_cooling_fan_speed": [ + "100" + ], + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "complete_print_exhaust_fan_speed": [ + "70" + ], + "cool_plate_temp": [ + "60" + ], + "cool_plate_temp_initial_layer": [ + "60" + ], + "dont_slow_down_outer_wall": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "70" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "0" + ], + "eng_plate_temp": [ + "60" + ], + "eng_plate_temp_initial_layer": [ + "60" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_cooling_final_speed": [ + "3.4" + ], + "filament_cooling_initial_speed": [ + "2.2" + ], + "filament_cooling_moves": [ + "4" + ], + "filament_cost": [ + "25" + ], + "filament_density": [ + "1.22" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_loading_speed": [ + "28" + ], + "filament_loading_speed_start": [ + "3" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_flow": [ + "20" + ], + "filament_multitool_ramming_volume": [ + "5" + ], + "filament_notes": [ + "" + ], + "filament_ramming_parameters": [ + "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" + ], + "filament_retract_before_wipe": [ + "0%" + ], + "filament_retract_length_toolchange": [ + "10" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "filament_retraction_length": [ + "0.5" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "50" + ], + "filament_shrink": [ + "100%" + ], + "filament_shrinkage_compensation_z": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_stamping_distance": [ + "0" + ], + "filament_stamping_loading_speed": [ + "0" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_type": [ + "PLA" + ], + "filament_unloading_speed": [ + "90" + ], + "filament_unloading_speed_start": [ + "100" + ], + "filament_vendor": [ + "Snapmaker" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "idle_temperature": [ + "0" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "200" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "pellet_flow_coefficient": [ + "0.4157" + ], + "pressure_advance": [ + "0.02" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "support_material_interface_fan_speed": [ + "-1" + ], + "temperature_vitrification": [ + "45" + ], + "textured_cool_plate_temp": [ + "40" + ], + "textured_cool_plate_temp_initial_layer": [ + "40" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ] +} diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Translucent @U1 0.8 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Translucent @U1 0.8 nozzle.json new file mode 100644 index 0000000000..a10a4b2fb1 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Translucent @U1 0.8 nozzle.json @@ -0,0 +1,284 @@ +{ + "type": "filament", + "name": "Snapmaker PLA Translucent @U1 0.8 nozzle", + "inherits": "Snapmaker PLA Translucent @U1 base", + "from": "system", + "setting_id": "IPehCg9fKawLorB5", + "instantiation": "true", + "compatible_printers": [ + "Snapmaker U1 (0.8 nozzle)" + ], + "activate_air_filtration": [ + "0" + ], + "activate_chamber_temp_control": [ + "0" + ], + "adaptive_pressure_advance": [ + "0" + ], + "adaptive_pressure_advance_bridges": [ + "0" + ], + "adaptive_pressure_advance_model": [ + "0,0,0\n0,0,0" + ], + "adaptive_pressure_advance_overhangs": [ + "0" + ], + "additional_cooling_fan_speed": [ + "100" + ], + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "complete_print_exhaust_fan_speed": [ + "70" + ], + "cool_plate_temp": [ + "60" + ], + "cool_plate_temp_initial_layer": [ + "60" + ], + "dont_slow_down_outer_wall": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "70" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "0" + ], + "eng_plate_temp": [ + "60" + ], + "eng_plate_temp_initial_layer": [ + "60" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_cooling_final_speed": [ + "3.4" + ], + "filament_cooling_initial_speed": [ + "2.2" + ], + "filament_cooling_moves": [ + "4" + ], + "filament_cost": [ + "25" + ], + "filament_density": [ + "1.22" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_loading_speed": [ + "28" + ], + "filament_loading_speed_start": [ + "3" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_flow": [ + "20" + ], + "filament_multitool_ramming_volume": [ + "5" + ], + "filament_notes": [ + "" + ], + "filament_ramming_parameters": [ + "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" + ], + "filament_retract_before_wipe": [ + "0%" + ], + "filament_retract_length_toolchange": [ + "10" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "filament_retraction_length": [ + "1" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_shrink": [ + "100%" + ], + "filament_shrinkage_compensation_z": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_stamping_distance": [ + "0" + ], + "filament_stamping_loading_speed": [ + "0" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_type": [ + "PLA" + ], + "filament_unloading_speed": [ + "90" + ], + "filament_unloading_speed_start": [ + "100" + ], + "filament_vendor": [ + "Snapmaker" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "idle_temperature": [ + "0" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "200" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "pellet_flow_coefficient": [ + "0.4157" + ], + "pressure_advance": [ + "0.02" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "support_material_interface_fan_speed": [ + "-1" + ], + "temperature_vitrification": [ + "45" + ], + "textured_cool_plate_temp": [ + "40" + ], + "textured_cool_plate_temp_initial_layer": [ + "40" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ] +} diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Translucent @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Translucent @U1 base.json new file mode 100644 index 0000000000..4f4842ae1d --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Translucent @U1 base.json @@ -0,0 +1,44 @@ +{ + "type": "filament", + "name": "Snapmaker PLA Translucent @U1 base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "SPTR001", + "instantiation": "false", + "filament_end_gcode": [ + "" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_loading_speed_start": [ + "35" + ], + "filament_loading_speed": [ + "35" + ], + "filament_unloading_speed_start": [ + "35" + ], + "filament_unloading_speed": [ + "35" + ], + "filament_load_time": [ + "2" + ], + "filament_unload_time": [ + "2" + ], + "filament_cooling_moves": [ + "2" + ], + "filament_cooling_initial_speed": [ + "35" + ], + "filament_cooling_final_speed": [ + "60" + ], + "nozzle_temperature": [ + "220" + ] +} diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Wood @U1 0.4 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Wood @U1 0.4 nozzle.json new file mode 100644 index 0000000000..4768ac2783 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Wood @U1 0.4 nozzle.json @@ -0,0 +1,108 @@ +{ + "type": "filament", + "name": "Snapmaker PLA Wood @U1 0.4 nozzle", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "XvizDDHbds3bVrzi", + "filament_id": "GFL9922", + "instantiation": "true", + "compatible_printers": [ + "Snapmaker U1 (0.4 nozzle)" + ], + "filament_start_gcode": [ + "" + ], + "enable_pressure_advance": [ + "1" + ], + "filament_end_gcode": [ + "\n" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_multitool_ramming": [ + "1" + ], + "filament_vendor": [ + "Snapmaker" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "filament_flow_ratio": [ + "0.97" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_multitool_ramming_flow": [ + "40" + ], + "filament_multitool_ramming_volume": [ + "10" + ], + "filament_retract_length_toolchange": [ + "5" + ], + "filament_retraction_length": [ + "0.6" + ], + "pressure_advance": [ + "0.025" + ], + "slow_down_layer_time": [ + "4" + ], + "activate_air_filtration": [ + "0" + ], + "chamber_temperatures": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "70" + ], + "cool_plate_temp": [ + "35" + ], + "cool_plate_temp_initial_layer": [ + "35" + ], + "during_print_exhaust_fan_speed": [ + "70" + ], + "filament_cost": [ + "20" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "nozzle_temperature": [ + "220" + ], + "overhang_fan_threshold": [ + "50%" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "45" + ] +} diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Wood @U1 0.6 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Wood @U1 0.6 nozzle.json new file mode 100644 index 0000000000..43d306ebae --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Wood @U1 0.6 nozzle.json @@ -0,0 +1,114 @@ +{ + "type": "filament", + "name": "Snapmaker PLA Wood @U1 0.6 nozzle", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "Kp77DCcitdmoyjqm", + "filament_id": "GFL9922", + "instantiation": "true", + "compatible_printers": [ + "Snapmaker U1 (0.6 nozzle)" + ], + "filament_start_gcode": [ + "" + ], + "enable_pressure_advance": [ + "0" + ], + "filament_end_gcode": [ + "\n" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_multitool_ramming": [ + "1" + ], + "filament_vendor": [ + "Snapmaker" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_multitool_ramming_flow": [ + "40" + ], + "filament_multitool_ramming_volume": [ + "10" + ], + "filament_retract_length_toolchange": [ + "5" + ], + "filament_retraction_length": [ + "0.4" + ], + "pressure_advance": [ + "0.014" + ], + "slow_down_layer_time": [ + "4" + ], + "additional_cooling_fan_speed": [ + "100" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "activate_air_filtration": [ + "0" + ], + "chamber_temperatures": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "70" + ], + "cool_plate_temp": [ + "35" + ], + "cool_plate_temp_initial_layer": [ + "35" + ], + "during_print_exhaust_fan_speed": [ + "70" + ], + "filament_cost": [ + "20" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "nozzle_temperature": [ + "220" + ], + "overhang_fan_threshold": [ + "50%" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "45" + ] +} diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Wood @U1 0.8 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Wood @U1 0.8 nozzle.json new file mode 100644 index 0000000000..da788a35fb --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Wood @U1 0.8 nozzle.json @@ -0,0 +1,114 @@ +{ + "type": "filament", + "name": "Snapmaker PLA Wood @U1 0.8 nozzle", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "nBYnNiqwLo6nAsqi", + "filament_id": "GFL9922", + "instantiation": "true", + "compatible_printers": [ + "Snapmaker U1 (0.8 nozzle)" + ], + "filament_start_gcode": [ + "" + ], + "enable_pressure_advance": [ + "0" + ], + "filament_end_gcode": [ + "\n" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_multitool_ramming": [ + "1" + ], + "filament_vendor": [ + "Snapmaker" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "filament_flow_ratio": [ + "0.965" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "filament_multitool_ramming_flow": [ + "40" + ], + "filament_multitool_ramming_volume": [ + "10" + ], + "filament_retract_length_toolchange": [ + "5" + ], + "filament_retraction_length": [ + "0.4" + ], + "pressure_advance": [ + "0.007" + ], + "slow_down_layer_time": [ + "4" + ], + "additional_cooling_fan_speed": [ + "100" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "activate_air_filtration": [ + "0" + ], + "chamber_temperatures": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "70" + ], + "cool_plate_temp": [ + "35" + ], + "cool_plate_temp_initial_layer": [ + "35" + ], + "during_print_exhaust_fan_speed": [ + "70" + ], + "filament_cost": [ + "20" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "nozzle_temperature": [ + "220" + ], + "overhang_fan_threshold": [ + "50%" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "45" + ] +} diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 0.4 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 0.4 nozzle.json new file mode 100644 index 0000000000..b986a7244a --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 0.4 nozzle.json @@ -0,0 +1,132 @@ +{ + "type": "filament", + "name": "Snapmaker PLA-CF @U1 0.4 nozzle", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "2INwruC3ZVkBTdUT", + "filament_id": "GFL98111", + "instantiation": "true", + "compatible_printers": [ + "Snapmaker U1 (0.4 nozzle)" + ], + "enable_pressure_advance": [ + "1" + ], + "filament_end_gcode": [ + "" + ], + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_flow": [ + "20" + ], + "filament_start_gcode": [ + "" + ], + "filament_vendor": [ + "Snapmaker" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "filament_minimal_purge_on_wipe_tower": [ + "50" + ], + "filament_multitool_ramming_volume": [ + "5" + ], + "filament_retract_length_toolchange": [ + "5" + ], + "filament_retraction_length": [ + "1" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "nozzle_temperature": [ + "240" + ], + "nozzle_temperature_initial_layer": [ + "240" + ], + "nozzle_temperature_range_high": [ + "250" + ], + "nozzle_temperature_range_low": [ + "200" + ], + "pressure_advance": [ + "0.01" + ], + "activate_air_filtration": [ + "0" + ], + "chamber_temperatures": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "70" + ], + "cool_plate_temp": [ + "45" + ], + "cool_plate_temp_initial_layer": [ + "45" + ], + "during_print_exhaust_fan_speed": [ + "70" + ], + "filament_cost": [ + "20" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "overhang_fan_threshold": [ + "50%" + ], + "required_nozzle_HRC": [ + "40" + ], + "slow_down_layer_time": [ + "7" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "45" + ], + "additional_cooling_fan_speed": [ + "0" + ] +} diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 0.6 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 0.6 nozzle.json new file mode 100644 index 0000000000..dcb6392634 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 0.6 nozzle.json @@ -0,0 +1,138 @@ +{ + "type": "filament", + "name": "Snapmaker PLA-CF @U1 0.6 nozzle", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "CKfdL85SvbOLzMuP", + "filament_id": "GFL98111", + "instantiation": "true", + "compatible_printers": [ + "Snapmaker U1 (0.6 nozzle)" + ], + "enable_pressure_advance": [ + "0" + ], + "filament_end_gcode": [ + "" + ], + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_flow": [ + "25" + ], + "filament_start_gcode": [ + "" + ], + "filament_vendor": [ + "Snapmaker" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_multitool_ramming_volume": [ + "5" + ], + "filament_retract_length_toolchange": [ + "10" + ], + "filament_retraction_length": [ + "2" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "250" + ], + "nozzle_temperature_range_low": [ + "210" + ], + "pressure_advance": [ + "0.015" + ], + "filament_cost": [ + "35" + ], + "filament_density": [ + "1.22" + ], + "slow_down_layer_time": [ + "8" + ], + "filament_wipe_distance": [ + "2" + ], + "activate_air_filtration": [ + "0" + ], + "chamber_temperatures": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "70" + ], + "cool_plate_temp": [ + "45" + ], + "cool_plate_temp_initial_layer": [ + "45" + ], + "during_print_exhaust_fan_speed": [ + "70" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "overhang_fan_threshold": [ + "50%" + ], + "required_nozzle_HRC": [ + "40" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "45" + ], + "additional_cooling_fan_speed": [ + "0" + ] +} diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 0.8 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 0.8 nozzle.json new file mode 100644 index 0000000000..1e6e961497 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 0.8 nozzle.json @@ -0,0 +1,135 @@ +{ + "type": "filament", + "name": "Snapmaker PLA-CF @U1 0.8 nozzle", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "fhhnfJm4dN9FXpWQ", + "filament_id": "GFL98111", + "instantiation": "true", + "compatible_printers": [ + "Snapmaker U1 (0.8 nozzle)" + ], + "enable_pressure_advance": [ + "0" + ], + "filament_end_gcode": [ + "" + ], + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_flow": [ + "25" + ], + "filament_start_gcode": [ + "" + ], + "filament_vendor": [ + "Snapmaker" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_multitool_ramming_volume": [ + "5" + ], + "filament_retract_length_toolchange": [ + "10" + ], + "filament_retraction_length": [ + "3" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "250" + ], + "nozzle_temperature_range_low": [ + "210" + ], + "pressure_advance": [ + "0.015" + ], + "filament_cost": [ + "35" + ], + "filament_density": [ + "1.22" + ], + "slow_down_layer_time": [ + "8" + ], + "activate_air_filtration": [ + "0" + ], + "chamber_temperatures": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "70" + ], + "cool_plate_temp": [ + "45" + ], + "cool_plate_temp_initial_layer": [ + "45" + ], + "during_print_exhaust_fan_speed": [ + "70" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "overhang_fan_threshold": [ + "50%" + ], + "required_nozzle_HRC": [ + "40" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "45" + ], + "additional_cooling_fan_speed": [ + "0" + ] +} diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 base.json index 617a8c23ea..63f877d965 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 base.json @@ -59,9 +59,6 @@ "temperature_vitrification": [ "150" ], - "default_filament_colour": [ - "" - ], "filament_type": [ "PLA-CF" ], diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1.json index ec04c8108d..9091258467 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1.json @@ -7,5 +7,8 @@ "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.4 nozzle)" + ], + "filament_retract_length_toolchange": [ + "5" ] } diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PVA @U1 0.6 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker PVA @U1 0.6 nozzle.json new file mode 100644 index 0000000000..b28e0627ad --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker PVA @U1 0.6 nozzle.json @@ -0,0 +1,113 @@ +{ + "type": "filament", + "name": "Snapmaker PVA @U1 0.6 nozzle", + "inherits": "Snapmaker PVA @U1 base", + "from": "system", + "setting_id": "lIqgnfeZdAm8G0TH", + "instantiation": "true", + "compatible_printers": [ + "Snapmaker U1 (0.6 nozzle)" + ], + "enable_pressure_advance": [ + "0" + ], + "additional_cooling_fan_speed": [ + "70" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "70" + ], + "filament_cost": [ + "79.98" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_retract_length_toolchange": [ + "10" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "1" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "1" + ], + "filament_wipe_distance": [ + "2" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature_range_low": [ + "210" + ], + "pressure_advance": [ + "0.03" + ], + "slow_down_layer_time": [ + "7" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "filament_cooling_final_speed": [ + "3.4" + ], + "filament_cooling_initial_speed": [ + "2.2" + ], + "filament_cooling_moves": [ + "4" + ], + "filament_loading_speed": [ + "28" + ], + "filament_loading_speed_start": [ + "3" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_flow": [ + "20" + ], + "filament_multitool_ramming_volume": [ + "5" + ], + "filament_unloading_speed": [ + "90" + ], + "filament_unloading_speed_start": [ + "100" + ], + "fan_min_speed": [ + "100" + ] +} diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PVA @U1 0.8 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker PVA @U1 0.8 nozzle.json new file mode 100644 index 0000000000..6572a60078 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker PVA @U1 0.8 nozzle.json @@ -0,0 +1,107 @@ +{ + "type": "filament", + "name": "Snapmaker PVA @U1 0.8 nozzle", + "inherits": "Snapmaker PVA @U1 base", + "from": "system", + "setting_id": "WxtuvwWxy73Gi0IK", + "instantiation": "true", + "compatible_printers": [ + "Snapmaker U1 (0.8 nozzle)" + ], + "enable_pressure_advance": [ + "0" + ], + "additional_cooling_fan_speed": [ + "70" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "70" + ], + "fan_min_speed": [ + "100" + ], + "filament_cost": [ + "79.98" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_flow_ratio": [ + "0.96" + ], + "filament_retract_length_toolchange": [ + "10" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "1" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "nozzle_temperature": [ + "225" + ], + "nozzle_temperature_initial_layer": [ + "225" + ], + "nozzle_temperature_range_low": [ + "205" + ], + "pressure_advance": [ + "0.03" + ], + "slow_down_layer_time": [ + "7" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "filament_cooling_final_speed": [ + "3.4" + ], + "filament_cooling_initial_speed": [ + "2.2" + ], + "filament_cooling_moves": [ + "4" + ], + "filament_loading_speed": [ + "28" + ], + "filament_loading_speed_start": [ + "3" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_flow": [ + "20" + ], + "filament_multitool_ramming_volume": [ + "5" + ], + "filament_unloading_speed": [ + "90" + ], + "filament_unloading_speed_start": [ + "100" + ] +} diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PVA @U1.json b/resources/profiles/Snapmaker/filament/Snapmaker PVA @U1.json index f9a33d7bcb..5ed5d243ac 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PVA @U1.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PVA @U1.json @@ -7,5 +7,95 @@ "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.4 nozzle)" + ], + "enable_pressure_advance": [ + "1" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "pressure_advance": [ + "0.03" + ], + "additional_cooling_fan_speed": [ + "70" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "70" + ], + "fan_min_speed": [ + "100" + ], + "filament_cooling_final_speed": [ + "3.4" + ], + "filament_cooling_initial_speed": [ + "2.2" + ], + "filament_cooling_moves": [ + "4" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_loading_speed": [ + "28" + ], + "filament_loading_speed_start": [ + "3" + ], + "filament_max_volumetric_speed": [ + "5" + ], + "filament_minimal_purge_on_wipe_tower": [ + "20" + ], + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_volume": [ + "0.1" + ], + "filament_retract_length_toolchange": [ + "4" + ], + "filament_retraction_length": [ + "0.4" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_unloading_speed": [ + "90" + ], + "filament_unloading_speed_start": [ + "100" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "nozzle_temperature": [ + "240" + ], + "nozzle_temperature_initial_layer": [ + "240" + ], + "slow_down_layer_time": [ + "10" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" ] } diff --git a/resources/profiles/Snapmaker/filament/Snapmaker TPU 90A @U1 0.6 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker TPU 90A @U1 0.6 nozzle.json new file mode 100644 index 0000000000..6ae8a5b675 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker TPU 90A @U1 0.6 nozzle.json @@ -0,0 +1,150 @@ +{ + "type": "filament", + "name": "Snapmaker TPU 90A @U1 0.6 nozzle", + "inherits": "fdm_filament_tpu", + "from": "system", + "setting_id": "uQCplebxmpBpzsnk", + "filament_id": "GFU99", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "3.2" + ], + "compatible_printers": [ + "Snapmaker U1 (0.6 nozzle)" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ], + "filament_end_gcode": [ + "; filament end gcode \n\n" + ], + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_volume": [ + "0.1" + ], + "pressure_advance": [ + "0.02" + ], + "additional_cooling_fan_speed": [ + "100" + ], + "complete_print_exhaust_fan_speed": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "70" + ], + "enable_pressure_advance": [ + "0" + ], + "filament_deretraction_speed": [ + "20" + ], + "filament_flow_ratio": [ + "1.093" + ], + "filament_multitool_ramming_flow": [ + "5" + ], + "filament_retract_length_toolchange": [ + "4" + ], + "filament_retraction_length": [ + "0.6" + ], + "filament_retraction_speed": [ + "20" + ], + "filament_vendor": [ + "Snapmaker" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "slow_down_layer_time": [ + "14" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "0" + ], + "activate_air_filtration": [ + "0" + ], + "chamber_temperatures": [ + "0" + ], + "cool_plate_temp": [ + "30" + ], + "cool_plate_temp_initial_layer": [ + "30" + ], + "eng_plate_temp": [ + "30" + ], + "eng_plate_temp_initial_layer": [ + "30" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_cost": [ + "20" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "hot_plate_temp": [ + "35" + ], + "hot_plate_temp_initial_layer": [ + "35" + ], + "overhang_fan_speed": [ + "100" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "temperature_vitrification": [ + "30" + ], + "textured_plate_temp": [ + "35" + ], + "textured_plate_temp_initial_layer": [ + "35" + ], + "nozzle_temperature_range_low": [ + "200" + ] +} diff --git a/resources/profiles/Snapmaker/filament/Snapmaker TPU 90A @U1 0.8 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker TPU 90A @U1 0.8 nozzle.json new file mode 100644 index 0000000000..45f0f7a0e9 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker TPU 90A @U1 0.8 nozzle.json @@ -0,0 +1,144 @@ +{ + "type": "filament", + "name": "Snapmaker TPU 90A @U1 0.8 nozzle", + "inherits": "fdm_filament_tpu", + "from": "system", + "setting_id": "w4Hpl2qNPmgNvaeM", + "filament_id": "GFU99", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "3.5" + ], + "compatible_printers": [ + "Snapmaker U1 (0.8 nozzle)" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ], + "filament_end_gcode": [ + "; filament end gcode \n\n" + ], + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_volume": [ + "0.1" + ], + "pressure_advance": [ + "0.02" + ], + "additional_cooling_fan_speed": [ + "70" + ], + "complete_print_exhaust_fan_speed": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "70" + ], + "enable_pressure_advance": [ + "0" + ], + "filament_deretraction_speed": [ + "20" + ], + "filament_flow_ratio": [ + "1.095" + ], + "filament_multitool_ramming_flow": [ + "5" + ], + "filament_retract_length_toolchange": [ + "4" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_retraction_speed": [ + "20" + ], + "filament_vendor": [ + "Snapmaker" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "slow_down_layer_time": [ + "14" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "activate_air_filtration": [ + "0" + ], + "chamber_temperatures": [ + "0" + ], + "cool_plate_temp": [ + "30" + ], + "cool_plate_temp_initial_layer": [ + "30" + ], + "eng_plate_temp": [ + "30" + ], + "eng_plate_temp_initial_layer": [ + "30" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_cost": [ + "20" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "hot_plate_temp": [ + "35" + ], + "hot_plate_temp_initial_layer": [ + "35" + ], + "overhang_fan_speed": [ + "100" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "temperature_vitrification": [ + "30" + ], + "textured_plate_temp": [ + "35" + ], + "textured_plate_temp_initial_layer": [ + "35" + ], + "nozzle_temperature_range_low": [ + "200" + ] +} diff --git a/resources/profiles/Snapmaker/filament/Snapmaker TPU 90A @U1.json b/resources/profiles/Snapmaker/filament/Snapmaker TPU 90A @U1.json new file mode 100644 index 0000000000..e89397849b --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker TPU 90A @U1.json @@ -0,0 +1,141 @@ +{ + "type": "filament", + "name": "Snapmaker TPU 90A @U1", + "inherits": "fdm_filament_tpu", + "from": "system", + "setting_id": "T4MmgICRrSzvmCZ5", + "filament_id": "GFU99", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "3.2" + ], + "compatible_printers": [ + "Snapmaker U1 (0.4 nozzle)" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ], + "filament_end_gcode": [ + "; filament end gcode \n\n" + ], + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_volume": [ + "0.1" + ], + "pressure_advance": [ + "0.4" + ], + "additional_cooling_fan_speed": [ + "100" + ], + "complete_print_exhaust_fan_speed": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "100" + ], + "enable_pressure_advance": [ + "0" + ], + "filament_deretraction_speed": [ + "15" + ], + "filament_flow_ratio": [ + "1.045" + ], + "filament_multitool_ramming_flow": [ + "5" + ], + "filament_retract_length_toolchange": [ + "2" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_retraction_speed": [ + "15" + ], + "filament_vendor": [ + "Snapmaker" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "slow_down_layer_time": [ + "14" + ], + "activate_air_filtration": [ + "0" + ], + "chamber_temperatures": [ + "0" + ], + "cool_plate_temp": [ + "30" + ], + "cool_plate_temp_initial_layer": [ + "30" + ], + "eng_plate_temp": [ + "30" + ], + "eng_plate_temp_initial_layer": [ + "30" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_cost": [ + "20" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "hot_plate_temp": [ + "35" + ], + "hot_plate_temp_initial_layer": [ + "35" + ], + "overhang_fan_speed": [ + "100" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "temperature_vitrification": [ + "30" + ], + "textured_plate_temp": [ + "35" + ], + "textured_plate_temp_initial_layer": [ + "35" + ], + "nozzle_temperature_range_low": [ + "200" + ] +} diff --git a/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A @U1 base.json index a6d8c41b5d..3c51439206 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A @U1 base.json @@ -43,9 +43,6 @@ "filament_retraction_speed": [ "nil" ], - "filament_settings_id": [ - "" - ], "filament_soluble": [ "0" ], diff --git a/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A HF @U1 0.6 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A HF @U1 0.6 nozzle.json new file mode 100644 index 0000000000..1085c84e6f --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A HF @U1 0.6 nozzle.json @@ -0,0 +1,147 @@ +{ + "type": "filament", + "name": "Snapmaker TPU 95A HF @U1 0.6 nozzle", + "inherits": "fdm_filament_tpu", + "from": "system", + "setting_id": "Q2svXpkEqg0dCdq3", + "filament_id": "GFU99", + "instantiation": "true", + "compatible_printers": [ + "Snapmaker U1 (0.6 nozzle)" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ], + "filament_end_gcode": [ + "; filament end gcode \n\n" + ], + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_volume": [ + "0.1" + ], + "enable_pressure_advance": [ + "0" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_flow_ratio": [ + "1.067" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_multitool_ramming_flow": [ + "10" + ], + "filament_retract_length_toolchange": [ + "8" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_vendor": [ + "Snapmaker" + ], + "nozzle_temperature": [ + "215" + ], + "nozzle_temperature_initial_layer": [ + "215" + ], + "overhang_fan_threshold": [ + "95%" + ], + "pressure_advance": [ + "0.14" + ], + "slow_down_layer_time": [ + "8" + ], + "additional_cooling_fan_speed": [ + "100" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "activate_air_filtration": [ + "0" + ], + "chamber_temperatures": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "70" + ], + "cool_plate_temp": [ + "30" + ], + "cool_plate_temp_initial_layer": [ + "30" + ], + "during_print_exhaust_fan_speed": [ + "70" + ], + "eng_plate_temp": [ + "30" + ], + "eng_plate_temp_initial_layer": [ + "30" + ], + "filament_cost": [ + "20" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "hot_plate_temp": [ + "35" + ], + "hot_plate_temp_initial_layer": [ + "35" + ], + "overhang_fan_speed": [ + "100" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "temperature_vitrification": [ + "30" + ], + "textured_plate_temp": [ + "35" + ], + "textured_plate_temp_initial_layer": [ + "35" + ], + "nozzle_temperature_range_low": [ + "200" + ] +} diff --git a/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A HF @U1 0.8 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A HF @U1 0.8 nozzle.json new file mode 100644 index 0000000000..bef4c7712f --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A HF @U1 0.8 nozzle.json @@ -0,0 +1,147 @@ +{ + "type": "filament", + "name": "Snapmaker TPU 95A HF @U1 0.8 nozzle", + "inherits": "fdm_filament_tpu", + "from": "system", + "setting_id": "RjsE08h3l37cAkAs", + "filament_id": "GFU99", + "instantiation": "true", + "compatible_printers": [ + "Snapmaker U1 (0.8 nozzle)" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ], + "filament_end_gcode": [ + "; filament end gcode \n\n" + ], + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_volume": [ + "0.1" + ], + "enable_pressure_advance": [ + "0" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_flow_ratio": [ + "1.045" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_multitool_ramming_flow": [ + "15" + ], + "filament_retract_length_toolchange": [ + "8" + ], + "filament_retraction_length": [ + "1" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_vendor": [ + "Snapmaker" + ], + "nozzle_temperature": [ + "215" + ], + "nozzle_temperature_initial_layer": [ + "215" + ], + "overhang_fan_threshold": [ + "95%" + ], + "pressure_advance": [ + "0.12" + ], + "slow_down_layer_time": [ + "12" + ], + "additional_cooling_fan_speed": [ + "100" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "activate_air_filtration": [ + "0" + ], + "chamber_temperatures": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "70" + ], + "cool_plate_temp": [ + "30" + ], + "cool_plate_temp_initial_layer": [ + "30" + ], + "during_print_exhaust_fan_speed": [ + "70" + ], + "eng_plate_temp": [ + "30" + ], + "eng_plate_temp_initial_layer": [ + "30" + ], + "filament_cost": [ + "20" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "hot_plate_temp": [ + "35" + ], + "hot_plate_temp_initial_layer": [ + "35" + ], + "overhang_fan_speed": [ + "100" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "temperature_vitrification": [ + "30" + ], + "textured_plate_temp": [ + "35" + ], + "textured_plate_temp_initial_layer": [ + "35" + ], + "nozzle_temperature_range_low": [ + "200" + ] +} diff --git a/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A HF @U1.json b/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A HF @U1.json new file mode 100644 index 0000000000..5e0696d906 --- /dev/null +++ b/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A HF @U1.json @@ -0,0 +1,144 @@ +{ + "type": "filament", + "name": "Snapmaker TPU 95A HF @U1", + "inherits": "fdm_filament_tpu", + "from": "system", + "setting_id": "KwcwmV2UmZUgCBoz", + "filament_id": "GFU99", + "instantiation": "true", + "compatible_printers": [ + "Snapmaker U1 (0.4 nozzle)" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ], + "filament_end_gcode": [ + "; filament end gcode \n\n" + ], + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_volume": [ + "0.1" + ], + "enable_pressure_advance": [ + "0" + ], + "fan_cooling_layer_time": [ + "40" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "10" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_flow_ratio": [ + "1.067" + ], + "filament_max_volumetric_speed": [ + "9" + ], + "filament_multitool_ramming_flow": [ + "10" + ], + "filament_retract_length_toolchange": [ + "6" + ], + "filament_retraction_length": [ + "1" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_vendor": [ + "Snapmaker" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "overhang_fan_threshold": [ + "25%" + ], + "pressure_advance": [ + "0.23" + ], + "slow_down_layer_time": [ + "10" + ], + "activate_air_filtration": [ + "0" + ], + "chamber_temperatures": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "70" + ], + "cool_plate_temp": [ + "30" + ], + "cool_plate_temp_initial_layer": [ + "30" + ], + "during_print_exhaust_fan_speed": [ + "70" + ], + "eng_plate_temp": [ + "30" + ], + "eng_plate_temp_initial_layer": [ + "30" + ], + "filament_cost": [ + "20" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "hot_plate_temp": [ + "35" + ], + "hot_plate_temp_initial_layer": [ + "35" + ], + "overhang_fan_speed": [ + "100" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "temperature_vitrification": [ + "30" + ], + "textured_plate_temp": [ + "35" + ], + "textured_plate_temp_initial_layer": [ + "35" + ], + "nozzle_temperature_range_low": [ + "200" + ] +} diff --git a/resources/profiles/Snapmaker/machine/Snapmaker U1 (0.2 nozzle).json b/resources/profiles/Snapmaker/machine/Snapmaker U1 (0.2 nozzle).json index 8a5cbc56d8..aebc032855 100644 --- a/resources/profiles/Snapmaker/machine/Snapmaker U1 (0.2 nozzle).json +++ b/resources/profiles/Snapmaker/machine/Snapmaker U1 (0.2 nozzle).json @@ -1,13 +1,54 @@ { "type": "machine", - "setting_id": "CwJeuh1rxZcjvkXh", "name": "Snapmaker U1 (0.2 nozzle)", - "from": "system", - "instantiation": "true", "inherits": "fdm_U1", + "from": "system", + "setting_id": "CwJeuh1rxZcjvkXh", + "instantiation": "true", "printer_model": "Snapmaker U1", "printer_variant": "0.2", - "default_print_profile": "0.10 Standard @Snapmaker U1 (0.2 nozzle)", + "auxiliary_fan": "1", + "change_filament_gcode": ";===== date: 20260607 =====================\n; Change Tool[previous_extruder] -> Tool[next_extruder] (layer [layer_num])\n; max_layer_z [max_layer_z]\n; max_print_height [max_print_height]\n; print_sequence [print_sequence]\n\n{\nlocal move_z = 1.5;\nlocal max_speed_toolchange = 350.0;\nlocal wait_for_extruder_temp = true;\nposition[2] = position[2] + 2.0;\nlocal speed_toolchange = max_speed_toolchange;\n\nif travel_speed < max_speed_toolchange then\n speed_toolchange = travel_speed;\nendif\n\nif print_sequence == \"by object\" then\n\n if max_layer_z < ((max_print_height - z_offset) - 2) then\n move_z = z_offset + min(((max_layer_z - z_offset) + 2), max_print_height);\n endif\n\nendif\n\n\"G91\nG1 Z\" + move_z + \" F600\nG90\n\";\n\"G1 F\" + (speed_toolchange * 60) + \"\n\";\nif wait_for_extruder_temp and not((layer_num < 0) and (next_extruder == initial_tool)) then\n \"\n\";\n \"; \" + layer_num + \"\n\";\n if layer_num == 0 then\n \"M109 S\" + first_layer_temperature[next_extruder] + \" T\" + next_extruder + \"\n\";\n else\n \"M109 S\" + temperature[next_extruder] + \" T\" + next_extruder + \"\n\";\n endif\nendif\n\"M400\" + \"\n\";\n\"T\" + next_extruder + \"\n\";\nif filament_type[next_extruder] == \"PVA\" then\n\"SET_VELOCITY_LIMIT ACCEL=3000\n\";\nelse\nendif\nif previous_extruder != next_extruder and initial_extruder != next_extruder then\n\"SM_PRINT_PREEXTRUDE_FILAMENT INDEX=\" + next_extruder + \"\n\";\nendif\n\"G90\n\";\n}\n", + "deretraction_speed": [ + "30", + "30", + "30", + "30" + ], + "extruder_colour": [ + "#FCE94F", + "#FCE94F", + "#FCE94F", + "#FCE94F" + ], + "extruder_offset": [ + "0x0", + "0x0", + "0x0", + "0x0" + ], + "host_type": "octoprint", + "long_retractions_when_cut": [ + "0", + "0", + "0", + "0" + ], + "machine_end_gcode": ";===== date: 20260605 =====================\n; layer [layer_num]\n; max_layer_z [max_layer_z]\n; print_sequence [print_sequence]\n\n{if print_sequence == \"by object\"}\n{\nlocal move_z = max_print_height;\n\nif max_layer_z < ((max_print_height - z_offset) - 2) then\n move_z = z_offset + min(((max_layer_z - z_offset) + 2), max_print_height);\nendif\n}\n\nG91\nG1 X2 Y2 Z1 F24000\nG90\nG1 Z{move_z} F600\n{endif}\n\nPRINT_END\nTIMELAPSE_STOP\n", + "machine_max_jerk_z": [ + "3", + "0.4" + ], + "machine_max_speed_e": [ + "30", + "25" + ], + "machine_max_speed_z": [ + "20", + "12" + ], + "machine_start_gcode": "SET_PRINT_AUTO_BED_LEVELING ENABLE=1\nSET_TIME_LAPSE_CAMERA ENABLE=1\n;===== date: 20260128 =====================\n\nPRINT_START\nDEFECT_DETECTION_START\nSET_PRINT_STATS_INFO TOTAL_LAYER={total_layer_count} CURRENT_LAYER=0\nTIMELAPSE_START\nM140 S{bed_temperature_initial_layer_single}\nM104 T{initial_extruder} S140\nM204 S10000\nG28 X Y\nDEFECT_DETECT_NOODLE_FIRST\n;===== 床面异物检测 ========\nT{initial_extruder}\nG90\nDEFECT_DETECTION_DETECT_BED\n;===== 取放头检测 =================\nSM_PRINT_CHECK_SWITCH_EXTRUDER\n\n;===== 自动进料 & 挤出流量 & 预挤出 ======================\nSM_PRINT_EXTRUDER_PREHEAT EXTRUDER=1 TEMP=140\nSM_PRINT_AUTO_FEED EXTRUDER=0\nSM_PRINT_FLOW_CALIBRATE EXTRUDER=0\nSM_PRINT_EXTRUDER_PREHEAT EXTRUDER=2 TEMP=140\nSM_PRINT_AUTO_FEED EXTRUDER=1\nSM_PRINT_FLOW_CALIBRATE EXTRUDER=1\nSM_PRINT_EXTRUDER_PREHEAT EXTRUDER=3 TEMP=140\nSM_PRINT_AUTO_FEED EXTRUDER=2\nSM_PRINT_FLOW_CALIBRATE EXTRUDER=2\nSM_PRINT_AUTO_FEED EXTRUDER=3\nSM_PRINT_FLOW_CALIBRATE EXTRUDER=3\nM104 S0 T0 A0\nM104 S0 T1 A0\nM104 S0 T2 A0\nM104 S0 T3 A0\nM104 T{initial_extruder} S{nozzle_temperature[initial_extruder] - 90}\n\n;===== 粗回零 =================\nT{initial_extruder}\nM106 S255\nM106 P2 S0\nMOVE_TO_DISCARD_FILAMENT_POSITION\nM109 T{initial_extruder} S{nozzle_temperature[initial_extruder] - 90}\nROUGHLY_CLEAN_NOZZLE_WITH_DISCARD\nMOVE_TO_XY_IDLE_POSITION_EXTRUDER\nG28 Z I140 J140\n\n;===== 检测钢板 =================\nDETECT_BED_PLATE\n\n;===== 深度清洁喷嘴 =================\nG90\nG0 Z5 F10000\nMOVE_TO_DISCARD_FILAMENT_POSITION\nM109 S{nozzle_temperature[initial_extruder] - 50}\nROUGHLY_CLEAN_NOZZLE\nMOVE_TO_XY_IDLE_POSITION_EXTRUDER\nFINELY_CLEAN_NOZZLE_STAGE_1\nM104 S{nozzle_temperature[initial_extruder] - 90}\nG0 Z5 F10000\nMOVE_TO_DISCARD_FILAMENT_POSITION\nROUGHLY_CLEAN_NOZZLE\nMOVE_TO_XY_IDLE_POSITION_EXTRUDER\nFINELY_CLEAN_NOZZLE_STAGE_2\n\n;===== 精回零 =================\nM106 S255\nM109 S{nozzle_temperature[initial_extruder] - 90}\nM190 S{bed_temperature_initial_layer_single}\nM107 P2\nG90\nG0 Z5 F10000\nWAIT_CHAMBER_TEMP TIMEOUT=180\n{if curr_bed_type==\"High Temp Plate\"} \nG28 Z Z_OFFSET -0.07 \n{else} \nG28 Z \n{endif} \n\n\n;===== 热床调平 =================\n{if curr_bed_type==\"High Temp Plate\"} \n; Always pass `ADAPTIVE_MARGIN=0` because Orca has already handled `adaptive_bed_mesh_margin` internally\n; Make sure to set ADAPTIVE to 0 otherwise Klipper will use it's own adaptive bed mesh logic\nBED_MESH_CALIBRATE mesh_min={adaptive_bed_mesh_min[0]},{adaptive_bed_mesh_min[1]} mesh_max={adaptive_bed_mesh_max[0]},{adaptive_bed_mesh_max[1]} ALGORITHM=[bed_mesh_algo] PROBE_COUNT={bed_mesh_probe_count[0]},{bed_mesh_probe_count[1]} ADAPTIVE=0 ADAPTIVE_MARGIN=0 Z_OFFSET=-0.07\n{else} \n; Always pass `ADAPTIVE_MARGIN=0` because Orca has already handled `adaptive_bed_mesh_margin` internally\n; Make sure to set ADAPTIVE to 0 otherwise Klipper will use it's own adaptive bed mesh logic\nBED_MESH_CALIBRATE mesh_min={adaptive_bed_mesh_min[0]},{adaptive_bed_mesh_min[1]} mesh_max={adaptive_bed_mesh_max[0]},{adaptive_bed_mesh_max[1]} ALGORITHM=[bed_mesh_algo] PROBE_COUNT={bed_mesh_probe_count[0]},{bed_mesh_probe_count[1]} ADAPTIVE=0 ADAPTIVE_MARGIN=0\n{endif} \n\n\n;===== 画起始线 =================\nG90\nG1 Z1.5\nG0 X85 Y1 Z2 F18000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG1 Z0.2\nM83\nG1 X185 E15 F360\nG1 Z1.5\n\nG90\nM106 S0", + "machine_tool_change_time": "5", "max_layer_height": [ "0.14", "0.14", @@ -26,5 +67,126 @@ "0.2", "0.2" ], - "nozzle_type": "hardened_steel" + "nozzle_type": "hardened_steel", + "printable_area": [ + "0.5x1", + "270.5x1", + "270.5x271", + "0.5x271" + ], + "printable_height": "270.05", + "retract_before_wipe": [ + "0%", + "0%", + "0%", + "0%" + ], + "retract_length_toolchange": [ + "10", + "10", + "10", + "10" + ], + "retract_lift_above": [ + "0", + "0", + "0", + "0" + ], + "retract_lift_below": [ + "269", + "269", + "269", + "269" + ], + "retract_lift_enforce": [ + "All Surfaces", + "All Surfaces", + "All Surfaces", + "All Surfaces" + ], + "retract_restart_extra": [ + "0", + "0", + "0", + "0" + ], + "retract_restart_extra_toolchange": [ + "0", + "0", + "0", + "0" + ], + "retract_when_changing_layer": [ + "1", + "1", + "1", + "1" + ], + "retraction_distances_when_cut": [ + "18", + "18", + "18", + "18" + ], + "retraction_length": [ + "0.4", + "0.4", + "0.4", + "0.4" + ], + "retraction_minimum_travel": [ + "1", + "1", + "1", + "1" + ], + "retraction_speed": [ + "30", + "30", + "30", + "30" + ], + "thumbnails": "48x48/PNG, 300x300/PNG", + "travel_slope": [ + "3", + "3", + "3", + "3" + ], + "wipe": [ + "1", + "1", + "1", + "1" + ], + "wipe_distance": [ + "2", + "2", + "2", + "2" + ], + "z_hop": [ + "0.4", + "0.4", + "0.4", + "0.4" + ], + "z_hop_types": [ + "Auto Lift", + "Auto Lift", + "Auto Lift", + "Auto Lift" + ], + "enable_filament_ramming": "0", + "extruder_clearance_height_to_rod": "27.5", + "extruder_clearance_radius": "72.5", + "machine_load_filament_time": "0", + "machine_unload_filament_time": "0", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\nTIMELAPSE_TAKE_FRAME\nDEFECT_DETECTION_DETECT", + "machine_pause_gcode": "M600", + "nozzle_volume": "143", + "support_multi_bed_types": "0", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]\nSET_PRINT_STATS_INFO TOTAL_LAYER={total_layer_count} CURRENT_LAYER={layer_num+1}", + "default_print_profile": "0.10 Standard @Snapmaker U1 (0.2 nozzle)" } diff --git a/resources/profiles/Snapmaker/machine/Snapmaker U1 (0.4 nozzle).json b/resources/profiles/Snapmaker/machine/Snapmaker U1 (0.4 nozzle).json index 1105a7ec1d..28ccfd0a29 100644 --- a/resources/profiles/Snapmaker/machine/Snapmaker U1 (0.4 nozzle).json +++ b/resources/profiles/Snapmaker/machine/Snapmaker U1 (0.4 nozzle).json @@ -1,14 +1,20 @@ { "type": "machine", - "setting_id": "UeTP4RqAd7xAMHVE", "name": "Snapmaker U1 (0.4 nozzle)", - "from": "system", - "instantiation": "true", "inherits": "fdm_U1", + "from": "system", + "setting_id": "UeTP4RqAd7xAMHVE", + "instantiation": "true", "printer_model": "Snapmaker U1", "printer_variant": "0.4", "auxiliary_fan": "1", "change_filament_gcode": ";===== date: 20260607 =====================\n; Change Tool[previous_extruder] -> Tool[next_extruder] (layer [layer_num])\n; max_layer_z [max_layer_z]\n; max_print_height [max_print_height]\n; print_sequence [print_sequence]\n\n{\nlocal move_z = 1.5;\nlocal max_speed_toolchange = 350.0;\nlocal wait_for_extruder_temp = true;\nposition[2] = position[2] + 2.0;\nlocal speed_toolchange = max_speed_toolchange;\n\nif travel_speed < max_speed_toolchange then\n speed_toolchange = travel_speed;\nendif\n\nif print_sequence == \"by object\" then\n\n if max_layer_z < ((max_print_height - z_offset) - 2) then\n move_z = z_offset + min(((max_layer_z - z_offset) + 2), max_print_height);\n endif\n\nendif\n\n\"G91\nG1 Z\" + move_z + \" F600\nG90\n\";\n\"G1 F\" + (speed_toolchange * 60) + \"\n\";\nif wait_for_extruder_temp and not((layer_num < 0) and (next_extruder == initial_tool)) then\n \"\n\";\n \"; \" + layer_num + \"\n\";\n if layer_num == 0 then\n \"M109 S\" + first_layer_temperature[next_extruder] + \" T\" + next_extruder + \"\n\";\n else\n \"M109 S\" + temperature[next_extruder] + \" T\" + next_extruder + \"\n\";\n endif\nendif\n\"M400\" + \"\n\";\n\"T\" + next_extruder + \"\n\";\nif filament_type[next_extruder] == \"PVA\" then\n\"SET_VELOCITY_LIMIT ACCEL=3000\n\";\nelse\nendif\nif previous_extruder != next_extruder and initial_extruder != next_extruder then\n\"SM_PRINT_PREEXTRUDE_FILAMENT INDEX=\" + next_extruder + \"\n\";\nendif\n\"G90\n\";\n}\n", + "deretraction_speed": [ + "30", + "30", + "30", + "30" + ], "extruder_colour": [ "#FCE94F", "#FCE94F", @@ -29,38 +35,6 @@ "0" ], "machine_end_gcode": ";===== date: 20260605 =====================\n; layer [layer_num]\n; max_layer_z [max_layer_z]\n; print_sequence [print_sequence]\n\n{if print_sequence == \"by object\"}\n{\nlocal move_z = max_print_height;\n\nif max_layer_z < ((max_print_height - z_offset) - 2) then\n move_z = z_offset + min(((max_layer_z - z_offset) + 2), max_print_height);\nendif\n}\n\nG91\nG1 X2 Y2 Z1 F24000\nG90\nG1 Z{move_z} F600\n{endif}\n\nPRINT_END\nTIMELAPSE_STOP\n", - "machine_max_acceleration_extruding": [ - "25000", - "25000" - ], - "machine_max_acceleration_retracting": [ - "5000", - "5000" - ], - "machine_max_acceleration_travel": [ - "25000", - "25000" - ], - "machine_max_acceleration_x": [ - "25000", - "25000" - ], - "machine_max_acceleration_y": [ - "25000", - "25000" - ], - "machine_max_acceleration_z": [ - "500", - "200" - ], - "machine_max_jerk_x": [ - "9", - "9" - ], - "machine_max_jerk_y": [ - "9", - "9" - ], "machine_max_jerk_z": [ "3", "0.4" @@ -69,22 +43,11 @@ "30", "25" ], - "machine_max_speed_x": [ - "1000", - "200" - ], - "machine_max_speed_y": [ - "1000", - "200" - ], "machine_max_speed_z": [ "20", "12" ], - "resonance_avoidance": "1", - "min_resonance_avoidance_speed": "40", - "max_resonance_avoidance_speed": "90", - "machine_start_gcode": "SET_PRINT_AUTO_BED_LEVELING ENABLE=1\nSET_TIME_LAPSE_CAMERA ENABLE=1\n;===== date: 20251222 =====================\n\nPRINT_START\nDEFECT_DETECTION_START\nSET_PRINT_STATS_INFO TOTAL_LAYER={total_layer_count}\nSET_PRINT_STATS_INFO CURRENT_LAYER=0\nTIMELAPSE_START\nM140 S{bed_temperature_initial_layer_single}\nM104 T{initial_extruder} S140\nM204 S10000\n\nG28 X Y\n;===== 床面异物检测 ========\nT{initial_extruder}\nG90\nDEFECT_DETECTION_DETECT_BED\n;===== 取放头检测 =================\nSM_PRINT_CHECK_SWITCH_EXTRUDER\n\n;===== 自动进料 & 挤出流量 & 预挤出 ======================\nSM_PRINT_EXTRUDER_PREHEAT EXTRUDER=1 TEMP=140\nSM_PRINT_AUTO_FEED EXTRUDER=0\nSM_PRINT_FLOW_CALIBRATE EXTRUDER=0\nSM_PRINT_EXTRUDER_PREHEAT EXTRUDER=2 TEMP=140\nSM_PRINT_AUTO_FEED EXTRUDER=1\nSM_PRINT_FLOW_CALIBRATE EXTRUDER=1\nSM_PRINT_EXTRUDER_PREHEAT EXTRUDER=3 TEMP=140\nSM_PRINT_AUTO_FEED EXTRUDER=2\nSM_PRINT_FLOW_CALIBRATE EXTRUDER=2\nSM_PRINT_AUTO_FEED EXTRUDER=3\nSM_PRINT_FLOW_CALIBRATE EXTRUDER=3\nM104 S0 T0 A0\nM104 S0 T1 A0\nM104 S0 T2 A0\nM104 S0 T3 A0\nM104 T{initial_extruder} S{nozzle_temperature[initial_extruder] - 90}\n\n;===== 粗回零 =================\nT{initial_extruder}\nM106 S255\nM106 P2 S0\nMOVE_TO_DISCARD_FILAMENT_POSITION\nM109 T{initial_extruder} S{nozzle_temperature[initial_extruder] - 90}\nROUGHLY_CLEAN_NOZZLE_WITH_DISCARD\nMOVE_TO_XY_IDLE_POSITION_EXTRUDER\nG28 Z I140 J140\n\n;===== 检测钢板 =================\nDETECT_BED_PLATE\n\n;===== 深度清洁喷嘴 =================\nG90\nG0 Z5 F10000\nMOVE_TO_DISCARD_FILAMENT_POSITION\nM109 S{nozzle_temperature[initial_extruder] - 50}\nROUGHLY_CLEAN_NOZZLE\nMOVE_TO_XY_IDLE_POSITION_EXTRUDER\nFINELY_CLEAN_NOZZLE_STAGE_1\nM104 S{nozzle_temperature[initial_extruder] - 90}\nG0 Z5 F10000\nMOVE_TO_DISCARD_FILAMENT_POSITION\nROUGHLY_CLEAN_NOZZLE\nMOVE_TO_XY_IDLE_POSITION_EXTRUDER\nFINELY_CLEAN_NOZZLE_STAGE_2\n\n;===== 精回零 =================\nM106 S255\nM109 S{nozzle_temperature[initial_extruder] - 90}\nM190 S{bed_temperature_initial_layer_single}\nM107 P2\nG90\nG0 Z5 F10000\nG28 Z\n\n;===== 热床调平 =================\n; Always pass `ADAPTIVE_MARGIN=0` because Orca has already handled `adaptive_bed_mesh_margin` internally\n; Make sure to set ADAPTIVE to 0 otherwise Klipper will use it's own adaptive bed mesh logic\nBED_MESH_CALIBRATE mesh_min={adaptive_bed_mesh_min[0]},{adaptive_bed_mesh_min[1]} mesh_max={adaptive_bed_mesh_max[0]},{adaptive_bed_mesh_max[1]} ALGORITHM=[bed_mesh_algo] PROBE_COUNT={bed_mesh_probe_count[0]},{bed_mesh_probe_count[1]} ADAPTIVE=0 ADAPTIVE_MARGIN=0\n; Original upstream: BED_MESH_CALIBRATE PROBE_COUNT=11,11\n\n;===== 画起始线 =================\nG90\nG1 Z1.5\nG0 X10 Y3 Z2 F18000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG1 Z0.2\nM83\nG1 X110 E15 F360\nG1 Z1.5\n\nG90\nM106 S0", + "machine_start_gcode": "SET_PRINT_AUTO_BED_LEVELING ENABLE=1\nSET_TIME_LAPSE_CAMERA ENABLE=1\n;===== date: 20260128 =====================\n\nPRINT_START\nDEFECT_DETECTION_START\nSET_PRINT_STATS_INFO TOTAL_LAYER={total_layer_count} CURRENT_LAYER=0\nTIMELAPSE_START\nM140 S{bed_temperature_initial_layer_single}\nM104 T{initial_extruder} S140\nM204 S10000\nG28 X Y\nDEFECT_DETECT_NOODLE_FIRST\n;===== 床面异物检测 ========\nT{initial_extruder}\nG90\nDEFECT_DETECTION_DETECT_BED\n;===== 取放头检测 =================\nSM_PRINT_CHECK_SWITCH_EXTRUDER\n\n;===== 自动进料 & 挤出流量 & 预挤出 ======================\nSM_PRINT_EXTRUDER_PREHEAT EXTRUDER=1 TEMP=140\nSM_PRINT_AUTO_FEED EXTRUDER=0\nSM_PRINT_FLOW_CALIBRATE EXTRUDER=0\nSM_PRINT_EXTRUDER_PREHEAT EXTRUDER=2 TEMP=140\nSM_PRINT_AUTO_FEED EXTRUDER=1\nSM_PRINT_FLOW_CALIBRATE EXTRUDER=1\nSM_PRINT_EXTRUDER_PREHEAT EXTRUDER=3 TEMP=140\nSM_PRINT_AUTO_FEED EXTRUDER=2\nSM_PRINT_FLOW_CALIBRATE EXTRUDER=2\nSM_PRINT_AUTO_FEED EXTRUDER=3\nSM_PRINT_FLOW_CALIBRATE EXTRUDER=3\nM104 S0 T0 A0\nM104 S0 T1 A0\nM104 S0 T2 A0\nM104 S0 T3 A0\nM104 T{initial_extruder} S{nozzle_temperature[initial_extruder] - 90}\n\n;===== 粗回零 =================\nT{initial_extruder}\nM106 S255\nM106 P2 S0\nMOVE_TO_DISCARD_FILAMENT_POSITION\nM109 T{initial_extruder} S{nozzle_temperature[initial_extruder] - 90}\nROUGHLY_CLEAN_NOZZLE_WITH_DISCARD\nMOVE_TO_XY_IDLE_POSITION_EXTRUDER\nG28 Z I140 J140\n\n;===== 检测钢板 =================\nDETECT_BED_PLATE\n\n;===== 深度清洁喷嘴 =================\nG90\nG0 Z5 F10000\nMOVE_TO_DISCARD_FILAMENT_POSITION\nM109 S{nozzle_temperature[initial_extruder] - 50}\nROUGHLY_CLEAN_NOZZLE\nMOVE_TO_XY_IDLE_POSITION_EXTRUDER\nFINELY_CLEAN_NOZZLE_STAGE_1\nM104 S{nozzle_temperature[initial_extruder] - 90}\nG0 Z5 F10000\nMOVE_TO_DISCARD_FILAMENT_POSITION\nROUGHLY_CLEAN_NOZZLE\nMOVE_TO_XY_IDLE_POSITION_EXTRUDER\nFINELY_CLEAN_NOZZLE_STAGE_2\n\n;===== 精回零 =================\nM106 S255\nM109 S{nozzle_temperature[initial_extruder] - 90}\nM190 S{bed_temperature_initial_layer_single}\nM107 P2\nG90\nG0 Z5 F10000\nWAIT_CHAMBER_TEMP TIMEOUT=180\n{if curr_bed_type==\"High Temp Plate\"} \nG28 Z Z_OFFSET -0.07 \n{else} \nG28 Z \n{endif} \n\n\n;===== 热床调平 =================\n{if curr_bed_type==\"High Temp Plate\"} \n; Always pass `ADAPTIVE_MARGIN=0` because Orca has already handled `adaptive_bed_mesh_margin` internally\n; Make sure to set ADAPTIVE to 0 otherwise Klipper will use it's own adaptive bed mesh logic\nBED_MESH_CALIBRATE mesh_min={adaptive_bed_mesh_min[0]},{adaptive_bed_mesh_min[1]} mesh_max={adaptive_bed_mesh_max[0]},{adaptive_bed_mesh_max[1]} ALGORITHM=[bed_mesh_algo] PROBE_COUNT={bed_mesh_probe_count[0]},{bed_mesh_probe_count[1]} ADAPTIVE=0 ADAPTIVE_MARGIN=0 Z_OFFSET=-0.07\n{else} \n; Always pass `ADAPTIVE_MARGIN=0` because Orca has already handled `adaptive_bed_mesh_margin` internally\n; Make sure to set ADAPTIVE to 0 otherwise Klipper will use it's own adaptive bed mesh logic\nBED_MESH_CALIBRATE mesh_min={adaptive_bed_mesh_min[0]},{adaptive_bed_mesh_min[1]} mesh_max={adaptive_bed_mesh_max[0]},{adaptive_bed_mesh_max[1]} ALGORITHM=[bed_mesh_algo] PROBE_COUNT={bed_mesh_probe_count[0]},{bed_mesh_probe_count[1]} ADAPTIVE=0 ADAPTIVE_MARGIN=0\n{endif} \n\n\n;===== 画起始线 =================\nG90\nG1 Z1.5\nG0 X85 Y1 Z2 F18000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG1 Z0.2\nM83\nG1 X185 E15 F360\nG1 Z1.5\n\nG90\nM106 S0", "machine_tool_change_time": "5", "max_layer_height": [ "0.32", @@ -104,7 +67,7 @@ "0.4", "0.4" ], - "nozzle_type": "stainless_steel", + "nozzle_type": "hardened_steel", "printable_area": [ "0.5x1", "270.5x1", @@ -112,7 +75,6 @@ "0.5x271" ], "printable_height": "270.05", - "printer_settings_id": "MyToolChanger 0.4 nozzle - Copy", "retract_before_wipe": [ "0%", "0%", @@ -168,10 +130,10 @@ "18" ], "retraction_length": [ - "0.8", - "0.8", - "0.8", - "0.8" + "1.5", + "1.5", + "1.5", + "1.5" ], "retraction_minimum_travel": [ "1", @@ -180,16 +142,10 @@ "1" ], "retraction_speed": [ - "40", - "40", - "40", - "40" - ], - "deretraction_speed": [ - "35", - "35", - "35", - "35" + "30", + "30", + "30", + "30" ], "thumbnails": "48x48/PNG, 300x300/PNG", "travel_slope": [ @@ -228,17 +184,12 @@ "machine_load_filament_time": "0", "machine_unload_filament_time": "0", "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\nTIMELAPSE_TAKE_FRAME\nDEFECT_DETECTION_DETECT", - "z_hop_when_prime": [ - "0", - "0", - "0", - "0" - ], - "ramming_pressure_advance_value": "0.02", - "tool_change_temprature_wait": "0", - "printer_notes": "", + "default_print_profile": "0.20 Standard @Snapmaker U1 (0.4 nozzle)", "machine_pause_gcode": "M600", "default_bed_type": "Textured PEI Plate", - "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]\nSET_PRINT_STATS_INFO TOTAL_LAYER={total_layer_count}\nSET_PRINT_STATS_INFO CURRENT_LAYER={layer_num+1}", - "nozzle_volume": "143" + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]\nSET_PRINT_STATS_INFO TOTAL_LAYER={total_layer_count} CURRENT_LAYER={layer_num+1}", + "nozzle_volume": "143", + "resonance_avoidance": "1", + "min_resonance_avoidance_speed": "40", + "max_resonance_avoidance_speed": "90" } diff --git a/resources/profiles/Snapmaker/machine/Snapmaker U1 (0.4+0.6 nozzle).json b/resources/profiles/Snapmaker/machine/Snapmaker U1 (0.4+0.6 nozzle).json index f637b2a592..c9866329bd 100644 --- a/resources/profiles/Snapmaker/machine/Snapmaker U1 (0.4+0.6 nozzle).json +++ b/resources/profiles/Snapmaker/machine/Snapmaker U1 (0.4+0.6 nozzle).json @@ -1,10 +1,10 @@ { "type": "machine", - "setting_id": "O6AMxX1Ptbtv4zCK", "name": "Snapmaker U1 (0.4+0.6 nozzle)", - "from": "system", - "instantiation": "true", "inherits": "fdm_U1", + "from": "system", + "setting_id": "O6AMxX1Ptbtv4zCK", + "instantiation": "true", "printer_model": "Snapmaker U1", "printer_variant": "0.4+0.6", "default_print_profile": "0.20 Standard @Snapmaker U1 (0.4+0.6 nozzle)", diff --git a/resources/profiles/Snapmaker/machine/Snapmaker U1 (0.6 nozzle).json b/resources/profiles/Snapmaker/machine/Snapmaker U1 (0.6 nozzle).json index 60e699d108..f4dff2f357 100644 --- a/resources/profiles/Snapmaker/machine/Snapmaker U1 (0.6 nozzle).json +++ b/resources/profiles/Snapmaker/machine/Snapmaker U1 (0.6 nozzle).json @@ -1,18 +1,59 @@ { "type": "machine", - "setting_id": "1OseO7RSPgE4CRKO", "name": "Snapmaker U1 (0.6 nozzle)", - "from": "system", - "instantiation": "true", "inherits": "fdm_U1", + "from": "system", + "setting_id": "1OseO7RSPgE4CRKO", + "instantiation": "true", "printer_model": "Snapmaker U1", "printer_variant": "0.6", - "default_print_profile": "0.20 Standard @Snapmaker U1 (0.6 nozzle)", + "auxiliary_fan": "1", + "change_filament_gcode": ";===== date: 20260607 =====================\n; Change Tool[previous_extruder] -> Tool[next_extruder] (layer [layer_num])\n; max_layer_z [max_layer_z]\n; max_print_height [max_print_height]\n; print_sequence [print_sequence]\n\n{\nlocal move_z = 1.5;\nlocal max_speed_toolchange = 350.0;\nlocal wait_for_extruder_temp = true;\nposition[2] = position[2] + 2.0;\nlocal speed_toolchange = max_speed_toolchange;\n\nif travel_speed < max_speed_toolchange then\n speed_toolchange = travel_speed;\nendif\n\nif print_sequence == \"by object\" then\n\n if max_layer_z < ((max_print_height - z_offset) - 2) then\n move_z = z_offset + min(((max_layer_z - z_offset) + 2), max_print_height);\n endif\n\nendif\n\n\"G91\nG1 Z\" + move_z + \" F600\nG90\n\";\n\"G1 F\" + (speed_toolchange * 60) + \"\n\";\nif wait_for_extruder_temp and not((layer_num < 0) and (next_extruder == initial_tool)) then\n \"\n\";\n \"; \" + layer_num + \"\n\";\n if layer_num == 0 then\n \"M109 S\" + first_layer_temperature[next_extruder] + \" T\" + next_extruder + \"\n\";\n else\n \"M109 S\" + temperature[next_extruder] + \" T\" + next_extruder + \"\n\";\n endif\nendif\n\"M400\" + \"\n\";\n\"T\" + next_extruder + \"\n\";\nif filament_type[next_extruder] == \"PVA\" then\n\"SET_VELOCITY_LIMIT ACCEL=3000\n\";\nelse\nendif\nif previous_extruder != next_extruder and initial_extruder != next_extruder then\n\"SM_PRINT_PREEXTRUDE_FILAMENT INDEX=\" + next_extruder + \"\n\";\nendif\n\"G90\n\";\n}\n", + "deretraction_speed": [ + "30", + "30", + "30", + "30" + ], + "extruder_colour": [ + "#FCE94F", + "#FCE94F", + "#FCE94F", + "#FCE94F" + ], + "extruder_offset": [ + "0x0", + "0x0", + "0x0", + "0x0" + ], + "host_type": "octoprint", + "long_retractions_when_cut": [ + "0", + "0", + "0", + "0" + ], + "machine_end_gcode": ";===== date: 20260605 =====================\n; layer [layer_num]\n; max_layer_z [max_layer_z]\n; print_sequence [print_sequence]\n\n{if print_sequence == \"by object\"}\n{\nlocal move_z = max_print_height;\n\nif max_layer_z < ((max_print_height - z_offset) - 2) then\n move_z = z_offset + min(((max_layer_z - z_offset) + 2), max_print_height);\nendif\n}\n\nG91\nG1 X2 Y2 Z1 F24000\nG90\nG1 Z{move_z} F600\n{endif}\n\nPRINT_END\nTIMELAPSE_STOP\n", + "machine_max_jerk_z": [ + "3", + "0.4" + ], + "machine_max_speed_e": [ + "30", + "25" + ], + "machine_max_speed_z": [ + "20", + "12" + ], + "machine_start_gcode": "SET_PRINT_AUTO_BED_LEVELING ENABLE=1\nSET_TIME_LAPSE_CAMERA ENABLE=1\n;===== date: 20260128 =====================\n\nPRINT_START\nDEFECT_DETECTION_START\nSET_PRINT_STATS_INFO TOTAL_LAYER={total_layer_count} CURRENT_LAYER=0\nTIMELAPSE_START\nM140 S{bed_temperature_initial_layer_single}\nM104 T{initial_extruder} S140\nM204 S10000\nG28 X Y\nDEFECT_DETECT_NOODLE_FIRST\n;===== 床面异物检测 ========\nT{initial_extruder}\nG90\nDEFECT_DETECTION_DETECT_BED\n;===== 取放头检测 =================\nSM_PRINT_CHECK_SWITCH_EXTRUDER\n\n;===== 自动进料 & 挤出流量 & 预挤出 ======================\nSM_PRINT_EXTRUDER_PREHEAT EXTRUDER=1 TEMP=140\nSM_PRINT_AUTO_FEED EXTRUDER=0\nSM_PRINT_FLOW_CALIBRATE EXTRUDER=0\nSM_PRINT_EXTRUDER_PREHEAT EXTRUDER=2 TEMP=140\nSM_PRINT_AUTO_FEED EXTRUDER=1\nSM_PRINT_FLOW_CALIBRATE EXTRUDER=1\nSM_PRINT_EXTRUDER_PREHEAT EXTRUDER=3 TEMP=140\nSM_PRINT_AUTO_FEED EXTRUDER=2\nSM_PRINT_FLOW_CALIBRATE EXTRUDER=2\nSM_PRINT_AUTO_FEED EXTRUDER=3\nSM_PRINT_FLOW_CALIBRATE EXTRUDER=3\nM104 S0 T0 A0\nM104 S0 T1 A0\nM104 S0 T2 A0\nM104 S0 T3 A0\nM104 T{initial_extruder} S{nozzle_temperature[initial_extruder] - 90}\n\n;===== 粗回零 =================\nT{initial_extruder}\nM106 S255\nM106 P2 S0\nMOVE_TO_DISCARD_FILAMENT_POSITION\nM109 T{initial_extruder} S{nozzle_temperature[initial_extruder] - 90}\nROUGHLY_CLEAN_NOZZLE_WITH_DISCARD\nMOVE_TO_XY_IDLE_POSITION_EXTRUDER\nG28 Z I140 J140\n\n;===== 检测钢板 =================\nDETECT_BED_PLATE\n\n;===== 深度清洁喷嘴 =================\nG90\nG0 Z5 F10000\nMOVE_TO_DISCARD_FILAMENT_POSITION\nM109 S{nozzle_temperature[initial_extruder] - 50}\nROUGHLY_CLEAN_NOZZLE\nMOVE_TO_XY_IDLE_POSITION_EXTRUDER\nFINELY_CLEAN_NOZZLE_STAGE_1\nM104 S{nozzle_temperature[initial_extruder] - 90}\nG0 Z5 F10000\nMOVE_TO_DISCARD_FILAMENT_POSITION\nROUGHLY_CLEAN_NOZZLE\nMOVE_TO_XY_IDLE_POSITION_EXTRUDER\nFINELY_CLEAN_NOZZLE_STAGE_2\n\n;===== 精回零 =================\nM106 S255\nM109 S{nozzle_temperature[initial_extruder] - 90}\nM190 S{bed_temperature_initial_layer_single}\nM107 P2\nG90\nG0 Z5 F10000\nWAIT_CHAMBER_TEMP TIMEOUT=180\n{if curr_bed_type==\"High Temp Plate\"} \nG28 Z Z_OFFSET -0.07 \n{else} \nG28 Z \n{endif} \n\n\n;===== 热床调平 =================\n{if curr_bed_type==\"High Temp Plate\"} \n; Always pass `ADAPTIVE_MARGIN=0` because Orca has already handled `adaptive_bed_mesh_margin` internally\n; Make sure to set ADAPTIVE to 0 otherwise Klipper will use it's own adaptive bed mesh logic\nBED_MESH_CALIBRATE mesh_min={adaptive_bed_mesh_min[0]},{adaptive_bed_mesh_min[1]} mesh_max={adaptive_bed_mesh_max[0]},{adaptive_bed_mesh_max[1]} ALGORITHM=[bed_mesh_algo] PROBE_COUNT={bed_mesh_probe_count[0]},{bed_mesh_probe_count[1]} ADAPTIVE=0 ADAPTIVE_MARGIN=0 Z_OFFSET=-0.07\n{else} \n; Always pass `ADAPTIVE_MARGIN=0` because Orca has already handled `adaptive_bed_mesh_margin` internally\n; Make sure to set ADAPTIVE to 0 otherwise Klipper will use it's own adaptive bed mesh logic\nBED_MESH_CALIBRATE mesh_min={adaptive_bed_mesh_min[0]},{adaptive_bed_mesh_min[1]} mesh_max={adaptive_bed_mesh_max[0]},{adaptive_bed_mesh_max[1]} ALGORITHM=[bed_mesh_algo] PROBE_COUNT={bed_mesh_probe_count[0]},{bed_mesh_probe_count[1]} ADAPTIVE=0 ADAPTIVE_MARGIN=0\n{endif} \n\n\n;===== 画起始线 =================\nG90\nG1 Z1.5\nG0 X85 Y1 Z2 F18000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG1 Z0.2\nM83\nG1 X185 E15 F360\nG1 Z1.5\n\nG90\nM106 S0", + "machine_tool_change_time": "5", "max_layer_height": [ - "0.48", - "0.48", - "0.48", - "0.48" + "0.42", + "0.42", + "0.42", + "0.42" ], "min_layer_height": [ "0.12", @@ -26,5 +67,126 @@ "0.6", "0.6" ], - "nozzle_type": "stainless_steel" + "nozzle_type": "stainless_steel", + "printable_area": [ + "0.5x1", + "270.5x1", + "270.5x271", + "0.5x271" + ], + "printable_height": "270.05", + "retract_before_wipe": [ + "0%", + "0%", + "0%", + "0%" + ], + "retract_length_toolchange": [ + "10", + "10", + "10", + "10" + ], + "retract_lift_above": [ + "0", + "0", + "0", + "0" + ], + "retract_lift_below": [ + "269", + "269", + "269", + "269" + ], + "retract_lift_enforce": [ + "All Surfaces", + "All Surfaces", + "All Surfaces", + "All Surfaces" + ], + "retract_restart_extra": [ + "0", + "0", + "0", + "0" + ], + "retract_restart_extra_toolchange": [ + "0", + "0", + "0", + "0" + ], + "retract_when_changing_layer": [ + "1", + "1", + "1", + "1" + ], + "retraction_distances_when_cut": [ + "18", + "18", + "18", + "18" + ], + "retraction_length": [ + "1.4", + "1.4", + "1.4", + "1.4" + ], + "retraction_minimum_travel": [ + "3", + "3", + "3", + "3" + ], + "retraction_speed": [ + "30", + "30", + "30", + "30" + ], + "thumbnails": "48x48/PNG, 300x300/PNG", + "travel_slope": [ + "3", + "3", + "3", + "3" + ], + "wipe": [ + "1", + "1", + "1", + "1" + ], + "wipe_distance": [ + "1", + "1", + "1", + "1" + ], + "z_hop": [ + "0.4", + "0.4", + "0.4", + "0.4" + ], + "z_hop_types": [ + "Auto Lift", + "Auto Lift", + "Auto Lift", + "Auto Lift" + ], + "enable_filament_ramming": "0", + "extruder_clearance_height_to_rod": "27.5", + "extruder_clearance_radius": "72.5", + "machine_load_filament_time": "0", + "machine_unload_filament_time": "0", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\nTIMELAPSE_TAKE_FRAME\nDEFECT_DETECTION_DETECT", + "machine_pause_gcode": "M600", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]\nSET_PRINT_STATS_INFO TOTAL_LAYER={total_layer_count} CURRENT_LAYER={layer_num+1}", + "nozzle_volume": "143", + "support_multi_bed_types": "0", + "default_print_profile": "0.30 Standard @Snapmaker U1 (0.6 nozzle)" } diff --git a/resources/profiles/Snapmaker/machine/Snapmaker U1 (0.8 nozzle).json b/resources/profiles/Snapmaker/machine/Snapmaker U1 (0.8 nozzle).json index b775c2c964..e356f4264b 100644 --- a/resources/profiles/Snapmaker/machine/Snapmaker U1 (0.8 nozzle).json +++ b/resources/profiles/Snapmaker/machine/Snapmaker U1 (0.8 nozzle).json @@ -1,13 +1,54 @@ { "type": "machine", - "setting_id": "WTkhQtyDO06YY6AG", "name": "Snapmaker U1 (0.8 nozzle)", - "from": "system", - "instantiation": "true", "inherits": "fdm_U1", + "from": "system", + "setting_id": "WTkhQtyDO06YY6AG", + "instantiation": "true", "printer_model": "Snapmaker U1", "printer_variant": "0.8", - "default_print_profile": "0.40 Standard @Snapmaker U1 (0.8 nozzle)", + "auxiliary_fan": "1", + "change_filament_gcode": ";===== date: 20260607 =====================\n; Change Tool[previous_extruder] -> Tool[next_extruder] (layer [layer_num])\n; max_layer_z [max_layer_z]\n; max_print_height [max_print_height]\n; print_sequence [print_sequence]\n\n{\nlocal move_z = 1.5;\nlocal max_speed_toolchange = 350.0;\nlocal wait_for_extruder_temp = true;\nposition[2] = position[2] + 2.0;\nlocal speed_toolchange = max_speed_toolchange;\n\nif travel_speed < max_speed_toolchange then\n speed_toolchange = travel_speed;\nendif\n\nif print_sequence == \"by object\" then\n\n if max_layer_z < ((max_print_height - z_offset) - 2) then\n move_z = z_offset + min(((max_layer_z - z_offset) + 2), max_print_height);\n endif\n\nendif\n\n\"G91\nG1 Z\" + move_z + \" F600\nG90\n\";\n\"G1 F\" + (speed_toolchange * 60) + \"\n\";\nif wait_for_extruder_temp and not((layer_num < 0) and (next_extruder == initial_tool)) then\n \"\n\";\n \"; \" + layer_num + \"\n\";\n if layer_num == 0 then\n \"M109 S\" + first_layer_temperature[next_extruder] + \" T\" + next_extruder + \"\n\";\n else\n \"M109 S\" + temperature[next_extruder] + \" T\" + next_extruder + \"\n\";\n endif\nendif\n\"M400\" + \"\n\";\n\"T\" + next_extruder + \"\n\";\nif filament_type[next_extruder] == \"PVA\" then\n\"SET_VELOCITY_LIMIT ACCEL=3000\n\";\nelse\nendif\nif previous_extruder != next_extruder and initial_extruder != next_extruder then\n\"SM_PRINT_PREEXTRUDE_FILAMENT INDEX=\" + next_extruder + \"\n\";\nendif\n\"G90\n\";\n}\n", + "deretraction_speed": [ + "30", + "30", + "30", + "30" + ], + "extruder_colour": [ + "#FCE94F", + "#FCE94F", + "#FCE94F", + "#FCE94F" + ], + "extruder_offset": [ + "0x0", + "0x0", + "0x0", + "0x0" + ], + "host_type": "octoprint", + "long_retractions_when_cut": [ + "0", + "0", + "0", + "0" + ], + "machine_end_gcode": ";===== date: 20260605 =====================\n; layer [layer_num]\n; max_layer_z [max_layer_z]\n; print_sequence [print_sequence]\n\n{if print_sequence == \"by object\"}\n{\nlocal move_z = max_print_height;\n\nif max_layer_z < ((max_print_height - z_offset) - 2) then\n move_z = z_offset + min(((max_layer_z - z_offset) + 2), max_print_height);\nendif\n}\n\nG91\nG1 X2 Y2 Z1 F24000\nG90\nG1 Z{move_z} F600\n{endif}\n\nPRINT_END\nTIMELAPSE_STOP\n", + "machine_max_jerk_z": [ + "3", + "0.4" + ], + "machine_max_speed_e": [ + "30", + "25" + ], + "machine_max_speed_z": [ + "20", + "12" + ], + "machine_start_gcode": "SET_PRINT_AUTO_BED_LEVELING ENABLE=1\nSET_TIME_LAPSE_CAMERA ENABLE=1\n;===== date: 20260128 =====================\n\nPRINT_START\nDEFECT_DETECTION_START\nSET_PRINT_STATS_INFO TOTAL_LAYER={total_layer_count} CURRENT_LAYER=0\nTIMELAPSE_START\nM140 S{bed_temperature_initial_layer_single}\nM104 T{initial_extruder} S140\nM204 S10000\nG28 X Y\nDEFECT_DETECT_NOODLE_FIRST\n;===== 床面异物检测 ========\nT{initial_extruder}\nG90\nDEFECT_DETECTION_DETECT_BED\n;===== 取放头检测 =================\nSM_PRINT_CHECK_SWITCH_EXTRUDER\n\n;===== 自动进料 & 挤出流量 & 预挤出 ======================\nSM_PRINT_EXTRUDER_PREHEAT EXTRUDER=1 TEMP=140\nSM_PRINT_AUTO_FEED EXTRUDER=0\nSM_PRINT_FLOW_CALIBRATE EXTRUDER=0\nSM_PRINT_EXTRUDER_PREHEAT EXTRUDER=2 TEMP=140\nSM_PRINT_AUTO_FEED EXTRUDER=1\nSM_PRINT_FLOW_CALIBRATE EXTRUDER=1\nSM_PRINT_EXTRUDER_PREHEAT EXTRUDER=3 TEMP=140\nSM_PRINT_AUTO_FEED EXTRUDER=2\nSM_PRINT_FLOW_CALIBRATE EXTRUDER=2\nSM_PRINT_AUTO_FEED EXTRUDER=3\nSM_PRINT_FLOW_CALIBRATE EXTRUDER=3\nM104 S0 T0 A0\nM104 S0 T1 A0\nM104 S0 T2 A0\nM104 S0 T3 A0\nM104 T{initial_extruder} S{nozzle_temperature[initial_extruder] - 90}\n\n;===== 粗回零 =================\nT{initial_extruder}\nM106 S255\nM106 P2 S0\nMOVE_TO_DISCARD_FILAMENT_POSITION\nM109 T{initial_extruder} S{nozzle_temperature[initial_extruder] - 90}\nROUGHLY_CLEAN_NOZZLE_WITH_DISCARD\nMOVE_TO_XY_IDLE_POSITION_EXTRUDER\nG28 Z I140 J140\n\n;===== 检测钢板 =================\nDETECT_BED_PLATE\n\n;===== 深度清洁喷嘴 =================\nG90\nG0 Z5 F10000\nMOVE_TO_DISCARD_FILAMENT_POSITION\nM109 S{nozzle_temperature[initial_extruder] - 50}\nROUGHLY_CLEAN_NOZZLE\nMOVE_TO_XY_IDLE_POSITION_EXTRUDER\nFINELY_CLEAN_NOZZLE_STAGE_1\nM104 S{nozzle_temperature[initial_extruder] - 90}\nG0 Z5 F10000\nMOVE_TO_DISCARD_FILAMENT_POSITION\nROUGHLY_CLEAN_NOZZLE\nMOVE_TO_XY_IDLE_POSITION_EXTRUDER\nFINELY_CLEAN_NOZZLE_STAGE_2\n\n;===== 精回零 =================\nM106 S255\nM109 S{nozzle_temperature[initial_extruder] - 90}\nM190 S{bed_temperature_initial_layer_single}\nM107 P2\nG90\nG0 Z5 F10000\nWAIT_CHAMBER_TEMP TIMEOUT=180\n{if curr_bed_type==\"High Temp Plate\"} \nG28 Z Z_OFFSET -0.07 \n{else} \nG28 Z \n{endif} \n\n\n;===== 热床调平 =================\n{if curr_bed_type==\"High Temp Plate\"} \n; Always pass `ADAPTIVE_MARGIN=0` because Orca has already handled `adaptive_bed_mesh_margin` internally\n; Make sure to set ADAPTIVE to 0 otherwise Klipper will use it's own adaptive bed mesh logic\nBED_MESH_CALIBRATE mesh_min={adaptive_bed_mesh_min[0]},{adaptive_bed_mesh_min[1]} mesh_max={adaptive_bed_mesh_max[0]},{adaptive_bed_mesh_max[1]} ALGORITHM=[bed_mesh_algo] PROBE_COUNT={bed_mesh_probe_count[0]},{bed_mesh_probe_count[1]} ADAPTIVE=0 ADAPTIVE_MARGIN=0 Z_OFFSET=-0.07\n{else} \n; Always pass `ADAPTIVE_MARGIN=0` because Orca has already handled `adaptive_bed_mesh_margin` internally\n; Make sure to set ADAPTIVE to 0 otherwise Klipper will use it's own adaptive bed mesh logic\nBED_MESH_CALIBRATE mesh_min={adaptive_bed_mesh_min[0]},{adaptive_bed_mesh_min[1]} mesh_max={adaptive_bed_mesh_max[0]},{adaptive_bed_mesh_max[1]} ALGORITHM=[bed_mesh_algo] PROBE_COUNT={bed_mesh_probe_count[0]},{bed_mesh_probe_count[1]} ADAPTIVE=0 ADAPTIVE_MARGIN=0\n{endif} \n\n\n;===== 画起始线 =================\nG90\nG1 Z1.5\nG0 X85 Y1 Z2 F18000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG1 Z0.2\nM83\nG1 X185 E15 F360\nG1 Z1.5\n\nG90\nM106 S0", + "machine_tool_change_time": "5", "max_layer_height": [ "0.56", "0.56", @@ -26,5 +67,126 @@ "0.8", "0.8" ], - "nozzle_type": "hardened_steel" + "nozzle_type": "hardened_steel", + "printable_area": [ + "0.5x1", + "270.5x1", + "270.5x271", + "0.5x271" + ], + "printable_height": "270.05", + "retract_before_wipe": [ + "0%", + "0%", + "0%", + "0%" + ], + "retract_length_toolchange": [ + "10", + "10", + "10", + "10" + ], + "retract_lift_above": [ + "0", + "0", + "0", + "0" + ], + "retract_lift_below": [ + "269", + "269", + "269", + "269" + ], + "retract_lift_enforce": [ + "All Surfaces", + "All Surfaces", + "All Surfaces", + "All Surfaces" + ], + "retract_restart_extra": [ + "0", + "0", + "0", + "0" + ], + "retract_restart_extra_toolchange": [ + "0", + "0", + "0", + "0" + ], + "retract_when_changing_layer": [ + "1", + "1", + "1", + "1" + ], + "retraction_distances_when_cut": [ + "18", + "18", + "18", + "18" + ], + "retraction_length": [ + "1.5", + "1.5", + "1.5", + "1.5" + ], + "retraction_minimum_travel": [ + "1", + "1", + "1", + "1" + ], + "retraction_speed": [ + "30", + "30", + "30", + "30" + ], + "thumbnails": "48x48/PNG, 300x300/PNG", + "travel_slope": [ + "3", + "3", + "3", + "3" + ], + "wipe": [ + "1", + "1", + "1", + "1" + ], + "wipe_distance": [ + "2", + "2", + "2", + "2" + ], + "z_hop": [ + "0.4", + "0.4", + "0.4", + "0.4" + ], + "z_hop_types": [ + "Auto Lift", + "Auto Lift", + "Auto Lift", + "Auto Lift" + ], + "enable_filament_ramming": "0", + "extruder_clearance_height_to_rod": "27.5", + "extruder_clearance_radius": "72.5", + "machine_load_filament_time": "0", + "machine_unload_filament_time": "0", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\nTIMELAPSE_TAKE_FRAME\nDEFECT_DETECTION_DETECT", + "machine_pause_gcode": "M600", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]\nSET_PRINT_STATS_INFO TOTAL_LAYER={total_layer_count} CURRENT_LAYER={layer_num+1}", + "nozzle_volume": "143", + "support_multi_bed_types": "0", + "default_print_profile": "0.40 Standard @Snapmaker U1 (0.8 nozzle)" } diff --git a/resources/profiles/Snapmaker/machine/fdm_U1.json b/resources/profiles/Snapmaker/machine/fdm_U1.json index 73fe5b74ef..7ee65878e6 100644 --- a/resources/profiles/Snapmaker/machine/fdm_U1.json +++ b/resources/profiles/Snapmaker/machine/fdm_U1.json @@ -176,8 +176,6 @@ "Normal Lift", "Normal Lift" ], - "bed_mesh_max": "267,267", - "bed_mesh_min": "3,3", "purge_in_prime_tower": "0", "machine_pause_gcode": "M601", "change_filament_gcode": "", @@ -186,12 +184,14 @@ "nozzle_type": "undefine", "auxiliary_fan": "0", "default_bed_type": "Textured PEI Plate", - "printer_agent": "snapmaker", "printable_area": [ "0.5x1", "270.5x1", "270.5x271", "0.5x271" ], - "printable_height": "270.05" + "printable_height": "270.05", + "bed_mesh_min": "3,3", + "bed_mesh_max": "267,267", + "printer_agent": "snapmaker" } diff --git a/resources/profiles/Snapmaker/process/0.06 High Quality @Snapmaker U1 (0.2 nozzle).json b/resources/profiles/Snapmaker/process/0.06 High Quality @Snapmaker U1 (0.2 nozzle).json index 996b127b77..3dec06228e 100644 --- a/resources/profiles/Snapmaker/process/0.06 High Quality @Snapmaker U1 (0.2 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.06 High Quality @Snapmaker U1 (0.2 nozzle).json @@ -1,43 +1,31 @@ { - "type": "process", - "name": "0.06 High Quality @Snapmaker U1 (0.2 nozzle)", - "inherits": "fdm_process_U1_0.2_common", - "from": "system", - "instantiation": "true", - "layer_height": "0.06", - "initial_layer_print_height": "0.1", - "wall_loops": "4", - "bottom_shell_layers": "5", - "top_shell_layers": "7", - "bridge_flow": "1", - "initial_layer_speed": "40", - "initial_layer_infill_speed": "70", - "sparse_infill_speed": "100", - "top_surface_speed": "150", - "support_top_z_distance": "0.06", - "support_bottom_z_distance": "0.06", - "setting_id": "3SCofR6VrVyo3vJp", - "description": "Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer lines, lower speeds and acceleration, and the sparse infill pattern is Gyroid. So, it results in minimal layer lines and much higher printing quality, but much longer printing time.", - "default_acceleration": "4000", - "elefant_foot_compensation": "0.15", - "outer_wall_acceleration": "2000", - "outer_wall_speed": "60", - "sparse_infill_pattern": "gyroid", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", - "compatible_printers": [ - "Snapmaker U1 (0.2 nozzle)" - ], - "enable_arc_fitting": "0", - "ooze_prevention": "1", - "precise_outer_wall": "0", - "prime_tower_brim_width": "5", - "prime_tower_width": "30", - "prime_volume": "13.5", - "slowdown_for_curled_perimeters": "0", - "standby_temperature_delta": "-150", - "support_type": "tree(auto)", - "wipe_tower_extra_rib_length": "8", - "wipe_tower_extra_spacing": "120%", - "wipe_tower_wall_type": "rib" + "type": "process", + "name": "0.06 High Quality @Snapmaker U1 (0.2 nozzle)", + "inherits": "fdm_process_U1_0.06_nozzle_0.2", + "from": "system", + "setting_id": "3SCofR6VrVyo3vJp", + "instantiation": "true", + "description": "Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer lines, lower speeds and acceleration, and the sparse infill pattern is Gyroid. So, it results in minimal layer lines and much higher printing quality, but much longer printing time.", + "default_acceleration": "4000", + "elefant_foot_compensation": "0.15", + "outer_wall_acceleration": "2000", + "outer_wall_speed": "60", + "sparse_infill_pattern": "gyroid", + "smooth_coefficient": "150", + "overhang_totally_speed": "50", + "compatible_printers": [ + "Snapmaker U1 (0.2 nozzle)" + ], + "enable_arc_fitting": "0", + "ooze_prevention": "1", + "precise_outer_wall": "1", + "prime_tower_brim_width": "5", + "prime_tower_width": "30", + "prime_volume": "13.5", + "slowdown_for_curled_perimeters": "0", + "standby_temperature_delta": "-150", + "support_type": "tree(auto)", + "wipe_tower_extra_rib_length": "8", + "wipe_tower_extra_spacing": "120%", + "wipe_tower_wall_type": "rib" } diff --git a/resources/profiles/Snapmaker/process/0.06 Standard @Snapmaker U1 (0.2 nozzle).json b/resources/profiles/Snapmaker/process/0.06 Standard @Snapmaker U1 (0.2 nozzle).json index 85e50ec87f..7c80e048f6 100644 --- a/resources/profiles/Snapmaker/process/0.06 Standard @Snapmaker U1 (0.2 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.06 Standard @Snapmaker U1 (0.2 nozzle).json @@ -1,39 +1,27 @@ { - "type": "process", - "name": "0.06 Standard @Snapmaker U1 (0.2 nozzle)", - "inherits": "fdm_process_U1_0.2_common", - "from": "system", - "instantiation": "true", - "layer_height": "0.06", - "initial_layer_print_height": "0.1", - "wall_loops": "4", - "bottom_shell_layers": "5", - "top_shell_layers": "7", - "bridge_flow": "1", - "initial_layer_speed": "40", - "initial_layer_infill_speed": "70", - "sparse_infill_speed": "100", - "top_surface_speed": "150", - "support_top_z_distance": "0.06", - "support_bottom_z_distance": "0.06", - "setting_id": "997RaiNHd2YhpaRB", - "description": "Compared with the default profile of 0.2 mm nozzle, it has a smaller layer height, and results in minimal layer lines and higher printing quality, but shorter printing time.", - "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", - "compatible_printers": [ - "Snapmaker U1 (0.2 nozzle)" - ], - "enable_arc_fitting": "0", - "ooze_prevention": "1", - "precise_outer_wall": "0", - "prime_tower_brim_width": "5", - "prime_tower_width": "30", - "prime_volume": "13.5", - "slowdown_for_curled_perimeters": "0", - "standby_temperature_delta": "-150", - "support_type": "tree(auto)", - "wipe_tower_extra_rib_length": "8", - "wipe_tower_extra_spacing": "120%", - "wipe_tower_wall_type": "rib" + "type": "process", + "name": "0.06 Standard @Snapmaker U1 (0.2 nozzle)", + "inherits": "fdm_process_U1_0.06_nozzle_0.2", + "from": "system", + "setting_id": "997RaiNHd2YhpaRB", + "instantiation": "true", + "description": "Compared with the default profile of 0.2 mm nozzle, it has a smaller layer height, and results in minimal layer lines and higher printing quality, but shorter printing time.", + "elefant_foot_compensation": "0.15", + "smooth_coefficient": "150", + "overhang_totally_speed": "50", + "compatible_printers": [ + "Snapmaker U1 (0.2 nozzle)" + ], + "enable_arc_fitting": "0", + "ooze_prevention": "1", + "precise_outer_wall": "1", + "prime_tower_brim_width": "5", + "prime_tower_width": "30", + "prime_volume": "13.5", + "slowdown_for_curled_perimeters": "0", + "standby_temperature_delta": "-150", + "support_type": "tree(auto)", + "wipe_tower_extra_rib_length": "8", + "wipe_tower_extra_spacing": "120%", + "wipe_tower_wall_type": "rib" } diff --git a/resources/profiles/Snapmaker/process/0.08 Extra Fine @Snapmaker U1 (0.4 nozzle).json b/resources/profiles/Snapmaker/process/0.08 Extra Fine @Snapmaker U1 (0.4 nozzle).json index aeffe99f2a..b8a8e126aa 100644 --- a/resources/profiles/Snapmaker/process/0.08 Extra Fine @Snapmaker U1 (0.4 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.08 Extra Fine @Snapmaker U1 (0.4 nozzle).json @@ -12,6 +12,19 @@ "Snapmaker U1 (0.4 nozzle)" ], "ooze_prevention": "1", + "prime_tower_width": "30", + "prime_volume": "18", "slowdown_for_curled_perimeters": "0", - "standby_temperature_delta": "-150" + "standby_temperature_delta": "-150", + "wipe_tower_filament": "0", + "prime_tower_brim_width": "5", + "wipe_tower_cone_angle": "15", + "wipe_tower_extra_spacing": "120%", + "enable_arc_fitting": "0", + "outer_wall_speed": "100", + "precise_outer_wall": "1", + "support_type": "tree(auto)", + "wipe_tower_extra_rib_length": "8", + "wipe_tower_wall_type": "rib", + "gap_fill_target": "topbottom" } diff --git a/resources/profiles/Snapmaker/process/0.08 High Quality @Snapmaker U1 (0.2 nozzle).json b/resources/profiles/Snapmaker/process/0.08 High Quality @Snapmaker U1 (0.2 nozzle).json index fe0fc0e87d..27d3903f06 100644 --- a/resources/profiles/Snapmaker/process/0.08 High Quality @Snapmaker U1 (0.2 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.08 High Quality @Snapmaker U1 (0.2 nozzle).json @@ -1,43 +1,31 @@ { - "type": "process", - "name": "0.08 High Quality @Snapmaker U1 (0.2 nozzle)", - "inherits": "fdm_process_U1_0.2_common", - "from": "system", - "instantiation": "true", - "layer_height": "0.08", - "initial_layer_print_height": "0.1", - "wall_loops": "4", - "bottom_shell_layers": "5", - "top_shell_layers": "7", - "bridge_flow": "1", - "initial_layer_speed": "40", - "initial_layer_infill_speed": "70", - "sparse_infill_speed": "100", - "top_surface_speed": "150", - "support_top_z_distance": "0.08", - "support_bottom_z_distance": "0.08", - "setting_id": "6ExpMU3Wq4J1R7wy", - "description": "Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer lines, lower speeds and acceleration, and the sparse infill pattern is Gyroid. So, it results in almost invisible layer lines and much higher printing quality, but much longer printing time.", - "default_acceleration": "4000", - "elefant_foot_compensation": "0.15", - "outer_wall_acceleration": "2000", - "outer_wall_speed": "60", - "sparse_infill_pattern": "gyroid", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", - "compatible_printers": [ - "Snapmaker U1 (0.2 nozzle)" - ], - "enable_arc_fitting": "0", - "ooze_prevention": "1", - "precise_outer_wall": "0", - "prime_tower_brim_width": "5", - "prime_tower_width": "30", - "prime_volume": "18", - "slowdown_for_curled_perimeters": "0", - "standby_temperature_delta": "-150", - "support_type": "tree(auto)", - "wipe_tower_extra_rib_length": "8", - "wipe_tower_extra_spacing": "120%", - "wipe_tower_wall_type": "rib" + "type": "process", + "name": "0.08 High Quality @Snapmaker U1 (0.2 nozzle)", + "inherits": "fdm_process_U1_0.08_nozzle_0.2", + "from": "system", + "setting_id": "6ExpMU3Wq4J1R7wy", + "instantiation": "true", + "description": "Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer lines, lower speeds and acceleration, and the sparse infill pattern is Gyroid. So, it results in almost invisible layer lines and much higher printing quality, but much longer printing time.", + "default_acceleration": "4000", + "elefant_foot_compensation": "0.15", + "outer_wall_acceleration": "2000", + "outer_wall_speed": "60", + "sparse_infill_pattern": "gyroid", + "smooth_coefficient": "150", + "overhang_totally_speed": "50", + "compatible_printers": [ + "Snapmaker U1 (0.2 nozzle)" + ], + "enable_arc_fitting": "0", + "ooze_prevention": "1", + "precise_outer_wall": "1", + "prime_tower_brim_width": "5", + "prime_tower_width": "30", + "prime_volume": "18", + "slowdown_for_curled_perimeters": "0", + "standby_temperature_delta": "-150", + "support_type": "tree(auto)", + "wipe_tower_extra_rib_length": "8", + "wipe_tower_extra_spacing": "120%", + "wipe_tower_wall_type": "rib" } diff --git a/resources/profiles/Snapmaker/process/0.08 High Quality @Snapmaker U1 (0.4 nozzle).json b/resources/profiles/Snapmaker/process/0.08 High Quality @Snapmaker U1 (0.4 nozzle).json index b86156d841..677e6742d9 100644 --- a/resources/profiles/Snapmaker/process/0.08 High Quality @Snapmaker U1 (0.4 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.08 High Quality @Snapmaker U1 (0.4 nozzle).json @@ -21,6 +21,18 @@ "Snapmaker U1 (0.4 nozzle)" ], "ooze_prevention": "1", + "prime_tower_width": "30", + "prime_volume": "18", "slowdown_for_curled_perimeters": "0", - "standby_temperature_delta": "-150" + "standby_temperature_delta": "-150", + "wipe_tower_filament": "0", + "prime_tower_brim_width": "5", + "wipe_tower_cone_angle": "15", + "wipe_tower_extra_spacing": "120%", + "enable_arc_fitting": "0", + "precise_outer_wall": "1", + "support_type": "tree(auto)", + "wipe_tower_extra_rib_length": "8", + "wipe_tower_wall_type": "rib", + "gap_fill_target": "topbottom" } diff --git a/resources/profiles/Snapmaker/process/0.08 Standard @Snapmaker U1 (0.2 nozzle).json b/resources/profiles/Snapmaker/process/0.08 Standard @Snapmaker U1 (0.2 nozzle).json index 472176ff40..b4728bd60f 100644 --- a/resources/profiles/Snapmaker/process/0.08 Standard @Snapmaker U1 (0.2 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.08 Standard @Snapmaker U1 (0.2 nozzle).json @@ -1,39 +1,27 @@ { - "type": "process", - "name": "0.08 Standard @Snapmaker U1 (0.2 nozzle)", - "inherits": "fdm_process_U1_0.2_common", - "from": "system", - "instantiation": "true", - "layer_height": "0.08", - "initial_layer_print_height": "0.1", - "wall_loops": "4", - "bottom_shell_layers": "5", - "top_shell_layers": "7", - "bridge_flow": "1", - "initial_layer_speed": "40", - "initial_layer_infill_speed": "70", - "sparse_infill_speed": "100", - "top_surface_speed": "150", - "support_top_z_distance": "0.08", - "support_bottom_z_distance": "0.08", - "setting_id": "loFrCYH9ux2L5JpZ", - "description": "Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer height, and results in almost invisible layer lines and higher printing quality, but shorter printing time.", - "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", - "compatible_printers": [ - "Snapmaker U1 (0.2 nozzle)" - ], - "enable_arc_fitting": "0", - "ooze_prevention": "1", - "precise_outer_wall": "0", - "prime_tower_brim_width": "5", - "prime_tower_width": "30", - "prime_volume": "18", - "slowdown_for_curled_perimeters": "0", - "standby_temperature_delta": "-150", - "support_type": "tree(auto)", - "wipe_tower_extra_rib_length": "8", - "wipe_tower_extra_spacing": "120%", - "wipe_tower_wall_type": "rib" + "type": "process", + "name": "0.08 Standard @Snapmaker U1 (0.2 nozzle)", + "inherits": "fdm_process_U1_0.08_nozzle_0.2", + "from": "system", + "setting_id": "loFrCYH9ux2L5JpZ", + "instantiation": "true", + "description": "Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer height, and results in almost invisible layer lines and higher printing quality, but shorter printing time.", + "elefant_foot_compensation": "0.15", + "smooth_coefficient": "150", + "overhang_totally_speed": "50", + "compatible_printers": [ + "Snapmaker U1 (0.2 nozzle)" + ], + "enable_arc_fitting": "0", + "ooze_prevention": "1", + "precise_outer_wall": "1", + "prime_tower_brim_width": "5", + "prime_tower_width": "30", + "prime_volume": "18", + "slowdown_for_curled_perimeters": "0", + "standby_temperature_delta": "-150", + "support_type": "tree(auto)", + "wipe_tower_extra_rib_length": "8", + "wipe_tower_extra_spacing": "120%", + "wipe_tower_wall_type": "rib" } diff --git a/resources/profiles/Snapmaker/process/0.10 High Quality @Snapmaker U1 (0.2 nozzle).json b/resources/profiles/Snapmaker/process/0.10 High Quality @Snapmaker U1 (0.2 nozzle).json index 0f15ce7c5f..80b2120807 100644 --- a/resources/profiles/Snapmaker/process/0.10 High Quality @Snapmaker U1 (0.2 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.10 High Quality @Snapmaker U1 (0.2 nozzle).json @@ -1,43 +1,31 @@ { - "type": "process", - "name": "0.10 High Quality @Snapmaker U1 (0.2 nozzle)", - "inherits": "fdm_process_U1_0.2_common", - "from": "system", - "instantiation": "true", - "layer_height": "0.1", - "initial_layer_print_height": "0.1", - "wall_loops": "4", - "bottom_shell_layers": "5", - "top_shell_layers": "7", - "bridge_flow": "1", - "initial_layer_speed": "40", - "initial_layer_infill_speed": "70", - "sparse_infill_speed": "100", - "top_surface_speed": "150", - "support_top_z_distance": "0.1", - "support_bottom_z_distance": "0.1", - "setting_id": "BfLpmnJnSBYBFInR", - "description": "Compared with the default profile of a 0.2 mm nozzle, it has lower speeds and acceleration, and the sparse infill pattern is Gyroid. So, it results in much higher printing quality, but a much longer printing time.", - "default_acceleration": "4000", - "elefant_foot_compensation": "0.15", - "outer_wall_acceleration": "2000", - "outer_wall_speed": "60", - "sparse_infill_pattern": "gyroid", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", - "compatible_printers": [ - "Snapmaker U1 (0.2 nozzle)" - ], - "enable_arc_fitting": "0", - "ooze_prevention": "1", - "precise_outer_wall": "0", - "prime_tower_brim_width": "5", - "prime_tower_width": "28", - "prime_volume": "25", - "slowdown_for_curled_perimeters": "0", - "standby_temperature_delta": "-150", - "support_type": "tree(auto)", - "wipe_tower_extra_rib_length": "8", - "wipe_tower_extra_spacing": "120%", - "wipe_tower_wall_type": "rib" + "type": "process", + "name": "0.10 High Quality @Snapmaker U1 (0.2 nozzle)", + "inherits": "fdm_process_U1_0.10_nozzle_0.2", + "from": "system", + "setting_id": "BfLpmnJnSBYBFInR", + "instantiation": "true", + "description": "Compared with the default profile of a 0.2 mm nozzle, it has lower speeds and acceleration, and the sparse infill pattern is Gyroid. So, it results in much higher printing quality, but a much longer printing time.", + "default_acceleration": "4000", + "elefant_foot_compensation": "0.15", + "outer_wall_acceleration": "2000", + "outer_wall_speed": "60", + "sparse_infill_pattern": "gyroid", + "smooth_coefficient": "150", + "overhang_totally_speed": "50", + "compatible_printers": [ + "Snapmaker U1 (0.2 nozzle)" + ], + "enable_arc_fitting": "0", + "ooze_prevention": "1", + "precise_outer_wall": "1", + "prime_tower_brim_width": "5", + "prime_tower_width": "28", + "prime_volume": "25", + "slowdown_for_curled_perimeters": "0", + "standby_temperature_delta": "-150", + "support_type": "tree(auto)", + "wipe_tower_extra_rib_length": "8", + "wipe_tower_extra_spacing": "120%", + "wipe_tower_wall_type": "rib" } diff --git a/resources/profiles/Snapmaker/process/0.10 Standard @Snapmaker U1 (0.2 nozzle).json b/resources/profiles/Snapmaker/process/0.10 Standard @Snapmaker U1 (0.2 nozzle).json index 460bf8b6fd..80739205ac 100644 --- a/resources/profiles/Snapmaker/process/0.10 Standard @Snapmaker U1 (0.2 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.10 Standard @Snapmaker U1 (0.2 nozzle).json @@ -1,41 +1,29 @@ { - "type": "process", - "name": "0.10 Standard @Snapmaker U1 (0.2 nozzle)", - "inherits": "fdm_process_U1_0.2_common", - "from": "system", - "instantiation": "true", - "layer_height": "0.1", - "initial_layer_print_height": "0.1", - "wall_loops": "4", - "bottom_shell_layers": "5", - "top_shell_layers": "7", - "bridge_flow": "1", - "initial_layer_speed": "40", - "initial_layer_infill_speed": "70", - "sparse_infill_speed": "100", - "top_surface_speed": "150", - "support_top_z_distance": "0.1", - "support_bottom_z_distance": "0.1", - "setting_id": "SOq962UWv1ml1Mk0", - "description": "It has a small layer height, and results in almost negligible layer lines and high printing quality. It is suitable for most general printing cases.", - "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", - "compatible_printers": [ - "Snapmaker U1 (0.2 nozzle)" - ], - "enable_arc_fitting": "0", - "ooze_prevention": "1", - "precise_outer_wall": "0", - "preheat_time": "31", - "prime_tower_brim_width": "6", - "prime_tower_width": "28", - "prime_volume": "25", - "standby_temperature_delta": "-150", - "support_threshold_angle": "35", - "support_type": "tree(auto)", - "wipe_tower_extra_rib_length": "8", - "wipe_tower_extra_spacing": "120%", - "wipe_tower_wall_type": "rib", - "slowdown_for_curled_perimeters": "0" + "type": "process", + "name": "0.10 Standard @Snapmaker U1 (0.2 nozzle)", + "inherits": "fdm_process_U1_0.10_nozzle_0.2", + "from": "system", + "setting_id": "SOq962UWv1ml1Mk0", + "instantiation": "true", + "description": "It has a small layer height, and results in almost negligible layer lines and high printing quality. It is suitable for most general printing cases.", + "elefant_foot_compensation": "0.15", + "smooth_coefficient": "150", + "overhang_totally_speed": "50", + "compatible_printers": [ + "Snapmaker U1 (0.2 nozzle)" + ], + "enable_arc_fitting": "0", + "ooze_prevention": "1", + "precise_outer_wall": "1", + "preheat_time": "31", + "prime_tower_brim_width": "6", + "prime_tower_width": "28", + "prime_volume": "25", + "standby_temperature_delta": "-150", + "support_threshold_angle": "35", + "support_type": "tree(auto)", + "wipe_tower_extra_rib_length": "8", + "wipe_tower_extra_spacing": "120%", + "wipe_tower_wall_type": "rib", + "slowdown_for_curled_perimeters": "0" } diff --git a/resources/profiles/Snapmaker/process/0.12 Fine @Snapmaker U1 (0.4 nozzle).json b/resources/profiles/Snapmaker/process/0.12 Fine @Snapmaker U1 (0.4 nozzle).json index 42823b3f0b..2da54a6dc3 100644 --- a/resources/profiles/Snapmaker/process/0.12 Fine @Snapmaker U1 (0.4 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.12 Fine @Snapmaker U1 (0.4 nozzle).json @@ -13,5 +13,18 @@ ], "ooze_prevention": "1", "slowdown_for_curled_perimeters": "0", - "standby_temperature_delta": "-150" + "standby_temperature_delta": "-150", + "wipe_tower_filament": "0", + "prime_tower_brim_width": "5", + "prime_tower_width": "30", + "prime_volume": "27", + "wipe_tower_cone_angle": "15", + "wipe_tower_extra_spacing": "120%", + "enable_arc_fitting": "0", + "precise_outer_wall": "1", + "support_threshold_angle": "25", + "support_type": "tree(auto)", + "wipe_tower_extra_rib_length": "8", + "wipe_tower_wall_type": "rib", + "gap_fill_target": "topbottom" } diff --git a/resources/profiles/Snapmaker/process/0.12 High Quality @Snapmaker U1 (0.4 nozzle).json b/resources/profiles/Snapmaker/process/0.12 High Quality @Snapmaker U1 (0.4 nozzle).json index 8564a41b24..9302a40421 100644 --- a/resources/profiles/Snapmaker/process/0.12 High Quality @Snapmaker U1 (0.4 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.12 High Quality @Snapmaker U1 (0.4 nozzle).json @@ -20,5 +20,20 @@ "compatible_printers": [ "Snapmaker U1 (0.4 nozzle)" ], - "slowdown_for_curled_perimeters": "0" + "prime_tower_width": "30", + "prime_volume": "27", + "slowdown_for_curled_perimeters": "0", + "wipe_tower_filament": "0", + "prime_tower_brim_width": "5", + "wipe_tower_cone_angle": "15", + "wipe_tower_extra_spacing": "120%", + "enable_arc_fitting": "0", + "ooze_prevention": "1", + "precise_outer_wall": "1", + "standby_temperature_delta": "-150", + "support_threshold_angle": "25", + "support_type": "tree(auto)", + "wipe_tower_extra_rib_length": "8", + "wipe_tower_wall_type": "rib", + "gap_fill_target": "topbottom" } diff --git a/resources/profiles/Snapmaker/process/0.12 Standard @Snapmaker U1 (0.2 nozzle).json b/resources/profiles/Snapmaker/process/0.12 Standard @Snapmaker U1 (0.2 nozzle).json index de68cc0dd0..cc93a97e99 100644 --- a/resources/profiles/Snapmaker/process/0.12 Standard @Snapmaker U1 (0.2 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.12 Standard @Snapmaker U1 (0.2 nozzle).json @@ -1,39 +1,27 @@ { - "type": "process", - "name": "0.12 Standard @Snapmaker U1 (0.2 nozzle)", - "inherits": "fdm_process_U1_0.2_common", - "from": "system", - "instantiation": "true", - "layer_height": "0.12", - "initial_layer_print_height": "0.1", - "wall_loops": "4", - "bottom_shell_layers": "5", - "top_shell_layers": "7", - "bridge_flow": "1", - "initial_layer_speed": "40", - "initial_layer_infill_speed": "70", - "sparse_infill_speed": "100", - "top_surface_speed": "150", - "support_top_z_distance": "0.12", - "support_bottom_z_distance": "0.12", - "setting_id": "KHC1zpxpuvaUEzvf", - "description": "Compared with the default profile of a 0.2 mm nozzle, it has a slightly bigger layer height, and results in almost negligible layer lines, and slightly shorter printing time.", - "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", - "compatible_printers": [ - "Snapmaker U1 (0.2 nozzle)" - ], - "enable_arc_fitting": "0", - "ooze_prevention": "1", - "precise_outer_wall": "0", - "prime_tower_brim_width": "5", - "prime_tower_width": "28", - "prime_volume": "27", - "slowdown_for_curled_perimeters": "0", - "standby_temperature_delta": "-150", - "support_type": "tree(auto)", - "wipe_tower_extra_rib_length": "8", - "wipe_tower_extra_spacing": "120%", - "wipe_tower_wall_type": "rib" + "type": "process", + "name": "0.12 Standard @Snapmaker U1 (0.2 nozzle)", + "inherits": "fdm_process_U1_0.12_nozzle_0.2", + "from": "system", + "setting_id": "KHC1zpxpuvaUEzvf", + "instantiation": "true", + "description": "Compared with the default profile of a 0.2 mm nozzle, it has a slightly bigger layer height, and results in almost negligible layer lines, and slightly shorter printing time.", + "elefant_foot_compensation": "0.15", + "smooth_coefficient": "150", + "overhang_totally_speed": "50", + "compatible_printers": [ + "Snapmaker U1 (0.2 nozzle)" + ], + "enable_arc_fitting": "0", + "ooze_prevention": "1", + "precise_outer_wall": "1", + "prime_tower_brim_width": "5", + "prime_tower_width": "28", + "prime_volume": "27", + "slowdown_for_curled_perimeters": "0", + "standby_temperature_delta": "-150", + "support_type": "tree(auto)", + "wipe_tower_extra_rib_length": "8", + "wipe_tower_extra_spacing": "120%", + "wipe_tower_wall_type": "rib" } diff --git a/resources/profiles/Snapmaker/process/0.14 Standard @Snapmaker U1 (0.2 nozzle).json b/resources/profiles/Snapmaker/process/0.14 Standard @Snapmaker U1 (0.2 nozzle).json index c265d55e67..54513eb14b 100644 --- a/resources/profiles/Snapmaker/process/0.14 Standard @Snapmaker U1 (0.2 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.14 Standard @Snapmaker U1 (0.2 nozzle).json @@ -1,39 +1,27 @@ { - "type": "process", - "name": "0.14 Standard @Snapmaker U1 (0.2 nozzle)", - "inherits": "fdm_process_U1_0.2_common", - "from": "system", - "instantiation": "true", - "layer_height": "0.14", - "initial_layer_print_height": "0.1", - "wall_loops": "4", - "bottom_shell_layers": "5", - "top_shell_layers": "7", - "bridge_flow": "1", - "initial_layer_speed": "40", - "initial_layer_infill_speed": "70", - "sparse_infill_speed": "100", - "top_surface_speed": "150", - "support_top_z_distance": "0.14", - "support_bottom_z_distance": "0.14", - "setting_id": "NGJoV0n6T510y9wM", - "description": "Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer height, and results in slightly visible layer lines, but shorter printing time.", - "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", - "compatible_printers": [ - "Snapmaker U1 (0.2 nozzle)" - ], - "enable_arc_fitting": "0", - "ooze_prevention": "1", - "precise_outer_wall": "0", - "prime_tower_brim_width": "5", - "prime_tower_width": "30", - "prime_volume": "32", - "slowdown_for_curled_perimeters": "0", - "standby_temperature_delta": "-150", - "support_type": "tree(auto)", - "wipe_tower_extra_rib_length": "8", - "wipe_tower_extra_spacing": "120%", - "wipe_tower_wall_type": "rib" + "type": "process", + "name": "0.14 Standard @Snapmaker U1 (0.2 nozzle)", + "inherits": "fdm_process_U1_0.14_nozzle_0.2", + "from": "system", + "setting_id": "NGJoV0n6T510y9wM", + "instantiation": "true", + "description": "Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer height, and results in slightly visible layer lines, but shorter printing time.", + "elefant_foot_compensation": "0.15", + "smooth_coefficient": "150", + "overhang_totally_speed": "50", + "compatible_printers": [ + "Snapmaker U1 (0.2 nozzle)" + ], + "enable_arc_fitting": "0", + "ooze_prevention": "1", + "precise_outer_wall": "1", + "prime_tower_brim_width": "5", + "prime_tower_width": "30", + "prime_volume": "32", + "slowdown_for_curled_perimeters": "0", + "standby_temperature_delta": "-150", + "support_type": "tree(auto)", + "wipe_tower_extra_rib_length": "8", + "wipe_tower_extra_spacing": "120%", + "wipe_tower_wall_type": "rib" } diff --git a/resources/profiles/Snapmaker/process/0.16 High Quality @Snapmaker U1 (0.4 nozzle).json b/resources/profiles/Snapmaker/process/0.16 High Quality @Snapmaker U1 (0.4 nozzle).json index e66f9f3beb..416d85881c 100644 --- a/resources/profiles/Snapmaker/process/0.16 High Quality @Snapmaker U1 (0.4 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.16 High Quality @Snapmaker U1 (0.4 nozzle).json @@ -21,6 +21,19 @@ "Snapmaker U1 (0.4 nozzle)" ], "ooze_prevention": "1", + "prime_tower_width": "30", + "prime_volume": "36", "slowdown_for_curled_perimeters": "0", - "standby_temperature_delta": "-150" + "standby_temperature_delta": "-150", + "wipe_tower_filament": "0", + "prime_tower_brim_width": "5", + "wipe_tower_cone_angle": "15", + "wipe_tower_extra_spacing": "120%", + "enable_arc_fitting": "0", + "precise_outer_wall": "1", + "support_threshold_angle": "30", + "support_type": "tree(auto)", + "wipe_tower_extra_rib_length": "8", + "wipe_tower_wall_type": "rib", + "gap_fill_target": "topbottom" } diff --git a/resources/profiles/Snapmaker/process/0.16 Optimal @Snapmaker U1 (0.4 nozzle).json b/resources/profiles/Snapmaker/process/0.16 Optimal @Snapmaker U1 (0.4 nozzle).json index 2817871fad..6871a3e120 100644 --- a/resources/profiles/Snapmaker/process/0.16 Optimal @Snapmaker U1 (0.4 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.16 Optimal @Snapmaker U1 (0.4 nozzle).json @@ -12,6 +12,18 @@ "Snapmaker U1 (0.4 nozzle)" ], "ooze_prevention": "1", + "prime_tower_width": "30", + "prime_volume": "36", "slowdown_for_curled_perimeters": "0", - "standby_temperature_delta": "-150" + "standby_temperature_delta": "-150", + "wipe_tower_filament": "0", + "prime_tower_brim_width": "5", + "wipe_tower_cone_angle": "15", + "wipe_tower_extra_spacing": "120%", + "enable_arc_fitting": "0", + "precise_outer_wall": "1", + "support_type": "tree(auto)", + "wipe_tower_extra_rib_length": "8", + "wipe_tower_wall_type": "rib", + "gap_fill_target": "topbottom" } diff --git a/resources/profiles/Snapmaker/process/0.18 Standard @Snapmaker U1 (0.6 nozzle).json b/resources/profiles/Snapmaker/process/0.18 Standard @Snapmaker U1 (0.6 nozzle).json index e68cf86d75..77b756bffc 100644 --- a/resources/profiles/Snapmaker/process/0.18 Standard @Snapmaker U1 (0.6 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.18 Standard @Snapmaker U1 (0.6 nozzle).json @@ -1,42 +1,32 @@ { - "type": "process", - "name": "0.18 Standard @Snapmaker U1 (0.6 nozzle)", - "inherits": "fdm_process_U1_0.6_common", - "from": "system", - "instantiation": "true", - "layer_height": "0.25", - "initial_layer_print_height": "0.3", - "bridge_flow": "1", - "initial_layer_speed": "35", - "initial_layer_infill_speed": "55", - "sparse_infill_speed": "100", - "top_surface_speed": "150", - "bridge_speed": "30", - "overhang_3_4_speed": "15", - "support_top_z_distance": "0.18", - "support_bottom_z_distance": "0.18", - "setting_id": "XGSrVgnsUFv6uCRs", - "description": "Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer height, and results in less apparent layer lines and higher printing quality, but longer printing time.", - "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", - "compatible_printers": [ - "Snapmaker U1 (0.6 nozzle)" - ], - "filter_out_gap_fill": "1", - "gap_fill_target": "topbottom", - "internal_bridge_speed": "100%", - "prime_tower_brim_width": "5", - "prime_tower_width": "30", - "prime_volume": "41", - "seam_gap": "15%", - "wipe_tower_extra_rib_length": "8", - "wipe_tower_extra_spacing": "120%", - "wipe_tower_wall_type": "rib", - "enable_arc_fitting": "0", - "ooze_prevention": "1", - "precise_outer_wall": "0", - "slowdown_for_curled_perimeters": "0", - "standby_temperature_delta": "-150", - "support_type": "tree(auto)" + "type": "process", + "name": "0.18 Standard @Snapmaker U1 (0.6 nozzle)", + "inherits": "fdm_process_U1_0.18_nozzle_0.6", + "from": "system", + "setting_id": "XGSrVgnsUFv6uCRs", + "instantiation": "true", + "description": "Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer height, and results in less apparent layer lines and higher printing quality, but longer printing time.", + "elefant_foot_compensation": "0.15", + "smooth_coefficient": "150", + "overhang_totally_speed": "50", + "compatible_printers": [ + "Snapmaker U1 (0.6 nozzle)" + ], + "filter_out_gap_fill": "1", + "gap_fill_target": "topbottom", + "internal_bridge_speed": "100%", + "layer_height": "0.25", + "prime_tower_brim_width": "5", + "prime_tower_width": "30", + "prime_volume": "41", + "seam_gap": "15%", + "wipe_tower_extra_rib_length": "8", + "wipe_tower_extra_spacing": "120%", + "wipe_tower_wall_type": "rib", + "enable_arc_fitting": "0", + "ooze_prevention": "1", + "precise_outer_wall": "1", + "slowdown_for_curled_perimeters": "0", + "standby_temperature_delta": "-150", + "support_type": "tree(auto)" } diff --git a/resources/profiles/Snapmaker/process/0.20 Bambu Support W @Snapmaker U1 (0.4 nozzle).json b/resources/profiles/Snapmaker/process/0.20 Bambu Support W @Snapmaker U1 (0.4 nozzle).json deleted file mode 100644 index 5de608c68d..0000000000 --- a/resources/profiles/Snapmaker/process/0.20 Bambu Support W @Snapmaker U1 (0.4 nozzle).json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "process", - "name": "0.20 Bambu Support W @Snapmaker U1 (0.4 nozzle)", - "inherits": "fdm_process_U1_0.20", - "from": "system", - "setting_id": "8OkVMuElKExBdftG", - "instantiation": "true", - "enable_support": "1", - "support_interface_top_layers": "3", - "support_top_z_distance": "0.2", - "support_interface_loop_pattern": "1", - "support_interface_spacing": "0", - "support_interface_speed": "80", - "support_filament": "0", - "support_interface_filament": "0", - "enable_prime_tower": "1", - "compatible_printers": [ - "Snapmaker U1 (0.4 nozzle)" - ], - "ooze_prevention": "1", - "slowdown_for_curled_perimeters": "0", - "standby_temperature_delta": "-150" -} diff --git a/resources/profiles/Snapmaker/process/0.20 Quality @Snapmaker U1 (0.4 nozzle).json b/resources/profiles/Snapmaker/process/0.20 Quality @Snapmaker U1 (0.4 nozzle).json index ac7fc102bc..da92006d49 100644 --- a/resources/profiles/Snapmaker/process/0.20 Quality @Snapmaker U1 (0.4 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.20 Quality @Snapmaker U1 (0.4 nozzle).json @@ -12,6 +12,7 @@ "Snapmaker U1 (0.4 nozzle)" ], "ooze_prevention": "1", + "prime_tower_width": "30", "slowdown_for_curled_perimeters": "0", "standby_temperature_delta": "-150", "wipe_tower_filament": "0", diff --git a/resources/profiles/Snapmaker/process/0.20 Standard @Snapmaker U1 (0.4 nozzle).json b/resources/profiles/Snapmaker/process/0.20 Standard @Snapmaker U1 (0.4 nozzle).json index 243718507b..5d873d5efd 100644 --- a/resources/profiles/Snapmaker/process/0.20 Standard @Snapmaker U1 (0.4 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.20 Standard @Snapmaker U1 (0.4 nozzle).json @@ -12,6 +12,8 @@ "Snapmaker U1 (0.4 nozzle)" ], "ooze_prevention": "1", + "prime_tower_width": "30", + "prime_volume": "45", "slowdown_for_curled_perimeters": "0", "standby_temperature_delta": "-150", "wipe_tower_filament": "0", diff --git a/resources/profiles/Snapmaker/process/0.20 Standard @Snapmaker U1 (0.4+0.6 nozzle).json b/resources/profiles/Snapmaker/process/0.20 Standard @Snapmaker U1 (0.4+0.6 nozzle).json index 52e1aa9349..63bb6ea170 100644 --- a/resources/profiles/Snapmaker/process/0.20 Standard @Snapmaker U1 (0.4+0.6 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.20 Standard @Snapmaker U1 (0.4+0.6 nozzle).json @@ -20,6 +20,7 @@ "smooth_coefficient": "150", "overhang_totally_speed": "50", "ooze_prevention": "1", + "prime_tower_width": "30", "slowdown_for_curled_perimeters": "0", "standby_temperature_delta": "-150", "wipe_tower_filament": "0", diff --git a/resources/profiles/Snapmaker/process/0.20 Standard @Snapmaker U1 (0.6 nozzle).json b/resources/profiles/Snapmaker/process/0.20 Standard @Snapmaker U1 (0.6 nozzle).json index f5ab699928..d1bb174a62 100644 --- a/resources/profiles/Snapmaker/process/0.20 Standard @Snapmaker U1 (0.6 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.20 Standard @Snapmaker U1 (0.6 nozzle).json @@ -13,6 +13,7 @@ "Snapmaker U1 (0.6 nozzle)" ], "ooze_prevention": "1", + "prime_tower_width": "30", "slowdown_for_curled_perimeters": "0", "standby_temperature_delta": "-150", "wipe_tower_filament": "0", diff --git a/resources/profiles/Snapmaker/process/0.20 Strength @Snapmaker U1 (0.4 nozzle).json b/resources/profiles/Snapmaker/process/0.20 Strength @Snapmaker U1 (0.4 nozzle).json index 4defa45a16..91c5995b92 100644 --- a/resources/profiles/Snapmaker/process/0.20 Strength @Snapmaker U1 (0.4 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.20 Strength @Snapmaker U1 (0.4 nozzle).json @@ -15,6 +15,18 @@ "Snapmaker U1 (0.4 nozzle)" ], "ooze_prevention": "1", + "prime_tower_width": "30", + "prime_volume": "45", "slowdown_for_curled_perimeters": "0", - "standby_temperature_delta": "-150" + "standby_temperature_delta": "-150", + "wipe_tower_filament": "0", + "prime_tower_brim_width": "5", + "wipe_tower_cone_angle": "15", + "wipe_tower_extra_spacing": "120%", + "enable_arc_fitting": "0", + "precise_outer_wall": "1", + "support_type": "tree(auto)", + "wipe_tower_extra_rib_length": "8", + "wipe_tower_wall_type": "rib", + "gap_fill_target": "topbottom" } diff --git a/resources/profiles/Snapmaker/process/0.20 Support @Snapmaker U1 (0.4 nozzle).json b/resources/profiles/Snapmaker/process/0.20 Support @Snapmaker U1 (0.4 nozzle).json index 36a3172b48..0cb85cc26d 100644 --- a/resources/profiles/Snapmaker/process/0.20 Support @Snapmaker U1 (0.4 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.20 Support @Snapmaker U1 (0.4 nozzle).json @@ -12,6 +12,8 @@ "Snapmaker U1 (0.4 nozzle)" ], "ooze_prevention": "1", + "prime_tower_width": "40", + "prime_volume": "15", "slowdown_for_curled_perimeters": "0", "standby_temperature_delta": "-150", "wipe_tower_filament": "0", diff --git a/resources/profiles/Snapmaker/process/0.20 Support W @Snapmaker U1 (0.4 nozzle).json b/resources/profiles/Snapmaker/process/0.20 Support W @Snapmaker U1 (0.4 nozzle).json index 37ba596b63..3d1887bea9 100644 --- a/resources/profiles/Snapmaker/process/0.20 Support W @Snapmaker U1 (0.4 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.20 Support W @Snapmaker U1 (0.4 nozzle).json @@ -18,6 +18,8 @@ "Snapmaker U1 (0.4 nozzle)" ], "ooze_prevention": "1", + "prime_tower_width": "50", + "prime_volume": "38", "slowdown_for_curled_perimeters": "0", "standby_temperature_delta": "-150" } diff --git a/resources/profiles/Snapmaker/process/0.24 Draft @Snapmaker U1 (0.4 nozzle).json b/resources/profiles/Snapmaker/process/0.24 Draft @Snapmaker U1 (0.4 nozzle).json index a4c10a8ad1..f98007b6e1 100644 --- a/resources/profiles/Snapmaker/process/0.24 Draft @Snapmaker U1 (0.4 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.24 Draft @Snapmaker U1 (0.4 nozzle).json @@ -12,6 +12,18 @@ "Snapmaker U1 (0.4 nozzle)" ], "ooze_prevention": "1", + "prime_tower_width": "30", + "prime_volume": "54", "slowdown_for_curled_perimeters": "0", - "standby_temperature_delta": "-150" + "standby_temperature_delta": "-150", + "wipe_tower_filament": "0", + "prime_tower_brim_width": "5", + "wipe_tower_cone_angle": "15", + "wipe_tower_extra_spacing": "120%", + "enable_arc_fitting": "0", + "precise_outer_wall": "1", + "support_type": "tree(auto)", + "wipe_tower_extra_rib_length": "8", + "wipe_tower_wall_type": "rib", + "gap_fill_target": "topbottom" } diff --git a/resources/profiles/Snapmaker/process/0.24 Standard @Snapmaker U1 (0.6 nozzle).json b/resources/profiles/Snapmaker/process/0.24 Standard @Snapmaker U1 (0.6 nozzle).json index b8a8427baf..7a9f4e2154 100644 --- a/resources/profiles/Snapmaker/process/0.24 Standard @Snapmaker U1 (0.6 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.24 Standard @Snapmaker U1 (0.6 nozzle).json @@ -1,41 +1,32 @@ { - "type": "process", - "name": "0.24 Standard @Snapmaker U1 (0.6 nozzle)", - "inherits": "fdm_process_U1_0.6_common", - "from": "system", - "instantiation": "true", - "layer_height": "0.24", - "initial_layer_print_height": "0.3", - "bridge_flow": "1", - "initial_layer_speed": "35", - "initial_layer_infill_speed": "55", - "sparse_infill_speed": "100", - "top_surface_speed": "150", - "bridge_speed": "30", - "overhang_3_4_speed": "15", - "setting_id": "BziJYuA5U5gWm6FM", - "description": "Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer height, and results in less apparent layer lines and slight higher printing quality, but longer printing time.", - "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", - "compatible_printers": [ - "Snapmaker U1 (0.6 nozzle)" - ], - "filter_out_gap_fill": "1", - "gap_fill_target": "topbottom", - "internal_bridge_speed": "100%", - "prime_tower_brim_width": "5", - "prime_tower_width": "30", - "prime_volume": "55", - "seam_gap": "15%", - "wipe_tower_extra_rib_length": "8", - "wipe_tower_extra_spacing": "120%", - "wipe_tower_wall_type": "rib", - "enable_arc_fitting": "0", - "ooze_prevention": "1", - "precise_outer_wall": "0", - "slowdown_for_curled_perimeters": "0", - "standby_temperature_delta": "-150", - "support_threshold_angle": "35", - "support_type": "tree(auto)" + "type": "process", + "name": "0.24 Standard @Snapmaker U1 (0.6 nozzle)", + "inherits": "fdm_process_U1_0.24_nozzle_0.6", + "from": "system", + "setting_id": "BziJYuA5U5gWm6FM", + "instantiation": "true", + "description": "Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer height, and results in less apparent layer lines and slight higher printing quality, but longer printing time.", + "elefant_foot_compensation": "0.15", + "smooth_coefficient": "150", + "overhang_totally_speed": "50", + "compatible_printers": [ + "Snapmaker U1 (0.6 nozzle)" + ], + "filter_out_gap_fill": "1", + "gap_fill_target": "topbottom", + "internal_bridge_speed": "100%", + "prime_tower_brim_width": "5", + "prime_tower_width": "30", + "prime_volume": "55", + "seam_gap": "15%", + "wipe_tower_extra_rib_length": "8", + "wipe_tower_extra_spacing": "120%", + "wipe_tower_wall_type": "rib", + "enable_arc_fitting": "0", + "ooze_prevention": "1", + "precise_outer_wall": "1", + "slowdown_for_curled_perimeters": "0", + "standby_temperature_delta": "-150", + "support_threshold_angle": "35", + "support_type": "tree(auto)" } diff --git a/resources/profiles/Snapmaker/process/0.24 Standard @Snapmaker U1 (0.8 nozzle).json b/resources/profiles/Snapmaker/process/0.24 Standard @Snapmaker U1 (0.8 nozzle).json index 1b13e745d2..d9e1a2bf94 100644 --- a/resources/profiles/Snapmaker/process/0.24 Standard @Snapmaker U1 (0.8 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.24 Standard @Snapmaker U1 (0.8 nozzle).json @@ -1,43 +1,32 @@ { - "type": "process", - "name": "0.24 Standard @Snapmaker U1 (0.8 nozzle)", - "inherits": "fdm_process_U1_0.8_common", - "from": "system", - "instantiation": "true", - "layer_height": "0.24", - "initial_layer_print_height": "0.4", - "bridge_flow": "1", - "top_surface_pattern": "monotonic", - "initial_layer_speed": "35", - "initial_layer_infill_speed": "55", - "sparse_infill_speed": "100", - "top_surface_speed": "150", - "bridge_speed": "30", - "overhang_3_4_speed": "25", - "overhang_4_4_speed": "5", - "setting_id": "QcJ5p9h0eYUb91ak", - "description": "Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer height, and results in less apparent layer lines and slight higher printing quality, but longer printing time.", - "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", - "compatible_printers": [ - "Snapmaker U1 (0.8 nozzle)" - ], - "filter_out_gap_fill": "1", - "gap_fill_target": "topbottom", - "internal_bridge_speed": "100%", - "min_width_top_surface": "90", - "prime_tower_brim_width": "5", - "prime_tower_width": "30", - "prime_volume": "54", - "seam_gap": "15%", - "wipe_tower_extra_rib_length": "8", - "wipe_tower_extra_spacing": "120%", - "wipe_tower_wall_type": "rib", - "enable_arc_fitting": "0", - "ooze_prevention": "1", - "precise_outer_wall": "0", - "slowdown_for_curled_perimeters": "0", - "standby_temperature_delta": "-150", - "support_type": "tree(auto)" + "type": "process", + "name": "0.24 Standard @Snapmaker U1 (0.8 nozzle)", + "inherits": "fdm_process_U1_0.24_nozzle_0.8", + "from": "system", + "setting_id": "QcJ5p9h0eYUb91ak", + "instantiation": "true", + "description": "Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer height, and results in less apparent layer lines and slight higher printing quality, but longer printing time.", + "elefant_foot_compensation": "0.15", + "smooth_coefficient": "150", + "overhang_totally_speed": "50", + "compatible_printers": [ + "Snapmaker U1 (0.8 nozzle)" + ], + "filter_out_gap_fill": "1", + "gap_fill_target": "topbottom", + "internal_bridge_speed": "100%", + "min_width_top_surface": "90", + "prime_tower_brim_width": "5", + "prime_tower_width": "30", + "prime_volume": "54", + "seam_gap": "15%", + "wipe_tower_extra_rib_length": "8", + "wipe_tower_extra_spacing": "120%", + "wipe_tower_wall_type": "rib", + "enable_arc_fitting": "0", + "ooze_prevention": "1", + "precise_outer_wall": "1", + "slowdown_for_curled_perimeters": "0", + "standby_temperature_delta": "-150", + "support_type": "tree(auto)" } diff --git a/resources/profiles/Snapmaker/process/0.28 Extra Draft @Snapmaker U1 (0.4 nozzle).json b/resources/profiles/Snapmaker/process/0.28 Extra Draft @Snapmaker U1 (0.4 nozzle).json index 4adf06f100..4382b11e41 100644 --- a/resources/profiles/Snapmaker/process/0.28 Extra Draft @Snapmaker U1 (0.4 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.28 Extra Draft @Snapmaker U1 (0.4 nozzle).json @@ -11,5 +11,19 @@ "compatible_printers": [ "Snapmaker U1 (0.4 nozzle)" ], - "slowdown_for_curled_perimeters": "0" + "prime_tower_width": "30", + "prime_volume": "63", + "slowdown_for_curled_perimeters": "0", + "wipe_tower_filament": "0", + "prime_tower_brim_width": "5", + "wipe_tower_cone_angle": "15", + "wipe_tower_extra_spacing": "120%", + "enable_arc_fitting": "0", + "ooze_prevention": "1", + "precise_outer_wall": "1", + "standby_temperature_delta": "-150", + "support_type": "tree(auto)", + "wipe_tower_extra_rib_length": "8", + "wipe_tower_wall_type": "rib", + "gap_fill_target": "topbottom" } diff --git a/resources/profiles/Snapmaker/process/0.30 Draft @Snapmaker U1 (0.6 nozzle).json b/resources/profiles/Snapmaker/process/0.30 Draft @Snapmaker U1 (0.6 nozzle).json index 8f8e6a1d15..52eb63a64d 100644 --- a/resources/profiles/Snapmaker/process/0.30 Draft @Snapmaker U1 (0.6 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.30 Draft @Snapmaker U1 (0.6 nozzle).json @@ -13,6 +13,8 @@ "Snapmaker U1 (0.6 nozzle)" ], "ooze_prevention": "1", + "prime_tower_width": "30", + "prime_volume": "68", "slowdown_for_curled_perimeters": "0", "standby_temperature_delta": "-150", "wipe_tower_filament": "0", diff --git a/resources/profiles/Snapmaker/process/0.30 Standard @Snapmaker U1 (0.6 nozzle).json b/resources/profiles/Snapmaker/process/0.30 Standard @Snapmaker U1 (0.6 nozzle).json index 3ed454a7d5..e2d5c192bb 100644 --- a/resources/profiles/Snapmaker/process/0.30 Standard @Snapmaker U1 (0.6 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.30 Standard @Snapmaker U1 (0.6 nozzle).json @@ -1,40 +1,31 @@ { - "type": "process", - "name": "0.30 Standard @Snapmaker U1 (0.6 nozzle)", - "inherits": "fdm_process_U1_0.6_common", - "from": "system", - "instantiation": "true", - "layer_height": "0.3", - "initial_layer_print_height": "0.3", - "bridge_flow": "1", - "initial_layer_speed": "35", - "initial_layer_infill_speed": "55", - "sparse_infill_speed": "100", - "top_surface_speed": "150", - "bridge_speed": "30", - "overhang_3_4_speed": "15", - "setting_id": "TWxp6qgz1DJa8Ngo", - "description": "It has a big layer height, and results in apparent layer lines and ordinary printing quality and printing time.", - "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", - "compatible_printers": [ - "Snapmaker U1 (0.6 nozzle)" - ], - "filter_out_gap_fill": "1", - "gap_fill_target": "topbottom", - "internal_bridge_speed": "100%", - "prime_tower_brim_width": "5", - "prime_tower_width": "30", - "prime_volume": "68", - "seam_gap": "15%", - "wipe_tower_extra_rib_length": "8", - "wipe_tower_extra_spacing": "120%", - "wipe_tower_wall_type": "rib", - "ooze_prevention": "1", - "precise_outer_wall": "0", - "slowdown_for_curled_perimeters": "0", - "standby_temperature_delta": "-150", - "support_threshold_angle": "35", - "support_type": "tree(auto)" + "type": "process", + "name": "0.30 Standard @Snapmaker U1 (0.6 nozzle)", + "inherits": "fdm_process_U1_0.30_nozzle_0.6", + "from": "system", + "setting_id": "TWxp6qgz1DJa8Ngo", + "instantiation": "true", + "description": "It has a big layer height, and results in apparent layer lines and ordinary printing quality and printing time.", + "elefant_foot_compensation": "0.15", + "smooth_coefficient": "150", + "overhang_totally_speed": "50", + "compatible_printers": [ + "Snapmaker U1 (0.6 nozzle)" + ], + "filter_out_gap_fill": "1", + "gap_fill_target": "topbottom", + "internal_bridge_speed": "100%", + "prime_tower_brim_width": "5", + "prime_tower_width": "30", + "prime_volume": "68", + "seam_gap": "15%", + "wipe_tower_extra_rib_length": "8", + "wipe_tower_extra_spacing": "120%", + "wipe_tower_wall_type": "rib", + "ooze_prevention": "1", + "precise_outer_wall": "1", + "slowdown_for_curled_perimeters": "0", + "standby_temperature_delta": "-150", + "support_threshold_angle": "35", + "support_type": "tree(auto)" } diff --git a/resources/profiles/Snapmaker/process/0.30 Strength @Snapmaker U1 (0.6 nozzle).json b/resources/profiles/Snapmaker/process/0.30 Strength @Snapmaker U1 (0.6 nozzle).json index ce6563d960..c216eb09d2 100644 --- a/resources/profiles/Snapmaker/process/0.30 Strength @Snapmaker U1 (0.6 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.30 Strength @Snapmaker U1 (0.6 nozzle).json @@ -1,42 +1,33 @@ { - "type": "process", - "name": "0.30 Strength @Snapmaker U1 (0.6 nozzle)", - "inherits": "fdm_process_U1_0.6_common", - "from": "system", - "instantiation": "true", - "layer_height": "0.3", - "initial_layer_print_height": "0.3", - "bridge_flow": "1", - "initial_layer_speed": "35", - "initial_layer_infill_speed": "55", - "sparse_infill_speed": "100", - "top_surface_speed": "150", - "bridge_speed": "30", - "overhang_3_4_speed": "15", - "setting_id": "CBaL0vgwtgsd6Snj", - "description": "Compared with the default profile of a 0.6 mm nozzle, it has more wall loops and a higher sparse infill density. So, it results in higher strength of the prints, but more filament consumption and longer printing time.", - "elefant_foot_compensation": "0.15", - "sparse_infill_density": "25%", - "wall_loops": "4", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", - "compatible_printers": [ - "Snapmaker U1 (0.6 nozzle)" - ], - "filter_out_gap_fill": "1", - "gap_fill_target": "topbottom", - "internal_bridge_speed": "100%", - "prime_tower_width": "30", - "prime_volume": "68", - "seam_gap": "15%", - "wipe_tower_extra_rib_length": "8", - "wipe_tower_wall_type": "rib", - "enable_arc_fitting": "0", - "ooze_prevention": "1", - "precise_outer_wall": "0", - "prime_tower_brim_width": "5", - "slowdown_for_curled_perimeters": "0", - "standby_temperature_delta": "-150", - "support_type": "tree(auto)", - "wipe_tower_extra_spacing": "120%" + "type": "process", + "name": "0.30 Strength @Snapmaker U1 (0.6 nozzle)", + "inherits": "fdm_process_U1_0.30_nozzle_0.6", + "from": "system", + "setting_id": "CBaL0vgwtgsd6Snj", + "instantiation": "true", + "description": "Compared with the default profile of a 0.6 mm nozzle, it has more wall loops and a higher sparse infill density. So, it results in higher strength of the prints, but more filament consumption and longer printing time.", + "elefant_foot_compensation": "0.15", + "sparse_infill_density": "25%", + "wall_loops": "4", + "smooth_coefficient": "150", + "overhang_totally_speed": "50", + "compatible_printers": [ + "Snapmaker U1 (0.6 nozzle)" + ], + "filter_out_gap_fill": "1", + "gap_fill_target": "topbottom", + "internal_bridge_speed": "100%", + "prime_tower_width": "30", + "prime_volume": "68", + "seam_gap": "15%", + "wipe_tower_extra_rib_length": "8", + "wipe_tower_wall_type": "rib", + "enable_arc_fitting": "0", + "ooze_prevention": "1", + "precise_outer_wall": "1", + "prime_tower_brim_width": "5", + "slowdown_for_curled_perimeters": "0", + "standby_temperature_delta": "-150", + "support_type": "tree(auto)", + "wipe_tower_extra_spacing": "120%" } diff --git a/resources/profiles/Snapmaker/process/0.32 Standard @Snapmaker U1 (0.8 nozzle).json b/resources/profiles/Snapmaker/process/0.32 Standard @Snapmaker U1 (0.8 nozzle).json index 47ac276acc..d2c20559fd 100644 --- a/resources/profiles/Snapmaker/process/0.32 Standard @Snapmaker U1 (0.8 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.32 Standard @Snapmaker U1 (0.8 nozzle).json @@ -1,44 +1,34 @@ { - "type": "process", - "name": "0.32 Standard @Snapmaker U1 (0.8 nozzle)", - "inherits": "fdm_process_U1_0.8_common", - "from": "system", - "instantiation": "true", - "layer_height": "0.32", - "initial_layer_print_height": "0.4", - "bridge_flow": "0.7", - "top_surface_pattern": "monotonic", - "initial_layer_speed": "35", - "initial_layer_infill_speed": "55", - "sparse_infill_speed": "100", - "top_surface_speed": "150", - "bridge_speed": "30", - "overhang_3_4_speed": "25", - "overhang_4_4_speed": "5", - "setting_id": "iVRz2B0VBIBL1xVd", - "description": "Compared with the default profile of a 0.8 mm nozzle, it has a slightly smaller layer height, and results in slightly less but still apparent layer lines and slightly higher printing quality, but longer printing time in some printing cases.", - "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", - "compatible_printers": [ - "Snapmaker U1 (0.8 nozzle)" - ], - "filter_out_gap_fill": "1", - "gap_fill_target": "topbottom", - "internal_bridge_speed": "100%", - "prime_tower_brim_width": "5", - "prime_tower_width": "30", - "prime_volume": "72", - "seam_gap": "15%", - "wipe_tower_extra_rib_length": "8", - "wipe_tower_extra_spacing": "120%", - "wipe_tower_wall_type": "rib", - "bridge_density": "70%", - "enable_arc_fitting": "0", - "ooze_prevention": "1", - "precise_outer_wall": "0", - "slowdown_for_curled_perimeters": "0", - "standby_temperature_delta": "-150", - "support_threshold_angle": "35", - "support_type": "tree(auto)" + "type": "process", + "name": "0.32 Standard @Snapmaker U1 (0.8 nozzle)", + "inherits": "fdm_process_U1_0.32_nozzle_0.8", + "from": "system", + "setting_id": "iVRz2B0VBIBL1xVd", + "instantiation": "true", + "description": "Compared with the default profile of a 0.8 mm nozzle, it has a slightly smaller layer height, and results in slightly less but still apparent layer lines and slightly higher printing quality, but longer printing time in some printing cases.", + "elefant_foot_compensation": "0.15", + "smooth_coefficient": "150", + "overhang_totally_speed": "50", + "compatible_printers": [ + "Snapmaker U1 (0.8 nozzle)" + ], + "filter_out_gap_fill": "1", + "gap_fill_target": "topbottom", + "internal_bridge_speed": "100%", + "prime_tower_brim_width": "5", + "prime_tower_width": "30", + "prime_volume": "72", + "seam_gap": "15%", + "wipe_tower_extra_rib_length": "8", + "wipe_tower_extra_spacing": "120%", + "wipe_tower_wall_type": "rib", + "bridge_density": "70%", + "bridge_flow": "0.7", + "enable_arc_fitting": "0", + "ooze_prevention": "1", + "precise_outer_wall": "1", + "slowdown_for_curled_perimeters": "0", + "standby_temperature_delta": "-150", + "support_threshold_angle": "35", + "support_type": "tree(auto)" } diff --git a/resources/profiles/Snapmaker/process/0.36 Standard @Snapmaker U1 (0.6 nozzle).json b/resources/profiles/Snapmaker/process/0.36 Standard @Snapmaker U1 (0.6 nozzle).json index ddd97a76c3..44ea3bb3f4 100644 --- a/resources/profiles/Snapmaker/process/0.36 Standard @Snapmaker U1 (0.6 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.36 Standard @Snapmaker U1 (0.6 nozzle).json @@ -1,41 +1,32 @@ { - "type": "process", - "name": "0.36 Standard @Snapmaker U1 (0.6 nozzle)", - "inherits": "fdm_process_U1_0.6_common", - "from": "system", - "instantiation": "true", - "layer_height": "0.36", - "initial_layer_print_height": "0.3", - "bridge_flow": "1", - "initial_layer_speed": "35", - "initial_layer_infill_speed": "55", - "sparse_infill_speed": "100", - "top_surface_speed": "150", - "bridge_speed": "30", - "overhang_3_4_speed": "15", - "setting_id": "C0PiCFd3P222knX9", - "description": "Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer height, and results in more apparent layer lines and lower printing quality, but shorter printing time in some printing cases.", - "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", - "compatible_printers": [ - "Snapmaker U1 (0.6 nozzle)" - ], - "filter_out_gap_fill": "1", - "gap_fill_target": "topbottom", - "internal_bridge_speed": "100%", - "prime_tower_brim_width": "5", - "prime_tower_width": "30", - "prime_volume": "81", - "seam_gap": "15%", - "wipe_tower_extra_rib_length": "8", - "wipe_tower_extra_spacing": "120%", - "wipe_tower_wall_type": "rib", - "enable_arc_fitting": "0", - "ooze_prevention": "1", - "precise_outer_wall": "0", - "slowdown_for_curled_perimeters": "0", - "standby_temperature_delta": "-150", - "support_threshold_angle": "35", - "support_type": "tree(auto)" + "type": "process", + "name": "0.36 Standard @Snapmaker U1 (0.6 nozzle)", + "inherits": "fdm_process_U1_0.36_nozzle_0.6", + "from": "system", + "setting_id": "C0PiCFd3P222knX9", + "instantiation": "true", + "description": "Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer height, and results in more apparent layer lines and lower printing quality, but shorter printing time in some printing cases.", + "elefant_foot_compensation": "0.15", + "smooth_coefficient": "150", + "overhang_totally_speed": "50", + "compatible_printers": [ + "Snapmaker U1 (0.6 nozzle)" + ], + "filter_out_gap_fill": "1", + "gap_fill_target": "topbottom", + "internal_bridge_speed": "100%", + "prime_tower_brim_width": "5", + "prime_tower_width": "30", + "prime_volume": "81", + "seam_gap": "15%", + "wipe_tower_extra_rib_length": "8", + "wipe_tower_extra_spacing": "120%", + "wipe_tower_wall_type": "rib", + "enable_arc_fitting": "0", + "ooze_prevention": "1", + "precise_outer_wall": "1", + "slowdown_for_curled_perimeters": "0", + "standby_temperature_delta": "-150", + "support_threshold_angle": "35", + "support_type": "tree(auto)" } diff --git a/resources/profiles/Snapmaker/process/0.40 Extra Draft @Snapmaker U1 (0.6 nozzle).json b/resources/profiles/Snapmaker/process/0.40 Extra Draft @Snapmaker U1 (0.6 nozzle).json index 265c91eb35..37238fb0ea 100644 --- a/resources/profiles/Snapmaker/process/0.40 Extra Draft @Snapmaker U1 (0.6 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.40 Extra Draft @Snapmaker U1 (0.6 nozzle).json @@ -13,6 +13,8 @@ "Snapmaker U1 (0.6 nozzle)" ], "ooze_prevention": "1", + "prime_tower_width": "30", + "prime_volume": "90", "slowdown_for_curled_perimeters": "0", "standby_temperature_delta": "-150", "wipe_tower_filament": "0", diff --git a/resources/profiles/Snapmaker/process/0.40 Standard @Snapmaker U1 (0.8 nozzle).json b/resources/profiles/Snapmaker/process/0.40 Standard @Snapmaker U1 (0.8 nozzle).json index 24edfabf6d..8d00eb9fab 100644 --- a/resources/profiles/Snapmaker/process/0.40 Standard @Snapmaker U1 (0.8 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.40 Standard @Snapmaker U1 (0.8 nozzle).json @@ -1,45 +1,35 @@ { - "type": "process", - "name": "0.40 Standard @Snapmaker U1 (0.8 nozzle)", - "inherits": "fdm_process_U1_0.8_common", - "from": "system", - "instantiation": "true", - "layer_height": "0.4", - "initial_layer_print_height": "0.4", - "bridge_flow": "0.8", - "top_surface_pattern": "monotonic", - "initial_layer_speed": "35", - "initial_layer_infill_speed": "55", - "sparse_infill_speed": "100", - "top_surface_speed": "150", - "bridge_speed": "30", - "overhang_3_4_speed": "25", - "overhang_4_4_speed": "5", - "setting_id": "VqkPgUtZi159BKpJ", - "description": "It has a very big layer height, and results in very apparent layer lines, low printing quality and general printing time.", - "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", - "compatible_printers": [ - "Snapmaker U1 (0.8 nozzle)" - ], - "filter_out_gap_fill": "1", - "gap_fill_target": "topbottom", - "internal_bridge_speed": "100%", - "prime_tower_brim_width": "5", - "prime_tower_width": "30", - "prime_volume": "90", - "seam_gap": "15%", - "wipe_tower_extra_rib_length": "8", - "wipe_tower_extra_spacing": "120%", - "wipe_tower_wall_type": "rib", - "bridge_density": "60%", - "enable_arc_fitting": "0", - "min_width_top_surface": "200%", - "ooze_prevention": "1", - "precise_outer_wall": "0", - "slowdown_for_curled_perimeters": "0", - "standby_temperature_delta": "-150", - "support_threshold_angle": "40", - "support_type": "tree(auto)" + "type": "process", + "name": "0.40 Standard @Snapmaker U1 (0.8 nozzle)", + "inherits": "fdm_process_U1_0.40_nozzle_0.8", + "from": "system", + "setting_id": "VqkPgUtZi159BKpJ", + "instantiation": "true", + "description": "It has a very big layer height, and results in very apparent layer lines, low printing quality and general printing time.", + "elefant_foot_compensation": "0.15", + "smooth_coefficient": "150", + "overhang_totally_speed": "50", + "compatible_printers": [ + "Snapmaker U1 (0.8 nozzle)" + ], + "filter_out_gap_fill": "1", + "gap_fill_target": "topbottom", + "internal_bridge_speed": "100%", + "prime_tower_brim_width": "5", + "prime_tower_width": "30", + "prime_volume": "90", + "seam_gap": "15%", + "wipe_tower_extra_rib_length": "8", + "wipe_tower_extra_spacing": "120%", + "wipe_tower_wall_type": "rib", + "bridge_density": "60%", + "bridge_flow": "0.8", + "enable_arc_fitting": "0", + "min_width_top_surface": "200%", + "ooze_prevention": "1", + "precise_outer_wall": "1", + "slowdown_for_curled_perimeters": "0", + "standby_temperature_delta": "-150", + "support_threshold_angle": "40", + "support_type": "tree(auto)" } diff --git a/resources/profiles/Snapmaker/process/0.42 Standard @Snapmaker U1 (0.6 nozzle).json b/resources/profiles/Snapmaker/process/0.42 Standard @Snapmaker U1 (0.6 nozzle).json index d65ba8e688..d3e4bf7f07 100644 --- a/resources/profiles/Snapmaker/process/0.42 Standard @Snapmaker U1 (0.6 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.42 Standard @Snapmaker U1 (0.6 nozzle).json @@ -1,41 +1,32 @@ { - "type": "process", - "name": "0.42 Standard @Snapmaker U1 (0.6 nozzle)", - "inherits": "fdm_process_U1_0.6_common", - "from": "system", - "instantiation": "true", - "layer_height": "0.42", - "initial_layer_print_height": "0.3", - "bridge_flow": "1", - "initial_layer_speed": "35", - "initial_layer_infill_speed": "55", - "sparse_infill_speed": "100", - "top_surface_speed": "150", - "bridge_speed": "30", - "overhang_3_4_speed": "15", - "setting_id": "SVJzhQA3KQetRZmo", - "description": "Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer height, and results in much more apparent layer lines and much lower printing quality, but shorter printing time in some printing cases.", - "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", - "compatible_printers": [ - "Snapmaker U1 (0.6 nozzle)" - ], - "filter_out_gap_fill": "1", - "gap_fill_target": "topbottom", - "internal_bridge_speed": "100%", - "precise_z_height": "0", - "prime_tower_brim_width": "5", - "prime_tower_width": "30", - "prime_volume": "95", - "seam_gap": "15%", - "wipe_tower_extra_rib_length": "8", - "wipe_tower_extra_spacing": "120%", - "wipe_tower_wall_type": "rib", - "enable_arc_fitting": "0", - "ooze_prevention": "1", - "slowdown_for_curled_perimeters": "0", - "standby_temperature_delta": "-150", - "support_threshold_angle": "35", - "support_type": "tree(auto)" + "type": "process", + "name": "0.42 Standard @Snapmaker U1 (0.6 nozzle)", + "inherits": "fdm_process_U1_0.42_nozzle_0.6", + "from": "system", + "setting_id": "SVJzhQA3KQetRZmo", + "instantiation": "true", + "description": "Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer height, and results in much more apparent layer lines and much lower printing quality, but shorter printing time in some printing cases.", + "elefant_foot_compensation": "0.15", + "smooth_coefficient": "150", + "overhang_totally_speed": "50", + "compatible_printers": [ + "Snapmaker U1 (0.6 nozzle)" + ], + "filter_out_gap_fill": "1", + "gap_fill_target": "topbottom", + "internal_bridge_speed": "100%", + "precise_z_height": "0", + "prime_tower_brim_width": "5", + "prime_tower_width": "30", + "prime_volume": "95", + "seam_gap": "15%", + "wipe_tower_extra_rib_length": "8", + "wipe_tower_extra_spacing": "120%", + "wipe_tower_wall_type": "rib", + "enable_arc_fitting": "0", + "ooze_prevention": "1", + "slowdown_for_curled_perimeters": "0", + "standby_temperature_delta": "-150", + "support_threshold_angle": "35", + "support_type": "tree(auto)" } diff --git a/resources/profiles/Snapmaker/process/0.48 Standard @Snapmaker U1 (0.8 nozzle).json b/resources/profiles/Snapmaker/process/0.48 Standard @Snapmaker U1 (0.8 nozzle).json index 08e054619e..d6cdf607dd 100644 --- a/resources/profiles/Snapmaker/process/0.48 Standard @Snapmaker U1 (0.8 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.48 Standard @Snapmaker U1 (0.8 nozzle).json @@ -1,43 +1,32 @@ { - "type": "process", - "name": "0.48 Standard @Snapmaker U1 (0.8 nozzle)", - "inherits": "fdm_process_U1_0.8_common", - "from": "system", - "instantiation": "true", - "layer_height": "0.48", - "initial_layer_print_height": "0.4", - "bridge_flow": "1", - "top_surface_pattern": "monotonic", - "initial_layer_speed": "35", - "initial_layer_infill_speed": "55", - "sparse_infill_speed": "100", - "top_surface_speed": "150", - "bridge_speed": "30", - "overhang_3_4_speed": "25", - "overhang_4_4_speed": "5", - "setting_id": "5H6JWChFEo3zqoHQ", - "description": "Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer height, and results in very apparent layer lines and much lower printing quality, but shorter printing time in some printing cases.", - "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", - "compatible_printers": [ - "Snapmaker U1 (0.8 nozzle)" - ], - "filter_out_gap_fill": "1", - "gap_fill_target": "topbottom", - "internal_bridge_speed": "100%", - "prime_tower_brim_width": "5", - "prime_tower_width": "30", - "prime_volume": "108", - "seam_gap": "15%", - "wipe_tower_extra_rib_length": "8", - "wipe_tower_extra_spacing": "120%", - "wipe_tower_wall_type": "rib", - "enable_arc_fitting": "0", - "ooze_prevention": "1", - "precise_outer_wall": "0", - "slowdown_for_curled_perimeters": "0", - "standby_temperature_delta": "-150", - "support_threshold_angle": "35", - "support_type": "tree(auto)" + "type": "process", + "name": "0.48 Standard @Snapmaker U1 (0.8 nozzle)", + "inherits": "fdm_process_U1_0.48_nozzle_0.8", + "from": "system", + "setting_id": "5H6JWChFEo3zqoHQ", + "instantiation": "true", + "description": "Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer height, and results in very apparent layer lines and much lower printing quality, but shorter printing time in some printing cases.", + "elefant_foot_compensation": "0.15", + "smooth_coefficient": "150", + "overhang_totally_speed": "50", + "compatible_printers": [ + "Snapmaker U1 (0.8 nozzle)" + ], + "filter_out_gap_fill": "1", + "gap_fill_target": "topbottom", + "internal_bridge_speed": "100%", + "prime_tower_brim_width": "5", + "prime_tower_width": "30", + "prime_volume": "108", + "seam_gap": "15%", + "wipe_tower_extra_rib_length": "8", + "wipe_tower_extra_spacing": "120%", + "wipe_tower_wall_type": "rib", + "enable_arc_fitting": "0", + "ooze_prevention": "1", + "precise_outer_wall": "1", + "slowdown_for_curled_perimeters": "0", + "standby_temperature_delta": "-150", + "support_threshold_angle": "35", + "support_type": "tree(auto)" } diff --git a/resources/profiles/Snapmaker/process/0.56 Standard @Snapmaker U1 (0.8 nozzle).json b/resources/profiles/Snapmaker/process/0.56 Standard @Snapmaker U1 (0.8 nozzle).json index 86b571d1f5..9f67114c20 100644 --- a/resources/profiles/Snapmaker/process/0.56 Standard @Snapmaker U1 (0.8 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.56 Standard @Snapmaker U1 (0.8 nozzle).json @@ -1,41 +1,31 @@ { - "type": "process", - "name": "0.56 Standard @Snapmaker U1 (0.8 nozzle)", - "inherits": "fdm_process_U1_0.8_common", - "from": "system", - "instantiation": "true", - "layer_height": "0.56", - "initial_layer_print_height": "0.4", - "bridge_flow": "1", - "top_surface_pattern": "monotonic", - "initial_layer_speed": "35", - "initial_layer_infill_speed": "55", - "sparse_infill_speed": "100", - "top_surface_speed": "150", - "bridge_speed": "30", - "overhang_3_4_speed": "25", - "overhang_4_4_speed": "5", - "setting_id": "JZEIXOUT33c7MrZj", - "description": "Compared with the default profile of a 0.8 mm nozzle, it has a much bigger layer height, and results in extremely apparent layer lines and much lower printing quality, but much shorter printing time in some printing cases.", - "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", - "compatible_printers": [ - "Snapmaker U1 (0.8 nozzle)" - ], - "filter_out_gap_fill": "1", - "gap_fill_target": "topbottom", - "prime_tower_brim_width": "5", - "prime_tower_width": "30", - "prime_volume": "126", - "wipe_tower_extra_rib_length": "8", - "wipe_tower_extra_spacing": "120%", - "wipe_tower_wall_type": "rib", - "enable_arc_fitting": "0", - "ooze_prevention": "1", - "precise_outer_wall": "0", - "slowdown_for_curled_perimeters": "0", - "standby_temperature_delta": "-150", - "support_threshold_angle": "35", - "support_type": "tree(auto)" + "type": "process", + "name": "0.56 Standard @Snapmaker U1 (0.8 nozzle)", + "inherits": "fdm_process_U1_0.56_nozzle_0.8", + "from": "system", + "setting_id": "JZEIXOUT33c7MrZj", + "instantiation": "true", + "description": "Compared with the default profile of a 0.8 mm nozzle, it has a much bigger layer height, and results in extremely apparent layer lines and much lower printing quality, but much shorter printing time in some printing cases.", + "elefant_foot_compensation": "0.15", + "smooth_coefficient": "150", + "overhang_totally_speed": "50", + "compatible_printers": [ + "Snapmaker U1 (0.8 nozzle)" + ], + "filter_out_gap_fill": "1", + "gap_fill_target": "topbottom", + "layer_height": "0.56", + "prime_tower_brim_width": "5", + "prime_tower_width": "30", + "prime_volume": "126", + "wipe_tower_extra_rib_length": "8", + "wipe_tower_extra_spacing": "120%", + "wipe_tower_wall_type": "rib", + "enable_arc_fitting": "0", + "ooze_prevention": "1", + "precise_outer_wall": "1", + "slowdown_for_curled_perimeters": "0", + "standby_temperature_delta": "-150", + "support_threshold_angle": "35", + "support_type": "tree(auto)" } diff --git a/resources/profiles/Snapmaker/process/fdm_process_U1.json b/resources/profiles/Snapmaker/process/fdm_process_U1.json index 5d89a91866..72dab0c16b 100644 --- a/resources/profiles/Snapmaker/process/fdm_process_U1.json +++ b/resources/profiles/Snapmaker/process/fdm_process_U1.json @@ -33,7 +33,6 @@ "wall_loops": "2", "inner_wall_line_width": "0.45", "inner_wall_speed": "40", - "print_settings_id": "", "raft_layers": "0", "seam_position": "nearest", "skirt_distance": "2", diff --git a/resources/profiles/Snapmaker/process/fdm_process_U1_0.06_nozzle_0.2.json b/resources/profiles/Snapmaker/process/fdm_process_U1_0.06_nozzle_0.2.json new file mode 100644 index 0000000000..240fd4f425 --- /dev/null +++ b/resources/profiles/Snapmaker/process/fdm_process_U1_0.06_nozzle_0.2.json @@ -0,0 +1,27 @@ +{ + "type": "process", + "name": "fdm_process_U1_0.06_nozzle_0.2", + "inherits": "fdm_process_U1_common", + "from": "system", + "instantiation": "false", + "layer_height": "0.06", + "initial_layer_print_height": "0.1", + "wall_loops": "4", + "bottom_shell_layers": "5", + "top_shell_layers": "7", + "bridge_flow": "1", + "line_width": "0.22", + "outer_wall_line_width": "0.22", + "initial_layer_line_width": "0.25", + "sparse_infill_line_width": "0.22", + "inner_wall_line_width": "0.22", + "internal_solid_infill_line_width": "0.22", + "support_line_width": "0.22", + "top_surface_line_width": "0.22", + "initial_layer_speed": "40", + "initial_layer_infill_speed": "70", + "sparse_infill_speed": "100", + "top_surface_speed": "150", + "support_top_z_distance": "0.06", + "support_bottom_z_distance": "0.06" +} diff --git a/resources/profiles/Snapmaker/process/fdm_process_U1_0.08_nozzle_0.2.json b/resources/profiles/Snapmaker/process/fdm_process_U1_0.08_nozzle_0.2.json new file mode 100644 index 0000000000..41a824fa3a --- /dev/null +++ b/resources/profiles/Snapmaker/process/fdm_process_U1_0.08_nozzle_0.2.json @@ -0,0 +1,27 @@ +{ + "type": "process", + "name": "fdm_process_U1_0.08_nozzle_0.2", + "inherits": "fdm_process_U1_common", + "from": "system", + "instantiation": "false", + "layer_height": "0.08", + "initial_layer_print_height": "0.1", + "wall_loops": "4", + "bottom_shell_layers": "5", + "top_shell_layers": "7", + "bridge_flow": "1", + "line_width": "0.22", + "outer_wall_line_width": "0.22", + "initial_layer_line_width": "0.25", + "sparse_infill_line_width": "0.22", + "inner_wall_line_width": "0.22", + "internal_solid_infill_line_width": "0.22", + "support_line_width": "0.22", + "top_surface_line_width": "0.22", + "initial_layer_speed": "40", + "initial_layer_infill_speed": "70", + "sparse_infill_speed": "100", + "top_surface_speed": "150", + "support_top_z_distance": "0.08", + "support_bottom_z_distance": "0.08" +} diff --git a/resources/profiles/Snapmaker/process/fdm_process_U1_0.10_nozzle_0.2.json b/resources/profiles/Snapmaker/process/fdm_process_U1_0.10_nozzle_0.2.json new file mode 100644 index 0000000000..5ca58d7bd1 --- /dev/null +++ b/resources/profiles/Snapmaker/process/fdm_process_U1_0.10_nozzle_0.2.json @@ -0,0 +1,27 @@ +{ + "type": "process", + "name": "fdm_process_U1_0.10_nozzle_0.2", + "inherits": "fdm_process_U1_common", + "from": "system", + "instantiation": "false", + "layer_height": "0.1", + "initial_layer_print_height": "0.1", + "wall_loops": "4", + "bottom_shell_layers": "5", + "top_shell_layers": "7", + "bridge_flow": "1", + "line_width": "0.22", + "outer_wall_line_width": "0.22", + "initial_layer_line_width": "0.25", + "sparse_infill_line_width": "0.22", + "inner_wall_line_width": "0.22", + "internal_solid_infill_line_width": "0.22", + "support_line_width": "0.22", + "top_surface_line_width": "0.22", + "initial_layer_speed": "40", + "initial_layer_infill_speed": "70", + "sparse_infill_speed": "100", + "top_surface_speed": "150", + "support_top_z_distance": "0.1", + "support_bottom_z_distance": "0.1" +} diff --git a/resources/profiles/Snapmaker/process/fdm_process_U1_0.12_nozzle_0.2.json b/resources/profiles/Snapmaker/process/fdm_process_U1_0.12_nozzle_0.2.json new file mode 100644 index 0000000000..8c70dd9dee --- /dev/null +++ b/resources/profiles/Snapmaker/process/fdm_process_U1_0.12_nozzle_0.2.json @@ -0,0 +1,27 @@ +{ + "type": "process", + "name": "fdm_process_U1_0.12_nozzle_0.2", + "inherits": "fdm_process_U1_common", + "from": "system", + "instantiation": "false", + "layer_height": "0.12", + "initial_layer_print_height": "0.1", + "wall_loops": "4", + "bottom_shell_layers": "5", + "top_shell_layers": "7", + "bridge_flow": "1", + "line_width": "0.22", + "outer_wall_line_width": "0.22", + "initial_layer_line_width": "0.25", + "sparse_infill_line_width": "0.22", + "inner_wall_line_width": "0.22", + "internal_solid_infill_line_width": "0.22", + "support_line_width": "0.22", + "top_surface_line_width": "0.22", + "initial_layer_speed": "40", + "initial_layer_infill_speed": "70", + "sparse_infill_speed": "100", + "top_surface_speed": "150", + "support_top_z_distance": "0.12", + "support_bottom_z_distance": "0.12" +} diff --git a/resources/profiles/Snapmaker/process/fdm_process_U1_0.14_nozzle_0.2.json b/resources/profiles/Snapmaker/process/fdm_process_U1_0.14_nozzle_0.2.json new file mode 100644 index 0000000000..1ac42c9ffa --- /dev/null +++ b/resources/profiles/Snapmaker/process/fdm_process_U1_0.14_nozzle_0.2.json @@ -0,0 +1,27 @@ +{ + "type": "process", + "name": "fdm_process_U1_0.14_nozzle_0.2", + "inherits": "fdm_process_U1_common", + "from": "system", + "instantiation": "false", + "layer_height": "0.14", + "initial_layer_print_height": "0.1", + "wall_loops": "4", + "bottom_shell_layers": "5", + "top_shell_layers": "7", + "bridge_flow": "1", + "line_width": "0.22", + "outer_wall_line_width": "0.22", + "initial_layer_line_width": "0.25", + "sparse_infill_line_width": "0.22", + "inner_wall_line_width": "0.22", + "internal_solid_infill_line_width": "0.22", + "support_line_width": "0.22", + "top_surface_line_width": "0.22", + "initial_layer_speed": "40", + "initial_layer_infill_speed": "70", + "sparse_infill_speed": "100", + "top_surface_speed": "150", + "support_top_z_distance": "0.14", + "support_bottom_z_distance": "0.14" +} diff --git a/resources/profiles/Snapmaker/process/fdm_process_U1_0.18_nozzle_0.6.json b/resources/profiles/Snapmaker/process/fdm_process_U1_0.18_nozzle_0.6.json new file mode 100644 index 0000000000..f4725a73c7 --- /dev/null +++ b/resources/profiles/Snapmaker/process/fdm_process_U1_0.18_nozzle_0.6.json @@ -0,0 +1,26 @@ +{ + "type": "process", + "name": "fdm_process_U1_0.18_nozzle_0.6", + "inherits": "fdm_process_U1_common", + "from": "system", + "instantiation": "false", + "layer_height": "0.18", + "initial_layer_print_height": "0.3", + "bridge_flow": "1", + "line_width": "0.62", + "outer_wall_line_width": "0.62", + "initial_layer_line_width": "0.62", + "sparse_infill_line_width": "0.62", + "inner_wall_line_width": "0.62", + "internal_solid_infill_line_width": "0.62", + "support_line_width": "0.62", + "top_surface_line_width": "0.62", + "initial_layer_speed": "35", + "initial_layer_infill_speed": "55", + "sparse_infill_speed": "100", + "top_surface_speed": "150", + "bridge_speed": "30", + "overhang_3_4_speed": "15", + "support_top_z_distance": "0.18", + "support_bottom_z_distance": "0.18" +} diff --git a/resources/profiles/Snapmaker/process/fdm_process_U1_0.24_nozzle_0.6.json b/resources/profiles/Snapmaker/process/fdm_process_U1_0.24_nozzle_0.6.json new file mode 100644 index 0000000000..a014a375b3 --- /dev/null +++ b/resources/profiles/Snapmaker/process/fdm_process_U1_0.24_nozzle_0.6.json @@ -0,0 +1,24 @@ +{ + "type": "process", + "name": "fdm_process_U1_0.24_nozzle_0.6", + "inherits": "fdm_process_U1_common", + "from": "system", + "instantiation": "false", + "layer_height": "0.24", + "initial_layer_print_height": "0.3", + "bridge_flow": "1", + "line_width": "0.62", + "outer_wall_line_width": "0.62", + "initial_layer_line_width": "0.62", + "sparse_infill_line_width": "0.62", + "inner_wall_line_width": "0.62", + "internal_solid_infill_line_width": "0.62", + "support_line_width": "0.62", + "top_surface_line_width": "0.62", + "initial_layer_speed": "35", + "initial_layer_infill_speed": "55", + "sparse_infill_speed": "100", + "top_surface_speed": "150", + "bridge_speed": "30", + "overhang_3_4_speed": "15" +} diff --git a/resources/profiles/Snapmaker/process/fdm_process_U1_0.24_nozzle_0.8.json b/resources/profiles/Snapmaker/process/fdm_process_U1_0.24_nozzle_0.8.json new file mode 100644 index 0000000000..e958e9a2ee --- /dev/null +++ b/resources/profiles/Snapmaker/process/fdm_process_U1_0.24_nozzle_0.8.json @@ -0,0 +1,26 @@ +{ + "type": "process", + "name": "fdm_process_U1_0.24_nozzle_0.8", + "inherits": "fdm_process_U1_common", + "from": "system", + "instantiation": "false", + "layer_height": "0.24", + "initial_layer_print_height": "0.4", + "bridge_flow": "1", + "line_width": "0.82", + "outer_wall_line_width": "0.82", + "initial_layer_line_width": "0.82", + "sparse_infill_line_width": "0.82", + "inner_wall_line_width": "0.82", + "internal_solid_infill_line_width": "0.82", + "support_line_width": "0.82", + "top_surface_line_width": "0.82", + "top_surface_pattern": "monotonic", + "initial_layer_speed": "35", + "initial_layer_infill_speed": "55", + "sparse_infill_speed": "100", + "top_surface_speed": "150", + "bridge_speed": "30", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "5" +} diff --git a/resources/profiles/Snapmaker/process/fdm_process_U1_0.30_nozzle_0.6.json b/resources/profiles/Snapmaker/process/fdm_process_U1_0.30_nozzle_0.6.json new file mode 100644 index 0000000000..a44a9ca05a --- /dev/null +++ b/resources/profiles/Snapmaker/process/fdm_process_U1_0.30_nozzle_0.6.json @@ -0,0 +1,24 @@ +{ + "type": "process", + "name": "fdm_process_U1_0.30_nozzle_0.6", + "inherits": "fdm_process_U1_common", + "from": "system", + "instantiation": "false", + "layer_height": "0.3", + "initial_layer_print_height": "0.3", + "bridge_flow": "1", + "line_width": "0.62", + "outer_wall_line_width": "0.62", + "initial_layer_line_width": "0.62", + "sparse_infill_line_width": "0.62", + "inner_wall_line_width": "0.62", + "internal_solid_infill_line_width": "0.62", + "support_line_width": "0.62", + "top_surface_line_width": "0.62", + "initial_layer_speed": "35", + "initial_layer_infill_speed": "55", + "sparse_infill_speed": "100", + "top_surface_speed": "150", + "bridge_speed": "30", + "overhang_3_4_speed": "15" +} diff --git a/resources/profiles/Snapmaker/process/fdm_process_U1_0.32_nozzle_0.8.json b/resources/profiles/Snapmaker/process/fdm_process_U1_0.32_nozzle_0.8.json new file mode 100644 index 0000000000..67d9ecdb62 --- /dev/null +++ b/resources/profiles/Snapmaker/process/fdm_process_U1_0.32_nozzle_0.8.json @@ -0,0 +1,26 @@ +{ + "type": "process", + "name": "fdm_process_U1_0.32_nozzle_0.8", + "inherits": "fdm_process_U1_common", + "from": "system", + "instantiation": "false", + "layer_height": "0.32", + "initial_layer_print_height": "0.4", + "bridge_flow": "1", + "line_width": "0.82", + "outer_wall_line_width": "0.82", + "initial_layer_line_width": "0.82", + "sparse_infill_line_width": "0.82", + "inner_wall_line_width": "0.82", + "internal_solid_infill_line_width": "0.82", + "support_line_width": "0.82", + "top_surface_line_width": "0.82", + "top_surface_pattern": "monotonic", + "initial_layer_speed": "35", + "initial_layer_infill_speed": "55", + "sparse_infill_speed": "100", + "top_surface_speed": "150", + "bridge_speed": "30", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "5" +} diff --git a/resources/profiles/Snapmaker/process/fdm_process_U1_0.36_nozzle_0.6.json b/resources/profiles/Snapmaker/process/fdm_process_U1_0.36_nozzle_0.6.json new file mode 100644 index 0000000000..314965b603 --- /dev/null +++ b/resources/profiles/Snapmaker/process/fdm_process_U1_0.36_nozzle_0.6.json @@ -0,0 +1,24 @@ +{ + "type": "process", + "name": "fdm_process_U1_0.36_nozzle_0.6", + "inherits": "fdm_process_U1_common", + "from": "system", + "instantiation": "false", + "layer_height": "0.36", + "initial_layer_print_height": "0.3", + "bridge_flow": "1", + "line_width": "0.62", + "outer_wall_line_width": "0.62", + "initial_layer_line_width": "0.62", + "sparse_infill_line_width": "0.62", + "inner_wall_line_width": "0.62", + "internal_solid_infill_line_width": "0.62", + "support_line_width": "0.62", + "top_surface_line_width": "0.62", + "initial_layer_speed": "35", + "initial_layer_infill_speed": "55", + "sparse_infill_speed": "100", + "top_surface_speed": "150", + "bridge_speed": "30", + "overhang_3_4_speed": "15" +} diff --git a/resources/profiles/Snapmaker/process/fdm_process_U1_0.40_nozzle_0.8.json b/resources/profiles/Snapmaker/process/fdm_process_U1_0.40_nozzle_0.8.json new file mode 100644 index 0000000000..ec19b56fa5 --- /dev/null +++ b/resources/profiles/Snapmaker/process/fdm_process_U1_0.40_nozzle_0.8.json @@ -0,0 +1,26 @@ +{ + "type": "process", + "name": "fdm_process_U1_0.40_nozzle_0.8", + "inherits": "fdm_process_U1_common", + "from": "system", + "instantiation": "false", + "layer_height": "0.4", + "initial_layer_print_height": "0.4", + "bridge_flow": "1", + "line_width": "0.82", + "outer_wall_line_width": "0.82", + "initial_layer_line_width": "0.82", + "sparse_infill_line_width": "0.82", + "inner_wall_line_width": "0.82", + "internal_solid_infill_line_width": "0.82", + "support_line_width": "0.82", + "top_surface_line_width": "0.82", + "top_surface_pattern": "monotonic", + "initial_layer_speed": "35", + "initial_layer_infill_speed": "55", + "sparse_infill_speed": "100", + "top_surface_speed": "150", + "bridge_speed": "30", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "5" +} diff --git a/resources/profiles/Snapmaker/process/fdm_process_U1_0.42_nozzle_0.6.json b/resources/profiles/Snapmaker/process/fdm_process_U1_0.42_nozzle_0.6.json new file mode 100644 index 0000000000..18c1e7d79b --- /dev/null +++ b/resources/profiles/Snapmaker/process/fdm_process_U1_0.42_nozzle_0.6.json @@ -0,0 +1,24 @@ +{ + "type": "process", + "name": "fdm_process_U1_0.42_nozzle_0.6", + "inherits": "fdm_process_U1_common", + "from": "system", + "instantiation": "false", + "layer_height": "0.42", + "initial_layer_print_height": "0.3", + "bridge_flow": "1", + "line_width": "0.62", + "outer_wall_line_width": "0.62", + "initial_layer_line_width": "0.62", + "sparse_infill_line_width": "0.62", + "inner_wall_line_width": "0.62", + "internal_solid_infill_line_width": "0.62", + "support_line_width": "0.62", + "top_surface_line_width": "0.62", + "initial_layer_speed": "35", + "initial_layer_infill_speed": "55", + "sparse_infill_speed": "100", + "top_surface_speed": "150", + "bridge_speed": "30", + "overhang_3_4_speed": "15" +} diff --git a/resources/profiles/Snapmaker/process/fdm_process_U1_0.48_nozzle_0.8.json b/resources/profiles/Snapmaker/process/fdm_process_U1_0.48_nozzle_0.8.json new file mode 100644 index 0000000000..8d5632b790 --- /dev/null +++ b/resources/profiles/Snapmaker/process/fdm_process_U1_0.48_nozzle_0.8.json @@ -0,0 +1,26 @@ +{ + "type": "process", + "name": "fdm_process_U1_0.48_nozzle_0.8", + "inherits": "fdm_process_U1_common", + "from": "system", + "instantiation": "false", + "layer_height": "0.48", + "initial_layer_print_height": "0.4", + "bridge_flow": "1", + "line_width": "0.82", + "outer_wall_line_width": "0.82", + "initial_layer_line_width": "0.82", + "sparse_infill_line_width": "0.82", + "inner_wall_line_width": "0.82", + "internal_solid_infill_line_width": "0.82", + "support_line_width": "0.82", + "top_surface_line_width": "0.82", + "top_surface_pattern": "monotonic", + "initial_layer_speed": "35", + "initial_layer_infill_speed": "55", + "sparse_infill_speed": "100", + "top_surface_speed": "150", + "bridge_speed": "30", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "5" +} diff --git a/resources/profiles/Snapmaker/process/fdm_process_U1_0.56_nozzle_0.8.json b/resources/profiles/Snapmaker/process/fdm_process_U1_0.56_nozzle_0.8.json new file mode 100644 index 0000000000..7a5c92932d --- /dev/null +++ b/resources/profiles/Snapmaker/process/fdm_process_U1_0.56_nozzle_0.8.json @@ -0,0 +1,26 @@ +{ + "type": "process", + "name": "fdm_process_U1_0.56_nozzle_0.8", + "inherits": "fdm_process_U1_common", + "from": "system", + "instantiation": "false", + "layer_height": "0.56", + "initial_layer_print_height": "0.4", + "bridge_flow": "1", + "line_width": "0.82", + "outer_wall_line_width": "0.82", + "initial_layer_line_width": "0.82", + "sparse_infill_line_width": "0.82", + "inner_wall_line_width": "0.82", + "internal_solid_infill_line_width": "0.82", + "support_line_width": "0.82", + "top_surface_line_width": "0.82", + "top_surface_pattern": "monotonic", + "initial_layer_speed": "35", + "initial_layer_infill_speed": "55", + "sparse_infill_speed": "100", + "top_surface_speed": "150", + "bridge_speed": "30", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "5" +} diff --git a/resources/profiles/Snapmaker/process/fdm_process_U1_0.6_common.json b/resources/profiles/Snapmaker/process/fdm_process_U1_0.6_common.json index 93119a9370..40ea900ba2 100644 --- a/resources/profiles/Snapmaker/process/fdm_process_U1_0.6_common.json +++ b/resources/profiles/Snapmaker/process/fdm_process_U1_0.6_common.json @@ -7,7 +7,7 @@ "line_width": "0.62", "outer_wall_line_width": "0.62", "inner_wall_line_width": "0.62", - "initial_layer_line_width": "0.72", + "initial_layer_line_width": "0.62", "sparse_infill_line_width": "0.62", "internal_solid_infill_line_width": "0.62", "support_line_width": "0.62", diff --git a/resources/profiles/Snapmaker/process/fdm_process_U1_common.json b/resources/profiles/Snapmaker/process/fdm_process_U1_common.json index 0af8c229a7..462ddb53ae 100644 --- a/resources/profiles/Snapmaker/process/fdm_process_U1_common.json +++ b/resources/profiles/Snapmaker/process/fdm_process_U1_common.json @@ -13,8 +13,7 @@ "compatible_printers_condition": "", "draft_shield": "disabled", "elefant_foot_compensation": "0", - "enable_arc_fitting": "1", - "exclude_object": "1", + "enable_arc_fitting": "0", "outer_wall_acceleration": "5000", "wall_infill_order": "inner wall/outer wall/infill", "line_width": "0.42", @@ -46,7 +45,7 @@ "internal_solid_infill_speed": "150", "initial_layer_infill_speed": "60", "resolution": "0.012", - "support_type": "normal(auto)", + "support_type": "tree(auto)", "support_style": "default", "support_top_z_distance": "0.2", "support_bottom_z_distance": "0.2", @@ -68,11 +67,9 @@ "travel_speed": "500", "enable_prime_tower": "1", "wipe_tower_no_sparse_layers": "0", - "wipe_tower_cone_angle": "30", - "wipe_tower_wall_type": "rib", - "wipe_tower_extra_rib_length": "0", "prime_tower_width": "35", - "prime_volume": "30", "wall_generator": "arachne", - "compatible_printers": [] + "compatible_printers": [], + "wipe_tower_extra_rib_length": "8", + "exclude_object": "1" } diff --git a/resources/profiles/Snapmaker/process/fdm_process_a400.json b/resources/profiles/Snapmaker/process/fdm_process_a400.json index 39e7565f0b..f8ca481f9f 100644 --- a/resources/profiles/Snapmaker/process/fdm_process_a400.json +++ b/resources/profiles/Snapmaker/process/fdm_process_a400.json @@ -5,7 +5,7 @@ "from": "system", "instantiation": "false", "initial_layer_print_height": "0.2", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "initial_layer_infill_speed": "75", "outer_wall_speed": "100", "inner_wall_speed": "160", diff --git a/resources/profiles/Snapmaker/process/fdm_process_common.json b/resources/profiles/Snapmaker/process/fdm_process_common.json index 6fb4fa2de4..458a0f6162 100644 --- a/resources/profiles/Snapmaker/process/fdm_process_common.json +++ b/resources/profiles/Snapmaker/process/fdm_process_common.json @@ -110,7 +110,7 @@ "top_surface_jerk": "2", "travel_jerk": "4", "enable_support": "0", - "support_type": "normal(auto)", + "support_type": "tree(auto)", "support_style": "snug", "support_threshold_angle": "30", "support_on_build_plate_only": "1", diff --git a/resources/profiles/Snapmaker/process/fdm_process_idex.json b/resources/profiles/Snapmaker/process/fdm_process_idex.json index 7e04710bd3..6aeabfdaa7 100644 --- a/resources/profiles/Snapmaker/process/fdm_process_idex.json +++ b/resources/profiles/Snapmaker/process/fdm_process_idex.json @@ -5,7 +5,7 @@ "from": "system", "instantiation": "false", "initial_layer_print_height": "0.2", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "initial_layer_infill_speed": "75", "outer_wall_speed": "120", "inner_wall_speed": "250", diff --git a/resources/profiles/Voron/machine/fdm_klipper_common.json b/resources/profiles/Voron/machine/fdm_klipper_common.json index 4d40f3d168..b4ffd1a4bb 100644 --- a/resources/profiles/Voron/machine/fdm_klipper_common.json +++ b/resources/profiles/Voron/machine/fdm_klipper_common.json @@ -116,7 +116,7 @@ "deretraction_speed": [ "30" ], - "z_hop_types": "Normal Lift", + "z_hop_types": "Slope Lift", "silent_mode": "0", "single_extruder_multi_material": "1", "change_filament_gcode": "", diff --git a/src/libslic3r/Extruder.cpp b/src/libslic3r/Extruder.cpp index 1e250b707e..b1b6ca347a 100644 --- a/src/libslic3r/Extruder.cpp +++ b/src/libslic3r/Extruder.cpp @@ -220,12 +220,12 @@ double Extruder::retract_restart_extra() const double Extruder::retract_length_toolchange() const { - return m_config->retract_length_toolchange.get_at(extruder_id()); + return m_config->retract_length_toolchange.get_at(m_config_index); } double Extruder::retract_restart_extra_toolchange() const { - return m_config->retract_restart_extra_toolchange.get_at(extruder_id()); + return m_config->retract_restart_extra_toolchange.get_at(m_config_index); } double Extruder::travel_slope() const diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index ff2384a0a4..babe018651 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -1137,8 +1137,8 @@ static std::vector get_path_of_change_filament(const Print& print) float old_retract_length = (old_filament_id != -1) ? full_config.retraction_length.get_at(old_fi) : 0; float new_retract_length = full_config.retraction_length.get_at(new_fi); - float old_retract_length_toolchange = (old_filament_id != -1) ? full_config.retract_length_toolchange.get_at(old_filament_id) : 0; - float new_retract_length_toolchange = full_config.retract_length_toolchange.get_at(new_filament_id); + float old_retract_length_toolchange = (old_filament_id != -1) ? full_config.retract_length_toolchange.get_at(old_fi) : 0; + float new_retract_length_toolchange = full_config.retract_length_toolchange.get_at(new_fi); int old_filament_temp = (old_filament_id != -1) ? (gcodegen.on_first_layer()? full_config.nozzle_temperature_initial_layer.get_at(old_fi) : full_config.nozzle_temperature.get_at(old_fi)) : 210; int new_filament_temp = gcodegen.on_first_layer() ? full_config.nozzle_temperature_initial_layer.get_at(new_fi) : full_config.nozzle_temperature.get_at(new_fi); Vec3d nozzle_pos = gcode_writer.get_position(); @@ -9038,7 +9038,7 @@ std::string GCode::set_extruder(unsigned int new_filament_id, double print_z, bo // per-layer nozzle grouping; resolve the column instead of indexing by the filament id. size_t new_fi = get_filament_config_index((int)new_filament_id); float new_retract_length = m_config.retraction_length.get_at(new_fi); - float new_retract_length_toolchange = m_config.retract_length_toolchange.get_at(new_filament_id); + float new_retract_length_toolchange = m_config.retract_length_toolchange.get_at(new_fi); int new_filament_temp = this->on_first_layer() ? m_config.nozzle_temperature_initial_layer.get_at(new_fi) : m_config.nozzle_temperature.get_at(new_fi); // BBS: if print_z == 0 use first layer temperature if (abs(print_z) < EPSILON) @@ -9069,7 +9069,7 @@ std::string GCode::set_extruder(unsigned int new_filament_id, double print_z, bo // gap-filled carry-forward, so its current-layer column matches the nozzle it occupies. size_t old_fi = get_filament_config_index(old_filament_id); old_retract_length = m_config.retraction_length.get_at(old_fi); - old_retract_length_toolchange = m_config.retract_length_toolchange.get_at(old_filament_id); + old_retract_length_toolchange = m_config.retract_length_toolchange.get_at(old_fi); old_filament_temp = this->on_first_layer()? m_config.nozzle_temperature_initial_layer.get_at(old_fi) : m_config.nozzle_temperature.get_at(old_fi); //During the filament change, the extruder will extrude an extra length of grab_length for the corresponding detection, so the purge can reduce this length. diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index 2e33a36c83..47d448b69b 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -1351,6 +1351,8 @@ static std::vector s_Preset_filament_options {/*"filament_colour", "filament_retraction_length", "filament_retraction_minimum_travel", "filament_retraction_speed", + "filament_retract_length_toolchange", + "filament_retract_restart_extra_toolchange", "filament_wipe", "filament_z_hop", "filament_z_hop_types", diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index ada05c4e9f..849b0754dc 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -72,6 +72,8 @@ const std::vector filament_extruder_override_keys = { "filament_deretraction_speed", "filament_retract_restart_extra", //not in filament_options_with_variant, added on 20250816 "filament_retraction_minimum_travel", + "filament_retract_length_toolchange", + "filament_retract_restart_extra_toolchange", // BBS: floats "filament_wipe_distance", // bools @@ -5734,12 +5736,10 @@ void PrintConfigDef::init_fff_params() def->set_default_value(new ConfigOptionFloatsNullable{10}); def = this->add("retract_length_toolchange", coFloats); - def->label = L("Length"); - //def->full_label = L("Retraction Length (Toolchange)"); - def->full_label = "Retraction Length (Toolchange)"; - //def->tooltip = L("When retraction is triggered before changing tool, filament is pulled back " - // "by the specified amount (the length is measured on raw filament, before it enters " - // "the extruder)."); + def->label = L("Retraction Length (Toolchange)"); + def->tooltip = L("When retraction is triggered before changing tool, filament is pulled back " + "by the specified amount (the length is measured on raw filament, before it enters " + "the extruder)."); def->sidetext = L("mm"); // millimeters, CIS languages need translation def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloats { 10. }); @@ -5993,7 +5993,7 @@ void PrintConfigDef::init_fff_params() def->set_default_value(new ConfigOptionFloats { 0. }); def = this->add("retract_restart_extra_toolchange", coFloats); - def->label = L("Extra length on restart"); + def->label = L("Extra length on restart (Toolchange)"); def->tooltip = L("When the retraction is compensated after changing tool, the extruder will push " "this additional amount of filament."); def->sidetext = L("mm"); // millimeters, CIS languages need translation @@ -8163,10 +8163,12 @@ void PrintConfigDef::init_extruder_option_keys() "long_retractions_when_cut", "retract_after_wipe", "retract_before_wipe", + "retract_length_toolchange", "retract_lift_above", "retract_lift_below", "retract_lift_enforce", "retract_restart_extra", + "retract_restart_extra_toolchange", "retract_when_changing_layer", "retraction_distances_when_cut", "retraction_length", @@ -9254,6 +9256,8 @@ std::set filament_options_with_variant = { "filament_retract_lift_below", "filament_retract_lift_enforce", "filament_retract_restart_extra", + "filament_retract_length_toolchange", + "filament_retract_restart_extra_toolchange", "filament_retraction_speed", "filament_deretraction_speed", "filament_retraction_minimum_travel", diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 0c38977c74..4bd963b098 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -4006,13 +4006,12 @@ void TabFilament::add_filament_overrides_page() const int extruder_idx = 0; // #ys_FIXME - ConfigOptionsGroupShp retraction_optgroup = page->new_optgroup(L("Retraction"), L"param_retraction"); - auto append_retraction_option = [this, retraction_optgroup](const std::string& opt_key, int opt_index) + auto append_retraction_option = [this](ConfigOptionsGroupShp optgroup, const std::string& opt_key, int opt_index) { Line line {"",""}; - line = retraction_optgroup->create_single_option_line(retraction_optgroup->get_option(opt_key, opt_index)); + line = optgroup->create_single_option_line(optgroup->get_option(opt_key, opt_index)); - line.near_label_widget = [this, optgroup_wk = ConfigOptionsGroupWkp(retraction_optgroup), opt_key, opt_index](wxWindow* parent) { + line.near_label_widget = [this, optgroup_wk = ConfigOptionsGroupWkp(optgroup), opt_key, opt_index](wxWindow* parent) { auto check_box = new ::CheckBox(parent); // ORCA modernize checkboxes check_box->Bind(wxEVT_TOGGLEBUTTON, [this, optgroup_wk, opt_key, opt_index](wxCommandEvent& evt) { const bool is_checked = evt.IsChecked(); @@ -4039,9 +4038,10 @@ void TabFilament::add_filament_overrides_page() return check_box; }; - retraction_optgroup->append_line(line); + optgroup->append_line(line); }; + ConfigOptionsGroupShp retraction_optgroup = page->new_optgroup(L("Retraction"), L"param_retraction"); for (const std::string opt_key : { "filament_retraction_length", "filament_z_hop", "filament_z_hop_types", @@ -4065,7 +4065,13 @@ void TabFilament::add_filament_overrides_page() //SoftFever // "filament_seam_gap" }) - append_retraction_option(opt_key, extruder_idx); + append_retraction_option(retraction_optgroup, opt_key, extruder_idx); + + ConfigOptionsGroupShp toolchange_optgroup = page->new_optgroup(L("Retraction when switching material"), L"param_retraction_material_change"); + for (const std::string opt_key : { "filament_retract_length_toolchange", + "filament_retract_restart_extra_toolchange" + }) + append_retraction_option(toolchange_optgroup, opt_key, extruder_idx); ConfigOptionsGroupShp ironing_optgroup = page->new_optgroup(L("Ironing"), L"param_ironing"); auto append_ironing_option = [this, ironing_optgroup](const std::string& opt_key, int opt_index) @@ -4180,6 +4186,8 @@ void TabFilament::update_filament_overrides_page(const DynamicPrintConfig* print "filament_retraction_speed", "filament_deretraction_speed", "filament_retract_restart_extra", + "filament_retract_length_toolchange", + "filament_retract_restart_extra_toolchange", "filament_retraction_minimum_travel", "filament_retract_when_changing_layer", "filament_wipe", @@ -4210,7 +4218,8 @@ void TabFilament::update_filament_overrides_page(const DynamicPrintConfig* print is_checked &= !dynamic_cast(m_config->option(opt_key))->is_nil(extruder_idx); m_overrides_options[opt_key]->SetValue(is_checked); - Field* field = optgroup->get_fieldc(opt_key, 0); + // the toolchange overrides live in their own optgroup, so search the whole page + Field* field = page->get_field(opt_key, 0); if (field == nullptr) continue; if (opt_key == "filament_long_retractions_when_cut") { From 596cbb8b2da5199ff1f897344a16fd96f4006036 Mon Sep 17 00:00:00 2001 From: Ian Chua Date: Wed, 5 Aug 2026 11:39:37 +0800 Subject: [PATCH 18/66] Keep printer-agent error codes available to UI workflow --- src/slic3r/Utils/IPrinterAgent.hpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/slic3r/Utils/IPrinterAgent.hpp b/src/slic3r/Utils/IPrinterAgent.hpp index 91d271316e..0fa3616344 100644 --- a/src/slic3r/Utils/IPrinterAgent.hpp +++ b/src/slic3r/Utils/IPrinterAgent.hpp @@ -2,6 +2,13 @@ #define __I_PRINTER_AGENT_HPP__ #include "bambu_networking.hpp" +// why: these extend the BAMBU_NETWORK_* return space rather than opening a new one - the value +// flows through the same int domain callers already compare against BAMBU_NETWORK_SUCCESS. +// They live here and not in bambu_networking.hpp because that file is a vendor header replaced +// wholesale by header-sync commits (see c09252ce11), which would silently clobber them. +// -70xx is free: the vendor occupies -1..-25 and -10xx through -60xx. +#define ORCA_NETWORK_ERR_CMD_NOT_SUPPORTED -7010 // no translation exists for this command +#define ORCA_NETWORK_ERR_CAP_NOT_AVAILABLE -7020 // a translation exists; this printer lacks the capability #include #include From 32f82b64e7da1d038d421fd28bd86b8f436c6fd8 Mon Sep 17 00:00:00 2001 From: Ian Chua Date: Wed, 5 Aug 2026 13:07:32 +0800 Subject: [PATCH 19/66] fix: enable both device tabs --- src/slic3r/GUI/MainFrame.cpp | 83 +++++++++++++++++++++++++++++++++++- src/slic3r/GUI/MainFrame.hpp | 4 +- src/slic3r/GUI/Plater.cpp | 7 +-- 3 files changed, 87 insertions(+), 7 deletions(-) diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 39082a9dca..5ef81a32e1 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -1368,9 +1368,88 @@ void MainFrame::init_tabpanel() { } // SoftFever -void MainFrame::show_device(bool bBBLPrinter) { +void MainFrame::show_device(bool should_use_native) { auto idx = -1; - if (bBBLPrinter) { + + const bool use_printer_agents = wxGetApp().app_config->get_bool("use_printer_agents"); + + // The legacy page is appended when printer agents are enabled. Remove that + // extra page before switching back to the normal native/legacy layout. + if (!use_printer_agents) { + if ((idx = m_tabpanel->FindPage(m_printer_view)) != wxNOT_FOUND && idx != tpMonitor) { + m_printer_view->Show(false); + m_tabpanel->RemovePage(idx); + } + } + + if (use_printer_agents) { + if (!m_monitor) { + m_monitor = new MonitorPanel(m_tabpanel, wxID_ANY, wxDefaultPosition, wxDefaultSize); + m_monitor->SetBackgroundColour(*wxWHITE); + } + + if (m_tabpanel->FindPage(m_monitor) == wxNOT_FOUND) { + if ((idx = m_tabpanel->FindPage(m_printer_view)) != wxNOT_FOUND) { + m_printer_view->Show(false); + m_tabpanel->RemovePage(idx); + } + m_monitor->Show(false); + m_tabpanel->InsertPage(tpMonitor, m_monitor, _L("Device"), std::string("tab_monitor_active"), + std::string("tab_monitor_active")); + } + + if (m_printer_view == nullptr) { + m_printer_view = new PrinterWebView(m_tabpanel); + Bind(EVT_LOAD_PRINTER_URL, [this](LoadPrinterViewEvent& evt) { + wxString url = evt.GetString(); + wxString key = evt.GetAPIkey(); + // select_tab(MainFrame::tpMonitor); + m_printer_view->load_url(url, key); + }); + } + + if (wxGetApp().is_enable_multi_machine()) { + if (!m_multi_machine) { + m_multi_machine = new MultiMachinePage(m_tabpanel, wxID_ANY, wxDefaultPosition, wxDefaultSize); + m_multi_machine->SetBackgroundColour(*wxWHITE); + } + // TODO: change the bitmap + if (m_tabpanel->FindPage(m_multi_machine) == wxNOT_FOUND) { + m_multi_machine->Show(false); + m_tabpanel->InsertPage(tpMultiDevice, m_multi_machine, _L("Multi-device"), std::string("tab_multi_active"), + std::string("tab_multi_active"), false); + } + } + if (!m_calibration) { + m_calibration = new CalibrationPanel(m_tabpanel, wxID_ANY, wxDefaultPosition, wxDefaultSize); + m_calibration->SetBackgroundColour(*wxWHITE); + } + // Calibration is always the last page, so don't use InsertPage here. Otherwise, if multi_machine page is not enabled, + // the calibration tab won't be properly added as well, due to the TabPosition::tpCalibration no longer matches the real tab position. + if (m_tabpanel->FindPage(m_calibration) == wxNOT_FOUND) { + m_calibration->Show(false); + m_tabpanel->AddPage(m_calibration, _L("Calibration"), std::string("tab_calibration_active"), + std::string("tab_calibration_active"), false); + } + + if ((idx = m_tabpanel->FindPage(m_printer_view)) == wxNOT_FOUND) { + m_printer_view->Show(false); + m_tabpanel->AddPage(m_printer_view, _L("Device (legacy)"), std::string("tab_monitor_active"), + std::string("tab_monitor_active"), false); + } else { + m_tabpanel->SetPageText(idx, _L("Device (legacy)")); + } + +#ifdef _MSW_DARK_MODE + wxGetApp().UpdateDarkUIWin(this); +#endif // _MSW_DARK_MODE + + fit_tab_labels(); // ORCA on printer change + + return; + } + + if (should_use_native) { if (m_tabpanel->FindPage(m_monitor) != wxNOT_FOUND) { fit_tab_labels(); // ORCA on printer change - same button layout return; diff --git a/src/slic3r/GUI/MainFrame.hpp b/src/slic3r/GUI/MainFrame.hpp index 20229a611e..a614783c31 100644 --- a/src/slic3r/GUI/MainFrame.hpp +++ b/src/slic3r/GUI/MainFrame.hpp @@ -358,7 +358,7 @@ public: void RunScript(wxString js); //SoftFever - void show_device(bool bBBLPrinter); + void show_device(bool should_use_native); void fit_tab_labels(); // ORCA PA_Calibration_Dlg* m_pa_calib_dlg{ nullptr }; @@ -385,7 +385,7 @@ public: CalibrationPanel* m_calibration{ nullptr }; WebViewPanel* m_webview { nullptr }; PrinterWebView* m_printer_view{nullptr}; - wxLogWindow* m_log_window { nullptr }; + wxLogWindow* m_log_window { nullptr }; // BBS //wxBookCtrlBase* m_tabpanel { nullptr }; Notebook* m_tabpanel{ nullptr }; diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index d83ddded34..3ee09fed06 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -3246,7 +3246,8 @@ void Sidebar::update_all_preset_comboboxes() auto p_mainframe = wxGetApp().mainframe; auto cfg = preset_bundle.printers.get_edited_preset().config; - const bool use_native_device_tab = preset_bundle.use_bbl_device_tab() || wxGetApp().app_config->get_bool("use_printer_agents"); + const bool use_printer_agents = wxGetApp().app_config->get_bool("use_printer_agents"); + const bool use_native_device_tab = preset_bundle.use_bbl_device_tab() || use_printer_agents; if (preset_bundle.use_bbl_network()) { //only show connection button for not-BBL printer @@ -3259,7 +3260,7 @@ void Sidebar::update_all_preset_comboboxes() } else { //p->btn_connect_printer->Show(); // ORCA: hide the physical-printer connection button when printer agents are enabled - p->m_printer_connect->Show(!wxGetApp().app_config->get_bool("use_printer_agents")); + p->m_printer_connect->Show(!use_printer_agents); // ORCA: show/hide sync-ams button based on filament sync mode auto agent = wxGetApp().getAgent(); @@ -3286,7 +3287,7 @@ void Sidebar::update_all_preset_comboboxes() : MainFrame::PrintSelectType::eSendGcode; } - if (!use_native_device_tab) + if (!use_native_device_tab || use_printer_agents) p_mainframe->load_printer_url(url, apikey); From 38cb1ae8d10031f5ac377236bb546017606f47ae Mon Sep 17 00:00:00 2001 From: Ian Chua Date: Wed, 5 Aug 2026 13:40:05 +0800 Subject: [PATCH 20/66] Add developer flag for printer agents (#15110) --- src/libslic3r/AppConfig.cpp | 6 ++++++ src/slic3r/GUI/Preferences.cpp | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/src/libslic3r/AppConfig.cpp b/src/libslic3r/AppConfig.cpp index 159d9bbeda..1b170bf884 100644 --- a/src/libslic3r/AppConfig.cpp +++ b/src/libslic3r/AppConfig.cpp @@ -626,6 +626,12 @@ void AppConfig::set_defaults() set_bool("window_buttons_on_left", false); #endif + if (get("use_printer_agents").empty()) + { + // false = legacy behavior using print hosts + set_bool("use_printer_agents", false); + } + // Remove legacy window positions/sizes erase("app", "main_frame_maximized"); erase("app", "main_frame_pos"); diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp index 6bcc00848b..1a3c6fd26a 100644 --- a/src/slic3r/GUI/Preferences.cpp +++ b/src/slic3r/GUI/Preferences.cpp @@ -2101,6 +2101,12 @@ void PreferencesDialog::create_items() auto item_show_unsupported = create_item_checkbox(_L("Show unsupported presets"), _L("Show incompatible/unsupported presets in the printer and filament dropdown lists. These presets cannot be selected."), "show_unsupported_presets"); g_sizer->Add(item_show_unsupported); + auto item_plugin_printer_agents = create_item_checkbox( + _L("(Experimental) Use printer agents instead of print hosts"), _L( + "Route print jobs for non-Bambu printers through printer plug-in agents instead of the classic print-host upload flow.\nWhen disabled, OrcaSlicer uses the legacy print-host behavior."), + "use_printer_agents"); + g_sizer->Add(item_plugin_printer_agents); + //// DEVELOPER > Experimental Features g_sizer->Add(create_item_title(_L("Experimental Features")), 1, wxEXPAND); From 38f5c84e7fcaf32496c692a0392d6b0e7aa54151 Mon Sep 17 00:00:00 2001 From: Ian Chua Date: Wed, 5 Aug 2026 16:20:58 +0800 Subject: [PATCH 21/66] fix: regression error --- src/slic3r/GUI/DeviceCore/DevManager.cpp | 41 +++++++++++++++++------- src/slic3r/GUI/DeviceCore/DevManager.h | 3 ++ 2 files changed, 33 insertions(+), 11 deletions(-) diff --git a/src/slic3r/GUI/DeviceCore/DevManager.cpp b/src/slic3r/GUI/DeviceCore/DevManager.cpp index 3c664facfd..d13f8b7215 100644 --- a/src/slic3r/GUI/DeviceCore/DevManager.cpp +++ b/src/slic3r/GUI/DeviceCore/DevManager.cpp @@ -611,6 +611,7 @@ namespace Slic3r } selected_machine = dev_id; + record_user_last_machine(selected_machine); return true; } @@ -875,20 +876,38 @@ namespace Slic3r } } + void DeviceManager::record_user_last_machine(const std::string& dev_id) + { + if (Slic3r::GUI::wxGetApp().app_config) { + Slic3r::GUI::wxGetApp().app_config->set("user_last_selected_machine", dev_id); + } + } + + std::string DeviceManager::get_user_last_machine() const + { + if (Slic3r::GUI::wxGetApp().app_config) { + const auto& user_last_machine = Slic3r::GUI::wxGetApp().app_config->get("user_last_selected_machine"); + if (!user_last_machine.empty()) { + return user_last_machine; + } else if (m_agent) { + return m_agent->get_user_selected_machine(); + } + } + + return ""; + } + void DeviceManager::load_last_machine() { - // Get all available machines, include cloud machines and lan machines that have access right - auto all_machines = get_my_machine_list(); - if (all_machines.empty()) + // Only reconnect the remembered cloud machine. Do not select an arbitrary + // first machine: agent swaps intentionally leave the selection empty until + // the new agent explicitly selects its configured printer. + if (userMachineList.empty()) return; - - // Reconnect the machine the user last selected, if it's still available. - // why: no first-available fallback - auto-connecting an arbitrary machine - // fights the agent-swap reset, which intentionally leaves nothing selected. - const std::string last_monitor_machine = m_agent ? m_agent->get_user_selected_machine() : ""; - const auto last_machine = all_machines.find(last_monitor_machine); - if (last_machine != all_machines.end()) - this->set_selected_machine(last_machine->second->get_dev_id()); + + const auto& last_monitor_machine = get_user_last_machine(); + if (userMachineList.find(last_monitor_machine) != userMachineList.end()) + set_selected_machine(last_monitor_machine); } void DeviceManager::OnMachineBindStateChanged(MachineObject* obj, const std::string& new_state) diff --git a/src/slic3r/GUI/DeviceCore/DevManager.h b/src/slic3r/GUI/DeviceCore/DevManager.h index 70bee613a8..e3ac0064b9 100644 --- a/src/slic3r/GUI/DeviceCore/DevManager.h +++ b/src/slic3r/GUI/DeviceCore/DevManager.h @@ -52,6 +52,9 @@ public: // swap path can reuse it instead of duplicating the two sidebar calls. void OnSelectedMachineLost(); + void record_user_last_machine(const std::string& dev_id); + std::string get_user_last_machine() const; + // local machine void set_local_selected_machine(std::string dev_id) { local_selected_machine = dev_id; }; MachineObject* get_local_selected_machine() const { return get_local_machine(local_selected_machine); } From 4e1caa39eb6d7e6ac7353cc7238d505b003cda42 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Wed, 5 Aug 2026 01:21:32 +0800 Subject: [PATCH 22/66] Flush the wipe tower planner queue with M400 on Klipper The wipe tower emitted G4 S0 to make the firmware finish its queued moves before commands that must not take effect early. Klipper's G4 reads only the P parameter, so that flush never happened there and a temperature change could land seconds ahead of the moves it was meant to follow. Klipper now gets M400 instead, through one helper shared by both wipe tower implementations. No change to any other firmware flavor's output, so no shipped profile or saved project is affected. --- src/libslic3r/GCode/WipeTower.cpp | 7 ++++++- src/libslic3r/GCode/WipeTower.hpp | 8 ++++++++ src/libslic3r/GCode/WipeTower2.cpp | 9 +++++---- tests/fff_print/CMakeLists.txt | 1 + tests/fff_print/test_wipe_tower.cpp | 27 +++++++++++++++++++++++++++ 5 files changed, 47 insertions(+), 5 deletions(-) create mode 100644 tests/fff_print/test_wipe_tower.cpp diff --git a/src/libslic3r/GCode/WipeTower.cpp b/src/libslic3r/GCode/WipeTower.cpp index 3d7353eadf..cfa407ea73 100644 --- a/src/libslic3r/GCode/WipeTower.cpp +++ b/src/libslic3r/GCode/WipeTower.cpp @@ -617,6 +617,11 @@ Polygon generate_rectange_polygon(const Vec2f &wt_box_min ,const Vec2f & wt_box_ return res; } +const char* flush_planner_queue_command(GCodeFlavor flavor) +{ + return flavor == gcfKlipper ? "M400\n" : "G4 S0\n"; +} + class WipeTowerWriter { public: @@ -1190,7 +1195,7 @@ public: WipeTowerWriter& flush_planner_queue() { - m_gcode += "G4 S0\n"; + m_gcode += flush_planner_queue_command(m_gcode_flavor); return *this; } diff --git a/src/libslic3r/GCode/WipeTower.hpp b/src/libslic3r/GCode/WipeTower.hpp index 66e8acf1c4..a083da1fb2 100644 --- a/src/libslic3r/GCode/WipeTower.hpp +++ b/src/libslic3r/GCode/WipeTower.hpp @@ -26,6 +26,14 @@ enum GCodeFlavor : unsigned char; Polylines construct_gap_for_skip_points( const Polygon& polygon, const std::vector& skip_points, float wt_width, float gap_length, Polygon& insert_skip_polygon); +// Returns the command that makes the firmware finish its queued moves, so a command or +// custom-G-code boundary right after (resetting the extruder position, entering +// [change_filament_gcode] / [filament_start_gcode]) is not reached early. Klipper acts on +// such commands the moment it parses them, and its G4 reads only P, so the zero dwell the +// other flavors use synchronizes nothing there — M400 does. Defined in WipeTower.cpp, shared +// by WipeTower and WipeTower2. +const char* flush_planner_queue_command(GCodeFlavor flavor); + class WipeTower { public: diff --git a/src/libslic3r/GCode/WipeTower2.cpp b/src/libslic3r/GCode/WipeTower2.cpp index 51ab155dd9..5dc78d4785 100644 --- a/src/libslic3r/GCode/WipeTower2.cpp +++ b/src/libslic3r/GCode/WipeTower2.cpp @@ -386,7 +386,8 @@ public: } WipeTowerWriter2& switch_filament_monitoring(bool enable) { - m_gcode += std::string("G4 S0\n") + "M591 " + (enable ? "R" : "S0") + "\n"; + m_gcode += flush_planner_queue_command(m_gcode_flavor); + m_gcode += std::string("M591 ") + (enable ? "R" : "S0") + "\n"; return *this; } @@ -625,7 +626,7 @@ public: // Set extruder temperature, don't wait by default. WipeTowerWriter2& set_extruder_temp(int temperature, bool wait = false) { - m_gcode += "G4 S0\n"; // to flush planner queue + m_gcode += flush_planner_queue_command(m_gcode_flavor); m_gcode += "M" + std::to_string(wait ? 109 : 104) + " S" + std::to_string(temperature) + "\n"; return *this; } @@ -677,8 +678,8 @@ public: } WipeTowerWriter2& flush_planner_queue() - { - m_gcode += "G4 S0\n"; + { + m_gcode += flush_planner_queue_command(m_gcode_flavor); return *this; } diff --git a/tests/fff_print/CMakeLists.txt b/tests/fff_print/CMakeLists.txt index 70ab639faa..08f86de8a7 100644 --- a/tests/fff_print/CMakeLists.txt +++ b/tests/fff_print/CMakeLists.txt @@ -18,6 +18,7 @@ add_executable(${_TEST_NAME}_tests test_slicing_pipeline_hook.cpp test_support_material.cpp test_trianglemesh.cpp + test_wipe_tower.cpp ) target_link_libraries(${_TEST_NAME}_tests test_common libslic3r Catch2::Catch2WithMain) set_property(TARGET ${_TEST_NAME}_tests PROPERTY FOLDER "tests") diff --git a/tests/fff_print/test_wipe_tower.cpp b/tests/fff_print/test_wipe_tower.cpp new file mode 100644 index 0000000000..de5836ba7a --- /dev/null +++ b/tests/fff_print/test_wipe_tower.cpp @@ -0,0 +1,27 @@ +#include + +#include + +#include "libslic3r/GCode/WipeTower.hpp" +#include "libslic3r/PrintConfig.hpp" + +using namespace Slic3r; + +// The wipe tower flushes the firmware's motion queue before a command or custom-G-code +// boundary that must not be reached early (an extruder-position reset, entering custom +// G-code). Klipper acts on those the moment it parses them, and its G4 reads only P, so the +// zero dwell every other flavor uses is not a flush there. +TEST_CASE("Klipper flushes the wipe tower planner queue with M400", "[WipeTower]") +{ + CHECK(std::string(flush_planner_queue_command(gcfKlipper)) == "M400\n"); +} + +TEST_CASE("Other flavors flush the wipe tower planner queue with a zero dwell", "[WipeTower]") +{ + const GCodeFlavor flavor = GENERATE(gcfMarlinLegacy, gcfRepRapFirmware, gcfRepetier, + gcfMarlinFirmware, gcfRepRapSprinter, gcfTeacup, + gcfMakerWare, gcfSailfish, gcfMach3, gcfMachinekit, + gcfSmoothie, gcfNoExtrusion); + INFO("gcode flavor enum value: " << int(flavor)); + CHECK(std::string(flush_planner_queue_command(flavor)) == "G4 S0\n"); +} From 194ef34080f77d2b14f964279704483c898e15ee Mon Sep 17 00:00:00 2001 From: SoftFever Date: Wed, 5 Aug 2026 17:09:49 +0800 Subject: [PATCH 23/66] Wait in the wipe tower with a millisecond dwell on Klipper The wipe tower's "Delay after unloading" never happened on Klipper. It was emitted as G4 S, and Klipper's G4 reads only the P parameter, in milliseconds, so the pause was silently skipped. The option now produces a dwell Klipper actually performs. Also corrects the planner flush rationale, which cited an extruder position reset that Klipper resolves at parse time and does not need synchronized, and adds end-to-end coverage that slices a two-filament print and checks the emitted wipe tower G-code on both a Klipper and a non-Klipper flavor. No change to any other firmware flavor's output, and no shipped profile sets a non-zero delay, so no shipped profile's output moves either. --- src/libslic3r/GCode/WipeTower.cpp | 9 ++- src/libslic3r/GCode/WipeTower.hpp | 15 ++-- src/libslic3r/GCode/WipeTower2.cpp | 2 +- tests/fff_print/test_wipe_tower.cpp | 111 +++++++++++++++++++++++++++- 4 files changed, 125 insertions(+), 12 deletions(-) diff --git a/src/libslic3r/GCode/WipeTower.cpp b/src/libslic3r/GCode/WipeTower.cpp index cfa407ea73..35d99498eb 100644 --- a/src/libslic3r/GCode/WipeTower.cpp +++ b/src/libslic3r/GCode/WipeTower.cpp @@ -622,6 +622,13 @@ const char* flush_planner_queue_command(GCodeFlavor flavor) return flavor == gcfKlipper ? "M400\n" : "G4 S0\n"; } +std::string wait_command(GCodeFlavor flavor, float seconds) +{ + if (flavor == gcfKlipper) + return "G4 P" + std::to_string(std::lround(seconds * 1000.f)) + "\n"; + return "G4 S" + Slic3r::float_to_string_decimal_point(seconds, 3) + "\n"; +} + class WipeTowerWriter { public: @@ -1150,7 +1157,7 @@ public: { if (time==0.f) return *this; - m_gcode += "G4 S" + Slic3r::float_to_string_decimal_point(time, 3) + "\n"; + m_gcode += wait_command(m_gcode_flavor, time); return *this; } diff --git a/src/libslic3r/GCode/WipeTower.hpp b/src/libslic3r/GCode/WipeTower.hpp index a083da1fb2..e6493378d6 100644 --- a/src/libslic3r/GCode/WipeTower.hpp +++ b/src/libslic3r/GCode/WipeTower.hpp @@ -26,14 +26,17 @@ enum GCodeFlavor : unsigned char; Polylines construct_gap_for_skip_points( const Polygon& polygon, const std::vector& skip_points, float wt_width, float gap_length, Polygon& insert_skip_polygon); -// Returns the command that makes the firmware finish its queued moves, so a command or -// custom-G-code boundary right after (resetting the extruder position, entering -// [change_filament_gcode] / [filament_start_gcode]) is not reached early. Klipper acts on -// such commands the moment it parses them, and its G4 reads only P, so the zero dwell the -// other flavors use synchronizes nothing there — M400 does. Defined in WipeTower.cpp, shared -// by WipeTower and WipeTower2. +// Returns the command that makes the firmware finish its queued moves around an M104/M109 +// or custom-G-code boundary. Klipper acts on commands the instant it parses them, and its G4 +// reads only P, so the zero dwell other flavors use synchronizes nothing there — M400 does. +// Defined in WipeTower.cpp, shared by WipeTower and WipeTower2. const char* flush_planner_queue_command(GCodeFlavor flavor); +// Returns the command that pauses for `seconds`. Klipper's G4 reads only P, in +// milliseconds, and ignores S, so the seconds form the other flavors use would dwell zero +// there. Defined in WipeTower.cpp, shared by WipeTower and WipeTower2. +std::string wait_command(GCodeFlavor flavor, float seconds); + class WipeTower { public: diff --git a/src/libslic3r/GCode/WipeTower2.cpp b/src/libslic3r/GCode/WipeTower2.cpp index 5dc78d4785..d2abf0a155 100644 --- a/src/libslic3r/GCode/WipeTower2.cpp +++ b/src/libslic3r/GCode/WipeTower2.cpp @@ -636,7 +636,7 @@ public: { if (time==0.f) return *this; - m_gcode += "G4 S" + Slic3r::float_to_string_decimal_point(time, 3) + "\n"; + m_gcode += wait_command(m_gcode_flavor, time); return *this; } diff --git a/tests/fff_print/test_wipe_tower.cpp b/tests/fff_print/test_wipe_tower.cpp index de5836ba7a..4ea11f7a2a 100644 --- a/tests/fff_print/test_wipe_tower.cpp +++ b/tests/fff_print/test_wipe_tower.cpp @@ -5,11 +5,17 @@ #include "libslic3r/GCode/WipeTower.hpp" #include "libslic3r/PrintConfig.hpp" -using namespace Slic3r; +#include "test_helpers.hpp" -// The wipe tower flushes the firmware's motion queue before a command or custom-G-code -// boundary that must not be reached early (an extruder-position reset, entering custom -// G-code). Klipper acts on those the moment it parses them, and its G4 reads only P, so the +using namespace Slic3r; +using namespace Slic3r::Test; + +// Pins the enum's size: the two GENERATE lists below hand-list every non-Klipper flavor, so a +// 14th `GCodeFlavor` value would silently go untested unless this fails the build first. +static_assert(int(gcfNoExtrusion) == 12, "GCodeFlavor grew: add the new value to the GENERATE lists in this file"); + +// The wipe tower flushes the firmware's motion queue around an M104/M109 or custom-G-code +// boundary. Klipper acts on those the moment it parses them, and its G4 reads only P, so the // zero dwell every other flavor uses is not a flush there. TEST_CASE("Klipper flushes the wipe tower planner queue with M400", "[WipeTower]") { @@ -25,3 +31,100 @@ TEST_CASE("Other flavors flush the wipe tower planner queue with a zero dwell", INFO("gcode flavor enum value: " << int(flavor)); CHECK(std::string(flush_planner_queue_command(flavor)) == "G4 S0\n"); } + +// A timed pause is emitted in seconds for most firmware. Klipper's G4 reads only P, in +// milliseconds, and ignores S, so the seconds form would pause for no time at all there. +// 1.5s is exactly representable as a float, so neither form can drift when rounded. +TEST_CASE("Klipper waits in the wipe tower with a millisecond dwell", "[WipeTower]") +{ + CHECK(wait_command(gcfKlipper, 1.5f) == "G4 P1500\n"); +} + +TEST_CASE("Other flavors wait in the wipe tower with a seconds dwell", "[WipeTower]") +{ + const GCodeFlavor flavor = GENERATE(gcfMarlinLegacy, gcfRepRapFirmware, gcfRepetier, + gcfMarlinFirmware, gcfRepRapSprinter, gcfTeacup, + gcfMakerWare, gcfSailfish, gcfMach3, gcfMachinekit, + gcfSmoothie, gcfNoExtrusion); + INFO("gcode flavor enum value: " << int(flavor)); + CHECK(wait_command(flavor, 1.5f) == "G4 S1.500\n"); +} + +// The two helpers above are only unit-tested in isolation. Nothing yet confirms that a +// Klipper `gcode_flavor` actually reaches the wipe tower writer and lands in the exported +// G-code, which is the binding constraint of both changes above ("only gcfKlipper changes"). +// These slice a real two-filament print and check that. + +// The G-code between each "WIPE_TOWER_START"/"WIPE_TOWER_END" tag pair the wipe tower writes +// around its toolchange chunks, concatenated. Isolates the region the flush/dwell helpers can +// emit into from ordinary object G-code, where an unrelated M400 (e.g. GCodeProcessor's +// pre-heat injector, gated off here since neither test sets enable_pre_heating) would +// otherwise create a false match. +static std::string wipe_tower_regions(const std::string &gcode) +{ + std::string regions; + size_t pos = 0; + while (true) { + size_t start = gcode.find("WIPE_TOWER_START", pos); + if (start == std::string::npos) + break; + size_t end = gcode.find("WIPE_TOWER_END", start); + if (end == std::string::npos) + break; + regions += gcode.substr(start, end - start); + pos = end + 1; + } + return regions; +} + +// A per-layer toolchange between the wall and infill filaments, same shape as +// test_multifilament.cpp's "Each feature prints with its assigned filament", so the wipe +// tower actually runs its toolchange path (and so `flush_planner_queue()`) on every layer. +static DynamicPrintConfig wipe_tower_toolchange_config(const std::string &gcode_flavor) +{ + return multifilament_config(2, { + { "sparse_infill_filament_id", 1 }, + { "internal_solid_filament_id", 1 }, + { "top_surface_filament_id", 1 }, + { "bottom_surface_filament_id", 1 }, + { "outer_wall_filament_id", 2 }, + { "inner_wall_filament_id", 2 }, + { "enable_prime_tower", true }, + { "gcode_flavor", gcode_flavor }, + }); +} + +// Slices a 20mm cube under `config`. Not just `Test::slice(...)`: a brand-new Print's first +// `apply()` call still has no per-feature regions built, so it undercounts the filaments in +// use and lets DynamicPrintConfig::normalize_fdm_2's "single filament" rule turn +// `enable_prime_tower` back off before the wipe tower ever runs. Applying the same config a +// second time, once init_print's first apply has settled those regions, lets that count see +// both filaments so the prime tower stays on. +static std::string slice_with_prime_tower(const DynamicPrintConfig &config) +{ + Print print; + Model model; + init_print({ cube(20) }, print, model, config); + print.apply(model, config); + return gcode(print); +} + +TEST_CASE("Klipper's wipe tower toolchanges flush the planner queue with M400 in exported G-code", "[WipeTower]") +{ + const std::string gcode = slice_with_prime_tower(wipe_tower_toolchange_config("klipper")); + REQUIRE_THAT(gcode, Catch::Matchers::ContainsSubstring("WIPE_TOWER_START")); + + const std::string tower = wipe_tower_regions(gcode); + CHECK_THAT(tower, Catch::Matchers::ContainsSubstring("M400")); + CHECK_THAT(tower, !Catch::Matchers::ContainsSubstring("G4 S0")); +} + +TEST_CASE("Marlin's wipe tower toolchanges keep the zero-dwell flush in exported G-code", "[WipeTower]") +{ + const std::string gcode = slice_with_prime_tower(wipe_tower_toolchange_config("marlin")); + REQUIRE_THAT(gcode, Catch::Matchers::ContainsSubstring("WIPE_TOWER_START")); + + const std::string tower = wipe_tower_regions(gcode); + CHECK_THAT(tower, Catch::Matchers::ContainsSubstring("G4 S0")); + CHECK_THAT(tower, !Catch::Matchers::ContainsSubstring("M400")); +} From 1d023216f226714b7dd95a41db8bac974e299e36 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Wed, 5 Aug 2026 18:09:36 +0800 Subject: [PATCH 24/66] clean up --- src/libslic3r/GCode/WipeTower.cpp | 2 + src/libslic3r/GCode/WipeTower.hpp | 15 ++-- src/libslic3r/GCode/WipeTower2.cpp | 6 +- tests/fff_print/test_wipe_tower.cpp | 105 +++++++++++++--------------- 4 files changed, 59 insertions(+), 69 deletions(-) diff --git a/src/libslic3r/GCode/WipeTower.cpp b/src/libslic3r/GCode/WipeTower.cpp index 35d99498eb..b97e773e63 100644 --- a/src/libslic3r/GCode/WipeTower.cpp +++ b/src/libslic3r/GCode/WipeTower.cpp @@ -1345,6 +1345,8 @@ public: { std::string buffer; if (wait_for_moves) + // Not flush_planner_queue_command(): this BBL precool path wants M400, which every + // flavor it reaches understands, not the zero dwell the other flavors flush with. buffer += "M400\n"; buffer += "M104"; if (target_extruder != -1) diff --git a/src/libslic3r/GCode/WipeTower.hpp b/src/libslic3r/GCode/WipeTower.hpp index e6493378d6..0819a04f10 100644 --- a/src/libslic3r/GCode/WipeTower.hpp +++ b/src/libslic3r/GCode/WipeTower.hpp @@ -26,16 +26,11 @@ enum GCodeFlavor : unsigned char; Polylines construct_gap_for_skip_points( const Polygon& polygon, const std::vector& skip_points, float wt_width, float gap_length, Polygon& insert_skip_polygon); -// Returns the command that makes the firmware finish its queued moves around an M104/M109 -// or custom-G-code boundary. Klipper acts on commands the instant it parses them, and its G4 -// reads only P, so the zero dwell other flavors use synchronizes nothing there — M400 does. -// Defined in WipeTower.cpp, shared by WipeTower and WipeTower2. -const char* flush_planner_queue_command(GCodeFlavor flavor); - -// Returns the command that pauses for `seconds`. Klipper's G4 reads only P, in -// milliseconds, and ignores S, so the seconds form the other flavors use would dwell zero -// there. Defined in WipeTower.cpp, shared by WipeTower and WipeTower2. -std::string wait_command(GCodeFlavor flavor, float seconds); +// Klipper acts on commands the instant it parses them, and its G4 reads only P (milliseconds), +// so the zero-second and seconds-valued dwells every other flavor uses neither synchronize nor +// pause there. Both defined in WipeTower.cpp, shared by WipeTower and WipeTower2. +const char* flush_planner_queue_command(GCodeFlavor flavor); // finish queued moves, e.g. around M104/M109 +std::string wait_command(GCodeFlavor flavor, float seconds); // pause for `seconds` class WipeTower { diff --git a/src/libslic3r/GCode/WipeTower2.cpp b/src/libslic3r/GCode/WipeTower2.cpp index d2abf0a155..0837bfa908 100644 --- a/src/libslic3r/GCode/WipeTower2.cpp +++ b/src/libslic3r/GCode/WipeTower2.cpp @@ -386,8 +386,8 @@ public: } WipeTowerWriter2& switch_filament_monitoring(bool enable) { - m_gcode += flush_planner_queue_command(m_gcode_flavor); - m_gcode += std::string("M591 ") + (enable ? "R" : "S0") + "\n"; + flush_planner_queue(); + m_gcode += enable ? "M591 R\n" : "M591 S0\n"; return *this; } @@ -626,7 +626,7 @@ public: // Set extruder temperature, don't wait by default. WipeTowerWriter2& set_extruder_temp(int temperature, bool wait = false) { - m_gcode += flush_planner_queue_command(m_gcode_flavor); + flush_planner_queue(); m_gcode += "M" + std::to_string(wait ? 109 : 104) + " S" + std::to_string(temperature) + "\n"; return *this; } diff --git a/tests/fff_print/test_wipe_tower.cpp b/tests/fff_print/test_wipe_tower.cpp index 4ea11f7a2a..bb9e4781d1 100644 --- a/tests/fff_print/test_wipe_tower.cpp +++ b/tests/fff_print/test_wipe_tower.cpp @@ -1,7 +1,9 @@ #include #include +#include +#include "libslic3r/GCode/GCodeProcessor.hpp" #include "libslic3r/GCode/WipeTower.hpp" #include "libslic3r/PrintConfig.hpp" @@ -10,13 +12,22 @@ using namespace Slic3r; using namespace Slic3r::Test; -// Pins the enum's size: the two GENERATE lists below hand-list every non-Klipper flavor, so a -// 14th `GCodeFlavor` value would silently go untested unless this fails the build first. -static_assert(int(gcfNoExtrusion) == 12, "GCodeFlavor grew: add the new value to the GENERATE lists in this file"); +// Taken from the config enum map rather than hand-listed, so a flavor added to GCodeFlavor later +// is covered here without editing this file. +static std::vector non_klipper_flavors() +{ + std::vector flavors; + for (const auto &[name, value] : ConfigOptionEnum::get_enum_values()) + if (GCodeFlavor(value) != gcfKlipper) + flavors.push_back(GCodeFlavor(value)); + return flavors; +} + +static std::string flavor_name(GCodeFlavor flavor) +{ + return ConfigOptionEnum::get_enum_names()[int(flavor)]; +} -// The wipe tower flushes the firmware's motion queue around an M104/M109 or custom-G-code -// boundary. Klipper acts on those the moment it parses them, and its G4 reads only P, so the -// zero dwell every other flavor uses is not a flush there. TEST_CASE("Klipper flushes the wipe tower planner queue with M400", "[WipeTower]") { CHECK(std::string(flush_planner_queue_command(gcfKlipper)) == "M400\n"); @@ -24,16 +35,11 @@ TEST_CASE("Klipper flushes the wipe tower planner queue with M400", "[WipeTower] TEST_CASE("Other flavors flush the wipe tower planner queue with a zero dwell", "[WipeTower]") { - const GCodeFlavor flavor = GENERATE(gcfMarlinLegacy, gcfRepRapFirmware, gcfRepetier, - gcfMarlinFirmware, gcfRepRapSprinter, gcfTeacup, - gcfMakerWare, gcfSailfish, gcfMach3, gcfMachinekit, - gcfSmoothie, gcfNoExtrusion); - INFO("gcode flavor enum value: " << int(flavor)); + const GCodeFlavor flavor = GENERATE(from_range(non_klipper_flavors())); + INFO("gcode flavor: " << flavor_name(flavor)); CHECK(std::string(flush_planner_queue_command(flavor)) == "G4 S0\n"); } -// A timed pause is emitted in seconds for most firmware. Klipper's G4 reads only P, in -// milliseconds, and ignores S, so the seconds form would pause for no time at all there. // 1.5s is exactly representable as a float, so neither form can drift when rounded. TEST_CASE("Klipper waits in the wipe tower with a millisecond dwell", "[WipeTower]") { @@ -42,44 +48,39 @@ TEST_CASE("Klipper waits in the wipe tower with a millisecond dwell", "[WipeTowe TEST_CASE("Other flavors wait in the wipe tower with a seconds dwell", "[WipeTower]") { - const GCodeFlavor flavor = GENERATE(gcfMarlinLegacy, gcfRepRapFirmware, gcfRepetier, - gcfMarlinFirmware, gcfRepRapSprinter, gcfTeacup, - gcfMakerWare, gcfSailfish, gcfMach3, gcfMachinekit, - gcfSmoothie, gcfNoExtrusion); - INFO("gcode flavor enum value: " << int(flavor)); + const GCodeFlavor flavor = GENERATE(from_range(non_klipper_flavors())); + INFO("gcode flavor: " << flavor_name(flavor)); CHECK(wait_command(flavor, 1.5f) == "G4 S1.500\n"); } -// The two helpers above are only unit-tested in isolation. Nothing yet confirms that a -// Klipper `gcode_flavor` actually reaches the wipe tower writer and lands in the exported -// G-code, which is the binding constraint of both changes above ("only gcfKlipper changes"). -// These slice a real two-filament print and check that. +// The cases above only exercise the helpers in isolation. The one below slices a real +// two-filament print, so it also covers the binding constraint of both changes: that the +// configured `gcode_flavor` reaches the wipe tower writer and lands in the exported G-code. -// The G-code between each "WIPE_TOWER_START"/"WIPE_TOWER_END" tag pair the wipe tower writes -// around its toolchange chunks, concatenated. Isolates the region the flush/dwell helpers can -// emit into from ordinary object G-code, where an unrelated M400 (e.g. GCodeProcessor's -// pre-heat injector, gated off here since neither test sets enable_pre_heating) would -// otherwise create a false match. +// The G-code inside each WIPE_TOWER_START/WIPE_TOWER_END pair, concatenated, so an M400 emitted +// outside the tower (e.g. GCodeProcessor's pre-heat injector) cannot create a false match. static std::string wipe_tower_regions(const std::string &gcode) { + const std::string &start_tag = GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Wipe_Tower_Start); + const std::string &end_tag = GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Wipe_Tower_End); std::string regions; size_t pos = 0; while (true) { - size_t start = gcode.find("WIPE_TOWER_START", pos); + size_t start = gcode.find(start_tag, pos); if (start == std::string::npos) break; - size_t end = gcode.find("WIPE_TOWER_END", start); + size_t end = gcode.find(end_tag, start); if (end == std::string::npos) break; - regions += gcode.substr(start, end - start); + regions.append(gcode, start, end - start); pos = end + 1; } return regions; } // A per-layer toolchange between the wall and infill filaments, same shape as -// test_multifilament.cpp's "Each feature prints with its assigned filament", so the wipe -// tower actually runs its toolchange path (and so `flush_planner_queue()`) on every layer. +// test_multifilament.cpp's "Each feature prints with its assigned filament", so the wipe tower +// runs its toolchange path (and so `flush_planner_queue()`) on every layer. static DynamicPrintConfig wipe_tower_toolchange_config(const std::string &gcode_flavor) { return multifilament_config(2, { @@ -90,41 +91,33 @@ static DynamicPrintConfig wipe_tower_toolchange_config(const std::string &gcode_ { "outer_wall_filament_id", 2 }, { "inner_wall_filament_id", 2 }, { "enable_prime_tower", true }, + { "layer_height", 0.3 }, { "gcode_flavor", gcode_flavor }, }); } -// Slices a 20mm cube under `config`. Not just `Test::slice(...)`: a brand-new Print's first -// `apply()` call still has no per-feature regions built, so it undercounts the filaments in -// use and lets DynamicPrintConfig::normalize_fdm_2's "single filament" rule turn -// `enable_prime_tower` back off before the wipe tower ever runs. Applying the same config a -// second time, once init_print's first apply has settled those regions, lets that count see -// both filaments so the prime tower stays on. +// Slices a 10mm cube under `config`. Not plain Test::slice: a brand-new Print's first `apply()` +// counts one filament in use, and DynamicPrintConfig::normalize_fdm_2's single-filament rule then +// clears `enable_prime_tower`. A second apply, once init_print's regions have settled, sees both +// filaments and the tower survives. static std::string slice_with_prime_tower(const DynamicPrintConfig &config) { Print print; Model model; - init_print({ cube(20) }, print, model, config); + init_print({ cube(10) }, print, model, config); print.apply(model, config); return gcode(print); } -TEST_CASE("Klipper's wipe tower toolchanges flush the planner queue with M400 in exported G-code", "[WipeTower]") +TEST_CASE("The wipe tower's toolchange planner flush follows the gcode flavor", "[WipeTower]") { - const std::string gcode = slice_with_prime_tower(wipe_tower_toolchange_config("klipper")); - REQUIRE_THAT(gcode, Catch::Matchers::ContainsSubstring("WIPE_TOWER_START")); - - const std::string tower = wipe_tower_regions(gcode); - CHECK_THAT(tower, Catch::Matchers::ContainsSubstring("M400")); - CHECK_THAT(tower, !Catch::Matchers::ContainsSubstring("G4 S0")); -} - -TEST_CASE("Marlin's wipe tower toolchanges keep the zero-dwell flush in exported G-code", "[WipeTower]") -{ - const std::string gcode = slice_with_prime_tower(wipe_tower_toolchange_config("marlin")); - REQUIRE_THAT(gcode, Catch::Matchers::ContainsSubstring("WIPE_TOWER_START")); - - const std::string tower = wipe_tower_regions(gcode); - CHECK_THAT(tower, Catch::Matchers::ContainsSubstring("G4 S0")); - CHECK_THAT(tower, !Catch::Matchers::ContainsSubstring("M400")); + auto [flavor, expected, unexpected] = GENERATE(table({ + { "klipper", "M400", "G4 S0" }, + { "marlin", "G4 S0", "M400" } })); + DYNAMIC_SECTION(flavor) { + const std::string tower = wipe_tower_regions(slice_with_prime_tower(wipe_tower_toolchange_config(flavor))); + REQUIRE_FALSE(tower.empty()); + CHECK_THAT(tower, Catch::Matchers::ContainsSubstring(expected)); + CHECK_THAT(tower, !Catch::Matchers::ContainsSubstring(unexpected)); + } } From 23bd320076056dd40a141869ee848633799227ea Mon Sep 17 00:00:00 2001 From: "Dipl.-Ing. Raoul Rubien, BSc" Date: Wed, 5 Aug 2026 15:41:04 +0200 Subject: [PATCH 25/66] Fixes 2 Bugs and 13 Compiler Warnings (#10670) * fixes: %g directive writing between 1 and 13 bytes into a region of size between 6 and 18 [-Wformat-overflow=] * fixes: %5s directive writing between 5 and 63 bytes into a region of size 58 [-Wformat-overflow=] * fixes: catching polymorphic type by value [-Wcatch-value=] * fixes: [-Wcomment]; removes whitespaces * increases buffer size from 71B to 90B to avoid potential ovfl. --- src/OrcaSlicer.cpp | 2 +- src/libslic3r/AppConfig.cpp | 2 +- src/libslic3r/Fill/FillRectilinear.cpp | 2 +- src/libslic3r/Format/STEP.cpp | 2 +- src/libslic3r/GCode.cpp | 2 +- src/slic3r/GUI/DeviceTab/uiAmsHumidityPopup.cpp | 8 ++++---- src/slic3r/GUI/DeviceTab/uiAmsHumidityPopup.h | 10 +++++----- src/slic3r/GUI/DeviceTab/uiDeviceUpdateVersion.cpp | 8 ++++---- src/slic3r/GUI/DeviceTab/uiDeviceUpdateVersion.h | 8 ++++---- src/slic3r/GUI/GUI_ObjectList.cpp | 2 +- src/slic3r/GUI/IMSlider.cpp | 2 +- src/slic3r/GUI/SelectMachine.cpp | 13 ++++++------- 12 files changed, 30 insertions(+), 31 deletions(-) diff --git a/src/OrcaSlicer.cpp b/src/OrcaSlicer.cpp index e0a15209a3..71d6ffde80 100644 --- a/src/OrcaSlicer.cpp +++ b/src/OrcaSlicer.cpp @@ -7054,7 +7054,7 @@ int CLI::run(int argc, char **argv) gcode_viewer.render_calibration_thumbnail(*calibration_data, cali_thumbnail_width, cali_thumbnail_height, calibration_params, partplate_list, opengl_mgr); //generate_calibration_thumbnail(*calibration_data, thumbnail_width, thumbnail_height, calibration_params); - //*plate_bboxes[index] = p->generate_first_layer_bbox(); + // *plate_bboxes[index] = p->generate_first_layer_bbox(); calibration_thumbnails.push_back(calibration_data);*/ PlateBBoxData* plate_bbox = new PlateBBoxData(); diff --git a/src/libslic3r/AppConfig.cpp b/src/libslic3r/AppConfig.cpp index 1b170bf884..a5d0e24eac 100644 --- a/src/libslic3r/AppConfig.cpp +++ b/src/libslic3r/AppConfig.cpp @@ -883,7 +883,7 @@ std::string AppConfig::load() } } } - } catch(std::exception err) { + } catch(const std::exception &err) { BOOST_LOG_TRIVIAL(info) << format("parse app config \"%1%\", error: %2%", AppConfig::loading_path(), err.what()); return err.what(); diff --git a/src/libslic3r/Fill/FillRectilinear.cpp b/src/libslic3r/Fill/FillRectilinear.cpp index 138b50bc88..8b40b8753c 100644 --- a/src/libslic3r/Fill/FillRectilinear.cpp +++ b/src/libslic3r/Fill/FillRectilinear.cpp @@ -3576,7 +3576,7 @@ Polylines FillLateralHoneycomb::fill_surface(const Surface *surface, const FillP // | // | // 0 --+-- - // / \ + // ⟋ ⟍ // why inverted? // it makes determining some of the properties easier // and the two angled legs provide additional horizontal stiffness diff --git a/src/libslic3r/Format/STEP.cpp b/src/libslic3r/Format/STEP.cpp index 8b07286c5b..f82ced7d86 100644 --- a/src/libslic3r/Format/STEP.cpp +++ b/src/libslic3r/Format/STEP.cpp @@ -712,7 +712,7 @@ unsigned int Step::get_triangle_num(double linear_deflection, double angle_defle return 0; } } - } catch(Exception e) { + } catch(const Exception &e) { return 0; } diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index babe018651..b898284d89 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -5511,7 +5511,7 @@ LayerResult GCode::process_layer( // add tag for processor gcode += ";" + GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Layer_Change) + "\n"; // export layer z - char buf[64]; + char buf[80]; sprintf(buf, print.is_BBL_printer() ? "; Z_HEIGHT: %g\n" : ";Z:%g\n", print_z); gcode += buf; // export layer height diff --git a/src/slic3r/GUI/DeviceTab/uiAmsHumidityPopup.cpp b/src/slic3r/GUI/DeviceTab/uiAmsHumidityPopup.cpp index 33e9cdf518..259506612d 100644 --- a/src/slic3r/GUI/DeviceTab/uiAmsHumidityPopup.cpp +++ b/src/slic3r/GUI/DeviceTab/uiAmsHumidityPopup.cpp @@ -1,9 +1,9 @@ -//**********************************************************/ -/* File: uiAmsHumidityPopup.cpp +/********************************************************** +* File: uiAmsHumidityPopup.cpp * Description: The popup with DevAms Humidity * * \n class uiAmsHumidityPopup -//**********************************************************/ +**********************************************************/ #include "uiAmsHumidityPopup.h" @@ -191,4 +191,4 @@ void uiAmsPercentHumidityDryPopup::msw_rescale() } // namespace GUI -} // namespace Slic3r \ No newline at end of file +} // namespace Slic3r diff --git a/src/slic3r/GUI/DeviceTab/uiAmsHumidityPopup.h b/src/slic3r/GUI/DeviceTab/uiAmsHumidityPopup.h index 0f22c6b662..a109381c86 100644 --- a/src/slic3r/GUI/DeviceTab/uiAmsHumidityPopup.h +++ b/src/slic3r/GUI/DeviceTab/uiAmsHumidityPopup.h @@ -1,9 +1,9 @@ -//**********************************************************/ -/* File: uiAmsHumidityPopup.h +/********************************************************** +* File: uiAmsHumidityPopup.h * Description: The popup with DevAms Humidity * * \n class uiAmsHumidityPopup -//**********************************************************/ +**********************************************************/ #pragma once #include "slic3r/GUI/Widgets/AMSItem.hpp" @@ -68,7 +68,7 @@ private: wxStaticBitmap* m_dry_state_img; Label* m_dry_state; - + Label* m_humidity_header; Label* m_humidity_label; @@ -81,4 +81,4 @@ private: wxSizer* m_sizer; }; -}} // namespace Slic3r::GUI \ No newline at end of file +}} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/DeviceTab/uiDeviceUpdateVersion.cpp b/src/slic3r/GUI/DeviceTab/uiDeviceUpdateVersion.cpp index 5167f482b8..59fc8809ce 100644 --- a/src/slic3r/GUI/DeviceTab/uiDeviceUpdateVersion.cpp +++ b/src/slic3r/GUI/DeviceTab/uiDeviceUpdateVersion.cpp @@ -1,9 +1,9 @@ -//**********************************************************/ -/* File: uiDeviceUpdateVersion.cpp +/********************************************************** +* File: uiDeviceUpdateVersion.cpp * Description: The panel with firmware info * * \n class uiDeviceUpdateVersion -//**********************************************************/ +**********************************************************/ #include "uiDeviceUpdateVersion.h" @@ -114,4 +114,4 @@ void uiDeviceUpdateVersion::CreateWidgets() Layout(); wxGetApp().UpdateDarkUIWin(this); -} \ No newline at end of file +} diff --git a/src/slic3r/GUI/DeviceTab/uiDeviceUpdateVersion.h b/src/slic3r/GUI/DeviceTab/uiDeviceUpdateVersion.h index 100280db62..342067e374 100644 --- a/src/slic3r/GUI/DeviceTab/uiDeviceUpdateVersion.h +++ b/src/slic3r/GUI/DeviceTab/uiDeviceUpdateVersion.h @@ -1,9 +1,9 @@ -//**********************************************************/ -/* File: uiDeviceUpdateVersion.h +/********************************************************** +* File: uiDeviceUpdateVersion.h * Description: The panel with firmware info * * \n class uiDeviceUpdateVersion -//**********************************************************/ +**********************************************************/ #pragma once #include @@ -44,4 +44,4 @@ private: wxStaticText* m_dev_version; wxStaticBitmap* m_dev_upgrade_indicator; }; -};// end of namespace Slic3r::GUI \ No newline at end of file +};// end of namespace Slic3r::GUI diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index b23b554a74..dc89f5f9bb 100644 --- a/src/slic3r/GUI/GUI_ObjectList.cpp +++ b/src/slic3r/GUI/GUI_ObjectList.cpp @@ -3213,7 +3213,7 @@ void ObjectList::merge(bool to_multipart_object) //changed_object(obj_idx); //remove(); } - /* wxGetApp().plater()->load_model_objects(objects); + // wxGetApp().plater()->load_model_objects(objects); Selection& selection = p->view3D->get_canvas3d()->get_selection(); size_t last_obj_idx = p->model.objects.size() - 1; diff --git a/src/slic3r/GUI/IMSlider.cpp b/src/slic3r/GUI/IMSlider.cpp index 35f4761257..c008963646 100644 --- a/src/slic3r/GUI/IMSlider.cpp +++ b/src/slic3r/GUI/IMSlider.cpp @@ -1733,7 +1733,7 @@ std::string IMSlider::get_label(int tick, LabelType label_type) ::sprintf(layer_height, "%.2f", m_values.empty() ? m_label_koef * value : m_values[value]); if (label_type == ltHeight) return std::string(layer_height); if (label_type == ltHeightWithLayer) { - char buffer[64]; + char buffer[90]; size_t layer_number; layer_number = m_draw_mode == dmSequentialFffPrint ? (m_values.empty() ? value : value + 1) : m_is_wipe_tower ? get_layer_number(value, label_type) + 1 : (m_values.empty() ? value : value + 1); ::sprintf(buffer, "%5s\n%5s", std::to_string(layer_number).c_str(), layer_height); diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index 1ab78fcc11..6cc988b879 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -3629,7 +3629,7 @@ void SelectMachineDialog::on_send_print() BOOST_LOG_TRIVIAL(error) << "build_nozzle_info errors"; } - m_print_job->sdcard_state = obj_->GetStorage()->get_sdcard_state(); + m_print_job->sdcard_state = obj_->GetStorage()->get_sdcard_state(); m_print_job->has_sdcard = wxGetApp().app_config->get("allow_abnormal_storage") == "true" ? (m_print_job->sdcard_state == DevStorage::SdcardState::HAS_SDCARD_NORMAL || m_print_job->sdcard_state == DevStorage::SdcardState::HAS_SDCARD_ABNORMAL) @@ -3868,12 +3868,11 @@ _compare_obj_names(MachineObject* obj1, MachineObject* obj2) } /******************************************************************* -*@note _collect_machine_list -*@param dev_manager -- the device manager -*@param sorted_machine_objs -- return the sorted machine objects -*@param best_one -- return the best one -*/ -/*******************************************************************/ +* @note _collect_machine_list +* @param dev_manager -- the device manager +* @param sorted_machine_objs -- return the sorted machine objects +* @param best_one -- return the best one +*******************************************************************/ static void _collect_sorted_machines(Slic3r::DeviceManager* dev_manager, std::vector& sorted_machine_objs) From 7fbfb7ba879852b02de3670479a31883993376df Mon Sep 17 00:00:00 2001 From: "Dipl.-Ing. Raoul Rubien, BSc" Date: Wed, 5 Aug 2026 15:42:15 +0200 Subject: [PATCH 26/66] Fixes 14 Compiler Warnings [-Wmaybe-uninitialized] (#10778) * fixes: may be used uninitialized [-Wmaybe-uninitialized] * fixes: may be used uninitialized [-Wmaybe-uninitialized] * fixes: may be used uninitialized [-Wmaybe-uninitialized] * fixes: may be used uninitialized [-Wmaybe-uninitialized] * reverts {} initializer to = to keep code style consistent --- src/libslic3r/AABBMesh.cpp | 15 +++++++-------- src/libslic3r/Measure.hpp | 2 +- src/libslic3r/SLA/IndexedMesh.cpp | 8 ++++---- src/slic3r/Utils/RaycastManager.cpp | 2 +- 4 files changed, 13 insertions(+), 14 deletions(-) diff --git a/src/libslic3r/AABBMesh.cpp b/src/libslic3r/AABBMesh.cpp index a23fd69f68..be026f69d7 100644 --- a/src/libslic3r/AABBMesh.cpp +++ b/src/libslic3r/AABBMesh.cpp @@ -54,12 +54,12 @@ public: int & i, Eigen::Matrix &closest) { - size_t idx_unsigned = 0; - Vec3d closest_vec3d(closest); - double dist = + size_t idx_unsigned { 0 }; + Vec3d closest_vec3d { Vec3d::Zero() }; + const double dist { AABBTreeIndirect::squared_distance_to_indexed_triangle_set( its.vertices, its.indices, m_tree, point, idx_unsigned, - closest_vec3d); + closest_vec3d) }; i = int(idx_unsigned); closest = closest_vec3d; return dist; @@ -311,10 +311,9 @@ AABBMesh::hit_result IndexedMesh::filter_hits( double AABBMesh::squared_distance(const Vec3d &p, int& i, Vec3d& c) const { - double sqdst = 0; - Eigen::Matrix pp = p; - Eigen::Matrix cc; - sqdst = m_aabb->squared_distance(*m_tm, pp, i, cc); + const Eigen::Matrix pp { p }; + Eigen::Matrix cc { Vec3d::Zero() }; + const double sqdst { m_aabb->squared_distance(*m_tm, pp, i, cc) }; c = cc; return sqdst; } diff --git a/src/libslic3r/Measure.hpp b/src/libslic3r/Measure.hpp index 614b443131..2f378f5778 100644 --- a/src/libslic3r/Measure.hpp +++ b/src/libslic3r/Measure.hpp @@ -94,7 +94,7 @@ public: void* volume{nullptr}; std::vector* plane_indices{nullptr}; - Transform3d world_tran; + Transform3d world_tran = Transform3d::Identity(); std::shared_ptr> world_plane_features{nullptr}; std::shared_ptr origin_surface_feature{nullptr}; diff --git a/src/libslic3r/SLA/IndexedMesh.cpp b/src/libslic3r/SLA/IndexedMesh.cpp index b879e3f48b..65d9d90b34 100644 --- a/src/libslic3r/SLA/IndexedMesh.cpp +++ b/src/libslic3r/SLA/IndexedMesh.cpp @@ -56,12 +56,12 @@ public: int & i, Eigen::Matrix &closest) { - size_t idx_unsigned = 0; - Vec3d closest_vec3d(closest); - double dist = + size_t idx_unsigned { 0 }; + Vec3d closest_vec3d { Vec3d::Zero() }; + const double dist { AABBTreeIndirect::squared_distance_to_indexed_triangle_set( its.vertices, its.indices, m_tree, point, idx_unsigned, - closest_vec3d); + closest_vec3d) }; i = int(idx_unsigned); closest = closest_vec3d; return dist; diff --git a/src/slic3r/Utils/RaycastManager.cpp b/src/slic3r/Utils/RaycastManager.cpp index c51a19ebd9..62c7a922d7 100644 --- a/src/slic3r/Utils/RaycastManager.cpp +++ b/src/slic3r/Utils/RaycastManager.cpp @@ -107,7 +107,7 @@ std::optional RaycastManager::first_hit(const Vec3d& point, const AABBMesh *hit_mesh = nullptr; double hit_squared_distance = 0.; int hit_face = -1; - Vec3d hit_world; + Vec3d hit_world { Vec3d::Zero() }; const Transform3d *hit_tramsformation = nullptr; const TrKey *hit_key = nullptr; From f73566dd2b9c88178a39d0149cd799914f0b7aa0 Mon Sep 17 00:00:00 2001 From: "Dipl.-Ing. Raoul Rubien, BSc" Date: Wed, 5 Aug 2026 15:45:48 +0200 Subject: [PATCH 27/66] Fixes 1 Technical Debt and 3 Compiler Warnings [-Wclass-memaccess] (#10707) * fixes: memcpy(...) writing to an object of type OrientParams with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess] * review result: replaces anonymous namespace with static --- src/libslic3r/Orient.hpp | 120 +++++++++--------------------- src/slic3r/GUI/Jobs/OrientJob.cpp | 43 ++++++++++- 2 files changed, 76 insertions(+), 87 deletions(-) diff --git a/src/libslic3r/Orient.hpp b/src/libslic3r/Orient.hpp index 30dbdd3a20..370f23d4fb 100644 --- a/src/libslic3r/Orient.hpp +++ b/src/libslic3r/Orient.hpp @@ -48,100 +48,50 @@ struct OrientMesh { }; -// params for minimizing support area -struct OrientParamsArea { - float TAR_A = 0.015f; - float TAR_B = 0.177f; - float RELATIVE_F = 20; - float CONTOUR_F = 0.5f; - float BOTTOM_F = 2.5f; - float BOTTOM_HULL_F = 0.1f; - float TAR_C = 0.1f; - float TAR_D = 1; - float TAR_E = 0.0115f; - float FIRST_LAY_H = 0.2f;//0.0475; - float VECTOR_TOL = -0.00083f; - float NEGL_FACE_SIZE = 0.01f; - float ASCENT = -0.5f; - float PLAFOND_ADV = 0.0599f; - float CONTOUR_AMOUNT = 0.0182427f; - float OV_H = 2.574f; - float height_offset = 2.3728f; - float height_log = 0.041375f; - float height_log_k = 1.9325457f; - float LAF_MAX = 0.999f; // cos(1.4\degree) for low angle face 0.9997f - float LAF_MIN = 0.97f; // cos(14\degree) 0.9703f - float TAR_LAF = 0.001f; //0.01f - float TAR_PROJ_AREA = 0.1f; - float BOTTOM_MIN = 0.1f; // min bottom area. If lower than it the object may be unstable - float BOTTOM_MAX = 2000; // max bottom area. If get to it the object is stable enough (further increase bottom area won't do more help) - float height_to_bottom_hull_ratio_MIN = 1; - float BOTTOM_HULL_MAX = 2000;// max bottom hull area - float APPERANCE_FACE_SUPP=3; // penalty of generating supports on appearance face - - float overhang_angle = 60.f; - bool use_low_angle_face = true; - bool min_volume = false; - Eigen::Vector3f fun_dir; - - /// Allow parallel execution. - bool parallel = true; - - /// Progress indicator callback called when an object gets packed. - /// The unsigned argument is the number of items remaining to pack. - std::function progressind = {}; - - /// A predicate returning true if abort is needed. - std::function stopcondition = {}; - - OrientParamsArea() = default; -}; - struct OrientParams { - float TAR_A = 0.01f;//0.128f; - float TAR_B = 0.177f; - float RELATIVE_F= 6.610621027964314f; - float CONTOUR_F = 0.23228623269775997f; - float BOTTOM_F = 1.167152017941474f; - float BOTTOM_HULL_F = 0.1f; - float TAR_C = 0.24308070476924726f; - float TAR_D = 0.6284515508160871f; - float TAR_E = 0;//0.032157292647062234; - float FIRST_LAY_H = 0.2f;//0.029; - float VECTOR_TOL = -0.0011163303070972383f; - float NEGL_FACE_SIZE = 0.1f; - float ASCENT= -0.5f; - float PLAFOND_ADV = 0.04079208948120519f; - float CONTOUR_AMOUNT = 0.0101472219892684f; - float OV_H = 1.0370178217794535f; - float height_offset = 2.7417608343142073f; - float height_log = 0.06442030687034085f; - float height_log_k = 0.3933594673063997f; - float LAF_MAX = 0.999f; // cos(1.4\degree) for low angle face //0.9997f; - float LAF_MIN= 0.9703f; // cos(14\degree) 0.9703f; - float TAR_LAF = 0.01f; //0.1f - float TAR_PROJ_AREA = 0.1f; - float BOTTOM_MIN = 0.1f; // min bottom area. If lower than it the objects may be unstable - float BOTTOM_MAX = 2000; //400 - float height_to_bottom_hull_ratio_MIN = 1; - float BOTTOM_HULL_MAX = 2000;// max bottom hull area to clip //600 - float APPERANCE_FACE_SUPP=3; // penalty of generating supports on appearance face - - float overhang_angle = 60.f; - bool use_low_angle_face = true; - bool min_volume = false; - Eigen::Vector3f fun_dir; + float TAR_A { 0.01f }; // 0.128f; + float TAR_B { 0.177f }; + float RELATIVE_F { 6.610621027964314f }; + float CONTOUR_F { 0.23228623269775997f }; + float BOTTOM_F { 1.167152017941474f }; + float BOTTOM_HULL_F { 0.1f }; + float TAR_C { 0.24308070476924726f }; + float TAR_D { 0.6284515508160871f }; + float TAR_E { 0}; // 0.032157292647062234; + float FIRST_LAY_H { 0.2f}; // 0.029; + float VECTOR_TOL { -0.0011163303070972383f }; + float NEGL_FACE_SIZE { 0.1f }; + float ASCENT { -0.5f }; + float PLAFOND_ADV { 0.04079208948120519f }; + float CONTOUR_AMOUNT { 0.0101472219892684f }; + float OV_H { 1.0370178217794535f }; + float height_offset { 2.7417608343142073f }; + float height_log { 0.06442030687034085f }; + float height_log_k { 0.3933594673063997f }; + float LAF_MAX { 0.999f }; // cos(1.4\degree) for low angle face //0.9997f; + float LAF_MIN { 0.9703f }; // cos(14\degree) 0.9703f; + float TAR_LAF { 0.01f }; // 0.1f + float TAR_PROJ_AREA { 0.1f }; + float BOTTOM_MIN { 0.1f }; // min bottom area. If lower than it the objects may be unstable + float BOTTOM_MAX { 2000 }; // 400 + float height_to_bottom_hull_ratio_MIN { 1 }; + float BOTTOM_HULL_MAX { 2000 }; // max bottom hull area to clip //600 + float APPERANCE_FACE_SUPP { 3 }; // penalty of generating supports on appearance face + float overhang_angle { 60.f }; + bool use_low_angle_face { true }; + bool min_volume { false }; + Eigen::Vector3f fun_dir {}; /// Allow parallel execution. - bool parallel = false; + bool parallel { false }; /// Progress indicator callback called when an object gets packed. /// The unsigned argument is the number of items remaining to pack. - std::function progressind = {}; + std::function progressind {}; /// A predicate returning true if abort is needed. - std::function stopcondition = {}; + std::function stopcondition {}; OrientParams() = default; }; diff --git a/src/slic3r/GUI/Jobs/OrientJob.cpp b/src/slic3r/GUI/Jobs/OrientJob.cpp index 7347bad6a2..ee8ea875c0 100644 --- a/src/slic3r/GUI/Jobs/OrientJob.cpp +++ b/src/slic3r/GUI/Jobs/OrientJob.cpp @@ -149,6 +149,46 @@ void OrientJob::prepare() } } +/// parameters to minimize support area +static void setMinimalSupportAreaPrams(Slic3r::orientation::OrientParams &out) +{ + out.TAR_A = 0.015f; + out.TAR_B = 0.177f; + out.RELATIVE_F = 20; + out.CONTOUR_F = 0.5f; + out.BOTTOM_F = 2.5f; + out.BOTTOM_HULL_F = 0.1f; + out.TAR_C = 0.1f; + out.TAR_D = 1; + out.TAR_E = 0.0115f; + out.FIRST_LAY_H = 0.2f; // 0.0475; + out.VECTOR_TOL = -0.00083f; + out.NEGL_FACE_SIZE = 0.01f; + out.ASCENT = -0.5f; + out.PLAFOND_ADV = 0.0599f; + out.CONTOUR_AMOUNT = 0.0182427f; + out.OV_H = 2.574f; + out.height_offset = 2.3728f; + out.height_log = 0.041375f; + out.height_log_k = 1.9325457f; + out.LAF_MAX = 0.999f; // cos(1.4\degree) for low angle face 0.9997f + out.LAF_MIN = 0.97f; // cos(14\degree) 0.9703f + out.TAR_LAF = 0.001f; // 0.01f + out.TAR_PROJ_AREA = 0.1f; + out.BOTTOM_MIN = 0.1f; // min bottom area. If lower than it the object may be unstable + out.BOTTOM_MAX = 2000; // max bottom area. If get to it the object is stable enough (further increase bottom area won't do more help) + out.height_to_bottom_hull_ratio_MIN = 1, + out.BOTTOM_HULL_MAX = 2000; // max bottom hull area + out.APPERANCE_FACE_SUPP = 3; // penalty of generating supports on appearance face + out.overhang_angle = 60.f; + out.use_low_angle_face = true; + out.min_volume = false; + out.fun_dir = {}; + out.parallel = true; + out.progressind = {}; + out.stopcondition = {}; +} + void OrientJob::process(Ctl &ctl) { static const auto arrangestr = _u8L("Orienting..."); @@ -161,9 +201,8 @@ void OrientJob::process(Ctl &ctl) const GLCanvas3D::OrientSettings& settings = m_plater->canvas3D()->get_orient_settings(); orientation::OrientParams params; - orientation::OrientParamsArea params_area; if (settings.min_area) { - memcpy(¶ms, ¶ms_area, sizeof(params)); + setMinimalSupportAreaPrams(params); params.min_volume = false; } else { From b97ca3c0ace8cb04eb520d86417fbe13b7ddbdde Mon Sep 17 00:00:00 2001 From: Alexander Haibl Date: Wed, 5 Aug 2026 21:25:34 +0200 Subject: [PATCH 28/66] disable arc_fitting for K1 potato mcu (#14654) --- .../process/0.08mm SuperDetail @Creality K1 (0.4 nozzle).json | 2 +- .../0.08mm SuperDetail @Creality K1 Max_CFS-C 0.4 nozzle.json | 2 +- .../process/0.08mm SuperDetail @Creality K1C 0.4 nozzle.json | 2 +- .../0.08mm SuperDetail @Creality K1C_CFS-C 0.4 nozzle.json | 2 +- .../0.08mm SuperDetail @Creality K1Max (0.4 nozzle).json | 2 +- .../0.08mm SuperDetail @Creality K1_CFS-C 0.4 nozzle.json | 2 +- .../process/0.16mm Optimal @Creality K1 (0.4 nozzle).json | 2 +- .../0.16mm Optimal @Creality K1 Max_CFS-C 0.4 nozzle.json | 2 +- .../process/0.16mm Optimal @Creality K1 SE 0.4 nozzle.json | 2 +- .../0.16mm Optimal @Creality K1 SE_CFS-C 0.4 nozzle.json | 2 +- .../process/0.16mm Optimal @Creality K1C 0.4 nozzle.json | 2 +- .../process/0.16mm Optimal @Creality K1C_CFS-C 0.4 nozzle.json | 2 +- .../process/0.16mm Optimal @Creality K1Max (0.4 nozzle).json | 2 +- .../process/0.16mm Optimal @Creality K1_CFS-C 0.4 nozzle.json | 2 +- .../process/0.20mm Standard @Creality K1 (0.4 nozzle).json | 2 +- .../0.20mm Standard @Creality K1 Max_CFS-C 0.4 nozzle.json | 2 +- .../Creality/process/0.20mm Standard @Creality K1 SE 0.4.json | 2 +- .../0.20mm Standard @Creality K1 SE_CFS-C 0.4 nozzle.json | 2 +- .../process/0.20mm Standard @Creality K1C 0.4 nozzle.json | 2 +- .../process/0.20mm Standard @Creality K1C_CFS-C 0.4 nozzle.json | 2 +- .../process/0.20mm Standard @Creality K1Max (0.4 nozzle).json | 2 +- .../process/0.20mm Standard @Creality K1_CFS-C 0.4 nozzle.json | 2 +- .../process/0.24mm Draft @Creality K1 (0.4 nozzle).json | 2 +- .../process/0.24mm Draft @Creality K1 Max_CFS-C 0.4 nozzle.json | 2 +- .../process/0.24mm Draft @Creality K1 SE 0.4 nozzle.json | 2 +- .../process/0.24mm Draft @Creality K1 SE_CFS-C 0.4 nozzle.json | 2 +- .../Creality/process/0.24mm Draft @Creality K1C 0.4 nozzle.json | 2 +- .../process/0.24mm Draft @Creality K1C_CFS-C 0.4 nozzle.json | 2 +- .../process/0.24mm Draft @Creality K1Max (0.4 nozzle).json | 2 +- .../process/0.24mm Draft @Creality K1_CFS-C 0.4 nozzle.json | 2 +- .../process/0.30mm Standard @Creality K1 (0.6 nozzle).json | 2 +- .../process/0.30mm Standard @Creality K1 SE 0.6 nozzle.json | 2 +- .../process/0.30mm Standard @Creality K1C 0.6 nozzle.json | 2 +- .../process/0.30mm Standard @Creality K1Max (0.6 nozzle).json | 2 +- .../process/0.40mm Standard @Creality K1 (0.8 nozzle).json | 2 +- .../process/0.40mm Standard @Creality K1C 0.8 nozzle.json | 2 +- .../process/0.40mm Standard @Creality K1Max (0.8 nozzle).json | 2 +- 37 files changed, 37 insertions(+), 37 deletions(-) diff --git a/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K1 (0.4 nozzle).json b/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K1 (0.4 nozzle).json index 8bf73caf41..7300c45c8d 100644 --- a/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K1 (0.4 nozzle).json +++ b/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K1 (0.4 nozzle).json @@ -39,7 +39,7 @@ "draft_shield": "disabled", "elefant_foot_compensation": "0.15", "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "enable_overhang_speed": "1", "enable_prime_tower": "1", "enable_support": "0", diff --git a/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K1 Max_CFS-C 0.4 nozzle.json b/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K1 Max_CFS-C 0.4 nozzle.json index 5ff07e264b..adc86b4768 100644 --- a/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K1 Max_CFS-C 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K1 Max_CFS-C 0.4 nozzle.json @@ -39,7 +39,7 @@ "draft_shield": "disabled", "elefant_foot_compensation": "0.15", "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "enable_overhang_speed": "1", "enable_prime_tower": "1", "enable_support": "0", diff --git a/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K1C 0.4 nozzle.json b/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K1C 0.4 nozzle.json index fbc953f420..976756a212 100644 --- a/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K1C 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K1C 0.4 nozzle.json @@ -39,7 +39,7 @@ "draft_shield": "disabled", "elefant_foot_compensation": "0.15", "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "enable_overhang_speed": "1", "enable_prime_tower": "1", "enable_support": "0", diff --git a/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K1C_CFS-C 0.4 nozzle.json b/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K1C_CFS-C 0.4 nozzle.json index bacd88b9f3..6748914ae7 100644 --- a/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K1C_CFS-C 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K1C_CFS-C 0.4 nozzle.json @@ -39,7 +39,7 @@ "draft_shield": "disabled", "elefant_foot_compensation": "0.15", "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "enable_overhang_speed": "1", "enable_prime_tower": "1", "enable_support": "0", diff --git a/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K1Max (0.4 nozzle).json b/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K1Max (0.4 nozzle).json index 1083550af8..f3f37caca7 100644 --- a/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K1Max (0.4 nozzle).json +++ b/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K1Max (0.4 nozzle).json @@ -39,7 +39,7 @@ "draft_shield": "disabled", "elefant_foot_compensation": "0.15", "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "enable_overhang_speed": "1", "enable_prime_tower": "1", "enable_support": "0", diff --git a/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K1_CFS-C 0.4 nozzle.json b/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K1_CFS-C 0.4 nozzle.json index 3e98181430..0144a35372 100644 --- a/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K1_CFS-C 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K1_CFS-C 0.4 nozzle.json @@ -39,7 +39,7 @@ "draft_shield": "disabled", "elefant_foot_compensation": "0.15", "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "enable_overhang_speed": "1", "enable_prime_tower": "1", "enable_support": "0", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality K1 (0.4 nozzle).json b/resources/profiles/Creality/process/0.16mm Optimal @Creality K1 (0.4 nozzle).json index dba47d76a5..d6caa5e775 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality K1 (0.4 nozzle).json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality K1 (0.4 nozzle).json @@ -39,7 +39,7 @@ "draft_shield": "disabled", "elefant_foot_compensation": "0.15", "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "enable_overhang_speed": "1", "enable_prime_tower": "1", "enable_support": "0", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality K1 Max_CFS-C 0.4 nozzle.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality K1 Max_CFS-C 0.4 nozzle.json index ef22dc37ab..a1896fa377 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality K1 Max_CFS-C 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality K1 Max_CFS-C 0.4 nozzle.json @@ -39,7 +39,7 @@ "draft_shield": "disabled", "elefant_foot_compensation": "0.15", "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "enable_overhang_speed": "1", "enable_prime_tower": "1", "enable_support": "0", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality K1 SE 0.4 nozzle.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality K1 SE 0.4 nozzle.json index 2ac16fb484..087d90a584 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality K1 SE 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality K1 SE 0.4 nozzle.json @@ -38,7 +38,7 @@ "draft_shield": "disabled", "elefant_foot_compensation": "0.15", "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "enable_overhang_speed": "1", "enable_prime_tower": "1", "enable_support": "0", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality K1 SE_CFS-C 0.4 nozzle.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality K1 SE_CFS-C 0.4 nozzle.json index b247bece36..62708a822a 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality K1 SE_CFS-C 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality K1 SE_CFS-C 0.4 nozzle.json @@ -38,7 +38,7 @@ "draft_shield": "disabled", "elefant_foot_compensation": "0.15", "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "enable_overhang_speed": "1", "enable_prime_tower": "1", "enable_support": "0", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality K1C 0.4 nozzle.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality K1C 0.4 nozzle.json index b1d6201ba7..5deb17002e 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality K1C 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality K1C 0.4 nozzle.json @@ -39,7 +39,7 @@ "draft_shield": "disabled", "elefant_foot_compensation": "0.15", "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "enable_overhang_speed": "1", "enable_prime_tower": "1", "enable_support": "0", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality K1C_CFS-C 0.4 nozzle.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality K1C_CFS-C 0.4 nozzle.json index 44dc07e070..2365a82d31 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality K1C_CFS-C 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality K1C_CFS-C 0.4 nozzle.json @@ -39,7 +39,7 @@ "draft_shield": "disabled", "elefant_foot_compensation": "0.15", "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "enable_overhang_speed": "1", "enable_prime_tower": "1", "enable_support": "0", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality K1Max (0.4 nozzle).json b/resources/profiles/Creality/process/0.16mm Optimal @Creality K1Max (0.4 nozzle).json index 0b4ae9c777..02507c806f 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality K1Max (0.4 nozzle).json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality K1Max (0.4 nozzle).json @@ -39,7 +39,7 @@ "draft_shield": "disabled", "elefant_foot_compensation": "0.15", "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "enable_overhang_speed": "1", "enable_prime_tower": "1", "enable_support": "0", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality K1_CFS-C 0.4 nozzle.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality K1_CFS-C 0.4 nozzle.json index 6b201d6f4d..cda928b2e7 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality K1_CFS-C 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality K1_CFS-C 0.4 nozzle.json @@ -39,7 +39,7 @@ "draft_shield": "disabled", "elefant_foot_compensation": "0.15", "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "enable_overhang_speed": "1", "enable_prime_tower": "1", "enable_support": "0", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality K1 (0.4 nozzle).json b/resources/profiles/Creality/process/0.20mm Standard @Creality K1 (0.4 nozzle).json index 42e894eecd..eaaeb4529f 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality K1 (0.4 nozzle).json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality K1 (0.4 nozzle).json @@ -128,7 +128,7 @@ "detect_narrow_internal_solid_infill": "1", "dont_filter_internal_bridges": "disabled", "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "enable_overhang_speed": "1", "enforce_support_layers": "0", "ensure_vertical_shell_thickness": "ensure_all", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality K1 Max_CFS-C 0.4 nozzle.json b/resources/profiles/Creality/process/0.20mm Standard @Creality K1 Max_CFS-C 0.4 nozzle.json index f765f850c8..1a4bd4a3f3 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality K1 Max_CFS-C 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality K1 Max_CFS-C 0.4 nozzle.json @@ -39,7 +39,7 @@ "draft_shield": "disabled", "elefant_foot_compensation": "0.15", "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "enable_overhang_speed": "1", "enable_prime_tower": "1", "enable_support": "0", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality K1 SE 0.4.json b/resources/profiles/Creality/process/0.20mm Standard @Creality K1 SE 0.4.json index 003a8287ae..19b01a9964 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality K1 SE 0.4.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality K1 SE 0.4.json @@ -124,7 +124,7 @@ "detect_narrow_internal_solid_infill": "1", "dont_filter_internal_bridges": "disabled", "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "enable_overhang_speed": "1", "enforce_support_layers": "0", "ensure_vertical_shell_thickness": "ensure_all", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality K1 SE_CFS-C 0.4 nozzle.json b/resources/profiles/Creality/process/0.20mm Standard @Creality K1 SE_CFS-C 0.4 nozzle.json index 85de09803b..b7365760f4 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality K1 SE_CFS-C 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality K1 SE_CFS-C 0.4 nozzle.json @@ -38,7 +38,7 @@ "draft_shield": "disabled", "elefant_foot_compensation": "0.15", "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "enable_overhang_speed": "1", "enable_prime_tower": "1", "enable_support": "0", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality K1C 0.4 nozzle.json b/resources/profiles/Creality/process/0.20mm Standard @Creality K1C 0.4 nozzle.json index c33dc038f5..aa8e7b440a 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality K1C 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality K1C 0.4 nozzle.json @@ -128,7 +128,7 @@ "detect_narrow_internal_solid_infill": "1", "dont_filter_internal_bridges": "disabled", "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "enable_overhang_speed": "1", "enforce_support_layers": "0", "ensure_vertical_shell_thickness": "ensure_all", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality K1C_CFS-C 0.4 nozzle.json b/resources/profiles/Creality/process/0.20mm Standard @Creality K1C_CFS-C 0.4 nozzle.json index 7957e09303..882703434d 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality K1C_CFS-C 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality K1C_CFS-C 0.4 nozzle.json @@ -39,7 +39,7 @@ "draft_shield": "disabled", "elefant_foot_compensation": "0.15", "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "enable_overhang_speed": "1", "enable_prime_tower": "1", "enable_support": "0", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality K1Max (0.4 nozzle).json b/resources/profiles/Creality/process/0.20mm Standard @Creality K1Max (0.4 nozzle).json index cea8966d46..51ada298d8 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality K1Max (0.4 nozzle).json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality K1Max (0.4 nozzle).json @@ -128,7 +128,7 @@ "detect_narrow_internal_solid_infill": "1", "dont_filter_internal_bridges": "disabled", "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "enable_overhang_speed": "1", "enforce_support_layers": "0", "ensure_vertical_shell_thickness": "ensure_all", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality K1_CFS-C 0.4 nozzle.json b/resources/profiles/Creality/process/0.20mm Standard @Creality K1_CFS-C 0.4 nozzle.json index a617d8e2b4..85dd6bbf3d 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality K1_CFS-C 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality K1_CFS-C 0.4 nozzle.json @@ -39,7 +39,7 @@ "draft_shield": "disabled", "elefant_foot_compensation": "0.15", "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "enable_overhang_speed": "1", "enable_prime_tower": "1", "enable_support": "0", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality K1 (0.4 nozzle).json b/resources/profiles/Creality/process/0.24mm Draft @Creality K1 (0.4 nozzle).json index 051a14e1d4..ce0abbf5ac 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality K1 (0.4 nozzle).json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality K1 (0.4 nozzle).json @@ -39,7 +39,7 @@ "draft_shield": "disabled", "elefant_foot_compensation": "0.15", "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "enable_overhang_speed": "1", "enable_prime_tower": "1", "enable_support": "0", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality K1 Max_CFS-C 0.4 nozzle.json b/resources/profiles/Creality/process/0.24mm Draft @Creality K1 Max_CFS-C 0.4 nozzle.json index 8170eb02d6..afd921a54b 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality K1 Max_CFS-C 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality K1 Max_CFS-C 0.4 nozzle.json @@ -39,7 +39,7 @@ "draft_shield": "disabled", "elefant_foot_compensation": "0.15", "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "enable_overhang_speed": "1", "enable_prime_tower": "1", "enable_support": "0", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality K1 SE 0.4 nozzle.json b/resources/profiles/Creality/process/0.24mm Draft @Creality K1 SE 0.4 nozzle.json index 349601c857..34a577c896 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality K1 SE 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality K1 SE 0.4 nozzle.json @@ -38,7 +38,7 @@ "draft_shield": "disabled", "elefant_foot_compensation": "0.15", "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "enable_overhang_speed": "1", "enable_prime_tower": "1", "enable_support": "0", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality K1 SE_CFS-C 0.4 nozzle.json b/resources/profiles/Creality/process/0.24mm Draft @Creality K1 SE_CFS-C 0.4 nozzle.json index 40ecd965b1..3522e46d5a 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality K1 SE_CFS-C 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality K1 SE_CFS-C 0.4 nozzle.json @@ -38,7 +38,7 @@ "draft_shield": "disabled", "elefant_foot_compensation": "0.15", "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "enable_overhang_speed": "1", "enable_prime_tower": "1", "enable_support": "0", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality K1C 0.4 nozzle.json b/resources/profiles/Creality/process/0.24mm Draft @Creality K1C 0.4 nozzle.json index ef58869e10..697593d8c4 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality K1C 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality K1C 0.4 nozzle.json @@ -39,7 +39,7 @@ "draft_shield": "disabled", "elefant_foot_compensation": "0.15", "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "enable_overhang_speed": "1", "enable_prime_tower": "1", "enable_support": "0", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality K1C_CFS-C 0.4 nozzle.json b/resources/profiles/Creality/process/0.24mm Draft @Creality K1C_CFS-C 0.4 nozzle.json index af9f2c5b86..b3bf816290 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality K1C_CFS-C 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality K1C_CFS-C 0.4 nozzle.json @@ -39,7 +39,7 @@ "draft_shield": "disabled", "elefant_foot_compensation": "0.15", "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "enable_overhang_speed": "1", "enable_prime_tower": "1", "enable_support": "0", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality K1Max (0.4 nozzle).json b/resources/profiles/Creality/process/0.24mm Draft @Creality K1Max (0.4 nozzle).json index cea238f1f3..9f886804e3 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality K1Max (0.4 nozzle).json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality K1Max (0.4 nozzle).json @@ -39,7 +39,7 @@ "draft_shield": "disabled", "elefant_foot_compensation": "0.15", "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "enable_overhang_speed": "1", "enable_prime_tower": "1", "enable_support": "0", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality K1_CFS-C 0.4 nozzle.json b/resources/profiles/Creality/process/0.24mm Draft @Creality K1_CFS-C 0.4 nozzle.json index 5f91995b41..16ebf21b9a 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality K1_CFS-C 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality K1_CFS-C 0.4 nozzle.json @@ -39,7 +39,7 @@ "draft_shield": "disabled", "elefant_foot_compensation": "0.15", "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "enable_overhang_speed": "1", "enable_prime_tower": "1", "enable_support": "0", diff --git a/resources/profiles/Creality/process/0.30mm Standard @Creality K1 (0.6 nozzle).json b/resources/profiles/Creality/process/0.30mm Standard @Creality K1 (0.6 nozzle).json index 1259ac5186..a4bd5b2abc 100644 --- a/resources/profiles/Creality/process/0.30mm Standard @Creality K1 (0.6 nozzle).json +++ b/resources/profiles/Creality/process/0.30mm Standard @Creality K1 (0.6 nozzle).json @@ -126,7 +126,7 @@ "detect_narrow_internal_solid_infill": "1", "dont_filter_internal_bridges": "disabled", "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "enable_overhang_speed": "1", "enforce_support_layers": "0", "ensure_vertical_shell_thickness": "ensure_all", diff --git a/resources/profiles/Creality/process/0.30mm Standard @Creality K1 SE 0.6 nozzle.json b/resources/profiles/Creality/process/0.30mm Standard @Creality K1 SE 0.6 nozzle.json index 81e54598e3..d4073f4221 100644 --- a/resources/profiles/Creality/process/0.30mm Standard @Creality K1 SE 0.6 nozzle.json +++ b/resources/profiles/Creality/process/0.30mm Standard @Creality K1 SE 0.6 nozzle.json @@ -38,7 +38,7 @@ "draft_shield": "disabled", "elefant_foot_compensation": "0.15", "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "enable_overhang_speed": "1", "enable_prime_tower": "0", "enable_support": "0", diff --git a/resources/profiles/Creality/process/0.30mm Standard @Creality K1C 0.6 nozzle.json b/resources/profiles/Creality/process/0.30mm Standard @Creality K1C 0.6 nozzle.json index 71ecb52e77..3f86d9e613 100644 --- a/resources/profiles/Creality/process/0.30mm Standard @Creality K1C 0.6 nozzle.json +++ b/resources/profiles/Creality/process/0.30mm Standard @Creality K1C 0.6 nozzle.json @@ -126,7 +126,7 @@ "detect_narrow_internal_solid_infill": "1", "dont_filter_internal_bridges": "disabled", "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "enable_overhang_speed": "1", "enforce_support_layers": "0", "ensure_vertical_shell_thickness": "ensure_all", diff --git a/resources/profiles/Creality/process/0.30mm Standard @Creality K1Max (0.6 nozzle).json b/resources/profiles/Creality/process/0.30mm Standard @Creality K1Max (0.6 nozzle).json index db9e4b1539..54ac0870a4 100644 --- a/resources/profiles/Creality/process/0.30mm Standard @Creality K1Max (0.6 nozzle).json +++ b/resources/profiles/Creality/process/0.30mm Standard @Creality K1Max (0.6 nozzle).json @@ -126,7 +126,7 @@ "detect_narrow_internal_solid_infill": "1", "dont_filter_internal_bridges": "disabled", "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "enable_overhang_speed": "1", "enforce_support_layers": "0", "ensure_vertical_shell_thickness": "ensure_all", diff --git a/resources/profiles/Creality/process/0.40mm Standard @Creality K1 (0.8 nozzle).json b/resources/profiles/Creality/process/0.40mm Standard @Creality K1 (0.8 nozzle).json index 5f61b218bc..2de391b8ad 100644 --- a/resources/profiles/Creality/process/0.40mm Standard @Creality K1 (0.8 nozzle).json +++ b/resources/profiles/Creality/process/0.40mm Standard @Creality K1 (0.8 nozzle).json @@ -126,7 +126,7 @@ "detect_narrow_internal_solid_infill": "1", "dont_filter_internal_bridges": "disabled", "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "enable_overhang_speed": "1", "enforce_support_layers": "0", "ensure_vertical_shell_thickness": "ensure_all", diff --git a/resources/profiles/Creality/process/0.40mm Standard @Creality K1C 0.8 nozzle.json b/resources/profiles/Creality/process/0.40mm Standard @Creality K1C 0.8 nozzle.json index d5d5d62cda..5cd1a9cb6a 100644 --- a/resources/profiles/Creality/process/0.40mm Standard @Creality K1C 0.8 nozzle.json +++ b/resources/profiles/Creality/process/0.40mm Standard @Creality K1C 0.8 nozzle.json @@ -126,7 +126,7 @@ "detect_narrow_internal_solid_infill": "1", "dont_filter_internal_bridges": "disabled", "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "enable_overhang_speed": "1", "enforce_support_layers": "0", "ensure_vertical_shell_thickness": "ensure_all", diff --git a/resources/profiles/Creality/process/0.40mm Standard @Creality K1Max (0.8 nozzle).json b/resources/profiles/Creality/process/0.40mm Standard @Creality K1Max (0.8 nozzle).json index 793c6aa43e..c1c968cbb6 100644 --- a/resources/profiles/Creality/process/0.40mm Standard @Creality K1Max (0.8 nozzle).json +++ b/resources/profiles/Creality/process/0.40mm Standard @Creality K1Max (0.8 nozzle).json @@ -126,7 +126,7 @@ "detect_narrow_internal_solid_infill": "1", "dont_filter_internal_bridges": "disabled", "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "enable_overhang_speed": "1", "enforce_support_layers": "0", "ensure_vertical_shell_thickness": "ensure_all", From 408db4b3b048afcfcbf05a336a41cc3cf4034665 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Thu, 6 Aug 2026 12:24:00 +0800 Subject: [PATCH 29/66] Wait for the toolchange temperature on the wipe tower Adds a printer option that picks up the new tool without a blocking temperature wait, travels to the wipe tower, and waits there right before purging, parked beside the tower so the ooze from the heat-up lands next to it rather than on the model. The incoming filament's target is raised ahead of the tool change, so the heat-up overlaps both the change itself and the travel to the tower. Off by default, and only offered for multi-extruder printers using a Type 2 wipe tower; the generic toolchanger profile enables it. --- resources/profiles/Custom.json | 2 +- .../machine/fdm_toolchanger_common.json | 1 + src/libslic3r/GCode.cpp | 31 +- src/libslic3r/GCode.hpp | 2 +- src/libslic3r/GCode/WipeTower2.cpp | 123 +++- src/libslic3r/GCode/WipeTower2.hpp | 14 +- src/libslic3r/Preset.cpp | 2 +- src/libslic3r/Print.cpp | 9 + src/libslic3r/PrintConfig.cpp | 11 + src/libslic3r/PrintConfig.hpp | 1 + src/slic3r/GUI/Tab.cpp | 2 + .../wipe_tower_temperature_trace_main.txt | 167 ++++++ tests/fff_print/test_multifilament.cpp | 546 ++++++++++++++++++ 13 files changed, 895 insertions(+), 16 deletions(-) create mode 100644 tests/data/wipe_tower_temperature_trace_main.txt diff --git a/resources/profiles/Custom.json b/resources/profiles/Custom.json index 0429742c88..7eba013111 100644 --- a/resources/profiles/Custom.json +++ b/resources/profiles/Custom.json @@ -1,6 +1,6 @@ { "name": "Custom Printer", - "version": "02.04.00.02", + "version": "02.04.00.03", "force_update": "0", "description": "My configurations", "machine_model_list": [ diff --git a/resources/profiles/Custom/machine/fdm_toolchanger_common.json b/resources/profiles/Custom/machine/fdm_toolchanger_common.json index 7ef8b5207c..55f1b2cadb 100644 --- a/resources/profiles/Custom/machine/fdm_toolchanger_common.json +++ b/resources/profiles/Custom/machine/fdm_toolchanger_common.json @@ -6,6 +6,7 @@ "instantiation": "false", "gcode_flavor": "klipper", "single_extruder_multi_material": "0", + "wait_for_temp_on_wipe_tower": "1", "default_filament_profile": [ "Generic PLA @MyToolChanger" ], diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index b898284d89..85903cb779 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -1554,7 +1554,8 @@ static std::vector get_path_of_change_filament(const Print& print) interface_temp = gcodegen.config().nozzle_temperature_range_high.get_at(new_extruder_id); toolchange_temp_override = interface_temp; } - toolchange_gcode_str = gcodegen.set_extruder(new_extruder_id, tcr.print_z, false, toolchange_temp_override); // TODO: toolchange_z vs print_z + toolchange_gcode_str = gcodegen.set_extruder(new_extruder_id, tcr.print_z, false, toolchange_temp_override, + WipeTower2::wait_for_temp_enabled(gcodegen.m_config)); // TODO: toolchange_z vs print_z if (!travel_to_tower_now && !tcr.priming && WipeTower2::use_gap_wall(gcodegen.m_config)) { // The tool changed in place (multi-tool printer without ramming), so the // tower entry is the tcr's own positioning move — a straight line across @@ -1705,7 +1706,7 @@ static std::vector get_path_of_change_filament(const Print& print) std::string trimmed = line; trimmed.erase(0, trimmed.find_first_not_of(" \t")); bool skip_line = false; - if (boost::starts_with(trimmed, "M109")) { + if (boost::starts_with(trimmed, "M109") && trimmed.find(WipeTower2::wait_for_temp_tag()) == std::string::npos) { bool matches_extruder = true; if (trimmed.find('T') != std::string::npos) matches_extruder = trimmed.find(t_token) != std::string::npos; @@ -8939,7 +8940,7 @@ void GCode::update_placeholder_parser_with_variant_params() } } -std::string GCode::set_extruder(unsigned int new_filament_id, double print_z, bool by_object, int toolchange_temp_override) +std::string GCode::set_extruder(unsigned int new_filament_id, double print_z, bool by_object, int toolchange_temp_override, bool defer_temp_wait) { int new_extruder_id = get_extruder_id(new_filament_id); if (!m_writer.need_toolchange(new_filament_id)) @@ -9046,6 +9047,24 @@ std::string GCode::set_extruder(unsigned int new_filament_id, double print_z, bo if (toolchange_temp_override > 0) new_filament_temp = toolchange_temp_override; + // With wait_for_temp_on_wipe_tower the blocking M109 is deferred to the wipe tower, so raise + // the incoming filament's target here — ahead of the tool change rather than after it — and + // let the heat-up overlap the change itself as well as the travel to the tower. The command + // always carries an explicit tool index (the option is off for single extruder MM, so the + // writer emits one), leaving the outgoing filament that pre_toolchange just dropped to its + // standby temperature alone. nozzle_temperature == 0 means "use the first layer temperature". + if (defer_temp_wait) { + // Target what the tower will wait on. It waits on the first layer temperature not only on + // the first layer but also while priming, which runs before any layer is set: there + // on_first_layer() is false and print_z is the initial layer height, so neither test above + // catches it. nozzle_temperature == 0 means "use the first layer temperature" as well. + int preheat_temp = new_filament_temp; + if (toolchange_temp_override <= 0 && (m_layer == nullptr || preheat_temp <= 0)) + preheat_temp = m_config.nozzle_temperature_initial_layer.get_at(new_fi); + if (preheat_temp > 0) + gcode += m_writer.set_temperature(preheat_temp, false, new_filament_id); + } + Vec3d nozzle_pos = m_writer.get_position(); float old_retract_length, old_retract_length_toolchange, wipe_volume; int old_filament_temp, old_filament_e_feedrate; @@ -9349,8 +9368,10 @@ std::string GCode::set_extruder(unsigned int new_filament_id, double print_z, bo } check_add_eol(gcode); } - // Set the new extruder to the operating temperature. - if (m_ooze_prevention.enable) + // Set the new extruder to the operating temperature. With defer_temp_wait the target was + // already raised before the tool change and the blocking wait belongs to the wipe tower + // generator, so there is nothing left to restore here. + if (m_ooze_prevention.enable && !defer_temp_wait) gcode += m_ooze_prevention.post_toolchange(*this); if (m_config.enable_pressure_advance.get_at(new_filament_id)) { diff --git a/src/libslic3r/GCode.hpp b/src/libslic3r/GCode.hpp index 47abf6be85..6346334889 100644 --- a/src/libslic3r/GCode.hpp +++ b/src/libslic3r/GCode.hpp @@ -262,7 +262,7 @@ public: std::string retract(bool toolchange = false, bool is_last_retraction = false, LiftType lift_type = LiftType::NormalLift, bool apply_instantly = false, ExtrusionRole role = erNone); // extra_retract forwards a PETG pre-extrusion over-extrusion; default 0 -> identical to the plain deretract. std::string unretract(float extra_retract = 0.f) { return m_writer.unlift() + m_writer.unretract(extra_retract); } - std::string set_extruder(unsigned int extruder_id, double print_z, bool by_object=false, int toolchange_temp_override = -1); + std::string set_extruder(unsigned int extruder_id, double print_z, bool by_object=false, int toolchange_temp_override = -1, bool defer_temp_wait = false); bool is_BBL_Printer(); WipeTowerType wipe_tower_type(); diff --git a/src/libslic3r/GCode/WipeTower2.cpp b/src/libslic3r/GCode/WipeTower2.cpp index 0837bfa908..34e4b6146f 100644 --- a/src/libslic3r/GCode/WipeTower2.cpp +++ b/src/libslic3r/GCode/WipeTower2.cpp @@ -413,6 +413,7 @@ public: const Vec2f& pos() const { return m_current_pos; } const Vec2f start_pos_rotated() const { return m_start_pos; } const Vec2f pos_rotated() const { return this->rotate(m_current_pos); } + const Vec2f rotated(const Vec2f &pt) const { return this->rotate(pt); } float elapsed_time() const { return m_elapsed_time; } float get_and_reset_used_filament_length() { float temp = m_used_filament_length; m_used_filament_length = 0.f; return temp; } @@ -624,10 +625,13 @@ public: } // Set extruder temperature, don't wait by default. - WipeTowerWriter2& set_extruder_temp(int temperature, bool wait = false) + WipeTowerWriter2& set_extruder_temp(int temperature, bool wait = false, const std::string& comment = std::string()) { flush_planner_queue(); - m_gcode += "M" + std::to_string(wait ? 109 : 104) + " S" + std::to_string(temperature) + "\n"; + m_gcode += "M" + std::to_string(wait ? 109 : 104) + " S" + std::to_string(temperature); + if (!comment.empty()) + m_gcode += " " + comment; + m_gcode += "\n"; return *this; } @@ -1006,6 +1010,13 @@ bool WipeTower2::use_gap_wall(const PrintConfig& config) return config.prime_tower_skip_points.value && config.wipe_tower_wall_type.value != wtwCone; } +bool WipeTower2::wait_for_temp_enabled(const PrintConfig& config) +{ + // SEMM runs its own unload/load temperature sequence; the GUI hides the option + // there but a profile may still carry it set. + return config.wait_for_temp_on_wipe_tower.value && !config.single_extruder_multi_material.value; +} + WipeTower2::WipeTower2(const PrintConfig& config, const PrintRegionConfig& default_region_config,int plate_idx, Vec3d plate_origin, const std::vector>& wiping_matrix, size_t initial_tool) : m_semm(config.single_extruder_multi_material.value), m_enable_filament_ramming(config.enable_filament_ramming.value), @@ -1035,7 +1046,8 @@ WipeTower2::WipeTower2(const PrintConfig& config, const PrintRegionConfig& defau m_wall_type((int)config.wipe_tower_wall_type), m_use_gap_wall(use_gap_wall(config)), m_enable_tower_interface_features(config.enable_tower_interface_features.value), - m_enable_tower_interface_cooldown_during_tower(config.enable_tower_interface_cooldown_during_tower.value) + m_enable_tower_interface_cooldown_during_tower(config.enable_tower_interface_cooldown_during_tower.value), + m_wait_for_temp_on_wipe_tower(wait_for_temp_enabled(config)) { // Read absolute value of first layer speed, if given as percentage, // it is taken over following default. Speeds from config are not @@ -1085,6 +1097,7 @@ WipeTower2::WipeTower2(const PrintConfig& config, const PrintRegionConfig& defau m_bed_bottom_left = m_bed_shape == RectangularBed ? Vec2f(bed_points.front().x(), bed_points.front().y()) : Vec2f::Zero(); + m_bed_polygon = Polygon::new_scale(bed_points); } @@ -1236,7 +1249,7 @@ std::vector WipeTower2::prime( unsigned int tool = tools[idx_tool]; m_left_to_right = true; - toolchange_Change(writer, tool, m_filpar[tool].material); // Select the tool, set a speed override for soluble and flex materials. + toolchange_Change(writer, tool, m_filpar[tool].material, m_filpar[tool].first_layer_temperature, false); // Select the tool, set a speed override for soluble and flex materials. toolchange_Load(writer, cleaning_box); // Prime the tool. if (idx_tool + 1 == tools.size()) { // Last tool should not be unloaded, but it should be wiped enough to become of a pure color. @@ -1355,13 +1368,19 @@ WipeTower::ToolChangeResult WipeTower2::tool_change(size_t tool) toolchange_Unload(writer, cleaning_box, m_filpar[m_current_tool].material, (is_first_layer() ? m_filpar[m_current_tool].first_layer_temperature : m_filpar[m_current_tool].temperature), new_tool_temp); - toolchange_Change(writer, tool, m_filpar[tool].material); // Change the tool, set a speed override for soluble and flex materials. + // Wait-at-tower target: the interface temp when an interface boost applies on this layer, + // otherwise the print temp (nozzle_temperature == 0 means "use the first layer temp"). + int wait_for_temp = interface_layer && m_filpar[tool].interface_print_temperature > 0 ? + m_filpar[tool].interface_print_temperature : + (is_first_layer() || m_filpar[tool].temperature == 0 ? m_filpar[tool].first_layer_temperature : m_filpar[tool].temperature); + toolchange_Change(writer, tool, m_filpar[tool].material, wait_for_temp, true); // Change the tool, set a speed override for soluble and flex materials. toolchange_Load(writer, cleaning_box); writer.travel(writer.x(), writer.y()-m_perimeter_width); // cooling and loading were done a bit down the road int base_temp = is_first_layer() ? m_filpar[tool].first_layer_temperature : m_filpar[tool].temperature; if (interface_layer) { int interface_temp = m_filpar[tool].interface_print_temperature; - if (interface_temp > 0 && interface_temp != base_temp) + // With wait-for-temp-on-wipe-tower the toolchange already blocked for the interface temp. + if (interface_temp > 0 && interface_temp != base_temp && !m_wait_for_temp_on_wipe_tower) writer.set_extruder_temp(interface_temp, true); if (m_enable_tower_interface_cooldown_during_tower && interface_temp > 0 && interface_temp != base_temp) writer.set_extruder_temp(base_temp, false); @@ -1671,7 +1690,9 @@ void WipeTower2::toolchange_Unload( void WipeTower2::toolchange_Change( WipeTowerWriter2 &writer, const size_t new_tool, - const std::string& new_material) + const std::string& new_material, + const int wait_for_temp, + const bool wait_beside_tower) { // Ask the writer about how much of the old filament we consumed: if (m_current_tool < m_used_filament_length.size()) @@ -1685,6 +1706,90 @@ void WipeTower2::toolchange_Change( if (m_is_mk4mmu3) writer.switch_filament_monitoring(true); + const bool wait_for_temp_here = m_wait_for_temp_on_wipe_tower && wait_for_temp > 0; + + // The Tn above was issued without a blocking temperature wait (GCode::set_extruder only raises + // the target, ahead of the Tn); block here, before the deretraction below, which must not + // extrude on a cold nozzle. Like the Bambu H2C, park beside the tower for the heat-up so drool lands + // next to it instead of on its top surface — nearest x side first, then that side clamped + // toward the bed edge, then the far side, in place if all would leave the bed. Raw + // pre-rotated moves (see the repositioning move below) keep the writer's tracked position + // at the tower entry. The tag keeps the + // interface-temp deduplication pass in append_tcr2 from stripping the M109. + if (wait_for_temp_here && wait_beside_tower) { + // The rib wall and the stabilization cone bulge past the nominal width rectangle + // (widest near the bottom), and the first-layer brim is printed around the wall later + // in the layer — clear the widest of them, not just the rectangle, so the park point + // and its drool stay off the tower. + float min_x = 0.f, max_x = m_wipe_tower_width; + if (m_wall_type == (int)wtwRib) { + WipeTower::box_coordinates wt_box(Vec2f(0.f, 0.f), m_wipe_tower_width, m_layer_info->depth + m_perimeter_width); + const BoundingBox rib_bbox = get_extents(generate_rib_polygon(wt_box)); // the fillet stays within this bbox + min_x = std::min(min_x, unscaled(rib_bbox.min.x())); + max_x = std::max(max_x, unscaled(rib_bbox.max.x())); + } else if (m_wall_type == (int)wtwCone) { + const double support_scale = get_wipe_tower_cone_base(m_wipe_tower_width, m_wipe_tower_height, m_wipe_tower_depth, + m_wipe_tower_cone_angle).second; + const double z = m_no_sparse_layers ? (m_current_height + m_layer_info->height) : m_layer_info->z; + const double r = std::tan(Geometry::deg2rad(m_wipe_tower_cone_angle / 2.f)) * (m_wipe_tower_height - z); + const double w = m_layer_info->depth + m_perimeter_width; + if (r > 0.5 * w + 0.01) { // same guard as generate_support_cone_wall + const float bulge = float(std::sqrt(r * r - 0.25 * w * w) / support_scale); + min_x = std::min(min_x, m_wipe_tower_width / 2.f - bulge); + max_x = std::max(max_x, m_wipe_tower_width / 2.f + bulge); + } + } + if (is_first_layer()) { + const float brim = m_wipe_tower_brim_width < 0.f ? WipeTower::get_auto_brim_by_height(m_wipe_tower_height) : + m_wipe_tower_brim_width; + min_x -= brim; + max_x += brim; + } + constexpr float gap = 2.f; + constexpr float min_gap = 0.5f; + const bool on_left = writer.x() < m_wipe_tower_width / 2.f; + const float near_x = on_left ? min_x - gap : max_x + gap; + const float far_x = on_left ? max_x + gap : min_x - gap; + const Eigen::Rotation2Df to_bed(float(Geometry::deg2rad(m_wipe_tower_rotation_angle))); + auto park_pt_on_bed = [this, &writer, to_bed](float side_x) { + const Vec2f bed_pt = to_bed * (writer.rotated(Vec2f(side_x, writer.y())) + m_rib_offset) + m_wipe_tower_pos; + return m_bed_polygon.contains(Point::new_scale(bed_pt.x(), bed_pt.y())); + }; + float park_x = near_x; + bool have_park = park_pt_on_bed(near_x); + if (!have_park) { + // The ideal near point hangs off the bed: pull it back to the bed edge as long + // as that still clears the tower envelope by min_gap (the BBL tower clamps its + // stop_pos against the bed the same way in append_tcr). Bisection, because with + // tower rotation and non-rectangular beds the bed edge is not axis-aligned. + const float limit_x = on_left ? min_x - min_gap : max_x + min_gap; + if (park_pt_on_bed(limit_x)) { + float on = limit_x, off = near_x; + for (int i = 0; i < 8; ++i) { + const float mid = 0.5f * (on + off); + if (park_pt_on_bed(mid)) + on = mid; + else + off = mid; + } + park_x = on; + have_park = true; + } + } + if (!have_park && park_pt_on_bed(far_x)) { + park_x = far_x; + have_park = true; + } + if (have_park) { + const Vec2f stop = writer.rotated(Vec2f(park_x, writer.y())); + writer.feedrate(m_travel_speed * 60.f) + .append(std::string("G1 X") + Slic3r::float_to_string_decimal_point(stop.x()) + + " Y" + Slic3r::float_to_string_decimal_point(stop.y()) + + never_skip_tag() + "\n"); + } + writer.set_extruder_temp(wait_for_temp, true, wait_for_temp_tag()); + } + // Travel to where we assume we are. Custom toolchange or some special T code handling (parking extruder etc) // gcode could have left the extruder somewhere, we cannot just start extruding. We should also inform the // postprocessor that we absolutely want to have this in the gcode, even if it thought it is the same as before. @@ -1695,6 +1800,10 @@ void WipeTower2::toolchange_Change( + never_skip_tag() + "\n" ); + // Priming has no tower to park beside — wait right at the priming line instead. + if (wait_for_temp_here && !wait_beside_tower) + writer.set_extruder_temp(wait_for_temp, true, wait_for_temp_tag()); + writer.append("[deretraction_from_wipe_tower_generator]"); // The toolchange Tn command will be inserted later, only in case that the user does diff --git a/src/libslic3r/GCode/WipeTower2.hpp b/src/libslic3r/GCode/WipeTower2.hpp index 3efa884202..ca9e73bb28 100644 --- a/src/libslic3r/GCode/WipeTower2.hpp +++ b/src/libslic3r/GCode/WipeTower2.hpp @@ -22,6 +22,9 @@ class WipeTower2 { public: static const std::string never_skip_tag() { return "_GCODE_WIPE_TOWER_NEVER_SKIP_TAG"; } + // Marks the wait-for-temp-on-wipe-tower M109 so the interface-temp deduplication pass + // in WipeTowerIntegration::append_tcr2 does not strip it. + static const std::string wait_for_temp_tag() { return ";_WAIT_FOR_TEMP_ON_WIPE_TOWER"; } static std::pair get_wipe_tower_cone_base(double width, double height, double depth, double angle_deg); static std::vector> extract_wipe_volumes(const PrintConfig& config); @@ -38,6 +41,11 @@ public: // Shared with the entry routing in GCode.cpp so the router and the tower agree. static bool use_gap_wall(const PrintConfig& config); + // Whether the blocking toolchange temperature wait moves onto the wipe tower. + // Shared with the defer flag in GCode.cpp append_tcr2 so the deferral and the + // tower's tagged M109 can never disagree. + static bool wait_for_temp_enabled(const PrintConfig& config); + // x -- x coordinates of wipe tower in mm ( left bottom corner ) // y -- y coordinates of wipe tower in mm ( left bottom corner ) // width -- width of wipe tower in mm ( default 60 mm - leave as it is ) @@ -227,6 +235,7 @@ private: size_t m_first_layer_idx = size_t(-1); bool m_enable_tower_interface_features = false; bool m_enable_tower_interface_cooldown_during_tower = false; + bool m_wait_for_temp_on_wipe_tower = false; bool m_prev_layer_had_interface = false; bool m_current_layer_has_interface = false; @@ -263,6 +272,7 @@ private: } m_bed_shape; float m_bed_width; // width of the bed bounding box Vec2f m_bed_bottom_left; // bottom-left corner coordinates (for rectangular beds) + Polygon m_bed_polygon; // printable_area contour (scaled) float m_perimeter_width = 0.4f * Width_To_Nozzle_Ratio; // Width of an extrusion line, also a perimeter spacing for 100% infill. float m_extrusion_flow = 0.038f; //0.029f;// Extrusion flow is derived from m_perimeter_width, layer height and filament diameter. @@ -385,7 +395,9 @@ private: void toolchange_Change( WipeTowerWriter2 &writer, const size_t new_tool, - const std::string& new_material); + const std::string& new_material, + const int wait_for_temp, + const bool wait_beside_tower); void toolchange_Load( WipeTowerWriter2 &writer, diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index 47d448b69b..9ae8b86fd8 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -1423,7 +1423,7 @@ static std::vector s_Preset_printer_options { "use_relative_e_distances", "extruder_type", "use_firmware_retraction", "printer_notes", "grab_length", "support_object_skip_flush", "physical_extruder_map", "cooling_tube_retraction", - "cooling_tube_length", "high_current_on_filament_swap", "parking_pos_retraction", "extra_loading_move", "wipe_tower_type", "purge_in_prime_tower", "enable_filament_ramming", "tool_change_on_wipe_tower", + "cooling_tube_length", "high_current_on_filament_swap", "parking_pos_retraction", "extra_loading_move", "wipe_tower_type", "purge_in_prime_tower", "enable_filament_ramming", "tool_change_on_wipe_tower", "wait_for_temp_on_wipe_tower", "z_offset", "disable_m73", "preferred_orientation", "emit_machine_limits_to_gcode", "pellet_modded_printer", "support_multi_bed_types", "use_3mf", "default_bed_type", "bed_mesh_min","bed_mesh_max","bed_mesh_probe_distance", "adaptive_bed_mesh_margin", "enable_long_retraction_when_cut","long_retractions_when_cut","retraction_distances_when_cut", "bed_temperature_formula", "nozzle_flush_dataset", diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index 371f1e68ea..61025c89d7 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -282,6 +282,14 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n || opt_key == "wipe_tower_x" || opt_key == "wipe_tower_y" || opt_key == "wipe_tower_rotation_angle") { + // The tower gcode itself is position-independent (position and rotation are applied + // at export), except that the wait_for_temp_on_wipe_tower park bakes a bed-relative + // side choice into it (WipeTower2::toolchange_Change) — regenerate it when the tower + // moves. Gating on the old config is safe: both inputs of wait_for_temp_enabled + // invalidate psWipeTower themselves when they are part of the same diff. + if ((opt_key == "wipe_tower_x" || opt_key == "wipe_tower_y" || opt_key == "wipe_tower_rotation_angle") + && WipeTower2::wait_for_temp_enabled(m_config)) + steps.emplace_back(psWipeTower); steps.emplace_back(psSkirtBrim); } else if ( opt_key == "slicing_pipeline_plugin" @@ -382,6 +390,7 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n || opt_key == "wiping_volumes_extruders" || opt_key == "enable_filament_ramming" || opt_key == "tool_change_on_wipe_tower" + || opt_key == "wait_for_temp_on_wipe_tower" || opt_key == "purge_in_prime_tower" || opt_key == "z_offset" || opt_key == "support_multi_bed_types" diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 849b0754dc..fdb20253d6 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -6570,6 +6570,17 @@ void PrintConfigDef::init_fff_params() def->mode = comAdvanced; def->set_default_value(new ConfigOptionBool(false)); + def = this->add("wait_for_temp_on_wipe_tower", coBool); + def->label = L("Wait for temperature on wipe tower"); + def->tooltip = L("Pick up the new tool without waiting for it to reach printing temperature, travel to the wipe " + "tower, and wait for the temperature there, right before purging. Ooze from the heat-up lands on " + "the tower instead of the model, and the travel overlaps with the heating. " + "Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. " + "The firmware or tool change macro must not wait for the temperature itself. " + "When disabled, the temperature wait is issued right after the tool change command."); + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionBool(false)); + def = this->add("wipe_tower_no_sparse_layers", coBool); def->label = L("No sparse layers (beta)"); diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index c1875e0288..6029d5bd88 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -1660,6 +1660,7 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionBool, purge_in_prime_tower)) ((ConfigOptionBool, enable_filament_ramming)) ((ConfigOptionBool, tool_change_on_wipe_tower)) + ((ConfigOptionBool, wait_for_temp_on_wipe_tower)) ((ConfigOptionBool, support_multi_bed_types)) ((ConfigOptionBool, use_3mf)) diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index f5cb3d045b..64c2b586c8 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -5627,6 +5627,7 @@ if (is_marlin_flavor) optgroup->append_single_option_line("purge_in_prime_tower", "printer_multimaterial_wipe_tower#purge-in-prime-tower"); optgroup->append_single_option_line("enable_filament_ramming", "printer_multimaterial_wipe_tower#enable-filament-ramming"); optgroup->append_single_option_line("tool_change_on_wipe_tower", "printer_multimaterial_wipe_tower#tool-change-on-wipe-tower"); + optgroup->append_single_option_line("wait_for_temp_on_wipe_tower", "printer_multimaterial_wipe_tower#wait-for-temperature-on-wipe-tower"); optgroup = page->new_optgroup(L("Single extruder multi-material parameters"), "param_settings"); @@ -6160,6 +6161,7 @@ void TabPrinter::toggle_options() // so the option is irrelevant there. const size_t extruders_count = m_config->option("nozzle_diameter")->size(); toggle_option("tool_change_on_wipe_tower", !bSEMM && supports_wipe_tower_2 && extruders_count > 1); + toggle_option("wait_for_temp_on_wipe_tower", !bSEMM && supports_wipe_tower_2 && extruders_count > 1); } wxString extruder_number; long val = 1; diff --git a/tests/data/wipe_tower_temperature_trace_main.txt b/tests/data/wipe_tower_temperature_trace_main.txt new file mode 100644 index 0000000000..b7453bdc93 --- /dev/null +++ b/tests/data/wipe_tower_temperature_trace_main.txt @@ -0,0 +1,167 @@ +# Temperature and tool-change commands of a wait_for_temp_on_wipe_tower-off slice, +# captured from the main branch at a10d9e77cf. Regeneration is described +# at the test that reads this file: "Toolchange temperature commands are unchanged +# when the wipe tower wait is off" in tests/fff_print/test_multifilament.cpp. +M104 S215 T0 ; set nozzle temperature +M104 S215 T1 ; set nozzle temperature +; CP PRIMING START +T1 ; change extruder +M109 S215 T1 ; set nozzle temperature and wait for it to be reached +M104 S175 T1 ; set nozzle temperature ;cooldown +T0 ; change extruder +M109 S215 T0 ; set nozzle temperature and wait for it to be reached +; CP PRIMING END +M104 S215 T1 ; preheat T1 time: 30s lead 30.2s +; CP TOOLCHANGE START +M104 S175 T0 ; set nozzle temperature ;cooldown +T1 ; change extruder +M109 S215 T1 ; set nozzle temperature and wait for it to be reached +; CP TOOLCHANGE END +M104 S240 T1 ; set nozzle temperature +M104 S240 T0 ; preheat T0 time: 30s lead 30.0s +; CP TOOLCHANGE START +M104 S200 T1 ; set nozzle temperature ;cooldown +T0 ; change extruder +M109 S240 T0 ; set nozzle temperature and wait for it to be reached +; CP TOOLCHANGE END +M104 S240 T1 ; preheat T1 time: 30s lead 30.4s +; CP TOOLCHANGE START +M104 S200 T0 ; set nozzle temperature ;cooldown +T1 ; change extruder +M109 S240 T1 ; set nozzle temperature and wait for it to be reached +; CP TOOLCHANGE END +M104 S240 T0 ; preheat T0 time: 31s lead 30.9s +; CP TOOLCHANGE START +M104 S200 T1 ; set nozzle temperature ;cooldown +T0 ; change extruder +M109 S240 T0 ; set nozzle temperature and wait for it to be reached +; CP TOOLCHANGE END +M104 S240 T1 ; preheat T1 time: 30s lead 30.2s +; CP TOOLCHANGE START +M104 S200 T0 ; set nozzle temperature ;cooldown +T1 ; change extruder +M109 S240 T1 ; set nozzle temperature and wait for it to be reached +; CP TOOLCHANGE END +M104 S240 T0 ; preheat T0 time: 30s lead 30.2s +; CP TOOLCHANGE START +M104 S200 T1 ; set nozzle temperature ;cooldown +T0 ; change extruder +M109 S240 T0 ; set nozzle temperature and wait for it to be reached +; CP TOOLCHANGE END +M104 S240 T1 ; preheat T1 time: 30s lead 30.2s +; CP TOOLCHANGE START +M104 S200 T0 ; set nozzle temperature ;cooldown +T1 ; change extruder +M109 S240 T1 ; set nozzle temperature and wait for it to be reached +; CP TOOLCHANGE END +M104 S240 T0 ; preheat T0 time: 30s lead 30.2s +; CP TOOLCHANGE START +M104 S200 T1 ; set nozzle temperature ;cooldown +T0 ; change extruder +M109 S240 T0 ; set nozzle temperature and wait for it to be reached +; CP TOOLCHANGE END +M104 S240 T1 ; preheat T1 time: 30s lead 30.2s +; CP TOOLCHANGE START +M104 S200 T0 ; set nozzle temperature ;cooldown +T1 ; change extruder +M109 S240 T1 ; set nozzle temperature and wait for it to be reached +; CP TOOLCHANGE END +M104 S240 T0 ; preheat T0 time: 30s lead 30.2s +; CP TOOLCHANGE START +M104 S200 T1 ; set nozzle temperature ;cooldown +T0 ; change extruder +M109 S240 T0 ; set nozzle temperature and wait for it to be reached +; CP TOOLCHANGE END +M104 S240 T1 ; preheat T1 time: 31s lead 30.7s +; CP TOOLCHANGE START +M104 S200 T0 ; set nozzle temperature ;cooldown +T1 ; change extruder +M109 S240 T1 ; set nozzle temperature and wait for it to be reached +; CP TOOLCHANGE END +M104 S240 T0 ; preheat T0 time: 31s lead 30.6s +; CP TOOLCHANGE START +M104 S200 T1 ; set nozzle temperature ;cooldown +T0 ; change extruder +M109 S240 T0 ; set nozzle temperature and wait for it to be reached +; CP TOOLCHANGE END +M104 S240 T1 ; preheat T1 time: 30s lead 30.3s +; CP TOOLCHANGE START +M104 S200 T0 ; set nozzle temperature ;cooldown +T1 ; change extruder +M109 S240 T1 ; set nozzle temperature and wait for it to be reached +; CP TOOLCHANGE END +M104 S240 T0 ; preheat T0 time: 31s lead 30.6s +; CP TOOLCHANGE START +M104 S200 T1 ; set nozzle temperature ;cooldown +T0 ; change extruder +M109 S240 T0 ; set nozzle temperature and wait for it to be reached +; CP TOOLCHANGE END +M104 S240 T1 ; preheat T1 time: 30s lead 30.0s +; CP TOOLCHANGE START +M104 S200 T0 ; set nozzle temperature ;cooldown +T1 ; change extruder +M109 S240 T1 ; set nozzle temperature and wait for it to be reached +; CP TOOLCHANGE END +M104 S240 T0 ; preheat T0 time: 30s lead 30.2s +; CP TOOLCHANGE START +M104 S200 T1 ; set nozzle temperature ;cooldown +T0 ; change extruder +M109 S240 T0 ; set nozzle temperature and wait for it to be reached +; CP TOOLCHANGE END +M104 S240 T1 ; preheat T1 time: 30s lead 30.2s +; CP TOOLCHANGE START +M104 S200 T0 ; set nozzle temperature ;cooldown +T1 ; change extruder +M109 S240 T1 ; set nozzle temperature and wait for it to be reached +; CP TOOLCHANGE END +M104 S240 T0 ; preheat T0 time: 30s lead 30.2s +; CP TOOLCHANGE START +M104 S200 T1 ; set nozzle temperature ;cooldown +T0 ; change extruder +M109 S240 T0 ; set nozzle temperature and wait for it to be reached +; CP TOOLCHANGE END +M104 S240 T1 ; preheat T1 time: 30s lead 30.2s +; CP TOOLCHANGE START +M104 S200 T0 ; set nozzle temperature ;cooldown +T1 ; change extruder +M109 S240 T1 ; set nozzle temperature and wait for it to be reached +; CP TOOLCHANGE END +M104 S240 T0 ; preheat T0 time: 30s lead 30.2s +; CP TOOLCHANGE START +M104 S200 T1 ; set nozzle temperature ;cooldown +T0 ; change extruder +M109 S240 T0 ; set nozzle temperature and wait for it to be reached +; CP TOOLCHANGE END +M104 S240 T1 ; preheat T1 time: 31s lead 30.7s +; CP TOOLCHANGE START +M104 S200 T0 ; set nozzle temperature ;cooldown +T1 ; change extruder +M109 S240 T1 ; set nozzle temperature and wait for it to be reached +; CP TOOLCHANGE END +M104 S240 T0 ; preheat T0 time: 30s lead 30.4s +; CP TOOLCHANGE START +M104 S200 T1 ; set nozzle temperature ;cooldown +T0 ; change extruder +M109 S240 T0 ; set nozzle temperature and wait for it to be reached +; CP TOOLCHANGE END +M104 S240 T1 ; preheat T1 time: 30s lead 30.4s +; CP TOOLCHANGE START +M104 S200 T0 ; set nozzle temperature ;cooldown +T1 ; change extruder +M109 S240 T1 ; set nozzle temperature and wait for it to be reached +; CP TOOLCHANGE END +M104 S240 T0 ; preheat T0 time: 30s lead 30.0s +; CP TOOLCHANGE START +M104 S200 T1 ; set nozzle temperature ;cooldown +T0 ; change extruder +M109 S240 T0 ; set nozzle temperature and wait for it to be reached +; CP TOOLCHANGE END +M104 S240 T1 ; preheat T1 time: 30s lead 30.0s +; CP TOOLCHANGE START +M104 S200 T0 ; set nozzle temperature ;cooldown +T1 ; change extruder +M109 S240 T1 ; set nozzle temperature and wait for it to be reached +; CP TOOLCHANGE END +; CP TOOLCHANGE START +; CP TOOLCHANGE END +M104 S0 ; turn off temperature diff --git a/tests/fff_print/test_multifilament.cpp b/tests/fff_print/test_multifilament.cpp index f33a8e1e61..081c0fa2ba 100644 --- a/tests/fff_print/test_multifilament.cpp +++ b/tests/fff_print/test_multifilament.cpp @@ -1,12 +1,24 @@ #include +#include "libslic3r/GCode/GCodeProcessor.hpp" #include "libslic3r/GCodeReader.hpp" #include "test_helpers.hpp" +#include "test_utils.hpp" +#include #include +#include +#include +#include +#include +#include +#include #include +#include #include +#include +#include using namespace Slic3r; using namespace Slic3r::Test; @@ -27,6 +39,156 @@ static std::set tools_for_role(const std::string& gcode, const std::string& return tools; } +// X where the nozzle sits while each tagged _WAIT_FOR_TEMP_ON_WIPE_TOWER M109 blocks: +// the nearest preceding G1 carrying an X (the park travel emitted just before the wait). +static std::vector wait_park_xs(const std::string& gcode) +{ + std::vector lines; + std::istringstream stream(gcode); + for (std::string line; std::getline(stream, line);) + lines.emplace_back(std::move(line)); + std::vector xs; + for (size_t i = 0; i < lines.size(); ++i) { + if (lines[i].rfind("M109", 0) != 0 || lines[i].find("_WAIT_FOR_TEMP_ON_WIPE_TOWER") == std::string::npos) + continue; + for (size_t j = i; j-- > 0;) { + if (lines[j].rfind("G1 ", 0) != 0) + continue; + const size_t x_pos = lines[j].find('X'); + if (x_pos == std::string::npos) + continue; + xs.push_back(std::stod(lines[j].substr(x_pos + 1))); + break; + } + } + return xs; +} + +// Estimated print time at each 1-based line of an exported G-code file, from a second +// GCodeProcessor pass over it. MoveVertex::time is the duration of one move and gcode_id is the +// line it came from (already rebased past the M73 insertions), so the running sum before the first +// move of a line is the elapsed time at that line. The file carries its own config footer, so +// process_file configures the processor -- including the shared s_IsBBLPrinter static that other +// tests in this binary mutate -- from the settings the export itself used. +static std::vector elapsed_time_by_line(const std::string& gcode) +{ + ScopedTemporaryFile temp_gcode(".gcode"); + { + std::ofstream os(temp_gcode.string()); + os << gcode; + } + GCodeProcessor processor; + processor.process_file(temp_gcode.string()); + + constexpr size_t NORMAL = size_t(PrintEstimatedStatistics::ETimeMode::Normal); + const size_t n_lines = size_t(std::count(gcode.begin(), gcode.end(), '\n')) + 2; + std::vector elapsed(n_lines, 0.); + double running = 0.; + size_t next = 0; + for (const auto& move : processor.get_result().moves) { + const size_t id = std::min(move.gcode_id, n_lines - 1); + while (next <= id) + elapsed[next++] = running; + running += move.time[NORMAL]; + } + while (next < n_lines) + elapsed[next++] = running; + return elapsed; +} + +// The temperature-relevant projection of `gcode`: every M104/M109/Tn line, plus the toolchange and +// priming markers that anchor them, in order. A preheat -- an M104 the GCodeProcessor backtrace +// inserts mid-object, outside any block, naming a tool other than the one currently loaded -- also +// carries "lead s", the estimated time from there to the tool change it heats for, which is the +// property preheat_time controls. No other temperature command gets one: for an M104 retargeting +// the active tool (the first-layer-to-other-layers bump) or one inside a block, the distance to the +// next Tn is a layer time or a handful of moves and says nothing about preheat_time. Everything +// else is dropped, so the trace does not move when travel, tower geometry or line numbering do. +static std::vector temperature_trace(const std::string& gcode) +{ + std::vector lines; + std::istringstream stream(gcode); + for (std::string line; std::getline(stream, line);) { + line.erase(0, line.find_first_not_of(" \t")); + while (!line.empty() && (line.back() == '\r' || line.back() == ' ' || line.back() == '\t')) + line.pop_back(); + lines.emplace_back(std::move(line)); + } + const std::vector elapsed = elapsed_time_by_line(gcode); + + const auto is_tool = [](const std::string& l) { return l.size() >= 2 && l[0] == 'T' && std::isdigit((unsigned char) l[1]); }; + const auto is_temp = [](const std::string& l) { return l.rfind("M104", 0) == 0 || l.rfind("M109", 0) == 0; }; + const auto marker = [](const std::string& l) -> const char* { + for (const char* m : { "; CP TOOLCHANGE START", "; CP TOOLCHANGE END", "; CP PRIMING START", "; CP PRIMING END" }) + if (l.find(m) != std::string::npos) + return m; + return nullptr; + }; + + // Tool a "T" line, or the "T" argument of an M104, names -- or -1 when it names none. + const auto tool_of = [&is_tool](const std::string& l) -> int { + size_t t = std::string::npos; // index of the 'T' + if (is_tool(l)) + t = 0; + else if (l.rfind("M104", 0) == 0 && l.find(" T") != std::string::npos) + t = l.find(" T") + 1; + if (t == std::string::npos || t + 1 >= l.size() || !std::isdigit((unsigned char) l[t + 1])) + return -1; + return std::stoi(l.substr(t + 1)); + }; + + std::vector trace; + bool in_block = false; + int current_tool = -1; + for (size_t i = 0; i < lines.size(); ++i) { + if (const char* m = marker(lines[i])) { + in_block = std::string(m).find("START") != std::string::npos; + trace.emplace_back(m); // the marker alone: some carry a trailing tool id, some do not + } else if (is_tool(lines[i]) || is_temp(lines[i])) { + std::string entry = lines[i]; + const int named = tool_of(lines[i]); + if (!in_block && lines[i].rfind("M104", 0) == 0 && current_tool != -1 && named != -1 && named != current_tool) { + size_t tn = i; + while (tn < lines.size() && !is_tool(lines[tn])) + ++tn; + if (tn < lines.size()) { + char lead[32]; + std::snprintf(lead, sizeof(lead), "\tlead %.1fs", elapsed[tn + 1] - elapsed[i + 1]); + entry += lead; + } + } + if (is_tool(lines[i])) + current_tool = named; + trace.emplace_back(std::move(entry)); + } + } + return trace; +} + +// Splits a trace entry into its command text and the lead time appended after a tab, if any. +static std::pair> split_lead(const std::string& entry) +{ + const size_t tab = entry.find('\t'); + if (tab == std::string::npos) + return { entry, std::nullopt }; + const std::string tail = entry.substr(tab + 1); // "lead 30.2s" + return { entry.substr(0, tab), std::stod(tail.substr(tail.find(' ') + 1)) }; +} + +// Same command, and a lead time within half a second. The lead is an estimate summed over every +// move before it, so it drifts slightly with unrelated changes to travel or tower geometry; half a +// second is far below the tens of seconds a preheat leaving its backtrace position would shift it. +static bool trace_entries_match(const std::string& a, const std::string& b) +{ + const auto x = split_lead(a); + const auto y = split_lead(b); + if (x.first != y.first) + return false; + if (x.second.has_value() != y.second.has_value()) + return false; + return !x.second.has_value() || std::abs(*x.second - *y.second) <= 0.5; +} + // Tool index = filament id - 1; brim and skirt follow the wall filament. TEST_CASE("Each feature prints with its assigned filament", "[MultiFilament]") { @@ -86,6 +248,389 @@ TEST_CASE("Per-object wall filament override is honored", "[MultiFilament]") CHECK(tools_for_role(gcode, "infill") == std::set{ 0 }); // infill not overridden: stays on F1 } +// With wait_for_temp_on_wipe_tower the blocking M109 moves from right after the Tn command to +// a stop point parked beside the wipe tower (heat-up drool falls next to the tower, not onto +// its top): tagged with _WAIT_FOR_TEMP_ON_WIPE_TOWER, after the toolchange and before the +// repositioning move and the first extrusion of the purge. The restore that used to block there +// demotes to a non-blocking M104 and moves ahead of the Tn, so the incoming tool heats up over +// the change itself. Ordering and the off-tower stop are the contract here. +TEST_CASE("Toolchange temperature wait moves to the wipe tower when enabled", "[MultiFilament]") +{ + const bool wait_on_tower = GENERATE(false, true); + DYNAMIC_SECTION("wait_for_temp_on_wipe_tower " << (wait_on_tower ? 1 : 0)) { + const std::string gcode = slice_with_object_overrides( + { cube(20), cube(20) }, + multifilament_config(2, { + { "nozzle_diameter", "0.4,0.4" }, + { "printer_extruder_id", "1,2" }, + { "printer_extruder_variant", "Direct Drive Standard,Direct Drive Standard" }, + { "extruder_printable_height", "0,0" }, + { "single_extruder_multi_material", 0 }, + { "enable_prime_tower", 1 }, + { "prime_tower_width", 35 }, + { "wipe_tower_x", "50" }, + { "wipe_tower_y", "50" }, + { "ooze_prevention", 1 }, + { "standby_temperature_delta", -40 }, + // The post-processor's own preheat pass also inserts an M104 for the incoming + // filament ahead of the Tn; switch it off so the temperature commands under test + // are the only ones in the toolchange block. + { "preheat_time", 0 }, + { "wait_for_temp_on_wipe_tower", wait_on_tower ? 1 : 0 }, + }), + // One filament per object -> a toolchange on every layer. Assigned at the object + // level: the used-filament count that gates the prime tower is derived from + // object/volume configs on the harness's single apply (region filament ids such + // as sparse_infill_filament_id are not counted there and the tower would be + // silently disabled). + { { { "extruder", 1 } }, { { "extruder", 2 } } }); + + // Split into lines and scan the "; CP TOOLCHANGE START".."; CP TOOLCHANGE END" blocks. + std::vector lines; + std::istringstream gcode_stream(gcode); + for (std::string line; std::getline(gcode_stream, line);) + lines.emplace_back(std::move(line)); + const auto is_tool_line = [](const std::string& l) { return l.size() >= 2 && l[0] == 'T' && std::isdigit((unsigned char)l[1]); }; + const auto is_m109_line = [](const std::string& l) { return l.rfind("M109", 0) == 0; }; + // A non-blocking set-temperature naming one specific tool, e.g. "M104 S255 T1". + const auto is_m104_for_tool = [](const std::string& l, int tool) { + if (l.rfind("M104", 0) != 0) + return false; + const std::string token = " T" + std::to_string(tool); + const size_t at = l.find(token); + return at != std::string::npos && !std::isdigit((unsigned char)l[at + token.size()]); + }; + const auto is_tagged_wait = [](const std::string& l) { return l.find("_WAIT_FOR_TEMP_ON_WIPE_TOWER") != std::string::npos; }; + const auto is_extruding = [](const std::string& l) { + if (l.rfind("G1 ", 0) != 0) + return false; + const size_t e = l.find(" E"); + return e != std::string::npos && l.find_first_of("XY") != std::string::npos && l[e + 2] != '-'; + }; + + int checked_blocks = 0; + for (size_t i = 0; i < lines.size(); ++i) { + if (lines[i].find("; CP TOOLCHANGE START") == std::string::npos) + continue; + size_t block_end = i; + while (block_end < lines.size() && lines[block_end].find("; CP TOOLCHANGE END") == std::string::npos) + ++block_end; + size_t tool_line = block_end; + for (size_t j = i; j < block_end; ++j) + if (is_tool_line(lines[j])) { tool_line = j; break; } + if (tool_line == block_end) + continue; // final unload block, no toolchange + ++checked_blocks; + + // Where the incoming tool's target temperature is raised, relative to its Tn. + const int new_tool = std::stoi(lines[tool_line].substr(1)); + size_t preheat = tool_line, restore = block_end; + for (size_t j = i; j < tool_line; ++j) + if (is_m104_for_tool(lines[j], new_tool)) { preheat = j; break; } + for (size_t j = tool_line + 1; j < block_end; ++j) + if (is_m104_for_tool(lines[j], new_tool)) { restore = j; break; } + + size_t tagged_wait = block_end, untagged_m109 = block_end, first_extrusion = block_end; + for (size_t j = tool_line + 1; j < block_end; ++j) { + if (is_m109_line(lines[j]) && tagged_wait == block_end && is_tagged_wait(lines[j])) + tagged_wait = j; + if (is_m109_line(lines[j]) && untagged_m109 == block_end && !is_tagged_wait(lines[j])) + untagged_m109 = j; + if (first_extrusion == block_end && is_extruding(lines[j])) + first_extrusion = j; + } + INFO("toolchange block at line " << i + 1); + if (wait_on_tower) { + // The only blocking wait is the tagged one, parked beside the tower before the purge. + REQUIRE(tagged_wait < block_end); + CHECK(untagged_m109 == block_end); + // The target is raised ahead of the toolchange, so the incoming tool heats up + // while it is picked up, and nothing sets it again afterwards. + CHECK(preheat < tool_line); + CHECK(restore == block_end); + REQUIRE(first_extrusion < block_end); + CHECK(tagged_wait < first_extrusion); + // The travel preceding the wait parks outside the tower footprint. The tower + // auto-sizes, so derive its extent from the purge extrusions of this block. + size_t stop_line = block_end; + for (size_t j = tagged_wait; j-- > tool_line;) + if (lines[j].rfind("G1 ", 0) == 0 && lines[j].find('X') != std::string::npos) { stop_line = j; break; } + REQUIRE(stop_line < block_end); + const double stop_x = std::stod(lines[stop_line].substr(lines[stop_line].find('X') + 1)); + double purge_min_x = std::numeric_limits::max(), purge_max_x = std::numeric_limits::lowest(); + for (size_t j = tagged_wait; j < block_end; ++j) { + const size_t x_pos = lines[j].find('X'); + if (!is_extruding(lines[j]) || x_pos == std::string::npos) + continue; + const double x = std::stod(lines[j].substr(x_pos + 1)); + purge_min_x = std::min(purge_min_x, x); + purge_max_x = std::max(purge_max_x, x); + } + REQUIRE(purge_min_x <= purge_max_x); + INFO("stop travel: " << lines[stop_line] << " purge x range: " << purge_min_x << ".." << purge_max_x); + const bool beside_tower = stop_x < purge_min_x - 0.5 || stop_x > purge_max_x + 0.5; + CHECK(beside_tower); + } else { + // Stock behavior: the blocking wait follows the toolchange command directly, and + // nothing raises the incoming tool's target before it. + REQUIRE(untagged_m109 < block_end); + CHECK(tagged_wait == block_end); + CHECK(preheat == tool_line); + if (first_extrusion < block_end) + CHECK(untagged_m109 < first_extrusion); + } + i = block_end; + } + REQUIRE(checked_blocks > 0); + if (!wait_on_tower) + CHECK(gcode.find("_WAIT_FOR_TEMP_ON_WIPE_TOWER") == std::string::npos); + } +} + +// Priming runs before the first layer is set up, so set_extruder sees no layer at all: its +// on_first_layer() test is false and print_z is the initial layer height rather than 0. The +// tower nonetheless blocks on the first layer temperature there, so the pre-heat raised ahead +// of each priming Tn has to name that same temperature — pre-heating to the "other layers" +// value instead leaves the tagged M109 asking the firmware to cool back down before the +// priming lines are extruded. +TEST_CASE("Wipe tower priming pre-heats to the first layer temperature", "[MultiFilament]") +{ + const std::string gcode = slice_with_object_overrides( + { cube(20), cube(20) }, + multifilament_config(2, { + { "nozzle_diameter", "0.4,0.4" }, + { "printer_extruder_id", "1,2" }, + { "printer_extruder_variant", "Direct Drive Standard,Direct Drive Standard" }, + { "extruder_printable_height", "0,0" }, + { "single_extruder_multi_material", 0 }, + { "single_extruder_multi_material_priming", 1 }, + { "enable_prime_tower", 1 }, + { "prime_tower_width", 35 }, + { "wipe_tower_x", "50" }, + { "wipe_tower_y", "50" }, + { "preheat_time", 0 }, // see the wait test above + // Distinct enough that picking the wrong one is unambiguous. + { "nozzle_temperature_initial_layer", "215,215" }, + { "nozzle_temperature", "240,240" }, + { "wait_for_temp_on_wipe_tower", 1 }, + }), + { { { "extruder", 1 } }, { { "extruder", 2 } } }); + + std::vector lines; + std::istringstream gcode_stream(gcode); + for (std::string line; std::getline(gcode_stream, line);) + lines.emplace_back(std::move(line)); + // Temperature of an M104/M109, or -1 when the line is neither. + const auto temp_of = [](const std::string& l) { + if (l.rfind("M104", 0) != 0 && l.rfind("M109", 0) != 0) + return -1; + const size_t s = l.find('S'); + return s == std::string::npos ? -1 : std::stoi(l.substr(s + 1)); + }; + + size_t start = lines.size(), end = lines.size(); + for (size_t i = 0; i < lines.size(); ++i) { + if (start == lines.size() && lines[i].find("; CP PRIMING START") != std::string::npos) + start = i; + else if (start < lines.size() && lines[i].find("; CP PRIMING END") != std::string::npos) { + end = i; + break; + } + } + REQUIRE(start < end); + + int checked_waits = 0; + for (size_t i = start; i < end; ++i) { + if (lines[i].find("_WAIT_FOR_TEMP_ON_WIPE_TOWER") == std::string::npos) + continue; + ++checked_waits; + INFO("priming wait at line " << i + 1 << ": " << lines[i]); + CHECK(temp_of(lines[i]) == 215); // the tower waits on the first layer temperature + // The most recent set-temperature before it is the pre-heat, and must agree with it. + int preheat = -1; + for (size_t j = i; j-- > start;) + if ((preheat = temp_of(lines[j])) != -1) + break; + CHECK(preheat == 215); + } + REQUIRE(checked_waits > 0); // the feature under test is active +} + +// The temperature-wait park picks its side of the tower by testing bed containment with the +// tower position at psWipeTower generation time, while WipeTowerIntegration shifts the cached +// moves by the CURRENT position at export. Moving the tower normally invalidates only +// psSkirtBrim (tower gcode is position-independent), but the park makes it bed-relative, so a +// GUI-style move-and-reslice on the same Print must regenerate the tower — otherwise the stale +// park prints outside the bed. Contract: every tagged wait parks inside the printable area. +TEST_CASE("Wipe tower temperature-wait park is regenerated when the tower moves", "[MultiFilament]") +{ + // Two objects, one filament each: a toolchange (and a tagged wait) on every layer, like + // the wait test above — but on a single-extruder machine profile: the synthetic + // dual-extruder keys would drag in the extruder-variant expansion, which is not + // idempotent on the default machine profile and would pollute the re-apply diff below. + // Rectangle wall and no brim keep the tower-local footprint inside [0, 35], so the park + // sits at the generator's 2mm side gap: local -2 or 37. + DynamicPrintConfig config = multifilament_config(2, { + { "single_extruder_multi_material", 0 }, + { "enable_prime_tower", 1 }, + { "prime_tower_width", 35 }, + { "wipe_tower_wall_type", "rectangle" }, // the default rib bulges past the width + { "prime_tower_brim_width", 0 }, // the default 3 widens the first-layer envelope + { "printable_area", "0x0,200x0,200x200,0x200" }, + { "wipe_tower_x", "0" }, + { "wipe_tower_y", "50" }, + { "ooze_prevention", 1 }, + { "standby_temperature_delta", -40 }, + { "wait_for_temp_on_wipe_tower", 1 }, + }); + // init_print force-sets this on its own copy; set it here too so the re-apply below + // diffs in wipe_tower_x ONLY — the exact GUI increment under test. + config.set_key_value("gcode_comments", new ConfigOptionBool(true)); + + Print print; + Model model; + const std::vector> overrides{ + { { "extruder", 1 } }, { { "extruder", 2 } } }; // object-level, see the wait test above + init_print(std::vector{ cube(20), cube(20) }, print, model, config, &overrides); + + const std::string at_edge = gcode(print); + const std::vector at_edge_parks = wait_park_xs(at_edge); + REQUIRE(!at_edge_parks.empty()); // the feature under test is active + for (double x : at_edge_parks) { + INFO("wait park X " << x << " with the tower at x=0 on a 200mm bed"); + CHECK(x >= -0.05); + CHECK(x <= 200.05); + } + REQUIRE(print.is_step_done(psWipeTower)); + + // Move the tower to the right bed edge (164 + 35 = 199 keeps the body printable) and + // re-apply on the SAME Print, as the GUI does. Base the re-apply on the print's own + // resolved config so the diff is wipe_tower_x alone — re-applying the caller's config + // would also diff the apply-time extruder normalization write-backs, and those keys + // regenerate the tower for the wrong reason. The cached right-side park would export + // at 164 + 37 = 201, off the bed; regeneration clamps the park against the bed edge. + // Assemble the moved config exactly the way init_print assembled the first one — the + // apply-time normalization is only idempotent when both applies start from the same + // derivation, and any stray diff key would regenerate the tower for the wrong reason. + config.set_deserialize_strict({ { "wipe_tower_x", "164" } }); + DynamicPrintConfig moved_config = DynamicPrintConfig::full_print_config(); + moved_config.apply(config); + moved_config.set_key_value("gcode_comments", new ConfigOptionBool(true)); + print.apply(model, moved_config); + CHECK_FALSE(print.is_step_done(psWipeTower)); // the move must re-generate the tower + + const std::string moved = gcode(print); + const std::vector moved_parks = wait_park_xs(moved); + REQUIRE(!moved_parks.empty()); // the waits must survive the re-slice + for (double x : moved_parks) { + INFO("wait park X " << x << " with the tower at x=164 on a 200mm bed"); + CHECK(x >= -0.05); + CHECK(x <= 200.05); + } +} + +// The flag-off half of the three tests above. Every site wait_for_temp_on_wipe_tower touches is +// guarded -- set_extruder's pre-toolchange preheat block and its post_toolchange skip, +// toolchange_Change's park, the interface-temp guard in WipeTower2::tool_change, and append_tcr2's +// tagged-M109 filter -- so with the option off the feature has to be inert and temperature emission +// has to stay exactly as it was before the option existed. That is pinned against a trace captured +// from main rather than against expectations written from the current code, which would be +// re-derived from the very code they are meant to guard. +// +// Note what main emits here, since it is easy to misread as a missing wait: with preheat_time set, +// the toolchange carries no blocking M109 at all. GCodeProcessor's backtrace moves the heat-up to +// an M104 preheat_time seconds earlier and demotes the in-place command, which is the entire point +// of preheating. The lead times below are what pin that placement. +TEST_CASE("Toolchange temperature commands are unchanged when the wipe tower wait is off", "[MultiFilament][Regression]") +{ + // 20x20x5 cubes at the default 0.2mm layer height are 25 layers, one filament each, so there is + // a toolchange -- and a preheat ahead of it -- on every layer. + const std::string gcode = slice_with_object_overrides( + { make_cube(20., 20., 5.), make_cube(20., 20., 5.) }, + multifilament_config(2, { + { "nozzle_diameter", "0.4,0.4" }, + { "printer_extruder_id", "1,2" }, + { "printer_extruder_variant", "Direct Drive Standard,Direct Drive Standard" }, + { "extruder_printable_height", "0,0" }, + { "single_extruder_multi_material", 0 }, + { "single_extruder_multi_material_priming", 1 }, // reaches toolchange_Change's priming path + { "enable_prime_tower", 1 }, + { "prime_tower_width", 35 }, + { "wipe_tower_x", "50" }, + { "wipe_tower_y", "50" }, + // GCodeProcessor::apply_config enables the preheat backtrace on + // ooze_prevention && preheat_time > 0 && !SEMM && filaments > 1. That is what puts an + // M104 preheat_time seconds ahead of every Tn, and it also gives set_extruder's + // standby/restore pair, which the option demotes and moves when it is on. + { "ooze_prevention", 1 }, + { "standby_temperature_delta", -40 }, + { "preheat_time", 30 }, + { "preheat_steps", 1 }, + // enable_tower_interface_features is deliberately left off: the interface temperature + // is observable only through a change_filament_gcode template that reads + // new_filament_temp, since append_tcr2 strips the tower's own M109 for it, and the + // default template here has none. The option's interface-temp guard is covered by the + // enabled-path tests above instead. + // + // Distinct enough that a wrong pick between the two is unambiguous in the trace. + { "nozzle_temperature_initial_layer", "215,215" }, + { "nozzle_temperature", "240,240" }, + { "wait_for_temp_on_wipe_tower", 0 }, + }), + // Object-level, so the used-filament count that gates the prime tower is derived from it. + { { { "extruder", 1 } }, { { "extruder", 2 } } }); + + const std::vector trace = temperature_trace(gcode); + REQUIRE(trace.size() > 1); + CHECK(gcode.find("_WAIT_FOR_TEMP_ON_WIPE_TOWER") == std::string::npos); + + const std::string golden_path = std::string(TEST_DATA_DIR PATH_SEPARATOR "wipe_tower_temperature_trace_main.txt"); + + // Regenerate by appending this test and its helpers to the same file on main (dropping the + // wait_for_temp_on_wipe_tower key, which main's config does not know), rebuilding + // fff_print_tests there, running it with ORCA_UPDATE_WIPE_TOWER_TEMP_TRACE=1, copying the file + // it writes back here, and filling in the commit it was captured from. + if (std::getenv("ORCA_UPDATE_WIPE_TOWER_TEMP_TRACE") != nullptr) { + std::ofstream out(golden_path); + REQUIRE(out.good()); + out << "# Temperature and tool-change commands of a wait_for_temp_on_wipe_tower-off slice,\n" + "# captured from the main branch at . Regeneration is described\n" + "# at the test that reads this file: \"Toolchange temperature commands are unchanged\n" + "# when the wipe tower wait is off\" in tests/fff_print/test_multifilament.cpp.\n"; + for (const std::string& entry : trace) + out << entry << "\n"; + WARN("Rewrote " << golden_path << " from this run; it no longer reflects main."); + return; + } + + std::vector golden; + { + std::ifstream in(golden_path); + INFO("reading " << golden_path); + REQUIRE(in.good()); + for (std::string line; std::getline(in, line);) { + if (!line.empty() && line.back() == '\r') + line.pop_back(); + if (!line.empty() && line[0] != '#') + golden.push_back(std::move(line)); + } + } + REQUIRE(!golden.empty()); + + const size_t common = std::min(trace.size(), golden.size()); + for (size_t i = 0; i < common; ++i) { + if (trace_entries_match(trace[i], golden[i])) + continue; + // Report the first difference only: past it the two are misaligned and every later entry + // would be reported as a difference too. + INFO("first difference at trace entry " << i + 1); + INFO(" main: " << golden[i]); + INFO(" branch: " << trace[i]); + FAIL("temperature emission differs from main with wait_for_temp_on_wipe_tower off"); + } + CHECK(trace.size() == golden.size()); +} + // max_layer_height can be shorter than the extruder count (normalization sizes it to the // filament count under single_extruder_multi_material). calc_max_layer_height() in ToolOrdering // indexed it per-nozzle and read past the end. Shortened directly here to isolate that read; @@ -104,3 +649,4 @@ TEST_CASE("Multi-extruder slice stays in bounds with a short max_layer_height", init_and_process_print({ cube(20) }, print, config); REQUIRE_FALSE(print.objects().front()->layers().empty()); } + From 7c73739e1aefb6865be7eea89cad03cd679551a8 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Thu, 6 Aug 2026 12:45:39 +0800 Subject: [PATCH 30/66] Keep the prime tower and its approach travel on non-rectangular beds The placement clamps and the tower-approach router both stood in the bed's bounding box for the bed itself, so on a delta or hexagonal bed the prime tower could be parked in a corner that does not exist and the nozzle could be routed across it. Both now test the real printable outline, slicing reports a tower that does not fit instead of printing it off the bed, and a tower parked near an edge is routed along the clamped side rather than falling back to a straight line across the tower. Also fixes the placement validation rotating the tower hull by degrees read as radians about the plate origin, and never rotating the generated tower footprint at all. --- src/libslic3r/GCode.cpp | 95 ++++++++++++++++------------- src/libslic3r/GCode.hpp | 4 +- src/libslic3r/GCode/WipeTower.cpp | 59 +++++++++++++----- src/libslic3r/GCode/WipeTower.hpp | 6 +- src/libslic3r/Print.cpp | 19 +++++- src/slic3r/GUI/GLCanvas3D.cpp | 58 ++++++------------ src/slic3r/GUI/PartPlate.cpp | 17 ++++++ src/slic3r/GUI/PartPlate.hpp | 3 + src/slic3r/GUI/Selection.cpp | 17 +----- tests/fff_print/test_wipe_tower.cpp | 61 ++++++++++++++++++ 10 files changed, 224 insertions(+), 115 deletions(-) diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index 85903cb779..c20405781b 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -768,30 +768,31 @@ static std::vector get_path_of_change_filament(const Print& print) return changes; } + // Clearance the tower-approach router keeps around the tower: the avoid box is + // inflated by this much before routing, and the inflated corners must stay on the + // bed for a route to be generated at all. + static constexpr float wipe_tower_routing_clearance = 2.f; + // BBS // start_pos refers to the last position before the wipe_tower. // end_pos refers to the wipe tower's start_pos. // using the print coordinate system - Polyline WipeTowerIntegration::generate_path_to_wipe_tower(const Point& start_pos,const Point &end_pos , const BoundingBox& avoid_polygon , const BoundingBox& printer_bbx) const + Polyline WipeTowerIntegration::generate_path_to_wipe_tower(const Point& start_pos,const Point &end_pos , const BoundingBox& avoid_polygon , const Polygons& bed_polygons) const { Polyline res; - coord_t alpha = scaled(2.f); // offset distance + coord_t alpha = scaled(wipe_tower_routing_clearance); // offset distance BoundingBox avoid_polygon_inner = avoid_polygon; avoid_polygon_inner.offset(alpha); coord_t width = avoid_polygon_inner.max[0] - avoid_polygon_inner.min[0]; - Polygon bed_polygon = printer_bbx.polygon(); Vec2f v(1, 0); // the first print direction of end_pos. if (abs(end_pos[0] - avoid_polygon_inner.min[0]) < width / 2) v = -v; // judge whether the wipe tower's infill goes to the left or right. - // Judge whether the avoid_polygon_inner is outside the printer_bbx. + // Judge whether the avoid_polygon_inner is outside the bed. The real printable + // outline is tested (not its bounding box), so on circular/custom beds corners + // hanging off the bed are rejected. // If so, do nothing and just go directly to the end_pos. - bool is_bbx_in_bed = true; Points avoid_points = avoid_polygon_inner.polygon().points; - for (auto &wipe_tower_bbx_p : avoid_points) { - if (ClipperLib::PointInPolygon(wipe_tower_bbx_p, bed_polygon.points) != 1) { - is_bbx_in_bed = false; - break; - } - } + const bool is_bbx_in_bed = std::all_of(avoid_points.begin(), avoid_points.end(), + [&bed_polygons](const Point &pt) { return contains(bed_polygons, pt, /*border_result=*/false); }); if (!is_bbx_in_bed) { res.points.push_back(end_pos); return res; @@ -898,27 +899,17 @@ static std::vector get_path_of_change_filament(const Print& print) return Eigen::Rotation2Df(alpha) * (pt + m_rib_offset) + m_wipe_tower_pos; } - // Printable-area bounds for tower-approach routing, in object coordinates (shared by - // the BBL avoid-perimeter path in append_tcr and the Type2 skip-points router). - // Multi-nozzle: clamp the travel bounds to the region every extruder can reach - // (get_extruder_shared_printable_polygon) instead of the full bed. Gated on the - // multi-nozzle predicate so every existing single/dual printer keeps the historic - // full-printable_area routing byte-identical. - BoundingBox WipeTowerIntegration::printer_travel_bounds(GCode &gcodegen) const + // Bed outline the tower-approach router plans against, in object coordinates. The real + // outline is returned, not its bounding box, so the router's containment tests fail off + // the bed on circular/custom shapes; the multi-nozzle narrowing lives in the accessor. + Polygons WipeTowerIntegration::shared_printable_area(GCode &gcodegen) const { - const Vec2f plate_origin_2d(m_plate_origin(0), m_plate_origin(1)); - BoundingBox printer_bbx; - if (is_multi_nozzle_printer(gcodegen.m_config)) { - printer_bbx = get_extents(gcodegen.m_print->get_extruder_shared_printable_polygon()); - printer_bbx.min = wipe_tower_point_to_object_point(gcodegen, unscaled(printer_bbx.min) + plate_origin_2d); - printer_bbx.max = wipe_tower_point_to_object_point(gcodegen, unscaled(printer_bbx.max) + plate_origin_2d); - } else { - Points bed_points; - for (const auto& p : gcodegen.m_config.printable_area.values) - bed_points.push_back(wipe_tower_point_to_object_point(gcodegen, p.cast() + plate_origin_2d)); - printer_bbx = BoundingBox(bed_points); - } - return printer_bbx; + // The frame change is a pure translation, so transform the origin once. + const Point offset = wipe_tower_point_to_object_point(gcodegen, Vec2f(m_plate_origin(0), m_plate_origin(1))); + Polygons bed_polygons = gcodegen.m_print->get_extruder_shared_printable_polygon(); + for (Polygon &poly : bed_polygons) + poly.translate(offset); + return bed_polygons; } // With skip points enabled the Type2 tower wall has an opening at each toolchange's @@ -933,15 +924,37 @@ static std::vector get_path_of_change_filament(const Print& print) if (!WipeTower2::use_gap_wall(gcodegen.m_config)) return {}; const Vec2f plate_origin_2d(m_plate_origin(0), m_plate_origin(1)); - // Transform the tower-local bbx corners exactly like the tcr points; a rotated - // tower gets a conservative axis-aligned envelope. - Polygon avoid_points = scaled(m_wipe_tower_bbx).polygon(); - for (auto& p : avoid_points.points) - p = wipe_tower_point_to_object_point(gcodegen, transform_wt2_pt(unscale(p).cast()) + plate_origin_2d); - BoundingBox avoid_bbx(avoid_points.points); - if (avoid_bbx.contains(route_start)) + // Transform tower-local corners exactly like the tcr points; a rotated tower gets a + // conservative axis-aligned envelope from the result. + auto tower_polygon = [&](const BoundingBoxf &bbx) { + Polygon poly = scaled(bbx).polygon(); + for (Point &p : poly.points) + p = wipe_tower_point_to_object_point(gcodegen, transform_wt2_pt(unscale(p).cast()) + plate_origin_2d); + return poly; + }; + // The avoid envelope covers the first-layer brim (and rib flare), which a travel may + // cross freely: early-out only when the approach already starts over the tower body + // itself, so a start between the wall and the brim edge still gets routed in through + // the wall opening. Test the rotated polygon, not its bounding box — at angles off the + // axes the box's corner triangles cover most of the brim ring. + const float body_width = gcodegen.m_config.wipe_tower_wall_type.value == WipeTowerWallType::wtwRib ? m_wipe_tower_depth : m_right; + if (tower_polygon(BoundingBoxf(Vec2d(0., 0.), Vec2d(body_width, m_wipe_tower_depth))).contains(route_start)) return {}; - Polyline travel_polyline = generate_path_to_wipe_tower(route_start, start_wipe_pos, avoid_bbx, printer_travel_bounds(gcodegen)); + + const Polygons bed = shared_printable_area(gcodegen); + BoundingBox avoid_bbx = get_extents(tower_polygon(m_wipe_tower_bbx)); + // The inflated corners must stay on the bed for the router to generate a route at all: + // clamp the box against the bed shrunk by the clearance the router adds, so a tower + // parked near the bed edge is still routed along the clamped side instead of always + // travelling straight across the tower. + BoundingBox clamp_bbx = get_extents(bed); + clamp_bbx.offset(-(scaled(wipe_tower_routing_clearance) + SCALED_EPSILON)); + avoid_bbx.min = avoid_bbx.min.cwiseMax(clamp_bbx.min); + avoid_bbx.max = avoid_bbx.max.cwiseMin(clamp_bbx.max); + if (avoid_bbx.min.x() >= avoid_bbx.max.x() || avoid_bbx.min.y() >= avoid_bbx.max.y()) + return {}; + + Polyline travel_polyline = generate_path_to_wipe_tower(route_start, start_wipe_pos, avoid_bbx, bed); std::string gcode; // The polyline's last point is start_wipe_pos itself — emitted by the caller. for (size_t i = 0; i + 1 < travel_polyline.points.size(); ++i) @@ -1322,7 +1335,7 @@ static std::vector get_path_of_change_filament(const Print& print) Vec2f gcode_last_pos2d{gcode_last_pos[0], gcode_last_pos[1]}; Point gcode_last_pos2d_object = gcodegen.gcode_to_point(gcode_last_pos2d.cast() + plate_origin_2d.cast()); Point start_wipe_pos = wipe_tower_point_to_object_point(gcodegen, tool_change_start_pos + plate_origin_2d); - BoundingBox avoid_bbx, printer_bbx = printer_travel_bounds(gcodegen); + BoundingBox avoid_bbx; { // set avoid_bbx avoid_bbx = scaled(m_wipe_tower_bbx); @@ -1334,7 +1347,7 @@ static std::vector get_path_of_change_filament(const Print& print) avoid_bbx = BoundingBox(avoid_points.points); } std::string travel_to_wipe_tower_gcode; - Polyline travel_polyline = generate_path_to_wipe_tower(gcode_last_pos2d_object, start_wipe_pos, avoid_bbx, printer_bbx); + Polyline travel_polyline = generate_path_to_wipe_tower(gcode_last_pos2d_object, start_wipe_pos, avoid_bbx, shared_printable_area(gcodegen)); for (size_t i = 0; i < travel_polyline.points.size(); ++i) { const auto &p = travel_polyline.points[i]; diff --git a/src/libslic3r/GCode.hpp b/src/libslic3r/GCode.hpp index 6346334889..6bdb04a8a9 100644 --- a/src/libslic3r/GCode.hpp +++ b/src/libslic3r/GCode.hpp @@ -130,11 +130,11 @@ public: private: WipeTowerIntegration& operator=(const WipeTowerIntegration&); std::string append_tcr(GCode &gcodegen, const WipeTower::ToolChangeResult &tcr, int new_extruder_id, double z = -1.) const; - Polyline generate_path_to_wipe_tower(const Point &start_pos, const Point &end_pos, const BoundingBox &avoid_polygon, const BoundingBox &printer_bbx) const; + Polyline generate_path_to_wipe_tower(const Point &start_pos, const Point &end_pos, const BoundingBox &avoid_polygon, const Polygons &bed_polygons) const; std::string append_tcr2(GCode &gcodegen, const WipeTower::ToolChangeResult &tcr, int new_extruder_id, double z = -1.) const; std::string travel_to_tower_gap(GCode &gcodegen, const Point &route_start, const Point &start_wipe_pos) const; Vec2f transform_wt2_pt(const Vec2f &pt) const; - BoundingBox printer_travel_bounds(GCode &gcodegen) const; + Polygons shared_printable_area(GCode &gcodegen) const; // Postprocesses gcode: rotates and moves G1 extrusions and returns result std::string post_process_wipe_tower_moves(const WipeTower::ToolChangeResult& tcr, const Vec2f& translation, float angle) const; diff --git a/src/libslic3r/GCode/WipeTower.cpp b/src/libslic3r/GCode/WipeTower.cpp index b97e773e63..5834937169 100644 --- a/src/libslic3r/GCode/WipeTower.cpp +++ b/src/libslic3r/GCode/WipeTower.cpp @@ -1630,25 +1630,56 @@ float WipeTower::get_auto_brim_by_height(float max_height) { return 8.f; } -Vec2f WipeTower::move_box_inside_box(const BoundingBox &box1, const BoundingBox &box2,int scaled_offset) +Vec2f WipeTower::move_box_inside_polygon(const BoundingBox &box, const Polygons &polygons, coord_t offset) { - Vec2f res{0, 0}; - if (box1.size()[0] >= box2.size()[0]- 2*scaled_offset || box1.size()[1] >= box2.size()[1]-2*scaled_offset) return res; + if (polygons.empty()) return Vec2f{0.f, 0.f}; - if (box1.max[0] > box2.max[0] - scaled_offset) { - res[0] = unscaled((box2.max[0] - scaled_offset) - box1.max[0]); - } - else if (box1.min[0] < box2.min[0] + scaled_offset) { - res[0] = unscaled((box2.min[0] + scaled_offset) - box1.min[0]); + const BoundingBox bed = get_extents(polygons); + // No position fits the footprint. + if (box.size().x() >= bed.size().x() - 2 * offset || box.size().y() >= bed.size().y() - 2 * offset) + return Vec2f{0.f, 0.f}; + + // Clamp against the bounding box first, moving only along the axis that is violated so a dragged + // prime tower slides along the bed edge instead of jumping inwards. + Point shift(0, 0); + for (int axis = 0; axis < 2; ++axis) { + if (box.max[axis] > bed.max[axis] - offset) + shift[axis] = (bed.max[axis] - offset) - box.max[axis]; + else if (box.min[axis] < bed.min[axis] + offset) + shift[axis] = (bed.min[axis] + offset) - box.min[axis]; } - if (box1.max[1] > box2.max[1] - scaled_offset) { - res[1] = unscaled((box2.max[1] - scaled_offset) - box1.max[1]); + // A bed that fills its own bounding box is fully clamped by that, so every rectangular bed — all + // but the delta-style profiles — stops here and keeps its historic placement, including when a + // negative margin lets the footprint hang over the edge. The tolerance is relative because an + // exact rectangle loses a few ulps once the areas are squared world coordinates. + double area = 0.; + for (const Polygon &poly : polygons) area += std::abs(poly.area()); + const double bed_area = double(bed.size().x()) * double(bed.size().y()); + if (area >= bed_area * (1. - EPSILON)) return unscaled(shift); + + // Clamp a negative margin (an auto brim width that has not been resolved yet) to zero: padding by + // it would shrink the footprint and hand back a position the validation still rejects. The + // epsilon lets the move's round trip through millimeters land on the outline without counting as + // a violation. + BoundingBox padded = box.inflated(std::max(offset, 0) - SCALED_EPSILON); + padded.translate(shift); + auto fits = [&padded, &polygons](const Point &move) { + BoundingBox moved = padded; + moved.translate(move); + return diff(Polygons{moved.polygon()}, polygons).empty(); + }; + if (fits(Point(0, 0))) return unscaled(shift); + + // Walk towards the middle of the bed. On every non-rectangular bed we ship, the fitting positions + // form a convex region around it, so bisecting stops just inside the outline. + Point lo(0, 0), hi = bed.center() - padded.center(); + if (!fits(hi)) return unscaled(shift); + for (int i = 0; i < 12; ++i) { + const Point mid = (lo + hi) / 2; + if (fits(mid)) hi = mid; else lo = mid; } - else if (box1.min[1] < box2.min[1] + scaled_offset) { - res[1] = unscaled((box2.min[1] + scaled_offset) - box1.min[1]); - } - return res; + return unscaled(Point(shift + hi)); } Polygon WipeTower::rib_section(float width, float depth, float rib_length, float rib_width,bool fillet_wall) diff --git a/src/libslic3r/GCode/WipeTower.hpp b/src/libslic3r/GCode/WipeTower.hpp index 0819a04f10..045c82cbf3 100644 --- a/src/libslic3r/GCode/WipeTower.hpp +++ b/src/libslic3r/GCode/WipeTower.hpp @@ -45,7 +45,11 @@ public: static TriangleMesh its_make_rib_tower(float width, float depth, float height, float rib_length, float rib_width, bool fillet_wall); static TriangleMesh its_make_rib_brim(const Polygon& brim, float layer_height); static Polygon rib_section(float width, float depth, float rib_length, float rib_width, bool fillet_wall); - static Vec2f move_box_inside_box(const BoundingBox &box1, const BoundingBox &box2, int offset = 0); + // Translation that brings a footprint inside the printable outline, padded by offset. The prime + // tower is validated against the real outline (see layered_print_cleareance_valid), so clamping + // against the bounding box alone would leave it off a delta or hexagonal bed. box and polygons + // must share one scaled coordinate frame; the translation comes back in millimeters. + static Vec2f move_box_inside_polygon(const BoundingBox &box, const Polygons &polygons, coord_t offset = 0); static Polygon rounding_polygon(Polygon &polygon, double rounding = 2., double angle_tol = 30. / 180. * PI); struct Extrusion { diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index 61025c89d7..6a34cc31ff 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -1048,13 +1048,14 @@ static StringObjectException layered_print_cleareance_valid(const Print &print, wipe_tower_convex_hull.points.emplace_back(scale_(x + width), scale_(y)); wipe_tower_convex_hull.points.emplace_back(scale_(x + width), scale_(y + depth)); wipe_tower_convex_hull.points.emplace_back(scale_(x), scale_(y + depth)); - wipe_tower_convex_hull.rotate(a); + wipe_tower_convex_hull.rotate(Geometry::deg2rad(a), Point(scale_(x), scale_(y))); convex_hulls_temp.push_back(wipe_tower_convex_hull); } else { //here, wipe_tower_polygon is not always convex. Polygon wipe_tower_polygon; if (print.wipe_tower_data().wipe_tower_mesh_data) wipe_tower_polygon = print.wipe_tower_data().wipe_tower_mesh_data->bottom; + wipe_tower_polygon.rotate(Geometry::deg2rad(a)); wipe_tower_polygon.translate(Point(scale_(x), scale_(y))); convex_hulls_temp.push_back(wipe_tower_polygon); } @@ -1073,6 +1074,22 @@ static StringObjectException layered_print_cleareance_valid(const Print &print, if (print_config.enable_wrapping_detection.value && !intersection({wrapping_poly}, convex_hulls_temp).empty()) { return {L("Prime Tower") + L(" is too close to clumping detection area, and collisions will be caused.\n")}; } + // Skip the containment check for towers that will never be printed (single-filament + // prints without smooth timelapse keep the config's tower position but emit nothing). + // Pre-generation only the body square is tested — the auto-brim estimate can overshoot + // the generated brim by several mm and must not hard-fail a print that physically fits. + // Post-generation the mesh bottom already includes the real brim, so the exact + // footprint is tested. + if (filaments_count > 1 || print.enable_timelapse_print()) { + // The shared printable polygon is plate-local, while the tower polygons above are + // already shifted by the plate origin. + Polygons printable_polys = print.get_extruder_shared_printable_polygon(); + const Point plate_shift(scale_(plate_origin.x()), scale_(plate_origin.y())); + for (Polygon &p : printable_polys) + p.translate(plate_shift); + if (!diff(convex_hulls_temp, printable_polys).empty()) + return {L("Prime Tower") + L(" is partially outside the printable area, and it cannot be printed.\n")}; + } return {}; } diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 110b6697ae..45c0d87791 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -2899,47 +2899,23 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re int nozzle_nums = wxGetApp().preset_bundle->get_printer_extruder_count(); Vec3d wipe_tower_size = ppl.get_plate(plate_id)->estimate_wipe_tower_size(print_cfg, w, v, nozzle_nums, 0, false, dynamic_cast(dconfig.option("enable_wrapping_detection"))->value); - { - const float margin = WIPE_TOWER_MARGIN + brim_width; - BoundingBoxf3 plate_bbox = part_plate->get_bounding_box(); - BoundingBoxf plate_bbox_2d(Vec2d(plate_bbox.min(0), plate_bbox.min(1)), Vec2d(plate_bbox.max(0), plate_bbox.max(1))); - const std::vector &extruder_areas = part_plate->get_extruder_areas(); - for (Pointfs points : extruder_areas) { - BoundingBoxf bboxf(points); - plate_bbox_2d.min = plate_bbox_2d.min(0) >= bboxf.min(0) ? plate_bbox_2d.min : bboxf.min; - plate_bbox_2d.max = plate_bbox_2d.max(0) <= bboxf.max(0) ? plate_bbox_2d.max : bboxf.max; - } - - coordf_t plate_bbox_x_min_local_coord = plate_bbox_2d.min(0) - plate_origin(0); - coordf_t plate_bbox_x_max_local_coord = plate_bbox_2d.max(0) - plate_origin(0); - coordf_t plate_bbox_y_max_local_coord = plate_bbox_2d.max(1) - plate_origin(1); - - if (!current_print->is_step_done(psWipeTower) || !current_print->wipe_tower_data().wipe_tower_mesh_data) { - // update for wipe tower position - { - int volume_idx_wipe_tower_new = m_volumes.load_wipe_tower_preview(1000 + plate_id, x + plate_origin(0), y + plate_origin(1), - (float) wipe_tower_size(0), (float) wipe_tower_size(1), (float) wipe_tower_size(2), - a, - /*!print->is_step_done(psWipeTower)*/ true, brim_width); - int volume_idx_wipe_tower_old = volume_idxs_wipe_tower_old[plate_id]; - if (volume_idx_wipe_tower_old != -1) map_glvolume_old_to_new[volume_idx_wipe_tower_old] = volume_idx_wipe_tower_new; - } - } else { - const float margin = 2.f; - auto tower_bottom = current_print->wipe_tower_data().wipe_tower_mesh_data->bottom; - tower_bottom.translate(scaled(Vec2d{x, y})); - tower_bottom.translate(scaled(Vec2d{plate_origin[0], plate_origin[1]})); - auto tower_bottom_bbox = get_extents(tower_bottom); - BoundingBoxf3 plate_bbox = wxGetApp().plater()->get_partplate_list().get_plate(plate_id)->get_build_volume(true); - BoundingBox plate_bbox2d = BoundingBox(scaled(Vec2f(plate_bbox.min[0], plate_bbox.min[1])), scaled(Vec2f(plate_bbox.max[0], plate_bbox.max[1]))); - Vec2f offset = WipeTower::move_box_inside_box(tower_bottom_bbox, plate_bbox2d, scaled(margin)); - int volume_idx_wipe_tower_new = m_volumes.load_real_wipe_tower_preview(1000 + plate_id, x + plate_origin(0), y + plate_origin(1), - current_print->wipe_tower_data().wipe_tower_mesh_data->real_wipe_tower_mesh, - current_print->wipe_tower_data().wipe_tower_mesh_data->real_brim_mesh, - true,a,/*!print->is_step_done(psWipeTower)*/ true, m_initialized); - int volume_idx_wipe_tower_old = volume_idxs_wipe_tower_old[plate_id]; - if (volume_idx_wipe_tower_old != -1) map_glvolume_old_to_new[volume_idx_wipe_tower_old] = volume_idx_wipe_tower_new; - } + // The stored position is already clamped onto the bed, by + // set_default_wipe_tower_pos_for_plate and again on every drag. + if (!current_print->is_step_done(psWipeTower) || !current_print->wipe_tower_data().wipe_tower_mesh_data) { + // update for wipe tower position + int volume_idx_wipe_tower_new = m_volumes.load_wipe_tower_preview(1000 + plate_id, x + plate_origin(0), y + plate_origin(1), + (float) wipe_tower_size(0), (float) wipe_tower_size(1), (float) wipe_tower_size(2), + a, + /*!print->is_step_done(psWipeTower)*/ true, brim_width); + int volume_idx_wipe_tower_old = volume_idxs_wipe_tower_old[plate_id]; + if (volume_idx_wipe_tower_old != -1) map_glvolume_old_to_new[volume_idx_wipe_tower_old] = volume_idx_wipe_tower_new; + } else { + int volume_idx_wipe_tower_new = m_volumes.load_real_wipe_tower_preview(1000 + plate_id, x + plate_origin(0), y + plate_origin(1), + current_print->wipe_tower_data().wipe_tower_mesh_data->real_wipe_tower_mesh, + current_print->wipe_tower_data().wipe_tower_mesh_data->real_brim_mesh, + true,a,/*!print->is_step_done(psWipeTower)*/ true, m_initialized); + int volume_idx_wipe_tower_old = volume_idxs_wipe_tower_old[plate_id]; + if (volume_idx_wipe_tower_old != -1) map_glvolume_old_to_new[volume_idx_wipe_tower_old] = volume_idx_wipe_tower_new; } } } diff --git a/src/slic3r/GUI/PartPlate.cpp b/src/slic3r/GUI/PartPlate.cpp index 4f57c2577d..3ab764aaf3 100644 --- a/src/slic3r/GUI/PartPlate.cpp +++ b/src/slic3r/GUI/PartPlate.cpp @@ -3337,6 +3337,11 @@ BoundingBoxf3 PartPlate::get_build_volume(bool use_share) return plate_box; } +Polygon PartPlate::get_shared_printable_polygon() const +{ + return m_extruder_areas.empty() ? Polygon::new_scale(m_shape) : get_shared_poly(m_extruder_areas); +} + bool PartPlate::contains(const Vec3d& point) const { return m_bounding_box.contains(point); @@ -4412,6 +4417,18 @@ void PartPlateList::set_default_wipe_tower_pos_for_plate(int plate_idx, bool ini } } + // The bounding box above still allows a corner a delta or hexagonal bed does not have, and the + // prime tower is validated against the real outline — pull it onto the bed before storing. + { + Polygons bed{part_plate->get_shared_printable_polygon()}; + bed.front().translate(Point(-scaled(plate_origin.x()), -scaled(plate_origin.y()))); // into the frame x/y live in + const BoundingBox tower(Point::new_scale(x, y), + Point::new_scale(x + wipe_tower_size(0), y + wipe_tower_size(1))); + const Vec2f move = WipeTower::move_box_inside_polygon(tower, bed, scaled(margin)); + x += move.x(); + y += move.y(); + } + ConfigOptionFloat wt_x_opt(x); ConfigOptionFloat wt_y_opt(y); dynamic_cast(proj_cfg.option("wipe_tower_x"))->set_at(&wt_x_opt, plate_idx, 0); diff --git a/src/slic3r/GUI/PartPlate.hpp b/src/slic3r/GUI/PartPlate.hpp index 8f4055706f..47481dcad4 100644 --- a/src/slic3r/GUI/PartPlate.hpp +++ b/src/slic3r/GUI/PartPlate.hpp @@ -425,6 +425,9 @@ public: const BoundingBox get_bounding_box_crd(); BoundingBoxf3 get_plate_box() {return get_build_volume();} BoundingBoxf3 get_build_volume(bool use_share = false); + // Polygon counterpart of get_build_volume(true), in scaled world coordinates. The bounding box + // that one returns hides the corners a non-rectangular bed does not have. + Polygon get_shared_printable_polygon() const; const std::vector& get_exclude_areas() { return m_exclude_bounding_box; } diff --git a/src/slic3r/GUI/Selection.cpp b/src/slic3r/GUI/Selection.cpp index 5d6a545873..b6d7abde21 100644 --- a/src/slic3r/GUI/Selection.cpp +++ b/src/slic3r/GUI/Selection.cpp @@ -1270,9 +1270,7 @@ void Selection::translate(const Vec3d &displacement, TransformationType transfor } else { if (v.is_wipe_tower) {//in world cs int plate_idx = v.object_idx() - 1000; - BoundingBoxf3 plate_bbox = wxGetApp().plater()->get_partplate_list().get_plate(plate_idx)->get_build_volume(true); - BoundingBox plate_bbox2d = BoundingBox(scaled(Vec2f(plate_bbox.min[0], plate_bbox.min[1])), scaled(Vec2f(plate_bbox.max[0], plate_bbox.max[1]))); - Vec3d tower_size = v.bounding_box().size(); + const Polygons bed_polys{wxGetApp().plater()->get_partplate_list().get_plate(plate_idx)->get_shared_printable_polygon()}; Vec3d tower_origin = m_cache.volumes_data[i].get_volume_position(); Vec3d actual_displacement = displacement; bool show_read_wipe_tower = wxGetApp().plater()->get_partplate_list().get_plate(plate_idx)->fff_print()->is_step_done(psWipeTower); @@ -1287,18 +1285,7 @@ void Selection::translate(const Vec3d &displacement, TransformationType transfor BoundingBoxf3 tower_bbox = v.bounding_box(); tower_bbox.translate(actual_displacement + tower_origin); BoundingBox tower_bbox2d = BoundingBox(scaled(Vec2f(tower_bbox.min[0], tower_bbox.min[1])), scaled(Vec2f(tower_bbox.max[0], tower_bbox.max[1]))); - Vec2f offset = WipeTower::move_box_inside_box(tower_bbox2d, plate_bbox2d,scaled(margin)); - //if (tower_origin(0) + actual_displacement(0) - margin < plate_bbox.min(0)) { - // actual_displacement(0) = plate_bbox.min(0) - tower_origin(0) + margin; - //} else if (tower_origin(0) + actual_displacement(0) + tower_size(0) + margin > plate_bbox.max(0)) { - // actual_displacement(0) = plate_bbox.max(0) - tower_origin(0) - tower_size(0) - margin; - //} - - //if (tower_origin(1) + actual_displacement(1) - margin < plate_bbox.min(1)) { - // actual_displacement(1) = plate_bbox.min(1) - tower_origin(1) + margin; - //} else if (tower_origin(1) + actual_displacement(1) + tower_size(1) + margin > plate_bbox.max(1)) { - // actual_displacement(1) = plate_bbox.max(1) - tower_origin(1) - tower_size(1) - margin; - //} + const Vec2f offset = WipeTower::move_box_inside_polygon(tower_bbox2d, bed_polys, scaled(margin)); actual_displacement += Vec3d(offset[0], offset[1],0); v.set_volume_offset(m_cache.volumes_data[i].get_volume_position() + actual_displacement); } diff --git a/tests/fff_print/test_wipe_tower.cpp b/tests/fff_print/test_wipe_tower.cpp index bb9e4781d1..2bd7ac4189 100644 --- a/tests/fff_print/test_wipe_tower.cpp +++ b/tests/fff_print/test_wipe_tower.cpp @@ -3,6 +3,8 @@ #include #include +#include "libslic3r/BoundingBox.hpp" +#include "libslic3r/ClipperUtils.hpp" #include "libslic3r/GCode/GCodeProcessor.hpp" #include "libslic3r/GCode/WipeTower.hpp" #include "libslic3r/PrintConfig.hpp" @@ -53,6 +55,65 @@ TEST_CASE("Other flavors wait in the wipe tower with a seconds dwell", "[WipeTow CHECK(wait_command(flavor, 1.5f) == "G4 S1.500\n"); } +// The prime tower is validated against the real printable outline, so the placement clamps have to +// agree with it wherever that outline is not a rectangle. A regular hexagon inscribed in a 200mm +// circle stands in for the shipped delta beds. +TEST_CASE("The wipe tower placement clamp follows a non-rectangular bed outline", "[WipeTower]") +{ + const coord_t margin = scaled(1.); + auto square_at = [](double x, double y, double side) { + return BoundingBox(Point::new_scale(x, y), Point::new_scale(x + side, y + side)); + }; + // Does the footprint, padded by pad, sit inside the outline once the returned move is applied? + auto lands_inside = [](BoundingBox box, const Polygons &bed, const Vec2f &move, coord_t pad) { + box.translate(Point::new_scale(move.x(), move.y())); + return diff(Polygons{box.inflated(pad).polygon()}, bed).empty(); + }; + + const Polygons hex_bed{make_circle_num_segments(scaled(100.), 6)}; + const Polygons square_bed{Polygon::new_scale(Pointfs{{0., 0.}, {200., 0.}, {200., 200.}, {0., 200.}})}; + + SECTION("a rectangular bed is left to the bounding box clamp") { + const Vec2f move = WipeTower::move_box_inside_polygon(square_at(50., 50., 30.), square_bed, margin); + CHECK_THAT(move.x(), Catch::Matchers::WithinAbs(0., 1e-6)); + CHECK_THAT(move.y(), Catch::Matchers::WithinAbs(0., 1e-6)); + } + + // Dragging the tower off one edge may not pull it away from the other, or it would jump out from + // under the cursor instead of sliding along the edge. + SECTION("only the violated axis is clamped") { + const Vec2f move = WipeTower::move_box_inside_polygon(square_at(185., 50., 30.), square_bed, margin); + CHECK_THAT(move.x(), Catch::Matchers::WithinAbs(-16., 1e-6)); + CHECK_THAT(move.y(), Catch::Matchers::WithinAbs(0., 1e-6)); + } + + SECTION("a footprint already inside the outline is left alone") { + const Vec2f move = WipeTower::move_box_inside_polygon(square_at(-15., -15., 30.), hex_bed, margin); + CHECK_THAT(move.x(), Catch::Matchers::WithinAbs(0., 1e-6)); + CHECK_THAT(move.y(), Catch::Matchers::WithinAbs(0., 1e-6)); + } + + SECTION("a footprint in the bounding box corner is pulled onto the bed") { + const BoundingBox box = square_at(55., 50., 30.); + REQUIRE_FALSE(lands_inside(box, hex_bed, Vec2f::Zero(), margin)); // in the bbox, off the hexagon + CHECK(lands_inside(box, hex_bed, WipeTower::move_box_inside_polygon(box, hex_bed, margin), margin)); + } + + // An unresolved auto brim width reaches the drag clamp as a negative margin. Padding by it would + // shrink the footprint and hand back a position the slice validation still rejects. + SECTION("a negative margin still lands the footprint inside the outline") { + const BoundingBox box = square_at(55., 50., 30.); + const coord_t brim = scaled(-0.5); + CHECK(lands_inside(box, hex_bed, WipeTower::move_box_inside_polygon(box, hex_bed, brim), 0)); + } + + SECTION("a footprint too large for the bed is left alone") { + const Vec2f move = WipeTower::move_box_inside_polygon(square_at(-200., -200., 400.), hex_bed, margin); + CHECK_THAT(move.x(), Catch::Matchers::WithinAbs(0., 1e-6)); + CHECK_THAT(move.y(), Catch::Matchers::WithinAbs(0., 1e-6)); + } +} + // The cases above only exercise the helpers in isolation. The one below slices a real // two-filament print, so it also covers the binding constraint of both changes: that the // configured `gcode_flavor` reaches the wipe tower writer and lands in the exported G-code. From 32a4e0fb3700aca32901ce05197a64c58951fa00 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Thu, 6 Aug 2026 16:23:04 +0800 Subject: [PATCH 31/66] Size the prime tower from the actual flush volumes Prime towers reserved depth from the prime volume alone, ignoring the flush matrix: rib-wall towers in both the engine and the preview, and rectangle and cone towers in the preview, which never carried the flush-aware estimate the engine already used. The preview also read the print preset, which does not carry the printer- and filament-scope keys the estimate needs and so silently fell back to defaults. On multi-nozzle printers the flush matrix, which holds one block per nozzle, was additionally read as a single block. The tower could come out too small for the purge it has to hold. The flush-based estimate also skipped the height-based minimum depth that the prime-volume one applies, so low-flush prints could estimate a tower shallower than the one that actually gets built. --- src/libslic3r/GCode/WipeTower2.cpp | 61 ++++++++++++++++++++++++------ src/libslic3r/GCode/WipeTower2.hpp | 6 ++- src/libslic3r/Print.cpp | 32 ++++++---------- src/slic3r/GUI/GLCanvas3D.cpp | 6 ++- src/slic3r/GUI/PartPlate.cpp | 19 +++++++--- 5 files changed, 83 insertions(+), 41 deletions(-) diff --git a/src/libslic3r/GCode/WipeTower2.cpp b/src/libslic3r/GCode/WipeTower2.cpp index 34e4b6146f..ee0f9c375a 100644 --- a/src/libslic3r/GCode/WipeTower2.cpp +++ b/src/libslic3r/GCode/WipeTower2.cpp @@ -2130,31 +2130,68 @@ std::pair WipeTower2::get_wipe_tower_cone_base(double width, dou } // Static method to extract wipe_volumes[from][to] from the configuration. -std::vector> WipeTower2::extract_wipe_volumes(const PrintConfig& config) +// Takes a ConfigBase so the GUI's wipe tower size estimate can pass the plate's +// DynamicPrintConfig directly instead of materializing a full PrintConfig per call. +std::vector> WipeTower2::extract_wipe_volumes(const ConfigBase& config) { - // Get wiping matrix to get number of extruders and convert vector to vector: - std::vector wiping_matrix(cast(config.flush_volumes_matrix.values)); - auto scale = config.flush_multiplier.get_at(0); + // flush_volumes_matrix holds one filaments x filaments block per nozzle (written by + // PresetBundle::update_multi_material_filament_presets), so the filament count is + // sqrt(size / nozzles). One tower serves every nozzle and the filament to nozzle assignment is + // only decided later by ToolOrdering, so fold the blocks with std::max: the depth reserved here + // has to cover the worst nozzle. With a single nozzle the fold has one term. + const std::vector &raw_matrix = config.option("flush_volumes_matrix")->values; + const auto *nozzle_diameter = config.option("nozzle_diameter"); + size_t nozzle_nums = (nozzle_diameter == nullptr || nozzle_diameter->values.empty()) ? 1 : nozzle_diameter->values.size(); + unsigned int number_of_extruders = (unsigned int)(sqrt(raw_matrix.size() / nozzle_nums) + EPSILON); + if (size_t(number_of_extruders) * number_of_extruders * nozzle_nums != raw_matrix.size()) { + // Saved for a different nozzle count (older project, or the printer was just switched): + // fall back to reading the whole option as one block, as this did before. + nozzle_nums = 1; + number_of_extruders = (unsigned int)(sqrt(raw_matrix.size()) + EPSILON); + } // The values shall only be used when SEMM is enabled. The purging for other printers // is determined by filament_minimal_purge_on_wipe_tower. - if (! config.purge_in_prime_tower.value || ! config.single_extruder_multi_material.value) - std::fill(wiping_matrix.begin(), wiping_matrix.end(), 0.f); + const bool purge = config.option("purge_in_prime_tower")->value + && config.option("single_extruder_multi_material")->value; - // Extract purging volumes for each extruder pair: - std::vector> wipe_volumes; - const unsigned int number_of_extruders = (unsigned int)(sqrt(wiping_matrix.size())+EPSILON); - for (size_t i = 0; i(wiping_matrix.begin()+i*number_of_extruders, wiping_matrix.begin()+(i+1)*number_of_extruders)); + // Extract purging volumes for each extruder pair, each nozzle's block scaled by its own multiplier: + std::vector> wipe_volumes(number_of_extruders, std::vector(number_of_extruders, 0.f)); + if (purge) { + const auto *multiplier = config.option("flush_multiplier"); + for (size_t nozzle_id = 0; nozzle_id < nozzle_nums; ++nozzle_id) { + const std::vector block = get_flush_volumes_matrix(raw_matrix, nozzle_id, nozzle_nums); + const double scale = multiplier->get_at(nozzle_id); + for (unsigned int i = 0; i(wipe_volumes[i][j], float(block[size_t(i) * number_of_extruders + j]) * scale); + } + } // Also include filament_minimal_purge_on_wipe_tower. This is needed for the preview. + const auto *minimal_purge = config.option("filament_minimal_purge_on_wipe_tower"); for (unsigned int i = 0; i(wipe_volumes[i][j] * scale, config.filament_minimal_purge_on_wipe_tower.get_at(j)); + wipe_volumes[i][j] = std::max(wipe_volumes[i][j], minimal_purge->get_at(j)); return wipe_volumes; } +float WipeTower2::estimate_semm_flush_volume(const ConfigBase& config, size_t filaments_cnt) +{ + const std::vector> wipe_volumes = extract_wipe_volumes(config); + if (wipe_volumes.empty()) // an empty flush matrix would make the average below 0/0 + return 0.f; + float maximum = 0.f; + for (const std::vector &v : wipe_volumes) + maximum += *std::max_element(v.begin(), v.end()); + maximum = maximum * filaments_cnt / wipe_volumes.size(); + + // Orca: it's overshooting a bit, so let's reduce it a bit + maximum *= 0.6; + return maximum; +} + static float get_wipe_depth(float volume, float layer_height, float perimeter_width, float extra_flow, float extra_spacing, float width) { float length_to_extrude = (volume_to_length(volume, perimeter_width, layer_height)) / extra_flow; diff --git a/src/libslic3r/GCode/WipeTower2.hpp b/src/libslic3r/GCode/WipeTower2.hpp index ca9e73bb28..5b1a474b5d 100644 --- a/src/libslic3r/GCode/WipeTower2.hpp +++ b/src/libslic3r/GCode/WipeTower2.hpp @@ -17,6 +17,7 @@ namespace Slic3r class WipeTowerWriter2; class PrintRegionConfig; +class ConfigBase; class WipeTower2 { @@ -26,7 +27,10 @@ public: // in WipeTowerIntegration::append_tcr2 does not strip it. static const std::string wait_for_temp_tag() { return ";_WAIT_FOR_TEMP_ON_WIPE_TOWER"; } static std::pair get_wipe_tower_cone_base(double width, double height, double depth, double angle_deg); - static std::vector> extract_wipe_volumes(const PrintConfig& config); + static std::vector> extract_wipe_volumes(const ConfigBase& config); + // Estimated total flush volume of a SEMM print with the given number of filaments, + // used to reserve wipe tower space before the tower is generated. + static float estimate_semm_flush_volume(const ConfigBase& config, size_t filaments_cnt); // Construct ToolChangeResult from current state of WipeTower2 and WipeTowerWriter2. diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index 6a34cc31ff..1af28255ee 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -3944,6 +3944,12 @@ const WipeTowerData &Print::wipe_tower_data(size_t filaments_cnt) const double volume = wipe_volume * filament_depth_count; if (m_config.nozzle_diameter.values.size() == 2) volume += filament_change_volume * (int) (filaments_cnt / 2); + // Sizing should take into account currently set wiping volumes. + // For a long time, the initial preview would just use 900/width per toolchange (15mm on a 60mm wide tower) + // and it worked well enough. Let's try to do slightly better by accounting for the purging volumes. + const bool semm_flush = m_config.purge_in_prime_tower && m_config.single_extruder_multi_material; + if (semm_flush) volume = WipeTower2::estimate_semm_flush_volume(m_config, filaments_cnt); + if (m_config.wipe_tower_wall_type.value == WipeTowerWallType::wtwRib) { double depth = std::sqrt(volume / layer_height * extra_spacing); if (need_wipe_tower || filaments_cnt > 1) { @@ -3955,30 +3961,16 @@ const WipeTowerData &Print::wipe_tower_data(size_t filaments_cnt) const } } else { - double width = m_config.prime_tower_width; - if (m_config.purge_in_prime_tower && m_config.single_extruder_multi_material) { - // Calculating depth should take into account currently set wiping volumes. - // For a long time, the initial preview would just use 900/width per toolchange (15mm on a 60mm wide tower) - // and it worked well enough. Let's try to do slightly better by accounting for the purging volumes. - std::vector> wipe_volumes = WipeTower2::extract_wipe_volumes(m_config); - std::vector max_wipe_volumes; - for (const std::vector &v : wipe_volumes) - max_wipe_volumes.emplace_back(*std::max_element(v.begin(), v.end())); - float maximum = std::accumulate(max_wipe_volumes.begin(), max_wipe_volumes.end(), 0.f); - maximum = maximum * filaments_cnt / max_wipe_volumes.size(); - - // Orca: it's overshooting a bit, so let's reduce it a bit - maximum *= 0.6; - const_cast(this)->m_wipe_tower_data.depth = maximum / (layer_height * width); - } else { - double depth = volume / (layer_height * width) * extra_spacing; - if (need_wipe_tower || m_wipe_tower_data.depth > EPSILON) { + double width = m_config.prime_tower_width; + double depth = volume / (layer_height * width); + // The flush volumes already hold the spacing between wipes. + if (!semm_flush) depth *= extra_spacing; + if (need_wipe_tower || depth > EPSILON) { float min_wipe_tower_depth = WipeTower::get_limit_depth_by_height(max_height); depth = std::max((double) min_wipe_tower_depth, depth); } const_cast(this)->m_wipe_tower_data.depth = depth; - } - const_cast(this)->m_wipe_tower_data.brim_width = m_config.prime_tower_brim_width; + const_cast(this)->m_wipe_tower_data.brim_width = m_config.prime_tower_brim_width; } if (m_config.prime_tower_brim_width < 0) const_cast(this)->m_wipe_tower_data.brim_width = WipeTower::get_auto_brim_by_height(max_height); } diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 45c0d87791..27fe44a867 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -2871,6 +2871,9 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re } if (wt && (need_wipe_tower || filaments_count > 1) && !wxGetApp().plater()->only_gcode_mode() && !wxGetApp().plater()->is_gcode_3mf()) { + // The tower size estimate reads printer- and filament-scope keys, which the print preset + // does not carry; built once here rather than per plate. + const DynamicPrintConfig full_config = wxGetApp().preset_bundle->full_config(); for (int plate_id = 0; plate_id < n_plates; plate_id++) { // If print ByObject and there is only one object in the plate, the wipe tower is allowed to be generated. PartPlate* part_plate = ppl.get_plate(plate_id); @@ -2895,9 +2898,8 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re if (part_plate->get_objects_on_this_plate().empty()) continue; float brim_width = print->wipe_tower_data(filaments_count).brim_width; - const DynamicPrintConfig &print_cfg = wxGetApp().preset_bundle->prints.get_edited_preset().config; int nozzle_nums = wxGetApp().preset_bundle->get_printer_extruder_count(); - Vec3d wipe_tower_size = ppl.get_plate(plate_id)->estimate_wipe_tower_size(print_cfg, w, v, nozzle_nums, 0, false, dynamic_cast(dconfig.option("enable_wrapping_detection"))->value); + Vec3d wipe_tower_size = ppl.get_plate(plate_id)->estimate_wipe_tower_size(full_config, w, v, nozzle_nums, 0, false, dynamic_cast(dconfig.option("enable_wrapping_detection"))->value); // The stored position is already clamped onto the bed, by // set_default_wipe_tower_pos_for_plate and again on every drag. diff --git a/src/slic3r/GUI/PartPlate.cpp b/src/slic3r/GUI/PartPlate.cpp index 3ab764aaf3..910c761c06 100644 --- a/src/slic3r/GUI/PartPlate.cpp +++ b/src/slic3r/GUI/PartPlate.cpp @@ -2262,6 +2262,12 @@ Vec3d PartPlate::estimate_wipe_tower_size(const DynamicPrintConfig & config, con } double volume = wipe_volume * (extruder_count == 2 ? plate_extruder_size : (plate_extruder_size - 1)); if (extruder_count == 2) volume += filament_change_volume * (int) (plate_extruder_size / 2); + // Read from the passed plate config — m_print may not have been applied yet + // (fresh plates, CLI), in which case its PrintConfig still holds defaults. + const auto *purge_opt = config.option("purge_in_prime_tower"); + const auto *semm_opt = config.option("single_extruder_multi_material"); + const bool semm_flush = purge_opt && purge_opt->value && semm_opt && semm_opt->value; + if (semm_flush) volume = WipeTower2::estimate_semm_flush_volume(config, plate_extruder_size); if (use_rib_wall) { depth = std::sqrt(volume / layer_height * extra_spacing); if (need_wipe_tower || plate_extruder_size > 1) { @@ -2274,7 +2280,9 @@ Vec3d PartPlate::estimate_wipe_tower_size(const DynamicPrintConfig & config, con } } else { - depth = volume/ (layer_height * w) *extra_spacing; + depth = volume / (layer_height * w); + // The flush volumes already hold the spacing between wipes. + if (!semm_flush) depth *= extra_spacing; if (need_wipe_tower || depth > EPSILON) { float min_wipe_tower_depth = WipeTower::get_limit_depth_by_height(max_height); depth = std::max((double)min_wipe_tower_depth, depth); @@ -4380,22 +4388,21 @@ void PartPlateList::set_default_wipe_tower_pos_for_plate(int plate_idx, bool ini f_volume_maps = wxGetApp().preset_bundle->get_default_nozzle_volume_types_for_filaments(filament_maps); } DynamicPrintConfig full_config = wxGetApp().preset_bundle->full_config(false, filament_maps, f_volume_maps); - const DynamicPrintConfig &print_cfg = wxGetApp().preset_bundle->prints.get_edited_preset().config; - float w = dynamic_cast(print_cfg.option("prime_tower_width"))->value; + float w = dynamic_cast(full_config.option("prime_tower_width"))->value; float v = dynamic_cast(full_config.option("prime_volume"))->value; bool enable_wrapping = false; const ConfigOptionBool *wrapping_opt = dynamic_cast(full_config.option("enable_wrapping_detection")); if (wrapping_opt) enable_wrapping = wrapping_opt->value; int nozzle_nums = wxGetApp().preset_bundle->get_printer_extruder_count(); - Vec3d wipe_tower_size = part_plate->estimate_wipe_tower_size(print_cfg, w, v, nozzle_nums, init_pos ? 2 : 0, false, enable_wrapping); + Vec3d wipe_tower_size = part_plate->estimate_wipe_tower_size(full_config, w, v, nozzle_nums, init_pos ? 2 : 0, false, enable_wrapping); if (!init_pos && (is_approx(wipe_tower_size(0), 0.0) || is_approx(wipe_tower_size(1), 0.0))) { - wipe_tower_size = part_plate->estimate_wipe_tower_size(print_cfg, w, v, nozzle_nums, 2, false, enable_wrapping); + wipe_tower_size = part_plate->estimate_wipe_tower_size(full_config, w, v, nozzle_nums, 2, false, enable_wrapping); } // Compute brim-aware margin: brim extends outward from tower position float brim_width = 0.f; - const ConfigOptionFloat *brim_opt = print_cfg.option("prime_tower_brim_width"); + const ConfigOptionFloat *brim_opt = full_config.option("prime_tower_brim_width"); if (brim_opt) { brim_width = brim_opt->value; if (brim_width < 0) brim_width = WipeTower::get_auto_brim_by_height((float) wipe_tower_size.z()); From b57d7a67e2125150818861a34ab25f386c6c3770 Mon Sep 17 00:00:00 2001 From: Ian Bassi Date: Thu, 6 Aug 2026 11:43:37 -0300 Subject: [PATCH 32/66] Regression version for Bug report (#15139) --- .github/ISSUE_TEMPLATE/bug_report.yml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 1b3ba3f407..63f74a069e 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -32,9 +32,17 @@ body: attributes: label: OrcaSlicer Version description: Which version of Orca Slicer are you running? You can see the full version in `Help` -> `About Orca Slicer`. - placeholder: e.g. 1.9.0 + placeholder: e.g. 2.5.0 validations: required: true + - type: input + id: working_version + attributes: + label: Regression compared to a previous version + description: Did it work in a previous version? + placeholder: e.g. 2.3.2 + validations: + required: false - type: dropdown id: os_type attributes: From b281c91b99155219242dfcfcaec35beb01444430 Mon Sep 17 00:00:00 2001 From: Kiss Lorand <50251547+kisslorand@users.noreply.github.com> Date: Thu, 6 Aug 2026 17:54:11 +0300 Subject: [PATCH 33/66] Fix ignored filament-specific ironing speed override (#15082) Fix overridden ironing speed Use filament_ironing_speed for the active filament when configured, falling back to the process setting when unset. --- src/libslic3r/GCode.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index c20405781b..8e2e9f713c 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -7650,8 +7650,7 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description, if (sloped) { speed = std::min(speed, m_config.scarf_joint_speed.get_abs_value(speed)); } - } - else if(path.role() == erInternalBridgeInfill) { + } else if(path.role() == erInternalBridgeInfill) { speed = m_config.get_abs_value_at("internal_bridge_speed", get_nozzle_config_index(m_writer.filament()->id())); } else if (path.role() == erOverhangPerimeter || path.role() == erSupportTransition || path.role() == erBridgeInfill) { speed = NOZZLE_CONFIG(bridge_speed); @@ -7662,7 +7661,10 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description, } else if (path.role() == erTopSolidInfill) { speed = NOZZLE_CONFIG(top_surface_speed); } else if (path.role() == erIroning) { - speed = m_config.get_abs_value("ironing_speed"); + const size_t filament_idx = get_filament_config_index(m_writer.filament()->id()); + speed = m_config.filament_ironing_speed.is_nil(filament_idx) + ? m_config.get_abs_value("ironing_speed") + : m_config.filament_ironing_speed.get_at(filament_idx); } else if (path.role() == erBottomSurface) { speed = NOZZLE_CONFIG(initial_layer_infill_speed); } else if (path.role() == erGapFill) { From 945520b8274eddd61fae248235e0efed34a95cfc Mon Sep 17 00:00:00 2001 From: yw4z Date: Thu, 6 Aug 2026 17:58:39 +0300 Subject: [PATCH 34/66] QOL Add parent preset information next to detach preset checkbox and match checkbox style on Save Preset dialog (#15076) init --- src/slic3r/GUI/SavePresetDialog.cpp | 43 +++++++++++++++++++++++++---- src/slic3r/GUI/SavePresetDialog.hpp | 1 - 2 files changed, 38 insertions(+), 6 deletions(-) diff --git a/src/slic3r/GUI/SavePresetDialog.cpp b/src/slic3r/GUI/SavePresetDialog.cpp index 52bcbed4de..e24a2fc497 100644 --- a/src/slic3r/GUI/SavePresetDialog.cpp +++ b/src/slic3r/GUI/SavePresetDialog.cpp @@ -111,13 +111,46 @@ SavePresetDialog::Item::Item(Preset::Type type, const std::string &suffix, wxBox sizer->Add(m_radio_group, 0, wxEXPAND | wxTOP | wxLEFT, BORDER_W); - if (parent->m_mode == comDevelop) { - m_detach_checkbox = new wxCheckBox(parent, wxID_ANY, _L("Detach from parent")); - sizer->Add(m_detach_checkbox, 0, wxALIGN_LEFT | wxALL, BORDER_W); + std::string inherits_str = sel_preset.inherits(); + if (parent->m_mode == comDevelop && !inherits_str.empty()) { + wxBoxSizer *detach_sizer = new wxBoxSizer(wxHORIZONTAL); + + auto detach_tooltip = _L("Copies all inherited values from the parent preset into this preset and removes the connection with the parent preset."); + + auto detach_checkbox = new ::CheckBox(parent); + detach_checkbox->SetToolTip(detach_tooltip); + + auto detach_label = new wxStaticText(parent, wxID_ANY, _L("Detach from parent")); + detach_label->SetFont(::Label::Body_14); + detach_label->SetForegroundColour(wxColour("#363636")); + detach_label->SetToolTip(detach_tooltip); + + detach_sizer->Add(detach_checkbox, 0, wxALIGN_LEFT | wxLEFT, BORDER_W); + detach_sizer->Add(detach_label , 0, wxALIGN_CENTRE_VERTICAL | wxLEFT, FromDIP(5)); + sizer->Add(detach_sizer, 0, wxEXPAND | wxTOP, BORDER_W); + sizer->AddSpacer(FromDIP(5)); + + auto parent_label = new wxStaticText(parent, wxID_ANY, inherits_str); + parent_label->SetFont(::Label::Body_12); + parent_label->SetForegroundColour(wxColour("#6B6B6B")); + parent_label->SetToolTip(_L("Parent preset")); + sizer->Add(parent_label, 0, wxEXPAND | wxLEFT, BORDER_W + FromDIP(24)); + + sizer->AddSpacer(FromDIP(5)); + // Set initial state (unchecked by default) - m_detach_checkbox->SetValue(m_detach); + detach_checkbox->SetValue(m_detach); // Bind the checkbox event to update the detach state for this item - m_detach_checkbox->Bind(wxEVT_CHECKBOX, [this](wxCommandEvent&) { m_detach = m_detach_checkbox->GetValue(); }); + detach_checkbox->Bind(wxEVT_TOGGLEBUTTON, [this, detach_checkbox](wxCommandEvent&) { m_detach = detach_checkbox->GetValue(); }); + + auto on_toggle = [this, detach_checkbox]() { + detach_checkbox->SetValue(!detach_checkbox->GetValue()); + wxCommandEvent ev(wxEVT_TOGGLEBUTTON, detach_checkbox->GetId()); + ev.SetEventObject(detach_checkbox); + detach_checkbox->GetEventHandler()->ProcessEvent(ev); + }; + detach_label->Bind(wxEVT_LEFT_DOWN, [on_toggle](wxMouseEvent& e) {if(!e.LeftDClick()) on_toggle();}); + detach_label->Bind(wxEVT_LEFT_DCLICK, [on_toggle](wxMouseEvent& e) {on_toggle();}); } m_radio_group->Bind(wxEVT_COMMAND_RADIOBOX_SELECTED, [this](wxCommandEvent &e) { diff --git a/src/slic3r/GUI/SavePresetDialog.hpp b/src/slic3r/GUI/SavePresetDialog.hpp index 0b71325927..05aa1b2d39 100644 --- a/src/slic3r/GUI/SavePresetDialog.hpp +++ b/src/slic3r/GUI/SavePresetDialog.hpp @@ -75,7 +75,6 @@ class SavePresetDialog : public DPIDialog bool m_save_to_project {false}; RadioGroup* m_radio_group; // ORCA bool m_detach{false}; - wxCheckBox* m_detach_checkbox{nullptr}; void update(); }; From 7f10c73dce79dd94cf484610a03256c799c274b0 Mon Sep 17 00:00:00 2001 From: TheLegendTubaGuy <95944177+thelegendtubaguy@users.noreply.github.com> Date: Thu, 6 Aug 2026 16:26:42 -0500 Subject: [PATCH 35/66] Fix redundant QIDI startup tool changes (#15096) * Fix redundant QIDI startup tool changes Guard Q2, X-Max 4, and X-Plus 4 filament-change G-code so same-tool startup selections do not run the full cut, unload, and purge sequence. * Guard Q2C against redundant startup tool changes Skip the complete filament-change sequence when the requested tool is already selected during startup. * Bump Qidi profile version --- resources/profiles/Qidi.json | 2 +- resources/profiles/Qidi/machine/Qidi Q2 0.4 nozzle.json | 2 +- resources/profiles/Qidi/machine/Qidi Q2C 0.4 nozzle.json | 2 +- resources/profiles/Qidi/machine/Qidi X-Max 4 0.4 nozzle.json | 2 +- resources/profiles/Qidi/machine/Qidi X-Plus 4 0.4 nozzle.json | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/resources/profiles/Qidi.json b/resources/profiles/Qidi.json index 9e7a290f96..0cf0c6bb7d 100644 --- a/resources/profiles/Qidi.json +++ b/resources/profiles/Qidi.json @@ -1,6 +1,6 @@ { "name": "Qidi", - "version": "02.04.00.08", + "version": "02.04.00.09", "force_update": "0", "description": "Qidi configurations", "machine_model_list": [ diff --git a/resources/profiles/Qidi/machine/Qidi Q2 0.4 nozzle.json b/resources/profiles/Qidi/machine/Qidi Q2 0.4 nozzle.json index 6f3115dbd5..6a0a91b2ac 100644 --- a/resources/profiles/Qidi/machine/Qidi Q2 0.4 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi Q2 0.4 nozzle.json @@ -17,7 +17,7 @@ "cooling_tube_length": "0", "parking_pos_retraction": "0", "extra_loading_move": "5", - "change_filament_gcode": "G1 Z{max_layer_z + 3.0} F1200\nTOOL_CHANGE_START F=[current_extruder] T=[next_extruder]\nBUFFER_MONITORING ENABLE=0\nDISABLE_ALL_SENSOR\nM106 S255\nMOVE_TO_TRASH\n{if long_retractions_when_cut[previous_extruder]}\nG1 E-{retraction_distances_when_cut[previous_extruder]} F{old_filament_e_feedrate}\n{else}\nG1 E-10 F{old_filament_e_feedrate}\n{endif}\nM400\nCUT_FILAMENT T=[current_extruder]\nMOVE_TO_TRASH\nM106 P2 S0\nUNLOAD_T[current_extruder]\nT[next_extruder]\n{if nozzle_temperature_range_high[current_extruder] >= nozzle_temperature_range_high[next_extruder]}\nM104 S{nozzle_temperature_range_high[current_extruder]}\n{else}\nM104 S{nozzle_temperature_range_high[next_extruder]}\n{endif}\n; FLUSH_START\nM106 S25\nG1 E30 F300\n; FLUSH_END\n{if long_retractions_when_cut[previous_extruder]}\nG1 E{retraction_distances_when_cut[previous_extruder]} F{old_filament_e_feedrate}\n{endif}\n{if flush_length_1 > 1}\n; FLUSH_START\n{if flush_length_1 > 23.7}\nG1 E23.7 F{old_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{old_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\n{else}\nG1 E{flush_length_1} F{old_filament_e_feedrate}\n{endif}\nG1 E-[old_retract_length_toolchange] F1800\n; FLUSH_END\n{endif}\n{if flush_length_2 > 1}\n; FLUSH_START\nG1 X92 F9000\nG1 E[old_retract_length_toolchange] F300\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E-[new_retract_length_toolchange] F1800\n; FLUSH_END\n{endif}\n{if flush_length_3 > 1}\n; FLUSH_START\nG1 X85 F9000\nG1 E[new_retract_length_toolchange] F300\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E-[new_retract_length_toolchange] F1800\n; FLUSH_END\n{endif}\n{if flush_length_4 > 1}\n; FLUSH_START\nG1 X92 F9000\nG1 E[new_retract_length_toolchange] F300\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E-[new_retract_length_toolchange] F1800\n; FLUSH_END\n{endif}\nM400\nM106 S255\nM104 S[new_filament_temp]\nINIT_SYNC_BUFFER_STATE\nBUFFER_MONITORING ENABLE=1\nG1 E10 F25 \nM109 S[new_filament_temp]\nG1 E-5 F1800\nCLEAR_OOZE\nTOOL_CHANGE_END\nG1 Y270 F8000\nM106 S0\nG1 E2 F1800\nENABLE_ALL_SENSOR\n", + "change_filament_gcode": "{if current_extruder != next_extruder}\nG1 Z{max_layer_z + 3.0} F1200\nTOOL_CHANGE_START F=[current_extruder] T=[next_extruder]\nBUFFER_MONITORING ENABLE=0\nDISABLE_ALL_SENSOR\nM106 S255\nMOVE_TO_TRASH\n{if long_retractions_when_cut[previous_extruder]}\nG1 E-{retraction_distances_when_cut[previous_extruder]} F{old_filament_e_feedrate}\n{else}\nG1 E-10 F{old_filament_e_feedrate}\n{endif}\nM400\nCUT_FILAMENT T=[current_extruder]\nMOVE_TO_TRASH\nM106 P2 S0\nUNLOAD_T[current_extruder]\nT[next_extruder]\n{if nozzle_temperature_range_high[current_extruder] >= nozzle_temperature_range_high[next_extruder]}\nM104 S{nozzle_temperature_range_high[current_extruder]}\n{else}\nM104 S{nozzle_temperature_range_high[next_extruder]}\n{endif}\n; FLUSH_START\nM106 S25\nG1 E30 F300\n; FLUSH_END\n{if long_retractions_when_cut[previous_extruder]}\nG1 E{retraction_distances_when_cut[previous_extruder]} F{old_filament_e_feedrate}\n{endif}\n{if flush_length_1 > 1}\n; FLUSH_START\n{if flush_length_1 > 23.7}\nG1 E23.7 F{old_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{old_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\n{else}\nG1 E{flush_length_1} F{old_filament_e_feedrate}\n{endif}\nG1 E-[old_retract_length_toolchange] F1800\n; FLUSH_END\n{endif}\n{if flush_length_2 > 1}\n; FLUSH_START\nG1 X92 F9000\nG1 E[old_retract_length_toolchange] F300\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E-[new_retract_length_toolchange] F1800\n; FLUSH_END\n{endif}\n{if flush_length_3 > 1}\n; FLUSH_START\nG1 X85 F9000\nG1 E[new_retract_length_toolchange] F300\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E-[new_retract_length_toolchange] F1800\n; FLUSH_END\n{endif}\n{if flush_length_4 > 1}\n; FLUSH_START\nG1 X92 F9000\nG1 E[new_retract_length_toolchange] F300\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E-[new_retract_length_toolchange] F1800\n; FLUSH_END\n{endif}\nM400\nM106 S255\nM104 S[new_filament_temp]\nINIT_SYNC_BUFFER_STATE\nBUFFER_MONITORING ENABLE=1\nG1 E10 F25 \nM109 S[new_filament_temp]\nG1 E-5 F1800\nCLEAR_OOZE\nTOOL_CHANGE_END\nG1 Y270 F8000\nM106 S0\nG1 E2 F1800\nENABLE_ALL_SENSOR\n{endif}\n", "default_filament_profile": [ "QIDI PLA Rapido @Qidi Q2 0.4 nozzle" ], diff --git a/resources/profiles/Qidi/machine/Qidi Q2C 0.4 nozzle.json b/resources/profiles/Qidi/machine/Qidi Q2C 0.4 nozzle.json index fbf61a6af9..9d4683885f 100644 --- a/resources/profiles/Qidi/machine/Qidi Q2C 0.4 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi Q2C 0.4 nozzle.json @@ -17,7 +17,7 @@ "cooling_tube_length": "0", "parking_pos_retraction": "0", "extra_loading_move": "5", - "change_filament_gcode": "G1 Z{max_layer_z + 3.0} F1200\nTOOL_CHANGE_START F=[current_extruder] T=[next_extruder]\nBUFFER_MONITORING ENABLE=0\nDISABLE_ALL_SENSOR\nM106 S255\nMOVE_TO_TRASH\n{if long_retractions_when_cut[previous_extruder]}\nG1 E-{retraction_distances_when_cut[previous_extruder]} F{old_filament_e_feedrate}\n{else}\nG1 E-10 F{old_filament_e_feedrate}\n{endif}\nM400\nCUT_FILAMENT T=[current_extruder]\nMOVE_TO_TRASH\nM106 P2 S0\nUNLOAD_T[current_extruder]\nT[next_extruder]\n{if nozzle_temperature_range_high[current_extruder] >= nozzle_temperature_range_high[next_extruder]}\nM104 S{nozzle_temperature_range_high[current_extruder]}\n{else}\nM104 S{nozzle_temperature_range_high[next_extruder]}\n{endif}\n; FLUSH_START\nM106 S25\nG1 E30 F300\n; FLUSH_END\n{if long_retractions_when_cut[previous_extruder]}\nG1 E{retraction_distances_when_cut[previous_extruder]} F{old_filament_e_feedrate}\n{endif}\n{if flush_length_1 > 1}\n; FLUSH_START\n{if flush_length_1 > 23.7}\nG1 E23.7 F{old_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{old_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\n{else}\nG1 E{flush_length_1} F{old_filament_e_feedrate}\n{endif}\nG1 E-[old_retract_length_toolchange] F1800\n; FLUSH_END\n{endif}\n{if flush_length_2 > 1}\n; FLUSH_START\nG1 X92 F9000\nG1 E[old_retract_length_toolchange] F300\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E-[new_retract_length_toolchange] F1800\n; FLUSH_END\n{endif}\n{if flush_length_3 > 1}\n; FLUSH_START\nG1 X85 F9000\nG1 E[new_retract_length_toolchange] F300\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E-[new_retract_length_toolchange] F1800\n; FLUSH_END\n{endif}\n{if flush_length_4 > 1}\n; FLUSH_START\nG1 X92 F9000\nG1 E[new_retract_length_toolchange] F300\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E-[new_retract_length_toolchange] F1800\n; FLUSH_END\n{endif}\nM400\nM106 S255\nM104 S[new_filament_temp]\nINIT_SYNC_BUFFER_STATE\nBUFFER_MONITORING ENABLE=1\nG1 E10 F25 \nM109 S[new_filament_temp]\nG1 E-5 F1800\nCLEAR_OOZE\nTOOL_CHANGE_END\nG1 Y270 F8000\nM106 S0\nG1 E2 F1800\nENABLE_ALL_SENSOR\n", + "change_filament_gcode": "{if current_extruder != next_extruder}\nG1 Z{max_layer_z + 3.0} F1200\nTOOL_CHANGE_START F=[current_extruder] T=[next_extruder]\nBUFFER_MONITORING ENABLE=0\nDISABLE_ALL_SENSOR\nM106 S255\nMOVE_TO_TRASH\n{if long_retractions_when_cut[previous_extruder]}\nG1 E-{retraction_distances_when_cut[previous_extruder]} F{old_filament_e_feedrate}\n{else}\nG1 E-10 F{old_filament_e_feedrate}\n{endif}\nM400\nCUT_FILAMENT T=[current_extruder]\nMOVE_TO_TRASH\nM106 P2 S0\nUNLOAD_T[current_extruder]\nT[next_extruder]\n{if nozzle_temperature_range_high[current_extruder] >= nozzle_temperature_range_high[next_extruder]}\nM104 S{nozzle_temperature_range_high[current_extruder]}\n{else}\nM104 S{nozzle_temperature_range_high[next_extruder]}\n{endif}\n; FLUSH_START\nM106 S25\nG1 E30 F300\n; FLUSH_END\n{if long_retractions_when_cut[previous_extruder]}\nG1 E{retraction_distances_when_cut[previous_extruder]} F{old_filament_e_feedrate}\n{endif}\n{if flush_length_1 > 1}\n; FLUSH_START\n{if flush_length_1 > 23.7}\nG1 E23.7 F{old_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{old_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\n{else}\nG1 E{flush_length_1} F{old_filament_e_feedrate}\n{endif}\nG1 E-[old_retract_length_toolchange] F1800\n; FLUSH_END\n{endif}\n{if flush_length_2 > 1}\n; FLUSH_START\nG1 X92 F9000\nG1 E[old_retract_length_toolchange] F300\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E-[new_retract_length_toolchange] F1800\n; FLUSH_END\n{endif}\n{if flush_length_3 > 1}\n; FLUSH_START\nG1 X85 F9000\nG1 E[new_retract_length_toolchange] F300\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E-[new_retract_length_toolchange] F1800\n; FLUSH_END\n{endif}\n{if flush_length_4 > 1}\n; FLUSH_START\nG1 X92 F9000\nG1 E[new_retract_length_toolchange] F300\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E-[new_retract_length_toolchange] F1800\n; FLUSH_END\n{endif}\nM400\nM106 S255\nM104 S[new_filament_temp]\nINIT_SYNC_BUFFER_STATE\nBUFFER_MONITORING ENABLE=1\nG1 E10 F25 \nM109 S[new_filament_temp]\nG1 E-5 F1800\nCLEAR_OOZE\nTOOL_CHANGE_END\nG1 Y270 F8000\nM106 S0\nG1 E2 F1800\nENABLE_ALL_SENSOR\n{endif}\n", "default_filament_profile": [ "QIDI PLA Rapido @Qidi Q2C 0.4 nozzle" ], diff --git a/resources/profiles/Qidi/machine/Qidi X-Max 4 0.4 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Max 4 0.4 nozzle.json index be754eb338..ef26c0a620 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Max 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Max 4 0.4 nozzle.json @@ -13,7 +13,7 @@ "bed_exclude_area": [ "0x0, 16x0, 16x13, 0x13, 0x0, 0x0, 0x0, 0x0, 0x13, 6x13, 6x23, 0x23, 0x13, 0x13, 0x13, 0x13, 0x387, 53x387, 53x390, 0x390, 0x387, 0x387, 0x397, 0x390, 338x390, 338x384, 390x384, 390x390, 0x390" ], - "change_filament_gcode": "G1 Z{max_layer_z + 3.0} F1200\nTOOL_CHANGE_START F=[current_extruder] T=[next_extruder]\nDISABLE_ALL_SENSOR\nM104 S{old_filament_temp - 10}\nM106 S255\n{if long_retractions_when_cut[previous_extruder]}\nG1 E-{retraction_distances_when_cut[previous_extruder]} F{old_filament_e_feedrate}\n{else}\nG1 E-2 F{old_filament_e_feedrate}\n{endif}\nM400\nCUT_FILAMENT T=[current_extruder]\nMOVE_TO_TRASH\nM106 P2 S0\nUNLOAD_T[current_extruder]\nT[next_extruder]\nM106 S0\n{if nozzle_temperature_range_high[current_extruder] >= nozzle_temperature_range_high[next_extruder]}\nM104 S{nozzle_temperature_range_high[current_extruder]}\nM109.0 S{(nozzle_temperature_range_high[current_extruder])-25}\n{else}\nM104 S{nozzle_temperature_range_high[next_extruder]}\nM109.0 S{(nozzle_temperature_range_high[next_extruder])-25}\n{endif}\n{if long_retractions_when_cut[previous_extruder]}\nG1 E{retraction_distances_when_cut[previous_extruder]} F{old_filament_e_feedrate}\n{endif}\n{if flush_length_1 > 1}\n; FLUSH_START\nG1 Y403.5 F2000\nG1 E{flush_length_1} F{old_filament_e_feedrate * 0.5}\n; FLUSH_END\n{endif}\n{if flush_length_2 > 1}\n; FLUSH_START\nG1 E{flush_length_2} F{new_filament_e_feedrate * 0.5}\n; FLUSH_END\n{endif}\n{if flush_length_3 > 1}\n; FLUSH_START\nG1 E{flush_length_3} F{new_filament_e_feedrate * 0.5}\n; FLUSH_END\n{endif}\n{if flush_length_4 > 1}\n; FLUSH_START\nG1 E{flush_length_4} F{new_filament_e_feedrate * 0.5}\n; FLUSH_END\n{endif}\nM400\nM106 S180\nM104 S{new_filament_temp - 10}\nG1 E1 F10\nM109.1 S{new_filament_temp - 10}\nG1 E-4 F1000\nG4 P2000\nM204 S5000\nG1 Y403 F2000\nG1 X163 F8000\nG1 X145 F5000\nG1 X163 F3000\nG1 X145 F2000\nG1 X175 F6000\nG1 X163\nG1 X175\nG1 X163\nG1 X175\nG1 X163\nG1 X180 F8000\nG1 Y380\nG1 X116\nG4 P2000\nG1 Y403 F3000\nG1 X130\nG1 X100 F8000\nG1 Y380\nG1 X116\nG1 Y403 F3000\nG1 X130 F3000\nG1 X100 F8000\nG1 Y380\nM104 S[new_filament_temp]\nTOOL_CHANGE_END\nG1 E{new_retract_length_toolchange + 1} F{new_filament_e_feedrate}\nENABLE_ALL_SENSOR\n", + "change_filament_gcode": "{if current_extruder != next_extruder}\nG1 Z{max_layer_z + 3.0} F1200\nTOOL_CHANGE_START F=[current_extruder] T=[next_extruder]\nDISABLE_ALL_SENSOR\nM104 S{old_filament_temp - 10}\nM106 S255\n{if long_retractions_when_cut[previous_extruder]}\nG1 E-{retraction_distances_when_cut[previous_extruder]} F{old_filament_e_feedrate}\n{else}\nG1 E-2 F{old_filament_e_feedrate}\n{endif}\nM400\nCUT_FILAMENT T=[current_extruder]\nMOVE_TO_TRASH\nM106 P2 S0\nUNLOAD_T[current_extruder]\nT[next_extruder]\nM106 S0\n{if nozzle_temperature_range_high[current_extruder] >= nozzle_temperature_range_high[next_extruder]}\nM104 S{nozzle_temperature_range_high[current_extruder]}\nM109.0 S{(nozzle_temperature_range_high[current_extruder])-25}\n{else}\nM104 S{nozzle_temperature_range_high[next_extruder]}\nM109.0 S{(nozzle_temperature_range_high[next_extruder])-25}\n{endif}\n{if long_retractions_when_cut[previous_extruder]}\nG1 E{retraction_distances_when_cut[previous_extruder]} F{old_filament_e_feedrate}\n{endif}\n{if flush_length_1 > 1}\n; FLUSH_START\nG1 Y403.5 F2000\nG1 E{flush_length_1} F{old_filament_e_feedrate * 0.5}\n; FLUSH_END\n{endif}\n{if flush_length_2 > 1}\n; FLUSH_START\nG1 E{flush_length_2} F{new_filament_e_feedrate * 0.5}\n; FLUSH_END\n{endif}\n{if flush_length_3 > 1}\n; FLUSH_START\nG1 E{flush_length_3} F{new_filament_e_feedrate * 0.5}\n; FLUSH_END\n{endif}\n{if flush_length_4 > 1}\n; FLUSH_START\nG1 E{flush_length_4} F{new_filament_e_feedrate * 0.5}\n; FLUSH_END\n{endif}\nM400\nM106 S180\nM104 S{new_filament_temp - 10}\nG1 E1 F10\nM109.1 S{new_filament_temp - 10}\nG1 E-4 F1000\nG4 P2000\nM204 S5000\nG1 Y403 F2000\nG1 X163 F8000\nG1 X145 F5000\nG1 X163 F3000\nG1 X145 F2000\nG1 X175 F6000\nG1 X163\nG1 X175\nG1 X163\nG1 X175\nG1 X163\nG1 X180 F8000\nG1 Y380\nG1 X116\nG4 P2000\nG1 Y403 F3000\nG1 X130\nG1 X100 F8000\nG1 Y380\nG1 X116\nG1 Y403 F3000\nG1 X130 F3000\nG1 X100 F8000\nG1 Y380\nM104 S[new_filament_temp]\nTOOL_CHANGE_END\nG1 E{new_retract_length_toolchange + 1} F{new_filament_e_feedrate}\nENABLE_ALL_SENSOR\n{endif}\n", "default_filament_profile": [ "QIDI PLA Rapido @Qidi X-Max 4 0.4 nozzle" ], diff --git a/resources/profiles/Qidi/machine/Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Plus 4 0.4 nozzle.json index c4e758a451..82e9da78cb 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Plus 4 0.4 nozzle.json @@ -60,7 +60,7 @@ "2" ], "single_extruder_multi_material": "1", - "change_filament_gcode": "{if max_layer_z < 12}\nG1 Z15 F1200\n{else}\nG1 Z{max_layer_z + 3.0} F1200\n{endif}\nTOOL_CHANGE_START F=[current_extruder] T=[next_extruder]\nDISABLE_ALL_SENSOR\n{if long_retractions_when_cut[previous_extruder]}\nMOVE_TO_TRASH\nG1 E-{retraction_distances_when_cut[previous_extruder]} F{old_filament_e_feedrate}\nM400\n{else}\nG1 E-5 F{old_filament_e_feedrate}\n{endif}\nCUT_FILAMENT T=[current_extruder]\nMOVE_TO_TRASH\nM400\n{if nozzle_temperature_range_high[current_extruder] >= nozzle_temperature_range_high[next_extruder]}\nM104 S{nozzle_temperature_range_high[current_extruder]}\n{else}\nM104 S{nozzle_temperature_range_high[next_extruder]}\n{endif}\nM106 S0\nM106 P2 S0\nUNLOAD_T[current_extruder]\nG92 E0\nM83\nG1 E2 F50\nT[next_extruder]\n{if nozzle_temperature_range_high[current_extruder] >= nozzle_temperature_range_high[next_extruder]}\nSET_HEATER_TEMPERATURE HEATER=extruder TARGET={nozzle_temperature_range_high[current_extruder]} WAIT=1\n{else}\nSET_HEATER_TEMPERATURE HEATER=extruder TARGET={nozzle_temperature_range_high[next_extruder]} WAIT=1\n{endif}\n{if long_retractions_when_cut[previous_extruder]}\nG1 E{retraction_distances_when_cut[previous_extruder]} F{old_filament_e_feedrate}\n{endif}\nM400\nM106 S60\n; FLUSH_START\nG1 E1 F50\nG1 E{65.5 * 0.58} F{old_filament_e_feedrate}\nG1 E{65.5 * 0.02} F50\nG1 E{65.5 * 0.18} F{old_filament_e_feedrate}\nG1 E{65.5 * 0.02} F50\nG1 E{65.5 * 0.18} F{old_filament_e_feedrate}\nG1 E{65.5 * 0.02} F50\nG1 E-[old_retract_length_toolchange] F1800\n; FLUSH_END\n{if flush_length_1 > 1}\nM400\nM106 S255\nG91\nG1 X-5 F60\nG1 X5 F60\nG90\nCLEAR_FLUSH\nM400\nM106 S60\n; FLUSH_START\nG1 E[old_retract_length_toolchange] F300\nG1 E{flush_length_1 * 0.58} F{new_filament_e_feedrate}\nG1 E{flush_length_1 * 0.02} F50\nG1 E{flush_length_1 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_1 * 0.02} F50\nG1 E{flush_length_1 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_1 * 0.02} F50\nG1 E-[old_retract_length_toolchange] F1800\n; FLUSH_END\n{endif}\n{if flush_length_2 > 1}\nM400\nM106 S255\nG91\nG1 X-5 F60\nG1 X5 F60\nG90\nCLEAR_FLUSH\nM400\nM106 S60\n; FLUSH_START\nG1 E[old_retract_length_toolchange] F300\nG1 E{flush_length_2 * 0.58} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E-[new_retract_length_toolchange] F1800\n; FLUSH_END\n{endif}\n{if flush_length_3 > 1}\nM400\nM106 S255\nG91\nG1 X-5 F60\nG1 X5 F60\nG90\nCLEAR_FLUSH\nM400\nM106 S60\n; FLUSH_START\nG1 E[new_retract_length_toolchange] F300\nG1 E{flush_length_3 * 0.58} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E-[new_retract_length_toolchange] F1800\n; FLUSH_END\n{endif}\n{if flush_length_4 > 1}\nM400\nM106 S255\nG91\nG1 X-5 F60\nG1 X5 F60\nG90\nCLEAR_FLUSH\nM400\nM106 S60\n; FLUSH_START\nG1 E[new_retract_length_toolchange] F300\nG1 E{flush_length_4 * 0.58} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E-[new_retract_length_toolchange] F1800\n; FLUSH_END\n{endif}\nM104 S[new_filament_temp]\nM400\nM106 S255\nG91\nG1 X-5 F60\nG1 X5 F60\nG90\nM109 S[new_filament_temp]\nG92 E0\nM400\nCLEAR_FLUSH\nCLEAR_OOZE\nM400\nM106 S0\nTOOL_CHANGE_END\nG1 Y305 F9000\nENABLE_ALL_SENSOR", + "change_filament_gcode": "{if current_extruder != next_extruder}\n{if max_layer_z < 12}\nG1 Z15 F1200\n{else}\nG1 Z{max_layer_z + 3.0} F1200\n{endif}\nTOOL_CHANGE_START F=[current_extruder] T=[next_extruder]\nDISABLE_ALL_SENSOR\n{if long_retractions_when_cut[previous_extruder]}\nMOVE_TO_TRASH\nG1 E-{retraction_distances_when_cut[previous_extruder]} F{old_filament_e_feedrate}\nM400\n{else}\nG1 E-5 F{old_filament_e_feedrate}\n{endif}\nCUT_FILAMENT T=[current_extruder]\nMOVE_TO_TRASH\nM400\n{if nozzle_temperature_range_high[current_extruder] >= nozzle_temperature_range_high[next_extruder]}\nM104 S{nozzle_temperature_range_high[current_extruder]}\n{else}\nM104 S{nozzle_temperature_range_high[next_extruder]}\n{endif}\nM106 S0\nM106 P2 S0\nUNLOAD_T[current_extruder]\nG92 E0\nM83\nG1 E2 F50\nT[next_extruder]\n{if nozzle_temperature_range_high[current_extruder] >= nozzle_temperature_range_high[next_extruder]}\nSET_HEATER_TEMPERATURE HEATER=extruder TARGET={nozzle_temperature_range_high[current_extruder]} WAIT=1\n{else}\nSET_HEATER_TEMPERATURE HEATER=extruder TARGET={nozzle_temperature_range_high[next_extruder]} WAIT=1\n{endif}\n{if long_retractions_when_cut[previous_extruder]}\nG1 E{retraction_distances_when_cut[previous_extruder]} F{old_filament_e_feedrate}\n{endif}\nM400\nM106 S60\n; FLUSH_START\nG1 E1 F50\nG1 E{65.5 * 0.58} F{old_filament_e_feedrate}\nG1 E{65.5 * 0.02} F50\nG1 E{65.5 * 0.18} F{old_filament_e_feedrate}\nG1 E{65.5 * 0.02} F50\nG1 E{65.5 * 0.18} F{old_filament_e_feedrate}\nG1 E{65.5 * 0.02} F50\nG1 E-[old_retract_length_toolchange] F1800\n; FLUSH_END\n{if flush_length_1 > 1}\nM400\nM106 S255\nG91\nG1 X-5 F60\nG1 X5 F60\nG90\nCLEAR_FLUSH\nM400\nM106 S60\n; FLUSH_START\nG1 E[old_retract_length_toolchange] F300\nG1 E{flush_length_1 * 0.58} F{new_filament_e_feedrate}\nG1 E{flush_length_1 * 0.02} F50\nG1 E{flush_length_1 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_1 * 0.02} F50\nG1 E{flush_length_1 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_1 * 0.02} F50\nG1 E-[old_retract_length_toolchange] F1800\n; FLUSH_END\n{endif}\n{if flush_length_2 > 1}\nM400\nM106 S255\nG91\nG1 X-5 F60\nG1 X5 F60\nG90\nCLEAR_FLUSH\nM400\nM106 S60\n; FLUSH_START\nG1 E[old_retract_length_toolchange] F300\nG1 E{flush_length_2 * 0.58} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E-[new_retract_length_toolchange] F1800\n; FLUSH_END\n{endif}\n{if flush_length_3 > 1}\nM400\nM106 S255\nG91\nG1 X-5 F60\nG1 X5 F60\nG90\nCLEAR_FLUSH\nM400\nM106 S60\n; FLUSH_START\nG1 E[new_retract_length_toolchange] F300\nG1 E{flush_length_3 * 0.58} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E-[new_retract_length_toolchange] F1800\n; FLUSH_END\n{endif}\n{if flush_length_4 > 1}\nM400\nM106 S255\nG91\nG1 X-5 F60\nG1 X5 F60\nG90\nCLEAR_FLUSH\nM400\nM106 S60\n; FLUSH_START\nG1 E[new_retract_length_toolchange] F300\nG1 E{flush_length_4 * 0.58} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E-[new_retract_length_toolchange] F1800\n; FLUSH_END\n{endif}\nM104 S[new_filament_temp]\nM400\nM106 S255\nG91\nG1 X-5 F60\nG1 X5 F60\nG90\nM109 S[new_filament_temp]\nG92 E0\nM400\nCLEAR_FLUSH\nCLEAR_OOZE\nM400\nM106 S0\nTOOL_CHANGE_END\nG1 Y305 F9000\nENABLE_ALL_SENSOR\n{endif}", "is_support_multi_box": "0", "machine_pause_gcode": "PAUSE", "thumbnails": [ From a684c6daf6256abdcba5ab261a0b874555ae926b Mon Sep 17 00:00:00 2001 From: Ian Bassi Date: Thu, 6 Aug 2026 18:44:40 -0300 Subject: [PATCH 36/66] Bump Creality (#15157) To apply https://github.com/OrcaSlicer/OrcaSlicer/pull/14654 --- resources/profiles/Creality.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/profiles/Creality.json b/resources/profiles/Creality.json index 8e91974b9c..077ee827e5 100644 --- a/resources/profiles/Creality.json +++ b/resources/profiles/Creality.json @@ -1,6 +1,6 @@ { "name": "Creality", - "version": "02.03.02.75", + "version": "02.03.02.76", "force_update": "0", "description": "Creality configurations", "machine_model_list": [ From f444176df86999d393b0c97f11f50b39d3a0609d Mon Sep 17 00:00:00 2001 From: Kiss Lorand <50251547+kisslorand@users.noreply.github.com> Date: Fri, 7 Aug 2026 12:13:25 +0300 Subject: [PATCH 37/66] Fix Windows crash after using "Replace all with 3D files" (#15102) Fix Windows crash in Replace all with 3D file Keep the replacement result message as wxString and substitute the volume name directly. On Windows, wxString::ToStdString() cannot encode the Unicode status icon through the active ANSI code page and returns an empty string. Passing that empty string to boost::format with a volume-name argument throws boost::too_many_args and exits OrcaSlicer. --- localization/i18n/OrcaSlicer.pot | 8 +++---- localization/i18n/ca/OrcaSlicer_ca.po | 24 ++++++++++----------- localization/i18n/cs/OrcaSlicer_cs.po | 24 ++++++++++----------- localization/i18n/de/OrcaSlicer_de.po | 24 ++++++++++----------- localization/i18n/en/OrcaSlicer_en.po | 16 +++++++------- localization/i18n/es/OrcaSlicer_es.po | 24 ++++++++++----------- localization/i18n/eu/OrcaSlicer_eu.po | 24 ++++++++++----------- localization/i18n/fr/OrcaSlicer_fr.po | 24 ++++++++++----------- localization/i18n/hu/OrcaSlicer_hu.po | 24 ++++++++++----------- localization/i18n/it/OrcaSlicer_it.po | 24 ++++++++++----------- localization/i18n/ja/OrcaSlicer_ja.po | 24 ++++++++++----------- localization/i18n/ko/OrcaSlicer_ko.po | 24 ++++++++++----------- localization/i18n/lt/OrcaSlicer_lt.po | 24 ++++++++++----------- localization/i18n/nl/OrcaSlicer_nl.po | 24 ++++++++++----------- localization/i18n/pl/OrcaSlicer_pl.po | 24 ++++++++++----------- localization/i18n/pt_BR/OrcaSlicer_pt_BR.po | 24 ++++++++++----------- localization/i18n/ru/OrcaSlicer_ru.po | 24 ++++++++++----------- localization/i18n/sv/OrcaSlicer_sv.po | 24 ++++++++++----------- localization/i18n/th/OrcaSlicer_th.po | 24 ++++++++++----------- localization/i18n/tr/OrcaSlicer_tr.po | 24 ++++++++++----------- localization/i18n/uk/OrcaSlicer_uk.po | 24 ++++++++++----------- localization/i18n/vi/OrcaSlicer_vi.po | 24 ++++++++++----------- localization/i18n/zh_CN/OrcaSlicer_zh_CN.po | 24 ++++++++++----------- localization/i18n/zh_TW/OrcaSlicer_zh_TW.po | 24 ++++++++++----------- src/slic3r/GUI/Plater.cpp | 10 ++++----- 25 files changed, 281 insertions(+), 281 deletions(-) diff --git a/localization/i18n/OrcaSlicer.pot b/localization/i18n/OrcaSlicer.pot index e83112d989..88e49a85fc 100644 --- a/localization/i18n/OrcaSlicer.pot +++ b/localization/i18n/OrcaSlicer.pot @@ -7781,19 +7781,19 @@ msgid "Replaced with 3D files from directory:\n" msgstr "" #, possible-boost-format -msgid "✖ Skipped %1%: same file.\n" +msgid "✖ Skipped %s: same file.\n" msgstr "" #, possible-boost-format -msgid "✖ Skipped %1%: file does not exist.\n" +msgid "✖ Skipped %s: file does not exist.\n" msgstr "" #, possible-boost-format -msgid "✖ Skipped %1%: failed to replace.\n" +msgid "✖ Skipped %s: failed to replace.\n" msgstr "" #, possible-boost-format -msgid "✔ Replaced %1%.\n" +msgid "✔ Replaced %s.\n" msgstr "" msgid "Replaced volumes" diff --git a/localization/i18n/ca/OrcaSlicer_ca.po b/localization/i18n/ca/OrcaSlicer_ca.po index ab80943ca0..79a9d82df4 100644 --- a/localization/i18n/ca/OrcaSlicer_ca.po +++ b/localization/i18n/ca/OrcaSlicer_ca.po @@ -8361,21 +8361,21 @@ msgstr "No s'ha seleccionat el directori per a la substitució" msgid "Replaced with 3D files from directory:\n" msgstr "Substituït amb fitxers 3D del directori:\n" -#, boost-format -msgid "✖ Skipped %1%: same file.\n" -msgstr "✖ Omès %1%: mateix fitxer.\n" +#, c-format +msgid "✖ Skipped %s: same file.\n" +msgstr "✖ Omès %s: mateix fitxer.\n" -#, boost-format -msgid "✖ Skipped %1%: file does not exist.\n" -msgstr "✖ Omès %1%: el fitxer no existeix.\n" +#, c-format +msgid "✖ Skipped %s: file does not exist.\n" +msgstr "✖ Omès %s: el fitxer no existeix.\n" -#, boost-format -msgid "✖ Skipped %1%: failed to replace.\n" -msgstr "✖ Omès %1%: la substitució ha fallat.\n" +#, c-format +msgid "✖ Skipped %s: failed to replace.\n" +msgstr "✖ Omès %s: la substitució ha fallat.\n" -#, boost-format -msgid "✔ Replaced %1%.\n" -msgstr "✔ Substituït %1%.\n" +#, c-format +msgid "✔ Replaced %s.\n" +msgstr "✔ Substituït %s.\n" msgid "Replaced volumes" msgstr "Volums substituïts" diff --git a/localization/i18n/cs/OrcaSlicer_cs.po b/localization/i18n/cs/OrcaSlicer_cs.po index 63b69765d7..e21fd3086c 100644 --- a/localization/i18n/cs/OrcaSlicer_cs.po +++ b/localization/i18n/cs/OrcaSlicer_cs.po @@ -8320,21 +8320,21 @@ msgstr "Nebyla vybrána složka pro nahrazení" msgid "Replaced with 3D files from directory:\n" msgstr "Nahrazeno 3D soubory ze složky:\n" -#, boost-format -msgid "✖ Skipped %1%: same file.\n" -msgstr "✖ Přeskočeno %1%: stejný soubor.\n" +#, c-format +msgid "✖ Skipped %s: same file.\n" +msgstr "✖ Přeskočeno %s: stejný soubor.\n" -#, boost-format -msgid "✖ Skipped %1%: file does not exist.\n" -msgstr "✖ Přeskočeno %1%: soubor neexistuje.\n" +#, c-format +msgid "✖ Skipped %s: file does not exist.\n" +msgstr "✖ Přeskočeno %s: soubor neexistuje.\n" -#, boost-format -msgid "✖ Skipped %1%: failed to replace.\n" -msgstr "✖ Přeskočeno %1%: nahrazení se nezdařilo.\n" +#, c-format +msgid "✖ Skipped %s: failed to replace.\n" +msgstr "✖ Přeskočeno %s: nahrazení se nezdařilo.\n" -#, boost-format -msgid "✔ Replaced %1%.\n" -msgstr "✔ Nahrazeno %1%.\n" +#, c-format +msgid "✔ Replaced %s.\n" +msgstr "✔ Nahrazeno %s.\n" msgid "Replaced volumes" msgstr "Nahrazené objemy" diff --git a/localization/i18n/de/OrcaSlicer_de.po b/localization/i18n/de/OrcaSlicer_de.po index b9389f5399..50384598e3 100644 --- a/localization/i18n/de/OrcaSlicer_de.po +++ b/localization/i18n/de/OrcaSlicer_de.po @@ -8191,21 +8191,21 @@ msgstr "Verzeichnis um daraus zu ersetzen wurde nicht ausgewählt" msgid "Replaced with 3D files from directory:\n" msgstr "Ersetzt durch 3D-Dateien aus Verzeichnis:\n" -#, boost-format -msgid "✖ Skipped %1%: same file.\n" -msgstr "✖ Übersprungen %1%: gleiche Datei.\n" +#, c-format +msgid "✖ Skipped %s: same file.\n" +msgstr "✖ Übersprungen %s: gleiche Datei.\n" -#, boost-format -msgid "✖ Skipped %1%: file does not exist.\n" -msgstr "✖ Übersprungen %1%: Datei existiert nicht.\n" +#, c-format +msgid "✖ Skipped %s: file does not exist.\n" +msgstr "✖ Übersprungen %s: Datei existiert nicht.\n" -#, boost-format -msgid "✖ Skipped %1%: failed to replace.\n" -msgstr "✖ Übersprungen %1%: Ersetzen fehlgeschlagen.\n" +#, c-format +msgid "✖ Skipped %s: failed to replace.\n" +msgstr "✖ Übersprungen %s: Ersetzen fehlgeschlagen.\n" -#, boost-format -msgid "✔ Replaced %1%.\n" -msgstr "✔ Ersetzt %1%.\n" +#, c-format +msgid "✔ Replaced %s.\n" +msgstr "✔ Ersetzt %s.\n" msgid "Replaced volumes" msgstr "Ersetzte Volumen" diff --git a/localization/i18n/en/OrcaSlicer_en.po b/localization/i18n/en/OrcaSlicer_en.po index eb25f226ee..232820f681 100644 --- a/localization/i18n/en/OrcaSlicer_en.po +++ b/localization/i18n/en/OrcaSlicer_en.po @@ -7776,20 +7776,20 @@ msgstr "" msgid "Replaced with 3D files from directory:\n" msgstr "" -#, boost-format -msgid "✖ Skipped %1%: same file.\n" +#, c-format +msgid "✖ Skipped %s: same file.\n" msgstr "" -#, boost-format -msgid "✖ Skipped %1%: file does not exist.\n" +#, c-format +msgid "✖ Skipped %s: file does not exist.\n" msgstr "" -#, boost-format -msgid "✖ Skipped %1%: failed to replace.\n" +#, c-format +msgid "✖ Skipped %s: failed to replace.\n" msgstr "" -#, boost-format -msgid "✔ Replaced %1%.\n" +#, c-format +msgid "✔ Replaced %s.\n" msgstr "" msgid "Replaced volumes" diff --git a/localization/i18n/es/OrcaSlicer_es.po b/localization/i18n/es/OrcaSlicer_es.po index c1709fe45f..1913c4512a 100644 --- a/localization/i18n/es/OrcaSlicer_es.po +++ b/localization/i18n/es/OrcaSlicer_es.po @@ -7997,21 +7997,21 @@ msgstr "No se seleccionó el directorio para el reemplazo" msgid "Replaced with 3D files from directory:\n" msgstr "Reemplazado con archivos 3D desde el directorio:\n" -#, boost-format -msgid "✖ Skipped %1%: same file.\n" -msgstr "✖ Omitido %1%: mismo archivo.\n" +#, c-format +msgid "✖ Skipped %s: same file.\n" +msgstr "✖ Omitido %s: mismo archivo.\n" -#, boost-format -msgid "✖ Skipped %1%: file does not exist.\n" -msgstr "✖ Omitido %1%: el archivo no existe.\n" +#, c-format +msgid "✖ Skipped %s: file does not exist.\n" +msgstr "✖ Omitido %s: el archivo no existe.\n" -#, boost-format -msgid "✖ Skipped %1%: failed to replace.\n" -msgstr "✖ Omitido %1%: fallo al reemplazar.\n" +#, c-format +msgid "✖ Skipped %s: failed to replace.\n" +msgstr "✖ Omitido %s: fallo al reemplazar.\n" -#, boost-format -msgid "✔ Replaced %1%.\n" -msgstr "✔ Reemplazado %1%.\n" +#, c-format +msgid "✔ Replaced %s.\n" +msgstr "✔ Reemplazado %s.\n" msgid "Replaced volumes" msgstr "Volúmenes reemplazados" diff --git a/localization/i18n/eu/OrcaSlicer_eu.po b/localization/i18n/eu/OrcaSlicer_eu.po index db9235b8c1..430e4f5a60 100644 --- a/localization/i18n/eu/OrcaSlicer_eu.po +++ b/localization/i18n/eu/OrcaSlicer_eu.po @@ -8064,21 +8064,21 @@ msgstr "Ez da ordezkatzeko direktoriorik hautatu" msgid "Replaced with 3D files from directory:\n" msgstr "Direktorio honetako 3D fitxategiekin ordeztuta:\n" -#, boost-format -msgid "✖ Skipped %1%: same file.\n" -msgstr "✖ %1% saltatu da: fitxategi bera.\n" +#, c-format +msgid "✖ Skipped %s: same file.\n" +msgstr "✖ %s saltatu da: fitxategi bera.\n" -#, boost-format -msgid "✖ Skipped %1%: file does not exist.\n" -msgstr "✖ %1% saltatu da: fitxategia ez da existitzen.\n" +#, c-format +msgid "✖ Skipped %s: file does not exist.\n" +msgstr "✖ %s saltatu da: fitxategia ez da existitzen.\n" -#, boost-format -msgid "✖ Skipped %1%: failed to replace.\n" -msgstr "✖ %1% saltatu da: ezin izan da ordeztu.\n" +#, c-format +msgid "✖ Skipped %s: failed to replace.\n" +msgstr "✖ %s saltatu da: ezin izan da ordeztu.\n" -#, boost-format -msgid "✔ Replaced %1%.\n" -msgstr "✔ %1% ordezkatu da.\n" +#, c-format +msgid "✔ Replaced %s.\n" +msgstr "✔ %s ordezkatu da.\n" msgid "Replaced volumes" msgstr "Ordeztutako bolumenak" diff --git a/localization/i18n/fr/OrcaSlicer_fr.po b/localization/i18n/fr/OrcaSlicer_fr.po index 2d0fb14b5c..82f0239d0a 100644 --- a/localization/i18n/fr/OrcaSlicer_fr.po +++ b/localization/i18n/fr/OrcaSlicer_fr.po @@ -8120,21 +8120,21 @@ msgstr "Le répertoire pour le remplacement n'a pas été sélectionné" msgid "Replaced with 3D files from directory:\n" msgstr "Remplacé par des fichiers 3D depuis le répertoire :\n" -#, boost-format -msgid "✖ Skipped %1%: same file.\n" -msgstr "✖ Ignoré %1% : même fichier.\n" +#, c-format +msgid "✖ Skipped %s: same file.\n" +msgstr "✖ Ignoré %s : même fichier.\n" -#, boost-format -msgid "✖ Skipped %1%: file does not exist.\n" -msgstr "✖ Ignoré %1% : le fichier n'existe pas.\n" +#, c-format +msgid "✖ Skipped %s: file does not exist.\n" +msgstr "✖ Ignoré %s : le fichier n'existe pas.\n" -#, boost-format -msgid "✖ Skipped %1%: failed to replace.\n" -msgstr "✖ Ignoré %1% : échec du remplacement.\n" +#, c-format +msgid "✖ Skipped %s: failed to replace.\n" +msgstr "✖ Ignoré %s : échec du remplacement.\n" -#, boost-format -msgid "✔ Replaced %1%.\n" -msgstr "✔ Remplacé %1%.\n" +#, c-format +msgid "✔ Replaced %s.\n" +msgstr "✔ Remplacé %s.\n" msgid "Replaced volumes" msgstr "Volumes remplacés" diff --git a/localization/i18n/hu/OrcaSlicer_hu.po b/localization/i18n/hu/OrcaSlicer_hu.po index bd4a9915c8..98cd987512 100644 --- a/localization/i18n/hu/OrcaSlicer_hu.po +++ b/localization/i18n/hu/OrcaSlicer_hu.po @@ -8244,21 +8244,21 @@ msgstr "A cseréhez nem lett mappa kiválasztva" msgid "Replaced with 3D files from directory:\n" msgstr "Cserélve a mappából származó 3D fájlokra:\n" -#, boost-format -msgid "✖ Skipped %1%: same file.\n" -msgstr "✖ Kihagyva %1%: azonos fájl.\n" +#, c-format +msgid "✖ Skipped %s: same file.\n" +msgstr "✖ %s kihagyva: azonos fájl.\n" -#, boost-format -msgid "✖ Skipped %1%: file does not exist.\n" -msgstr "✖ Kihagyva %1%: a fájl nem létezik.\n" +#, c-format +msgid "✖ Skipped %s: file does not exist.\n" +msgstr "✖ %s kihagyva: a fájl nem létezik.\n" -#, boost-format -msgid "✖ Skipped %1%: failed to replace.\n" -msgstr "✖ Kihagyva %1%: a csere sikertelen.\n" +#, c-format +msgid "✖ Skipped %s: failed to replace.\n" +msgstr "✖ %s kihagyva: a csere sikertelen.\n" -#, boost-format -msgid "✔ Replaced %1%.\n" -msgstr "✔ Lecserélve: %1%.\n" +#, c-format +msgid "✔ Replaced %s.\n" +msgstr "✔%s lecserélve.\n" msgid "Replaced volumes" msgstr "Lecserélt térfogatok" diff --git a/localization/i18n/it/OrcaSlicer_it.po b/localization/i18n/it/OrcaSlicer_it.po index 7be197c578..3c43178102 100644 --- a/localization/i18n/it/OrcaSlicer_it.po +++ b/localization/i18n/it/OrcaSlicer_it.po @@ -8244,21 +8244,21 @@ msgstr "La directory per la sostituzione non è stata selezionata" msgid "Replaced with 3D files from directory:\n" msgstr "Sostituito con file 3D dalla directory:\n" -#, boost-format -msgid "✖ Skipped %1%: same file.\n" -msgstr "✖ Saltato %1%: stesso file.\n" +#, c-format +msgid "✖ Skipped %s: same file.\n" +msgstr "✖ Saltato %s: stesso file.\n" -#, boost-format -msgid "✖ Skipped %1%: file does not exist.\n" -msgstr "✖ Saltato %1%: il file non esiste.\n" +#, c-format +msgid "✖ Skipped %s: file does not exist.\n" +msgstr "✖ Saltato %s: il file non esiste.\n" -#, boost-format -msgid "✖ Skipped %1%: failed to replace.\n" -msgstr "✖ Saltato %1%: sostituzione fallita.\n" +#, c-format +msgid "✖ Skipped %s: failed to replace.\n" +msgstr "✖ Saltato %s: sostituzione fallita.\n" -#, boost-format -msgid "✔ Replaced %1%.\n" -msgstr "✔ Sostituito %1%.\n" +#, c-format +msgid "✔ Replaced %s.\n" +msgstr "✔ Sostituito %s.\n" msgid "Replaced volumes" msgstr "Volumi sostituiti" diff --git a/localization/i18n/ja/OrcaSlicer_ja.po b/localization/i18n/ja/OrcaSlicer_ja.po index 1c78f50b54..0d9f044060 100644 --- a/localization/i18n/ja/OrcaSlicer_ja.po +++ b/localization/i18n/ja/OrcaSlicer_ja.po @@ -8262,21 +8262,21 @@ msgstr "置換用のディレクトリが選択されていません" msgid "Replaced with 3D files from directory:\n" msgstr "ディレクトリの3Dファイルで置換しました:\n" -#, boost-format -msgid "✖ Skipped %1%: same file.\n" -msgstr "✖ スキップ %1%: 同一ファイル。\n" +#, c-format +msgid "✖ Skipped %s: same file.\n" +msgstr "✖ スキップ %s: 同一ファイル。\n" -#, boost-format -msgid "✖ Skipped %1%: file does not exist.\n" -msgstr "✖ スキップ %1%: ファイルが存在しません。\n" +#, c-format +msgid "✖ Skipped %s: file does not exist.\n" +msgstr "✖ スキップ %s: ファイルが存在しません。\n" -#, boost-format -msgid "✖ Skipped %1%: failed to replace.\n" -msgstr "✖ スキップ %1%: 置換に失敗しました。\n" +#, c-format +msgid "✖ Skipped %s: failed to replace.\n" +msgstr "✖ スキップ %s: 置換に失敗しました。\n" -#, boost-format -msgid "✔ Replaced %1%.\n" -msgstr "✔ 置換しました %1%。\n" +#, c-format +msgid "✔ Replaced %s.\n" +msgstr "✔ 置換しました %s。\n" msgid "Replaced volumes" msgstr "置換されたボリューム" diff --git a/localization/i18n/ko/OrcaSlicer_ko.po b/localization/i18n/ko/OrcaSlicer_ko.po index debb3fb818..5a6ac0438b 100644 --- a/localization/i18n/ko/OrcaSlicer_ko.po +++ b/localization/i18n/ko/OrcaSlicer_ko.po @@ -8288,24 +8288,24 @@ msgid "Replaced with 3D files from directory:\n" msgstr "다음 디렉터리의 3D 파일로 교체했습니다:\n" # AI Translated -#, boost-format -msgid "✖ Skipped %1%: same file.\n" -msgstr "✖ 건너뜀 %1%: 동일한 파일입니다.\n" +#, c-format +msgid "✖ Skipped %s: same file.\n" +msgstr "✖ 건너뜀 %s: 동일한 파일입니다.\n" # AI Translated -#, boost-format -msgid "✖ Skipped %1%: file does not exist.\n" -msgstr "✖ 건너뜀 %1%: 파일이 존재하지 않습니다.\n" +#, c-format +msgid "✖ Skipped %s: file does not exist.\n" +msgstr "✖ 건너뜀 %s: 파일이 존재하지 않습니다.\n" # AI Translated -#, boost-format -msgid "✖ Skipped %1%: failed to replace.\n" -msgstr "✖ 건너뜀 %1%: 교체하지 못했습니다.\n" +#, c-format +msgid "✖ Skipped %s: failed to replace.\n" +msgstr "✖ 건너뜀 %s: 교체하지 못했습니다.\n" # AI Translated -#, boost-format -msgid "✔ Replaced %1%.\n" -msgstr "✔ %1%을(를) 교체했습니다.\n" +#, c-format +msgid "✔ Replaced %s.\n" +msgstr "✔ %s을(를) 교체했습니다.\n" # AI Translated msgid "Replaced volumes" diff --git a/localization/i18n/lt/OrcaSlicer_lt.po b/localization/i18n/lt/OrcaSlicer_lt.po index 23d2aae6f1..9a6b7ae590 100644 --- a/localization/i18n/lt/OrcaSlicer_lt.po +++ b/localization/i18n/lt/OrcaSlicer_lt.po @@ -8239,21 +8239,21 @@ msgstr "" "Pakeista 3D failais iš katalogo:\n" "\n" -#, boost-format -msgid "✖ Skipped %1%: same file.\n" -msgstr "✖ Praleistas %1%: tas pats failas.\n" +#, c-format +msgid "✖ Skipped %s: same file.\n" +msgstr "✖ Praleistas %s: tas pats failas.\n" -#, boost-format -msgid "✖ Skipped %1%: file does not exist.\n" -msgstr "✖ Praleistas %1%: failas neegzistuoja.\n" +#, c-format +msgid "✖ Skipped %s: file does not exist.\n" +msgstr "✖ Praleistas %s: failas neegzistuoja.\n" -#, boost-format -msgid "✖ Skipped %1%: failed to replace.\n" -msgstr "✖ Praleistas %1%: nepavyko pakeisti.\n" +#, c-format +msgid "✖ Skipped %s: failed to replace.\n" +msgstr "✖ Praleistas %s: nepavyko pakeisti.\n" -#, boost-format -msgid "✔ Replaced %1%.\n" -msgstr "✔ Pakeistas %1%.\n" +#, c-format +msgid "✔ Replaced %s.\n" +msgstr "✔ Pakeistas %s.\n" msgid "Replaced volumes" msgstr "Pakeisti tūriai" diff --git a/localization/i18n/nl/OrcaSlicer_nl.po b/localization/i18n/nl/OrcaSlicer_nl.po index a7ef340804..1ae53b2888 100644 --- a/localization/i18n/nl/OrcaSlicer_nl.po +++ b/localization/i18n/nl/OrcaSlicer_nl.po @@ -8999,24 +8999,24 @@ msgid "Replaced with 3D files from directory:\n" msgstr "Vervangen door 3D-bestanden uit de map:\n" # AI Translated -#, boost-format -msgid "✖ Skipped %1%: same file.\n" -msgstr "✖ Overgeslagen %1%: hetzelfde bestand.\n" +#, c-format +msgid "✖ Skipped %s: same file.\n" +msgstr "✖ Overgeslagen %s: hetzelfde bestand.\n" # AI Translated -#, boost-format -msgid "✖ Skipped %1%: file does not exist.\n" -msgstr "✖ Overgeslagen %1%: bestand bestaat niet.\n" +#, c-format +msgid "✖ Skipped %s: file does not exist.\n" +msgstr "✖ Overgeslagen %s: bestand bestaat niet.\n" # AI Translated -#, boost-format -msgid "✖ Skipped %1%: failed to replace.\n" -msgstr "✖ Overgeslagen %1%: vervangen is mislukt.\n" +#, c-format +msgid "✖ Skipped %s: failed to replace.\n" +msgstr "✖ Overgeslagen %s: vervangen is mislukt.\n" # AI Translated -#, boost-format -msgid "✔ Replaced %1%.\n" -msgstr "✔ Vervangen %1%.\n" +#, c-format +msgid "✔ Replaced %s.\n" +msgstr "✔ Vervangen %s.\n" # AI Translated msgid "Replaced volumes" diff --git a/localization/i18n/pl/OrcaSlicer_pl.po b/localization/i18n/pl/OrcaSlicer_pl.po index 8599e750e4..a0701dca09 100644 --- a/localization/i18n/pl/OrcaSlicer_pl.po +++ b/localization/i18n/pl/OrcaSlicer_pl.po @@ -8444,24 +8444,24 @@ msgid "Replaced with 3D files from directory:\n" msgstr "Zastąpiono plikami 3D z katalogu:\n" # AI Translated -#, boost-format -msgid "✖ Skipped %1%: same file.\n" -msgstr "✖ Pominięto %1%: ten sam plik.\n" +#, c-format +msgid "✖ Skipped %s: same file.\n" +msgstr "✖ Pominięto %s: ten sam plik.\n" # AI Translated -#, boost-format -msgid "✖ Skipped %1%: file does not exist.\n" -msgstr "✖ Pominięto %1%: plik nie istnieje.\n" +#, c-format +msgid "✖ Skipped %s: file does not exist.\n" +msgstr "✖ Pominięto %s: plik nie istnieje.\n" # AI Translated -#, boost-format -msgid "✖ Skipped %1%: failed to replace.\n" -msgstr "✖ Pominięto %1%: nie udało się zastąpić.\n" +#, c-format +msgid "✖ Skipped %s: failed to replace.\n" +msgstr "✖ Pominięto %s: nie udało się zastąpić.\n" # AI Translated -#, boost-format -msgid "✔ Replaced %1%.\n" -msgstr "✔ Zastąpiono %1%.\n" +#, c-format +msgid "✔ Replaced %s.\n" +msgstr "✔ Zastąpiono %s.\n" # AI Translated msgid "Replaced volumes" diff --git a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po index 58eabd99ef..14a479881f 100644 --- a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po +++ b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po @@ -8026,21 +8026,21 @@ msgstr "Diretório para substituição não foi selecionado" msgid "Replaced with 3D files from directory:\n" msgstr "Substituído por arquivos 3D do diretório:\n" -#, boost-format -msgid "✖ Skipped %1%: same file.\n" -msgstr "✖ %1% Ignorados: mesmo arquivo.\n" +#, c-format +msgid "✖ Skipped %s: same file.\n" +msgstr "✖ %s Ignorados: mesmo arquivo.\n" -#, boost-format -msgid "✖ Skipped %1%: file does not exist.\n" -msgstr "✖ %1% Ignorados: arquivo não existe.\n" +#, c-format +msgid "✖ Skipped %s: file does not exist.\n" +msgstr "✖ %s Ignorados: arquivo não existe.\n" -#, boost-format -msgid "✖ Skipped %1%: failed to replace.\n" -msgstr "✖ %1% Ignorados: falha ao substituir.\n" +#, c-format +msgid "✖ Skipped %s: failed to replace.\n" +msgstr "✖ %s Ignorados: falha ao substituir.\n" -#, boost-format -msgid "✔ Replaced %1%.\n" -msgstr "✔ %1% Substituídos.\n" +#, c-format +msgid "✔ Replaced %s.\n" +msgstr "✔ %s Substituídos.\n" msgid "Replaced volumes" msgstr "Volumes substiruídos" diff --git a/localization/i18n/ru/OrcaSlicer_ru.po b/localization/i18n/ru/OrcaSlicer_ru.po index a0a48560ff..607890b047 100644 --- a/localization/i18n/ru/OrcaSlicer_ru.po +++ b/localization/i18n/ru/OrcaSlicer_ru.po @@ -8413,21 +8413,21 @@ msgstr "Расположение для замены не указано" msgid "Replaced with 3D files from directory:\n" msgstr "Заменено файлами из расположения:\n" -#, boost-format -msgid "✖ Skipped %1%: same file.\n" -msgstr "✖ Пропущен %1%: идентичный файл.\n" +#, c-format +msgid "✖ Skipped %s: same file.\n" +msgstr "✖ Пропущен %s: идентичный файл.\n" -#, boost-format -msgid "✖ Skipped %1%: file does not exist.\n" -msgstr "✖ Пропущен %1%: файл не существует.\n" +#, c-format +msgid "✖ Skipped %s: file does not exist.\n" +msgstr "✖ Пропущен %s: файл не существует.\n" -#, boost-format -msgid "✖ Skipped %1%: failed to replace.\n" -msgstr "✖ Пропущен %1%: не удалось заменить.\n" +#, c-format +msgid "✖ Skipped %s: failed to replace.\n" +msgstr "✖ Пропущен %s: не удалось заменить.\n" -#, boost-format -msgid "✔ Replaced %1%.\n" -msgstr "✔ Заменён %1%.\n" +#, c-format +msgid "✔ Replaced %s.\n" +msgstr "✔ Заменён %s.\n" msgid "Replaced volumes" msgstr "Модели заменены" diff --git a/localization/i18n/sv/OrcaSlicer_sv.po b/localization/i18n/sv/OrcaSlicer_sv.po index 6d28e4e66f..5686fb7d8f 100644 --- a/localization/i18n/sv/OrcaSlicer_sv.po +++ b/localization/i18n/sv/OrcaSlicer_sv.po @@ -9088,24 +9088,24 @@ msgid "Replaced with 3D files from directory:\n" msgstr "Ersatt med 3D-filer från mappen:\n" # AI Translated -#, boost-format -msgid "✖ Skipped %1%: same file.\n" -msgstr "✖ Hoppade över %1%: samma fil.\n" +#, c-format +msgid "✖ Skipped %s: same file.\n" +msgstr "✖ Hoppade över %s: samma fil.\n" # AI Translated -#, boost-format -msgid "✖ Skipped %1%: file does not exist.\n" -msgstr "✖ Hoppade över %1%: filen finns inte.\n" +#, c-format +msgid "✖ Skipped %s: file does not exist.\n" +msgstr "✖ Hoppade över %s: filen finns inte.\n" # AI Translated -#, boost-format -msgid "✖ Skipped %1%: failed to replace.\n" -msgstr "✖ Hoppade över %1%: det gick inte att ersätta.\n" +#, c-format +msgid "✖ Skipped %s: failed to replace.\n" +msgstr "✖ Hoppade över %s: det gick inte att ersätta.\n" # AI Translated -#, boost-format -msgid "✔ Replaced %1%.\n" -msgstr "✔ Ersatte %1%.\n" +#, c-format +msgid "✔ Replaced %s.\n" +msgstr "✔ Ersatte %s.\n" # AI Translated msgid "Replaced volumes" diff --git a/localization/i18n/th/OrcaSlicer_th.po b/localization/i18n/th/OrcaSlicer_th.po index 84b41505a9..6a4499d148 100644 --- a/localization/i18n/th/OrcaSlicer_th.po +++ b/localization/i18n/th/OrcaSlicer_th.po @@ -8199,21 +8199,21 @@ msgstr "ไม่ได้เลือกไดเรกทอรีสำหร msgid "Replaced with 3D files from directory:\n" msgstr "แทนที่ด้วยไฟล์ 3D จากไดเรกทอรี:\n" -#, boost-format -msgid "✖ Skipped %1%: same file.\n" -msgstr "✖ ข้าม %1%: ไฟล์เดียวกัน\n" +#, c-format +msgid "✖ Skipped %s: same file.\n" +msgstr "✖ ข้าม %s: ไฟล์เดียวกัน\n" -#, boost-format -msgid "✖ Skipped %1%: file does not exist.\n" -msgstr "✖ ข้าม %1%: ไม่มีไฟล์อยู่\n" +#, c-format +msgid "✖ Skipped %s: file does not exist.\n" +msgstr "✖ ข้าม %s: ไม่มีไฟล์อยู่\n" -#, boost-format -msgid "✖ Skipped %1%: failed to replace.\n" -msgstr "✖ ข้าม %1%: ไม่สามารถแทนที่ได้\n" +#, c-format +msgid "✖ Skipped %s: failed to replace.\n" +msgstr "✖ ข้าม %s: ไม่สามารถแทนที่ได้\n" -#, boost-format -msgid "✔ Replaced %1%.\n" -msgstr "✔แทนที่ %1%\n" +#, c-format +msgid "✔ Replaced %s.\n" +msgstr "✔แทนที่ %s\n" msgid "Replaced volumes" msgstr "ปริมาณที่ถูกแทนที่" diff --git a/localization/i18n/tr/OrcaSlicer_tr.po b/localization/i18n/tr/OrcaSlicer_tr.po index fd1ad673af..467b3c355b 100644 --- a/localization/i18n/tr/OrcaSlicer_tr.po +++ b/localization/i18n/tr/OrcaSlicer_tr.po @@ -8335,21 +8335,21 @@ msgstr "Değiştirme için dizin seçilmedi" msgid "Replaced with 3D files from directory:\n" msgstr "Dizindeki 3D dosyalarla değiştirildi:\n" -#, boost-format -msgid "✖ Skipped %1%: same file.\n" -msgstr "✖ %1% atlandı: aynı dosya.\n" +#, c-format +msgid "✖ Skipped %s: same file.\n" +msgstr "✖ %s atlandı: aynı dosya.\n" -#, boost-format -msgid "✖ Skipped %1%: file does not exist.\n" -msgstr "✖ %1% atlandı: dosya mevcut değil.\n" +#, c-format +msgid "✖ Skipped %s: file does not exist.\n" +msgstr "✖ %s atlandı: dosya mevcut değil.\n" -#, boost-format -msgid "✖ Skipped %1%: failed to replace.\n" -msgstr "✖ %1% atlandı: değiştirilemedi.\n" +#, c-format +msgid "✖ Skipped %s: failed to replace.\n" +msgstr "✖ %s atlandı: değiştirilemedi.\n" -#, boost-format -msgid "✔ Replaced %1%.\n" -msgstr "✔ %1% değiştirildi.\n" +#, c-format +msgid "✔ Replaced %s.\n" +msgstr "✔ %s değiştirildi.\n" msgid "Replaced volumes" msgstr "Değiştirilen birimler" diff --git a/localization/i18n/uk/OrcaSlicer_uk.po b/localization/i18n/uk/OrcaSlicer_uk.po index 464cd4042a..9204a67ec3 100644 --- a/localization/i18n/uk/OrcaSlicer_uk.po +++ b/localization/i18n/uk/OrcaSlicer_uk.po @@ -8306,21 +8306,21 @@ msgstr "Каталог для заміни не вибрано" msgid "Replaced with 3D files from directory:\n" msgstr "Замінено 3D-файлами з каталогу:\n" -#, boost-format -msgid "✖ Skipped %1%: same file.\n" -msgstr "✖ Пропущено %1%: той самий файл.\n" +#, c-format +msgid "✖ Skipped %s: same file.\n" +msgstr "✖ Пропущено %s: той самий файл.\n" -#, boost-format -msgid "✖ Skipped %1%: file does not exist.\n" -msgstr "✖ Пропущено %1%: файл не існує.\n" +#, c-format +msgid "✖ Skipped %s: file does not exist.\n" +msgstr "✖ Пропущено %s: файл не існує.\n" -#, boost-format -msgid "✖ Skipped %1%: failed to replace.\n" -msgstr "✖ Пропущено %1%: не вдалося замінити.\n" +#, c-format +msgid "✖ Skipped %s: failed to replace.\n" +msgstr "✖ Пропущено %s: не вдалося замінити.\n" -#, boost-format -msgid "✔ Replaced %1%.\n" -msgstr "✔ Замінено %1%.\n" +#, c-format +msgid "✔ Replaced %s.\n" +msgstr "✔ Замінено %s.\n" msgid "Replaced volumes" msgstr "Замінені обʼєми" diff --git a/localization/i18n/vi/OrcaSlicer_vi.po b/localization/i18n/vi/OrcaSlicer_vi.po index 2133579d50..e6e7adf43d 100644 --- a/localization/i18n/vi/OrcaSlicer_vi.po +++ b/localization/i18n/vi/OrcaSlicer_vi.po @@ -8721,24 +8721,24 @@ msgid "Replaced with 3D files from directory:\n" msgstr "Đã thay thế bằng file 3D từ thư mục:\n" # AI Translated -#, boost-format -msgid "✖ Skipped %1%: same file.\n" -msgstr "✖ Đã bỏ qua %1%: cùng một file.\n" +#, c-format +msgid "✖ Skipped %s: same file.\n" +msgstr "✖ Đã bỏ qua %s: cùng một file.\n" # AI Translated -#, boost-format -msgid "✖ Skipped %1%: file does not exist.\n" -msgstr "✖ Đã bỏ qua %1%: file không tồn tại.\n" +#, c-format +msgid "✖ Skipped %s: file does not exist.\n" +msgstr "✖ Đã bỏ qua %s: file không tồn tại.\n" # AI Translated -#, boost-format -msgid "✖ Skipped %1%: failed to replace.\n" -msgstr "✖ Đã bỏ qua %1%: thay thế thất bại.\n" +#, c-format +msgid "✖ Skipped %s: failed to replace.\n" +msgstr "✖ Đã bỏ qua %s: thay thế thất bại.\n" # AI Translated -#, boost-format -msgid "✔ Replaced %1%.\n" -msgstr "✔ Đã thay thế %1%.\n" +#, c-format +msgid "✔ Replaced %s.\n" +msgstr "✔ Đã thay thế %s.\n" # AI Translated msgid "Replaced volumes" diff --git a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po index f7ca502c9e..345891f250 100644 --- a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po +++ b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po @@ -8028,21 +8028,21 @@ msgstr "未选择替换目录" msgid "Replaced with 3D files from directory:\n" msgstr "替换为目录中的 3D 文件:\n" -#, boost-format -msgid "✖ Skipped %1%: same file.\n" -msgstr "✖ 跳过 %1%:同一文件。\n" +#, c-format +msgid "✖ Skipped %s: same file.\n" +msgstr "✖ 跳过 %s:同一文件。\n" -#, boost-format -msgid "✖ Skipped %1%: file does not exist.\n" -msgstr "✖ 跳过%1%:文件不存在。\n" +#, c-format +msgid "✖ Skipped %s: file does not exist.\n" +msgstr "✖ 跳过%s:文件不存在。\n" -#, boost-format -msgid "✖ Skipped %1%: failed to replace.\n" -msgstr "✖ 跳过%1%:替换失败。\n" +#, c-format +msgid "✖ Skipped %s: failed to replace.\n" +msgstr "✖ 跳过%s:替换失败。\n" -#, boost-format -msgid "✔ Replaced %1%.\n" -msgstr "✔ 替换了 %1%。\n" +#, c-format +msgid "✔ Replaced %s.\n" +msgstr "✔ 替换了 %s。\n" msgid "Replaced volumes" msgstr "替换的卷" diff --git a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po index 912396eea8..9b37009978 100644 --- a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po +++ b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po @@ -8193,21 +8193,21 @@ msgstr "未選擇替換的目錄" msgid "Replaced with 3D files from directory:\n" msgstr "已從目錄替換為 3D 檔案:\n" -#, boost-format -msgid "✖ Skipped %1%: same file.\n" -msgstr "✖ 已跳過 %1%:相同檔案。\n" +#, c-format +msgid "✖ Skipped %s: same file.\n" +msgstr "✖ 已跳過 %s:相同檔案。\n" -#, boost-format -msgid "✖ Skipped %1%: file does not exist.\n" -msgstr "✖ 已跳過 %1%:檔案不存在。\n" +#, c-format +msgid "✖ Skipped %s: file does not exist.\n" +msgstr "✖ 已跳過 %s:檔案不存在。\n" -#, boost-format -msgid "✖ Skipped %1%: failed to replace.\n" -msgstr "✖ 已跳過 %1%:無法替換。\n" +#, c-format +msgid "✖ Skipped %s: failed to replace.\n" +msgstr "✖ 已跳過 %s:無法替換。\n" -#, boost-format -msgid "✔ Replaced %1%.\n" -msgstr "✔ 已替換 %1%。\n" +#, c-format +msgid "✔ Replaced %s.\n" +msgstr "✔ 已替換 %s。\n" msgid "Replaced volumes" msgstr "已替換體積" diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 3ee09fed06..8299125353 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -9501,7 +9501,7 @@ void Plater::priv::replace_all_with_stl() return; } - std::string status = _L("Replaced with 3D files from directory:\n").ToStdString() + out_path.string() + "\n\n"; + wxString status = _L("Replaced with 3D files from directory:\n") + from_u8(out_path.string()) + "\n\n"; for (unsigned int idx : volume_idxs) { const GLVolume* v = selection.get_volume(idx); @@ -9521,13 +9521,13 @@ void Plater::priv::replace_all_with_stl() std::string volume_name = volume->name; if (new_path == input_path) { - status += boost::str(boost::format(_L("✖ Skipped %1%: same file.\n").ToStdString()) % volume_name); + status += wxString::Format(_L("✖ Skipped %s: same file.\n"), from_u8(volume_name)); BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " skipping replace volume : same filename " << new_path; continue; } if (!fs::exists(new_path)) { - status += boost::str(boost::format(_L("✖ Skipped %1%: file does not exist.\n").ToStdString()) % volume_name); + status += wxString::Format(_L("✖ Skipped %s: file does not exist.\n"), from_u8(volume_name)); BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " cannot replace volume : filen does not exist " << new_path; continue; } @@ -9535,12 +9535,12 @@ void Plater::priv::replace_all_with_stl() BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " replacing volume : " << input_path << " with " << new_path; if (!replace_volume_with_stl(object_idx, volume_idx, new_path, _u8L("Replace with 3D file"))) { - status += boost::str(boost::format(_L("✖ Skipped %1%: failed to replace.\n").ToStdString()) % volume_name); + status += wxString::Format(_L("✖ Skipped %s: failed to replace.\n"), from_u8(volume_name)); BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " cannot replace volume : failed to replace with " << new_path; continue; } - status += boost::str(boost::format(_L("✔ Replaced %1%.\n").ToStdString()) % volume_name); + status += wxString::Format(_L("✔ Replaced %s.\n"), from_u8(volume_name)); } // update 3D scene From b5412221b6c051d88dc50c2f4f37716a78dcea99 Mon Sep 17 00:00:00 2001 From: Alexandre Folle de Menezes Date: Fri, 7 Aug 2026 09:22:42 -0300 Subject: [PATCH 38/66] Verify and improve AI pt_BR translations (#15080) --- localization/i18n/pt_BR/OrcaSlicer_pt_BR.po | 96 +++------------------ 1 file changed, 13 insertions(+), 83 deletions(-) diff --git a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po index 14a479881f..0d777ec32e 100644 --- a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po +++ b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po @@ -17130,15 +17130,12 @@ msgstr "Quando este valor de retração for modificado, ele será usado como a q msgid "Support fast purge mode" msgstr "Suporte ao modo de purga rápida" -# AI Translated msgid "Whether this printer supports fast purge mode with optimized temperature and multiplier." msgstr "Se esta impressora suporta o modo de purga rápida com temperatura e multiplicador otimizados." -# AI Translated msgid "Filament change" msgstr "Troca de filamento" -# AI Translated msgid "The volume of material required to prime the extruder on the tower, excluding a hotend change." msgstr "O volume de material necessário para preparar a extrusora na torre, excluindo uma troca de hotend." @@ -18323,11 +18320,9 @@ msgstr "" "Há vários endereços IP resolvendo para o nome do host %1%.\n" "Por favor, selecione um que deve ser usado." -# AI Translated msgid "Auto-scale for nozzle" msgstr "Escala automática para o bico" -# AI Translated msgid "" "This model is designed around a 0.4 mm nozzle with a 0.2 mm layer height. \n" "When the scaling option is enabled (recommended), it dynamically resizes to match your current nozzle diameter and an appropriate layer height, making the test both accurate and easy to read.\n" @@ -18473,11 +18468,9 @@ msgstr "Velocidade Inicial: " msgid "End speed: " msgstr "Velocidade Final: " -# AI Translated msgid "Auto-adjust to max volumetric speed" msgstr "Ajuste automático à velocidade volumétrica máxima" -# AI Translated msgid "If the end speed would exceed the filament's maximum volumetric speed, automatically lower the layer height (keeping standard values and staying within the machine's limits) to reach it. If even the minimum layer height is not enough, lower the end speed instead." msgstr "Se a velocidade final ultrapassar a velocidade volumétrica máxima do filamento, reduz automaticamente a altura de camada (mantendo valores padrão e respeitando os limites da máquina) para alcançá-la. Se nem mesmo a altura de camada mínima for suficiente, reduz a velocidade final." @@ -18492,7 +18485,6 @@ msgstr "" "passo >= 0\n" "fim > início + passo" -# AI Translated #, c-format, boost-format msgid "" "The end speed (%.0f mm/s) exceeds the filament's maximum volumetric speed (%.1f mm³/s), which limits the outer wall to about %.0f mm/s at this line width and layer height.\n" @@ -18500,12 +18492,11 @@ msgid "" "\n" "%s" msgstr "" -"A velocidade final (%.0f mm/s) ultrapassa a velocidade volumétrica máxima do filamento (%.1f mm³/s), o que limita a parede externa a cerca de %.0f mm/s com esta largura de linha e altura de camada.\n" +"A velocidade final (%.0f mm/s) excede a velocidade volumétrica máxima do filamento (%.1f mm³/s), o que limita a parede externa a cerca de %.0f mm/s com esta largura de linha e altura de camada.\n" " Velocidades acima disso serão limitadas, portanto os blocos superiores da torre não serão impressos na velocidade solicitada.\n" "\n" "%s" -# AI Translated #, c-format, boost-format msgid "" "The end speed (%.0f mm/s) exceeds the filament's maximum volumetric speed (%.1f mm³/s) at the default layer height (%.2f mm).\n" @@ -18516,7 +18507,6 @@ msgstr "" "\n" "A altura de camada foi reduzida para %.2f mm (um valor usado pelos perfis desta impressora) para que a torre possa atingir a velocidade solicitada." -# AI Translated #, c-format, boost-format msgid "" "Even at the smallest layer height used by this printer's profiles (%.2f mm) the end speed (%.0f mm/s) exceeds the filament's maximum volumetric speed (%.1f mm³/s).\n" @@ -18531,15 +18521,12 @@ msgstr "" "\n" "Continuar?" -# AI Translated msgid "Continue anyway?" msgstr "Continuar mesmo assim?" -# AI Translated msgid "Enable \"Auto-adjust\" to fix this automatically, or continue anyway?" msgstr "Ativar \"Ajuste automático\" para corrigir isso automaticamente ou continuar mesmo assim?" -# AI Translated msgid "Enable \"Auto-scale for nozzle\" and \"Auto-adjust\" to fix this automatically, or continue anyway?" msgstr "Ativar \"Escala automática para o bico\" e \"Ajuste automático\" para corrigir isso automaticamente ou continuar mesmo assim?" @@ -19644,9 +19631,8 @@ msgstr "Não foi possível decifrar a resposta do servidor." msgid "Error saving session to file" msgstr "Erro salvando sessão para arquivo" -# AI Translated msgid "Error session check" -msgstr "Verificação de sessão de erro" +msgstr "Erro na verificação de sessão" msgid "Error during file upload" msgstr "Erro durante a subida do arquivo" @@ -20079,9 +20065,8 @@ msgstr "Impressão Falhou" msgid "Removed" msgstr "Removido" -# AI Translated msgid "Enable smart filament assign: Assign one filament to multiple nozzles to maximize savings" -msgstr "Ativar atribuição inteligente de filamento: atribui um filamento a vários bicos para maximizar a economia" +msgstr "Ativar atribuição inteligente de filamento: Atribui um filamento a vários bicos para maximizar a economia" msgid "Fila Saving" msgstr "Econo Filamento" @@ -20119,7 +20104,6 @@ msgstr "Tutorial em vídeo" msgid "(Sync with printer)" msgstr "(Sinc. com impressora)" -# AI Translated #, c-format, boost-format msgid "Error: %s extruder has no available %s nozzle, current group result is invalid." msgstr "Erro: a extrusora %s não tem nenhum bico %s disponível, o resultado do grupo atual é inválido." @@ -20130,17 +20114,14 @@ msgstr "Vamos fatiar de acordo com este método de agrupamento:" msgid "Tip: You can drag the filaments to reassign them to different nozzles." msgstr "Dica: Você pode arrastar os filamentos para reatribuí-los a diferentes bicos." -# AI Translated msgid "Please adjust your grouping or click " msgstr "Por favor, ajuste seu agrupamento ou clique em " -# AI Translated msgid " to set nozzle count" msgstr " para definir o número de bicos" -# AI Translated msgid "Set the physical nozzle count..." -msgstr "Definir o número físico de bicos..." +msgstr "Definir o número de bicos físicos…" msgid "The filament grouping method for current plate is determined by the dropdown option at the slicing plate button." msgstr "O método de agrupamento de filamentos para a placa atual é determinado pela opção no botão de fatiamento da placa." @@ -20480,99 +20461,75 @@ msgstr "Numero de facetas triangulares" msgid "Calculating, please wait..." msgstr "Calculando, por favor aguarde…" -# AI Translated msgid "Save these settings as default" msgstr "Salvar estas configurações como padrão" -# AI Translated msgid "If enabled, the values above are stored as the defaults used for future STEP imports (and shown in Preferences)." msgstr "Se ativado, os valores acima são armazenados como os padrões usados para futuras importações STEP (e mostrados nas Preferências)." -# AI Translated msgid "PresetBundle" msgstr "PresetBundle" -# AI Translated msgid "Bundle folder does not exist." msgstr "A pasta do pacote não existe." -# AI Translated msgid "Failed to open folder." msgstr "Falha ao abrir a pasta." -# AI Translated msgid "Delete selected bundle from folder and all presets loaded from it?" msgstr "Excluir o pacote selecionado da pasta e todas as predefinições carregadas a partir dele?" -# AI Translated msgid "Delete Bundle" -msgstr "Excluir pacote" +msgstr "Excluir Pacote" -# AI Translated msgid "Failed to remove bundle." msgstr "Falha ao remover o pacote." -# AI Translated msgid "Remove Bundle" msgstr "Remover pacote" -# AI Translated msgid "Unsubscribe bundle?" msgstr "Cancelar a inscrição do pacote?" -# AI Translated msgid "UnsubscribeBundle" msgstr "UnsubscribeBundle" -# AI Translated msgid "Failed to unsubscribe bundle." msgstr "Falha ao cancelar a inscrição do pacote." -# AI Translated msgid "Unsubscribe Bundle" -msgstr "Cancelar inscrição do pacote" +msgstr "Cancelar inscrição do Pacote" -# AI Translated msgid "ExportPresetBundle" msgstr "ExportPresetBundle" -# AI Translated msgid "Save preset bundle" msgstr "Salvar pacote de predefinições" -# AI Translated msgid "Performing desktop integration failed - boost::filesystem::canonical did not return appimage path." msgstr "Falha ao realizar a integração com a área de trabalho - boost::filesystem::canonical não retornou o caminho do appimage." -# AI Translated msgid "Performing desktop integration failed - Could not find executable." msgstr "Falha ao realizar a integração com a área de trabalho - não foi possível encontrar o executável." -# AI Translated msgid "Performing desktop integration failed because the application directory was not found." msgstr "Falha ao realizar a integração com a área de trabalho porque o diretório do aplicativo não foi encontrado." -# AI Translated msgid "Performing desktop integration failed - could not create Gcodeviewer desktop file. OrcaSlicer desktop file was probably created successfully." msgstr "Falha ao realizar a integração com a área de trabalho - não foi possível criar o arquivo desktop do Gcodeviewer. O arquivo desktop do OrcaSlicer provavelmente foi criado com sucesso." -# AI Translated msgid "Performing downloader desktop integration failed - boost::filesystem::canonical did not return appimage path." msgstr "Falha ao realizar a integração do downloader com a área de trabalho - boost::filesystem::canonical não retornou o caminho do appimage." -# AI Translated msgid "Performing downloader desktop integration failed - Could not find executable." msgstr "Falha ao realizar a integração do downloader com a área de trabalho - não foi possível encontrar o executável." -# AI Translated msgid "Performing downloader desktop integration failed because the application directory was not found." msgstr "Falha ao realizar a integração do downloader com a área de trabalho porque o diretório do aplicativo não foi encontrado." -# AI Translated msgid "Desktop Integration" -msgstr "Integração com a área de trabalho" +msgstr "Integração com a Área de Trabalho" -# AI Translated msgid "" "Desktop Integration sets this binary to be searchable by the system.\n" "\n" @@ -20596,40 +20553,33 @@ msgstr "Arquivar pré-visualização" msgid "Open File" msgstr "Abrir Arquivo" -# AI Translated msgid "AMS Dryness Control" -msgstr "Controle de secura do AMS" +msgstr "Controle de Secura do AMS" -# AI Translated msgid "Filament Drying Settings" -msgstr "Configurações de secagem de filamento" +msgstr "Configurações de Secagem de Filamento" msgid "Stopping" msgstr "Parando" -# AI Translated msgid "Unable to dry temporarily due to ..." -msgstr "Não é possível secar temporariamente devido a ..." +msgstr "Não é possível secar temporariamente devido a…" msgid "Drying Error" msgstr "Erro de Secagem" -# AI Translated msgid "Please check the Assistant for troubleshooting" msgstr "Por favor, verifique o Assistente para solução de problemas" -# AI Translated msgid "Please remove and store the filament (as shown)." msgstr "Por favor, remova e guarde o filamento (como mostrado)." -# AI Translated msgid "The AMS can rotate the filament which is properly stored, providing better drying results." msgstr "O AMS pode girar o filamento que está corretamente armazenado, proporcionando melhores resultados de secagem." msgid "Rotate spool when drying" msgstr "Girar o carretel durante a secagem" -# AI Translated msgctxt "amsdrying" msgid "Back" msgstr "Voltar" @@ -20649,11 +20599,9 @@ msgstr " temperatura mínima de secagem é " msgid "This filament may not be completely dried." msgstr "Este filamento pode não estar completamente seco." -# AI Translated msgid "This AMS is currently printing. To ensure print quality, the drying temperature cannot exceed the recommended drying temperature." msgstr "Este AMS está imprimindo no momento. Para garantir a qualidade da impressão, a temperatura de secagem não pode exceder a temperatura de secagem recomendada." -# AI Translated msgid "The temperature shall not exceed the filament's heat distortion temperature" msgstr "A temperatura não deve exceder a temperatura de distorção térmica do filamento" @@ -20666,22 +20614,18 @@ msgstr "O valor máximo de tempo não pode ser superior a 24." msgid "Insufficient power" msgstr "Potência insuficiente" -# AI Translated msgid " Too many AMS drying simultaneously. Please plug in the power or stop other drying processes before starting." msgstr " Muitos AMS secando simultaneamente. Por favor, conecte à energia ou pare outros processos de secagem antes de iniciar." msgid "AMS is busy" msgstr "O AMS está ocupado" -# AI Translated msgid " AMS is calibrating | reading RFID | loading/unloading material, please wait." msgstr " O AMS está calibrando | lendo RFID | carregando/descarregando material, por favor aguarde." -# AI Translated msgid "Filament in AMS outlet" msgstr "Filamento na saída do AMS" -# AI Translated msgid " The high drying temperature may cause AMS blockage, please unload first." msgstr " A alta temperatura de secagem pode causar bloqueio do AMS, por favor descarregue primeiro." @@ -20694,18 +20638,15 @@ msgstr "Não suportado no modo 2D" msgid "Task in progress" msgstr "Tarefa em progresso" -# AI Translated msgid " The AMS might be in use during Task." msgstr " O AMS pode estar em uso durante a Tarefa." msgid " Firmware update in progress, please wait..." -msgstr " Atualização de firmware em progresso, por favor aguarde..." +msgstr " Atualização de firmware em progresso, por favor aguarde…" -# AI Translated msgid " Please plug in the power and then use the drying function." -msgstr " Por favor, conecte à energia e depois use a função de secagem." +msgstr " Por favor, conecte à energia e então use a função de secagem." -# AI Translated msgid " The high drying temperature may cause AMS blockage. Please unload the filament manually before proceeding." msgstr " A alta temperatura de secagem pode causar bloqueio do AMS. Por favor, descarregue o filamento manualmente antes de prosseguir." @@ -20713,7 +20654,7 @@ msgid "System is busy" msgstr "O sistema está ocupado" msgid " Initiating other drying processes, please wait a few seconds..." -msgstr " Iniciando outros processos de secagem, por favor aguarde alguns segundos..." +msgstr " Iniciando outros processos de secagem, por favor aguarde alguns segundos…" msgid "For better drying results, remove the filament and allow it to rotate." msgstr "Para obter melhores resultados de secagem, remova o filamento e permita que ele gire." @@ -21078,17 +21019,6 @@ msgstr "" #~ msgid "Rear" #~ msgstr "Traseira" -# AI Translated -#, boost-format -#~ msgid "" -#~ "Objects(%1%) have duplicated connectors. Some connectors may be missing in slicing result.\n" -#~ "Please report to PrusaSlicer team in which scenario this issue happened.\n" -#~ "Thank you." -#~ msgstr "" -#~ "Os objetos(%1%) têm conectores duplicados. Alguns conectores podem estar faltando no resultado do fatiamento.\n" -#~ "Por favor, informe à equipe do PrusaSlicer em qual cenário esse problema ocorreu.\n" -#~ "Obrigado." - #~ msgid "Skip for Now" #~ msgstr "Pular por Enquanto" From 8e243faa3a27a50baf12abafd567584222ef7d43 Mon Sep 17 00:00:00 2001 From: Clifford Date: Fri, 7 Aug 2026 08:26:18 -0400 Subject: [PATCH 39/66] Fix Linux unit test failure in the wipe tower temperature trace comparison (#15161) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Problem `Toolchange temperature commands are unchanged when the wipe tower wait is off` (added in #15144) fails on both Linux runners and passes on Windows and macOS. It is the only failing test in the suite, and it has been failing on main since that PR merged. | Job | Result | | --- | --- | | Windows x64 / Unit Tests | pass | | Windows arm64 / Unit Tests | pass | | macOS arm64 / Unit Tests | pass | | Linux x86_64 / Unit Tests | **fail** | | Linux aarch64 / Unit Tests | **fail** | From the merge commit ([Linux x86_64](https://github.com/OrcaSlicer/OrcaSlicer/actions/runs/31072382258/job/92531704095), [Linux aarch64](https://github.com/OrcaSlicer/OrcaSlicer/actions/runs/31072382258/job/92531704075)), still reproducing on current main: ``` first difference at trace entry 29 main: M104 S240 T0 ; preheat T0 time: 31s lead 30.9s branch: M104 S240 T0 ; preheat T0 time: 30s lead 30.3s ``` ## Cause Each preheat entry records the same quantity twice: `lead` at one decimal, and `time:` inside the command text as that value rounded to a whole second. `split_lead` already compares `lead` with a 0.5s tolerance and explains why the estimate moves. `time:` sits in the exactly-compared command text, so it never got that tolerance — and being rounded, it flips on a drift far below 0.5s (30.4 and 30.6 render as `30s` and `31s`). Entry 29 is the only entry in the 163-entry golden whose lead rounds up; every other preheat sits at 30.0–30.4 and rounds down, which is why it is the only one that fails. The variation is per-toolchain, not run to run. Both Linux arches produce exactly `lead 30.3s`; Windows x64/arm64 and macOS arm64 all produce exactly `30.9s`. Repeated local runs are byte-identical. macOS arm64 passing while Linux aarch64 fails rules out the ISA — it is floating-point accumulation over a few thousand move durations under GCC vs Clang vs MSVC. The mechanism makes it discrete rather than gradual: the backtrace parks the preheat at the first exported line at least `preheat_time` before the tool change, so `lead` is `preheat_time` plus the leftover of whichever move that landed on. A sub-tenth difference selects the neighbouring move and `lead` steps by that move's whole duration. Entries 1–28 match exactly, including five earlier preheats whose leads fall inside the existing tolerance, so the toolpaths themselves are identical. I also reverted the two prime-tower commits that landed between the golden's capture point and now, rebuilt, and got a byte-identical trace — this is not behavioural drift. That also rules out regenerating the golden: no single capture satisfies all three toolchains, and recapturing on Linux would turn the three currently-green runners red. ## Fix Test-only. - `lead` keeps a tolerance, widened to 1.5s (measured drift 0.6s; a preheat actually leaving its backtrace position would move by tens of seconds). - `time:` is **not** compared across runs at all. Being a rounding of `lead`, it carries nothing the tolerance does not already cover, and comparing it across runs can only reproduce the flake. It is instead checked against its own entry's `lead` — a correct rounding keeps `|time - lead| <= 0.5`. That second point matters: simply tolerating `time:` numerically would have made the test blind to a real change, because drift and a wrong rounding both move it by 1. The self-consistency check keeps that coverage. I verified it by changing `(int) std::round(time_diffs[0])` to `(int) time_diffs[0]` in `GCodeProcessor::export_lines` — the test fails with `"time:" is not its entry's "lead" rounded to a whole second`, where a plain tolerance would have passed silently. Everything else is still compared exactly: all M104/M109 values, tool ids, block markers, ordering, entry count, and the annotation text including its trailing `s`. The other 138 entries remain byte-exact. No production code, no golden regeneration. The golden file and these helpers are used by this one test and nothing else, and the tolerance only widens, so Windows and macOS keep passing unchanged. A note is added to the golden's header so the next mismatch in those fields is not "fixed" by recapturing. ## How to verify Before, on Linux: ```bash git checkout main && ./build_linux.sh -t ctest --test-dir build/tests -R "Toolchange temperature commands are unchanged" --output-on-failure # fails at trace entry 29 ``` After: ```bash cmake --build build --config Release --target fff_print_tests ctest --test-dir build/tests --output-on-failure # 463/463 ``` --- .../wipe_tower_temperature_trace_main.txt | 5 + tests/fff_print/test_multifilament.cpp | 95 ++++++++++++++++--- 2 files changed, 85 insertions(+), 15 deletions(-) diff --git a/tests/data/wipe_tower_temperature_trace_main.txt b/tests/data/wipe_tower_temperature_trace_main.txt index b7453bdc93..f755008c26 100644 --- a/tests/data/wipe_tower_temperature_trace_main.txt +++ b/tests/data/wipe_tower_temperature_trace_main.txt @@ -2,6 +2,11 @@ # captured from the main branch at a10d9e77cf. Regeneration is described # at the test that reads this file: "Toolchange temperature commands are unchanged # when the wipe tower wait is off" in tests/fff_print/test_multifilament.cpp. +# +# The "time:" and "lead" values are toolchain-specific -- GCC, Clang and MSVC each produce +# slightly different estimates from an identical toolpath -- so they are compared with a +# tolerance, not exactly. Do not regenerate this file to resolve a mismatch in them: no single +# capture satisfies all three, and recapturing just moves the failure to other platforms. M104 S215 T0 ; set nozzle temperature M104 S215 T1 ; set nozzle temperature ; CP PRIMING START diff --git a/tests/fff_print/test_multifilament.cpp b/tests/fff_print/test_multifilament.cpp index 081c0fa2ba..484b7fb68a 100644 --- a/tests/fff_print/test_multifilament.cpp +++ b/tests/fff_print/test_multifilament.cpp @@ -17,6 +17,7 @@ #include #include #include +#include #include #include @@ -165,28 +166,82 @@ static std::vector temperature_trace(const std::string& gcode) return trace; } -// Splits a trace entry into its command text and the lead time appended after a tab, if any. -static std::pair> split_lead(const std::string& entry) +// "M104 S240 T0 ; preheat T0 time: 31slead 30.9s" carries the same quantity twice, and both +// vary by toolchain: the backtrace picks the first line at least preheat_time out, so a sub-tenth +// difference in the estimate selects a neighbouring move and "lead" steps by that move's duration. +// Tolerate "lead", still far below the tens of seconds a displaced preheat would shift it. Check +// "time:" against its own entry's "lead" instead of across runs -- being a rounding of it, that +// still catches a change in how it is derived without tracking the absolute estimate. +static constexpr double TRACE_TIME_TOLERANCE_S = 1.5; +static constexpr double TRACE_ROUNDING_SLACK_S = 0.05; // correct rounding keeps |time - lead| <= 0.5 + +struct TraceEntry { - const size_t tab = entry.find('\t'); - if (tab == std::string::npos) - return { entry, std::nullopt }; - const std::string tail = entry.substr(tab + 1); // "lead 30.2s" - return { entry.substr(0, tab), std::stod(tail.substr(tail.find(' ') + 1)) }; + std::string text; // timing values replaced by a placeholder + std::optional time_s; + std::optional lead_s; +}; + +static TraceEntry parse_trace_entry(const std::string& entry) +{ + TraceEntry out; + std::string text = entry; + + // Split off the tail only when it really is a "lead s", so an unexpected one still compares. + const size_t tab = text.find('\t'); + if (tab != std::string::npos) { + const std::string tail = text.substr(tab + 1); // "lead 30.2s" + const size_t sp = tail.find(' '); + if (sp != std::string::npos && sp + 1 < tail.size() + && std::isdigit(static_cast(tail[sp + 1]))) { + out.lead_s = std::stod(tail.substr(sp + 1)); + text.erase(tab); + } + } + + static constexpr std::string_view k_time = "time: "; + const size_t at = text.find(k_time); + // Require a digit first: a dots-only run would otherwise reach std::stod and throw. + if (at != std::string::npos && at + k_time.size() < text.size() + && std::isdigit(static_cast(text[at + k_time.size()]))) { + const size_t first = at + k_time.size(); + size_t last = first; + while (last < text.size() && (std::isdigit(static_cast(text[last])) || text[last] == '.')) + ++last; + out.time_s = std::stod(text.substr(first, last - first)); + text.replace(first, last - first, ""); // surrounding text, incl. the "s", still compared + } + + out.text = std::move(text); + return out; } -// Same command, and a lead time within half a second. The lead is an estimate summed over every -// move before it, so it drifts slightly with unrelated changes to travel or tower geometry; half a -// second is far below the tens of seconds a preheat leaving its backtrace position would shift it. +static bool timings_match(const std::optional& a, const std::optional& b) +{ + if (a.has_value() != b.has_value()) + return false; + return !a.has_value() || std::abs(*a - *b) <= TRACE_TIME_TOLERANCE_S; +} + +// "time:" must be its own entry's "lead" rounded to a whole second. +static bool time_is_rounded_lead(const TraceEntry& e) +{ + if (!e.time_s.has_value() || !e.lead_s.has_value()) + return true; // nothing to cross-check + return std::abs(*e.time_s - *e.lead_s) <= 0.5 + TRACE_ROUNDING_SLACK_S; +} + +// `a` is the slice under test, `b` the recorded golden. static bool trace_entries_match(const std::string& a, const std::string& b) { - const auto x = split_lead(a); - const auto y = split_lead(b); - if (x.first != y.first) + const auto x = parse_trace_entry(a); + const auto y = parse_trace_entry(b); + if (x.text != y.text) return false; - if (x.second.has_value() != y.second.has_value()) + // A field appearing or disappearing is a real change even though the values are tolerated. + if (x.time_s.has_value() != y.time_s.has_value()) return false; - return !x.second.has_value() || std::abs(*x.second - *y.second) <= 0.5; + return timings_match(x.lead_s, y.lead_s) && time_is_rounded_lead(x); } // Tool index = filament id - 1; brim and skirt follow the wall filament. @@ -617,6 +672,16 @@ TEST_CASE("Toolchange temperature commands are unchanged when the wipe tower wai } REQUIRE(!golden.empty()); + // Reported separately from the golden comparison below: it is a different failure. + for (size_t i = 0; i < trace.size(); ++i) { + const auto entry = parse_trace_entry(trace[i]); + if (time_is_rounded_lead(entry)) + continue; + INFO("at trace entry " << i + 1); + INFO(" " << trace[i]); + FAIL("\"time:\" is not its entry's \"lead\" rounded to a whole second"); + } + const size_t common = std::min(trace.size(), golden.size()); for (size_t i = 0; i < common; ++i) { if (trace_entries_match(trace[i], golden[i])) From 6d9a9eeb04fea66ac6adcaf1a588a10a8c478342 Mon Sep 17 00:00:00 2001 From: Surfoo Date: Fri, 7 Aug 2026 14:31:57 +0200 Subject: [PATCH 40/66] i18n(fr): improve French localization quality and consistency. (#15106) --- localization/i18n/fr/OrcaSlicer_fr.po | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/localization/i18n/fr/OrcaSlicer_fr.po b/localization/i18n/fr/OrcaSlicer_fr.po index 82f0239d0a..1257994f16 100644 --- a/localization/i18n/fr/OrcaSlicer_fr.po +++ b/localization/i18n/fr/OrcaSlicer_fr.po @@ -9283,22 +9283,22 @@ msgid "DEV host: api-dev.bambu-lab.com/v1" msgstr "Hôte DEV : api-dev.bambu-lab.com/v1" msgid "QA host: api-qa.bambu-lab.com/v1" -msgstr "Hôte AQ : api-qa.bambu-lab.com/v1" +msgstr "Hôte QA : api-qa.bambu-lab.com/v1" msgid "PRE host: api-pre.bambu-lab.com/v1" -msgstr "Hébergeur PRE : api-pre.bambu-lab.com/v1" +msgstr "Hôte PRE : api-pre.bambu-lab.com/v1" msgid "Product host" msgstr "Hôte du produit" msgid "Debug save button" -msgstr "bouton d'enregistrement de débogage" +msgstr "Bouton d'enregistrement de debugage" msgid "Save debug settings" -msgstr "enregistrer les paramètres de débogage" +msgstr "Enregistrer les paramètres de debugage" msgid "Debug settings have been saved successfully!" -msgstr "Les paramètres DEBUG ont été enregistrés avec succès !" +msgstr "Les paramètres de debug ont été enregistrés avec succès !" msgid "Cloud environment switched; please login again!" msgstr "L'environnement Cloud a changé, veuillez vous reconnecter !" From b3296fa1996cae595f478d027bad8e1d7f1951a5 Mon Sep 17 00:00:00 2001 From: Felix14_v2 <75726196+Felix14-v2@users.noreply.github.com> Date: Fri, 7 Aug 2026 18:03:53 +0300 Subject: [PATCH 41/66] Review AI changes in Russian localization (#15092) * Review AI changes * Part 2 * Part 3 * Part 4 God bless Ian Alexis * Part 5 * Final part! * Catches by Gemma This 6-minute check probably saved me a week * Tweak * Update OrcaSlicer_ru.po --- localization/i18n/ru/OrcaSlicer_ru.po | 1330 ++++++++++--------------- 1 file changed, 508 insertions(+), 822 deletions(-) diff --git a/localization/i18n/ru/OrcaSlicer_ru.po b/localization/i18n/ru/OrcaSlicer_ru.po index 607890b047..c2fbcb54be 100644 --- a/localization/i18n/ru/OrcaSlicer_ru.po +++ b/localization/i18n/ru/OrcaSlicer_ru.po @@ -27,15 +27,12 @@ msgstr "Основной экструдер" msgid "main extruder" msgstr "основной экструдер" -# AI Translated msgid "Auxiliary Extruder" msgstr "Вспомогательный экструдер" -# AI Translated msgid "Auxiliary extruder" msgstr "Вспомогательный экструдер" -# AI Translated msgid "auxiliary extruder" msgstr "вспомогательный экструдер" @@ -57,27 +54,21 @@ msgstr "Правый экструдер" msgid "right extruder" msgstr "правый экструдер" -# AI Translated msgid "Main Nozzle" msgstr "Основное сопло" -# AI Translated msgid "Main nozzle" msgstr "Основное сопло" -# AI Translated msgid "main nozzle" msgstr "основное сопло" -# AI Translated msgid "Auxiliary Nozzle" msgstr "Вспомогательное сопло" -# AI Translated msgid "Auxiliary nozzle" msgstr "Вспомогательное сопло" -# AI Translated msgid "auxiliary nozzle" msgstr "вспомогательное сопло" @@ -99,67 +90,51 @@ msgstr "Правый экструдер" msgid "right nozzle" msgstr "правого сопла" -# AI Translated msgid "Main Hotend" msgstr "Основной хотэнд" -# AI Translated msgid "Main hotend" msgstr "Основной хотэнд" -# AI Translated msgid "main hotend" msgstr "основной хотэнд" -# AI Translated msgid "Auxiliary Hotend" msgstr "Вспомогательный хотэнд" -# AI Translated msgid "Auxiliary hotend" msgstr "Вспомогательный хотэнд" -# AI Translated msgid "auxiliary hotend" msgstr "вспомогательный хотэнд" -# AI Translated msgid "Left Hotend" msgstr "Левый хотэнд" -# AI Translated msgid "Left hotend" msgstr "Левый хотэнд" -# AI Translated msgid "left hotend" msgstr "левый хотэнд" -# AI Translated msgid "Right Hotend" msgstr "Правый хотэнд" -# AI Translated msgid "Right hotend" msgstr "Правый хотэнд" -# AI Translated msgid "right hotend" msgstr "правый хотэнд" -# AI Translated msgid "main" msgstr "основной" -# AI Translated msgid "auxiliary" msgstr "вспомогательный" -# AI Translated msgid "Main" msgstr "Основной" -# AI Translated msgid "Auxiliary" msgstr "Вспомогательный" @@ -279,7 +254,7 @@ msgstr "Высокий расход" msgid "Standard" msgstr "Обычный" -# AI Translated +# На бамбувики просто "хотэнд ТПУ". Очевидно, машинный перевод. Оставляю оригинальное. msgid "TPU High Flow" msgstr "TPU High Flow" @@ -295,7 +270,6 @@ msgstr "Нержавеющая сталь" msgid "Tungsten Carbide" msgstr "Карбид вольфрама" -# AI Translated msgid "The toolhead and hotend rack may move. Please keep your hands away from the chamber." msgstr "Печатающая голова и стойка хотэндов могут смещаться. Держите руки подальше от камеры." @@ -350,15 +324,12 @@ msgstr "Версия:" msgid "Latest version" msgstr "Последняя версия" -# AI Translated msgid "Row A" msgstr "Ряд A" -# AI Translated msgid "Row B" -msgstr "Ряд B" +msgstr "Ряд Б" -# AI Translated msgid "Toolhead" msgstr "Печатающая голова" @@ -368,9 +339,8 @@ msgstr "Пусто" msgid "Error" msgstr "Ошибка" -# AI Translated msgid "Induction Hotend Rack" -msgstr "Индукционная стойка хотэндов" +msgstr "Стойка индукционных хотэндов" msgid "Hotends Info" msgstr "Информация о хотэндах" @@ -384,30 +354,25 @@ msgstr "Чтение " msgid "Please wait" msgstr "Подождите" -# AI Translated msgid "Reading" msgstr "Чтение" -# AI Translated msgid "Running..." msgstr "Выполнение..." -# AI Translated +# Ряд msgid "Raised" -msgstr "Поднято" +msgstr "Поднят" -# AI Translated msgid "The hotend is in an abnormal state and currently unavailable. Please go to 'Device -> Upgrade' to upgrade firmware." -msgstr "Хотэнд находится в нештатном состоянии и сейчас недоступен. Перейдите в «Устройство -> Обновление», чтобы обновить прошивку." +msgstr "Хотэнд находится в нештатном состоянии и сейчас недоступен. Перейдите в «Принтер» → «Обновление», чтобы обновить прошивку." -# AI Translated msgid "Abnormal Hotend" msgstr "Нештатное состояние хотэнда" msgid "Cancel" msgstr "Отмена" -# AI Translated msgid "Jump to the upgrade page" msgstr "Перейти на страницу обновления" @@ -417,9 +382,8 @@ msgstr "Обновить" msgid "Refreshing" msgstr "Обновление" -# AI Translated msgid "Hotend status abnormal, unavailable at present. Please upgrade the firmware and try again." -msgstr "Состояние хотэнда нештатное, сейчас недоступно. Обновите прошивку и повторите попытку." +msgstr "Хотэнд находится в нештатном состоянии и сейчас недоступен. Обновите прошивку и попробуйте ещё раз." msgid "SN" msgstr "Серийный номер" @@ -431,19 +395,16 @@ msgstr "Версия" msgid "Used Time: %s" msgstr "Время использования: %s" -# AI Translated +# Полагаю, речь об этом https://wiki.bambulab.com/ru/software/bambu-studio/filament-track-switch-dynamic-mapping msgid "Dynamic nozzles are allocated on the current plate. Picking hotend is not supported." msgstr "На текущем столе назначены динамические сопла. Выбор хотэнда не поддерживается." -# AI Translated msgid "Hotend Rack" msgstr "Стойка хотэндов" -# AI Translated msgid "ToolHead" msgstr "Печатающая голова" -# AI Translated msgid "Nozzle information needs to be read" msgstr "Необходимо считать информацию о сопле" @@ -948,7 +909,6 @@ msgstr "Снять выбор" msgid "Select all connectors" msgstr "Выбрать все соединения" -# AI Translated msgctxt "Cut tool" msgid "Cut" msgstr "Разрезать" @@ -1885,14 +1845,14 @@ msgid "" "Select 2 faces on objects and \n" " make objects assemble together." msgstr "" -"Выберите две грани на моделях и\n" -"соберите объекты вместе." +"Выберите две грани на моделях и соберите\n" +"объекты вместе." msgid "" "Select 2 points or circles on objects and \n" " specify distance between them." msgstr "" -"Выберите 2 точки или окружности на моделях \n" +"Выберите 2 точки или окружности на моделях\n" "и укажите расстояние между ними." msgid "Face" @@ -1954,7 +1914,6 @@ msgstr "Запуск режима измерения" msgid "Leaving Measure gizmo" msgstr "Выход из режима измерения" -# AI Translated msgctxt "Assembly tool" msgid "Assemble" msgstr "Собрать" @@ -1968,8 +1927,9 @@ msgstr "Выберите минимум две модели." msgid "(Moving)" msgstr "(подвижная)" +# Пробел в конце, чтобы не срезалась часть msgid "Point and point assembly" -msgstr "Сборка по точкам" +msgstr "Сборка по точкам " # Зачем здесь "внимание"? Это просто руководство к действию msgid "Warning: please select two different meshes." @@ -1992,8 +1952,9 @@ msgstr "" "для получения возможности поднимать их\n" "над столом." +# Пробел в конце, чтобы не срезалась часть msgid "Face and face assembly" -msgstr "Сборка по граням" +msgstr "Сборка по граням " msgid "Entering Assembly gizmo" msgstr "Запуск режима сборки" @@ -2133,7 +2094,7 @@ msgstr "" "\n" "Для автоматического переноса существующих профилей войдите в Orca Cloud. Посетите нашу Вики, чтобы узнать подробнее о ручном переносе, хранении и синхронизации профилей.\n" "\n" -"Можно спокойно игнорировать это сообщение, если вы ранее не использовали Bambu Cloud для синхронизации." +"Можно спокойно игнорировать это сообщение, если вы ранее не использовали Bambu Cloud для синхронизации. " msgid "Profile syncing change" msgstr "Изменения в синхронизации профилей" @@ -2214,7 +2175,6 @@ msgstr "Загрузка плагинов" msgid "Plugin %s is no longer available." msgstr "Плагин «%s» больше недоступен." -# AI Translated #, c-format, boost-format msgid "Plugin %s access is unauthorized." msgstr "Доступ к плагину %s не авторизован." @@ -3661,10 +3621,9 @@ msgid "Left(Aux)" msgstr "Левый (вспом.)" # FAN_HEAT_BREAK_0_IDX - охлаждение термобарьера в первом хотэнде -# AI Translated msgctxt "Hotend Heat Breaker Fan" msgid "Hotend" -msgstr "Хотэнд" +msgstr "1 термобарьер" msgid "Parts" msgstr "Основной" @@ -3713,29 +3672,23 @@ msgstr "Подтверждение экструзии" msgid "Check filament location" msgstr "Проверка расположения прутка" -# AI Translated msgid "Switch" msgstr "Переключить" -# AI Translated msgid "hotend" msgstr "хотэнд" -# AI Translated msgid "Wait for AMS cooling" msgstr "Дождитесь охлаждения AMS" -# AI Translated msgid "Switch current filament at Filament Track Switch" msgstr "Переключить текущий материал на Filament Track Switch" -# AI Translated msgid "Pull back current filament at Filament Track Switch" msgstr "Втянуть текущий материал на Filament Track Switch" -# AI Translated msgid "Switch track at Filament Track Switch" -msgstr "Переключить дорожку на Filament Track Switch" +msgstr "Переключить подачу на Filament Track Switch" msgid "The maximum temperature cannot exceed " msgstr "Температура не должна превышать " @@ -3743,45 +3696,37 @@ msgstr "Температура не должна превышать " msgid "The minmum temperature should not be less than " msgstr "Температура не должна быть ниже " -# AI Translated msgid "Type to filter..." -msgstr "Введите текст для фильтрации..." +msgstr "Поиск..." # в Сохранение толщины вертикальной оболочки. # было Везде, но из-за условия совместимости изменено.... как тогда быть? msgid "All" msgstr "Все" -# AI Translated msgid "No selected items..." -msgstr "Нет выбранных элементов..." +msgstr "Ничего не выбрано..." -# AI Translated msgid "All items selected..." -msgstr "Выбраны все элементы..." +msgstr "Выбраны все..." -# AI Translated msgid "No matching items..." -msgstr "Нет подходящих элементов..." +msgstr "Ничего не найдено..." msgid "Deselect All" msgstr "Снять выбор со всего" -# AI Translated msgid "Select visible" msgstr "Выбрать видимые" -# AI Translated msgid "Deselect visible" msgstr "Снять выбор с видимых" -# AI Translated msgid "Filter selected" -msgstr "Отфильтровать выбранные" +msgstr "Фильтровать выбранные" -# AI Translated msgid "Filter nonSelected" -msgstr "Отфильтровать невыбранные" +msgstr "Фильтровать невыбранные" msgid "Simple settings" msgstr "Простые настройки" @@ -3799,18 +3744,15 @@ msgstr "Режим разработчика" msgid "Launch troubleshoot center" msgstr "Запустить экран отладки" -# AI Translated msgid "Set nozzle count" msgstr "Задать количество сопел" -# AI Translated msgid "Please set nozzle count" -msgstr "Задайте количество сопел" +msgstr "Укажите количество сопел" msgid "Error: Can not set both nozzle count to zero." msgstr "Ошибка: оба значения не могут быть нулевыми." -# AI Translated #, c-format, boost-format msgid "Error: Nozzle count can not exceed %d." msgstr "Ошибка: количество сопел не может превышать %d." @@ -3821,45 +3763,36 @@ msgstr "Подтвердить" msgid "Extruder" msgstr "Экструдер" -# AI Translated msgid "Nozzle Selection" msgstr "Выбор сопла" -# AI Translated msgid "Available Nozzles" msgstr "Доступные сопла" msgid "Nozzle Info" msgstr "Информация о сопле" -# AI Translated msgid "Sync Nozzle status" msgstr "Синхронизировать состояние сопла" -# AI Translated msgid "Caution: Mixing nozzle diameters in one print is not supported. If the selected size is only on one extruder, single-extruder printing will be enforced." -msgstr "Внимание: смешивание диаметров сопел в одной печати не поддерживается. Если выбранный размер есть только на одном экструдере, будет принудительно применена печать одним экструдером." +msgstr "Внимание: смешивание диаметров сопел в одной печати не поддерживается. Печать будет производиться одним соплом, если выбранный диаметр есть только на одном экструдере." -# AI Translated #, c-format, boost-format msgid "Refresh %d/%d..." -msgstr "Обновление %d/%d..." +msgstr "Обновить %d/%d..." -# AI Translated msgid "Unknown nozzle detected. Refresh to update info (unrefreshed nozzles will be excluded during slicing). Verify nozzle diameter & flow rate against displayed values." -msgstr "Обнаружено неизвестное сопло. Обновите, чтобы получить сведения (необновлённые сопла будут исключены при нарезке). Сверьте диаметр сопла и расход с отображаемыми значениями." +msgstr "Обнаружено неизвестное сопло. Обновите для получения сведений (неизвестные сопла будут исключены при нарезке). Сверьте диаметр сопла и расход с отображаемыми значениями." -# AI Translated msgid "Unknown nozzle detected. Refresh to update (unrefreshed nozzles will be skipped in slicing)." -msgstr "Обнаружено неизвестное сопло. Обновите для получения сведений (необновлённые сопла будут пропущены при нарезке)." +msgstr "Обнаружено неизвестное сопло. Обновите для получения сведений (неизвестные сопла будут пропущены при нарезке)." -# AI Translated msgid "Please confirm whether the required nozzle diameter and flow rate match the currently displayed values." msgstr "Убедитесь, что требуемый диаметр сопла и расход соответствуют отображаемым значениям." -# AI Translated msgid "Your printer has different nozzles installed. Please select a nozzle for this print." -msgstr "На вашем принтере установлены разные сопла. Выберите сопло для этой печати." +msgstr "В принтере установлены разные сопла. Выберите сопло для этой печати." msgid "Ignore" msgstr "Игнорировать" @@ -3888,15 +3821,14 @@ msgstr "Расстановка..." msgid "Arranging" msgstr "Расстановка" -# AI Translated msgid "Arranging " -msgstr "Расстановка " +msgstr "Расстановка: " msgid "Arranging canceled." msgstr "Расстановка отменена." msgid "Arranging complete, but some items were not able to be arranged. Reduce spacing and try again." -msgstr "Расстановка завершена, но не всё удалось уместить на столе. Уменьшите отступ расстановки и повторите попытку." +msgstr "Расстановка завершена, но не всё удалось уместить на столе. Уменьшите отступ и повторите попытку." msgid "Arranging done." msgstr "Расстановка выполнена." @@ -4346,8 +4278,8 @@ msgid "" "Lower half area: The filament from original project will be used when unmapped.\n" "And you can click it to modify" msgstr "" -"Верхняя половина: Исходный\n" -"Нижняя половина: При отсутствии назначения будет использоваться филамент из исходного проекта.\n" +"Сверху: оригинальный материал\n" +"Снизу: материал исходного проекта (если не назначен).\n" "Нажмите для изменения" msgid "" @@ -4357,7 +4289,7 @@ msgid "" msgstr "" "Сверху: оригинальный материал\n" "Снизу: материал из AMS\n" -"Нажмите, чтобы изменить" +"Нажмите для изменения" msgid "" "Upper half area: Original\n" @@ -4371,45 +4303,41 @@ msgid "AMS Slots" msgstr "Слоты AMS" msgid "Please select from the following filaments" -msgstr "Пожалуйста, выберите из следующих филаментов" +msgstr "Выберите из следующих материалов" -# AI Translated #, c-format, boost-format msgid "Select filament that installed to the %s" msgstr "Выберите материал, установленный в %s" msgid "Left AMS" -msgstr "Левый AMS" +msgstr "Левая AMS" +# Оверюзиниг: внешние мосты/внешняя катушка msgid "External" msgstr "Внешние" msgid "Reset current filament mapping" -msgstr "Сбросить текущее назначение филамента" +msgstr "Сбросить переназначенные материалы" msgid "Right AMS" -msgstr "Правый AMS" +msgstr "Правая AMS" #, c-format, boost-format msgid "Printing with the current nozzle may produce an extra %0.2f g of waste." msgstr "Печать текущим соплом может привести к дополнительным затратам %0.2f г материала." -# AI Translated #, c-format, boost-format msgid "Tips: the filament type(%s) does not match with the filament type(%s) in the slicing file. If you want to use this slot, you can install %s instead of %s and change slot information on the 'Device' page." -msgstr "Совет: тип материала (%s) не совпадает с типом материала (%s) в файле нарезки. Если вы хотите использовать этот слот, установите %s вместо %s и измените информацию о слоте на странице «Устройство»." +msgstr "Совет: тип материала (%s) не совпадает с типом материала (%s) в файле нарезки. Если вы хотите использовать этот слот, установите %s вместо %s и измените информацию о слоте на странице «Принтер»." -# AI Translated #, c-format, boost-format msgid "Cannot select: the filament type(%s) does not match with the filament type(%s) in the slicing file. If you want to use this slot, you can install %s instead of %s and change slot information on the 'Device' page." -msgstr "Невозможно выбрать: тип материала (%s) не совпадает с типом материала (%s) в файле нарезки. Если вы хотите использовать этот слот, установите %s вместо %s и измените информацию о слоте на странице «Устройство»." +msgstr "Невозможно выбрать: тип материала (%s) не совпадает с типом материала (%s) в файле нарезки. Если вы хотите использовать этот слот, установите %s вместо %s и измените информацию о слоте на странице «Принтер»." -# AI Translated #, c-format, boost-format msgid "Cannot select: the slot is empty or undefined. If you want to use this slot, you can install %s and change slot information on the 'Device' page." -msgstr "Невозможно выбрать: слот пуст или не определён. Если вы хотите использовать этот слот, установите %s и измените информацию о слоте на странице «Устройство»." +msgstr "Невозможно выбрать: слот пуст или не определён. Если вы хотите использовать этот слот, установите %s и измените информацию о слоте на странице «Принтер»." -# AI Translated msgid "Cannot select: No filament loaded in current slot." msgstr "Невозможно выбрать: в текущий слот не загружен материал." @@ -4451,12 +4379,10 @@ msgstr "Использовать для печати материал с вне msgid "Print with filament in AMS" msgstr "Печать материалом из AMS" -# AI Translated msgctxt "Nozzle position" msgid "Left" msgstr "Левое" -# AI Translated msgctxt "Nozzle position" msgid "Right" msgstr "Правое" @@ -4526,7 +4452,7 @@ msgid "Update remaining capacity" msgstr "Обновлять оставшуюся ёмкость катушки" msgid "AMS will attempt to estimate the remaining capacity of the Bambu Lab filaments." -msgstr "AMS попытается оценить оставшееся количество филаментов Bambu Lab." +msgstr "AMS будет пытаться оценивать оставшееся количество материалов Bambu Lab." msgid "AMS filament backup" msgstr "Резервирование материала AMS" @@ -4808,9 +4734,9 @@ msgid "" "\n" "The first layer height will be reset to 0.2." msgstr "" -"Нулевая высота начального слоя недопустима.\n" +"Нулевая высота первого слоя недопустима.\n" "\n" -"Высота первого слоя будет сброшена до 0.2." +"Значение будет сброшено до 0,2." # Оба первых предложения легко объединяются в одно. msgid "" @@ -5050,9 +4976,9 @@ msgstr "Измерение точности движений" msgid "Enhancing motion precision" msgstr "Улучшение точности движений" -# ??? Измерение точности позиционирования +# Относится к motion accuracy points – точкам фактического положения головы на сетке с эталонными координатами msgid "Measure motion accuracy" -msgstr "Измерение точности перемещения" +msgstr "Измерение точности позиционирования" msgid "Nozzle offset calibration" msgstr "Калибровка смещения сопла" @@ -5061,30 +4987,30 @@ msgid "High temperature auto bed leveling" msgstr "Измерение кривизны разогретого стола" msgid "Auto Check: Quick Release Lever" -msgstr "Автопроверка: быстросъёмный рычаг" +msgstr "Проверка: быстросъёмный модуль" msgid "Auto Check: Door and Upper Cover" -msgstr "Автопроверка: дверца и верхняя крышка" +msgstr "Проверка: дверца и верхняя крышка" msgid "Laser Calibration" msgstr "Калибровка лазера" msgid "Auto Check: Platform" -msgstr "Автопроверка: платформа" +msgstr "Проверка: стол" -# ??? Подтверждение положения камеры msgid "Confirming BirdsEye Camera location" -msgstr "Подтверждение расположения камеры BirdsEye" +msgstr "Подтверждение положения камеры" # ??? Калибровка ракурса камеры msgid "Calibrating BirdsEye Camera" msgstr "Калибровка камеры BirdsEye" +# Нет здесь никакого выравнивания, у бамбуков даже крутилок нет. Это просто снятие карты высот. msgid "Auto bed leveling -phase 1" -msgstr "Автоматическое выравнивание стола — фаза 1" +msgstr "Измерение кривизны стола — фаза 1" msgid "Auto bed leveling -phase 2" -msgstr "Автоматическое выравнивание стола — фаза 2" +msgstr "Измерение кривизны стола — фаза 2" msgid "Heating chamber" msgstr "Нагрев камеры" @@ -5096,19 +5022,22 @@ msgid "Printing calibration lines" msgstr "Печать калибровочных линий" msgid "Auto Check: Material" -msgstr "Автопроверка: материал" +msgstr "Проверка: материал" +# https://wiki.bambulab.com/ru/h2/troubleshooting/hmscode/0C00_0300_0002_0014#:~:text=калибровку%20камеры%20реального%20времени,-: msgid "Live View Camera Calibration" -msgstr "Калибровка камеры Live View" +msgstr "Калибровка камеры реального времени" msgid "Waiting for heatbed to reach target temperature" msgstr "Ожидание нагрева стола" +# у H2D система определяет, где лежит обрезок листа. Но может также относиться и к 3D-гравировке, где определяется расстояние до поверхности. msgid "Auto Check: Material Position" -msgstr "Автопроверка: положение материала" +msgstr "Проверка: положение заготовки" +# https://wiki.bambulab.com/ru/h2/troubleshooting/hmscode/0500_0400_0002_0037 msgid "Cutting Module Offset Calibration" -msgstr "Калибровка смещения режущего модуля" +msgstr "Калибровка смещения модуля резки" msgid "Measuring Surface" msgstr "Измерение поверхности" @@ -5141,7 +5070,7 @@ msgid "Timelapse is not supported while the storage is readonly." msgstr "Запись таймлапсов невозможна на защищённый от записи накопитель." msgid "To ensure your safety, certain processing tasks (such as laser) can only be resumed on printer." -msgstr "В целях безопасности некоторые задачи обработки (например, лазерная) могут быть возобновлены только на принтере." +msgstr "В целях безопасности некоторые виды обработки (например, лазерная) можно возобновить только вручную на принтере." #, c-format, boost-format msgid "The chamber temperature is too high, which may cause the filament to soften. Please wait until the chamber temperature drops below %d℃. You may open the front door or enable fans to cool down." @@ -5178,7 +5107,6 @@ msgstr "Не удалось сгенерировать калибровочны msgid "Calibration error" msgstr "Ошибка калибровки" -# AI Translated msgid "Network unavailable" msgstr "Сеть недоступна" @@ -5194,9 +5122,9 @@ msgstr "Продолжить (проблема решена)" msgid "Stop Printing" msgstr "Остановить печать" -# ??? Перейти к помощнику, Помощник по проверке +# "Ассистент" плохо ложится в "обратитесь к ассистенту", когда речь о руководстве. msgid "Check Assistant" -msgstr "Ассистент проверки" +msgstr "Помощник проверки" msgid "Filament Extruded, Continue" msgstr "Пруток выдавлен, продолжить" @@ -5217,9 +5145,9 @@ msgstr "Просмотр трансляции" msgid "No Reminder Next Time" msgstr "Больше не спрашивать" -# AI Translated +# Перепроверить msgid "Recheck" -msgstr "Проверить снова" +msgstr "Перепроверить" msgid "Ignore. Don't Remind Next Time" msgstr "Игнорировать и больше не спрашивать" @@ -5231,7 +5159,7 @@ msgid "Problem Solved and Resume" msgstr "Проблема решена, продолжить" msgid "Got it, Turn off the Fire Alarm." -msgstr "Понятно, выключить пожарную сигнализацию." +msgstr "Ясно, выключить пожарную сигнализацию." msgid "Retry (problem solved)" msgstr "Повторить (проблема решена)" @@ -5242,15 +5170,12 @@ msgstr "Остановить сушку" msgid "Proceed" msgstr "Продолжить" -# AI Translated msgid "Abort" msgstr "Прервать" -# AI Translated msgid "Disable Purification for This Print" msgstr "Отключить очистку воздуха для этой печати" -# AI Translated msgid "Don't Remind Me" msgstr "Не напоминать" @@ -5263,7 +5188,6 @@ msgstr "Продолжить" msgid "Unknown error." msgstr "Неизвестная ошибка." -# AI Translated msgid "Loading ..." msgstr "Загрузка ..." @@ -5344,8 +5268,9 @@ msgstr "слой(-я)" msgid "Range" msgstr "Диапазон" +# Подставляется в "По умолчанию" в подсказке к параметрам. Не уверен, нужно ли здесь "строка", может просто "пусто"? msgid "Empty string" -msgstr "Пустая строка" +msgstr "пустая строка" msgid "Value is out of range." msgstr "Введённое значение вне диапазона." @@ -5731,7 +5656,7 @@ msgid "Fan speed (%)" msgstr "Скорость вентилятора (%)" msgid "Temperature (℃)" -msgstr "Температура (°C)" +msgstr "Температура (℃)" msgid "Volumetric flow rate (mm³/s)" msgstr "Объёмный расход (мм³/с)" @@ -5815,9 +5740,8 @@ msgid "Adaptive" msgstr "Адаптировать" msgid "Quality / Speed" -msgstr "Качество/Скорость" +msgstr "Качество/скорость" -# AI Translated msgctxt "Mesh action" msgid "Smooth" msgstr "Сгладить" @@ -5919,7 +5843,6 @@ msgstr "Избегать зону калибровки экструзии" msgid "Align to Y axis" msgstr "Выравнивать по оси Y" -# AI Translated msgctxt "Camera View" msgid "Front" msgstr "Спереди" @@ -5928,13 +5851,11 @@ msgctxt "Camera View" msgid "Back" msgstr "Сзади" -# AI Translated #. TRN To be shown in the main menu View->Top msgctxt "Camera View" msgid "Top" msgstr "Сверху" -# AI Translated #. TRN To be shown in the main menu View->Bottom msgctxt "Camera View" msgid "Bottom" @@ -6007,7 +5928,7 @@ msgstr "Назад" # 2026). Похоже, это внутреннее название кнопки с панелью управления визуалом # пространства моделей. msgid "Canvas Toolbar" -msgstr "Панель инструментов холста" +msgstr "Панель инструментов рабочей области" # Тут баг с переносом строк, каждое слово переносится. Чем короче – тем лучше. msgid "Fit camera to scene or selected object." @@ -6138,7 +6059,7 @@ msgid "PLA and PETG filaments detected in the mixture. Adjust parameters accordi msgstr "Обнаружено совместное использование PLA и PETG. Для повышения качества рекомендуется настроить печать в соответствии с" msgid "The prime tower extends beyond the plate boundary." -msgstr "Башня очистки выходит за пределы области печати." +msgstr "Черновая башня выходит за пределы области печати." # После строки подставляется кнопка настройки msgid "Partial flushing volume set to 0. Multi-color printing may cause color mixing in models. Please readjust flushing settings." @@ -6231,15 +6152,16 @@ msgid "" "You can find it in \"Settings > Network > Access code\"\n" "on the printer, as shown in the figure:" msgstr "" -"Вы можете найти его на принтере в разделе \n" -"Настройки > Сеть > Код подключения, как показано на рисунке:" +"Его можно найти на принтере в разделе\n" +"«Настройки» > «Сеть» > «Код подключения», как показано на рисунке:" msgid "" "You can find it in \"Setting > Setting > LAN only > Access Code\"\n" "on the printer, as shown in the figure:" msgstr "" -"Вы можете найти его в «Настройки > Настройки > Только LAN > Код доступа»\n" -"на принтере, как показано на рисунке:" +"Его можно найти на принтере в разделе\n" +"«Настройки» > «Настройки» > «Только LAN» > «Код доступа»,\n" +"как показано на рисунке:" msgid "Invalid input" msgstr "Неверный ввод" @@ -6283,7 +6205,7 @@ msgid "No" msgstr "Нет" msgid "will be closed before creating a new model. Do you want to continue?" -msgstr "будет закрыт перед созданием новой модели. Продолжить?" +msgstr "будет закрыт перед созданием нового проекта. Продолжить?" # Возможно, имеет смысл убрать тут "стол". Подавляющее большинство проектов – # это размещение моделей и их печать на одном столе, поэтому намёк на работу с @@ -6372,7 +6294,6 @@ msgstr "Вид снизу" msgid "Front View" msgstr "Вид спереди" -# AI Translated msgctxt "Camera View" msgid "Rear" msgstr "Сзади" @@ -6589,7 +6510,6 @@ msgstr "Отображение контура вокруг выбранных м msgid "Preferences" msgstr "Настройки" -# AI Translated msgctxt "Menu" msgid "Edit" msgstr "Правка" @@ -7009,7 +6929,7 @@ msgstr "" "Если накопитель не определяется, попробуйте отформатировать его." msgid "The firmware version of the printer is too low. Please update the firmware and try again." -msgstr "Версия прошивки принтера слишком старая. Пожалуйста, обновите прошивку и попробуйте снова." +msgstr "Слишком старая версия прошивки принтера. Пожалуйста, обновите прошивку и попробуйте снова." msgid "The file already exists, do you want to replace it?" msgstr "Файл уже существует, заменить?" @@ -7217,7 +7137,6 @@ msgstr "Настройки печати" msgid "Safety Options" msgstr "Настройки защиты" -# AI Translated msgid "Hotends" msgstr "Хотэнды" @@ -7254,11 +7173,9 @@ msgstr "Во время паузы смена материала поддерж msgid "Current extruder is busy changing filament." msgstr "В экструдере производится смена материала." -# AI Translated msgid "\"Load\" or \"Unload\" is not supported for external spool while using Filament Track Switch." msgstr "«Загрузка» и «Выгрузка» не поддерживаются для внешней катушки при использовании Filament Track Switch." -# AI Translated msgid "The Filament Track Switch has not been setup. Please setup on printer." msgstr "Filament Track Switch не настроен. Выполните настройку на принтере." @@ -7268,10 +7185,9 @@ msgstr "Слот уже занят." msgid "The selected slot is empty." msgstr "Выбранный слот пуст." -# Так и не нашёл, что это за 2D-режим такой. Выводится в пояснении к -# отключённой функции. +# Так и не нашёл, что это за 2D-режим такой. Выводится в пояснении к отключённой кнопке калибровки. Вероятно, блокировка калибровок печати у H2D при работе с лазерной (и не только) резкой msgid "Printer 2D mode does not support 3D calibration" -msgstr "2D-режим принтера не поддерживает 3D-калибровку" +msgstr "3D-калиброка недоступна в 2D-режиме" msgid "Downloading..." msgstr "Загрузка..." @@ -7298,7 +7214,7 @@ msgid "Chamber temperature cannot be changed in cooling mode while printing." msgstr "Температуру камеры нельзя изменить при печати в режиме «Охлаждение»." msgid "If the chamber temperature exceeds 40℃, the system will automatically switch to heating mode. Please confirm whether to switch." -msgstr "Если температура камеры превысит 40℃, система автоматически переключится в режим нагрева. Подтвердите переключение." +msgstr "Если температура камеры превышает 40℃, система автоматически переключится в режим нагрева. Подтвердите переключение." msgid "Please select an AMS slot before calibration" msgstr "Пожалуйста, выберите слот AMS перед калибровкой" @@ -7440,6 +7356,7 @@ msgctxt "Firmware" msgid "Update" msgstr "Обновление" +# https://wiki.bambulab.com/ru/hms/home msgid "Assistant(HMS)" msgstr "Помощник (HMS)" @@ -7653,7 +7570,7 @@ msgid "Serious warning:" msgstr "Серьёзное предупреждение:" msgid " (Repair)" -msgstr " (Восстановить)" +msgstr "(Восстановить)" msgid " Click here to install it." msgstr " Нажмите здесь, чтобы установить." @@ -7701,33 +7618,27 @@ msgctxt "Layers" msgid "Bottom" msgstr "Снизу" -# AI Translated msgid "Plugin Selection" -msgstr "Выбор плагина" +msgstr "Выбор плагинов" -# AI Translated msgid "" "No plugins capabilities available for this type.\n" "Enable or install some to use." msgstr "" -"Для этого типа нет доступных возможностей плагинов.\n" +"Плагины с требуемым функционалом отсутствуют для этого типа.\n" "Включите или установите их для использования." -# AI Translated msgid "There is stringing-prone filament in the current print job. Enabling nozzle clumping detection now may degrade print quality. Are you sure you want to enable it?" -msgstr "В текущем задании печати есть материал, склонный к образованию волос. Включение обнаружения налипания на сопло сейчас может ухудшить качество печати. Вы уверены, что хотите включить его?" +msgstr "В текущем проекте есть материал, склонный к образованию паутины. Работа проверки налипаний на сопле сейчас может ухудшить качество печати. Вы действительно хотите включить её?" -# AI Translated msgid "Enable Nozzle Clumping Detection" msgstr "Включить обнаружение налипания на сопло" -# AI Translated msgid "When enabled, the printer will automatically capture photos of printed parts and upload them to the cloud. Would you like to enable this option?" -msgstr "Когда включено, принтер будет автоматически делать фотографии печатаемых деталей и загружать их в облако. Хотите включить эту опцию?" +msgstr "Принтер будет автоматически делать фотографии печатаемых деталей и загружать их в облако. Включить эту настройку?" -# AI Translated msgid "Confirm Enable Print Status Snapshot" -msgstr "Подтвердите включение снимков состояния печати" +msgstr "Подтверждение активации снимков состояния печати" msgid "Enable detection of build plate position" msgstr "Определение положения покрытия" @@ -7741,28 +7652,23 @@ msgstr "Обнаружение покрытия стола" msgid "Identifies the type and position of the build plate on the heatbed. Pausing printing if a mismatch is detected." msgstr "Определение типа и положения покрытия стола. В случае обнаружения смещения печать приостанавливается." -# AI Translated msgid "Purifies the chamber air as the print finishes, based on the selected mode." msgstr "Очищает воздух в камере по завершении печати в соответствии с выбранным режимом." -# AI Translated msgid "Purifies the chamber air through internal circulation as each print finishes." msgstr "Очищает воздух в камере за счёт внутренней циркуляции по завершении каждой печати." -# AI Translated msgid "Automatically match the corresponding switch strategy for leak-prone filaments (disable blob detection) and regular filaments (enable blob detection)." -msgstr "Автоматически подбирает соответствующую стратегию переключения для склонных к вытеканию материалов (отключает обнаружение налипаний) и обычных материалов (включает обнаружение налипаний)." +msgstr "Автоматически подбирает соответствующую стратегию для склонных к подтёкам материалов (отключает обнаружение налипаний) и обычных материалов (включает обнаружение налипаний)." -# AI Translated msgid "Detect whether the nozzle is wrapped by filament or other foreign matter." -msgstr "Определяет, обмотано ли сопло материалом или иными посторонними частицами." +msgstr "Определяет налипший на сопло пластик или иные объекты." -# AI Translated msgid "After disabling, nozzle wrapping cannot be detected, which may lead to print failure or nozzle damage." -msgstr "После отключения обмотку сопла нельзя будет обнаружить, что может привести к сбою печати или повреждению сопла." +msgstr "После отключения налипший пластик на сопле нельзя будет обнаружить, что может привести к сбою печати или повреждению сопла." msgid "AI Detections" -msgstr "ИИ-обнаружение" +msgstr "ИИ-мониторинг" msgid "Printer will send assistant message or pause printing if any of the following problem is detected." msgstr "Принтер отправит сообщение помощника или приостановит печать, если обнаружит одну из следующих проблем." @@ -7774,27 +7680,27 @@ msgstr "Контроль печати с помощью ИИ" msgid "Pausing Sensitivity:" msgstr "Чувствительность:" +# Печать воздухом/в воздухе – другой частный случай при перехлёсте прутка или заторе msgid "Spaghetti Detection" -msgstr "Обнаружение «спагетти»" +msgstr "Обнаружение слетевших моделей" msgid "Detect spaghetti failures (scattered lose filament)." -msgstr "Обнаружение дефектов типа «спагетти» (разбросанная нить)." +msgstr "Обнаружение «спагетти» при печати в воздухе." msgid "Purge Chute Pile-Up Detection" -msgstr "Обнаружение скопления в лотке очистки" +msgstr "Обнаружение заполнения лотка прочистки" msgid "Monitor if the waste is piled up in the purge chute." -msgstr "Контроль скопления отходов в лотке очистки." +msgstr "Контроль скопления отходов в лотке прочистки." -# ???протечки, засорения msgid "Nozzle Clumping Detection" msgstr "Обнаружение пластика на сопле" msgid "Check if the nozzle is clumping by filaments or other foreign objects." -msgstr "Определение налипшего на сопле пластика или иных объектов." +msgstr "Определение налипшего на сопло пластика или иных объектов." msgid "Detects air printing caused by nozzle clogging or filament grinding." -msgstr "Определение холостой печати из-за затора или перетирания прутка." +msgstr "Определение холостой печати из-за затора или перехлёста/перетирания прутка." msgid "First Layer Inspection" msgstr "Проверка первого слоя" @@ -7805,9 +7711,8 @@ msgstr "Автовосстановление после смещения сло msgid "Store Sent Files on External Storage" msgstr "Сохранять файлы печати на внешнем накопителе" -# AI Translated msgid "Save the printing files sent from the slicer and other apps on External Storage" -msgstr "Сохранять файлы печати, отправленные из слайсера и других приложений, на внешнем накопителе" +msgstr "Сохранять на внешнем накопителе файлы печати, отправленные из слайсера и других приложений" msgid "Allow Prompt Sound" msgstr "Разрешить звуковые уведомления" @@ -7818,41 +7723,32 @@ msgstr "Обнаружение запутывания прутка" msgid "Check if the nozzle is clumping by filament or other foreign objects." msgstr "Обнаружение скапливания на сопле материала в результате засорения/протечки сопла или других причин." -# AI Translated msgid "Purify Air at Print End" msgstr "Очищать воздух по завершении печати" -# AI Translated msgid "Internal Circulation" msgstr "Внутренняя циркуляция" -# AI Translated msgid "Alignment Detection" msgstr "Обнаружение смещения" -# AI Translated msgid "Pauses printing when build plate misalignment is detected." msgstr "Приостанавливает печать при обнаружении смещения стола." -# AI Translated msgid "Foreign Object Detection" msgstr "Обнаружение посторонних предметов" -# AI Translated msgid "Checks for any objects on the build plate at the start of a print to avoid collisions." msgstr "Проверяет наличие любых предметов на столе в начале печати во избежание столкновений." -# AI Translated msgid "Printed Part Displacement Detection" msgstr "Обнаружение смещения печатаемой детали" -# AI Translated msgid "Monitors the printed part during printing and alerts immediately if it shifts or collapses." -msgstr "Отслеживает печатаемую деталь во время печати и немедленно предупреждает, если она сместилась или обрушилась." +msgstr "Отслеживает положение детали во время печати и немедленно предупреждает, если она сместилась или обрушилась." -# AI Translated msgid "Checks if the nozzle is clumping by filament or other foreign objects." -msgstr "Проверяет, не залипло ли сопло материалом или иными посторонними предметами." +msgstr "Проверяет присутствие пластика или инородных объектов на сопле." msgid "On" msgstr "Вкл" @@ -7866,13 +7762,11 @@ msgstr "Уведомление" msgid "Pause printing" msgstr "Пауза печати" -# AI Translated msgid "Print Status Snapshot" msgstr "Снимок состояния печати" -# AI Translated msgid "Automatically capture and upload print photos, showing defects during printing and the final result for remote viewing." -msgstr "Автоматически делает и загружает фотографии печати, показывая дефекты во время печати и итоговый результат для удалённого просмотра." +msgstr "Автоматически снимает и загружает в облако фотографии печати, показывая дефекты во время печати и итоговый результат для удалённого просмотра." msgctxt "Nozzle Type" msgid "Type" @@ -7887,7 +7781,7 @@ msgid "Flow" msgstr "Расход" msgid "Please change the nozzle settings on the printer." -msgstr "Пожалуйста, измените настройки сопла на принтере." +msgstr "Измените настройки сопла на принтере." msgid "Brass" msgstr "Латунь" @@ -7895,7 +7789,6 @@ msgstr "Латунь" msgid "High flow" msgstr "Высокий расход" -# AI Translated msgid "TPU High flow" msgstr "TPU High flow" @@ -7918,9 +7811,8 @@ msgstr "Общие" msgid "Objects" msgstr "Модели" -# AI Translated msgid "Cycle settings visibility" -msgstr "Переключать видимость настроек" +msgstr "Переключить видимость настроек" msgid "Compare presets" msgstr "Сравнить профили" @@ -8033,11 +7925,9 @@ msgstr "Переключение диаметра" msgid "Configuration incompatible" msgstr "Несовместимый профиль" -# AI Translated msgid "Filament switcher detected. All AMS filaments are now available for both extruders. The slicer will auto-assign for optimal printing." -msgstr "Обнаружен переключатель материалов. Все материалы AMS теперь доступны для обоих экструдеров. Слайсер автоматически распределит их для оптимальной печати." +msgstr "Обнаружен переключатель материалов. Все материалы из AMS теперь доступны для обоих экструдеров. Слайсер автоматически распределит их для оптимальной печати." -# AI Translated msgid "A filament switcher is detected but not calibrated and thus currently unavailable. Please calibrate it on the printer and synchronize before use." msgstr "Обнаружен переключатель материалов, но он не откалиброван и потому сейчас недоступен. Откалибруйте его на принтере и синхронизируйте перед использованием." @@ -8052,12 +7942,13 @@ msgid "" "The currently selected machine preset is inconsistent with the connected printer type.\n" "Are you sure to continue syncing?" msgstr "" -"Текущий выбранный профиль принтера не соответствует типу подключённого принтера.\n" +"Выбранный профиль принтера не соответствует типу подключённого принтера.\n" "Продолжить синхронизацию?" msgid "There are unset nozzle types. Please set the nozzle types of all extruders before synchronizing." msgstr "Типы сопел не заданы. Перед синхронизацией необходимо указать типы всех установленных сопел." +# О сопле/соплах? msgid "Sync extruder infomation" msgstr "Синхронизировать информацию об экструдере" @@ -8071,12 +7962,11 @@ msgid "Click to edit preset" msgstr "Изменить профиль" msgid "Nozzle" -msgstr "Экструдер" +msgstr "Сопло" msgid "Project Filaments" msgstr "Материалы проекта" -# AI Translated msgid "Purge mode" msgstr "Режим прочистки" @@ -8101,9 +7991,10 @@ msgstr "Поиск стола, модели или части..." msgid "Pellets" msgstr "Гранулы" +# Порядок слов сильно зависит от контекста; не могу воспроизвести в интерфейсе. По идее, выводится при bool Sidebar::is_new_project_in_gcode3mf(), но что-либо менять в нарезанном .gcode.3mf вообще нельзя #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." -msgstr "После завершения операции проект %s будет закрыт и создан новый проект." +msgstr "После завершения операции и закрытия текущего проекта %s будет создан новый проект." msgid "There are no compatible filaments, and sync is not performed." msgstr "Синхронизация не выполнена ввиду отсутствия совместимых материалов." @@ -8120,7 +8011,7 @@ msgid "Only filament color information has been synchronized from printer." msgstr "Синхронизирована только информация о цвете материала." msgid "Filament type and color information have been synchronized, but slot information is not included." -msgstr "Информация о типе и цвете филамента синхронизирована, но информация о слотах не включена." +msgstr "Синхронизирована информация о типе и цвете материала, но не о слотах." #, boost-format msgid "Do you want to save changes to \"%1%\"?" @@ -8355,22 +8246,18 @@ msgstr "" "Это действие приведёт к удалению информации о разрезе.\n" "Целостность модели после этого не гарантируется." -# AI Translated msgid "Delete Object" msgstr "Удалить модель" -# AI Translated msgid "Delete All Objects" msgstr "Удалить все модели" -# AI Translated msgid "Reset Project" msgstr "Сбросить проект" msgid "The selected object couldn't be split." msgstr "Невозможно разделить выбранную модель." -# AI Translated msgid "Split to Objects" msgstr "Разделить на модели" @@ -8399,9 +8286,8 @@ msgstr "Выбор нового файла" msgid "File for the replacement wasn't selected" msgstr "Файл для замены не выбран" -# AI Translated msgid "Replace with 3D file" -msgstr "Заменить 3D-файлом" +msgstr "Замена файла модели" # В заголовке окна выбора папки и ошибки "папка не найдена" msgid "Select folder to replace from" @@ -8450,7 +8336,6 @@ msgstr "Не удалось перезагрузить:" msgid "Error during reload" msgstr "Ошибка во время перезагрузки" -# AI Translated msgid "Reload all" msgstr "Перезагрузить всё" @@ -8497,9 +8382,9 @@ msgid "" "After syncing, software can optimize printing time and filament usage when slicing.\n" "Would you like to sync now?" msgstr "" -"Информация о типе сопла и количестве AMS не синхронизирована с подключённого принтера.\n" -"После синхронизации программа сможет оптимизировать время печати и расход филамента при нарезке.\n" -"Хотите синхронизировать сейчас?" +"Синхронизация информации о типе сопла и количестве AMS подключённого принтера не выполнена.\n" +"После синхронизации программа сможет оптимизировать время печати и расход материала при нарезке.\n" +"Выполнить синхронизацию?" msgid "Sync now" msgstr "Синхронизировать" @@ -8549,10 +8434,10 @@ msgid "INFO:" msgstr "Информация:" msgid "No accelerations provided for calibration. Use default acceleration value " -msgstr "Не заданы ускорения для калибровки. Использовать значение ускорения по умолчанию " +msgstr "Не заданы ускорения для калибровки. Используется значение по умолчанию: " msgid "No speeds provided for calibration. Use default optimal speed " -msgstr "Не заданы скорости для калибровки. Использовать оптимальную скорость по умолчанию " +msgstr "Не заданы скорости для калибровки. Используется значение по умолчанию: " msgid "Import SLA archive" msgstr "Импорт SLA архива" @@ -8664,17 +8549,15 @@ msgstr "Причина: «%1%» не имеет пересечений с дру msgid "Unable to perform boolean operation on model meshes. Only positive parts will be exported." msgstr "Невозможно выполнить булеву операцию над сетками модели. Будут экспортированы только положительные части." -# AI Translated msgid "Flashforge host is not available." msgstr "Хост Flashforge недоступен." # Авторизация принтера Flashforge не удалась. -# AI Translated msgid "Unable to log in to the Flashforge printer." -msgstr "Не удалось войти в принтер Flashforge." +msgstr "Не удалось авторизоваться в панели управления Flashforge." msgid "Is the printer ready? Is the print sheet in place, empty and clean?" -msgstr "Готов ли Принтер? Печатная пластина на месте, пустая и чистая?" +msgstr "Готов ли принтер? Проверьте установку и состояние покрытия стола." msgid "Upload and Print" msgstr "Загрузить и напечатать" @@ -8729,47 +8612,36 @@ msgstr "«Принтер»" msgid "Synchronize AMS Filament Information" msgstr "Синхронизировать материалы в AMS" -# AI Translated msgid "OrcaCloud plugins required by the current preset are not installed:" -msgstr "Плагины OrcaCloud, необходимые для текущего профиля, не установлены:" +msgstr "Для текущего профиля требуется установка плагинов OrcaCloud:" -# AI Translated msgid "Install Plugins" msgstr "Установить плагины" -# AI Translated msgid "Local plugins required by the current preset are missing:" -msgstr "Отсутствуют локальные плагины, необходимые для текущего профиля:" +msgstr "Для текущего профиля требуются локальные плагины:" -# AI Translated msgid "Find on OrcaCloud" msgstr "Найти в OrcaCloud" -# AI Translated msgid "Plugins required by the current preset are not activated:" -msgstr "Плагины, необходимые для текущего профиля, не активированы:" +msgstr "Для текущего профиля требуются неактивные плагины:" -# AI Translated msgid "Activate Now" -msgstr "Активировать сейчас" +msgstr "Активировать" -# AI Translated msgid "The installed plugin does not provide the required capability — it may be outdated:" -msgstr "Установленный плагин не предоставляет требуемую возможность — возможно, он устарел:" +msgstr "В установленном плагине отсутствует нужный функционал (устаревшая версия?):" -# AI Translated msgid "Preparing to install plugins..." msgstr "Подготовка к установке плагинов..." -# AI Translated msgid "Installing plugins" msgstr "Установка плагинов" -# AI Translated msgid "Cancelling — finishing the current plugin..." msgstr "Отмена — завершение текущего плагина..." -# AI Translated #, boost-format msgid "Installing %1%..." msgstr "Установка %1%..." @@ -8813,9 +8685,8 @@ msgstr "Объём: %1% мм³\n" msgid "Triangles: %1%\n" msgstr "Треугольников: %1%\n" -# AI Translated msgid "Use \"Fix Model\" to repair the mesh." -msgstr "Используйте «Исправить модель» для восстановления сетки." +msgstr "Используйте «Восстановить» для исправления сетки. " #, c-format, boost-format msgid "Plate %d: %s is not suggested for use printing filament %s (%s). If you still want to do this print job, please set this filament's bed temperature to a number that is not zero." @@ -9167,7 +9038,7 @@ msgstr "Если включено, вы сможете управлять нес # Запрашивать выбор режима группировки? msgid "Pop up to select filament grouping mode" -msgstr "Всплывающее окно для выбора режима группировки филаментов" +msgstr "Всплывающее окно для выбора режима группировки материалов" msgid "Behaviour" msgstr "Автоматизация" @@ -9290,15 +9161,14 @@ msgstr "Графика" msgid "Smooth normals" msgstr "Сглаживание бликов" -# AI Translated msgid "" "Applies smooth normals to the model.\n" "\n" "Requires manual scene reload to take effect (right-click on 3D view → \"Reload All\")." msgstr "" -"Применяет сглаженные нормали к модели.\n" +"Применять сглаживание нормалей моделей.\n" "\n" -"Для вступления в силу требуется ручная перезагрузка сцены (правый клик в 3D-виде → «Перезагрузить всё»)." +"Для применения изменений требуется ручная перезагрузка сцены (контекстное меню стола → «Перезагрузить всё»)." msgid "Phong shading" msgstr "Затенение по Фонгу" @@ -9315,9 +9185,9 @@ msgstr "Применять фоновое затенение в простран msgid "Shadows" msgstr "Тени" -# AI Translated +# Опять переусложнили техническим нюансом. Изначально тени рисовались только на столе, потом это исправили и решили отметить здесь. msgid "Renders cast shadows on the plate, other objects, and each object onto itself in realistic view." -msgstr "Отображает отбрасываемые тени на столе, других моделях и на самой модели в режиме продвинутой графики." +msgstr "Отрисовывать тени в режиме продвинутой графики." msgid "Anti-aliasing" msgstr "Сглаживание" @@ -9379,32 +9249,28 @@ msgstr "Отображать частоту кадров" msgid "Displays current viewport FPS in the top-right corner." msgstr "Выводить частоту кадров рабочего пространства в правом верхнем углу." -# AI Translated msgid "G-code Preview" -msgstr "Предпросмотр G-code" +msgstr "Просмотр нарезки" -# AI Translated msgid "Dim lower layers" -msgstr "Затемнять нижние слои" +msgstr "Затемнять предыдущие слои" -# AI Translated msgid "When scrubbing the layer slider in the sliced preview, render the layers below the current one darkened so that only the layer being viewed is shown at full brightness." -msgstr "При перемещении ползунка слоёв в предпросмотре нарезки слои ниже текущего отображаются затемнёнными, так что на полной яркости показан только просматриваемый слой." +msgstr "Затемнять слои, находящиеся ниже текущего. Просматриваемый слой отображается на полной яркости." -# AI Translated msgid "Dimmed layer brightness" msgstr "Яркость затемнённых слоёв" msgid "%" msgstr "%" -# AI Translated msgid "" "How brightly the dimmed layers are rendered when \"Dim lower layers\" is enabled.\n" "99% is barely darkened, 0% renders them black. Capped at 99% because 100% would be the same as disabling the option." msgstr "" -"Насколько ярко отображаются затемнённые слои, когда включена опция «Затемнять нижние слои».\n" -"99% — затемнение почти незаметно, 0% — слои становятся чёрными. Максимум ограничен 99%, так как 100% равносильно отключению опции." +"Процент яркости предыдущих слоёв при включении их затемнения.\n" +"99% — почти полная яркость.\n" +"0% — полное затенение." msgid "Login region" msgstr "Регион входа" @@ -9639,7 +9505,6 @@ msgstr "Несовместимые профили" msgid "My Printer" msgstr "Мой принтер" -# AI Translated msgid "AMS filaments" msgstr "Материалы AMS" @@ -9650,7 +9515,7 @@ msgid "AMS filament" msgstr "Материал AMS" msgid "Right filaments" -msgstr "Филаменты правого экструдера" +msgstr "Материалы правого экструдера" msgid "Click to select filament color" msgstr "Изменить цвет" @@ -9661,7 +9526,6 @@ msgstr "Добавить/удалить профиль" msgid "Edit preset" msgstr "Изменить профиль" -# AI Translated msgid "Change extruder color" msgstr "Изменить цвет экструдера" @@ -9705,10 +9569,9 @@ msgstr "Несовместимы" msgid "The selected preset is null!" msgstr "Выбранный профиль пуст!" -# AI Translated msgctxt "Layer range" msgid "End" -msgstr "до конца" +msgstr "конца" msgid "Customize" msgstr "Настроить" @@ -9818,10 +9681,12 @@ msgstr "Профиль «%1%» уже существует." #, boost-format msgid "Preset \"%1%\" already exists and is incompatible with the current printer." -msgstr "Профиль «%1%» уже существует и несовместим с текущим принтером." +msgstr "" +"Профиль «%1%» уже существует и\n" +"несовместим с текущим принтером." msgid "Please note that saving will overwrite the current preset." -msgstr "Обратите внимание, что при сохранении произойдёт перезапись текущего профиля." +msgstr "Обратите внимание: при сохранении произойдёт\nперезапись текущего профиля." msgid "The name cannot be the same as a preset alias name." msgstr "Имя не должно совпадать с именем предустановленного профиля." @@ -9883,8 +9748,9 @@ msgstr "Отправка задания на печать" msgid "Not satisfied with the grouping of filaments? Regroup and slice ->" msgstr "Не нравится текущая группировка материалов? Нажмите сюда, чтобы изменить и нарезать заново." +# Подсказка msgid "Manually change external spool during printing for multi-color printing" -msgstr "Ручная смена внешней катушки во время печати для многоцветной печати" +msgstr "Смена внешней катушки вручную во время многоцветной печати" msgid "Multi-color with external" msgstr "Многоцветная печать с внешней катушкой" @@ -9892,23 +9758,23 @@ msgstr "Многоцветная печать с внешней катушкой msgid "Your filament grouping method in the sliced file is not optimal." msgstr "Группировка материалов в файле печати не оптимальна." -# AI Translated msgid "To ensure print quality, the drying temperature will be lowered during printing." -msgstr "Для обеспечения качества печати температура сушки будет снижена во время печати." +msgstr "Температура сушки будет снижена на время печати во избежание проблем с качеством." -# AI Translated msgid "Select timelapse storage location" msgstr "Выберите место хранения таймлапсов" +# Ничего тут не выравнивается, банбуки чисто карту снимают msgid "Auto Bed Leveling" -msgstr "Автоматическое выравнивание стола" +msgstr "Измерение кривизны стола" +# "Пропуск" – это пояснение логики работы режима или призыв к действию? msgid "" "This checks the flatness of heatbed. Leveling makes extruded height uniform.\n" "*Automatic mode: Run a leveling check(about 10 seconds). Skip if surface is fine." msgstr "" -"Проверка ровности нагревательного стола. Выравнивание обеспечивает равномерную высоту экструзии.\n" -"*Автоматический режим: выполнить проверку (около 10 секунд). Пропустить, если поверхность в порядке." +"Снятие карты высот стола. Позволяет обеспечить равномерность высоты слоя.\n" +"*Автоматический режим: выполнить проверку (около 10 секунд). Пропуск, если поверхность в порядке." msgid "Flow Dynamics Calibration" msgstr "Калибровка динамики потока" @@ -9917,24 +9783,22 @@ msgid "" "This process determines the dynamic flow values to improve overall print quality.\n" "*Automatic mode: Skip if the filament was calibrated recently." msgstr "" -"Этот процесс определяет значения динамического потока для улучшения общего качества печати.\n" -"*Автоматический режим: пропустить, если филамент был откалиброван недавно." +"Анализ инертности системы подачи материала для улучшения общего качества печати.\n" +"*Автоматический режим: пропуск, если материал был недавно откалиброван." msgid "Nozzle Offset Calibration" -msgstr "Калибровка смещения сопла" +msgstr "Калибровка смещения сопел" msgid "" "Calibrate nozzle offsets to enhance print quality.\n" "*Automatic mode: Check for calibration before printing. Skip if unnecessary." msgstr "" -"Калибровка смещений сопел для улучшения качества печати.\n" -"*Автоматический режим: проверять калибровку перед печатью. Пропустить, если не требуется." +"Калибровка смещения сопел для улучшения качества печати.\n" +"*Автоматический режим: выполнять калибровку перед печатью по необходимости." -# AI Translated msgid "Shared PA Profile" msgstr "Общий профиль PA" -# AI Translated msgid "Nozzles and filaments of the same type share the same PA profile." msgstr "Сопла и материалы одного типа используют общий профиль PA." @@ -9950,50 +9814,40 @@ msgstr "Описание ошибки" msgid "Extra info" msgstr "Доп. информация" -# AI Translated msgid "The Filament Track Switch installed on the printer does not match the slicing file. Please re-slice to avoid print quality issues." -msgstr "Filament Track Switch, установленный на принтере, не соответствует файлу нарезки. Выполните повторную нарезку во избежание проблем с качеством печати." +msgstr "Filament Track Switch в принтере не соответствует файлу нарезки. Выполните повторную нарезку во избежание проблем с качеством печати." -# AI Translated msgid "This print requires a Filament Track Switch. Please install it first." -msgstr "Для этой печати требуется Filament Track Switch. Сначала установите его." +msgstr "Для печати этого файла требуется Filament Track Switch. Сначала установите его." -# AI Translated msgid "The Filament Track Switch has not been setup. Please setup it first." msgstr "Filament Track Switch не настроен. Сначала выполните его настройку." -# AI Translated #, c-format, boost-format msgid "Failed to send nozzle auto-mapping request to printer { code: %d }. Please try to refresh the printer information. If it still does not recover, you can try to rebind the printer and check the network connection." -msgstr "Не удалось отправить запрос на авто-сопоставление сопел принтеру { code: %d }. Попробуйте обновить информацию о принтере. Если это не помогает, попробуйте перепривязать принтер и проверить сетевое соединение." +msgstr "Не удалось отправить принтеру запрос на сопоставление сопел { код: %d }. Попробуйте обновить информацию о принтере. Если это не помогает, попробуйте проверить соединение и перепривязать принтер." -# AI Translated msgid "The printer is calculating nozzle mapping." -msgstr "Принтер вычисляет сопоставление сопел." +msgstr "Принтер выполняет сопоставление сопел." -# AI Translated msgid "Please wait a moment..." msgstr "Пожалуйста, подождите..." -# AI Translated #, c-format, boost-format msgid "Failed to receive nozzle auto-mapping table from printer { msg: %s }. Please refresh the printer information." -msgstr "Не удалось получить таблицу авто-сопоставления сопел от принтера { msg: %s }. Обновите информацию о принтере." +msgstr "Не удалось получить от принтера таблицу сопоставления сопел { ответ: %s }. Обновите информацию о принтере." -# AI Translated #, c-format, boost-format msgid "The printer failed to build the nozzle auto-mapping table { code: %d }. Please refresh nozzle information." -msgstr "Принтеру не удалось построить таблицу авто-сопоставления сопел { code: %d }. Обновите информацию о соплах." +msgstr "Принтеру не удалось составить таблицу сопоставления сопел { код: %d }. Обновите информацию о соплах." -# AI Translated #, c-format, boost-format msgid "The current nozzle mapping may produce an extra %0.2f g of waste." -msgstr "Текущее сопоставление сопел может привести к дополнительным %0.2f г отходов." +msgstr "Текущее сопоставление сопел может привести к дополнительным затратам %0.2fг материала." -# AI Translated #, c-format, boost-format msgid "Recommended filament arrangement saves %s->" -msgstr "Рекомендуемое расположение материалов экономит %s->" +msgstr "Рекомендуемое расположение материалов экономит %s→" #, c-format, boost-format msgid "Filament %s does not match the filament in AMS slot %s. Please update the printer firmware to support AMS slot assignment." @@ -10012,18 +9866,17 @@ msgstr "При включении режима вазы принтеры с ки msgid "The current printer does not support timelapse in Traditional Mode when printing By-Object." msgstr "Принтер не поддерживает таймлапс в режиме по умолчанию при печати моделей по очереди." -# AI Translated msgid "I have checked the installed nozzle and want to print anyway." -msgstr "Я проверил установленное сопло и всё равно хочу печатать." +msgstr "Установленное сопло проверено, продолжить в любом случае." msgid "Errors" msgstr "Ошибок" msgid "More than one filament types have been mapped to the same external spool, which may cause printing issues. The printer won't pause during printing." -msgstr "Несколько типов филамента назначены на одну внешнюю катушку, что может вызвать проблемы при печати. Принтер не будет приостанавливаться во время печати." +msgstr "На одну внешнюю катушку назначено несколько типов материала, что может вызвать проблемы при печати. Принтер не будет приостанавливаться во время печати." msgid "The filament type setting of external spool is different from the filament in the slicing file." -msgstr "Тип филамента на внешней катушке отличается от филамента в файле нарезки." +msgstr "Тип материала на внешней катушке отличается от материала в файле нарезки." msgid "The printer type selected when generating G-code is not consistent with the currently selected printer. It is recommended that you use the same printer type for slicing." msgstr "Выбранный профиль принтера в настройках слайсера не совпадает с фактическим принтером. Для нарезки рекомендуется использовать тот же профиль принтера." @@ -10041,48 +9894,40 @@ msgid "Please click the confirm button if you still want to proceed with printin msgstr "Нажмите кнопку подтверждения, если всё ещё хотите продолжить печать." msgid "This checks the flatness of heatbed. Leveling makes extruded height uniform." -msgstr "Проверка ровности нагревательного стола. Выравнивание обеспечивает равномерную высоту экструзии." +msgstr "Проверка кривизны стола. Обеспечивает равномерную высоту слоя." msgid "This process determines the dynamic flow values to improve overall print quality." -msgstr "Этот процесс определяет значения динамического потока для улучшения общего качества печати." +msgstr "Определение коэффициента динамического потока для улучшения общего качества печати." msgid "Internal" msgstr "Внутренние" -# AI Translated +# Подставляется storage_name #, c-format, boost-format msgid "%s space less than 20MB. Timelapse may not save properly. You can turn it off or" -msgstr "%s: свободного места меньше 20 МБ. Таймлапс может сохраниться некорректно. Вы можете отключить его или" +msgstr "%s: свободного места меньше 20 МБ. Таймлапс может сохраниться некорректно. Рекомендуется отключить его или " -# AI Translated msgid "Clean up files" -msgstr "Очистить файлы" +msgstr "очистить файлы" -# AI Translated msgid "Low internal storage. This timelapse will overwrite the oldest video files." msgstr "Мало внутренней памяти. Этот таймлапс перезапишет самые старые видеофайлы." -# AI Translated msgid "Low external storage. This timelapse will overwrite the oldest video files." msgstr "Мало внешней памяти. Этот таймлапс перезапишет самые старые видеофайлы." -# AI Translated msgid "Insufficient external storage for time-lapse photography. Connect to computer to delete files, or use a larger memory card." msgstr "Недостаточно внешней памяти для съёмки таймлапса. Подключитесь к компьютеру для удаления файлов или используйте карту памяти большего объёма." -# AI Translated msgid "Storage Space Not Enough" msgstr "Недостаточно места в хранилище" -# AI Translated msgid "Confirm & Print" -msgstr "Подтвердить и печатать" +msgstr "Подтвердить и продолжить" -# AI Translated msgid "Cancel Timelapse & Print" -msgstr "Отменить таймлапс и печатать" +msgstr "Отключить таймлапс и продолжить" -# AI Translated msgid "Clean Up" msgstr "Очистить" @@ -10100,47 +9945,38 @@ msgstr "Будет затрачено на %d г материала и на %d msgid "nozzle" msgstr "сопло" -# AI Translated #, c-format, boost-format msgid "Refreshing information of hotends(%d/%d)." msgstr "Обновление информации о хотэндах (%d/%d)." -# AI Translated msgid "There are not enough available hotends currently." -msgstr "Сейчас недостаточно доступных хотэндов." +msgstr "Доступных хотэндов сейчас недостаточно." -# AI Translated msgid "Please complete the hotend rack setup and try again." msgstr "Завершите настройку стойки хотэндов и повторите попытку." -# AI Translated msgid "Please refresh the nozzle information and try again." msgstr "Обновите информацию о соплах и повторите попытку." -# AI Translated msgid "Please re-slice to avoid filament waste." -msgstr "Выполните повторную нарезку во избежание расхода материала впустую." +msgstr "Выполните повторную нарезку во избежание излишнего расхода материала." -# AI Translated msgid "The reported hotend information may be unreliable." msgstr "Переданная информация о хотэнде может быть недостоверной." -# AI Translated #, c-format, boost-format msgid "The printer has no nozzle matching the slicing file (%s)." msgstr "На принтере нет сопла, соответствующего файлу нарезки (%s)." -# AI Translated msgid "Please install a matching nozzle in the hotend rack, or set the corresponding printer preset while slicing." msgstr "Установите подходящее сопло в стойку хотэндов или задайте соответствующий профиль принтера при нарезке." -# AI Translated msgid "The toolhead and hotend rack are full. Please remove at least one hotend before printing." -msgstr "Печатающая голова и стойка хотэндов заполнены. Перед печатью снимите хотя бы один хотэнд." +msgstr "Все места в печатающей голове и стойке хотэндов заняты. Перед печатью снимите хотя бы один хотэнд." #, c-format, boost-format msgid "The nozzle flow setting of %s(%s) doesn't match with the slicing file(%s). Please make sure the nozzle installed matches with settings in printer, then set the corresponding printer preset while slicing." -msgstr "Настройка потока сопла %s(%s) не совпадает с файлом нарезки (%s). Убедитесь, что настройки принтера соответствуют установленному соплу, затем выберите соответствующий профиль принтера при нарезке." +msgstr "Настройка расхода сопла %s(%s) не совпадает с файлом нарезки (%s). Убедитесь, что настройки принтера соответствуют установленному соплу, затем выберите соответствующий профиль принтера при нарезке." msgid "Tips: If you changed your nozzle of your printer lately, please go to 'Device -> Printer parts' to change your nozzle setting." msgstr "Совет: после замены сопла в принтере необходимо обновить его настройки («Принтер» → «Части принтера»)." @@ -10158,28 +9994,23 @@ msgstr "обоих экструдерах" #, c-format, boost-format msgid "The hardness of current material (%s) exceeds the hardness of %s(%s). Please verify the nozzle or material settings and try again." -msgstr "Требования к твёрдости у выбранного материала (%s) превышают возможности %s(%s). Проверьте настройки профиля принтера или материала и попробуйте ещё раз." +msgstr "Требования к твёрдости у выбранного материала (%s) превышают возможности %s (%s). Проверьте настройки профиля принтера или материала и попробуйте ещё раз." -# AI Translated msgid "Your current firmware version cannot start this print job. Please update to the latest version and try again." -msgstr "Текущая версия прошивки не может запустить это задание печати. Обновите до последней версии и повторите попытку." +msgstr "Текущая версия прошивки не может обработать этот файл. Обновитесь до последней версии и повторите попытку." -# AI Translated #, c-format, boost-format msgid "The hardness of current material (%s) exceeds the hardness of %s(%s). It may cause nozzle wear, leading to material leakage and unstable flow. Please exercise caution when using it." -msgstr "Твёрдость текущего материала (%s) превышает твёрдость %s(%s). Это может вызвать износ сопла, приводящий к утечке материала и нестабильному потоку. Соблюдайте осторожность при использовании." +msgstr "Требования к твёрдости у выбранного материала (%s) превышают возможности %s (%s). Это может привести к износу сопла и утечкам материала/нестабильному потоку в будущем. Используйте материал с осторожностью." -# AI Translated msgid "Some filaments may switch between extruders during printing. Manual K-value calibration cannot be applied throughout the entire print, which may affect print quality. Enabling Flow Dynamics Calibration is recommended." -msgstr "Некоторые материалы могут переключаться между экструдерами во время печати. Ручную калибровку K-value нельзя применить на протяжении всей печати, что может повлиять на её качество. Рекомендуется включить калибровку динамики потока (Flow Dynamics Calibration)." +msgstr "Некоторые материалы могут переключаться между экструдерами во время печати. Ручная калибровка K-фактора не применима для всей печати, что может повлиять на её качество. Рекомендуется включить калибровку динамики потока (Flow Dynamics Calibration)." -# AI Translated msgid "There is stringing-prone filament in this file. For best print quality, we recommend switching nozzle clumping detection to Auto mode." -msgstr "В этом файле есть материал, склонный к образованию волос. Для наилучшего качества печати рекомендуем переключить обнаружение налипания на сопло в режим «Авто»." +msgstr "В текущем проекте есть материал, склонный к образованию паутины. Во избежание проблем с качеством рекомендуется включить автоматический режим обнаружения налипаний на сопло." -# AI Translated msgid "If 'Dynamic Flow Calibration' is set to Auto/On, the system will use the manual calibration value or the default value and skip the flow calibration process. You can perform a manual flow calibration for TPU filament on the 'Calibration' page." -msgstr "Если «Динамическая калибровка потока» установлена в «Авто/Вкл», система будет использовать значение ручной калибровки или значение по умолчанию и пропустит процесс калибровки потока. Вы можете выполнить ручную калибровку потока для материала TPU на странице «Калибровка»." +msgstr "Если «Калибровка динамики потока» установлена в «Авто/Вкл», система будет использовать значение ручной калибровки или значение по умолчанию и пропустит процесс калибровки. Ручную калибровку TPU можно выполнить на странице «Калибровка»." #, c-format, boost-format msgid "[ %s ] requires printing in a high-temperature environment. Please close the door." @@ -10250,16 +10081,16 @@ msgid "The printer is executing instructions. Please restart printing after it e msgstr "Принтер выполняет команды. Перезапустите печать после их завершения." msgid "AMS is setting up. Please try again later." -msgstr "AMS настраивается. Пожалуйста, попробуйте позже." +msgstr "AMS настраивается. Попробуйте позднее." msgid "Not all filaments used in slicing are mapped to the printer. Please check the mapping of filaments." -msgstr "Не все филаменты, использованные при нарезке, назначены на принтер. Проверьте назначение филаментов." +msgstr "Не все материалы, использованные при нарезке, сопоставлены с принтером. Проверьте назначение материалов." msgid "Please do not mix-use the Ext with AMS." -msgstr "Пожалуйста, не используйте одновременно внешнюю катушку и AMS." +msgstr "Не стоит использовать AMS и внешние катушки совместно." msgid "Invalid nozzle information, please refresh or manually set nozzle information." -msgstr "Недопустимая информация о сопле. Обновите или вручную задайте информацию о сопле." +msgstr "Недопустимая информация о сопле. Обновите или задайте её вручную." msgid "Storage needs to be inserted before printing via LAN." msgstr "Перед печатью по локальной сети необходимо вставить хранилище данных." @@ -10286,24 +10117,21 @@ msgid "TPU 90A/TPU 85A is too soft and does not support automatic Flow Dynamics msgstr "TPU 85A/90A слишком мягкий для автоматической калибровки." msgid "Set dynamic flow calibration to 'OFF' to enable custom dynamic flow value." -msgstr "Установите калибровку динамического потока в «ВЫКЛ.», чтобы задать пользовательское значение динамического потока." +msgstr "Отключите калибровку динамики потока, чтобы задать пользовательское значение." msgid "This printer does not support printing all plates." msgstr "Принтер не поддерживает печать нескольких столов." -# AI Translated #, c-format, boost-format msgid "The current firmware supports a maximum of %s materials. You can either reduce the number of materials to %s or fewer on the Preparation Page, or try updating the firmware. If you are still restricted after the update, please wait for subsequent firmware support." -msgstr "Текущая прошивка поддерживает не более %s материалов. Вы можете либо уменьшить количество материалов до %s или менее на странице подготовки, либо попробовать обновить прошивку. Если после обновления ограничение сохраняется, дождитесь поддержки в последующих версиях прошивки." +msgstr "Текущая прошивка поддерживает не более %s материалов. Попробуйте обновить прошивку или уменьшить количество материалов до %s (или менее) на странице подготовки. Если после обновления ограничение сохраняется, ожидайте добавления поддержки в последующих версиях." msgid "The type of external filament is unknown or does not match with the filament type in the slicing file. Please make sure you have installed the correct filament in the external spool." msgstr "Тип материала на внешней катушке неизвестен или не соответствует материалу в файле печати. Убедитесь, что установлена внешняя катушка с требуемым материалом." -# AI Translated msgid "TPU 90A/TPU 85A are too soft. It is recommended to perform manual flow calibration on the 'Calibration' page. If 'Dynamic Flow Calibration' is set to auto/on, the system will use the previous calibration value and skip the flow calibration process." -msgstr "TPU 90A/TPU 85A слишком мягкие. Рекомендуется выполнить ручную калибровку потока на странице «Калибровка». Если «Динамическая калибровка потока» установлена в «авто/вкл», система будет использовать предыдущее значение калибровки и пропустит процесс калибровки потока." +msgstr "TPU 90A/TPU 85A слишком мягкий. Рекомендуется выполнить ручную калибровку потока на странице «Калибровка». Если «Калибровка динамики потока» установлена в «Авто/Вкл», система будет использовать предыдущие результаты и пропустит процесс калибровки." -# AI Translated msgid "The filament in the AMS may be insufficient for this print. Please refill or replace it." msgstr "Материала в AMS может быть недостаточно для этой печати. Пополните или замените его." @@ -10475,7 +10303,6 @@ msgstr "Удалить этот профиль" msgid "Search in preset" msgstr "Поиск в профиле" -# AI Translated msgid "Synchronization of different extruder drives or nozzle volume types is not supported." msgstr "Синхронизация разных приводов экструдера или типов объёма сопла не поддерживается." @@ -10485,9 +10312,8 @@ msgstr "Перенести изменения в настройки другог msgid "Click to reset all settings to the last saved preset." msgstr "Сбросить все изменения" -# AI Translated msgid "Prime tower is required for nozzle changing. There may be flaws on the model without prime tower. Are you sure you want to disable prime tower?" -msgstr "Для смены сопла требуется черновая башня. Без черновой башни на модели могут появиться дефекты. Вы уверены, что хотите отключить черновую башню?" +msgstr "Для смены сопла требуется черновая башня. Без черновой башни на модели могут появиться дефекты. Вы действительно хотите отключить черновую башню?" msgid "A prime tower is required for smooth timelapse mode. There may be flaws on the model without a prime tower. Are you sure you want to disable the prime tower?" msgstr "Для сглаженного таймлапса требуется черновая башня, без неё на модели могут возникнуть дефекты. Вы действительно хотите отключить черновую башню?" @@ -10503,7 +10329,7 @@ msgid "A prime tower is required for clumping detection. There may be flaws on t msgstr "Для обнаружения налипаний на сопле требуется черновая башня, без неё на модели могут образоваться дефекты. Включить обнаружение налипаний?" msgid "Enabling both precise Z height and the prime tower may cause slicing errors. Do you still want to enable precise Z height?" -msgstr "Включение «Точной высоты по Z» вместе с черновой башней может привести к ошибкам нарезки. Продолжить?" +msgstr "Включение «Точной высоты по Z» совместно с черновой башней может привести к ошибкам нарезки. Продолжить?" msgid "A prime tower is required for smooth timelapse mode. There may be flaws on the model without prime tower. Do you want to enable the prime tower?" msgstr "Для сглаженного таймлапса требуется черновая башня, без неё на модели могут возникнуть дефекты. Включить черновую башню?" @@ -10715,6 +10541,7 @@ msgstr "Материал поддержки" msgid "Support ironing" msgstr "Разглаживание поддержки" +# Технически точной локализацией было бы "фрактальные поддержки", т.к. сама структура представляет собой фрактал, а не дерево. Но у всех уже на слуху, так что менять нет смысла. Хотя звучало бы прям круто :3 msgid "Tree supports" msgstr "Древовидная поддержка" @@ -10741,13 +10568,12 @@ msgstr "G-код при смене типа линии" msgid "Post-processing Scripts" msgstr "Скрипты постобработки" -# AI Translated msgid "Slicing Pipeline Plugin" msgstr "Плагин конвейера нарезки" -# AI Translated +# В данном контексте можно, наверное, "конфигурация", т.к. тут именно управление набором плагинов, а не просто их настройками msgid "Plugin Configuration" -msgstr "Настройка плагина" +msgstr "Настройка плагинов" msgid "Notes" msgstr "Заметки" @@ -10904,7 +10730,7 @@ msgid "Multi Filament" msgstr "Печать несколькими материалами" msgid "Tool change parameters with single extruder MM printers" -msgstr "Смена материала при комбинированной печати одним экструдером" +msgstr "Смена материала при печати одним экструдером" msgid "Set" msgstr "Выбор" @@ -11069,10 +10895,8 @@ msgstr "" msgid "Firmware Retraction" msgstr "Откат из прошивки" -# Изменения в настройках ... будут сброшены при переключении на принтер с -# другим типом или количеством сопел. msgid "Switching to a printer with different extruder types or numbers will discard or reset changes to extruder or multi-nozzle-related parameters." -msgstr "Переключение на принтер с другим типом или количеством экструдеров приведёт к сбросу или удалению изменений параметров, связанных с экструдерами и многосопельной конфигурацией." +msgstr "Изменения в настройках экструдера и параметрах сопел не будут перенесены в профиль принтера с другим типом или количеством сопел." msgid "Use Modified Value" msgstr "Использовать изменённое значение" @@ -11087,7 +10911,7 @@ msgstr "" "• профили материалов: %d\n" "• профили настроек: %d\n" "\n" -"Эти профили будут удалены при удалении принтера." +"Эти профили будут удалены вместе с принтером." # ??? Профили, наследуемые от других профилей, не могут быть удалены. msgid "Presets inherited by other presets cannot be deleted!" @@ -11115,8 +10939,8 @@ msgid "" "If the preset corresponds to a filament currently in use on your printer, please reset the filament information for that slot." msgstr "" "Вы действительно хотите удалить выбранный профиль? \n" -"Если материал из этого профиля сейчас используется в вашем принтере,\n" -"необходимо сбросить информацию о материале для этого слота." +"Если вы используете его в принтере, сбросьте информацию\n" +"о нём у соответствующего слота." #, boost-format msgid "Are you sure you want to %1% the selected preset?" @@ -11173,7 +10997,6 @@ msgstr "Продолжить" msgid "Don't warn again for this preset" msgstr "Больше не спрашивать для этого профиля" -# AI Translated #, c-format, boost-format msgid "%s: %s" msgstr "%s: %s" @@ -11326,16 +11149,15 @@ msgstr "" msgid "Extruder count" msgstr "Количество экструдеров" +# Какая-то древняя строка. Ранее – "Характеристики принтера", сейчас используется ещё и в конфигурации плагинов в профиле материала (вкладка "Расширенные") msgid "Capabilities" -msgstr "Характеристики принтера" +msgstr "Возможности" -# AI Translated msgid "Left: " -msgstr "Слева: " +msgstr "Левый: " -# AI Translated msgid "Right: " -msgstr "Справа: " +msgstr "Правый: " msgid "Show all presets (including incompatible)" msgstr "Показать все профили (включая несовместимые)" @@ -11488,7 +11310,7 @@ msgid "Color match" msgstr "Подбор цвета" msgid "Approximate color matching." -msgstr "Приблизительный подбор по цвету ваших прутков." +msgstr "Приблизительный подбор по цвету ваших материалов." msgid "Append" msgstr "Добавить" @@ -11510,7 +11332,7 @@ msgid "" msgstr "выбор цветов можно изменить вручную." msgid "—> " -msgstr "—> " +msgstr "→ " msgid "" "Synchronizing AMS filaments will discard your modified but unsaved filament presets.\n" @@ -11534,7 +11356,7 @@ msgid "Plate" msgstr "Стол" msgid "The connected printer does not match the currently selected printer. Please change the selected printer." -msgstr "Подключённый принтер не соответствует текущему выбранному принтеру. Пожалуйста, измените выбранный принтер." +msgstr "Подключённый принтер не соответствует текущему выбранному. Пожалуйста, измените выбранный принтер." msgid "Mapping" msgstr "Назначение" @@ -11543,7 +11365,7 @@ msgid "Overwriting" msgstr "Переназначение" msgid "Reset all filament mapping" -msgstr "Сбросить все назначения филаментов" +msgstr "Сбросить назначения всех материалов" msgid "(Recommended filament)" msgstr "(рекомендуется)" @@ -11555,8 +11377,8 @@ msgid "" "Check heatbed flatness. Leveling makes extruded height uniform.\n" "*Automatic mode: Level first (about 10 seconds). Skip if surface is fine." msgstr "" -"Проверка ровности стола. Выравнивание обеспечивает равномерную высоту экструзии.\n" -"*Автоматический режим: сначала выполнить выравнивание (около 10 секунд). Пропустить, если поверхность в порядке." +"Снятие карты высот стола. Обеспечивает равномерную высоту слоя.\n" +"*Автоматический режим: выполнить проверку (около 10 секунд). Пропуск, если поверхность в порядке." msgid "" "Calibrate nozzle offsets to enhance print quality.\n" @@ -11572,43 +11394,43 @@ msgid "Tip" msgstr "Совет" msgid "Only synchronize filament type and color, not including AMS slot information." -msgstr "Синхронизировать только тип и цвет филамента, без информации о слотах AMS." +msgstr "Синхронизировать только тип и цвет материала, без информации о слотах AMS." msgid "Replace the project filaments list sequentially based on printer filaments. And unused printer filaments will be automatically added to the end of the list." -msgstr "Заменить список филаментов проекта последовательно на основе филаментов принтера. Неиспользуемые филаменты принтера будут автоматически добавлены в конец списка." +msgstr "Заменить список материалов проекта последовательно на основе материалов принтера. Свободные материалы будут автоматически добавлены в конец списка." msgid "Add unused AMS filaments to filaments list." msgstr "Добавить незадействованные материалы из AMS в список" msgid "Automatically merge the same colors in the model after mapping." -msgstr "Автоматически объединять одинаковые цвета в модели после назначения." +msgstr "Автоматически объединять одинаковые цвета в модели после их назначения." msgid "After being synced, this action cannot be undone." msgstr "После синхронизации это действие нельзя отменить." msgid "After being synced, the project's filament presets and colors will be replaced with the mapped filament types and colors. This action cannot be undone." -msgstr "После синхронизации профили филаментов и цвета проекта будут заменены назначенными типами и цветами филаментов. Это действие нельзя отменить." +msgstr "После синхронизации профили и цвета материалов проекта будут заменены назначенными им типами и цветами материалов. Это действие нельзя отменить." msgid "Are you sure to synchronize the filaments?" -msgstr "Вы уверены, что хотите синхронизировать филаменты?" +msgstr "Вы уверены, что хотите синхронизировать материалы?" msgid "Synchronize now" msgstr "Синхронизировать" msgid "Synchronize Filament Information" -msgstr "Синхронизация информации о филаменте" +msgstr "Синхронизация информации о материале" msgid "Add unused filaments to filaments list." -msgstr "Добавить неиспользуемые филаменты в список." +msgstr "Добавить неиспользуемые материалы в список." msgid "Only synchronize filament type and color, not including slot information." -msgstr "Синхронизировать только тип и цвет филамента, без информации о слотах." +msgstr "Синхронизировать только тип и цвет материала, без информации о слотах." msgid "Ext spool" msgstr "Внешняя катушка" msgid "Please check whether the nozzle type of the device is the same as the preset nozzle type." -msgstr "Проверьте, совпадает ли тип сопла устройства с типом сопла в профиле." +msgstr "Проверьте, совпадает ли тип сопла в принтере с типом сопла в профиле." msgid "Storage is not available or is in read-only mode." msgstr "Хранилище недоступно или защищено от записи." @@ -11621,7 +11443,7 @@ msgid "Timelapse is not supported because Print sequence is set to \"By object\" msgstr "Таймлапс не поддерживается, поскольку для последовательности печати установлено значение «Печать по очереди»." msgid "You selected external and AMS filament at the same time in an extruder, you will need manually change external filament." -msgstr "Вы выбрали одновременно внешний филамент и филамент из AMS в одном экструдере. Вам нужно будет вручную менять внешний филамент." +msgstr "Для одного экструдера одновременно выбраны внешняя катушка и катушка из AMS. Потребуется ручная смена прутка." msgid "Successfully synchronized nozzle information." msgstr "Информация о сопле успешно синхронизирована." @@ -11629,9 +11451,8 @@ msgstr "Информация о сопле успешно синхронизир msgid "Successfully synchronized nozzle and AMS number information." msgstr "Информация о сопле и количестве AMS успешно синхронизирована." -# AI Translated msgid "Do you want to continue to sync filaments?" -msgstr "Хотите продолжить синхронизацию материалов?" +msgstr "Продолжить синхронизацию материалов?" msgid "Successfully synchronized filament color from printer." msgstr "Цвет материала успешно синхронизирован с принтером." @@ -11657,7 +11478,7 @@ msgstr "" #, boost-format msgid "For constant flow rate, hold %1% while dragging." -msgstr "Для постоянного объёмного расхода удерживайте нажатой клавишу %1% при перетаскивании." +msgstr "Для выравнивания значений расхода удерживайте клавишу %1% при перетаскивании." msgid "ms" msgstr "мс" @@ -11710,7 +11531,7 @@ msgid "BambuSource has not correctly been registered for media playing! Press Ye msgstr "Компонент BambuSource неправильно зарегистрирован для воспроизведения медиафайлов! Нажмите «Да», чтобы повторно зарегистрировать его" msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." -msgstr "Отсутствует компонент BambuSource для воспроизведения медиа! Пожалуйста, переустановите OrcaSlicer или обратитесь за помощью к сообществу." +msgstr "Отсутствует компонент BambuSource для воспроизведения медиа. Переустановите OrcaSlicer или обратитесь за помощью к сообществу." msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." msgstr "При использовании компонентов BambuSource из другого инсталлятора, воспроизведение видео может работать некорректно! Нажмите «Да», чтобы исправить это." @@ -11718,7 +11539,6 @@ msgstr "При использовании компонентов BambuSource и msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" msgstr "В вашей системе отсутствуют кодеки H.264 для GStreamer, которые необходимы для воспроизведения видео (попробуйте установить пакеты gstreamer1.0-plugins-bad или gstreamer1.0-libav, а затем перезапустить Orca Slicer)." -# AI Translated msgid "Cloud agent is not available. Please restart OrcaSlicer and try again." msgstr "Облачный агент недоступен. Перезапустите OrcaSlicer и повторите попытку." @@ -11734,9 +11554,8 @@ msgstr "Войти" msgid "Login failed. Please try again." msgstr "Ошибка входа. Попробуйте ещё раз." -# AI Translated msgid "parse json failed" -msgstr "не удалось разобрать JSON" +msgstr "не удалось обработать JSON" msgid "[Action Required] " msgstr "[Требуется действие] " @@ -11928,12 +11747,10 @@ msgctxt "Keyboard Shortcut" msgid "Space" msgstr "Пробел" -# AI Translated msgid "Open actions speed dial" -msgstr "Открыть панель быстрых действий" +msgstr "Открыть строку быстрых действий" # Plater – это название библиотеки. Используется в меню горячих клавиш в качестве заголовка сочетаний клавиш, которые работают внутри пространства Plater. Как минимум на Windows не отображается. -# AI Translated msgid "Plater" msgstr "Рабочая область" @@ -12012,17 +11829,15 @@ msgstr "Информация об изменениях в версии %s:" msgid "Network plug-in update" msgstr "Обновление сетевого плагина" -# AI Translated msgid "Click OK to update the Network plug-in now. If a file is in use, the update will be applied the next time Orca Slicer launches." -msgstr "Нажмите OK, чтобы обновить сетевой плагин сейчас. Если файл используется, обновление будет применено при следующем запуске Orca Slicer." +msgstr "Нажмите OK для обновления сетевого плагина. Если файл занят, обновление будет завершено при следующем запуске Orca Slicer." -# AI Translated msgid "A new Network plug-in is available. Do you want to install it?" -msgstr "Доступен новый сетевой плагин. Хотите установить его?" +msgstr "Доступна новая версия сетевого плагина. Выполнить установку?" #, c-format, boost-format msgid "A new Network plug-in (%s) is available. Do you want to install it?" -msgstr "Доступен новый сетевой плагин (%s). Хотите установить?" +msgstr "Доступна новая версия сетевого плагина: %s. Выполнить установку?" msgid "New version of Orca Slicer" msgstr "Доступна новая версия Orca Slicer" @@ -12077,9 +11892,8 @@ msgstr "Имя принтера" msgid "Where to find your printer's IP and Access Code?" msgstr "Где найти IP-адрес и код доступа к вашему принтеру?" -# AI Translated msgid "How to trouble shooting" -msgstr "Как устранить неполадки" +msgstr "Помощь в устранении неполадок" msgid "Connect" msgstr "Подключить" @@ -12140,13 +11954,13 @@ msgid "Laser 40W" msgstr "40 Вт лазер" msgid "Cutting Module" -msgstr "Модуль обрезки" +msgstr "Модуль резки" # система пожаротушения? msgid "Auto Fire Extinguishing System" msgstr "Автоматическая система пожаротушения" -# AI Translated +# По сути, локализовывается как "Переключатель AMS". Но сами бамбуки используют кривой машинный перевод в русскоязычной документации, и там переводится от случая к случаю. Поэтому имеет полный смысл оставить брендированное название. msgid "Filament Track Switch" msgstr "Filament Track Switch" @@ -12168,7 +11982,6 @@ msgstr "Сбой обновления" msgid "Update successful" msgstr "Обновление успешно завершено" -# AI Translated msgid "Hotends on Rack" msgstr "Хотэнды на стойке" @@ -12266,9 +12079,8 @@ msgstr "" "Input Shaping поддерживается только в Marlin 2.1.2 и новее.\n" "Обновите прошивку и установите тип G-кода на «Marlin 2»." -# AI Translated msgid "Input shaping is only supported by Klipper, RepRapFirmware and Marlin 2." -msgstr "Input shaping поддерживается только Klipper, RepRapFirmware и Marlin 2." +msgstr "Input shaping поддерживается только в Klipper, RepRapFirmware и Marlin 2." msgid "Grouping error: " msgstr "Ошибка группировки: " @@ -12277,9 +12089,8 @@ msgstr "Ошибка группировки: " msgid " can not be placed in the " msgstr " нельзя заправить в " -# AI Translated msgid "Group error in manual mode. Please check nozzle count or regroup." -msgstr "Ошибка группировки в ручном режиме. Проверьте количество сопел или перегруппируйте." +msgstr "Ошибка группировки в ручном режиме. Проверьте количество сопел или измените группировку." msgid "Internal Bridge" msgstr "Внутренний мост" @@ -12427,10 +12238,10 @@ msgid "Clumping detection is not supported when \"by object\" sequence is enable msgstr "Обнаружение налипаний не поддерживается при печати моделей по очереди." msgid "Enabling both precise Z height and the prime tower may cause slicing errors." -msgstr "Одновременное включение точной высоты Z и башни очистки может вызвать ошибки нарезки." +msgstr "Совместное использование точной высоты Z и черновой башни может вызвать ошибки нарезки." msgid "A prime tower is required for clumping detection; otherwise, there may be flaws on the model." -msgstr "Для обнаружения налипаний требуется башня очистки; в противном случае на модели могут быть дефекты." +msgstr "Для обнаружения налипаний требуется черновая башня; в противном случае на модели могут возникнуть дефекты." msgid "Please select \"By object\" print sequence to print multiple objects in spiral vase mode." msgstr "Выберите последовательность печати «По очереди» для поддержки печати несколько моделей в режиме вазы." @@ -12529,10 +12340,10 @@ msgid "Organic support branch diameter must not be smaller than support tree tip msgstr "Диаметр ветвей органической поддержки не может быть меньше диаметра их кончиков." msgid "The Hollow base pattern is not supported by this support type; Rectilinear will be used instead." -msgstr "Шаблон полого основания не поддерживается этим типом поддержки; вместо него будет использоваться прямолинейный." +msgstr "Шаблон «Полость» не поддерживается этим типом поддержек и будет заменён на «Зигзаг»." msgid "Support enforcers are used but support is not enabled. Please enable support." -msgstr "Используется принудительная поддержка, но её генерация не включена. Пожалуйста, включите генерацию поддержки в настройках слайсера." +msgstr "Используется принудительная поддержка, но её генерация не включена. Включите генерацию поддержек в настройках слайсера." msgid "Layer height cannot exceed nozzle diameter." msgstr "Высота слоя не может быть больше диаметра сопла." @@ -12540,24 +12351,21 @@ msgstr "Высота слоя не может быть больше диамет msgid "Bridge line width must not exceed nozzle diameter" msgstr "Ширина линии моста не может превышать диаметр сопла" -# AI Translated msgid "\"G92 E0\" was found in before_layer_change_gcode, but the G or E are not uppercase. Please change them to the exact uppercase \"G92 E0\"." -msgstr "«G92 E0» обнаружено в before_layer_change_gcode, но G или E не в верхнем регистре. Измените их на точное «G92 E0» в верхнем регистре." +msgstr "В G-коде перед сменой слоя обнаружена команда «G92 E0» с неправильным регистром. Измените регистр «G92 E0» на заглавные буквы." -# AI Translated msgid "\"G92 E0\" was found in layer_change_gcode, but the G or E are not uppercase. Please change them to the exact uppercase \"G92 E0\"." -msgstr "«G92 E0» обнаружено в layer_change_gcode, но G или E не в верхнем регистре. Измените их на точное «G92 E0» в верхнем регистре." +msgstr "В G-коде после смены слоя обнаружена команда «G92 E0» с неправильным регистром. Измените регистр «G92 E0» на заглавные буквы." msgid "Relative extruder addressing requires resetting the extruder position at each layer to prevent loss of floating point accuracy. Add \"G92 E0\" to layer_gcode." msgstr "При относительной адресации экструдера его положение необходимо корректировать на каждом слое, чтобы предотвратить потерю точности с плавающей запятой. Добавьте \"G92 E0\" в G-код выполняемый при смене слоя (layer_gcode)." -# AI Translated +# на самом деле, вполне совместима и часто используется в самих прошивках при сбросе координат msgid "\"G92 E0\" was found in before_layer_change_gcode, which is incompatible with absolute extruder addressing." -msgstr "«G92 E0» обнаружено в before_layer_change_gcode, что несовместимо с абсолютной адресацией экструдера." +msgstr "В G-коде перед сменой слоя обнаружена команда «G92 E0», которая несовместима с абсолютными координатами экструдера." -# AI Translated msgid "\"G92 E0\" was found in layer_change_gcode, which is incompatible with absolute extruder addressing." -msgstr "«G92 E0» обнаружено в layer_change_gcode, что несовместимо с абсолютной адресацией экструдера." +msgstr "В G-коде после смены слоя обнаружена команда «G92 E0», которая несовместима с абсолютными координатами экструдера." #, c-format, boost-format msgid "Plate %d: %s does not support filament %s" @@ -12614,15 +12422,14 @@ msgstr "Компенсация усадки материала не будет msgid "Generating skirt & brim" msgstr "Генерация юбки и каймы" -# AI Translated msgid "" "Per-object skirts cannot fit between the objects in By object print sequence.\n" "\n" "Move the objects farther apart, reduce brim/skirt size, switch Skirt type to Combined, or switch Print sequence to By layer." msgstr "" -"Пообъектные юбки не помещаются между моделями при последовательности печати «По объектам».\n" +"Независимые юбки не помещаются между моделями при печати моделей по очереди.\n" "\n" -"Раздвиньте модели дальше друг от друга, уменьшите размер каймы/юбки, переключите тип юбки на «Комбинированная» или измените последовательность печати на «По слоям»." +"Попробуйте увеличить отступ между моделями, уменьшить размер юбки/каймы, использовать совместный тип юбки или печатать модели послойно." msgid "Exporting G-code" msgstr "Экспорт в G-код" @@ -12642,29 +12449,23 @@ msgstr "Область печати" msgid "Extruder printable area" msgstr "Область печати экструдера" -# AI Translated msgid "Support parallel printheads" -msgstr "Поддержка параллельных печатающих головок" +msgstr "Поддержка параллельных печатающих голов" -# AI Translated msgid "Enable printer settings for machines that can use multiple printheads in parallel." -msgstr "Включает настройки принтера для машин, способных использовать несколько печатающих головок параллельно." +msgstr "Отобразить настройки для принтеров, способных параллельно использовать несколько зависимых печатающих голов." -# AI Translated msgid "Parallel printheads count" -msgstr "Количество параллельных печатающих головок" +msgstr "Количество зависимых голов" -# AI Translated msgid "Set the number of parallel printheads for machines like OrangeStorm Giga printer." -msgstr "Задаёт количество параллельных печатающих головок для машин вроде принтера OrangeStorm Giga." +msgstr "Задаёт количество зависимых печатающих голов для принтеров вроде OrangeStorm Giga." -# AI Translated msgid "Parallel printheads bed exclude areas" -msgstr "Исключаемые зоны стола для параллельных печатающих головок" +msgstr "Области исключения для зависимых голов" -# AI Translated msgid "Ordered list of bed exclude areas by parallel printhead count. Item 1 applies to one printhead, item 2 to two printheads, and so on. Leave an item empty for no excluded area." -msgstr "Упорядоченный список исключаемых зон стола по количеству параллельных печатающих голов. Поле 1 применяется к одной голове, поле 2 — к двум, и так далее. Оставьте поле пустым, если исключаемые зоны отсутствуют." +msgstr "Список исключаемых областей стола, упорядоченный по количеству зависимых голов. 1 – область для одной головы, 2 — область для двух, и т.д. Оставьте пустым, если исключаемые области отсутствуют." msgid "Excluded bed area" msgstr "Область исключения" @@ -12685,23 +12486,21 @@ msgid "This shrinks the first layer on the build plate to compensate for elephan msgstr "Сужает контур первого слоя на заданное значение для компенсации дефекта слоновьей ноги." msgid "Elephant foot compensation layers" -msgstr "Компенсирующих слоёв «слоновьей ноги»" +msgstr "Слои компенсации" msgid "The number of layers on which the elephant foot compensation will be active. The first layer will be shrunk by the elephant foot compensation value, then the next layers will be linearly shrunk less, up to the layer indicated by this value." -msgstr "Количество слоёв, на которые будет распространяться компенсация слоновьей ноги. Первый слой будет уменьшен на величину компенсации слоновьей ноги с последующим линейным уменьшением до слоя, указанного здесь." +msgstr "Количество слоёв для компенсации избытка материала. Сужение контура первого слоя управляется настройкой выше, последующие слои линейно расширяются до нормального размера." msgid "Elephant foot layers density" -msgstr "Плотность слоёв компенсации" +msgstr "Плотность слоя компенсации" -# AI Translated msgid "" "Density of internal solid infill for Elephant foot layers compensation.\n" "The initial value for the second layer is set.\n" "Subsequent layers become linearly denser by the height specified in elefant_foot_compensation_layers." msgstr "" -"Плотность внутреннего сплошного заполнения для компенсации слоёв «слоновьей ноги».\n" -"Задаётся начальное значение для второго слоя.\n" -"Последующие слои линейно уплотняются на высоту, заданную в elefant_foot_compensation_layers." +"Начальное значение плотности сплошного заполнения для компенсации дефекта «слоновьей ноги».\n" +"Позволяет компенсировать избыток материала за счёт снижения плотности первых слоёв с постепенным её восстановлением к слою, указанному выше." msgid "This is the height for each layer. Smaller layer heights give greater accuracy but longer printing time." msgstr "Высота каждого слоя. Чем меньше, тем выше качество поверхности и затраты времени (и наоборот)." @@ -12735,7 +12534,7 @@ msgid "Allow controlling BambuLab's printer through 3rd party print hosts." msgstr "Позволяет управлять принтером BambuLab через сторонние хосты печати." msgid "Use 3MF instead of G-code" -msgstr "Сжимать G-код перед отправкой" +msgstr "Сжатие G-кода перед отправкой" msgid "Enable this if the printer accepts a 3MF file as the print job. When enabled, Orca Slicer sends the sliced file as a .gcode.3mf, instead of a plain .gcode file." msgstr "Рекомендуется для принтеров, поддерживающих печать из архивов 3MF. Файлы печати будут отправляться с расширением \".gcode.3mf\"." @@ -12803,9 +12602,8 @@ msgstr "API-ключ" msgid "HTTP digest" msgstr "HTTP digest-авторизация" -# AI Translated msgid "Configuration for the plugin capabilities this preset uses, overriding the global Capabilities configuration. Stored as a raw JSON array and edited through the dialog behind the button, never typed in directly." -msgstr "Конфигурация возможностей плагинов, используемых этим профилем, переопределяющая глобальную конфигурацию возможностей. Хранится как необработанный массив JSON и редактируется через диалоговое окно за кнопкой, а не вводится напрямую." +msgstr "Настройки функционала плагинов, используемого этим профилем. Переопределяет глобальные настройки функционала. Хранится как необработанный массив JSON и редактируется через диалоговое окно по кнопке." # Логическая ошибка; пересекаются не периметры, а траектория холостого # перемещения со стенкой модели @@ -13255,7 +13053,7 @@ msgstr "" "Фактический поток для поддержек рассчитывается путём умножения этого значения на поток материала и общий поток модели (если он задан)." msgid "Support interface flow ratio" -msgstr "Интерфейс поддержек" +msgstr "Связующие слои" msgid "" "This factor affects the amount of material for the support interface.\n" @@ -13302,6 +13100,7 @@ msgstr "Дополнительные периметры на нависания msgid "Create additional perimeter paths over steep overhangs and areas where bridges cannot be anchored." msgstr "" "Создание дополнительных периметров над крутыми нависаниями и участками, где невозможно закрепить мосты.\n" +"\n" "Внимание: включение этой настройки может повлиять на корректность генерации мостов!" # ??? Реверс на чётных слоях нависаний @@ -13384,7 +13183,7 @@ msgstr "Включение динамического управления ск msgid "Slow down for curled perimeters" msgstr "Замедляться на изогнутых периметрах" -# AI Translated +# Обновил, отформатировал и провёл семантическую оптимизацию #, no-c-format, no-boost-format msgid "" "Enable this option to slow down printing in areas where perimeters may have curled upwards.\n" @@ -13402,20 +13201,20 @@ msgid "" "Note: When this option is enabled, overhang perimeters are treated like overhangs, meaning the overhang speed is applied even if the overhanging perimeter is part of a bridge.\n" "For example, when the perimeters are 100% overhanging, with no wall supporting them from underneath, the 100% overhang speed will be applied." msgstr "" -"Включите эту опцию, чтобы замедлять печать в областях, где периметры могли загнуться вверх.\n" -"Например, дополнительное замедление будет применяться при печати нависаний на острых углах, таких как нос корпуса Benchy, уменьшая загибание, которое накапливается на нескольких слоях.\n" +"Позволяет автоматически замедлять печать в областях, где выступающие периметры могут деформироваться из-за усадки.\n" +"Например, форштевень Benchy, который сильнее подвержен накоплению усадочной деформации.\n" "\n" -"Обычно рекомендуется держать эту опцию включённой, если только охлаждение вашего принтера не достаточно мощное или скорость печати не достаточно низкая, чтобы загибание периметров не происходило. \n" -"При печати с высокой скоростью внешнего периметра этот параметр может вносить артефакты на стенках при замедлении из-за потенциально большого разброса скоростей печати, из-за которого экструдер не успевает за требуемым изменением потока.\n" -"Коренная причина этих артефактов, скорее всего, — слегка неточная настройка PA, особенно в сочетании с большим временем сглаживания PA.\n" +"Рекомендуется использовать в случаях, если скоростной режим, конструкция принтера или его система охлаждения не способны обеспечить качественного сопротивления усадке материала.\n" "\n" -"Рекомендации при включении этой опции:\n" -"1. Уменьшите время сглаживания Pressure Advance до 0,015 - 0,02, чтобы экструдер быстро реагировал на изменения скорости.\n" -"2. Увеличьте минимальные скорости печати, чтобы ограничить величину замедления и уменьшить разброс между быстрыми и медленными участками.\n" -"3. Если артефакты всё ещё появляются, включите сглаживание скорости экструзии (ERS) для дальнейшего сглаживания переходов потока.\n" +"Примечание: отключает скоростной режим мостов для нависающих периметров (передаёт его в управление настройкам нависаний ниже).\n" "\n" -"Примечание: когда эта опция включена, нависающие периметры рассматриваются как нависания, то есть скорость нависания применяется, даже если нависающий периметр является частью моста.\n" -"Например, когда периметры нависают на 100%, без стенки, поддерживающей их снизу, будет применена скорость нависания 100%." +"Внимание: требуется крайне точная настройка коррекции давления. В противном случае при быстрой печати стенок в местах перепада скоростей будут возникать заметные артефакты поверхности.\n" +"\n" +"Рекомендации по настройке:\n" +"1. Уменьшите время сглаживания Pressure Advance до 0.015-0.02, чтобы\n" +"    повысить реактивность экструдера на изменения скорости.\n" +"2. Повысьте ограничения скоростей нависаний.\n" +"3. Если это не помогло, воспользуйтесь сглаживанием расхода." msgid "mm/s or %" msgstr "мм/с или %" @@ -13546,11 +13345,12 @@ msgstr "Послойно" msgid "By object" msgstr "По очереди" -# ???Внутрислойный порядок печати msgid "Intra-layer order" msgstr "Очерёдность моделей" -# AI Translated +# До 2.5.0 было легко и просто, теперь взяли и кучу подкапотных алгоритмов на пользователя вывалили... Упростил, насколько это возможно без потери смысла, чтобы всем угодить. Контекст: в 2.5.0 настройку переработали, чтобы все алгоритмы создавали цикличный маршрут, при котором конечная точка была бы максимально близко к началу (предположительно, следующего слоя). Цикличный маршрут позволяет избежать перемещений над уже напечатанным на слое, что убирает необходимость в Z-hop для простых моделей. PR: https://github.com/OrcaSlicer/OrcaSlicer/pull/13578 +# +# Примечания: Default использует алгоритм Greedy, 2-opt – алгоритм устранения самопересечений. Кратчайший путь проверяет всего 2 стратегии, остальные уже удалены как неэффективные и медленные. msgid "" "Order in which object instances are visited within a single layer, which controls how much travel is spent moving between them.\n" "\n" @@ -13561,23 +13361,26 @@ msgid "" "\n" "With multiple filaments or tools in the same layer, minimizing tool changes takes priority: objects are grouped by filament first and this setting only orders the instances within each filament group, so the overall sequence may not look like the shortest path across the plate." msgstr "" -"Порядок обхода экземпляров моделей в пределах одного слоя; определяет, сколько перемещений тратится на переходы между ними.\n" +"Последовательность печати моделей в пределах одного слоя. Влияет на суммарное время перемещений от модели к модели.\n" "\n" -"По умолчанию: построение цепочки методом ближайшего соседа с последующим улучшением алгоритмом 2-opt и устранением пересечений. Хороший универсальный вариант.\n" -"По списку: экземпляры печатаются в том же порядке, что и в списке моделей, без какой-либо оптимизации пути. Используйте, когда нужен предсказуемый, задаваемый вручную порядок.\n" -"Лучший из всех (кратчайший путь): оцениваются все стратегии и применяется та, что даёт кратчайший путь. Порядок экземпляров моделей определяется один раз для всей печати, а порядок отдельных островков — для каждого слоя, поэтому на разных слоях могут использоваться разные стратегии. Нарезка идёт немного медленнее.\n" -"Змейкой: змеевидный обход ряд за рядом с улучшением алгоритмом 2-opt. Хорошо подходит для регулярных сеток из множества мелких деталей.\n" +"• По умолчанию: поиск ближайших моделей с оптимизацией пути\n" +"   и устранением пересечений. Быстрый универсальный вариант.\n" +"• По списку: сохранять тот же порядок, что и в списке моделей, без\n" +"   какой-либо оптимизации. Полезно для ручной настройки очерёдности.\n" +"• Кратчайший путь: выбор кратчайшего маршрута из всех стратегий.\n" +"   Маршрут может меняться от слоя к слою из-за изменения числа\n" +"   отдельных контуров. Требует больше времени.\n" +"• Змейкой: зигзагообразный маршрут с оптимизацией. Хорошо\n" +"   подходит для массивов из множества мелких деталей.\n" "\n" -"Если в одном слое используется несколько материалов или инструментов, приоритет отдаётся минимизации смен инструмента: модели сначала группируются по материалу, и эта настройка упорядочивает только экземпляры внутри каждой группы, поэтому общая последовательность может не выглядеть как кратчайший путь по столу." +"Примечание: при использовании нескольких материалов приоритет отдаётся минимизации числа их смен. Очерёдность определяется для каждого материала отдельно, и визуально маршрут может казаться неоптимальным." msgid "As object list" msgstr "По списку" -# AI Translated msgid "Best of all (shortest path)" -msgstr "Лучший из всех (кратчайший путь)" +msgstr "Кратчайший путь" -# AI Translated msgid "Snake" msgstr "Змейкой" @@ -13632,17 +13435,17 @@ msgstr "" "Включение вытяжного вентилятора для лучшего охлаждения внутренней области принтера.\n" "Команда G-кода: M106 P3 S(0-255)" -# AI Translated +# Сломано и не отображается, портировано для X2D msgid "Enable this to override the fan speed set in custom G-code during print." -msgstr "Включите, чтобы переопределить скорость вентилятора, заданную в пользовательском G-code во время печати." +msgstr "Заменять процент скорости вентилятора во время печати, указанную через пользовательский G-код." -# AI Translated +# Сломано и не отображается, портировано для X2D msgid "On completion" msgstr "По завершении" -# AI Translated +# Сломано и не отображается, портировано для X2D msgid "Enable this to override the fan speed set in custom G-code after print completion." -msgstr "Включите, чтобы переопределить скорость вентилятора, заданную в пользовательском G-code после завершения печати." +msgstr "Заменить процент скорости вентилятора после завершения печати, указанную через пользовательский G-код." msgid "Speed of exhaust fan during printing. This speed will override the speed in filament custom G-code." msgstr "Скорость вытяжного вентилятора во время печати. Эта скорость переопределяет скорость в пользовательском G-коде материала." @@ -14134,7 +13937,7 @@ msgid "Extruder Color" msgstr "Цвет экструдера" msgid "Only used as a visual help on UI." -msgstr "Используется только в качестве визуальной помощи в пользовательском интерфейсе." +msgstr "Используется для визуализации в интерфейсе слайсера." msgid "Extruder offset" msgstr "Смещение координат экструдера" @@ -14211,11 +14014,11 @@ msgstr "" " • наиболее высокий расход при печати (обычно, заполнения).\n" "Выбор тестируемых ускорений:\n" " • наиболее низкое ускорение из настроек печати\n" -" • наиболее высокое ускорение (не должно превышать\n" -"    рекомендуемый предел калибровщика Input Shaper в Klipper)\n" +" • наиболее высокое ускорение (не должно превышать предел\n" +"    рекомендуемого шейпера в Klipper)\n" "\n" -"2. Выпишите коэффициенты PA по примеру выше для каждой пары расхода/ускорения. Удельный расход можно посмотреть в «Просмотре нарезки», выбрав режим отображения «Объёмный расход». Значение отображается над горизонтальной шкалой печати слоя. Особенности:\n" -"• Как правило, значение PA должно снижаться с повышением расхода.\n" +"2. Выпишите коэффициенты PA по примеру выше для каждой пары расхода/ускорения. Значения расхода можно посмотреть в «Просмотре нарезки», выбрав режим отображения «Объёмный расход». Значение отображается над горизонтальной шкалой печати слоя. Особенности:\n" +"• Как правило, коэффициент должен снижаться с повышением расхода.\n" "   Если это не так, проверьте экструдер и корректность тестов.\n" "• Диапазон PA растёт со снижением скоростей и ускорений.\n" "• Если разницы между тестами не наблюдается, выбирайте PA из\n" @@ -14226,7 +14029,6 @@ msgstr "" msgid "Enable adaptive pressure advance within features (beta)" msgstr "Адаптироваться к изменениям линии" -# AI Translated msgid "" "Enable adaptive PA whenever there are flow changes in a feature, such as line width changes in a corner or overhangs.\n" "\n" @@ -14234,11 +14036,11 @@ msgid "" "\n" "This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues." msgstr "" -"Включает адаптивный PA всякий раз, когда в элементе есть изменения потока, например изменение ширины линии на углу или нависаниях.\n" +"Экспериментальный режим смены коэффициента РА прямо посреди печати линии для адаптации к изменениям расхода на ней (например, на нависаниях или периметрах переменной ширины).\n" "\n" -"Несовместимо с принтерами Prusa, так как они делают паузу для обработки изменений PA, что вызывает задержки и дефекты.\n" +"Предупреждение: неточный подбор значений РА может привести к дефектам при работе этой настройки.\n" "\n" -"Это экспериментальная опция: если профиль PA задан неточно, это вызовет проблемы с однородностью." +"Внимание: несовместимо с принтерами Prusa, поскольку им требуется остановка для изменения коэффициента РА." msgid "Static pressure advance for bridges" msgstr "Фиксированный PA на мостах" @@ -14309,18 +14111,18 @@ msgid "Minimum HRC of nozzle required to print the filament. A value of 0 means msgstr "Минимальная твёрдость материала сопла (HRC), необходимая для печати материалом. 0 – отключение проверки твёрдости сопел." msgid "Filament map to extruder" -msgstr "Назначение филамента на экструдер" +msgstr "Назначение материала на экструдер" msgid "Filament map to extruder." -msgstr "Назначение филамента на экструдер." +msgstr "Назначение материала на экструдер." msgid "Auto For Flush" msgstr "Авто для прочистки" +# Не смог найти в интерфейсе msgid "Auto For Match" msgstr "Авто для сопоставления" -# AI Translated msgid "Nozzle Manual" msgstr "Ручная настройка сопел" @@ -14330,9 +14132,8 @@ msgstr "Температура прочистки" msgid "Temperature when flushing filament. 0 indicates the upper bound of the recommended nozzle temperature range." msgstr "Температура при прочистке. 0 – использовать максимально допустимую температуру." -# AI Translated msgid "Flush temperature used in fast purge mode." -msgstr "Температура прочистки, используемая в режиме быстрой прочистки." +msgstr "Температура в режиме быстрой прочистки." msgid "Flush volumetric speed" msgstr "Расход при прочистке" @@ -14402,9 +14203,9 @@ msgid "" "\n" "Note: Experimental and incomplete feature imported from BBS. Functional for some profiles that already have the variable saved." msgstr "" -"При включении поток экструзии ограничивается меньшим из расчётного значения (вычисленного по ширине линии и высоте слоя) и заданного пользователем максимального потока. При отключении применяется только заданный пользователем максимальный поток.\n" +"Регулирует значение максимального расхода при печати тонких и узких линий для достижения оптимальной линейной скорости. По сути, ограничивает расход материала в случаях, когда завышенная скорость движения сопла не позволяет материалу надёжно спекаться с предыдущим слоем.\n" "\n" -"Примечание: экспериментальная и неполная функция, перенесённая из BBS. Работает для некоторых профилей, в которых уже сохранена эта переменная." +"Внимание: требует настройки модели расхода и пока работает только у преднастроенных производителем профилей материалов." msgid "Max volumetric speed multinomial coefficients" msgstr "Коэффициенты расчёта максимального расхода" @@ -14496,28 +14297,27 @@ msgstr "Мин. объём прочистки на черновой башне" msgid "After a tool change, the exact position of the newly loaded filament inside the nozzle may not be known, and the filament pressure is likely not yet stable. Before purging the print head into an infill or a sacrificial object, Orca Slicer will always prime this amount of material into the wipe tower to produce successive infill or sacrificial object extrusions reliably." msgstr "После смены инструмента, точное положение вновь загруженного прутка внутри него может быть неизвестно, и давление прутка, вероятно, ещё не стабильно. Перед тем, как очистить печатающую головку в заполнение или в «жертвенную» модель Orca Slicer всегда будет выдавливать это количество материала на черновую башню, чтобы обеспечить надёжную печать заполнения или «жертвенной» модели." -# AI Translated +# Не реализовано msgid "Wipe tower cooling" -msgstr "Охлаждение черновой башни" +msgstr "Охлаждение на черновой башне" -# AI Translated msgid "Temperature drop before entering filament tower" -msgstr "Снижение температуры перед входом в башню материала" +msgstr "Снижение температуры перед входом в башню" msgid "Interface layer pre-extrusion distance" -msgstr "Расстояние предэкструзии слоя интерфейса" +msgstr "Дистанция избыточной подачи при смене" msgid "Pre-extrusion distance for prime tower interface layer (where different materials meet)." -msgstr "Расстояние предэкструзии слоя интерфейса башни очистки (где соприкасаются разные материалы)." +msgstr "Протяжённость первичного движения прочистки после смены материала. Позволяет быстро набрать давление в сопле и сбросить перегретый материал.\n\nПримечание: фактическая длина может быть ограничена шириной башни." msgid "Interface layer pre-extrusion length" -msgstr "Длина предэкструзии слоя интерфейса" +msgstr "Длина прутка для избыточной подачи" msgid "Pre-extrusion length for prime tower interface layer (where different materials meet)." -msgstr "Длина предэкструзии слоя интерфейса башни очистки (где соприкасаются разные материалы)." +msgstr "Длина прутка, которую необходимо продавить на этапе избыточной подачи.\n\n0 – отключить этот этап." msgid "Tower ironing area" -msgstr "Разглаживание черновой башни" +msgstr "Разглаживание кончиков" # У H2D не требует, на Вики при этом написано, что требует... В баганном порте # "улучшений" башни вообще не работает ни при каких обстоятельствах. @@ -14530,15 +14330,18 @@ msgstr "" msgid "mm²" msgstr "мм²" +# Сломано и ни на что не влияет, даже на H2D и даже в Bambu Studio. msgid "Interface layer purge length" msgstr "Прочистка на слое интерфейса" +# Из ченжлогов Bambu: Studio will do nozzle wiping before flushing rather than after flushing, and print the prime tower directly, reducing extrusion volume fluctuations and improving layer height consistency. Added a new parameter for interface-layer flushing length. msgid "Purge length for prime tower interface layer (where different materials meet)." -msgstr "Длина прочистки на слое интерфейса башни (где соприкасаются разные материалы)." +msgstr "В настоящее время ничего не делает. Задумывалось как настройка расстояния внешней очистки сопла перед основной процедурой его прочистки." msgid "Interface layer print temperature" msgstr "Температура при прочистке" +# Не используется, настройка сломана. Перевёл на случай, если починят в будущем. msgid "Print temperature for prime tower interface layer (where different materials meet). If set to -1, use max recommended nozzle temperature." msgstr "" "Целевая температура при печати слоёв прочистки в черновой башне (место контакта разных материалов).\n" @@ -14613,11 +14416,9 @@ msgstr "Пригодный для печати" msgid "The filament is printable in extruder." msgstr "Материалом можно печатать через экструдер." -# AI Translated msgid "Filament-extruder compatibility" msgstr "Совместимость материала и экструдера" -# AI Translated msgid "A single 32-bit int encoding the compatibility level of a filament across all extruders (up to 10). Every 3 bits represent one extruder (bits [3*i, 3*i+2] for extruder i). 0: printable, 1: error, 2: critical warning, 3: warning, 4-7: reserved." msgstr "Одно 32-битное целое число, кодирующее уровень совместимости материала со всеми экструдерами (до 10). Каждые 3 бита представляют один экструдер (биты [3*i, 3*i+2] для экструдера i). 0: пригоден для печати, 1: ошибка, 2: критическое предупреждение, 3: предупреждение, 4-7: зарезервировано." @@ -14863,36 +14664,35 @@ msgstr "" "Внимание: параметр является устаревшим и в новых версиях Klipper был переименован в \"minimum_cruise_ratio\"." msgid "Default jerk." -msgstr "Рывок по умолчанию." +msgstr "Рывки по умолчанию." msgid "Marlin Firmware Junction Deviation (replaces the traditional XY Jerk setting)." msgstr "Junction Deviation для прошивки Marlin (заменяет традиционную настройку рывка XY)." msgid "Jerk of outer walls." -msgstr "Рывок для внешних периметров." +msgstr "Рывки на внешних периметрах." msgid "Jerk of inner walls." -msgstr "Рывок для внутренних периметров." +msgstr "Рывки на внутренних периметрах." msgid "Jerk for top surface." -msgstr "Рывок для верхней поверхности." +msgstr "Рывки на верхней поверхности." msgid "Jerk for infill." -msgstr "Рывок для заполнения." +msgstr "Рывки на заполнении." msgid "Jerk for the first layer." -msgstr "Рывок для первого слоя." +msgstr "Рывки на первом слое." msgid "Jerk for travel." -msgstr "Рывок при перемещении." +msgstr "Рывки при перемещениях." -# AI Translated msgid "" "Travel jerk of first layer.\n" "The percentage value is relative to Travel Jerk." msgstr "" -"Рывок перемещения первого слоя.\n" -"Процентное значение задаётся относительно рывка перемещения." +"Рывки при перемещениях на первом слое.\n" +"Можно указать процент от рывков при обычных перемещениях." msgid "Line width of the first layer. If expressed as a %, it will be computed over the nozzle diameter." msgstr "Ширина линий первого слоя. Можно указать процент от диаметра сопла." @@ -15015,7 +14815,7 @@ msgid "Ironing line spacing" msgstr "Интервал линий" msgid "Filament-specific override for ironing line spacing. This allows you to customize the spacing between ironing lines for each filament type." -msgstr "Индивидуальная настройка расстояния между линиями разглаживания для каждого типа филамента." +msgstr "Замещение интервала между линиями разглаживания. Позволяет настроить интервал отдельно для каждого материала." # "Разглаживание" явно задано в заголовке раздела msgid "Ironing inset" @@ -15115,7 +14915,7 @@ msgid "" msgstr "" "Тип шума, используемый для генерации нечёткой оболочки.\n" "\n" -"• Случайный: равномерно резкий шум.\n" +"• Классический: равномерно резкий шум.\n" "• Шум Перлина: согласованный однородный шум.\n" "• Волновой: более резкий вариант шума Перлина.\n" "• Ребристый: резкий сглаженный шум с мраморной текстурой.\n" @@ -15124,9 +14924,9 @@ msgstr "" "\n" "Примечание: для разных алгоритмов оптимальны разные масштабы." -# Поменял на "случайный" из-за нехватки места. +# Поменял на "случайный" из-за нехватки места. UPD: Вернул из-за конфликта с генератором периметров msgid "Classic" -msgstr "Случайный" +msgstr "Классический" msgid "Perlin" msgstr "Шум Перлина" @@ -15312,31 +15112,28 @@ msgstr "Наилучшее расположение модели при авто msgid "Enable this option if machine has auxiliary part cooling fan. G-code command: M106 P2 S(0-255)." msgstr "" -"Если в принтере имеется вспомогательный вентилятор для охлаждения моделей (обычно это боковой вентилятор), можете включить эту опцию.\n" +"Включить управление вспомогательным вентилятором из настроек материала.\n" "Команда G-кода: M106 P2 S(0-255)." -# AI Translated msgid "Fan direction" msgstr "Направление вентилятора" -# AI Translated msgid "Cooling fan direction of the printer" -msgstr "Направление вентилятора охлаждения принтера" +msgstr "Направление потока охлаждения вспомогательного вентилятора" -# AI Translated msgid "Both" -msgstr "Оба" +msgstr "Обе стороны" +# "only custom start G-code" в Орке не существует. Вероятно, забыли стереть при портировании из SuperSlicer. msgid "" "Start the fan this number of seconds earlier than its target start time (you can use fractional seconds). It assumes infinite acceleration for this time estimation, and will only take into account G1 and G0 moves (arc fitting is unsupported).\n" "It won't move fan commands from custom G-code (they act as a sort of 'barrier').\n" "It won't move fan commands into the start G-code if the 'only custom start G-code' is activated.\n" "Use 0 to deactivate." msgstr "" -"Запуск вентилятора на указанное количество секунд раньше целевого времени запуска (поддерживаются доли секунды). При этом предполагается бесконечное ускорение для оценки этого времени, и учёт только перемещений G1 и G0 (Аппроксимация дугами).\n" -"Это не приведёт к сдвигу команд вентилятора из пользовательских G-кодов (они действуют как своего рода барьер).\n" -"Это не приведёт к сдвигу команд вентилятора в стартовом G-коде, если активировано «только пользовательский стартовый G-код».\n" -"Установите 0 для отключения." +"Сместить управление вентилятором на заданное время для его запуска заранее. Можно указать дробное количество секунд.\n" +"\n" +"Примечание: расчёт смещения не учитывает ускорения, команды движения по дуге (аппроксимацию дугами) и пользовательский G-код." msgid "Only overhangs" msgstr "Только на нависаниях" @@ -15352,7 +15149,8 @@ msgid "" "This is useful for fans where a low PWM/power may be insufficient to get the fan started spinning from a stop, or to get the fan up to speed faster.\n" "Set to 0 to deactivate." msgstr "" -"Время принудительного запуска (kick-start) вентилятора на максимальной скорости, после чего скорость снижается до целевой. Это необходимо для вентиляторов у которых низкое значение уровня ШИМ/мощности может быть недостаточен для запуска вентилятора после остановки или для более быстрого увеличения скорости его вращения.\n" +"Время принудительного запуска на максимальных оборотах перед выходом на заданный процент скорости. Полезно для повышения отзывчивости вентиляторов с инертным ротором (а также в случаях, когда для его страгивания требуется дополнительное усилие).\n" +"\n" "Установите 0 для отключения." msgid "Minimum non-zero part cooling fan speed" @@ -15396,16 +15194,15 @@ msgid "" "Enable this if printer support air filtration\n" "G-code command: M106 P3 S(0-255)" msgstr "" -"Если в принтере имеется вытяжной вентилятор и вам требуется дополнительное охлаждение внутренней области принтера, включите эту опцию.\n" +"Включить управление вытяжным вентилятором из настроек материала.\n" "Команда G-кода: M106 P3 S(0-255)" -# AI Translated +# Из ченжлогов Bambu: Added a filtering option with cooling mode for the adaptive air circulation system. This option can be enabled via the slicer or the printer UI, and it's mainly used to filter the air when exhausting the air for low-temperature filaments msgid "Use cooling filter" -msgstr "Использовать фильтр охлаждения" +msgstr "Охлаждать через фильтр" -# AI Translated msgid "Enable this if printer support cooling filter" -msgstr "Включите, если принтер поддерживает фильтр охлаждения" +msgstr "Включить управление вытяжным вентилятором." msgid "G-code flavor" msgstr "Тип G-кода" @@ -15586,33 +15383,29 @@ msgstr "Угол нависания заполнения" msgid "The angle of the infill angled lines. 60° will result in a pure honeycomb." msgstr "Угол нависания линий заполнения. При 60° получаются правильные соты." -# AI Translated msgid "Lightning overhang angle" -msgstr "Угол нависания для «Молнии»" +msgstr "Наклон поверхности для поддержки молнией" -# AI Translated msgid "Maximum overhang angle for Lightning infill support propagation." -msgstr "Максимальный угол нависания для распространения поддержки заполнения «Молния»." +msgstr "Максимальный угол наклона внутренних поверхностей для их поддержки отдельными ветвями молнии." -# AI Translated msgid "Prune angle" -msgstr "Угол обрезки" +msgstr "Наклон опор" -# AI Translated +# Оооочень технично. Самая главная проблема в понимании – шаблон генерируется "сверху вниз" (а не наоборот, как можно бы подумать), из-за чего и возникает вся эта техничность в содержании подсказок. На Вики чуть понятнее, но всё равно чрезвычайно технично. Убрал описание тонкостей фильтрации алгоритма и заменил на то, что по сути делает настройка. msgid "" "Controls how aggressively short or unsupported Lightning branches are pruned.\n" "This angle is converted internally to a per-layer distance." msgstr "" -"Определяет, насколько агрессивно обрезаются короткие или неподдерживаемые ветви «Молнии».\n" -"Внутренне этот угол преобразуется в расстояние на слой." +"Допустимый наклон опор молнии. Чем выше, тем быстрее и экономичнее распространяются её ветви." -# AI Translated +# "Выпрямление" здесь, вопреки первой мысли – это как раз-таки наоборот искажение шаблона по ходу печати для сокращения количества ветвей. Короче, опять путаница из-за того, что генерация ветвей происходит сверху вниз. При печати снизу вверх шаблон именно что искажается. msgid "Straightening angle" -msgstr "Угол выпрямления" +msgstr "Наклон локальных искажений" -# AI Translated +# При минимальном значении сразу понятно, что делает. Может стоит это указать, чтобы людям было проще осваивать настройку. msgid "Maximum straightening angle used to simplify Lightning branches." -msgstr "Максимальный угол выпрямления, используемый для упрощения ветвей «Молнии»." +msgstr "Дополнительные искажения позволяют эффективнее объединять опоры для ветвей. Чем больше наклон, тем сильнее может искажаться контур молнии." msgid "Sparse infill anchor length" msgstr "Длина привязок шаблона заполнения" @@ -15983,37 +15776,30 @@ msgstr "Минимальная скорость холостых перемещ msgid "Minimum travel speed (M205 T)" msgstr "Минимальная скорость перемещения без печати (M205 T)" -# AI Translated msgid "Maximum force of the Y axis" msgstr "Максимальное усилие оси Y" -# AI Translated +# По сути, перемножение массы на ускорение msgid "The allowed maximum output force of Y axis" -msgstr "Допустимое максимальное выходное усилие оси Y" +msgstr "Максимально допустимое усилие по оси Y." -# AI Translated msgid "N" msgstr "Н" -# AI Translated msgid "Bed mass of the Y axis" -msgstr "Масса стола по оси Y" +msgstr "Масса стола (оси Y)" -# AI Translated msgid "The machine bed mass load of Y axis" -msgstr "Массовая нагрузка стола машины по оси Y" +msgstr "Пассивная нагрузка механики оси Y массой стола." -# AI Translated msgid "g" msgstr "г" -# AI Translated msgid "The allowed max printed mass" -msgstr "Допустимая максимальная масса печати" +msgstr "Максимально допустимая масса печати" -# AI Translated msgid "The allowed max printed mass on a plate" -msgstr "Допустимая максимальная масса печати на столе" +msgstr "Максимально допустимая масса деталей на столе." msgid "Maximum acceleration for extruding" msgstr "Максимальное ускорение при печати" @@ -16171,8 +15957,9 @@ msgid "The highest printable layer height for the extruder. Used to limit the ma msgstr "Максимальная высота слоя для печати этим экструдером. Используется в качестве ограничения при использовании адаптивной высоты слоя." msgid "Extrusion rate smoothing" -msgstr "Сглаживание подачи" +msgstr "Сглаживание расхода" +# Провёл семантическую оптимизацию, очень уж длинно расписано. Плюс убрал про PrusaSlicer, т.к. в локализациях одинаково. + пояснения про скорость/ширину, т.к. Орка теперь умеет напрямую раскрашивать расход без необходимости считать его ручками. msgid "" "This parameter smooths out sudden extrusion rate changes that happen when the printer transitions from printing a high flow (high speed/larger width) extrusion to a lower flow (lower speed/smaller width) extrusion and vice versa.\n" "\n" @@ -16188,16 +15975,15 @@ msgid "" "\n" "Note: this parameter disables arc fitting." msgstr "" -"Сглаживает резкие изменения скорости подачи материала, которые происходят при переходе от печати с большим расходом (высокая скорость/большая ширина линии) к печати с меньшим расходом (меньшая скорость/меньшая ширина) и наоборот.\n" +"Сглаживает резкие изменения скорости подачи материала, которые происходят при переходе от печати с бóльшим расходом к печати с меньшим (и наоборот).\n" +"\n" +"По сути, ограничение производной от расхода: ограничивает скорость, с которой расход материала может меняться за единицу времени. Чем выше лимит, тем быстрее может меняться расход.\n" "\n" -"Параметр задаёт максимальную скорость, с которой расход материала может измениться за единицу времени. Чем выше лимит, тем быстрее может меняться расход материала. \n" "Установите 0 для отключения.\n" "\n" -"Для скоростных принтеров с прямой системой подачи и производительным экструдером (например, Bambu lab или Voron) сглаживание подачи обычно не требуется. Однако в некоторых случаях, когда скорость печати сильно различается, это может принести дополнительную пользу. Например, когда происходят резкие замедления из-за нависаний. В этих случаях рекомендуется использовать высокое значение, составляющее около 300-350 мм³/с², при оптимально настроенном Pressure Advance (коррекции давления) это поможет достичь более плавного перехода.\n" +"Для скоростных принтеров с производительным экструдером сглаживание обычно не требуется, но может быть полезным в местах с высоким перепадом скоростей. Например, для сглаживания замедлений при печати нависаний. При точно настроенной коррекции давления (коэффициент PA и время сглаживания) значения около 300-350 мм³/с² помогут дополнительно сгладить такие места.\n" "\n" -"У более медленных принтеров с внешней системой подачи или прошивкой без коррекции давления значение должно быть значительно ниже. 10-15 мм³/с² является хорошей отправной точкой для экструдеров с прямой подачей и 5-10 мм³/с² для внешней.\n" -"\n" -"В Prusa Slicer эта функция известна как «Сглаживание расхода» (Pressure equalizer).\n" +"Для более медленных принтеров с внешней системой подачи или прошивкой без коррекции давления значение должно быть гораздо ниже: 10-15 мм³/с² при прямой подаче и 5-10 мм³/с² при внешней.\n" "\n" "Примечание: при ненулевом значении отключает аппроксимацию дугами." @@ -16205,7 +15991,7 @@ msgid "mm³/s²" msgstr "мм³/с²" msgid "Smoothing segment length" -msgstr "Длина сглаживающего сегмента" +msgstr "Протяжённость сглаживания" msgid "" "A lower value results in smoother extrusion rate transitions. However, this results in a significantly larger G-code file and more instructions for the printer to process.\n" @@ -16220,14 +16006,13 @@ msgstr "" "\n" "Допустимые значения: 0,5–5" -# ??? msgid "Apply only on external features" -msgstr "Применять только к видимым элементам" +msgstr "Применять только к видимым элементам" msgid "Applies extrusion rate smoothing only on external perimeters and overhangs. This can help reduce artefacts due to sharp speed transitions on externally visible overhangs without impacting the print speed of features that will not be visible to the user." msgstr "" -"Сглаживание скорости экструзии будет применяться только к внешним периметрам и нависаниям.\n" -"Это помогает уменьшить количество артефактов, вызванные резкими перепадами скорости на видимых внешних участках, без влияния на скорость печати внутренних элементов, которые не видны пользователю." +"Применять сглаживание расхода только к внешним периметрам и нависаниям.\n" +"Помогает компенсировать видимые артефакты перепада скоростей без влияния на скорость печати внутренних элементов." msgid "Minimum speed for part cooling fan." msgstr "Минимальная скорость вентилятора обдува модели." @@ -16236,29 +16021,28 @@ msgid "" "Speed of auxiliary part cooling fan. Auxiliary fan will run at this speed during printing except the first several layers which is defined by no cooling layers.\n" "Please enable auxiliary_fan in printer settings to use this feature. G-code command: M106 P2 S(0-255)" msgstr "" -"Скорость вращения вспомогательного вентилятора для охлаждения моделей. Обычно это боковой вентилятор. Он всегда будет работать с этой скоростью, за исключением первых нескольких слоёв, которые обычно настроены на работу без охлаждения.\n" -"Пожалуйста, включите вспомогательный вентилятор для охлаждения моделей (auxiliary_fan) в настройках принтера, чтобы использовать эту функцию.\n" +"Процент скорости вспомогательного вентилятора для охлаждения моделей. Используется на протяжении всей печати (кроме слоёв, указанных в разделе «Охлаждение начала печати»).\n" +"Для работы этой настройки необходимо включить поддержку вспомогательного вентилятора на стороне принтера в его профиле.\n" "Команда G-кода: M106 P2 S(0-255)." -# AI Translated msgid "For the first" msgstr "Для первых" -# AI Translated msgid "Set special auxiliary cooling fan for the first certain layers." -msgstr "Задаёт особую скорость вспомогательного вентилятора обдува для первых нескольких слоёв." +msgstr "Особая скорость вспомогательного вентилятора для первых нескольких слоёв." -# AI Translated msgid "" "Auxiliary fan speed will be ramped up linearly from layer \"For the first\" to maximum at layer \"Full fan speed at layer\".\n" "\"Full fan speed at layer\" will be ignored if lower than \"For the first\", in which case the fan will run at maximum allowed speed at layer \"For the first\" + 1." msgstr "" -"Скорость вспомогательного вентилятора будет линейно увеличиваться от слоя «Для первых» до максимума на слое «Полная скорость вентилятора на слое».\n" -"«Полная скорость вентилятора на слое» будет проигнорирована, если она меньше «Для первых»; в этом случае вентилятор будет работать на максимально допустимой скорости на слое «Для первых» + 1." +"Начиная с указанного слоя, интенсивность охлаждения будет равномерно меняться для перехода к требуемым условиям обдува детали.\n" +"\n" +"Если активна настройка «Не обдувать первые N слоёв» – с учётом этих слоёв.\n" +"\n" +"Примечание: если слоёв с заблокированным обдувом больше, чем указано здесь, то восстановление происходит моментально на первом доступном слое." -# AI Translated msgid "Special auxiliary cooling fan speed, effective only for the first x layers." -msgstr "Особая скорость вспомогательного вентилятора обдува, действует только для первых x слоёв." +msgstr "Особая скорость вспомогательного вентилятора для первых N слоёв." msgid "The lowest printable layer height for the extruder. Used to limit the minimum layer height when enable adaptive layer height." msgstr "Минимальная высота слоя для печати этим экструдером. Используется в качестве ограничения при использовании адаптивной высоты слоя." @@ -16380,9 +16164,9 @@ msgstr "Глухие отверстия в основании модели ра msgid "Detect overhang walls" msgstr "Обнаруживать нависающие периметры" -#, fuzzy, c-format, boost-format +#, c-format, boost-format msgid "This detects the overhang percentage relative to line width and uses a different speed to print. For 100%% overhang, bridging speed is used." -msgstr "Определяет процент нависания относительно ширины линии и использует разную скорость печати. Для 100%-го нависания используется скорость печати мостов." +msgstr "Использовать разную скорость печати в зависимости от выноса линии относительно её опоры. Для нависаний без опоры используется скорость печати мостов." # В секции "Материал для линий" msgid "Outer walls" @@ -16440,17 +16224,15 @@ msgstr "G-код при смене типа линии (настройки пе msgid "This G-code is inserted when the extrusion role is changed. It runs after the machine and filament extrusion role G-code." msgstr "Команды в G-коде, которые выполняются между печатью разных элементов структуры (например, при переходе от периметра к заполнению). Выполняются после команд смены типа линии из настроек принтера и материала." -# AI Translated msgid "Plugins Used" msgstr "Используемые плагины" -# AI Translated +# Функционал плагинов для этого прояиля, указывается... msgid "Plugin capabilities referenced by this preset, stored as name;uuid;capability." -msgstr "Возможности плагинов, на которые ссылается этот профиль, хранятся как name;uuid;capability." +msgstr "Функционал плагинов, на который ссылается этот профиль, указывается как name;uuid;capability." -# AI Translated msgid "Python plugin(s) invoked at each slicing pipeline step to read and modify intermediate slicing data, including a final G-code post-processing step. Research/experimental." -msgstr "Плагины Python, вызываемые на каждом шаге конвейера нарезки для чтения и изменения промежуточных данных нарезки, включая финальный шаг постобработки G-code. Исследовательская/экспериментальная функция." +msgstr "Python-плагины, вызываемые на каждом этапе нарезки для чтения и изменения промежуточных её данных (включая финальную постобработку G-кода). Тестовая/экспериментальная функция." msgid "Printer type" msgstr "Тип принтера" @@ -16519,18 +16301,17 @@ msgstr "" "\n" "Примечание: значение не может быть меньше 25% или больше 100% и будет скорректировано автоматически при нарезке." -# AI Translated msgid "Retract amount after wipe" -msgstr "Величина отката после обтирания" +msgstr "Вторичный откат" -# AI Translated #, no-c-format, no-boost-format msgid "" "The length of fast retraction after wipe, relative to retraction length.\n" "The value will be clamped by 100% minus the retract amount before the wipe value." msgstr "" -"Длина быстрого отката после обтирания относительно длины отката.\n" -"Значение будет ограничено 100% минус величина отката до обтирания." +"Быстрый откат после очистки, выраженный в процентах от общей длины отката. В некоторых случаях позволяет значительно снизить количество «паутины»." +"\n" +"Примечание: суммарное значение не должно превышать 100% и будет скорректировано автоматически." msgid "Retract on layer change" msgstr "Откат при смене слоя" @@ -16657,18 +16438,16 @@ msgstr "Прямой (Direct)" msgid "Bowden" msgstr "Внешний (Bowden)" -# AI Translated +# https://wiki.bambulab.com/ru/h2c/manual/bambu-studio-h2c-operation#:~:text=Гибридный msgid "Hybrid" msgstr "Гибридный" -# Разобраться позже: wiki.bambulab.com/en/software/bambu-studio/filament-track-switch-dynamic-mapping -# AI Translated +# https://wiki.bambulab.com/ru/software/bambu-studio/filament-track-switch-dynamic-mapping msgid "Enable filament dynamic map" -msgstr "Включить динамическое сопоставление материалов" +msgstr "Динамическое сопоставление материалов" -# AI Translated msgid "Enable dynamic filament mapping during print." -msgstr "Включает динамическое сопоставление материалов во время печати." +msgstr "Включить динамическое сопоставление материалов во время печати." msgid "Has filament switcher" msgstr "Автосмена материала" @@ -16695,15 +16474,13 @@ msgid "Deretraction speed" msgstr "Скорость возврата" msgid "Speed for reloading filament into the nozzle. Zero means same speed of retraction." -msgstr "Скорость возврата материала в экструдер после отката. При значении 0 используется скорость отката." +msgstr "Скорость возврата материала в сопло после отката.\n0 – использовать скорость отката." -# AI Translated msgid "Deretraction speed (extruder change)" -msgstr "Скорость подачи (смена экструдера)" +msgstr "Скорость возврата (смена экструдера)" -# AI Translated msgid "Speed for reloading filament into the nozzle when switching extruder." -msgstr "Скорость возврата материала в сопло при смене экструдера." +msgstr "Скорость возврата материала в сопло после смены экструдера." msgid "Use firmware retraction" msgstr "Откат на уровне прошивки" @@ -16964,13 +16741,13 @@ msgstr "Тип юбки" # Про расширенное описание см. в комментарии к перевод подсказки настройки "Skirt minimum extrusion length" msgid "Combined - single skirt for all objects, Per object - individual object skirt." msgstr "" -"Выбор типа печатаемой юбки – одна общая для всех моделей или отдельные юбки для каждой модели.\n" +"Выбор типа печатаемой юбки – одна общая для всех моделей или независимые юбки для каждой модели.\n" "\n" "Внимание: при создании индивидуальных юбок проверка пересечения не совершается, из-за чего при близком расположении моделей они могут накладываться друг на друга. В таких случаях рекомендуется понизить количество контуров." # Отдельный (антоним к "совместный") msgid "Per object" -msgstr "Для каждой модели" +msgstr "Независимый" msgid "Skirt loops" msgstr "Контуров юбки" @@ -17076,21 +16853,20 @@ msgstr "" "Можно указать своё конечное значение потока, чтобы избежать подобных проблем." msgid "If smooth or traditional mode is selected, a timelapse video will be generated for each print. After each layer is printed, a snapshot is taken with the chamber camera. All of these snapshots are composed into a timelapse video when printing completes. If smooth mode is selected, the toolhead will move to the excess chute after each layer is printed and then take a snapshot. Since the melt filament may leak from the nozzle during the process of taking a snapshot, a prime tower is required for smooth mode to wipe the nozzle." -msgstr "На протяжении всей печати встроенная камера делает снимки, которые затем объединяются в ускоренное видео. Избыточные резкие движения в кадре можно сгладить при помощи соответствующего режима; после печати каждого слоя для создания снимка экструдер будет отводиться к лотку для удаления излишков. В этом режиме необходима черновая башня для устранения возможных подтёков во время создания снимка." +msgstr "На протяжении всей печати в конце слоя встроенная камера делает снимки, которые затем объединяются в ускоренное видео. Избыточные резкие движения в кадре можно сгладить при помощи «Плавного» режима, в котором для создания снимка экструдер будет отводиться к лотку для сброса материала. В этом режиме необходима черновая башня для устранения возможных подтёков во время создания снимка." msgid "Traditional" -msgstr "По умолчанию" +msgstr "Обычный" +# Для кнопки "Сгладить" добавили контекст, теперь их можно разделить. msgid "Smooth" -msgstr "Сгладить" +msgstr "Плавный" -# AI Translated msgid "Farthest point timelapse" -msgstr "Таймлапс из дальней точки" +msgstr "Съёмка из дальней точки" -# AI Translated msgid "When enabled, the timelapse snapshot is taken at the farthest point from camera instead of traveling to the wipe tower or excess chute. Only effective in traditional timelapse mode on non-I3 printers." -msgstr "Когда включено, снимок таймлапса делается из наиболее удалённой от камеры точки вместо перемещения к черновой башне или лотку сброса излишков. Действует только в традиционном режиме таймлапса на принтерах, отличных от I3." +msgstr "Делать снимки из наиболее удалённой от камеры точки вместо перемещения к черновой башне или лотку для сброса материала. Работает только в обычном режиме таймлапса на принтерах с кинематикой, отличной от I3." msgid "Temperature variation" msgstr "Разница температур" @@ -17140,10 +16916,10 @@ msgid "Enable this option to omit the custom Change filament G-code only at the msgstr "Полезно для смены материала вручную при совместной печати через общий экструдер, где для этого используются команды M600/PAUSE. Отключает выполнение «G-кода смены материала» в самом начале печати (обычно это не требуется, так как пруток уже заправлен). Команда смены инструмента (например, T0) будет пропускаться на протяжении всей печати." msgid "Wipe tower type" -msgstr "Тип башни очистки" +msgstr "Тип черновой башни" msgid "Choose the wipe tower implementation for multi-material prints. Type 1 is recommended for Bambu and Qidi printers with a filament cutter. Type 2 offers better compatibility with multi-tool and MMU printers and provide overall better compatibility." -msgstr "Выберите реализацию башни очистки для многоматериальной печати. Тип 1 рекомендуется для принтеров Bambu и Qidi с обрезчиком филамента. Тип 2 обеспечивает лучшую совместимость с многоинструментальными и MMU-принтерами и в целом более универсален." +msgstr "Выбор реализации черновой башни при печати несколькими материалами. Тип 1 рекомендуется для принтеров Bambu и Qidi с обрезкой прутка. Тип 2 – универсальный вариант с поддержкой широкого спектра принтеров (в т.ч. с системами смены материала и инструментов)." msgid "Type 1" msgstr "Тип 1" @@ -17780,24 +17556,22 @@ msgstr "" "\n" "Примечание: влияет только на принтеры Bambu, в остальных случаях башня автоматически сужается по необходимости." -# ??? настройка отключена в коде +# настройка отключена в коде msgid "Purging volumes" msgstr "Объём прочистки" -# ??? настройка отключена в коде +# настройка отключена в коде msgid "Flush multiplier" msgstr "Множитель прочистки" msgid "The actual flushing volumes is equal to the flush multiplier value multiplied by the flushing volumes in the table." msgstr "Реальные объёмы прочистки равны произведению множителя и значений, указанных в таблице." -# AI Translated msgid "Flush multiplier (Fast mode)" msgstr "Множитель прочистки (быстрый режим)" -# AI Translated msgid "The flush multiplier used in fast purge mode." -msgstr "Множитель прочистки, используемый в режиме быстрой прочистки." +msgstr "Множитель для режима быстрой прочистки." msgid "Prime volume" msgstr "Объём сброса материала на черновой башне" @@ -17805,24 +17579,20 @@ msgstr "Объём сброса материала на черновой баш msgid "This is the volume of material to prime the extruder with on the tower." msgstr "Объём материала, который необходимо выдавить для подготовки экструдера на черновой башне." -# AI Translated msgid "Prime volume mode" -msgstr "Режим объёма подготовки" +msgstr "Режим прочистки" -# AI Translated msgid "Selects how the wipe-tower prime and flush volumes are computed on multi-extruder printers." -msgstr "Определяет, как вычисляются объёмы подготовки и прочистки черновой башни на многоэкструдерных принтерах." +msgstr "Режим расчёта прочистки на черновой башне для многоэкструдерных принтеров." -# AI Translated msgid "Saving" msgstr "Экономия" -# AI Translated msgid "Fast" msgstr "Быстрый" msgid "This is the width of prime towers." -msgstr "Размер черновой башни по оси X. Размер по оси Y будет автоматически вычислен исходя из необходимого объёма очистки и ширины башни. Таким образом, увеличивая ширину башни вы уменьшаете её длину и наоборот." +msgstr "Размер черновой башни по оси X. Размер по оси Y будет автоматически вычислен исходя из необходимого объёма прочистки и ширины башни. Таким образом, увеличивая ширину башни вы уменьшаете её длину и наоборот." msgid "Wipe tower rotation angle" msgstr "Угол поворота черновой башни" @@ -17854,7 +17624,7 @@ msgid "" "For the wipe tower external perimeters the internal perimeter speed is used regardless of this setting." msgstr "" "Максимальная скорость печати при очистке в черновую башню и печати её разреженных слоёв.\n" -"Во время очистки программа сопоставляет скорость разреженного заполнения и скорость, рассчитанную по 'максимальному объёмному расходу', и использует наименьшую.\n" +"Во время прочистки программа сопоставляет скорость разреженного заполнения и скорость, рассчитанную по 'максимальному объёмному расходу', и использует наименьшую.\n" "При печати разреженных слоёв программа сопоставляет скорость внутренних периметров и скорость, рассчитанную по 'максимальному объёмному расходу', и также использует наименьшую.\n" "\n" "Увеличение этой скорости может повлиять на устойчивость башни, а также увеличить силу, с которой сопло сталкивается с любыми наплывами, которые могли образоваться на черновой башне.\n" @@ -17888,7 +17658,7 @@ msgid "Extra rib length" msgstr "Вынос основания ребра" msgid "Positive values can increase the size of the rib wall, while negative values can reduce the size. However, the size of the rib wall can not be smaller than that determined by the cleaning volume." -msgstr "Положительное значение может увеличить длину ребра, а отрицательное - уменьшить. Однако она не может быть меньше размера, определяемого объёмом очистки." +msgstr "Положительное значение может увеличить длину ребра, а отрицательное - уменьшить. Однако она не может быть меньше размера, определяемого объёмом прочистки." msgid "Rib width" msgstr "Ширина ребра" @@ -18150,79 +17920,62 @@ msgstr "" "\n" "Примечание: периметр может расширяться до ширины элемента." -# AI Translated msgid "Hotend change time" msgstr "Время смены хотэнда" -# AI Translated msgid "Time to change hotend." -msgstr "Время смены хотэнда." +msgstr "Время, затрачиваемое на смену хотэнда." -# AI Translated msgid "Hotend change" msgstr "Смена хотэнда" -# AI Translated msgid "When changing the hotend, it is recommended to extrude a certain length of filament from the original nozzle. This helps minimize nozzle oozing." -msgstr "При смене хотэнда рекомендуется выдавить определённую длину материала из исходного сопла. Это помогает минимизировать вытекание из сопла." +msgstr "При смене хотэнда рекомендуется выдавить немного материала из прежнего сопла. Помогает минимизировать последующие подтёки." -# AI Translated msgid "Extruder change" msgstr "Смена экструдера" msgid "To prevent oozing, the nozzle will perform a reverse travel movement for a certain period after the ramming is complete. The setting define the travel time." -msgstr "Чтобы материал не подтекал, материал после рэмминга немного отъезжает назад. Этот параметр задаёт время движения в обратном направлении." +msgstr "Время движения сопла в обратном направлении во избежание подтёков из него. Выполняется по завершении рэмминга." msgid "To prevent oozing, the nozzle temperature will be cooled during ramming. Therefore, the ramming time must be greater than the cooldown time. 0 means disabled." -msgstr "Для предотвращения подтекания материала, температура сопла будет снижена во время рэмминга. Поэтому время рэмминга должно быть больше времени охлаждения. 0 значит отключено." +msgstr "Во избежание подтёков температура сопла будет снижена на время рэмминга. Поэтому время рэмминга должно быть больше времени охлаждения. 0 значит отключено." -# AI Translated msgid "The maximum volumetric speed for ramming before extruder change, where -1 means using the maximum volumetric speed." -msgstr "Максимальный объёмный расход при рэмминге перед сменой экструдера, где -1 означает использование максимального объёмного расхода." +msgstr "Максимальный объёмный расход для рэмминга перед сменой экструдера.\n-1 – использовать максимальный расход." -# AI Translated msgid "To prevent oozing, the nozzle temperature will be cooled during ramming. Note: only a cooldown command and fan activation are triggered, reaching the target temperature is not guaranteed. 0 means disabled." -msgstr "Во избежание вытекания температура сопла будет снижена во время рэмминга. Примечание: срабатывают только команда охлаждения и включение вентилятора; достижение целевой температуры не гарантируется. 0 означает отключено." +msgstr "Во избежание подтёков температура сопла будет снижена на время рэмминга.\n0 – не менять температуру.\n\nПримечание: срабатывают только команда охлаждения и включение вентилятора; достижение целевой температуры не гарантируется." -# AI Translated msgid "The maximum volumetric speed for ramming before a hotend change, where -1 means using the maximum volumetric speed." -msgstr "Максимальный объёмный расход при рэмминге перед сменой хотэнда, где -1 означает использование максимального объёмного расхода." +msgstr "Максимальный объёмный расход для рэмминга перед сменой хотэнда.\n-1 – использовать максимальный расход." -# AI Translated msgid "length when change hotend" -msgstr "длина при смене хотэнда" +msgstr "Откат при смене хотэнда" -# AI Translated msgid "When this retraction value is modified, it will be used as the amount of filament retracted inside the hotend before changing hotends." -msgstr "При изменении этого значения отката оно будет использоваться как величина отката материала внутри хотэнда перед сменой хотэндов." +msgstr "Величина отката материала внутри хотэнда перед его сменой." -# AI Translated msgid "Support fast purge mode" -msgstr "Поддержка режима быстрой прочистки" +msgstr "Режим быстрой прочистки" -# AI Translated msgid "Whether this printer supports fast purge mode with optimized temperature and multiplier." -msgstr "Поддерживает ли этот принтер режим быстрой прочистки с оптимизированной температурой и множителем." +msgstr "Поддерживает ли принтер режим быстрой прочистки с оптимизированной температурой и множителем." -# AI Translated msgid "Filament change" msgstr "Смена материала" -# AI Translated msgid "The volume of material required to prime the extruder on the tower, excluding a hotend change." -msgstr "Объём материала, необходимый для подготовки экструдера на башне, исключая смену хотэнда." +msgstr "Объём материала, необходимый для прочистки экструдера на башне, не считая смены хотэнда." -# AI Translated msgid "The volume of material required to prime the extruder for a hotend change on the tower." -msgstr "Объём материала, необходимый для подготовки экструдера при смене хотэнда на башне." +msgstr "Объём материала, необходимый для прочистки экструдера на башне при смене хотэнда." -# AI Translated msgid "Preheat temperature delta" -msgstr "Дельта температуры предварительного нагрева" +msgstr "Дельта преднагрева" -# AI Translated msgid "Temperature delta applied during pre-heating before tool change." -msgstr "Дельта температуры, применяемая при предварительном нагреве перед сменой инструмента." +msgstr "Разница температуры для предварительного нагрева перед сменой инструмента." msgid "Detect narrow internal solid infills" msgstr "Оптимизация заполнения узких мест" @@ -18345,11 +18098,11 @@ msgstr "Экспорт настроек в файл." # командная строка? нужен ли пеевод? msgid "Send progress to pipe" -msgstr "Отправлять прогресс в канал" +msgstr "Send progress to pipe" # ??? это относится к командной строке msgid "Send progress to pipe." -msgstr "Отправлять прогресс в канал." +msgstr "Send progress to pipe." msgid "Arrange Options" msgstr "Параметры расстановки" @@ -18499,15 +18252,14 @@ msgstr "" msgid "Log file" msgstr "Файл журнала" -# AI Translated msgid "Redirects debug logging to file.\n" -msgstr "Перенаправляет отладочный журнал в файл.\n" +msgstr "Направляет отладочные записи в файл.\n" msgid "Enable timelapse for print" msgstr "Вкл. таймлапс для печати" msgid "If enabled, this slicing will be considered using timelapse." -msgstr "Если включено, текущая нарезка будет выполнена с учётом функции таймлапса." +msgstr "Выполнять нарезку с учётом записи таймлапса." msgid "Load custom G-code" msgstr "Загрузить пользовательский G-код" @@ -18515,7 +18267,7 @@ msgstr "Загрузить пользовательский G-код" msgid "Load custom G-code from json." msgstr "Загрузить G-код из json." -# ??? назначить идентификаторы +# назначить идентификаторы msgid "Load filament IDs" msgstr "Загрузить идентификаторы материалов" @@ -18525,7 +18277,6 @@ msgstr "Загрузить идентификаторы материалов д msgid "Allow multiple colors on one plate" msgstr "Игнорировать разницу в цвете" -# ???? msgid "If enabled, Arrange will allow multiple colors on one plate." msgstr "Если включено, модели разных цветов не будут разделяться на разные столы." @@ -18574,9 +18325,8 @@ msgstr "Список значений метаданных, добавляемы msgid "Allow 3MF with newer version to be sliced" msgstr "Разрешить нарезку 3MF более новой версии" -# ??? msgid "Allow 3MF with newer version to be sliced." -msgstr "Разрешить нарезку новых версий 3MF-файлов." +msgstr "Разрешить нарезку проектов из более новых версий." msgid "Current Z-hop" msgstr "Подъём оси Z" @@ -18921,13 +18671,13 @@ msgid "" "An object's XY size compensation will not be used because it is also color-painted.\n" "XY Size compensation cannot be combined with color-painting." msgstr "" -"Коррекция горизонтальных размеров модели не будет действовать, поскольку для этой модели была выполнена операция окрашивания.\n" -"Коррекция горизонтальных размеров модели не может использоваться в сочетании с функцией раскрашивания." +"Функция «Расширение контура/пустот слоя» игнорируется.\n" +"Коррекцию невозможно выполнить для нескольких материалов в окрашенной модели." msgid "" "An object has enabled XY Size compensation which will not be used because it is also fuzzy skin painted.\n" "XY Size compensation cannot be combined with fuzzy skin painting." -msgstr "Функция «Расширение контура слоя» игнорируется. Коррекцию контура слоя невозможно выполнить, если его часть принадлежит нечёткой оболочке." +msgstr "Функция «Расширение контура/пустот слоя» игнорируется. Коррекцию невозможно выполнить, если часть слоя принадлежит нечёткой оболочке." msgid "Object name" msgstr "Имя модели" @@ -19078,7 +18828,7 @@ msgstr "" #, c-format, boost-format msgid "Only one of the results with the same name: %s will be saved. Are you sure you want to override the other results?" -msgstr "Будет сохранён только один из одноимённых результатов (%s). Вы действительно хотите перезаписать остальные?" +msgstr "Будет сохранён только один из одноимённых результатов (%s). Перезаписать остальные?" #, c-format, boost-format msgid "There is already a previous calibration result with the same name: %s. Only one result with a name is saved. Are you sure you want to overwrite the previous result?" @@ -19089,7 +18839,7 @@ msgid "" "Within the same extruder, the name(%s) must be unique when the filament type, nozzle diameter, and nozzle flow are the same.\n" "Are you sure you want to override the historical result?" msgstr "" -"Для одного экструдера имя (%s) должно быть уникальным, если тип материала, диаметр сопла и поток одинаковы.\n" +"В рамках одного экструдера имя (%s) должно быть уникальным, если тип материала, диаметр сопла и поток одинаковы.\n" "Перезаписать прошлый результат?" #, c-format, boost-format @@ -19221,13 +18971,11 @@ msgstr "Введите имя для сохранения на принтере. msgid "The name cannot exceed 40 characters." msgstr "Максимальная длина имени 40 символов." -# AI Translated msgid "Nozzle ID" msgstr "ID сопла" -# AI Translated msgid "Standard Flow" -msgstr "Стандартный расход" +msgstr "Обычный расход" msgid "Please find the best line on your plate" msgstr "Пожалуйста, найдите лучшую линию на столе" @@ -19394,7 +19142,7 @@ msgstr "История успешных результатов калибров msgid "Refreshing the previous Flow Dynamics Calibration records" msgstr "Обновление записей прошлых калибровок динамики потока" -# AI Translated +# Подставляется toolhead_display_name #, c-format, boost-format msgid "Note: The hotend number on the %s is tied to the holder. When the hotend is moved to a new holder, its number will update automatically." msgstr "Примечание: номер хотэнда на %s привязан к держателю. При перемещении хотэнда в новый держатель его номер обновится автоматически." @@ -19411,7 +19159,7 @@ msgstr "Редактировать калибровку динамики пот #, c-format, boost-format msgid "Within the same extruder, the name '%s' must be unique when the filament type, nozzle diameter, and nozzle flow are identical. Please choose a different name." -msgstr "Для одного экструдера имя «%s» должно быть уникальным при одинаковых типе филамента, диаметре и потоке сопла. Пожалуйста, выберите другое имя." +msgstr "В рамках одного экструдера имя (%s) должно быть уникальным, если тип материала, диаметр сопла и поток одинаковы. Укажите другое имя." msgid "New Flow Dynamic Calibration" msgstr "Новая калибровка динамики потока" @@ -19457,19 +19205,19 @@ msgstr "" "По имени хоста %1% обнаружено несколько IP-адресов.\n" "Выберите адрес для использования." -# AI Translated +# В калибровке температуры и расхода msgid "Auto-scale for nozzle" -msgstr "Автомасштабирование под сопло" +msgstr "Адаптация к соплу" -# AI Translated +# Речь о температурной башне msgid "" "This model is designed around a 0.4 mm nozzle with a 0.2 mm layer height. \n" "When the scaling option is enabled (recommended), it dynamically resizes to match your current nozzle diameter and an appropriate layer height, making the test both accurate and easy to read.\n" "Turn scaling off only if you wish to print the reference model exactly as-is." msgstr "" -"Эта модель рассчитана на сопло 0,4 мм и высоту слоя 0,2 мм. \n" -"Если включено масштабирование (рекомендуется), размер модели динамически подстраивается под диаметр вашего текущего сопла и подходящую высоту слоя, благодаря чему тест получается и точным, и легко читаемым.\n" -"Отключайте масштабирование, только если хотите напечатать эталонную модель ровно в исходном виде." +"Тестовая модель рассчитана на сопло 0,4 мм и высоту слоя 0,2 мм.\n" +"При включении адаптации (рекомендуется) её размер динамически подстраивается под диаметр текущего сопла и подходящую высоту слоя, благодаря чему тест получается более точным и читаемым.\n" +"Отключать имееет смысл для печати эталонной модели ровно в исходном виде." # В заголовке окна куча места msgid "PA Calibration" @@ -19607,13 +19355,14 @@ msgstr "Начальная скорость: " msgid "End speed: " msgstr "Конечная скорость: " -# AI Translated msgid "Auto-adjust to max volumetric speed" -msgstr "Автоподстройка под предел объёмного расхода" +msgstr "Адаптация к расходу" -# AI Translated msgid "If the end speed would exceed the filament's maximum volumetric speed, automatically lower the layer height (keeping standard values and staying within the machine's limits) to reach it. If even the minimum layer height is not enough, lower the end speed instead." -msgstr "Если конечная скорость превысит предел объёмного расхода материала, автоматически уменьшать высоту слоя (сохраняя стандартные значения и оставаясь в пределах ограничений принтера), чтобы её достичь. Если даже минимальной высоты слоя недостаточно, вместо этого снижается конечная скорость." +msgstr "" +"Автоматически уменьшать высоту слоя для обеспечения требуемой скорости. Позволяет не упираться в предел объёмного расхода материала.\n" +"\n" +"Примечание: скорость всё равно может снижаться в случае упора в минимальную высоту слоя из заданных ограничений принтера." msgid "" "Please input valid values:\n" @@ -19626,7 +19375,6 @@ msgstr "" "Шаг ≥ 0\n" "Конечное > начальное + шаг" -# AI Translated #, c-format, boost-format msgid "" "The end speed (%.0f mm/s) exceeds the filament's maximum volumetric speed (%.1f mm³/s), which limits the outer wall to about %.0f mm/s at this line width and layer height.\n" @@ -19634,23 +19382,20 @@ msgid "" "\n" "%s" msgstr "" -"Конечная скорость (%.0f мм/с) превышает предел объёмного расхода материала (%.1f мм³/с), который при такой ширине линии и высоте слоя ограничивает скорость внешних периметров примерно до %.0f мм/с.\n" -" Более высокие скорости будут ограничены, поэтому верхние блоки башни не напечатаются с заданной скоростью.\n" +"Конечная скорость (%.0f мм/с) приводит к превышению предела объёмного расхода материала (%.1f мм³/с). При такой ширине линии периметров и высоте слоя расход ограничивает линейную скорость примерно до %.0f мм/с, и верхние сегменты башни не смогут достичь заданной скорости.\n" "\n" "%s" -# AI Translated #, c-format, boost-format msgid "" "The end speed (%.0f mm/s) exceeds the filament's maximum volumetric speed (%.1f mm³/s) at the default layer height (%.2f mm).\n" "\n" "The layer height has been reduced to %.2f mm (a value used by this printer's profiles) so the tower can reach the requested speed." msgstr "" -"Конечная скорость (%.0f мм/с) превышает предел объёмного расхода материала (%.1f мм³/с) при высоте слоя по умолчанию (%.2f мм).\n" +"Конечная скорость (%.0f мм/с) приводит к превышению предела объёмного расхода материала (%.1f мм³/с) при высоте слоя по умолчанию (%.2f мм).\n" "\n" -"Высота слоя уменьшена до %.2f мм (значение, используемое профилями этого принтера), чтобы башня могла достичь заданной скорости." +"Высота слоя уменьшена до %.2f мм (минимально значение из профиля принтера), чтобы башня могла достичь заданной скорости." -# AI Translated #, c-format, boost-format msgid "" "Even at the smallest layer height used by this printer's profiles (%.2f mm) the end speed (%.0f mm/s) exceeds the filament's maximum volumetric speed (%.1f mm³/s).\n" @@ -19659,23 +19404,20 @@ msgid "" "\n" "Continue?" msgstr "" -"Даже при наименьшей высоте слоя, используемой профилями этого принтера (%.2f мм), конечная скорость (%.0f мм/с) превышает предел объёмного расхода материала (%.1f мм³/с).\n" +"Конечная скорость (%.0f мм/с) приводит к превышению предела объёмного расхода материала (%.1f мм³/с) даже при минимально допустимой высоте слоя (в соответствии с профилем принтера, %.2f мм).\n" "\n" -"Высота слоя будет установлена в %.2f мм, а конечная скорость снижена до %.0f мм/с.\n" +"Высота слоя будет установлена на %.2f мм, а конечная скорость снижена до %.0f мм/с.\n" "\n" "Продолжить?" -# AI Translated msgid "Continue anyway?" msgstr "Всё равно продолжить?" -# AI Translated msgid "Enable \"Auto-adjust\" to fix this automatically, or continue anyway?" -msgstr "Включить «Автоподстройку» для автоматического исправления или всё равно продолжить?" +msgstr "Включить адаптацию к расходу для автоматического исправления?\nНет – игнорировать предупреждение." -# AI Translated msgid "Enable \"Auto-scale for nozzle\" and \"Auto-adjust\" to fix this automatically, or continue anyway?" -msgstr "Включить «Автомасштабирование под сопло» и «Автоподстройку» для автоматического исправления или всё равно продолжить?" +msgstr "Включить адаптацию к соплу и расходу для автоматического исправления?\nНет – игнорировать предупреждение." msgid "Start retraction length: " msgstr "Начальная длина отката: " @@ -20173,10 +19915,10 @@ msgid "Create Nozzle for Existing Printer" msgstr "Сопло для принтера" msgid "Create from Template" -msgstr "Создать из шаблона" +msgstr "Создать из общих шаблонов" msgid "Create Based on Current Printer" -msgstr "Создать на основе профиля выбранного принтера" +msgstr "Создать из профилей производителя" msgid "Import Preset" msgstr "Импорт профиля" @@ -20305,8 +20047,8 @@ msgid "" "The system preset does not allow creation. \n" "Please re-enter the printer model or nozzle diameter." msgstr "" -"Системный профиль не допускает создания.\n" -"Пожалуйста, повторно введите модель принтера или диаметр сопла." +"Имя совпадает с системным профилем.\n" +"Назовите модель принтера или диаметр сопла иначе." msgid "" "\n" @@ -20500,11 +20242,12 @@ msgid "" "All the filament presets belong to this filament would be deleted.\n" "If you are using this filament on your printer, please reset the filament information for that slot." msgstr "" -"Все профили прутка, относящиеся к этому материалу, будут удалены.\n" -"Если вы используете этот пруток в принтере, пожалуйста, сбросьте информацию о прутке для этого слота." +"Все профили, относящиеся к этому материалу, будут удалены.\n" +"Если вы используете его в принтере, сбросьте информацию о\n" +"нём у соответствующего слота." msgid "Delete filament" -msgstr "Удаление прутка" +msgstr "Удаление материала" msgid "Add Preset" msgstr "Добавить профиль" @@ -20513,13 +20256,13 @@ msgid "Add preset for new printer" msgstr "Добавление профиля для нового принтера" msgid "Copy preset from filament" -msgstr "Копировать профиль из прутка" +msgstr "Копировать профиль из материала" msgid "The filament choice not find filament preset, please reselect it" -msgstr "Не удалось найти профиль прутка. Выберите его повторно" +msgstr "Не удалось найти профиль материала. Выберите его повторно" msgid "[Delete Required]" -msgstr "[Необходимо удалить]" +msgstr "[Требуется удаление]" msgid "Edit Preset" msgstr "Изменить профиль" @@ -20586,8 +20329,8 @@ msgid "" "The currently selected nozzle type of %s extruder does not match the actual printer nozzle type.\n" "Please click the Sync button above and restart the calibration." msgstr "" -"Выбранный тип сопла экструдера %s не соответствует фактическому типу сопла принтера.\n" -"Нажмите кнопку «Синхронизация» выше и перезапустите калибровку." +"Выбранный тип сопла экструдера (%s) не соответствует фактическому типу сопла принтера.\n" +"Нажмите кнопку синхронизации выше и перезапустите калибровку." msgid "Unable to calibrate: maybe because the set calibration value range is too large, or the step is too small" msgstr "Невозможно выполнить калибровку: возможно, установленный диапазон значений калибровки слишком велик или шаг слишком мал" @@ -21249,11 +20992,9 @@ msgstr "Ошибка печати" msgid "Removed" msgstr "Удалено" -# AI Translated msgid "Enable smart filament assign: Assign one filament to multiple nozzles to maximize savings" -msgstr "Включить умное назначение материалов: назначайте один материал нескольким соплам для максимальной экономии" +msgstr "Включить умное назначение материалов: назначить один материал нескольким соплам для максимальной экономии" -# AI Translated msgid "Fila Saving" msgstr "Экономия материала" @@ -21292,10 +21033,10 @@ msgstr "Видеоурок" msgid "(Sync with printer)" msgstr " (состояние принтера)" -# AI Translated +# Отвратительная подстановка левое/правое и тип расхода сопла #, c-format, boost-format msgid "Error: %s extruder has no available %s nozzle, current group result is invalid." -msgstr "Ошибка: у экструдера %s нет доступного сопла %s, текущий результат группировки недействителен." +msgstr "Ошибка: %s сопло не поддерживает требуемый расход (%s), результат текущей группировки недействителен." msgid "We will slice according to this grouping method:" msgstr "Осуществлять нарезку в соответствии с этой группировкой:" @@ -21303,15 +21044,12 @@ msgstr "Осуществлять нарезку в соответствии с msgid "Tip: You can drag the filaments to reassign them to different nozzles." msgstr "Совет: для назначения материала перетащите его в нужное поле." -# AI Translated msgid "Please adjust your grouping or click " -msgstr "Отрегулируйте группировку или нажмите " +msgstr "Измените группировку или нажмите " -# AI Translated msgid " to set nozzle count" msgstr " для задания количества сопел" -# AI Translated msgid "Set the physical nozzle count..." msgstr "Задать физическое количество сопел..." @@ -21548,7 +21286,7 @@ msgid "Skipping objects." msgstr "Исключение объектов." msgid "Select Filament" -msgstr "Выбрать филамент" +msgstr "Выбрать материал" msgid "Null Color" msgstr "Цвет не задан" @@ -21581,7 +21319,7 @@ msgstr "Ошибка: %s" msgid "Show details" msgstr "Подробнее" -# AI Translated +# В информации о сетевом плагине msgid "Hide details" msgstr "Скрыть подробности" @@ -21610,9 +21348,8 @@ msgstr "Установить обновление" msgid "(Latest)" msgstr "(новейшая)" -# AI Translated msgid "(installed)" -msgstr "(установлено)" +msgstr "(установлена)" msgid "The Bambu Network Plug-in has been installed successfully." msgstr "Сетевой плагин Bambu успешно установлен." @@ -21664,7 +21401,6 @@ msgstr "Сохранить как настройки по умолчанию" msgid "If enabled, the values above are stored as the defaults used for future STEP imports (and shown in Preferences)." msgstr "Активируйте для сохранения настроек импорта после его завершения." -# AI Translated msgid "PresetBundle" msgstr "PresetBundle" @@ -21691,7 +21427,6 @@ msgstr "Удаление пакета" msgid "Unsubscribe bundle?" msgstr "Отписаться от пакета?" -# AI Translated msgid "UnsubscribeBundle" msgstr "UnsubscribeBundle" @@ -21702,11 +21437,9 @@ msgstr "Не удалось отписаться от пакета." msgid "Unsubscribe Bundle" msgstr "Ошибка" -# AI Translated msgid "ExportPresetBundle" msgstr "ExportPresetBundle" -# AI Translated msgid "Save preset bundle" msgstr "Сохранить пакет профилей" @@ -21760,190 +21493,146 @@ msgstr "Просмотр архива" msgid "Open File" msgstr "Открыть файл" -# AI Translated msgid "AMS Dryness Control" msgstr "Управление сушкой AMS" -# AI Translated msgid "Filament Drying Settings" msgstr "Настройки сушки материала" -# AI Translated msgid "Stopping" msgstr "Остановка" -# AI Translated msgid "Unable to dry temporarily due to ..." msgstr "Временно невозможно выполнить сушку из-за ..." -# AI Translated msgid "Drying Error" msgstr "Ошибка сушки" -# AI Translated msgid "Please check the Assistant for troubleshooting" msgstr "Обратитесь к Помощнику для устранения неполадок" -# AI Translated msgid "Please remove and store the filament (as shown)." msgstr "Извлеките и уберите материал на хранение (как показано)." -# AI Translated msgid "The AMS can rotate the filament which is properly stored, providing better drying results." -msgstr "AMS может вращать правильно уложенный на хранение материал, обеспечивая лучший результат сушки." +msgstr "AMS может вращать правильно уложенный на хранение материал, тем самым улучшая эффективность сушки." -# AI Translated msgid "Rotate spool when drying" msgstr "Вращать катушку при сушке" -# AI Translated msgctxt "amsdrying" msgid "Back" msgstr "Назад" -# AI Translated msgid "Drying-Heating" msgstr "Сушка — нагрев" -# AI Translated msgid "Drying-Dehumidifying" -msgstr "Сушка — осушение" +msgstr "Сушка — вывод влаги" -# AI Translated msgid " maximum drying temperature is " msgstr " максимальная температура сушки — " -# AI Translated msgid " minimum drying temperature is " msgstr " минимальная температура сушки — " -# AI Translated msgid "This filament may not be completely dried." -msgstr "Этот материал может быть высушен не полностью." +msgstr "Сушка этого материала может не быть эффективной." -# AI Translated msgid "This AMS is currently printing. To ensure print quality, the drying temperature cannot exceed the recommended drying temperature." -msgstr "Этот AMS сейчас печатает. Для обеспечения качества печати температура сушки не может превышать рекомендованную температуру сушки." +msgstr "AMS сейчас печатает. Во избежание проблем с печатью температура сушки не должна превышать рекомендованную." -# AI Translated msgid "The temperature shall not exceed the filament's heat distortion temperature" -msgstr "Температура не должна превышать температуру тепловой деформации материала" +msgstr "Температура сушки не должна превышать температуру размягчения материала." -# AI Translated msgid "Minimum time value cannot be less than 1." -msgstr "Минимальное значение времени не может быть меньше 1." +msgstr "Минимальное время не может быть меньше 1." -# AI Translated msgid "Maximum time value cannot be greater than 24." -msgstr "Максимальное значение времени не может быть больше 24." +msgstr "Максимальное время не может быть больше 24." -# AI Translated msgid "Insufficient power" -msgstr "Недостаточно питания" +msgstr "Нехватка мощности" -# AI Translated msgid " Too many AMS drying simultaneously. Please plug in the power or stop other drying processes before starting." -msgstr " Слишком много AMS сушат одновременно. Подключите питание или остановите другие процессы сушки перед началом." +msgstr " Слишком много AMS выполняют сушку. Подключите питание или остановите другие сеансы сушки перед началом." -# AI Translated msgid "AMS is busy" -msgstr "AMS занят" +msgstr "AMS занята" -# AI Translated msgid " AMS is calibrating | reading RFID | loading/unloading material, please wait." -msgstr " AMS калибруется | считывает RFID | загружает/выгружает материал, подождите." +msgstr " AMS калибруется | считывает RFID | меняет материал, подождите." -# AI Translated +# на Вики бамбу есть упоминание: https://wiki.bambulab.com/ru/h2/troubleshooting/hmscode/0700_2000_0002_0025#:~:text=выходного%20отверстия%20AMS msgid "Filament in AMS outlet" msgstr "Материал в выходном отверстии AMS" -# AI Translated msgid " The high drying temperature may cause AMS blockage, please unload first." -msgstr " Высокая температура сушки может вызвать засорение AMS, сначала выгрузите материал." +msgstr " Из-за высокой температуры сушки пруток может застрять в AMS, сначала выгрузите материал." -# AI Translated msgid "Initiating AMS drying" msgstr "Запуск сушки AMS" -# AI Translated msgid "Not supported in 2D mode" -msgstr "Не поддерживается в режиме 2D" +msgstr "Не поддерживается в 2D-режиме" -# AI Translated msgid "Task in progress" msgstr "Выполняется задача" -# AI Translated +# CannotDryReason: DryingInProgress msgid " The AMS might be in use during Task." -msgstr " AMS может использоваться во время задачи." +msgstr " AMS может иметь задачи в процессе." -# AI Translated msgid " Firmware update in progress, please wait..." msgstr " Выполняется обновление прошивки, подождите..." -# AI Translated msgid " Please plug in the power and then use the drying function." msgstr " Подключите питание, а затем используйте функцию сушки." -# AI Translated msgid " The high drying temperature may cause AMS blockage. Please unload the filament manually before proceeding." -msgstr " Высокая температура сушки может вызвать засорение AMS. Перед продолжением выгрузите материал вручную." +msgstr " Из-за высокой температуры сушки пруток может застрять в AMS. Перед продолжением выгрузите материал вручную." -# AI Translated msgid "System is busy" msgstr "Система занята" -# AI Translated msgid " Initiating other drying processes, please wait a few seconds..." msgstr " Запускаются другие процессы сушки, подождите несколько секунд..." -# AI Translated msgid "For better drying results, remove the filament and allow it to rotate." -msgstr "Для лучшего результата сушки извлеките материал и дайте ему вращаться." +msgstr "Для лучшего результата сушки извлеките материал и включите вращение катушки." -# AI Translated msgid "The AMS will automatically rotate the stored filament slots to enhance the drying performance." -msgstr "AMS будет автоматически вращать слоты с уложенным на хранение материалом для повышения эффективности сушки." +msgstr "AMS будет автоматически вращать слоты с хранящимися катушками для повышения эффективности сушки." -# AI Translated msgid "Alternatively, you can dry the filament without removing it." -msgstr "Кроме того, вы можете сушить материал, не извлекая его." +msgstr "Кроме того, сушить материал можно без его извлечения." -# AI Translated msgid "Unknown filaments will be treated as PLA." msgstr "Неизвестные материалы будут рассматриваться как PLA." -# AI Translated msgid "Please store the filament marked with an exclamation mark." msgstr "Уберите на хранение материал, отмеченный восклицательным знаком." -# AI Translated msgid "Filament left in the feeder during drying may soften because the drying temperature exceeds the softening point of materials like PLA and TPU." -msgstr "Материал, оставленный в подающем механизме во время сушки, может размягчиться, поскольку температура сушки превышает точку размягчения таких материалов, как PLA и TPU." +msgstr "Заправленный материал может размягчиться во время сушки, поскольку её сушки превышает точку размягчения материалов вроде PLA и TPU." -# AI Translated msgid "Starting: Checking adapter connection" msgstr "Запуск: проверка подключения адаптера" -# AI Translated msgid "Starting: Checking filament status" msgstr "Запуск: проверка состояния материала" -# AI Translated msgid "Starting: Checking drying presets" msgstr "Запуск: проверка профилей сушки" -# AI Translated msgid "Starting: Checking filament location" msgstr "Запуск: проверка расположения материала" -# AI Translated msgid "Starting: Checking air intake" msgstr "Запуск: проверка забора воздуха" -# AI Translated msgid "Starting: Checking air vent" -msgstr "Запуск: проверка вентиляционного отверстия" +msgstr "Запуск: проверка вентиляции" msgid "The filament may not be compatible with the current machine settings. Generic filament presets will be used." msgstr "Материал может быть несовместим с текущими настройками принтера. Будет использоваться базовый профиль материала." @@ -21953,14 +21642,14 @@ msgstr "Материал может быть несовместим с теку # подобных). Она задаётся вручную в файле профиля (производителем) и # отсутствует у большинства системных профилей. msgid "The filament model is unknown. Still using the previous filament preset." -msgstr "Модель филамента неизвестна. Используется предыдущий профиль филамента." +msgstr "Модель материала неизвестна. Используется предыдущий профиль материала." # Не знаю, что за "модель" материала, пропускаю. Возможно, имеется ввиду # модель коррекции объёмного расхода для функции адаптивного расхода у TPU (и # подобных). Она задаётся вручную в файле профиля (производителем) и # отсутствует у большинства системных профилей. msgid "The filament model is unknown. Generic filament presets will be used." -msgstr "Модель филамента неизвестна. Будут использованы стандартные профили филамента." +msgstr "Модель материала неизвестна. Будут использованы стандартные профили материала." msgid "The filament may not be compatible with the current machine settings. A random filament preset will be used." msgstr "Материал может быть несовместим с текущими настройками принтера. Будет использоваться случайный профиль материала." @@ -21970,7 +21659,7 @@ msgstr "Материал может быть несовместим с теку # подобных). Она задаётся вручную в файле профиля (производителем) и # отсутствует у большинства системных профилей. msgid "The filament model is unknown. A random filament preset will be used." -msgstr "Модель филамента неизвестна. Будет использован случайный профиль филамента." +msgstr "Модель материала неизвестна. Будет использован случайный профиль материала." #: resources/data/hints.ini: [hint:Precise wall] msgid "" @@ -22372,9 +22061,6 @@ msgstr "" #~ "\n" #~ "Внимание: несовместимо с принтерами Prusa, поскольку им требуется остановка для изменения коэффициента PA." -#~ msgid "Continue to sync filaments" -#~ msgstr "Продолжить синхронизацию филаментов" - #~ msgctxt "Sync_Nozzle_AMS" #~ msgid "Cancel" #~ msgstr "Отмена" From b216813bf0221a50a82b1fc112e82855d924abcf Mon Sep 17 00:00:00 2001 From: TheLegendTubaGuy <95944177+thelegendtubaguy@users.noreply.github.com> Date: Fri, 7 Aug 2026 11:07:27 -0500 Subject: [PATCH 42/66] Add the Qidi Plus 5 (#15163) * Add the Qidi Plus 5 * Remove ignored profiles Qidi didn't register these, so they are essentially dead weight. * Set Qidi profile version to 02.04.00.10 --- resources/profiles/Qidi.json | 1078 ++++++++++++++++- .../profiles/Qidi/Qidi X-Plus 5_cover.png | Bin 0 -> 33441 bytes .../Bambu ABS @Qidi X-Plus 5 0.2 nozzle.json | 20 + .../Bambu ABS @Qidi X-Plus 5 0.4 nozzle.json | 14 + .../Bambu ABS @Qidi X-Plus 5 0.6 nozzle.json | 17 + .../Bambu ABS @Qidi X-Plus 5 0.8 nozzle.json | 20 + .../Qidi/filament/X5/Bambu ABS @X-Plus 5.json | 105 ++ .../Bambu PETG @Qidi X-Plus 5 0.2 nozzle.json | 17 + .../Bambu PETG @Qidi X-Plus 5 0.4 nozzle.json | 14 + .../Bambu PETG @Qidi X-Plus 5 0.6 nozzle.json | 14 + .../Bambu PETG @Qidi X-Plus 5 0.8 nozzle.json | 14 + .../filament/X5/Bambu PETG @X-Plus 5.json | 102 ++ .../Bambu PLA @Qidi X-Plus 5 0.2 nozzle.json | 17 + .../Bambu PLA @Qidi X-Plus 5 0.4 nozzle.json | 14 + .../Bambu PLA @Qidi X-Plus 5 0.6 nozzle.json | 14 + .../Bambu PLA @Qidi X-Plus 5 0.8 nozzle.json | 14 + .../Qidi/filament/X5/Bambu PLA @X-Plus 5.json | 54 + ...Generic ABS @Qidi X-Plus 5 0.2 nozzle.json | 17 + ...Generic ABS @Qidi X-Plus 5 0.4 nozzle.json | 14 + ...Generic ABS @Qidi X-Plus 5 0.6 nozzle.json | 17 + ...Generic ABS @Qidi X-Plus 5 0.8 nozzle.json | 17 + .../filament/X5/Generic ABS @X-Plus 5.json | 108 ++ .../Generic PC @Qidi X-Plus 5 0.2 nozzle.json | 23 + .../Generic PC @Qidi X-Plus 5 0.4 nozzle.json | 20 + .../Generic PC @Qidi X-Plus 5 0.6 nozzle.json | 20 + .../Generic PC @Qidi X-Plus 5 0.8 nozzle.json | 20 + .../filament/X5/Generic PC @X-Plus 5.json | 108 ++ ...eneric PETG @Qidi X-Plus 5 0.2 nozzle.json | 17 + ...eneric PETG @Qidi X-Plus 5 0.4 nozzle.json | 14 + ...eneric PETG @Qidi X-Plus 5 0.6 nozzle.json | 14 + ...eneric PETG @Qidi X-Plus 5 0.8 nozzle.json | 14 + .../filament/X5/Generic PETG @X-Plus 5.json | 105 ++ ...Generic PLA @Qidi X-Plus 5 0.2 nozzle.json | 17 + ...Generic PLA @Qidi X-Plus 5 0.4 nozzle.json | 14 + ...Generic PLA @Qidi X-Plus 5 0.6 nozzle.json | 14 + ...Generic PLA @Qidi X-Plus 5 0.8 nozzle.json | 14 + .../filament/X5/Generic PLA @X-Plus 5.json | 66 + ...ic PLA Silk @Qidi X-Plus 5 0.4 nozzle.json | 11 + ...ic PLA Silk @Qidi X-Plus 5 0.6 nozzle.json | 14 + .../X5/Generic PLA Silk @X-Plus 5.json | 90 ++ ...eneric PLA+ @Qidi X-Plus 5 0.2 nozzle.json | 17 + ...eneric PLA+ @Qidi X-Plus 5 0.4 nozzle.json | 14 + ...eneric PLA+ @Qidi X-Plus 5 0.6 nozzle.json | 14 + ...eneric PLA+ @Qidi X-Plus 5 0.8 nozzle.json | 14 + .../filament/X5/Generic PLA+ @X-Plus 5.json | 60 + ...ric TPU 95A @Qidi X-Plus 5 0.4 nozzle.json | 11 + ...ric TPU 95A @Qidi X-Plus 5 0.6 nozzle.json | 11 + ...ric TPU 95A @Qidi X-Plus 5 0.8 nozzle.json | 14 + .../X5/Generic TPU 95A @X-Plus 5.json | 81 ++ ...ATCHBOX ABS @Qidi X-Plus 5 0.2 nozzle.json | 20 + ...ATCHBOX ABS @Qidi X-Plus 5 0.4 nozzle.json | 14 + ...ATCHBOX ABS @Qidi X-Plus 5 0.6 nozzle.json | 17 + ...ATCHBOX ABS @Qidi X-Plus 5 0.8 nozzle.json | 20 + .../filament/X5/HATCHBOX ABS @X-Plus 5.json | 105 ++ ...TCHBOX PETG @Qidi X-Plus 5 0.2 nozzle.json | 17 + ...TCHBOX PETG @Qidi X-Plus 5 0.4 nozzle.json | 14 + ...TCHBOX PETG @Qidi X-Plus 5 0.6 nozzle.json | 14 + ...TCHBOX PETG @Qidi X-Plus 5 0.8 nozzle.json | 14 + .../filament/X5/HATCHBOX PETG @X-Plus 5.json | 102 ++ ...ATCHBOX PLA @Qidi X-Plus 5 0.2 nozzle.json | 17 + ...ATCHBOX PLA @Qidi X-Plus 5 0.4 nozzle.json | 14 + ...ATCHBOX PLA @Qidi X-Plus 5 0.6 nozzle.json | 14 + ...ATCHBOX PLA @Qidi X-Plus 5 0.8 nozzle.json | 14 + .../filament/X5/HATCHBOX PLA @X-Plus 5.json | 54 + ...verture ABS @Qidi X-Plus 5 0.2 nozzle.json | 20 + ...verture ABS @Qidi X-Plus 5 0.4 nozzle.json | 14 + ...verture ABS @Qidi X-Plus 5 0.6 nozzle.json | 14 + ...verture ABS @Qidi X-Plus 5 0.8 nozzle.json | 17 + .../filament/X5/Overture ABS @X-Plus 5.json | 108 ++ ...verture PLA @Qidi X-Plus 5 0.2 nozzle.json | 17 + ...verture PLA @Qidi X-Plus 5 0.4 nozzle.json | 14 + ...verture PLA @Qidi X-Plus 5 0.6 nozzle.json | 14 + ...verture PLA @Qidi X-Plus 5 0.8 nozzle.json | 14 + .../filament/X5/Overture PLA @X-Plus 5.json | 66 + ...olyLite ABS @Qidi X-Plus 5 0.2 nozzle.json | 20 + ...olyLite ABS @Qidi X-Plus 5 0.4 nozzle.json | 14 + ...olyLite ABS @Qidi X-Plus 5 0.6 nozzle.json | 14 + ...olyLite ABS @Qidi X-Plus 5 0.8 nozzle.json | 17 + .../filament/X5/PolyLite ABS @X-Plus 5.json | 108 ++ ...olyLite PLA @Qidi X-Plus 5 0.2 nozzle.json | 17 + ...olyLite PLA @Qidi X-Plus 5 0.4 nozzle.json | 14 + ...olyLite PLA @Qidi X-Plus 5 0.6 nozzle.json | 14 + ...olyLite PLA @Qidi X-Plus 5 0.8 nozzle.json | 14 + .../filament/X5/PolyLite PLA @X-Plus 5.json | 66 + ...aker PLA-HT @Qidi X-Plus 5 0.2 nozzle.json | 17 + ...aker PLA-HT @Qidi X-Plus 5 0.4 nozzle.json | 14 + ...aker PLA-HT @Qidi X-Plus 5 0.6 nozzle.json | 14 + ...aker PLA-HT @Qidi X-Plus 5 0.8 nozzle.json | 14 + .../X5/Polymaker PLA-HT @X-Plus 5.json | 66 + ...BS Odorless @Qidi X-Plus 5 0.2 nozzle.json | 20 + ...BS Odorless @Qidi X-Plus 5 0.4 nozzle.json | 14 + ...BS Odorless @Qidi X-Plus 5 0.6 nozzle.json | 20 + ...BS Odorless @Qidi X-Plus 5 0.8 nozzle.json | 23 + .../X5/QIDI ABS Odorless @X-Plus 5.json | 108 ++ ... ABS Rapido @Qidi X-Plus 5 0.2 nozzle.json | 20 + ... ABS Rapido @Qidi X-Plus 5 0.4 nozzle.json | 14 + ... ABS Rapido @Qidi X-Plus 5 0.6 nozzle.json | 17 + ... ABS Rapido @Qidi X-Plus 5 0.8 nozzle.json | 20 + .../X5/QIDI ABS Rapido @X-Plus 5.json | 105 ++ ...apido Metal @Qidi X-Plus 5 0.2 nozzle.json | 20 + ...apido Metal @Qidi X-Plus 5 0.4 nozzle.json | 14 + ...apido Metal @Qidi X-Plus 5 0.6 nozzle.json | 17 + ...apido Metal @Qidi X-Plus 5 0.8 nozzle.json | 20 + .../X5/QIDI ABS Rapido Metal @X-Plus 5.json | 105 ++ ...QIDI ABS-GF @Qidi X-Plus 5 0.4 nozzle.json | 14 + ...QIDI ABS-GF @Qidi X-Plus 5 0.6 nozzle.json | 14 + ...QIDI ABS-GF @Qidi X-Plus 5 0.8 nozzle.json | 14 + .../filament/X5/QIDI ABS-GF @X-Plus 5.json | 114 ++ .../QIDI ASA @Qidi X-Plus 5 0.2 nozzle.json | 20 + .../QIDI ASA @Qidi X-Plus 5 0.4 nozzle.json | 14 + .../QIDI ASA @Qidi X-Plus 5 0.6 nozzle.json | 17 + .../QIDI ASA @Qidi X-Plus 5 0.8 nozzle.json | 20 + .../Qidi/filament/X5/QIDI ASA @X-Plus 5.json | 111 ++ ...DI ASA-Aero @Qidi X-Plus 5 0.4 nozzle.json | 11 + .../filament/X5/QIDI ASA-Aero @X-Plus 5.json | 126 ++ ...QIDI ASA-CF @Qidi X-Plus 5 0.4 nozzle.json | 14 + ...QIDI ASA-CF @Qidi X-Plus 5 0.6 nozzle.json | 17 + ...QIDI ASA-CF @Qidi X-Plus 5 0.8 nozzle.json | 20 + .../filament/X5/QIDI ASA-CF @X-Plus 5.json | 111 ++ ...IDI PA12-CF @Qidi X-Plus 5 0.4 nozzle.json | 11 + ...IDI PA12-CF @Qidi X-Plus 5 0.6 nozzle.json | 11 + ...IDI PA12-CF @Qidi X-Plus 5 0.8 nozzle.json | 11 + .../filament/X5/QIDI PA12-CF @X-Plus 5.json | 111 ++ ...QIDI PA6-CF @Qidi X-Plus 5 0.4 nozzle.json | 11 + ...QIDI PA6-CF @Qidi X-Plus 5 0.6 nozzle.json | 11 + ...QIDI PA6-CF @Qidi X-Plus 5 0.8 nozzle.json | 11 + .../filament/X5/QIDI PA6-CF @X-Plus 5.json | 111 ++ ...IDI PAHT-CF @Qidi X-Plus 5 0.4 nozzle.json | 11 + ...IDI PAHT-CF @Qidi X-Plus 5 0.6 nozzle.json | 11 + ...IDI PAHT-CF @Qidi X-Plus 5 0.8 nozzle.json | 11 + .../filament/X5/QIDI PAHT-CF @X-Plus 5.json | 111 ++ ...IDI PAHT-GF @Qidi X-Plus 5 0.4 nozzle.json | 11 + ...IDI PAHT-GF @Qidi X-Plus 5 0.6 nozzle.json | 14 + ...IDI PAHT-GF @Qidi X-Plus 5 0.8 nozzle.json | 14 + .../filament/X5/QIDI PAHT-GF @X-Plus 5.json | 111 ++ ...I PC-ABS-FR @Qidi X-Plus 5 0.4 nozzle.json | 14 + ...I PC-ABS-FR @Qidi X-Plus 5 0.6 nozzle.json | 14 + ...I PC-ABS-FR @Qidi X-Plus 5 0.8 nozzle.json | 14 + .../filament/X5/QIDI PC-ABS-FR @X-Plus 5.json | 111 ++ ...DI PEBA 95A @Qidi X-Plus 5 0.4 nozzle.json | 11 + ...DI PEBA 95A @Qidi X-Plus 5 0.6 nozzle.json | 11 + .../filament/X5/QIDI PEBA 95A @X-Plus 5.json | 96 ++ ...QIDI PET-CF @Qidi X-Plus 5 0.4 nozzle.json | 11 + ...QIDI PET-CF @Qidi X-Plus 5 0.6 nozzle.json | 14 + ...QIDI PET-CF @Qidi X-Plus 5 0.8 nozzle.json | 14 + .../filament/X5/QIDI PET-CF @X-Plus 5.json | 111 ++ ...QIDI PET-GF @Qidi X-Plus 5 0.4 nozzle.json | 11 + ...QIDI PET-GF @Qidi X-Plus 5 0.6 nozzle.json | 14 + ...QIDI PET-GF @Qidi X-Plus 5 0.8 nozzle.json | 14 + .../filament/X5/QIDI PET-GF @X-Plus 5.json | 111 ++ ... PETG Basic @Qidi X-Plus 5 0.2 nozzle.json | 17 + ... PETG Basic @Qidi X-Plus 5 0.4 nozzle.json | 11 + ... PETG Basic @Qidi X-Plus 5 0.6 nozzle.json | 14 + ... PETG Basic @Qidi X-Plus 5 0.8 nozzle.json | 14 + .../X5/QIDI PETG Basic @X-Plus 5.json | 102 ++ ...PETG Rapido @Qidi X-Plus 5 0.2 nozzle.json | 17 + ...PETG Rapido @Qidi X-Plus 5 0.4 nozzle.json | 11 + ...PETG Rapido @Qidi X-Plus 5 0.6 nozzle.json | 14 + ...PETG Rapido @Qidi X-Plus 5 0.8 nozzle.json | 14 + .../X5/QIDI PETG Rapido @X-Plus 5.json | 102 ++ ... PETG Tough @Qidi X-Plus 5 0.2 nozzle.json | 17 + ... PETG Tough @Qidi X-Plus 5 0.4 nozzle.json | 11 + ... PETG Tough @Qidi X-Plus 5 0.6 nozzle.json | 14 + ... PETG Tough @Qidi X-Plus 5 0.8 nozzle.json | 14 + .../X5/QIDI PETG Tough @X-Plus 5.json | 102 ++ ...Translucent @Qidi X-Plus 5 0.2 nozzle.json | 17 + ...Translucent @Qidi X-Plus 5 0.4 nozzle.json | 11 + ...Translucent @Qidi X-Plus 5 0.6 nozzle.json | 14 + ...Translucent @Qidi X-Plus 5 0.8 nozzle.json | 14 + .../X5/QIDI PETG Translucent @X-Plus 5.json | 102 ++ ...IDI PETG-CF @Qidi X-Plus 5 0.4 nozzle.json | 11 + ...IDI PETG-CF @Qidi X-Plus 5 0.6 nozzle.json | 14 + ...IDI PETG-CF @Qidi X-Plus 5 0.8 nozzle.json | 14 + .../filament/X5/QIDI PETG-CF @X-Plus 5.json | 102 ++ ...IDI PETG-GF @Qidi X-Plus 5 0.4 nozzle.json | 11 + ...IDI PETG-GF @Qidi X-Plus 5 0.6 nozzle.json | 14 + ...IDI PETG-GF @Qidi X-Plus 5 0.8 nozzle.json | 14 + .../filament/X5/QIDI PETG-GF @X-Plus 5.json | 102 ++ ...I PLA Basic @Qidi X-Plus 5 0.2 nozzle.json | 17 + ...I PLA Basic @Qidi X-Plus 5 0.4 nozzle.json | 14 + ...I PLA Basic @Qidi X-Plus 5 0.6 nozzle.json | 14 + ...I PLA Basic @Qidi X-Plus 5 0.8 nozzle.json | 14 + .../filament/X5/QIDI PLA Basic @X-Plus 5.json | 63 + ...Matte Basic @Qidi X-Plus 5 0.2 nozzle.json | 17 + ...Matte Basic @Qidi X-Plus 5 0.4 nozzle.json | 14 + ...Matte Basic @Qidi X-Plus 5 0.6 nozzle.json | 14 + ...Matte Basic @Qidi X-Plus 5 0.8 nozzle.json | 14 + .../X5/QIDI PLA Matte Basic @X-Plus 5.json | 63 + ... PLA Rapido @Qidi X-Plus 5 0.2 nozzle.json | 17 + ... PLA Rapido @Qidi X-Plus 5 0.4 nozzle.json | 14 + ... PLA Rapido @Qidi X-Plus 5 0.6 nozzle.json | 14 + ... PLA Rapido @Qidi X-Plus 5 0.8 nozzle.json | 14 + .../X5/QIDI PLA Rapido @X-Plus 5.json | 60 + ...apido Matte @Qidi X-Plus 5 0.2 nozzle.json | 17 + ...apido Matte @Qidi X-Plus 5 0.4 nozzle.json | 14 + ...apido Matte @Qidi X-Plus 5 0.6 nozzle.json | 14 + ...apido Matte @Qidi X-Plus 5 0.8 nozzle.json | 14 + .../X5/QIDI PLA Rapido Matte @X-Plus 5.json | 57 + ...apido Metal @Qidi X-Plus 5 0.2 nozzle.json | 17 + ...apido Metal @Qidi X-Plus 5 0.4 nozzle.json | 14 + ...apido Metal @Qidi X-Plus 5 0.6 nozzle.json | 14 + ...apido Metal @Qidi X-Plus 5 0.8 nozzle.json | 14 + .../X5/QIDI PLA Rapido Metal @X-Plus 5.json | 57 + ...DI PLA Silk @Qidi X-Plus 5 0.4 nozzle.json | 14 + ...DI PLA Silk @Qidi X-Plus 5 0.6 nozzle.json | 14 + .../filament/X5/QIDI PLA Silk @X-Plus 5.json | 84 ++ ...QIDI PLA-CF @Qidi X-Plus 5 0.4 nozzle.json | 14 + ...QIDI PLA-CF @Qidi X-Plus 5 0.6 nozzle.json | 14 + ...QIDI PLA-CF @Qidi X-Plus 5 0.8 nozzle.json | 17 + .../filament/X5/QIDI PLA-CF @X-Plus 5.json | 75 ++ ...QIDI PPS-CF @Qidi X-Plus 5 0.4 nozzle.json | 14 + ...QIDI PPS-CF @Qidi X-Plus 5 0.6 nozzle.json | 14 + ...QIDI PPS-CF @Qidi X-Plus 5 0.8 nozzle.json | 14 + .../filament/X5/QIDI PPS-CF @X-Plus 5.json | 117 ++ ...QIDI PPS-GF @Qidi X-Plus 5 0.4 nozzle.json | 14 + ...QIDI PPS-GF @Qidi X-Plus 5 0.6 nozzle.json | 14 + ...QIDI PPS-GF @Qidi X-Plus 5 0.8 nozzle.json | 14 + .../filament/X5/QIDI PPS-GF @X-Plus 5.json | 117 ++ ...rt For PAHT @Qidi X-Plus 5 0.4 nozzle.json | 11 + ...rt For PAHT @Qidi X-Plus 5 0.6 nozzle.json | 11 + ...rt For PAHT @Qidi X-Plus 5 0.8 nozzle.json | 11 + .../X5/QIDI Support For PAHT @X-Plus 5.json | 114 ++ ... For PET-PA @Qidi X-Plus 5 0.4 nozzle.json | 11 + ... For PET-PA @Qidi X-Plus 5 0.6 nozzle.json | 11 + ... For PET-PA @Qidi X-Plus 5 0.8 nozzle.json | 11 + .../X5/QIDI Support For PET-PA @X-Plus 5.json | 114 ++ ... TPU 95A-HF @Qidi X-Plus 5 0.4 nozzle.json | 11 + ... TPU 95A-HF @Qidi X-Plus 5 0.6 nozzle.json | 11 + ... TPU 95A-HF @Qidi X-Plus 5 0.8 nozzle.json | 14 + .../X5/QIDI TPU 95A-HF @X-Plus 5.json | 84 ++ ...DI TPU-Aero @Qidi X-Plus 5 0.4 nozzle.json | 11 + ...DI TPU-Aero @Qidi X-Plus 5 0.6 nozzle.json | 11 + .../filament/X5/QIDI TPU-Aero @X-Plus 5.json | 93 ++ ...QIDI TPU-GF @Qidi X-Plus 5 0.4 nozzle.json | 11 + ...QIDI TPU-GF @Qidi X-Plus 5 0.6 nozzle.json | 11 + ...QIDI TPU-GF @Qidi X-Plus 5 0.8 nozzle.json | 11 + .../filament/X5/QIDI TPU-GF @X-Plus 5.json | 84 ++ ...IDI UltraPA @Qidi X-Plus 5 0.4 nozzle.json | 11 + ...IDI UltraPA @Qidi X-Plus 5 0.6 nozzle.json | 11 + ...IDI UltraPA @Qidi X-Plus 5 0.8 nozzle.json | 11 + .../filament/X5/QIDI UltraPA @X-Plus 5.json | 99 ++ ...ltraPA-CF25 @Qidi X-Plus 5 0.4 nozzle.json | 11 + ...ltraPA-CF25 @Qidi X-Plus 5 0.6 nozzle.json | 14 + ...ltraPA-CF25 @Qidi X-Plus 5 0.8 nozzle.json | 14 + .../X5/QIDI UltraPA-CF25 @X-Plus 5.json | 114 ++ ...WOOD Rapido @Qidi X-Plus 5 0.4 nozzle.json | 14 + ...WOOD Rapido @Qidi X-Plus 5 0.6 nozzle.json | 14 + ...WOOD Rapido @Qidi X-Plus 5 0.8 nozzle.json | 14 + .../X5/QIDI WOOD Rapido @X-Plus 5.json | 66 + .../filament/X5/fdm_filament_x5_common.json | 255 ++++ .../machine/Qidi X-Plus 5 0.2 nozzle.json | 28 + .../machine/Qidi X-Plus 5 0.4 nozzle.json | 88 ++ .../machine/Qidi X-Plus 5 0.6 nozzle.json | 31 + .../machine/Qidi X-Plus 5 0.8 nozzle.json | 31 + .../profiles/Qidi/machine/Qidi X-Plus 5.json | 12 + ...8mm High Quality @X-Plus 5 0.2 nozzle.json | 70 ++ .../0.08mm High Quality @X-Plus 5.json | 73 ++ .../0.10mm Standard @X-Plus 5 0.2 nozzle.json | 63 + ...Balanced Quality @X-Plus 5 0.2 nozzle.json | 66 + .../0.12mm High Quality @X-Plus 5.json | 73 ++ .../0.16mm High Quality @X-Plus 5.json | 65 + .../process/0.16mm Standard @X-Plus 5.json | 62 + ...Balanced Quality @X-Plus 5 0.6 nozzle.json | 73 ++ .../0.20mm High Quality @X-Plus 5.json | 63 + .../process/0.20mm Standard @X-Plus 5.json | 47 + ...Balanced Quality @X-Plus 5 0.6 nozzle.json | 71 ++ ...Balanced Quality @X-Plus 5 0.8 nozzle.json | 63 + .../process/0.24mm Standard @X-Plus 5.json | 50 + .../0.30mm Standard @X-Plus 5 0.6 nozzle.json | 65 + ...Balanced Quality @X-Plus 5 0.8 nozzle.json | 72 ++ .../0.40mm Standard @X-Plus 5 0.8 nozzle.json | 60 + .../Qidi/qidi_xplus5_buildplate_model.stl | Bin 0 -> 28284 bytes .../Qidi/qidi_xplus5_buildplate_texture.svg | 1 + 273 files changed, 10609 insertions(+), 1 deletion(-) create mode 100644 resources/profiles/Qidi/Qidi X-Plus 5_cover.png create mode 100644 resources/profiles/Qidi/filament/X5/Bambu ABS @Qidi X-Plus 5 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/Bambu ABS @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/Bambu ABS @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/Bambu ABS @Qidi X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/Bambu ABS @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/Bambu PETG @Qidi X-Plus 5 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/Bambu PETG @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/Bambu PETG @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/Bambu PETG @Qidi X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/Bambu PETG @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/Bambu PLA @Qidi X-Plus 5 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/Bambu PLA @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/Bambu PLA @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/Bambu PLA @Qidi X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/Bambu PLA @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/Generic ABS @Qidi X-Plus 5 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/Generic ABS @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/Generic ABS @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/Generic ABS @Qidi X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/Generic ABS @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/Generic PC @Qidi X-Plus 5 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/Generic PC @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/Generic PC @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/Generic PC @Qidi X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/Generic PC @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/Generic PETG @Qidi X-Plus 5 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/Generic PETG @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/Generic PETG @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/Generic PETG @Qidi X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/Generic PETG @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/Generic PLA @Qidi X-Plus 5 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/Generic PLA @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/Generic PLA @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/Generic PLA @Qidi X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/Generic PLA @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/Generic PLA Silk @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/Generic PLA Silk @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/Generic PLA Silk @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/Generic PLA+ @Qidi X-Plus 5 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/Generic PLA+ @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/Generic PLA+ @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/Generic PLA+ @Qidi X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/Generic PLA+ @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/Generic TPU 95A @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/Generic TPU 95A @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/Generic TPU 95A @Qidi X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/Generic TPU 95A @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/HATCHBOX ABS @Qidi X-Plus 5 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/HATCHBOX ABS @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/HATCHBOX ABS @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/HATCHBOX ABS @Qidi X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/HATCHBOX ABS @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/HATCHBOX PETG @Qidi X-Plus 5 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/HATCHBOX PETG @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/HATCHBOX PETG @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/HATCHBOX PETG @Qidi X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/HATCHBOX PETG @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/HATCHBOX PLA @Qidi X-Plus 5 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/HATCHBOX PLA @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/HATCHBOX PLA @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/HATCHBOX PLA @Qidi X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/HATCHBOX PLA @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/Overture ABS @Qidi X-Plus 5 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/Overture ABS @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/Overture ABS @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/Overture ABS @Qidi X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/Overture ABS @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/Overture PLA @Qidi X-Plus 5 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/Overture PLA @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/Overture PLA @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/Overture PLA @Qidi X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/Overture PLA @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/PolyLite ABS @Qidi X-Plus 5 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/PolyLite ABS @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/PolyLite ABS @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/PolyLite ABS @Qidi X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/PolyLite ABS @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/PolyLite PLA @Qidi X-Plus 5 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/PolyLite PLA @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/PolyLite PLA @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/PolyLite PLA @Qidi X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/PolyLite PLA @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/Polymaker PLA-HT @Qidi X-Plus 5 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/Polymaker PLA-HT @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/Polymaker PLA-HT @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/Polymaker PLA-HT @Qidi X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/Polymaker PLA-HT @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI ABS Odorless @Qidi X-Plus 5 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI ABS Odorless @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI ABS Odorless @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI ABS Odorless @Qidi X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI ABS Odorless @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI ABS Rapido @Qidi X-Plus 5 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI ABS Rapido @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI ABS Rapido @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI ABS Rapido @Qidi X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI ABS Rapido @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI ABS Rapido Metal @Qidi X-Plus 5 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI ABS Rapido Metal @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI ABS Rapido Metal @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI ABS Rapido Metal @Qidi X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI ABS Rapido Metal @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI ABS-GF @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI ABS-GF @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI ABS-GF @Qidi X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI ABS-GF @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI ASA @Qidi X-Plus 5 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI ASA @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI ASA @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI ASA @Qidi X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI ASA @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI ASA-Aero @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI ASA-Aero @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI ASA-CF @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI ASA-CF @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI ASA-CF @Qidi X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI ASA-CF @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PA12-CF @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PA12-CF @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PA12-CF @Qidi X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PA12-CF @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PA6-CF @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PA6-CF @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PA6-CF @Qidi X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PA6-CF @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PAHT-CF @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PAHT-CF @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PAHT-CF @Qidi X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PAHT-CF @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PAHT-GF @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PAHT-GF @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PAHT-GF @Qidi X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PAHT-GF @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PC-ABS-FR @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PC-ABS-FR @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PC-ABS-FR @Qidi X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PC-ABS-FR @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PEBA 95A @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PEBA 95A @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PEBA 95A @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PET-CF @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PET-CF @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PET-CF @Qidi X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PET-CF @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PET-GF @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PET-GF @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PET-GF @Qidi X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PET-GF @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PETG Basic @Qidi X-Plus 5 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PETG Basic @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PETG Basic @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PETG Basic @Qidi X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PETG Basic @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PETG Rapido @Qidi X-Plus 5 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PETG Rapido @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PETG Rapido @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PETG Rapido @Qidi X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PETG Rapido @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PETG Tough @Qidi X-Plus 5 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PETG Tough @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PETG Tough @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PETG Tough @Qidi X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PETG Tough @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PETG Translucent @Qidi X-Plus 5 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PETG Translucent @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PETG Translucent @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PETG Translucent @Qidi X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PETG Translucent @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PETG-CF @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PETG-CF @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PETG-CF @Qidi X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PETG-CF @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PETG-GF @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PETG-GF @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PETG-GF @Qidi X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PETG-GF @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PLA Basic @Qidi X-Plus 5 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PLA Basic @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PLA Basic @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PLA Basic @Qidi X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PLA Basic @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PLA Matte Basic @Qidi X-Plus 5 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PLA Matte Basic @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PLA Matte Basic @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PLA Matte Basic @Qidi X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PLA Matte Basic @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PLA Rapido @Qidi X-Plus 5 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PLA Rapido @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PLA Rapido @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PLA Rapido @Qidi X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PLA Rapido @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Matte @Qidi X-Plus 5 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Matte @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Matte @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Matte @Qidi X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Matte @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Metal @Qidi X-Plus 5 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Metal @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Metal @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Metal @Qidi X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Metal @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PLA Silk @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PLA Silk @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PLA Silk @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PLA-CF @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PLA-CF @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PLA-CF @Qidi X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PLA-CF @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PPS-CF @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PPS-CF @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PPS-CF @Qidi X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PPS-CF @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PPS-GF @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PPS-GF @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PPS-GF @Qidi X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI PPS-GF @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI Support For PAHT @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI Support For PAHT @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI Support For PAHT @Qidi X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI Support For PAHT @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI Support For PET-PA @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI Support For PET-PA @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI Support For PET-PA @Qidi X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI Support For PET-PA @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI TPU 95A-HF @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI TPU 95A-HF @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI TPU 95A-HF @Qidi X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI TPU 95A-HF @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI TPU-Aero @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI TPU-Aero @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI TPU-Aero @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI TPU-GF @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI TPU-GF @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI TPU-GF @Qidi X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI TPU-GF @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI UltraPA @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI UltraPA @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI UltraPA @Qidi X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI UltraPA @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI UltraPA-CF25 @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI UltraPA-CF25 @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI UltraPA-CF25 @Qidi X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI UltraPA-CF25 @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI WOOD Rapido @Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI WOOD Rapido @Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI WOOD Rapido @Qidi X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X5/QIDI WOOD Rapido @X-Plus 5.json create mode 100644 resources/profiles/Qidi/filament/X5/fdm_filament_x5_common.json create mode 100644 resources/profiles/Qidi/machine/Qidi X-Plus 5 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/machine/Qidi X-Plus 5 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/machine/Qidi X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/machine/Qidi X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/machine/Qidi X-Plus 5.json create mode 100644 resources/profiles/Qidi/process/0.08mm High Quality @X-Plus 5 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/process/0.08mm High Quality @X-Plus 5.json create mode 100644 resources/profiles/Qidi/process/0.10mm Standard @X-Plus 5 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/process/0.12mm Balanced Quality @X-Plus 5 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/process/0.12mm High Quality @X-Plus 5.json create mode 100644 resources/profiles/Qidi/process/0.16mm High Quality @X-Plus 5.json create mode 100644 resources/profiles/Qidi/process/0.16mm Standard @X-Plus 5.json create mode 100644 resources/profiles/Qidi/process/0.18mm Balanced Quality @X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/process/0.20mm High Quality @X-Plus 5.json create mode 100644 resources/profiles/Qidi/process/0.20mm Standard @X-Plus 5.json create mode 100644 resources/profiles/Qidi/process/0.24mm Balanced Quality @X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/process/0.24mm Balanced Quality @X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/process/0.24mm Standard @X-Plus 5.json create mode 100644 resources/profiles/Qidi/process/0.30mm Standard @X-Plus 5 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/process/0.32mm Balanced Quality @X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/process/0.40mm Standard @X-Plus 5 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/qidi_xplus5_buildplate_model.stl create mode 100644 resources/profiles/Qidi/qidi_xplus5_buildplate_texture.svg diff --git a/resources/profiles/Qidi.json b/resources/profiles/Qidi.json index 0cf0c6bb7d..08a2d6a230 100644 --- a/resources/profiles/Qidi.json +++ b/resources/profiles/Qidi.json @@ -1,6 +1,6 @@ { "name": "Qidi", - "version": "02.04.00.09", + "version": "02.04.00.10", "force_update": "0", "description": "Qidi configurations", "machine_model_list": [ @@ -47,6 +47,10 @@ { "name": "Qidi X-Smart 3", "sub_path": "machine/Qidi X-Smart 3.json" + }, + { + "name": "Qidi X-Plus 5", + "sub_path": "machine/Qidi X-Plus 5.json" } ], "process_list": [ @@ -885,6 +889,70 @@ { "name": "0.56mm Standard @Qidi XSmart3 0.8 nozzle", "sub_path": "process/0.56mm Standard @Qidi XSmart3 0.8 nozzle.json" + }, + { + "name": "0.08mm High Quality @X-Plus 5", + "sub_path": "process/0.08mm High Quality @X-Plus 5.json" + }, + { + "name": "0.12mm High Quality @X-Plus 5", + "sub_path": "process/0.12mm High Quality @X-Plus 5.json" + }, + { + "name": "0.16mm High Quality @X-Plus 5", + "sub_path": "process/0.16mm High Quality @X-Plus 5.json" + }, + { + "name": "0.16mm Standard @X-Plus 5", + "sub_path": "process/0.16mm Standard @X-Plus 5.json" + }, + { + "name": "0.20mm High Quality @X-Plus 5", + "sub_path": "process/0.20mm High Quality @X-Plus 5.json" + }, + { + "name": "0.20mm Standard @X-Plus 5", + "sub_path": "process/0.20mm Standard @X-Plus 5.json" + }, + { + "name": "0.24mm Standard @X-Plus 5", + "sub_path": "process/0.24mm Standard @X-Plus 5.json" + }, + { + "name": "0.08mm High Quality @X-Plus 5 0.2 nozzle", + "sub_path": "process/0.08mm High Quality @X-Plus 5 0.2 nozzle.json" + }, + { + "name": "0.10mm Standard @X-Plus 5 0.2 nozzle", + "sub_path": "process/0.10mm Standard @X-Plus 5 0.2 nozzle.json" + }, + { + "name": "0.12mm Balanced Quality @X-Plus 5 0.2 nozzle", + "sub_path": "process/0.12mm Balanced Quality @X-Plus 5 0.2 nozzle.json" + }, + { + "name": "0.18mm Balanced Quality @X-Plus 5 0.6 nozzle", + "sub_path": "process/0.18mm Balanced Quality @X-Plus 5 0.6 nozzle.json" + }, + { + "name": "0.24mm Balanced Quality @X-Plus 5 0.6 nozzle", + "sub_path": "process/0.24mm Balanced Quality @X-Plus 5 0.6 nozzle.json" + }, + { + "name": "0.30mm Standard @X-Plus 5 0.6 nozzle", + "sub_path": "process/0.30mm Standard @X-Plus 5 0.6 nozzle.json" + }, + { + "name": "0.24mm Balanced Quality @X-Plus 5 0.8 nozzle", + "sub_path": "process/0.24mm Balanced Quality @X-Plus 5 0.8 nozzle.json" + }, + { + "name": "0.32mm Balanced Quality @X-Plus 5 0.8 nozzle", + "sub_path": "process/0.32mm Balanced Quality @X-Plus 5 0.8 nozzle.json" + }, + { + "name": "0.40mm Standard @X-Plus 5 0.8 nozzle", + "sub_path": "process/0.40mm Standard @X-Plus 5 0.8 nozzle.json" } ], "filament_list": [ @@ -6035,6 +6103,998 @@ { "name": "Qidi Generic PLA High Speed @Qidi X-Plus 4 0.8 nozzle", "sub_path": "filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.8 nozzle.json" + }, + { + "name": "fdm_filament_x5_common", + "sub_path": "filament/X5/fdm_filament_x5_common.json" + }, + { + "name": "Generic ABS@X-Plus 5-Series", + "sub_path": "filament/X5/Generic ABS @X-Plus 5.json" + }, + { + "name": "QIDI ASA@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI ASA @X-Plus 5.json" + }, + { + "name": "Generic PETG@X-Plus 5-Series", + "sub_path": "filament/X5/Generic PETG @X-Plus 5.json" + }, + { + "name": "Generic PLA Silk@X-Plus 5-Series", + "sub_path": "filament/X5/Generic PLA Silk @X-Plus 5.json" + }, + { + "name": "Generic PLA@X-Plus 5-Series", + "sub_path": "filament/X5/Generic PLA @X-Plus 5.json" + }, + { + "name": "Generic PLA+@X-Plus 5-Series", + "sub_path": "filament/X5/Generic PLA+ @X-Plus 5.json" + }, + { + "name": "PolyLite PLA@X-Plus 5-Series", + "sub_path": "filament/X5/PolyLite PLA @X-Plus 5.json" + }, + { + "name": "Polymaker PLA-HT@X-Plus 5-Series", + "sub_path": "filament/X5/Polymaker PLA-HT @X-Plus 5.json" + }, + { + "name": "QIDI PLA-CF@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PLA-CF @X-Plus 5.json" + }, + { + "name": "QIDI PLA-CF @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PLA-CF @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PLA-CF @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PLA-CF @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PLA-CF @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PLA-CF @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI ABS Rapido@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI ABS Rapido @X-Plus 5.json" + }, + { + "name": "QIDI ABS Rapido @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/QIDI ABS Rapido @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "QIDI ABS Rapido @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI ABS Rapido @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI ABS Rapido @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI ABS Rapido @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI ABS Rapido @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI ABS Rapido @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI ABS Rapido Metal@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI ABS Rapido Metal @X-Plus 5.json" + }, + { + "name": "QIDI ABS Rapido Metal @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/QIDI ABS Rapido Metal @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "QIDI ABS Rapido Metal @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI ABS Rapido Metal @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI ABS Rapido Metal @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI ABS Rapido Metal @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI ABS Rapido Metal @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI ABS Rapido Metal @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI ABS Odorless@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI ABS Odorless @X-Plus 5.json" + }, + { + "name": "QIDI ABS Odorless @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/QIDI ABS Odorless @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "QIDI ABS Odorless @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI ABS Odorless @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI ABS Odorless @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI ABS Odorless @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI ABS Odorless @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI ABS Odorless @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PLA Rapido@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PLA Rapido @X-Plus 5.json" + }, + { + "name": "QIDI PLA Rapido @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/QIDI PLA Rapido @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "QIDI PLA Rapido @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PLA Rapido @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PLA Rapido @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PLA Rapido @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PLA Rapido @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PLA Rapido @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PLA Rapido Matte@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PLA Rapido Matte @X-Plus 5.json" + }, + { + "name": "QIDI PLA Rapido Matte @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/QIDI PLA Rapido Matte @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "QIDI PLA Rapido Matte @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PLA Rapido Matte @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PLA Rapido Matte @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PLA Rapido Matte @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PLA Rapido Matte @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PLA Rapido Matte @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PLA Silk@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PLA Silk @X-Plus 5.json" + }, + { + "name": "QIDI PLA Silk @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PLA Silk @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PLA Silk @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PLA Silk @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PLA Rapido Metal@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PLA Rapido Metal @X-Plus 5.json" + }, + { + "name": "QIDI PLA Rapido Metal @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/QIDI PLA Rapido Metal @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "QIDI PLA Rapido Metal @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PLA Rapido Metal @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PLA Rapido Metal @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PLA Rapido Metal @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PLA Rapido Metal @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PLA Rapido Metal @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PETG Tough@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PETG Tough @X-Plus 5.json" + }, + { + "name": "QIDI PETG Tough @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/QIDI PETG Tough @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "QIDI PETG Tough @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PETG Tough @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PETG Tough @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PETG Tough @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PETG Tough @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PETG Tough @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PET-CF@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PET-CF @X-Plus 5.json" + }, + { + "name": "QIDI PET-CF @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PET-CF @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PET-CF @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PET-CF @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PET-CF @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PET-CF @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PA12-CF@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PA12-CF @X-Plus 5.json" + }, + { + "name": "QIDI PA12-CF @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PA12-CF @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PA12-CF @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PA12-CF @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PA12-CF @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PA12-CF @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PA6-CF@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PA6-CF @X-Plus 5.json" + }, + { + "name": "QIDI PA6-CF @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PA6-CF @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PA6-CF @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PA6-CF @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PA6-CF @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PA6-CF @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PAHT-CF@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PAHT-CF @X-Plus 5.json" + }, + { + "name": "QIDI PAHT-CF @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PAHT-CF @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PAHT-CF @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PAHT-CF @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PAHT-CF @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PAHT-CF @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PPS-CF@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PPS-CF @X-Plus 5.json" + }, + { + "name": "QIDI PPS-CF @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PPS-CF @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PPS-CF @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PPS-CF @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PPS-CF @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PPS-CF @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI ABS-GF@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI ABS-GF @X-Plus 5.json" + }, + { + "name": "QIDI ABS-GF @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI ABS-GF @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI ABS-GF @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI ABS-GF @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI ABS-GF @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI ABS-GF @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI UltraPA@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI UltraPA @X-Plus 5.json" + }, + { + "name": "QIDI UltraPA @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI UltraPA @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI UltraPA @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI UltraPA @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI UltraPA @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI UltraPA @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "Generic TPU 95A@X-Plus 5-Series", + "sub_path": "filament/X5/Generic TPU 95A @X-Plus 5.json" + }, + { + "name": "QIDI PC/ABS-FR@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PC-ABS-FR @X-Plus 5.json" + }, + { + "name": "QIDI PC/ABS-FR @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PC-ABS-FR @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PC/ABS-FR @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PC-ABS-FR @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PC/ABS-FR @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PC-ABS-FR @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI ASA-Aero@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI ASA-Aero @X-Plus 5.json" + }, + { + "name": "QIDI ASA-Aero @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI ASA-Aero @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "Generic ABS @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/Generic ABS @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "Generic ABS @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/Generic ABS @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "Generic ABS @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/Generic ABS @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "Generic ABS @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/Generic ABS @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI ASA @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/QIDI ASA @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "QIDI ASA @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI ASA @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI ASA @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI ASA @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI ASA @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI ASA @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "Generic PETG @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/Generic PETG @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "Generic PETG @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/Generic PETG @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "Generic PETG @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/Generic PETG @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "Generic PETG @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/Generic PETG @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "Generic PLA @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/Generic PLA @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "Generic PLA @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/Generic PLA @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "Generic PLA @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/Generic PLA @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "Generic PLA @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/Generic PLA @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "Generic PLA+ @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/Generic PLA+ @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "Generic PLA+ @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/Generic PLA+ @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "Generic PLA+ @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/Generic PLA+ @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "Generic PLA+ @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/Generic PLA+ @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "Generic PLA Silk @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/Generic PLA Silk @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "Generic PLA Silk @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/Generic PLA Silk @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "Generic TPU 95A @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/Generic TPU 95A @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "Generic TPU 95A @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/Generic TPU 95A @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "Generic TPU 95A @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/Generic TPU 95A @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI TPU 95A-HF@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI TPU 95A-HF @X-Plus 5.json" + }, + { + "name": "QIDI TPU 95A-HF @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI TPU 95A-HF @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI TPU 95A-HF @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI TPU 95A-HF @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI TPU 95A-HF @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI TPU 95A-HF @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "PolyLite PLA @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/PolyLite PLA @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "PolyLite PLA @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/PolyLite PLA @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "PolyLite PLA @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/PolyLite PLA @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "PolyLite PLA @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/PolyLite PLA @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "Polymaker PLA-HT @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/Polymaker PLA-HT @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "Polymaker PLA-HT @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/Polymaker PLA-HT @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "Polymaker PLA-HT @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/Polymaker PLA-HT @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "Polymaker PLA-HT @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/Polymaker PLA-HT @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "PolyLite ABS@X-Plus 5-Series", + "sub_path": "filament/X5/PolyLite ABS @X-Plus 5.json" + }, + { + "name": "PolyLite ABS @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/PolyLite ABS @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "PolyLite ABS @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/PolyLite ABS @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "PolyLite ABS @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/PolyLite ABS @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "PolyLite ABS @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/PolyLite ABS @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "Overture PLA@X-Plus 5-Series", + "sub_path": "filament/X5/Overture PLA @X-Plus 5.json" + }, + { + "name": "Overture PLA @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/Overture PLA @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "Overture PLA @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/Overture PLA @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "Overture PLA @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/Overture PLA @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "Overture PLA @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/Overture PLA @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "Overture ABS@X-Plus 5-Series", + "sub_path": "filament/X5/Overture ABS @X-Plus 5.json" + }, + { + "name": "Overture ABS @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/Overture ABS @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "Overture ABS @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/Overture ABS @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "Overture ABS @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/Overture ABS @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "Overture ABS @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/Overture ABS @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "Bambu PLA@X-Plus 5-Series", + "sub_path": "filament/X5/Bambu PLA @X-Plus 5.json" + }, + { + "name": "Bambu PLA @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/Bambu PLA @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "Bambu PLA @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/Bambu PLA @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "Bambu PLA @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/Bambu PLA @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "Bambu PLA @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/Bambu PLA @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "Bambu ABS@X-Plus 5-Series", + "sub_path": "filament/X5/Bambu ABS @X-Plus 5.json" + }, + { + "name": "Bambu ABS @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/Bambu ABS @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "Bambu ABS @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/Bambu ABS @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "Bambu ABS @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/Bambu ABS @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "Bambu ABS @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/Bambu ABS @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "Bambu PETG@X-Plus 5-Series", + "sub_path": "filament/X5/Bambu PETG @X-Plus 5.json" + }, + { + "name": "Bambu PETG @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/Bambu PETG @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "Bambu PETG @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/Bambu PETG @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "Bambu PETG @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/Bambu PETG @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "Bambu PETG @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/Bambu PETG @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "HATCHBOX PLA@X-Plus 5-Series", + "sub_path": "filament/X5/HATCHBOX PLA @X-Plus 5.json" + }, + { + "name": "HATCHBOX PLA @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/HATCHBOX PLA @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "HATCHBOX PLA @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/HATCHBOX PLA @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "HATCHBOX PLA @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/HATCHBOX PLA @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "HATCHBOX PLA @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/HATCHBOX PLA @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "HATCHBOX ABS@X-Plus 5-Series", + "sub_path": "filament/X5/HATCHBOX ABS @X-Plus 5.json" + }, + { + "name": "HATCHBOX ABS @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/HATCHBOX ABS @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "HATCHBOX ABS @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/HATCHBOX ABS @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "HATCHBOX ABS @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/HATCHBOX ABS @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "HATCHBOX ABS @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/HATCHBOX ABS @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "HATCHBOX PETG@X-Plus 5-Series", + "sub_path": "filament/X5/HATCHBOX PETG @X-Plus 5.json" + }, + { + "name": "HATCHBOX PETG @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/HATCHBOX PETG @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "HATCHBOX PETG @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/HATCHBOX PETG @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "HATCHBOX PETG @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/HATCHBOX PETG @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "HATCHBOX PETG @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/HATCHBOX PETG @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PAHT-GF@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PAHT-GF @X-Plus 5.json" + }, + { + "name": "QIDI PAHT-GF @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PAHT-GF @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PAHT-GF @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PAHT-GF @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PAHT-GF @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PAHT-GF @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PET-GF@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PET-GF @X-Plus 5.json" + }, + { + "name": "QIDI PET-GF @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PET-GF @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PET-GF @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PET-GF @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PET-GF @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PET-GF @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI UltraPA-CF25@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI UltraPA-CF25 @X-Plus 5.json" + }, + { + "name": "QIDI UltraPA-CF25 @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI UltraPA-CF25 @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI UltraPA-CF25 @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI UltraPA-CF25 @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI UltraPA-CF25 @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI UltraPA-CF25 @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI WOOD Rapido@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI WOOD Rapido @X-Plus 5.json" + }, + { + "name": "QIDI WOOD Rapido @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI WOOD Rapido @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI WOOD Rapido @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI WOOD Rapido @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI WOOD Rapido @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI WOOD Rapido @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "Generic PC@X-Plus 5-Series", + "sub_path": "filament/X5/Generic PC @X-Plus 5.json" + }, + { + "name": "Generic PC @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/Generic PC @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "Generic PC @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/Generic PC @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "Generic PC @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/Generic PC @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "Generic PC @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/Generic PC @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI TPU-Aero@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI TPU-Aero @X-Plus 5.json" + }, + { + "name": "QIDI TPU-Aero @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI TPU-Aero @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI TPU-Aero @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI TPU-Aero @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI Support For PET/PA@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI Support For PET-PA @X-Plus 5.json" + }, + { + "name": "QIDI Support For PET/PA @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI Support For PET-PA @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI Support For PET/PA @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI Support For PET-PA @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI Support For PET/PA @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI Support For PET-PA @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI Support For PAHT@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI Support For PAHT @X-Plus 5.json" + }, + { + "name": "QIDI Support For PAHT @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI Support For PAHT @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI Support For PAHT @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI Support For PAHT @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI Support For PAHT @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI Support For PAHT @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PLA Basic@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PLA Basic @X-Plus 5.json" + }, + { + "name": "QIDI PLA Basic @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/QIDI PLA Basic @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "QIDI PLA Basic @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PLA Basic @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PLA Basic @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PLA Basic @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PLA Basic @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PLA Basic @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PLA Matte Basic@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PLA Matte Basic @X-Plus 5.json" + }, + { + "name": "QIDI PLA Matte Basic @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/QIDI PLA Matte Basic @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "QIDI PLA Matte Basic @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PLA Matte Basic @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PLA Matte Basic @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PLA Matte Basic @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PLA Matte Basic @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PLA Matte Basic @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PETG Rapido@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PETG Rapido @X-Plus 5.json" + }, + { + "name": "QIDI PETG Rapido @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/QIDI PETG Rapido @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "QIDI PETG Rapido @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PETG Rapido @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PETG Rapido @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PETG Rapido @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PETG Rapido @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PETG Rapido @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PETG Basic@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PETG Basic @X-Plus 5.json" + }, + { + "name": "QIDI PETG Basic @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/QIDI PETG Basic @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "QIDI PETG Basic @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PETG Basic @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PETG Basic @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PETG Basic @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PETG Basic @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PETG Basic @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PETG Translucent@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PETG Translucent @X-Plus 5.json" + }, + { + "name": "QIDI PETG Translucent @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/QIDI PETG Translucent @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "QIDI PETG Translucent @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PETG Translucent @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PETG Translucent @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PETG Translucent @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PETG Translucent @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PETG Translucent @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PETG-CF@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PETG-CF @X-Plus 5.json" + }, + { + "name": "QIDI PETG-CF @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PETG-CF @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PETG-CF @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PETG-CF @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PETG-CF @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PETG-CF @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PETG-GF@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PETG-GF @X-Plus 5.json" + }, + { + "name": "QIDI PETG-GF @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PETG-GF @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PETG-GF @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PETG-GF @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PETG-GF @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PETG-GF @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PPS-GF@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PPS-GF @X-Plus 5.json" + }, + { + "name": "QIDI PPS-GF @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PPS-GF @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PPS-GF @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PPS-GF @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PPS-GF @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PPS-GF @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PEBA 95A@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PEBA 95A @X-Plus 5.json" + }, + { + "name": "QIDI PEBA 95A @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PEBA 95A @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PEBA 95A @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PEBA 95A @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI ASA-CF@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI ASA-CF @X-Plus 5.json" + }, + { + "name": "QIDI ASA-CF @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI ASA-CF @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI ASA-CF @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI ASA-CF @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI ASA-CF @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI ASA-CF @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI TPU-GF@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI TPU-GF @X-Plus 5.json" + }, + { + "name": "QIDI TPU-GF @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI TPU-GF @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI TPU-GF @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI TPU-GF @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI TPU-GF @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI TPU-GF @Qidi X-Plus 5 0.8 nozzle.json" } ], "machine_list": [ @@ -6197,6 +7257,22 @@ { "name": "Qidi Q2C 0.8 nozzle", "sub_path": "machine/Qidi Q2C 0.8 nozzle.json" + }, + { + "name": "Qidi X-Plus 5 0.4 nozzle", + "sub_path": "machine/Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "Qidi X-Plus 5 0.6 nozzle", + "sub_path": "machine/Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "Qidi X-Plus 5 0.8 nozzle", + "sub_path": "machine/Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "Qidi X-Plus 5 0.2 nozzle", + "sub_path": "machine/Qidi X-Plus 5 0.2 nozzle.json" } ] } diff --git a/resources/profiles/Qidi/Qidi X-Plus 5_cover.png b/resources/profiles/Qidi/Qidi X-Plus 5_cover.png new file mode 100644 index 0000000000000000000000000000000000000000..06f5c5858df019a00fa26f45fa34f8bf8e618064 GIT binary patch literal 33441 zcmbqa)3Pwku3WZl+qP}nwr%5Ewr$(CZQHhW{{0N+BGZ+*OC?iDb!Q?JedY0O=s1=?nk>jr>0Y1jx+B`0oh@ z!WGZ$are#YqH;HF;|+`ffN{_OjD#Wri6CehY_l1+P&jb}Leoh@O#@n1^gWFj$3%i( zX0lNT>Nmf*o-z{!U7=C9lvcSB254Krp?(G+9koeb{_S~JRd>q!&5UdAF=zT~_o{+u z0WQHvH@~cMw@Z3=I*GjRDTg!yE;jgRpM&H71s-q2^LKGYKe=}wxhHLOdOi*);)c$R zlK%G-_V_(bj;0x<9mt=2w({=sGUQ7oF*7yK$4PPQS?uaWpk8H@Zkrh{S4k7M3+dQP&9Yv{2ja2zH#YRL zZe`oO>#}b0cQR!@v^#J8z@A8S_<3?<5#-wJInkY#Jl#D_IZP~v*6??7WX(-oGiM8Z zAL@T=v%GKo9>jGFX?uQ0+o50h?PoX6_PO3y>kmctcXFlZb-H`)KHtj;*!JD;hod>} zyB$CGL-2Qgm&$pU7jNecX<>GAxj*NdMRB=&-5nce&TUWPRU*`u$%1DWN#ybimkGqp zO-&2i+uN4!K?@em-90UyXGi#6JTh*jE~ZajUCvKtSxOMTmuX*iUUy%6f4^jJz8+UK zZKc?2b?k3@?)pp7S!V8BxUOAE-GgmDHy37Xg#4vVsBjQ}jf=CGcVTa zpy=iW`EJWn`YQRre-)K$$rJvpJ>1q&V| zXS8SLCruWcvM0ShdEcxx)i{q|_dmqKnK`-_A0-bOe8%<6vwdURrDSBGv(&1SZ@SvrQ?}7A$KwkZudA=e(;3X{_S@}lNAD5H*w}0KIvRSME|#9j zyWJiqk6Ulsu6rN$-QSBJ;I|z|pE20%wcQ@S->+Y{z1~m8_+RVC;eO}gL_gdduOT>p zLwjG~d+*=&yf612EM#c4>0TEew;-eW+a24UJn4+^vUx4I_|+dK6|=ZI;{jq93Z52d zvDFdBT&p2W8r{=pvB!Cjo_zGub>GLv$)It0b3o&7DSb_;C(iC}txru&403MHTZO+z zXCrdCoHK9cw(K)PTqn+tFS>Z+)f2Xi0(-+Vw@HAiI~Kilx%d>rrFj=3bBi<1#v zae5%#Q$iK@l~u$i%RDU4HKjKkI+b#Lwr(@{`_eWY;`?MLfCZ_I_mkV?U!e z$9Enphi>O{4bQ-DQE~xdd}}LJ32h4#ys3WsS7~W!?Kw$4b98YlEh{T4H&bbJ`ki05 z+;!dGk5lN*_`Pl)hb2=}*3xx!3+J2G_I-{Iz1+9!KBpPxY@SHI??d>vb`471Rf@gj z#~PY^F3-1Jcc~{Caid%T+zFu7h&PBQ&MP=p8kS{bU)^bYAEqBTtj#JIBJZ{e&%H6( zRlp%ni7=}c#l)jI5VRw~U7jC_7T9PozhiG#Ox%bk=JY{xK{HtY?)ulvz=-|#B)2^B zl|=SPfBY9AE0EI~UeoRDcJs^no>f-${G(T!$bv^zW@(iZ^SJu^cZ_zSLzzdHTf$M zCf_`b@^dN{Ajy7)&Q5;wj@>coV@@*K`)bjM6^*_zq3Pun5*-&`K^7TL_)bu1`p%T> zu9Wb~gx6~I&-(B`Mycygug0E7v(Ad~TOYd~hqd(iCDH3_mp0&e=;nN1woN}@<9yvG zs|;6pcV-`q#o5KArxopMV2b)+$%2{ z5t`U0)?&tNd(EiUCcUG$6m>_=Tv}xs(NqsqW5)h4sOioI%xM$66 z;|ZZz_`NNwH=|jRrD^l~UJDuW;~ZN^oRUmKlnGR?*&iK(UkJz@&Oj=a_kf#|6Q zF*3pk=Wl#)->Toj-x}vq*mpmKStuvC5aG9xQTQaL5J1;ZfCcl$P!^PY(|y}0>M<2y zSvofs1UDYM-mgzcEwZphWSo+y%Y9a#&*@GkB^s_d;W6us?LD!W?Xd2 zT=*tJfbC&p1%d{G3r91Dv3Non!%|3lsn|kh+HyiKpHQpA;>(FLHwDOi?5P-z3Z!ec z%Q80+G^MH;s>M_X;pjS7F;u3aRcCCqHFj3tOq|t+ov=}x*&S~P8jRO==TQJlEu#6g z_P2-~1X2Z5eABgOy1e`s*GpuFDuQ<~!L}UQ`*g;Yxzn3Tl0NFdOcwja;z$(P@d`o{ zf?JPbO3YB4MWnD-GAfvSvl=19hSeZLP#=DbYJ-IS{jp4EBa2h+fnyUaLxw8$=J25Z z$-rpTX;A(Y<~>`URyO)EgJ^?8V;WUD7H&w%GWcAGF5#StS5V8_%QcB%foVJQ zjKaT`G^>*e3u8tY+4hGvt5XZ0Y^c;zI2K~LEyE;gx5ZV}q1jJ)bu8bpeFkX;ugKNk z)xB^>TNaMNySjVof1|)S@q(6E>I9p$M#?0?Zu7nABphcOb-pohrn5S!&S)2vHEKd4?&=nYD-?&SfJqM(CJ|olV118c&S6ZQ=3Sj&~ z{o0=+y0v)|Y3dp^o_s9bZ`SZ)ZW-BeXL)}GB#<7#mVvH~NM-@P!*A6RIYqad7E zuH{vB3TRZM1zZ*f*}*TRKwZq)|3 zkfWT>zMVY{Uk zd+`rXnb-o2-AZ>=VwTzq=^pw*c^iN;b9uJ*cMx$jwrn?OGjf9Xj$4HNLY`rdJip&Y zqtohi`i#PL?B?;id0(}xe%MuH$xYRbt98}8LF<5?jdCv=4BP8&f#9kj9BjRj9Sn^? zOmw=njFn0hD#3&|>E!WBDWE|tp~UsVHjr5gBzO3_oV{BO^y7r1a(45dpP7$!fYQ3g zn-i%t7snP;6^F!_9!i@Ko0YjB=_~WIi{)ah`yM){*mE{I!Eg#S<h3o4A*R5rb*7y0Xryt7HsTOi`m`{qOQ6SFm;nxIt;kcp9OR?T@K3Awsx-v}Sz`P+c1{ z)EJqDqqTyt4A}2$?zKHT4~y=#KLiwT?E452l?5Ha@VHzg)PYVzX4RWk1JZo;Epm9Q zCZJc!4#HlZmK!lV77myq;SNw!A+s$16pWn=CCY<1KXBk^7ar0le=z76{-%BBF~~+i ztT(~xF2M*h_CcLZCcZY(U3-N13!r6>UPmQdmJatMz;I0u6&$oua2hd9sgoL-BzHE_ zsfz{?KhH=4szpxzsX<*7upj@E0G`lCRkjVY%8#W&6W69NR=GpWn!)y znodBwD_x`eL768tei5Yy-f|+{t1+S-4KOb9<+w+0l%30;FAtcrvjZ|}hH~HVa_DFD#1?78(AwH!%;M}Yy#LiZh*DXhVSD8-yCSXry5gBIV9bFs1|VzCQiifAV) zQO8q+#rTPa=Xl?I24+ej-J=r#S5A|4TD%NY0Yv~nEMU5zmJH*?U__9AclTjDUS~n- zQ&3qt)Yt%M-&R-LXoRYg8ede)+WZ38HR+ld06FqqUQShy*aYC>1nW1(RMvIfcMsl? zcKd_iUD1TALL-$HzbuP1Ef|pn4GV@42|$c`e`~8Dpd7W_$Q%L?gy9HZ3No7ZGfP4C zDzQ55r$6PygfkR`*L^dhNW+Y>$?vVq5QLN&90w96y(F}=1X%g=aB#@*DF#N(R3g>b z+nQSIJWL8Etfdg#CO)3fLA3hwSHD~~y1I07t&fCnhwJU9G3>5)RK79+?OQ{h`(AvN zF}pn66{3Ay4(%D%P1iu4h@PmZTR|X#H1eZ`l$`WK_x-5uw0UL^*cRNnj{{d3Z6|TP z-tRjdvoCS_4J^&mPJqrh+?oJGi9s{fz!t%x;8&Sw2$1>=5Q15Qyyjf$KR$1AaGf3H zN%JA>>{eF67-6Wbv&HYUI)??+lM|=(oG|*SLGf|ggTLw*w0H~*`xPjnFLt&nMpIq@ zQQi5<`83^3Pk?4akEASV86@8)#zsfMdY)#v!SYa$?QLx#K^)J|ViRUtw*~HQ z&(@XmlVVzfyiI{H+L%(q2q8KrjkzjGk;5RMQ*+C}V1cv|ppmMTH_ngSjB);va;zJ8 z&;%XGp*iIKAiGr(;55^-P;lNH-v|HK3&bp@9}_70-*14aY^hF7n}?np~VOrNuR z#gD`4f8V_GZG#1-&ax59adUL8oy}iXVu=%@Dij`C7_8NW5nH)ODX+(%PoDFW3eFOh4DdW9QfMU>4Mjjd4A_X*|y8sH3B zfG!_#Am8i>kwSGLqyz?>#++(IW>Vxwi%H43JN+?+&p6U7rhPO;l$70=Pe>XAzmzl90Q8Vp+;M+&HSitX;)kflL49eL=Sv(@9E1R2wFADVUm!j3!0nGxyE+*17LFJ%SJ~-ZPZ@HXIrr4y{V%gia zFTdaKj!AyWeCnvRM^Irw5ydIar|J3*@kmp4FMSYi#N%0pnxlThcw4VO2p}=YkOe?xhS2 zI|v!)(%8*cen*Vn!T74K#j8CpJ?ynb0oj6`NTWjw;VQ+zf}7&Rziu7*@c?LV!lc5{ zQU=tT(|W4=>xZ9L&+{WQzA(z3T*MVx@CmzGpzOCn;vn^CA{F_I5Vfs>wxAt-zMe4# zyvG0ya$E6$VN2|+fJ4zhv2!-(X?u>S5kVL=g3vaQk5=8g3TXZ4ecO2xP{XO4f&#;W z`&sRH_?0Xmy|Q?w}P4WQd} z?TBmrkD790lj5uh08I>TXQA^EVF&eBRbA}wOBMjf zh8PeLD|^VNa>o&!+IBt5d4|sW77YxI1IDB@ne%&DSyLGz6DN;_ zl|B@nXcW{=8C{gO0;UEi&2W_XEhduK7DwOpqqbg+n0K5A2_^@Yw`(bo1-|q!}Fcf)TCYUySO-=q3uim>*WF%{1<$%YDt+HI4mE!`dp!O7*+*$5Fb zHlvG+&EqMF59kThtlv6G==dUkjLi-jHD+Ng@-T74jxbE9#yh=XHg3LSXqa&DD4s&6 z?}@ZA@dx0>$695(29C7k=3`V14riSdFg{S7u?aP`mY zc(VIM&-*lg9xuW#bhNuK&Vs59E0I=Y#T!F?der4+B1#XyoVQ0_0!5XM(|!Y1l>n~c zL7Dq-z61`+96a=(qY3YKeqV}FI-2}o9$l^OSzTSVrNpP?*RDaT9`OX#7UZy`fP?lh zb*JqTZ)W#+lE`J~B5@=&UYX8dU7zGoasEi9Juq0qh^7$yuo-qFKo8$atdXgJ?Nu6N zr9-gToPdIvj4cAhoc(uTT@S&yk7MC-INb2vGbqby7BSoR)A|Keh}jYSQ?`@t_B7m{ z!OEN0K9od4xgDvwRc9gy9<#|3+6YS9xz^AoK<;FhaV=Q$Gvj5$d4xX_6&h@!_df7- zSG1<*9h3Ta9ctnPjPJRx=k;5Xwj((pcEW|tsSEBl<+MWO2qo$fYxbK3D#|P}xQ~O{ z?M0@&&xLxoBA^f~T?$ekeeX|iskWuf4W#-WX;1D^M-{CqLz!-nm3CNjyJq8qN?|5>lC;o;WAz#cZD?!-T2UT+;=1Q|+)av5h7Va_HlZtMm(<{ibK1H~Sf z4n0G2XY2FKjk+n5}Sl|bNL!x*{gguceBx`%!lx0F+>-$(bJnAg$J zA^CUc|Cjch_tU{I-S^wESNwI?HHQNi*xo#NRo5rze?jlZ|1&KA+iaoiaGUo&?CyoN z8VZemzQVp+Sd)XRoz1k0Vq4OTr6z?3?DoZOmTpPbret*c(j*CV9h=f34s@-;>sM7} z%}2=6DjeK^Vdl^^x9w=|H-`P#-J1nr3f;?}zQ+E#aG{Lm0*RF5BR%q|PN$pftkD#w z2Dd zJW#D(@cM~fu|J}9b+o&`G*+Y*6tC8Jbh11FKhNvA(&2PM<@^2sKOtW%-(cYXJ`}eU z_jmLc%JM&p`^|g)O8Q19A%MI z&h@aE;Mi4=jt=z16-cOnhh@jbN|T2w+e^+sH&$E!D&Bmsxk;!<@gJ*S0r157fv;Rv zJ#2OUZxL(|ASTfS>7i+CN*u)aX`mXS?P_ww{juxL109{XixqZf7cZ4KbJLtQS}x`J ztHQA^`Yd&MvNkjn)G$Tg!Js&SrVIn*mWDPQ0UQ{(H86$v-5LVt&+l`Y@*%yUVR779 zjrvTo90o$#ndk;%*n(Ylpi1L(1ltUU@pv~00YEb|h?A72X+?!$)!|z7dr>_XF=hs6 zhI(Pn_cCwk&2Nspq^_NJ+g<-_bB%fX9r<~Lo}c)6b!D2`x$k#8?l;bbq)yFzHha~J zOtVV2EXIfiYiSq@zG1u@W2D%eq1iAxk}(k`i-+zXY(s7fM#TOyejI%`*qSCrFnSd(OpmoWGH@fP~o*i%hy`}L}pFKS6zVXmtWh6!BeIBNr zbN}AsyK&SeIPm&jiRTuh>-lIle-y>>QOS%f5R03#a=1Q{?6|J!W-xZ9`CXd(=g#&y zM=Z-Is57e<3Sn#1cjWYlR@XS;ggeY#<_DR}?J72BhaDINJ@JaM31UbwOg|9N9R*As zE6j}Bs*2_#7}N42tL&}LWHn03R%^uVQCm?$noeL~qr+1>Q6fG$IXe#pCu&J|0OiG* zgxPE58=4Rr!9YWWKrn-EfEd*uqjM&NUPX}OrKMR$0|qRlKtSeM>C^|hGb2Am^Luuf zZnNcB)ps^h?59YVLU<>pBd^e8B*u*am5k=nHSr+E;c`}23vQ*~JL-g)^#kZRXxHlc zhu?M|$>4e8k@%6d`DW0W40!DaeoaTUktBr?@5JKs*XCFN3W+~5&HQ07|5orn>;V7b zYR>4-V0|8d;~VTD^gK>hd0y;}YkfrTeeHVR70i84)-7O>cP1hSEXM8IAQI0cdD`T; z4vJqLha1ucs-UG-N~<~0(}yYqU2v8_M}V6dlT;}p)o39NWke)%Y&pty=jM=4T8VJE zeW!0}6|!_nXnEUTCLPUxX3odbe6KxDl7QNWXi^5+R9TC=WP3B{4`ef6^1h#fX2!P^ zVq$zdRZp-W6K9lI(FDo@_|b%?{XWb8MeoxI06;hy(iS?m$)ct!VMKVEi!;Q8!p--m z8i7#8E`2>EmiU|xpI3*)vyGlLDp&LpnuRLUw9sT5OF$e{ z=OCYCBY~E(p1dz{*&wbhk77I6|FFx;>A^nRLz7Gb`5b-13RN?-o9apNe^vEWf@R1? zmXsuz7aB7`Z6$5Jo&5LOmA-ZNJ{&upSm(g3wu9d%t?Q<^p^)S2dJ@z#=*>I^rGi+W z?frhAGBSCD=J?)%&R#G-46cQf2kl^DJYEu_)63!LaM8QDF|dXiqXZ8XeI3H5j!!Lz zGIn9`pMr1OkKl?Pi3qPzRx1Bn4UnnxIWq0!t|PJUc_|ej@uRceHYS&ol7W>6GFdD- zh2++pJ$w4_(-GXa(Az-}0plM_i9(-dgFre**}kP*KG7TFBM67%aL2Qzu8B}&0YyGa zB+JwHc$x2{bN%41HEZthY{DRcY);r!DKJ2l85)%p%|SgACB1FU4(v9+MK1x0B$I!l zH&{E;+>AARg(h&q?X1{i4R#iBaOT%(cgVf%IMe%&`L_Kyl-@%Kj+o>1JOue!%KOCp zjO%;z=79_Qvi7#_GC~<=Bp;$NL%{Rd7u=kl3^+i?0u3b-vi3-9DdM0imCCX^xoWu; zmoL{IBvD{O$m8jW+P>FDGxpQA5SI;E9j{krSh6LR2=qF0O~tRujG-)}Ri+sk6Q zg`pnTz-Vz5E5V3?Hj)gA;+Q{^2YU!@>!e) zHswr4S$jW6iu0zy7Ucgy=9k<1^7Yp%nioQh-4s-UT3#nFKx-w69D&v_0KZjK7P>68 zt&Saz)P>HZP5$cS4WE>$EQ!}uf)Qm(YlMS?#{Okw9be@!mT0d(INtYu;8bs7^Ly<$ zdo<}4%JaXZr%l6RY8_LnbtB} z>aE)?*fA(ZMx@!+OOi1Z3$CqT^x7{N$`+)v4g*%HRTMQjhq30sXwqB^hT=mLzV=Jf z^ij{CDg2e7LR4aocMI z(ZOKHObJgRM>^%sCw*{yqLg5_>(lsR)P5 zyRlx)ZeGWn%F(WD#A0xufwPD_-8Le7?$5Ta2bkWdm166+w`^Tsm8le+3Q!o6$%~Jh z@nLyG_#J(SVD{xcx>sK(ldIdeGK>cqJt+Jj+=49` zIgm7>oVn-BGp`xKwN8Vrt?q}-AwmZk%N0WX_Sa)(vbc{w!bR}(XGW2ocr~GgjJ<=X z8%=12QNTJ1LEAH0u;Y)`u(OExY3&)Y$YUPIw)ymY(`}V7&%r=_ltyHsg9llR_ZC-2 zVK>`TZKG7Ia1Rm05t!AB@q}sZ4L0b%7@*$5a2(T72@mp?Dh{%CrMr#p&Eqx%3LZUw zq#yNt&D70Gp%S4CrJm*n-Gy&rm7&0BgLtM3Yqvr)%q{K_q_oY`oVJD4qN+3I_#W%W zr0xfPhW8lzU{GG*!nNqEnT9L6O`xyKIX-u{`&$&_kaRuLdXcn3)`?(i8?NtAlDH!o z9;9st&yOl_c%g>h@UjA8>LUY+XPNJ~bpv~vxg`;w>rgZ((pAdKTP@7oM{Ux~Ws+o5-> z7R&ns>t7XhdZ@pPS;H7_=Uwe8R8r7#Z$$LbglF>80gVy$+qguW&DQ(*``(iLGk+KU zzL8TqkT0ZG1^myq`efHbWSzMJI1O$_=R-n6b$7q{#$s`kNYi;k?en~|W^??*FL}Cm zE$B;aJUQ_|sg-7f*ICrk8{arAa*q~L5@J$3c@rQ>Nc-KmpTM+G)rv0lydFg99U>B~ zcp?;d660#OW>|J)cL`-W-#pAX)4f1!&ydNiL=L0$y|sS%98cxA93N%EOlW%^V$daQ z<8^DYdb}ja#Z>u%;2o#ucgOgc)D%4GpQ?AbszjKRq$SF2zVh;8h6>uqmOuO8Dzc>Dp=}c==ft&dr6Ufgu zTdvq7Iy)T)rrKt6ivCW)f5Ch|m+}zT`mhp78gQ`2vT-6vt;;OtOf*jo&xb8%P;rMB zgzR*rS1QOnFd2I*%yg(%$b|4V4|kg40YHcv0>`o$nf8%U%MzCP5ryq#H`!WA5Nbe` z661?NH7}kL4p$+t*@U*mf1mFckeMoK^*Ts=BYO0&O`kh`&(D8ICtky#VIhK)tZ1g2 zuAo&zAOn7WCvBvIT&)Xn29;}{#p&K{&P_qO0Y#7Vmst5=S^P6D3Nm3-$v6l#B(3$w z3DOm{FXd6rgNjn^>8|dH{qOF~XTC8H0{tKSzc|AgJt$9o{-XN6(=OEgU)DgwENH}t z3yRd4Wi<7*-3j{%3lkK4dI;OUu&Z!DZ?La**bor)Z>SL~8nDQ_S``z7;OLO@c=G>& z&BD90TmnceR%2jkwH9QdD`@nYf!u={x=d7u5h8+sjl@}ngTF6-8a2a! zV7?4Mk{QMFt-#bNe5UtTo5b~5BkxV}yYKtC zV`}C&0V+XRYnb-Zai>C&!`x7t(a1Z*RGnGJ2rgno^j+|<$<~y$j@1#-g`>cstXw~L z?k9V2E*xQy{!@G5Mt}(MK$PrEfh&h~F_y{PheP&I8<@8cbe&lgA9dFiF;4{>=C^}L zE;Gr=3e+}n3~XR^zOE=xB{sQRFE=pF^(3ZlE!>JL8H7=Z2_pmvq@5>J*-WZLFTuQ# zq6--jpdl{m-;V*4BY}MAp6wS zkkHZNDZ70yi&J{aI^zd0#s|{5O8_AheADkES!D&uZ6l9$fd(do13nn~6sa+1v<&h% z93wUFmQLU&OE4Bos_&Top-VP}AfIMFD_?IkjRvbI&jpu!MnEQ4WK?kEaW@kkrM(MP zyON1b(c=C14tZ3(wrrX$mDAz>Q}+kEspMR%B7>z_6KlgGMy+Sp-i2$Z z-mG+my^?V3mwI01p(Busbv+uX&~~*pQENd=yL$^2^2+yGQQ$feypT_+M1?9OoKcDr zW4QLf$-TwRcYpYHC;iHpXl)%>8QT3xn65y{Ny``-zZg^|%~3U~K#$F*c3`I7x`FDP zqa;jVVKfrZgo$J+*VQDTGu8g)ocC7XrRv>uVap_hsEj>4=@_>p$Y4T%jQ))-rRCm;_R zReKUP?OVX6c|#k*vc*5T1_5-i!YmeTMI7>4x}q2AL~)DwRwio2%GMTF(}eu;PtyMm zSmX{`I2@s}6U)SV$uf>!lhDQ9#FaK3Bo`&os;{`1ldV>9dxcBQ3g!-SZifZV{apaj zp+;z#t9A7Z$-#@fl58a&iHZYW+8PU{(CD5bdNhi@$K+wFQg%Jh zkr4XEPNUTMY!_+BD#-TY-%)Md)bQ~=fZHCu^g~(&2)W}k(P2srp;HW+x_wU=q<^PL zK{kVlX_v{uW-6f_WO?AYupF=zPJ7Z;yDL4l52>3pZ}cXH*KP(OgN*OCH}s>gsqYt(N*Z%L+!#Tp8ylhFWZ9}k%M`bY0wGL* z;>`**7_odNHhZfngU3B53o7Z@yZ1>kboTsJxI&Sf06{-|)_*%D|3(o+7GW~{M$>B= zyb?_o^8TAwEwHEm?c>Y){yIPI*#C~!Nq=!_>rSP&C{>R&!&R>V+Ig6J(&LaM_L3svBxZYPcG7X2uS3+`vU6oXquL5X|E1q^a3PEHbk&n*V$ah zfn+>XvS1vXzmwsXhdx?Be`9;qzW6d)7m^&Xg%ie>iiq39cutT2jg_GlWJ}L}k$5gC z+_8tA0t^IH9eX>If!!&TaWw1cfY%dqw`Rc*kZf_2LY*u9?oRTydBb*N$~iI$DN}yUm!S_$8RqQew^~g zxX!KfFm5$;0kyPPRo6pD083}{d;1@?lVWYZyYyXTTz@B_)o26ukTA_ZD zGnMMV?aNH zWrZfUKVMSMDBOU*PmfB2j5G(Qi4>=$`Dq9-dWk6;hzO|Bd+1_lQTjO(WE&@t2)w4) z639C<&#=-}%n~B<=oZ*~pKltUZ(HbiZN5P-Vh;&u0PFj^z14U!qAbr_;+^{z;80pn z-TAl7;$*y%pire18pi70C`e%wFV0DK-lu0|lxj(=9QLmpdc}$UI3JX&!XdGdtaJx- zlHpCp)SQ}cB8mk}p(?OmG}4ZHpbZ1ofKUqD8^^b?SA6H92ld%cXD^0azZDNoYg8k( z=VCdn?)Wc|7!n7Rx_Qp+`79quJpF$c)qq>XYz(eR@#G=dAk;GtcSyoe}q3%zdmU zQTKFy(_}_Ohr_v)LTEQDVLUzU>GtIVu6Daa6$BIoLrn>GXQY=L#5?#e&vI;8yec9A zj0vsLHgJsN8d}Y>k152;3_6b(w?@(=yKC2@El;auRS!qB(>m}5KoIvP{NJwn35g~W z=8(b$zP!GUG3P2gyULP23-h=NW}v9?V^lL57^fTT&03TK3LkQkK(`7?^|95>DBXLP zs6ry7a|Xc>8>hT%zh?kqlTSNq)nLdx-~6H+KPlF;sEp-2u7=vj_CjN)J8F2GkH0;L zUTEbP%ZlZ(YsJ;IeJ?rrt5kz9b9@48PIcYD-{ey!QdQwfYN9+xHC5oax{RqL7IpVh zs?zXh=nHJKyJ~vx2%GQ3kym|TKgBX^oQt<@&B6?pesG!q=934=mZU+QaUS=?Wn&^y zWW)ND$bZS#K*9xtH7nAvykshBAcVO@KH`IrSu^c&1$2tBK3n0)$X+W}3a1~Lq^QuZ zgfPua*aoaE)A|=a#X3vdH`Wmm>Rz|PF)IkusQsbBBvC)Ou524G-rQ5gINVYY>CFNL zT#u_ubaaZ$Su^(2*=)mFi%5*?tqg!srC{YfW=P4t{2V+0ephtF9#Xwpf?kw;LcNxN&N zkO6QX=-Usc|xmU{I&koFAM>7rxE2*kE?JcV|ep@zFYOU zv~_$2$7%#CSSTE;vYC5IDD{C3{;Y)K11`%C<3UteS_>-@k}5xO#5UQ59EdKq6_PZo zLIMq!rq)iZ?7pR>2&JXhpJB`@a{ z4GM=xb1g6dW`Ink`3Vqdv)Of&9pNA(XnRj0oZ};c#Fn zNhLxUzGJEVdz={Gn>%XO%d%TiCjF6xYUvpaMMTG)FDsASpuV6S^upRRU zj7lll`08C}D7mUYyyG(_+RXY##YQI3)jTI>ZCYhXAcUgkSYyc00)=%3Dr1wB*nZlg zL7L0(r$DN|dV8r>1kFDUo+wJOZS5n+`pXP&l;7JB^{D2_Pq&$Z64;jrcM`8Y!q- z9cGvVNX3okGMQ{aZJT)1DRg(o2&<}m8K74*N+KJQIP54eo0LVNOBLcRKMPws4%_0e z$OH2*ry3hKs58-s$m6p~DgZ%*Df25UTn{X}XQ5QW{y3&nuOzRA|01<|Q)2r8a|`Y^K8Uo^vWGbi~Ru zx0CoZRnT!gF+$ppDQpWR#x~oedwUP8k=gs51NkdJ?BBf*HjjZ%(}z+;M6?pD`X!`Q z-qU_;3<$QQ`BD(pu##Y=+YZdKQmWj~*)0CPuKpIb+hcuAq+a*k8crC5%gNdJm~;&V z+w>QW0yrF?MbR+=v>eP2eFN-i)7~+AV#P$SQ8fQ4(Mp>d;@XgfH+kpANQji^IqqVC zu6!=gXBFk(Wm}0o%0zWfgmdzs>QfvAu`HzFrLwG^uUxOI^N1LVp0bEmzw1oiEtez< z1mBHV|C$4=Dw_D}XD125v@j;-8E%7{pm8K#MEV8FJUtZr(Ue*|(#hPqb*zs7bafmU z$fBH^EVLnl*_5!b!ee^WjiqTrTD!9%815_SZCClerA&~AqRqU~(T;7MBc8yCtGFTR zNEs~dB}=}WNT4)`Xp=)4)ua+S`1?nJXryHG0Lctaf*pvWTVAoqm}5I+S<9;5=6#VG zp3sVZc2Nj6|7%3spX+0(D1n#Lx^Yphti=`4twKAXSchc=rF1O0zcln>p_P)N8dG~M z^GViK1+DZsEY$NJT9tWN($RFa!KKM{j2qJ9Qv9aC0ZXnP|J6 zpPKn?T2=b!H16<%S{l6KWcfNXd3j}eBj>iDc((l-8lJ3v+v|-3s7@)>Xp9`TcHXaw zmbpVH7iMaHHKy%Z+4)zh{OcyR_nPGz<%cQ9rGn<*o(cOG?ytq1f^wpopKr%|EAQ@V0%(?J2h8FA>P$9kiVc8~mnEX5t=0|6 zK1~xqxZ{@07H)Kn8fDyu@Xsc&mYWOvyA!E55vaUp-0n*i&`%KDni)gX+FZBC2x$!+ z$DYCk@hD;dMZw6Y6M?*wh1g9)5ISRd8S_n2TRj$y=Y7V3@EM;W>tkAzr z4Vob4{#K9yT6$$>oRdx_LaQTFw5f0g{tScAvJF(?)heKmyOV4N4|2G*?cH8U*L*bz z$9uc);GQ7Y2tdgAsWpfH@(<-8kX~$DVj{XfvDD6z%q}@nJYOjsjI3qKbTZe$_YW(K z7?N(Vbz+?U_~wA5Fs@?{AbSUaNkpaGRtQTs%q^M*b&ha&8tVGiyB=xv)hW-(Uvc%- zN2+1nxS$jYk*<-y$RY1xUY5~CDIzCcfe}paW-F!bG~mIhk4s@I&6FrJ9QL2% zE3@v^EVNAqPHe*wLod*cUU7~20n{w*8|Vv$IhnO3xKXpU#GxRMi1XR%mg+tGTJ2tZ zPW`&W(zei*dMq1r%u1}w9y%ljGMZ3Nd$mRgUP~jOakm2ni_V1uF8*E{Ns4Z1JyAOp zqYV5qf6LAO@x$AuZ|*x7I54p1SY<>3iUu zE&@XhJQ$UWO+v=>`e0bn3`iQvEy>INYw}lICNcdVhWv&_h%o(J<}ol|3G$W8#hiv~ zel%bkT{9jsg^%l=8bjiS6fOayN{?=BpMDQi$L&cpUF3h?_et`TQt#S%e>}b~Q+=dK zN4Z~krNSF0GkOE48z)k4xeqZE!JQq77b&1ALr$1Ok6@3L7nwm(${PrHlVMu`5GHk% zxnk~3PcNeN2JveHDhM_zZbErO2rr#D5!u0N36zmScQr{4+EDG*HAulm+GUC!k}MG|YiYGD|9xw)i7ifAFw~igv8F7dvB5OyVNaW*!c{WV!omuDk?+7; z#$i=)UZJ}e2|m;8<8EGJOO{&=qz=c9X0eI-Aw_R%DP2mPFZ3*m7CI8-A(ziX^A7QR z&#B33Es!gAw(pj?`{+M9gwoRkMN|Jr6vk;S>E=6C3l)Q&bW!aGhCit&uVb;?l^&fK zHL6amK;bE3x}&!9TF9#I8G#w-rrNFdff{YECftDgjO!*J)j$HWOr7Ngm8MhiPB-$U zu<#XmA|U3-1T2y^xqAN$q6V)>%JPj4egtof)9k22fl~ruLBLdSIZRZ~noaQ64FU;E z2+@2PT~8lhd0d$XCd57kul%C+twfprLadl+6#3Lh>b*Tk*_M4^-%tQ z0ER$$zf2Z>R-;0SHX=@%4-|WB+SZe00Uhuv!D1$m8s+SoozvSyfh!%+ZtbXOXfP5A zSsHH(96&5LBTKDYkJ(3tVge>6hMj7Qf5^NuyQ+qz1+#hJcd44|)WN zBfbl+ud>m-qkA2DYiOA@t-l0!0;kpjzB=f`?GWsn zf$-pZf`HS!aaKQT7All`&;pHHmOZL$g)-qPCZM`@XzeGcsOxz;*GF7x;8T>jBMn5a5O9PKwDwJHB;h-IQSSO*{JQll} zov4L&5frH>kXY*GHN$skFOJ#!@b9|6_qb?AA_AS~wKWjGP!&)KgTAxR8Vwa)J8X5V z8`Rw}$Y2G@S5{ZNA{E;#yfJ1|(_dt9BK3qJun);K=WIb25Ae6XP{7QS! zQw0SIW-VLkPSwJ;H>_(z#F^`cRZH=VXxF7m(-&A#ph-^yXhRDiP9pb^!RU-}QM%Po zpgk@lX<8B{X$@_#Hw^3oyk8g$oPOVqpb>RX6@Qj3{mhg|btV&X-R}nbsn~Nx*))Y0 zrXto7v~RK2RJQ>uL{k;241h?{`y9{*iVgQx?%TL92yz2v!}=|hu~6nQn4ww{ZV{2U z*YVpbr;F(mst75qrdb9T9W+bL&6Uwgvp84(m8}eH%Y}iU&X=C@d;0RM+Na?5Qlw-U zM_oe+8Vnwu<tI12zi~R-J{i^ zQ}{70o<0*^HRO$Y3&D0?=v*;TC}9mv#Z=VfCcK!wBI#w`2016_Zne5uslAi+IgCAM z_@-@KIh9Ej9M*^open1ujJnwVUdP@V+FoYGT-;(U{&gPIs+Y31^^rtxv91hr(E(z^n(cd_Svk9p9yjnlD=LZX;R?s&g?MvEM<6)e2NUiplFZ0$Y zOh8ObXw;GhywWh}JT9!bED4N?98XFJ>OMYL$hI%=z zm-Bk!pi^Rm#vMW*+-G*RpfrEp&@Eq2keTH$RT(p>VD`Fwp&3$|+I_mD@9u8feaKhC z&bAwt{+f1A{aV(5c;GBJU)NdZfe zvofA6Ysv@SLG4G?)ZAV@Pd{_p$!mwCB61Fu$io5l6X3ru4b3cvBxI6e9j*97RKf|R zhe}(hh7vw11L3HJ8U?vg^>P3~JoBMI3<$|U1E+aGo5%1&;Y%}ZLc9GQG-OBW`_G<> z0jNJ;WGv!y`Fo&oRQvTkf`|NL$MCHQCc-sQq>^tpv1(SjQKi=BQ1qa%ptbUA9ETGq zd43@V4C!wWyl4SMfPi)ENs1*Jk5XmuRd&Q60|lX|3@w`0R{^gpVh|8eM#rw~qUBrF zrM;_g_~5n5(vifO=o>etD^B!9;)a^4Uf&I1^HFv2J<(u&Ey z$Hak#nAPC52G$Or7iJ?arN_+-lrY&l(ZcnVV=GeGw>=jrCEj4W^Z5%=gUsVw> z3Qx!c+vLbfdx4V{4esF$C5{?nggETttI&72E%l-K;hmBCijRtL`(UQBtlR41ME$G~ zU{;f3V%@m?J3sLWdhOL$^%*S$0#KpE8>k|f70^_z2IPujk-++AGqfANEAKHBT2O1X z)jfFkSSIJdIa58Sb~c$R^u}Vj_LU}8%Wr~1q-4LyekP_>*?}>&IvryZ`lhOZ0YO0d zuwagJDQ-W z>YMWU$j$5Bm<0dKAFy#Qu@9gFEmqoB08cNVgRF*`M|D?{YG8U131dK%nNG zF9kjf*^#2Ti&0ezd?;EcC7a@vchx3UnxO@Qt+$DS2XpbD@Lnq;+n3N|BJ3LZoXA5i zYnav8HgK*9BNAv!_EE_cX-d08H7LfO7GDja7wq3Q13Rg;T^Vr1R74h= z67h3=U-!M`d4J)fQqesr^}`Fq)N0Z3!4+<_J_EQYZKHNnJJ60brB!QO&fqBZqKB=n z>pqtj6?R~eAP?K01`uR6Zln%hEHM;mp!Km7go?olX^5dg=jjtw6bRSabILho7}a55 zdn6j4SL5iUs#_?USgnZQZIOe=*(g#GiG$?3Qm}`w*XYPzav#0QD$yXtiE6_x3}c`} zDk)+%qwF1uz}7}1CcAc)b^fD#{!LWe5)9V+ZwT|A{2WTiw*$J92AukfGMwZP=k zVZui9^#entiNSGWGgEhTRbi>Uuh?KL^h$8bL`7H)S9yQKnCD06Zn*FkLbggf_Jg0L zKlVDoZ=@q+o5=J&-?VPD{#7YH>qltglH#x0Hu`|gW8M-><60612!)w*@tim#bmST} zRc*oYyFii82=MT8TsI3@^sTGaqlPM!=AaXqCQoU&I;i4qXb5>yb+2ZSlZW&sFZgs_Z7Dxq8Aam7GF6AJ1q| z9xahOXNGMkG_CgK?O-|j z{!dfh#8_$@!@}CfrLJ}338#uZ$AVc$qp?4)gp}&}zGsV1INL|YAf-c~N=t)-US3-E zBAcFmX37T|8U|tA-*q3zd5Y-V3+it2rg3+-Ow!w86t~m@Xot==bu;Y*o z8MMQ(yngr2`M1@pm;b!@&ZX=q*%5l}^j#0g^~?Yb}=J;dlnu6QY}R6;G_F#H6XRE0XR z3dN-GisP&I13UJ;t=m}QY|EzZAk#Xt2R5QSs-TW%6sk@+)-rJ@?Wl zzWa~UQ(yd&8%x|5Y<%xdx)O&SN;OeFP(0pu5dds+ZkYEcEd2um4>dZFIN;ExdiSQO zYU8D3X?dk^jR*444AcP!fh%AM#e8n%DZJh zXz)vMO$M`0%N688HPBx6Uv03yI)Bx5MYHJOEC~FmTQnowb54#l&oj^d?(GVT?`_1! z;^)rYb6$9HKzRA^36Aq>e3-A{0I=nyQD%KM z&$n0%@cV8orsRBbUsVxB>@wQgJ9A+HL!t5U3y=pZLEr{0X@(6Trq-rY2qKYm7EbF4 z0@_j^_gTduE7CqT-IVt2c}7s~8M$FvS9poAZ$@JYmOg|q_EMtcREzyfHOMbU3*VOm z)9X#r`Lj+O2FrsR*IIwDY|R|?dFZm)$x%~h_2ek$E}l$j;B28eW5(NH?F-Ftvio_V zv`n|5&yxTcS)FmV@5-obKcf8>sRVZwLmu^5__Y1Fz4_QXmIGDu z?S;mst(#`CcJ&T$*Ed!FhQi24Uxh^0RY!SHx$sKy@z+{!F$9@~9|bEehAXq@l}Uo< z%o?M^&+Tfzwg^BPOr#R`Qaq{&okBJ#pxt80;ge?(*c$yrd;lY>m?Q#*}QU(>`bvblR*1br|={eE%ySxWCZY5W|T=asP%%xY?M@W5b+ z>6QYG_pa|-)ILrkhaAyT#_&(kPIBP@>`+d*q;F~LgW}N6n1&`)^jA|@Cf$@1u^`c% zCZYiix#1{Mt`DsPaORhCO0$Da1A+9Eo`&nZt;z;EMbpuM(lK=9*ZPYS zv}yT$?uBRpQ;`ZxxD}kJg<6(eJ8PEBsUI2BjMKvUAcZnXXlCNTbDFFP!6t4UaV7y{ zytjDP%46Nz!XcY(=oH-03#R>nsZp=POW1}+w6m{(mLnSN$;R6PrXnrY&z`Yyh^2z2|63C9OVMa4p8Jeb9c#pYzR#2;1 zU~uY}k`USf)tYQ2!fpV%EnOW?QxpvQImDe_B^3y5XK7^n z$iUj4hW5r8L5|cR7Gfz9Xj>LkbOJ3}?q}h^esC`>m<;?I;K>{mLA&4O8H3Lk7?`#7 zJ$vuLxih%Be(vC!1=nKb!}fSAkaymBr#ca`K%PEz$_HH`jtT|Weg-TMhN*UfAW+E| z2W6sKNnoXFX}5)TYopn&=C2s-LqG2`9=gLuG^EA?N`v)A_``+knn_3P78-dT-_{rz%l54H zt+lc{3y2)g;&=b760rI?i`p{y{T6NJfBj4~q}g+8XMkTv1!@f6!!lxe-4=p9fj76d zc&j7qA;3eGb=fYIS(1C`fQ>3g$Y#9%N-cN(BQ zkA2a0^759H$q(&q$>C1gG1oWQGL@(V17--u-3vhJxoB~OPZCteS=-)Fd3*G~t5kABF4PgXC+Ra_(VM^*PFwwN{MXA%Q)cAcmn7=`gr)pJsWhwagnl<00Am=-{^)xh`@qn;T>+Lzk#(eD%XdL8-cr7rAL}L$sY>r&uDY{6!3R35ZAi zXDSwZUEazulu1Bunjlufov2J0EL9M0uc*{@w}c{dD*@HeVE9HQ)oH9W7i2NEx z^c8=Jd(2+rOSZMiR}N_FMDy^VI*O3a<7A>)LDuh@3PRM{1k6N?apoP9Q;*(viOOUl zgEFL9+7p8iJSMzqD!XKSFmEK!(RlfPW2=5DfS|G6f1{Qpi@^#Z=6kJXYLv?#fYJjz z7~963qD(m6-2$Mn-J8NXasgLk&V)N@%@Eee^*9CNv=v@(n-ofntk7qVcQZ&e9+&V_ zue`L6V^0m;8j+3;;oHhqZba2iN3mYReW|J0f?4eeq0mdJK~D4E&j}UnLD>yXt~`Qu zr`$@L&pdYy&+qZPS%b0I0Yzwt=J9)~ekv6QoUcDwlMz+ib^ia7>=LWFhOAX}v(1q^ zV91O|e?Ap2AHqs!`#zWhMnWDE*$%?V1g&I+4-^dr-=+;^4j>~)c*c$cp1kW`Wk6S} zGHUcM3_{h;`xolHjY7j)49XjuiM;e-FqmSJ(y?ab=<-Z%9P$ApV0Ia=`CV`9E!tdL zzBRs*OWsA(&fdd+hIyBHJ+QOw90*{Vy&snL`6xfTF)r}_nVXPF)1>$i!_Ty}eP!i& z%Z{os_7+5>!n-2uhn~z!`^cc6=P43dzG3eQ2)oewYFfVoA=n=kM)ftY0VlG>Wuu?i z4;&-h2Hy9jpsI@63rbT;AM{n)S>69M9A`|H{V3_Zd1y-JvsdpG|6lg-h&lkAKF=A* z*wo(IA3J)f>mtj-EE4jyX zI>_}Kp&FL$IuPue`dSrI4LIU9_P)!n1~5T$*2;;mo88c}W-O3))moq%K$i!nCGu_Q zAlzU<_B!^l3zo7RoxuyKe-^-Y=u2X|3LoiExW#u{)@SkPt-hZ%O)uZ=uZElL$^@JV3WsH`5zwV!-#%fC}uCcuPvXKo{r6?rL} z$^&zV?ZLI7t%!`q75Bx3Y%Bnvhhp2tUoaXJXkY-^JE7n?+9TV=nIS8WZ>&5)Gqf3e z11SoF)fgobY7X0}$ENrU;C4p^C%_Y2i}2HGaog9iuY%`w)%Pi4qe-Kv_+>d2hbp5F z-o#ts%R!*e%y*QAaAo$|V1tKi)69K&fLL=OU8%E_e!X?!qiZb7$MGY_okdw+Umt98 z#0Q76UcP);wc3Ko=bKW^d{@I27i9aa#iXph6XBM78go=Rjaq|dom4e4WfIhR(p8&s zq9{xgh6c8-czw0v1Q|yNKHA?^We_kZv#C>>idf!@wLkOcnvSK6i}S`jrm`n>@Q6w^ zHnm(B%!DnRZWD{ZqiWC;o0aF_xl3lT&uaWx!P78RHCniR$Ck*( zm8Z~ z?LeD`F)_VSeZ&4XO<(nyrvK5N$36sFUyAF`v75WAW-33Ai^T9gA*D6iD^i!ZSHVL} zGe^%MZ;&U)eBgHR5Mh_C#yYbEs*GrJV?#Yhv+#hD8!>#Iy6A&52j$$Mb`IY5>aD}9 zp+XD4*XtE-m3Ax^aI&SBoL@GfpLt$mQF3xGdq-Z1r&*YoYJ;$8+(RqckvHp6G2x3Hi)@TbWfGWGkIc_CEZ%EjSix@e8Y@pw#n>Hs8~V>$fz%d8tR#iJ_(^Y zd!zMg=mL*iuobZ0rVX(jVubQIPCKL4NH-0Nr5rApi`JAx*&Bw(XG)=pgN~_eEL03d z^&|rBpst6ly$(-+zljR$!L}O48qhZ_&@yo2kq4CXa?ksBL<>ei*0%3AXU%Mo2|+{r ztAJmB=ZLa9?l?p1hgRhKqeqX@efQog9e(lRCB<94=9}>{3(W;99FT&UmJ&pxA&lH+ z#1$(f2$kUy-5UpI2u~zs3REx}a|!cGvdzwi%9>{lcK-YYS?=$=;|^L~Tb1kCL$`}M z%|T;-dBQP-k@#cl3tsKE^1sf4^Z6Y)if&szQ<(6%&;2HSn=;Kdv9bi6m6brO$H?~4DR862)Tl99Jcq40 zahg#n4W1^6z;Q&J*uFE8O;#D_2DT9(nj7IiGi%J$3RVefjC9GtAheGgL$*Z@!|D9@An1maK{@-#!*lmp&(B^2QRXqU zDuDVkXff_nh6-Do8}!mQUKUTEtSDy3!0^?LHiNSw0x$YP+v)jBJ`wD}7H_O86_kKF zLQ2I_q0Ov5bQ7vdqof#mRC^AqDxqo*70)tYQxWDkw_1bMh!*&y!TgO?Tf%mN{M|nA z2JI7az!DYXa8x#Tkr!=BfVVW1$abGqH|HWC4}n|Hg1D2l8pDCr)e+ru_uXPCvqn39 z{1}})c|u<5yZ+e66%(`e$v7SbNk-xoD>M=hWSTK1@w4W9$vR)OPGyWb&zY3tPR<3B zzgzVdq)=cnlk@JMDV7{CH`O_8ID06jEww0x#)rqwR5j*gWf5(!JHR%n1otO{g=$!i z2Cv{ot9>M^AHRDa9jd@`Z!8!oSq6Ds34o80O{zvy|Ho>j z*9L;isv+&W9eeNfO`2)UAYaR&b^<%Z((VfdR6K<`0j^))G~q51!5zDPuN^P7GN^i=kwcx{{~zV zBE#TM(>6s7gkqfXy-N88>pl(|+L=&YdO#)~Ye`|CCenTqmv-UQV_%BJH+2lT!9x_0 z2}b`RkgE3Xg3li<6#<65QAg>)J&$)lSZFCMsbLbb$2rrC*zp#8cmOMeu!^$DDE1@& zrUjY}GE_|pQIjG^wycQ&+1?$<=v681X#K={==%BJqJdt^ExmT_nsm@tzxwrT`rD+xEwDZ5|P#KYRw99C`{FR*-s>8zhT-?jJAn;xEj%d z+zC_1lez~uNpVSpSqkPOrND$8G3Nv7yJ;~(WnG|gf@L&^ihGYXs4xa~b+V;6kmq7r z)nwVvTUT-zq$=#vzWmJRpZ&TQa^bW2zdX?=lU-pkz>vs<&wa7FvZ@KR9GZ~N(>RUB zp&={CdLth#eK7F|Jm1yI`XE}Ci%uL{1^UjgI52Z^rlNLA0k&uyhrM_8Y&pLwv>wQI z(v5|pEf58josv(;Z%&}2W+bE7wop25aFK07W9p^SGLx+3tHa^^Tow4ycr~|ao3F@}*6D04 zZRBh6(z<+@(sYBGr6c)XJDmGNODjidx_gznG|tQV8trUd&G*jSc)s7(&5X?_TXK(` zo&21XwN0}|yIU7?+m~fx^wTX$%~;Nh*zZp!42eO=%dN05T(2*7@^d@CU)N1k;PQkM zuOw5J-Hr~Wz=_T#XeaN>aT`~zUM|96KVaa63KKh{VIj7ne9Xlynhx}w*Iiaj&7ZR& zs9~cFeS<@rNCh)v50{#e(U4E_i4aVQKv|0@G$o{=aV5ZAQW&2)&+0Cjjce!fvR;fo9=OAY4~r!)njv@i*Pi)`Xx=Y< z{#jZ%v_{8{9m}7uC^X0#ac%9e84aopSfj439g-Qnxp`A~*<+a*IV#ujD)N@3F0HR0 z$?)a6bi`zGEuS|P=y3cvW9E)_Z*I{J-H;H)BS$jBk|#&l&3LoR?9KKD9bZ2xkmO2U zO}ey}@3oep(jjpPzjNs--ApUAerzp2_h^2>o-XCjc9wSOP;T3a_^2#?ahnQ-S^x_THT6;EDuQ1SeMn+LzZvZ%e9QHnO1w{g|Eo_96fR(3tA&=&Sdi% zz45}=^I#@109mW`)v%Q5mlC|2-0RQ=7R6moA%iLRU zzx|vjO~G_w@WM3fT@0b*&%K%I;QmrKL)u>zSp?qS-kIpVeM!y`VP$y`)DN$1XAFYY zgPuxAZ{v0G3ZW{bO%;TN>QC;BfgmS%_Nr8|m>f6bGtt(SCQg7uNvXQV4NH9uNvy{6 z2eBX}#JIOw90>MD``U4Pdmx8oB3L0naX@4b9%mKn-xlm|5nF|1NrE4fV5T%+LTbaH zXx;f(3kbwKEhaj7f#4_aP;XB~iw(KvTIkBN>^J|cp~9Ji+Cl+tP2(G~2E+FViO$k%OXPt6J%n-AH*v-)o3@H z2&gZptccNTT@{aP@yoq!d!bdBlH2=WK^o)Hd7MW^B*+RpYGslIDp~zr&9u=B7`z+2 zl^UyU1@%eGA80({yB~X(F=&Dl>TvP0At*0sI0svVDKAUbnSEhBaHOGd(E=z^AGJW1 z_B4yn3&jo0Ou*E)HX|AaK83-`ajQA+hE6I%Ieg~u`GZ)DI_xnHC+ebis^1^|gA5bV zY<$0@xqb`{u*Ji!*&@9egGy=YzU**NNF-jTbuBRAq2a*@1Lx|*gIl`9(V$-?t0Z7Q z7o=jvp-+I43ofo@kE*nfv`&a-j+d?J@Hx;G?6Z+&m{&+?&tvb571Iz>>!EUYOGntt zOEPBzPBpn!tB+Z48CqIvtNN#XJ-A+PKcnTTXvn$~7eN;{Y^$$Q{p>KKafy6Y(P+Xr z-=6y31PZU5*UYQ{dhf-8J%lV_U`qfO2csKVxR)(lllf-}{1+qLJcmn525VYEnq1Qa zPdE-{;FEE_Iu@m@0W>_yBA1L5^7|!kw>jQQhx&@6p%Y`bcZ#8BwG6F;5X?`31{F@> zh|%Y?wAZn(U9kA3SOQvellBqy*Q%`}>}^2W>wuOtbwt<|C{Zodj`V8vSztmrPX{7Y z#?7F;6&4=eDhwdZz)MHBNS&&#O*5XVTY0Vq*M=}x$`_Ew?_0lHDy0HULA%xhTLEXu z$ijJrZ7>ZOE#rgxSiPp?S`-t+3nZrEJRyS>C_e@&&EX)ROEBdHjcv&V!Gy4#Nv(<& zEr-6+_eMWN3;0*~;c0lOaNA^)AH+jSw*his5L)91VE`Z!N+3s!0|71Vu}-W84gB@2 z0M!_`ey*HL#c+WDCYsl9bAN~OV<5n3@8nmXJpOlD41Llq`i!rs_}kK?dAvQ>7le>f zavVODE!a>ynY=a%VyJgA9g23b1Ey{2y|l|Fn~0AfKOEOzGRQ4`B$yDo6^6%BG#xv8J)fVFv^p6QbBfdmnpi=vXij*-|8+T>@Oxv9e_O zXawzpj+t3jYwdI^%{nKbq|wG01ga*CPnHGu8Qgp3??rH={(RQBqg17r&0REvQ~uK= zvKCsbXnSGm(grI1&fZNfjA+b6Co#t(FYK~<=#XL4Adz@vLebQPWT1JeRP-kkW^83l z)#_@}<$t>8F6cHFVoO;ksL=Ml!stZPTa_f};Lje)ghG?vk}S%~kV@^meQ0Ms_O(x8 zjajE%=Px1Lqqs!-DvhUFCyB~u<&N`%e+vPVYpJAZ5i~xPfFlS^H4L{tQX2l8`+5;P zNVi-Ca9*7RTm*D@9~aC}W5(fo*6oOc6-9&GDaHXmovOB!tnFUv+&2@E8!+ZAP0<@+K6xkkWv2uJJP%oY2%s(ol$T;DL-)3RW;K8ip^bI}L-D zZhh>dj6u|F-%fK0!5!&=Jq=ehWVWa_QyXS#`>ONN__D67 ziU#~lz0GVWs^@QP_c15Zxa?WTY!H|XXhQ6fg5Uk!61hf~VKs*gDxE6y>|L1o@SSH7 zC!Mt2Iu3@5EAOD>Bl;G9z2_PtXLWCJ-iJW<7HrKgBgUXrfyeU0kzK%N)D-?VI3}Yx zZCz7ui-e>8ZvMcAljNPPov7dWHDUffw_4u)&S6+E5`6b8?w-9zEv&Q73j8gG^9?}92zX%M9*3AE)KnZD}`Ig!|>Rf zho&G{Y1Ec*O}IOI^ArLvp~_?hyL9jt4C3suX#U+2ilj6{?^V_x%?n!%ZEp2^w6Ce* zL@Lm!XwrGeQ8#@6f4GkZT6Y%C3})Tn{xA&XV}?Dc&}i6m-M2`KT0j#Tn*{|s{Blbg zgDo(wT*F!$u`S!6aAYj)DJ2d{2r4wOyS@V%b(g#yj;YNjq0St{a9fSNLH|eJSX8m} z5U%a#*caqr-jhjueoot#S!G&qI?a2Y<025Qy&YJPTd!Y(Zq^j*EfEs7r z8spSk+=U7`D)vj-7*`pMCD#+skiTb`A@?Patom;^sb$hTRu_mc33l)QgJ)p4L? zqrnPHDD(vqp|zdSqw`Q#q!_8nbL+-OMq7GG-Te#ozC4A!cJ(TK z-=F`_>6d=-pVRjC7GW%1xYA++a1qoP(r&}0zSfKyt{5u3N&fQny=I?L3uOIS`I+x# z7PST-RnC-Vn2C-1AP!<4h7`yWs%M~G9)yo)q~t;&YjUbMYbhC^&I?dqq4K72kQ28U zDN(@!;(fDtYxBr3v_!gDMtDl5F{!`^btI7qU+IJ1$}7nA6^7>n0sr+L?4EdGYzyK+ z;B=|kkH)rH2E3?ik_3yx-s{*q+OD%A*sWqJL`b;-U;_qi<5;KC&bKPo_&Yh~?tvwl zDlF~NlZHRh!dpQZB7#TF->sS~&?4_SdzRJ@uS-lf=POTl83-HLDHoEC58)>DsbfTKN?CX-cfe4#;BC-(<9ME}0#knGtp( zYZ$B$(9~m=fs^GO0(o}0K$AF8XGW-3(co@%MDt1fx@qm*3|Yn&Fw|M9mrVAmZgf3P zPy{H&D;tN}sv&P^b^g>*q?0hzqnCjD_qS=#K5E-p{KlyDIF7BGTk^vEqEdRRZGCCh z4LIXMfmx)X3oO}7@KZ5tNMBluo(v%dIu}CB$1HsYUUU}91R4r_Js|j;56-gTdLkDu zUZ#KYPyP}8SO4W-p}+n&{|4Q0#~t*kPyGVD?|tv1@A||i=zsmGpOpUi{_p>O(d1kp z=SP0@N9m`2>Zj=Z+vn;0g?H!={lSmYum8s9=-zwpp-+DDPt(u-?9bDowN(mJ*5n;j ztG^?tGfA_u6sq0}X$BE=c3j#?8+>ek2;uE`2bwjST1aD+T7+;lbVb?jr06{!1C&8KP0 zMlyowqK1m{(b?ehGCUf!&JnBN*gq#)=CHTHgS`LW$-aV{{p2TBn+W=1-m{*DqE`=jmlRcJ<2usY`%6;^1c z2qlz%+1lK+Rw;e6cK8V0*w`jb=2gMi+Md|5qN(!yg5yy$r!5D@70t5;iRQyd-O#eh zQ5&$hF3e0CJrBcJbyg~W%|aEf8}jjw{n4yde_hUFjQj^a^aTCLkNjOZXIvF?jFyq| z!$15(qEVlI`f2*~r$0@{jvc2z`6u5?Pd)Wio&euP&prPBN zH)~A<)XNHJ+d1$n@q6-fn0pRkBsq+A);3izs#GwFj&EUP;@x==Sy`Zzm{0y-k#NWq za##1zlL$M@LYc~*i+1#>cjGXG0!uE1=}s}5C&QlpVbGyFfZM+5XPyrnP8wr z_wmjrgm+3kD@mGKC*XZbx!}RQPFNp9loOtlT2c@(F7j%^JV)?owhYyQT z{P>Umxb(&0^}|x-iQjK4vq29({4h^zdi2rv(aDo1>BoNT$K-nKGKL9?szrshX*9xa zsg&$OqJ{E2CH4jaQu+vD|_5HU>yZ7YNNS)RydKBl~HP3_(ecKEN*N(qX|O? z6$C>myT(@-xX+a_Qvuhq3kZZVmdD$F8*&PDpN=r7^{|t*ln8k4c+nvmB11$ zWQGQGAy4QmNbH#lVItK)5v_LR%9UHRLGN7i*Y(8Z(>Ug0Jx>4>m^3{?&awyc)Hg8% ztwfe+b>7h4${TlmsH+MGiZjlc%1Ve>=NPMqKZ5WgVb!2aDqi1M#q;z% z5^}5ZY&NlKjm*i^*vC+y35qhNQ1*67$=H%e`*D8nor0A#jzbebOPWly$~s)5&EsnA z;0`@>_!ymk=OV4F9`aesz+XF78^{`l>&6`u4%Kjy;o}BIoOZig;E2num(&52xW#An zfzKM$k*z+T706;R2DiWm-xF4`nbpK_c`eklE`PXr^}6Mv6jFg!$$ppm%S$UF_$kuN zy`sPk#BcC*lRQ>Oj~)|65@)KsihW_5@(c{%rVbd2UUf;@Xd0Ar`&=OLy>a5)*xv9j zCmy5l4BY6lL#!Eu>X0dkxk#YkcV~^y`IA$tGpHLGjcFh9ypPIBLH+)kg05ESl!IEh z;*d~yMutOxEOP6O*I&!a>#7Y>kXjFXuUB4sQ$iiFH9?!P;f>8Ls#y$L03DiYk8$o8 z6fRL*huRH_?b`<17uck5w_jm8DAmhtQXy%BV>S`twg|Gm967#*unzhdLKBK0hDuw` z_Ur85$#6X$CYsysi&$i?%Gy|L4YEp{6DGA^q!Lt6x(xyOXgAImCDk_8Cl-XH4e=GA ztLWHhoVV0~=GuBj-Fh;s=?3InYCw_RZ))!B5}~ItA;9n0w?)Q03vVBK>UON!Qlq>& z8_DU&QQGU+N9CkwyO7$$xztpC_}E;Y{N1tR$LQ%Ve~}(}-($3#H8R)UXswz&QQ;xE z^Q5?=736l$o>}rC)Jt+5gUp|Yg1gvI4JEQGhRU;-jn}Rgz*z&6yq|Rt=-t!f-ScIu zMJ*ht(p0lHew{<4d|oU|ZQ;8E)+Fx-I9Q~Qx1;|pg2>mVWHp#eZ9#QrlyoRnGOEo` zxieWq9Ok6t)nWU-l>J3So@mStLH9HG*b)j*n;I*%{%hP}6q>S%x0aoczfp5fUER8k zGtXQ%7E|(yR*mh-#r3aevxXKOdkb`*EaWh`MLn|W{Ua-t_0&^epet9eXN^3j)s-qmGQ7M}FppYr;dHHM0_V%GN|p(N12z{J zbT+i7>0gHo$+XpAGKFMNBiRHf*CBUML^_qKMh1MW2bDjCK$nJAOiBvQL<}JhT**n7 z<5;+HTh9D%R2AieS5VF+oK6c4MP|45yM|~21`rj`Ao{D0xu}IYcqWPV52#V;cM85q z(j+T2o@l%p^Si;Q1-ucw+?GvSeYLR(6+<$iH<~qt+k>Imnq?v6MUn#{Eau> zpy!`|!MEI%8p|8H0XsWAb|yP!Q1lKX3TDbLkzb0j)}b{e>tP^ZO9X!Icxhz(q|RCx z2fU<>tyV}KC@zzNnUi*812g@L;7ip@+n!g|{` z#)Z-*Rc*u(ft?suC#okHCNn5g?hB6F+1buMPhTvEf^cFPM&FoUY|Gs-E`Q2CzmMuk`@qoT+KO-d>Z`BOE3drlg=fml&r4mL`ckMr6IN)`;&wwK7lP0fD#^8k z7eJ}CZ;3n;Z&rujv;bti6e=X@Y$;Y~G8(mRDC*>hR&deM_)VWqElidR@r%G`Au8pq z$e-ag=F*U&gJ3I6AP*iYkR!MuTj(qn^yr>HE{2&5qw;gtGk^W!i!aKmc;x6&xlSkh zwrVx=9*V+n#=_F8#HkS+8%wWYQeycJ^U2G@cPfq-&4L;2Da<&oUb&QQtdkV0EjD0t z0NeMeIK=p1MWMk;9eY?)Hu5*}_`SZe)ILvpa2@;F1&cM?jqJ>L?%A(o*X%X-R;3VT zn23VM5U=^Nv7c{wT{(fgiVGY`gNsUQR@G>%%qi2;w)9%U&l)eGHDRdd% zrxlFMtC1E9pOo(n8i=zhPcGS{DQjjfPzh+neX8)x_V~8R79;jT=}TAHD%Rm$tbbEq zilaNvEwD(HQ_cNvZEetgj~iDn(TP)M6cROM)k$#P=n9{a;AG4(^}D$b*#6qt-b(L# z-~0aM(@%ZzKbpB^ZQIWsdplNgXTOlO!<%ouDMG^sFYzdLBFl-rv}iXfmVdNh7=a-i zernDco$)#&yDCi4Plulzm%`ni35-VffURz4qjKF?fnbY*D8f=cQ8mR#(8*aWrT> zj^<;*K9YH6=4+YyMCmOURj4iP_2ps-$U*|D&~gHks2FS2>LX)`I?;BIeBX5a%4J0j zjRvMIudM9$T!lWR+>E6rk3q-=X-JlK#htQtc>TumX!QDIcl*oRyVK9axckK`=g)oP z>eZ{)bKj>7p`g57a5FCdYYPPUo72!&uU>ia`qgW9tSseLr`_fC!|P4{>`?BU-1?>9 zyFT$!DSY8>%pKckA@mV#Wc2}`XTBetA+=`b-mqYGj2o+$^;6k)-|Ho+i>mJH#OrP4?cmfBm$ zM+Yv~UB%4d?n;1BU1ikwfeeL_xN+kerRyXbn?q8m;=QLGynpW3={U_b55Mb=fAX(>_E$dp zW7FNOFes1JH1V!G?|kv-(W4*9Zs1c_uWpSW|F#dUzVX^?hp%71zWU@7PaHb;*7>8C z-g)Qfw>F|l+;h)rH|>|MT)lGS#EBEj+4^1G zxUso%1W%JA+rDi9#g!AuRg$KnDMMR#t zg4LlgvEqu#p-SFdMH^xX2IWO*88KOKmw&a-k_q zN#jDU(B$xuBZ9M)cGCdfGIO+j z{P?lgp8Ac?yq|9GaVr?{uJGbkH~MWq{QJJ|`x~ zmoC0@{C)3z^w^av*YZTVaOCWJ-g_diHftLj8!M+ypE)+!ovhs4+FHtkx0VHRoN2Lf z7W0)hOHmf;HV^JdcWBb!Arx9+0pegI-G@dEyp+mb*DQ20afm!4MR95i7R{OI#_o^2 zLFH$A*QRn9g@$5`EjD^jig|e>)HO*WSfa0f<%@!05ylCqqfQjvNQmzv0sWE>nz`eZ zm1%|&S62_Md^Jz+znPWOxePh4Q}IGARCK=^j^Bwu^U*x{?ced&p8M)o{yuB7UYCh@ z^vKcY&Yyq#gY@tJ!D@2+@x?(Cg@TVPt5`sAf+jv9NL zAgu0x>9oGheR->zkfx_U?l`xHl^aXcCw>>Rb5c| zpC>29Up%m|sOy(~c=3DvY5j>#%_09!ANr^9cJrw>`}vQ*7jc%C*}t3b;Li7z=d100 zoqKxP{l*H(-mpV=%kTfbW_-Tpq3bQ}B_Duh@bxu6CWrc0Z}HDwZ>!*6?_mBw1|aZs L^>bP0l+XkKq6c&u literal 0 HcmV?d00001 diff --git a/resources/profiles/Qidi/filament/X5/Bambu ABS @Qidi X-Plus 5 0.2 nozzle.json b/resources/profiles/Qidi/filament/X5/Bambu ABS @Qidi X-Plus 5 0.2 nozzle.json new file mode 100644 index 0000000000..32352a70c8 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Bambu ABS @Qidi X-Plus 5 0.2 nozzle.json @@ -0,0 +1,20 @@ +{ + "type": "filament", + "setting_id": "v4Of6ePWz1oGVLqU", + "name": "Bambu ABS @Qidi X-Plus 5 0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Bambu ABS@X-Plus 5-Series", + "chamber_temperatures": [ + "0" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "pressure_advance": [ + "0.03" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Bambu ABS @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/Bambu ABS @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..8b6bc2ebb6 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Bambu ABS @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "K3KqxJ3z6lSKoCsQ", + "name": "Bambu ABS @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Bambu ABS@X-Plus 5-Series", + "pressure_advance": [ + "0.03" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Bambu ABS @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/Bambu ABS @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..3fa0dfca1f --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Bambu ABS @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "setting_id": "D3OOS6ShJDdn4dlU", + "name": "Bambu ABS @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Bambu ABS@X-Plus 5-Series", + "nozzle_temperature": [ + "250" + ], + "pressure_advance": [ + "0.014" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Bambu ABS @Qidi X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/filament/X5/Bambu ABS @Qidi X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..833774ecff --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Bambu ABS @Qidi X-Plus 5 0.8 nozzle.json @@ -0,0 +1,20 @@ +{ + "type": "filament", + "setting_id": "8zWM4mqGjwjy2yJb", + "name": "Bambu ABS @Qidi X-Plus 5 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Bambu ABS@X-Plus 5-Series", + "nozzle_temperature": [ + "250" + ], + "pressure_advance": [ + "0.011" + ], + "slow_down_min_speed": [ + "10" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Bambu ABS @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/Bambu ABS @X-Plus 5.json new file mode 100644 index 0000000000..1464576f61 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Bambu ABS @X-Plus 5.json @@ -0,0 +1,105 @@ +{ + "type": "filament", + "filament_id": "GFB99", + "name": "Bambu ABS@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "box_temperature_range_high": [ + "45" + ], + "chamber_temperatures": [ + "55" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "cool_plate_temp_initial_layer": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "eng_plate_temp_initial_layer": [ + "90" + ], + "eng_plate_temp": [ + "90" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "20" + ], + "filament_adhesiveness_category": [ + "200" + ], + "filament_density": [ + "1.05" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_type": [ + "ABS" + ], + "filament_vendor": [ + "Bambu Lab" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "hot_plate_temp": [ + "90" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "nozzle_temperature": [ + "260" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "pressure_advance": [ + "0.035" + ], + "slow_down_layer_time": [ + "4" + ], + "supertack_plate_temp_initial_layer": [ + "80" + ], + "supertack_plate_temp": [ + "80" + ], + "temperature_vitrification": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "90" + ], + "textured_plate_temp": [ + "90" + ], + "textured_cool_plate_temp_initial_layer": [ + "80" + ], + "textured_cool_plate_temp": [ + "80" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/Qidi/filament/X5/Bambu PETG @Qidi X-Plus 5 0.2 nozzle.json b/resources/profiles/Qidi/filament/X5/Bambu PETG @Qidi X-Plus 5 0.2 nozzle.json new file mode 100644 index 0000000000..67725a5ee4 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Bambu PETG @Qidi X-Plus 5 0.2 nozzle.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "setting_id": "ed9ZVS66ll61akjK", + "name": "Bambu PETG @Qidi X-Plus 5 0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Bambu PETG@X-Plus 5-Series", + "filament_max_volumetric_speed": [ + "1" + ], + "pressure_advance": [ + "0.056" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Bambu PETG @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/Bambu PETG @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..953359bb36 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Bambu PETG @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "mPLqTb7smgIDOZTg", + "name": "Bambu PETG @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Bambu PETG@X-Plus 5-Series", + "pressure_advance": [ + "0.056" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Bambu PETG @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/Bambu PETG @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..77014127cd --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Bambu PETG @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "A3K4JfwyqUnciD2e", + "name": "Bambu PETG @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Bambu PETG@X-Plus 5-Series", + "pressure_advance": [ + "0.04" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Bambu PETG @Qidi X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/filament/X5/Bambu PETG @Qidi X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..3e95da1618 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Bambu PETG @Qidi X-Plus 5 0.8 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "4qjG4MYXmLPJ5Qjm", + "name": "Bambu PETG @Qidi X-Plus 5 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Bambu PETG@X-Plus 5-Series", + "pressure_advance": [ + "0.04" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Bambu PETG @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/Bambu PETG @X-Plus 5.json new file mode 100644 index 0000000000..0a4d2ce22c --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Bambu PETG @X-Plus 5.json @@ -0,0 +1,102 @@ +{ + "type": "filament", + "filament_id": "GFG99", + "name": "Bambu PETG@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "box_temperature_range_high": [ + "45" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "cool_plate_temp_initial_layer": [ + "60" + ], + "cool_plate_temp": [ + "60" + ], + "eng_plate_temp_initial_layer": [ + "80" + ], + "eng_plate_temp": [ + "80" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "40" + ], + "fan_min_speed": [ + "10" + ], + "filament_adhesiveness_category": [ + "300" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "13" + ], + "filament_type": [ + "PETG" + ], + "filament_vendor": [ + "Bambu Lab" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "hot_plate_temp": [ + "80" + ], + "nozzle_temperature_initial_layer": [ + "240" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "nozzle_temperature": [ + "250" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "10%" + ], + "pressure_advance": [ + "0.056" + ], + "slow_down_layer_time": [ + "8" + ], + "supertack_plate_temp_initial_layer": [ + "60" + ], + "supertack_plate_temp": [ + "60" + ], + "temperature_vitrification": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "textured_plate_temp": [ + "80" + ], + "textured_cool_plate_temp_initial_layer": [ + "60" + ], + "textured_cool_plate_temp": [ + "60" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/Qidi/filament/X5/Bambu PLA @Qidi X-Plus 5 0.2 nozzle.json b/resources/profiles/Qidi/filament/X5/Bambu PLA @Qidi X-Plus 5 0.2 nozzle.json new file mode 100644 index 0000000000..8cebbd7581 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Bambu PLA @Qidi X-Plus 5 0.2 nozzle.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "setting_id": "cI5eJwzwoecS97SU", + "name": "Bambu PLA @Qidi X-Plus 5 0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Bambu PLA@X-Plus 5-Series", + "filament_max_volumetric_speed": [ + "2" + ], + "pressure_advance": [ + "0.034" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Bambu PLA @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/Bambu PLA @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..3e7d24cf85 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Bambu PLA @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "UP5ST3BYA3nWaT5i", + "name": "Bambu PLA @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Bambu PLA@X-Plus 5-Series", + "pressure_advance": [ + "0.034" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Bambu PLA @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/Bambu PLA @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..e3e192d1e8 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Bambu PLA @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "jSFJn0WmV76aBwPt", + "name": "Bambu PLA @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Bambu PLA@X-Plus 5-Series", + "pressure_advance": [ + "0.016" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Bambu PLA @Qidi X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/filament/X5/Bambu PLA @Qidi X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..2390355042 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Bambu PLA @Qidi X-Plus 5 0.8 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "MYCn1SS32p63RzX0", + "name": "Bambu PLA @Qidi X-Plus 5 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Bambu PLA@X-Plus 5-Series", + "pressure_advance": [ + "0.008" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Bambu PLA @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/Bambu PLA @X-Plus 5.json new file mode 100644 index 0000000000..7660c8174d --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Bambu PLA @X-Plus 5.json @@ -0,0 +1,54 @@ +{ + "type": "filament", + "filament_id": "GFL99", + "name": "Bambu PLA@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "filament_adhesiveness_category": [ + "100" + ], + "filament_type": [ + "PLA" + ], + "filament_vendor": [ + "Bambu Lab" + ], + "additional_cooling_fan_speed": [ + "100" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_initial_layer": [ + "210" + ], + "nozzle_temperature": [ + "210" + ], + "overhang_fan_threshold": [ + "50%" + ], + "supertack_plate_temp_initial_layer": [ + "45" + ], + "supertack_plate_temp": [ + "45" + ], + "temperature_vitrification": [ + "45" + ], + "textured_cool_plate_temp_initial_layer": [ + "45" + ], + "textured_cool_plate_temp": [ + "45" + ], + "compatible_printers": [], + "close_additional_fan_first_x_layers": [ + "1" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Generic ABS @Qidi X-Plus 5 0.2 nozzle.json b/resources/profiles/Qidi/filament/X5/Generic ABS @Qidi X-Plus 5 0.2 nozzle.json new file mode 100644 index 0000000000..c12bcc6687 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Generic ABS @Qidi X-Plus 5 0.2 nozzle.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "setting_id": "xxRxeoAbiYJcH1P4", + "name": "Generic ABS @Qidi X-Plus 5 0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Generic ABS@X-Plus 5-Series", + "filament_max_volumetric_speed": [ + "2" + ], + "pressure_advance": [ + "0.03" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Generic ABS @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/Generic ABS @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..7807bc8420 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Generic ABS @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "MM6yfNPfpCtbsm2M", + "name": "Generic ABS @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Generic ABS@X-Plus 5-Series", + "pressure_advance": [ + "0.03" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Generic ABS @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/Generic ABS @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..6de2b02613 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Generic ABS @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "setting_id": "BIiPt2AExUkASm2F", + "name": "Generic ABS @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Generic ABS@X-Plus 5-Series", + "filament_max_volumetric_speed": [ + "24.5" + ], + "pressure_advance": [ + "0.014" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Generic ABS @Qidi X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/filament/X5/Generic ABS @Qidi X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..6e7bda8441 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Generic ABS @Qidi X-Plus 5 0.8 nozzle.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "setting_id": "VzKqGnik79qlJ1bA", + "name": "Generic ABS @Qidi X-Plus 5 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Generic ABS@X-Plus 5-Series", + "filament_max_volumetric_speed": [ + "24.5" + ], + "pressure_advance": [ + "0.011" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Generic ABS @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/Generic ABS @X-Plus 5.json new file mode 100644 index 0000000000..4bb0cbe387 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Generic ABS @X-Plus 5.json @@ -0,0 +1,108 @@ +{ + "type": "filament", + "filament_id": "QD_4_0_11", + "name": "Generic ABS@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "box_temperature_range_high": [ + "45" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "cool_plate_temp_initial_layer": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "eng_plate_temp_initial_layer": [ + "90" + ], + "eng_plate_temp": [ + "90" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "10" + ], + "filament_adhesiveness_category": [ + "200" + ], + "filament_density": [ + "1.04" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "17" + ], + "filament_type": [ + "ABS" + ], + "filament_vendor": [ + "Generic" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "hot_plate_temp": [ + "90" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "nozzle_temperature": [ + "250" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "pressure_advance": [ + "0.021" + ], + "slow_down_layer_time": [ + "4" + ], + "supertack_plate_temp_initial_layer": [ + "80" + ], + "supertack_plate_temp": [ + "80" + ], + "temperature_vitrification": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "90" + ], + "textured_plate_temp": [ + "90" + ], + "textured_cool_plate_temp_initial_layer": [ + "80" + ], + "textured_cool_plate_temp": [ + "80" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/Qidi/filament/X5/Generic PC @Qidi X-Plus 5 0.2 nozzle.json b/resources/profiles/Qidi/filament/X5/Generic PC @Qidi X-Plus 5 0.2 nozzle.json new file mode 100644 index 0000000000..da5c50af1a --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Generic PC @Qidi X-Plus 5 0.2 nozzle.json @@ -0,0 +1,23 @@ +{ + "type": "filament", + "setting_id": "ERbh7DQQfK7A623W", + "name": "Generic PC @Qidi X-Plus 5 0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Generic PC@X-Plus 5-Series", + "filament_flow_ratio": [ + "0.94" + ], + "filament_max_volumetric_speed": [ + "1" + ], + "pressure_advance": [ + "0.04" + ], + "chamber_temperatures": [ + "0" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Generic PC @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/Generic PC @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..487d8dd31d --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Generic PC @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,20 @@ +{ + "type": "filament", + "setting_id": "MK8OyxUEziAeEbXk", + "name": "Generic PC @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Generic PC@X-Plus 5-Series", + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "pressure_advance": [ + "0.04" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Generic PC @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/Generic PC @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..90829d6463 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Generic PC @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,20 @@ +{ + "type": "filament", + "setting_id": "EQIfBmyVNumOKVWU", + "name": "Generic PC @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Generic PC@X-Plus 5-Series", + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "pressure_advance": [ + "0.03" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Generic PC @Qidi X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/filament/X5/Generic PC @Qidi X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..514715f8a2 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Generic PC @Qidi X-Plus 5 0.8 nozzle.json @@ -0,0 +1,20 @@ +{ + "type": "filament", + "setting_id": "FsTuQT5hxmfjHyVZ", + "name": "Generic PC @Qidi X-Plus 5 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Generic PC@X-Plus 5-Series", + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "pressure_advance": [ + "0.008" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Generic PC @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/Generic PC @X-Plus 5.json new file mode 100644 index 0000000000..360f0ee803 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Generic PC @X-Plus 5.json @@ -0,0 +1,108 @@ +{ + "type": "filament", + "filament_id": "QD_4_0_23", + "name": "Generic PC@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "box_temperature_range_high": [ + "65" + ], + "chamber_temperatures": [ + "60" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "cool_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "110" + ], + "eng_plate_temp": [ + "110" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "60" + ], + "fan_min_speed": [ + "10" + ], + "filament_adhesiveness_category": [ + "500" + ], + "filament_density": [ + "1.04" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_type": [ + "PC" + ], + "filament_vendor": [ + "Generic" + ], + "hot_plate_temp_initial_layer": [ + "110" + ], + "hot_plate_temp": [ + "110" + ], + "nozzle_temperature_initial_layer": [ + "270" + ], + "nozzle_temperature_range_high": [ + "290" + ], + "nozzle_temperature_range_low": [ + "260" + ], + "nozzle_temperature": [ + "280" + ], + "overhang_fan_speed": [ + "60" + ], + "overhang_fan_threshold": [ + "25%" + ], + "pressure_advance": [ + "0.021" + ], + "slow_down_layer_time": [ + "2" + ], + "supertack_plate_temp_initial_layer": [ + "0" + ], + "supertack_plate_temp": [ + "0" + ], + "temperature_vitrification": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "110" + ], + "textured_plate_temp": [ + "110" + ], + "textured_cool_plate_temp_initial_layer": [ + "0" + ], + "textured_cool_plate_temp": [ + "0" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/Qidi/filament/X5/Generic PETG @Qidi X-Plus 5 0.2 nozzle.json b/resources/profiles/Qidi/filament/X5/Generic PETG @Qidi X-Plus 5 0.2 nozzle.json new file mode 100644 index 0000000000..2b4e220a54 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Generic PETG @Qidi X-Plus 5 0.2 nozzle.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "setting_id": "KaxkabCgu6EWZBzj", + "name": "Generic PETG @Qidi X-Plus 5 0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Generic PETG@X-Plus 5-Series", + "filament_max_volumetric_speed": [ + "1" + ], + "pressure_advance": [ + "0.056" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Generic PETG @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/Generic PETG @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..4da60c3c48 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Generic PETG @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "ckqzES7LsTgYKKhb", + "name": "Generic PETG @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Generic PETG@X-Plus 5-Series", + "pressure_advance": [ + "0.056" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Generic PETG @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/Generic PETG @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..6f1b9667ab --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Generic PETG @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "1ID4LaQVZN4WjJ4v", + "name": "Generic PETG @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Generic PETG@X-Plus 5-Series", + "pressure_advance": [ + "0.04" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Generic PETG @Qidi X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/filament/X5/Generic PETG @Qidi X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..764e313efe --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Generic PETG @Qidi X-Plus 5 0.8 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "yzkFoRA3R01K3lCa", + "name": "Generic PETG @Qidi X-Plus 5 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Generic PETG@X-Plus 5-Series", + "pressure_advance": [ + "0.04" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Generic PETG @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/Generic PETG @X-Plus 5.json new file mode 100644 index 0000000000..ab1b23bb60 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Generic PETG @X-Plus 5.json @@ -0,0 +1,105 @@ +{ + "type": "filament", + "filament_id": "QD_4_0_41", + "name": "Generic PETG@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "box_temperature_range_high": [ + "45" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "cool_plate_temp_initial_layer": [ + "60" + ], + "cool_plate_temp": [ + "60" + ], + "eng_plate_temp_initial_layer": [ + "80" + ], + "eng_plate_temp": [ + "80" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "90" + ], + "fan_min_speed": [ + "40" + ], + "filament_adhesiveness_category": [ + "300" + ], + "filament_density": [ + "1.27" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_type": [ + "PETG" + ], + "filament_vendor": [ + "Generic" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "hot_plate_temp": [ + "80" + ], + "nozzle_temperature_initial_layer": [ + "245" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "nozzle_temperature": [ + "250" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "10%" + ], + "pressure_advance": [ + "0.056" + ], + "slow_down_layer_time": [ + "12" + ], + "supertack_plate_temp_initial_layer": [ + "60" + ], + "supertack_plate_temp": [ + "60" + ], + "temperature_vitrification": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "textured_plate_temp": [ + "80" + ], + "textured_cool_plate_temp_initial_layer": [ + "60" + ], + "textured_cool_plate_temp": [ + "60" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/Qidi/filament/X5/Generic PLA @Qidi X-Plus 5 0.2 nozzle.json b/resources/profiles/Qidi/filament/X5/Generic PLA @Qidi X-Plus 5 0.2 nozzle.json new file mode 100644 index 0000000000..218b407d21 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Generic PLA @Qidi X-Plus 5 0.2 nozzle.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "setting_id": "m5zUk3OpAayCbBwF", + "name": "Generic PLA @Qidi X-Plus 5 0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Generic PLA@X-Plus 5-Series", + "filament_max_volumetric_speed": [ + "2" + ], + "pressure_advance": [ + "0.034" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Generic PLA @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/Generic PLA @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..c8dd22aba5 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Generic PLA @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "5Eorr9nKVhLbnYAZ", + "name": "Generic PLA @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Generic PLA@X-Plus 5-Series", + "pressure_advance": [ + "0.034" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Generic PLA @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/Generic PLA @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..ee352a5667 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Generic PLA @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "nqOawjrkU2lp3P0K", + "name": "Generic PLA @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Generic PLA@X-Plus 5-Series", + "pressure_advance": [ + "0.016" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Generic PLA @Qidi X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/filament/X5/Generic PLA @Qidi X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..14a7fa59c1 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Generic PLA @Qidi X-Plus 5 0.8 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "nA20S71nTMCso0Bn", + "name": "Generic PLA @Qidi X-Plus 5 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Generic PLA@X-Plus 5-Series", + "pressure_advance": [ + "0.008" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Generic PLA @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/Generic PLA @X-Plus 5.json new file mode 100644 index 0000000000..e3939b7796 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Generic PLA @X-Plus 5.json @@ -0,0 +1,66 @@ +{ + "type": "filament", + "filament_id": "QD_4_0_1", + "name": "Generic PLA@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "additional_cooling_fan_speed": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "45" + ], + "cool_plate_temp": [ + "45" + ], + "filament_adhesiveness_category": [ + "100" + ], + "filament_density": [ + "1.2" + ], + "filament_max_volumetric_speed": [ + "14" + ], + "filament_type": [ + "PLA" + ], + "filament_vendor": [ + "Generic" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature": [ + "220" + ], + "overhang_fan_threshold": [ + "50%" + ], + "supertack_plate_temp_initial_layer": [ + "45" + ], + "supertack_plate_temp": [ + "45" + ], + "temperature_vitrification": [ + "45" + ], + "textured_cool_plate_temp_initial_layer": [ + "45" + ], + "textured_cool_plate_temp": [ + "45" + ], + "compatible_printers": [], + "close_additional_fan_first_x_layers": [ + "1" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Generic PLA Silk @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/Generic PLA Silk @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..f701cf5b50 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Generic PLA Silk @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "setting_id": "42feLKkUTBQTPNDm", + "name": "Generic PLA Silk @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Generic PLA Silk@X-Plus 5-Series", + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Generic PLA Silk @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/Generic PLA Silk @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..b898df762a --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Generic PLA Silk @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "uyCmwBkoRNNRbG5R", + "name": "Generic PLA Silk @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Generic PLA Silk@X-Plus 5-Series", + "pressure_advance": [ + "0.014" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Generic PLA Silk @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/Generic PLA Silk @X-Plus 5.json new file mode 100644 index 0000000000..1c0d325a37 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Generic PLA Silk @X-Plus 5.json @@ -0,0 +1,90 @@ +{ + "type": "filament", + "filament_id": "QD_4_0_4", + "name": "Generic PLA Silk@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "additional_cooling_fan_speed": [ + "100" + ], + "filament_adhesiveness_category": [ + "100" + ], + "filament_density": [ + "1.2" + ], + "filament_max_volumetric_speed": [ + "7.5" + ], + "filament_retraction_length": [ + "0.5" + ], + "filament_type": [ + "PLA" + ], + "filament_vendor": [ + "Generic" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature": [ + "220" + ], + "overhang_fan_threshold": [ + "50%" + ], + "pressure_advance": [ + "0.032" + ], + "supertack_plate_temp_initial_layer": [ + "45" + ], + "supertack_plate_temp": [ + "45" + ], + "cool_plate_temp_initial_layer": [ + "45" + ], + "cool_plate_temp": [ + "45" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "eng_plate_temp": [ + "55" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "hot_plate_temp": [ + "55" + ], + "textured_plate_temp_initial_layer": [ + "55" + ], + "textured_plate_temp": [ + "55" + ], + "temperature_vitrification": [ + "45" + ], + "textured_cool_plate_temp_initial_layer": [ + "45" + ], + "textured_cool_plate_temp": [ + "45" + ], + "compatible_printers": [], + "close_additional_fan_first_x_layers": [ + "1" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Generic PLA+ @Qidi X-Plus 5 0.2 nozzle.json b/resources/profiles/Qidi/filament/X5/Generic PLA+ @Qidi X-Plus 5 0.2 nozzle.json new file mode 100644 index 0000000000..a7a736a95a --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Generic PLA+ @Qidi X-Plus 5 0.2 nozzle.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "setting_id": "aD9SNuHAOxVFczNM", + "name": "Generic PLA+ @Qidi X-Plus 5 0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Generic PLA+@X-Plus 5-Series", + "filament_max_volumetric_speed": [ + "2" + ], + "pressure_advance": [ + "0.034" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Generic PLA+ @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/Generic PLA+ @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..e10196f45c --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Generic PLA+ @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "QDAKF2VaO4MkiYZ7", + "name": "Generic PLA+ @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Generic PLA+@X-Plus 5-Series", + "pressure_advance": [ + "0.034" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Generic PLA+ @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/Generic PLA+ @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..62c8ce9de1 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Generic PLA+ @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "kNONALYQIZ8hkU2f", + "name": "Generic PLA+ @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Generic PLA+@X-Plus 5-Series", + "pressure_advance": [ + "0.016" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Generic PLA+ @Qidi X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/filament/X5/Generic PLA+ @Qidi X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..78599cb326 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Generic PLA+ @Qidi X-Plus 5 0.8 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "ehm8mY40hPq6Bjby", + "name": "Generic PLA+ @Qidi X-Plus 5 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Generic PLA+@X-Plus 5-Series", + "pressure_advance": [ + "0.008" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Generic PLA+ @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/Generic PLA+ @X-Plus 5.json new file mode 100644 index 0000000000..e1d40b179f --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Generic PLA+ @X-Plus 5.json @@ -0,0 +1,60 @@ +{ + "type": "filament", + "filament_id": "GFL99", + "name": "Generic PLA+@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "additional_cooling_fan_speed": [ + "100" + ], + "filament_adhesiveness_category": [ + "100" + ], + "filament_density": [ + "1.2" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_type": [ + "PLA" + ], + "filament_vendor": [ + "Generic" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature": [ + "230" + ], + "overhang_fan_threshold": [ + "50%" + ], + "supertack_plate_temp_initial_layer": [ + "45" + ], + "supertack_plate_temp": [ + "45" + ], + "temperature_vitrification": [ + "45" + ], + "textured_cool_plate_temp_initial_layer": [ + "45" + ], + "textured_cool_plate_temp": [ + "45" + ], + "compatible_printers": [], + "close_additional_fan_first_x_layers": [ + "1" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Generic TPU 95A @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/Generic TPU 95A @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..525652742c --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Generic TPU 95A @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "setting_id": "blCxzXDeplxz7FrS", + "name": "Generic TPU 95A @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Generic TPU 95A@X-Plus 5-Series", + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Generic TPU 95A @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/Generic TPU 95A @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..f17a6e91e5 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Generic TPU 95A @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "setting_id": "mXwJpelMKlY7SQR8", + "name": "Generic TPU 95A @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Generic TPU 95A@X-Plus 5-Series", + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Generic TPU 95A @Qidi X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/filament/X5/Generic TPU 95A @Qidi X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..072983e488 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Generic TPU 95A @Qidi X-Plus 5 0.8 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "o9NLhClfpsJFEE3P", + "name": "Generic TPU 95A @Qidi X-Plus 5 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Generic TPU 95A@X-Plus 5-Series", + "nozzle_temperature": [ + "220" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Generic TPU 95A @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/Generic TPU 95A @X-Plus 5.json new file mode 100644 index 0000000000..d5f56d408b --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Generic TPU 95A @X-Plus 5.json @@ -0,0 +1,81 @@ +{ + "type": "filament", + "filament_id": "QD_4_0_50", + "name": "Generic TPU 95A@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "cool_plate_temp_initial_layer": [ + "30" + ], + "cool_plate_temp": [ + "30" + ], + "eng_plate_temp_initial_layer": [ + "35" + ], + "eng_plate_temp": [ + "35" + ], + "filament_adhesiveness_category": [ + "600" + ], + "filament_density": [ + "1.21" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "4" + ], + "filament_type": [ + "TPU" + ], + "filament_vendor": [ + "Generic" + ], + "hot_plate_temp_initial_layer": [ + "35" + ], + "hot_plate_temp": [ + "35" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature_range_high": [ + "250" + ], + "nozzle_temperature_range_low": [ + "200" + ], + "nozzle_temperature": [ + "230" + ], + "pressure_advance": [ + "0.1" + ], + "supertack_plate_temp_initial_layer": [ + "30" + ], + "supertack_plate_temp": [ + "30" + ], + "temperature_vitrification": [ + "30" + ], + "textured_plate_temp_initial_layer": [ + "35" + ], + "textured_plate_temp": [ + "35" + ], + "textured_cool_plate_temp_initial_layer": [ + "30" + ], + "textured_cool_plate_temp": [ + "30" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/Qidi/filament/X5/HATCHBOX ABS @Qidi X-Plus 5 0.2 nozzle.json b/resources/profiles/Qidi/filament/X5/HATCHBOX ABS @Qidi X-Plus 5 0.2 nozzle.json new file mode 100644 index 0000000000..2346539b73 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/HATCHBOX ABS @Qidi X-Plus 5 0.2 nozzle.json @@ -0,0 +1,20 @@ +{ + "type": "filament", + "setting_id": "uarx8NrJerlKsoA8", + "name": "HATCHBOX ABS @Qidi X-Plus 5 0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "HATCHBOX ABS@X-Plus 5-Series", + "chamber_temperatures": [ + "0" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "pressure_advance": [ + "0.03" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/HATCHBOX ABS @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/HATCHBOX ABS @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..4566ece152 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/HATCHBOX ABS @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "T52l6W0u1uoiXrAx", + "name": "HATCHBOX ABS @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "HATCHBOX ABS@X-Plus 5-Series", + "pressure_advance": [ + "0.03" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/HATCHBOX ABS @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/HATCHBOX ABS @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..bb16d32b06 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/HATCHBOX ABS @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "setting_id": "krTIEBmeK9q2R60M", + "name": "HATCHBOX ABS @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "HATCHBOX ABS@X-Plus 5-Series", + "nozzle_temperature": [ + "250" + ], + "pressure_advance": [ + "0.014" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/HATCHBOX ABS @Qidi X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/filament/X5/HATCHBOX ABS @Qidi X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..19b4ce995f --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/HATCHBOX ABS @Qidi X-Plus 5 0.8 nozzle.json @@ -0,0 +1,20 @@ +{ + "type": "filament", + "setting_id": "B99z7PiwClkWtyqv", + "name": "HATCHBOX ABS @Qidi X-Plus 5 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "HATCHBOX ABS@X-Plus 5-Series", + "nozzle_temperature": [ + "250" + ], + "pressure_advance": [ + "0.011" + ], + "slow_down_min_speed": [ + "10" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/HATCHBOX ABS @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/HATCHBOX ABS @X-Plus 5.json new file mode 100644 index 0000000000..3f5987240c --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/HATCHBOX ABS @X-Plus 5.json @@ -0,0 +1,105 @@ +{ + "type": "filament", + "filament_id": "GFB99", + "name": "HATCHBOX ABS@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "box_temperature_range_high": [ + "45" + ], + "chamber_temperatures": [ + "55" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "cool_plate_temp_initial_layer": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "eng_plate_temp_initial_layer": [ + "90" + ], + "eng_plate_temp": [ + "90" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "20" + ], + "filament_adhesiveness_category": [ + "200" + ], + "filament_density": [ + "1.05" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_type": [ + "ABS" + ], + "filament_vendor": [ + "HATCHBOX" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "hot_plate_temp": [ + "90" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "nozzle_temperature": [ + "260" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "pressure_advance": [ + "0.035" + ], + "slow_down_layer_time": [ + "4" + ], + "supertack_plate_temp_initial_layer": [ + "80" + ], + "supertack_plate_temp": [ + "80" + ], + "temperature_vitrification": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "90" + ], + "textured_plate_temp": [ + "90" + ], + "textured_cool_plate_temp_initial_layer": [ + "80" + ], + "textured_cool_plate_temp": [ + "80" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/Qidi/filament/X5/HATCHBOX PETG @Qidi X-Plus 5 0.2 nozzle.json b/resources/profiles/Qidi/filament/X5/HATCHBOX PETG @Qidi X-Plus 5 0.2 nozzle.json new file mode 100644 index 0000000000..dc87553374 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/HATCHBOX PETG @Qidi X-Plus 5 0.2 nozzle.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "setting_id": "2y03Jbrd8epf06MW", + "name": "HATCHBOX PETG @Qidi X-Plus 5 0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "HATCHBOX PETG@X-Plus 5-Series", + "filament_max_volumetric_speed": [ + "1" + ], + "pressure_advance": [ + "0.056" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/HATCHBOX PETG @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/HATCHBOX PETG @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..21441a8d3e --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/HATCHBOX PETG @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "KHbEUzPhVICXYhTs", + "name": "HATCHBOX PETG @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "HATCHBOX PETG@X-Plus 5-Series", + "pressure_advance": [ + "0.056" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/HATCHBOX PETG @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/HATCHBOX PETG @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..85219cea79 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/HATCHBOX PETG @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "3HPxSQqEM8XGZqgU", + "name": "HATCHBOX PETG @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "HATCHBOX PETG@X-Plus 5-Series", + "pressure_advance": [ + "0.04" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/HATCHBOX PETG @Qidi X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/filament/X5/HATCHBOX PETG @Qidi X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..c6b4b699cd --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/HATCHBOX PETG @Qidi X-Plus 5 0.8 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "eZnTfUmPGkeoEP87", + "name": "HATCHBOX PETG @Qidi X-Plus 5 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "HATCHBOX PETG@X-Plus 5-Series", + "pressure_advance": [ + "0.04" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/HATCHBOX PETG @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/HATCHBOX PETG @X-Plus 5.json new file mode 100644 index 0000000000..5f794e561c --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/HATCHBOX PETG @X-Plus 5.json @@ -0,0 +1,102 @@ +{ + "type": "filament", + "filament_id": "GFG99", + "name": "HATCHBOX PETG@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "box_temperature_range_high": [ + "45" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "cool_plate_temp_initial_layer": [ + "60" + ], + "cool_plate_temp": [ + "60" + ], + "eng_plate_temp_initial_layer": [ + "80" + ], + "eng_plate_temp": [ + "80" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "40" + ], + "fan_min_speed": [ + "10" + ], + "filament_adhesiveness_category": [ + "300" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "13" + ], + "filament_type": [ + "PETG" + ], + "filament_vendor": [ + "HATCHBOX" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "hot_plate_temp": [ + "80" + ], + "nozzle_temperature_initial_layer": [ + "240" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "nozzle_temperature": [ + "250" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "10%" + ], + "pressure_advance": [ + "0.056" + ], + "slow_down_layer_time": [ + "8" + ], + "supertack_plate_temp_initial_layer": [ + "60" + ], + "supertack_plate_temp": [ + "60" + ], + "temperature_vitrification": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "textured_plate_temp": [ + "80" + ], + "textured_cool_plate_temp_initial_layer": [ + "60" + ], + "textured_cool_plate_temp": [ + "60" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/Qidi/filament/X5/HATCHBOX PLA @Qidi X-Plus 5 0.2 nozzle.json b/resources/profiles/Qidi/filament/X5/HATCHBOX PLA @Qidi X-Plus 5 0.2 nozzle.json new file mode 100644 index 0000000000..a1838c2041 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/HATCHBOX PLA @Qidi X-Plus 5 0.2 nozzle.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "setting_id": "Sn0LAKII01kQONZS", + "name": "HATCHBOX PLA @Qidi X-Plus 5 0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "HATCHBOX PLA@X-Plus 5-Series", + "filament_max_volumetric_speed": [ + "2" + ], + "pressure_advance": [ + "0.034" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/HATCHBOX PLA @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/HATCHBOX PLA @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..82e54e389e --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/HATCHBOX PLA @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "HWmejqWfehK4LG6C", + "name": "HATCHBOX PLA @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "HATCHBOX PLA@X-Plus 5-Series", + "pressure_advance": [ + "0.034" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/HATCHBOX PLA @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/HATCHBOX PLA @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..d6ac4c9a7e --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/HATCHBOX PLA @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "zjIVoA34wN8AT6cp", + "name": "HATCHBOX PLA @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "HATCHBOX PLA@X-Plus 5-Series", + "pressure_advance": [ + "0.016" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/HATCHBOX PLA @Qidi X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/filament/X5/HATCHBOX PLA @Qidi X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..5b89e541e3 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/HATCHBOX PLA @Qidi X-Plus 5 0.8 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "sTjweBRTvE0P6YtE", + "name": "HATCHBOX PLA @Qidi X-Plus 5 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "HATCHBOX PLA@X-Plus 5-Series", + "pressure_advance": [ + "0.008" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/HATCHBOX PLA @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/HATCHBOX PLA @X-Plus 5.json new file mode 100644 index 0000000000..094e540793 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/HATCHBOX PLA @X-Plus 5.json @@ -0,0 +1,54 @@ +{ + "type": "filament", + "filament_id": "GFL99", + "name": "HATCHBOX PLA@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "filament_adhesiveness_category": [ + "100" + ], + "filament_type": [ + "PLA" + ], + "filament_vendor": [ + "HATCHBOX" + ], + "additional_cooling_fan_speed": [ + "100" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_initial_layer": [ + "210" + ], + "nozzle_temperature": [ + "210" + ], + "overhang_fan_threshold": [ + "50%" + ], + "supertack_plate_temp_initial_layer": [ + "45" + ], + "supertack_plate_temp": [ + "45" + ], + "temperature_vitrification": [ + "45" + ], + "textured_cool_plate_temp_initial_layer": [ + "45" + ], + "textured_cool_plate_temp": [ + "45" + ], + "compatible_printers": [], + "close_additional_fan_first_x_layers": [ + "1" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Overture ABS @Qidi X-Plus 5 0.2 nozzle.json b/resources/profiles/Qidi/filament/X5/Overture ABS @Qidi X-Plus 5 0.2 nozzle.json new file mode 100644 index 0000000000..7194b54b7f --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Overture ABS @Qidi X-Plus 5 0.2 nozzle.json @@ -0,0 +1,20 @@ +{ + "type": "filament", + "setting_id": "tLj2E2dWAdLKpC4K", + "name": "Overture ABS @Qidi X-Plus 5 0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Overture ABS@X-Plus 5-Series", + "chamber_temperatures": [ + "0" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "pressure_advance": [ + "0.054" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Overture ABS @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/Overture ABS @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..5e50aa5dbc --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Overture ABS @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "1IkBG0ywAkk3VhOd", + "name": "Overture ABS @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Overture ABS@X-Plus 5-Series", + "pressure_advance": [ + "0.033" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Overture ABS @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/Overture ABS @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..9bacef9d3a --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Overture ABS @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "4SXA27uTG5kcbnAq", + "name": "Overture ABS @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Overture ABS@X-Plus 5-Series", + "pressure_advance": [ + "0.02" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Overture ABS @Qidi X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/filament/X5/Overture ABS @Qidi X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..a53148ed26 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Overture ABS @Qidi X-Plus 5 0.8 nozzle.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "setting_id": "AzC8XjbkzsxEPDMG", + "name": "Overture ABS @Qidi X-Plus 5 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Overture ABS@X-Plus 5-Series", + "pressure_advance": [ + "0.01" + ], + "slow_down_min_speed": [ + "10" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Overture ABS @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/Overture ABS @X-Plus 5.json new file mode 100644 index 0000000000..ea12b78ead --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Overture ABS @X-Plus 5.json @@ -0,0 +1,108 @@ +{ + "type": "filament", + "filament_id": "GFB99", + "name": "Overture ABS@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "box_temperature_range_high": [ + "45" + ], + "chamber_temperatures": [ + "60" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "cool_plate_temp_initial_layer": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "eng_plate_temp_initial_layer": [ + "90" + ], + "eng_plate_temp": [ + "90" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "20" + ], + "filament_adhesiveness_category": [ + "200" + ], + "filament_density": [ + "1.12" + ], + "filament_flow_ratio": [ + "0.96" + ], + "filament_max_volumetric_speed": [ + "17" + ], + "filament_type": [ + "ABS" + ], + "filament_vendor": [ + "Overture" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "hot_plate_temp": [ + "90" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "nozzle_temperature": [ + "255" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "pressure_advance": [ + "0.033" + ], + "slow_down_layer_time": [ + "6" + ], + "supertack_plate_temp_initial_layer": [ + "80" + ], + "supertack_plate_temp": [ + "80" + ], + "temperature_vitrification": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "90" + ], + "textured_plate_temp": [ + "90" + ], + "textured_cool_plate_temp_initial_layer": [ + "80" + ], + "textured_cool_plate_temp": [ + "80" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/Qidi/filament/X5/Overture PLA @Qidi X-Plus 5 0.2 nozzle.json b/resources/profiles/Qidi/filament/X5/Overture PLA @Qidi X-Plus 5 0.2 nozzle.json new file mode 100644 index 0000000000..f209b21a6e --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Overture PLA @Qidi X-Plus 5 0.2 nozzle.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "setting_id": "2TAd2Dlk6KPvvmMg", + "name": "Overture PLA @Qidi X-Plus 5 0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Overture PLA@X-Plus 5-Series", + "filament_max_volumetric_speed": [ + "2" + ], + "pressure_advance": [ + "0.062" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Overture PLA @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/Overture PLA @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..a625953f60 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Overture PLA @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "1rKASIobH0DqQUeH", + "name": "Overture PLA @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Overture PLA@X-Plus 5-Series", + "pressure_advance": [ + "0.037" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Overture PLA @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/Overture PLA @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..5a3dfdee8f --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Overture PLA @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "UWQ7bLf74AxEPDdc", + "name": "Overture PLA @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Overture PLA@X-Plus 5-Series", + "pressure_advance": [ + "0.019" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Overture PLA @Qidi X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/filament/X5/Overture PLA @Qidi X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..86d8605933 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Overture PLA @Qidi X-Plus 5 0.8 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "bIg1NW0EwTlmRNAF", + "name": "Overture PLA @Qidi X-Plus 5 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Overture PLA@X-Plus 5-Series", + "pressure_advance": [ + "0.012" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Overture PLA @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/Overture PLA @X-Plus 5.json new file mode 100644 index 0000000000..571eb2bbeb --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Overture PLA @X-Plus 5.json @@ -0,0 +1,66 @@ +{ + "type": "filament", + "filament_id": "GFL99", + "name": "Overture PLA@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "filament_adhesiveness_category": [ + "100" + ], + "filament_density": [ + "1.2" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "11" + ], + "filament_type": [ + "PLA" + ], + "filament_vendor": [ + "Overture" + ], + "additional_cooling_fan_speed": [ + "100" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_initial_layer": [ + "210" + ], + "nozzle_temperature": [ + "210" + ], + "overhang_fan_threshold": [ + "50%" + ], + "slow_down_layer_time": [ + "10" + ], + "supertack_plate_temp_initial_layer": [ + "45" + ], + "supertack_plate_temp": [ + "45" + ], + "temperature_vitrification": [ + "45" + ], + "textured_cool_plate_temp_initial_layer": [ + "45" + ], + "textured_cool_plate_temp": [ + "45" + ], + "compatible_printers": [], + "close_additional_fan_first_x_layers": [ + "1" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/PolyLite ABS @Qidi X-Plus 5 0.2 nozzle.json b/resources/profiles/Qidi/filament/X5/PolyLite ABS @Qidi X-Plus 5 0.2 nozzle.json new file mode 100644 index 0000000000..0618d3c36f --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/PolyLite ABS @Qidi X-Plus 5 0.2 nozzle.json @@ -0,0 +1,20 @@ +{ + "type": "filament", + "setting_id": "AJYooe7fIzg43McT", + "name": "PolyLite ABS @Qidi X-Plus 5 0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "PolyLite ABS@X-Plus 5-Series", + "chamber_temperatures": [ + "0" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "pressure_advance": [ + "0.054" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/PolyLite ABS @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/PolyLite ABS @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..36e012b0d6 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/PolyLite ABS @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "S0uCyMruXw5waEYf", + "name": "PolyLite ABS @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "PolyLite ABS@X-Plus 5-Series", + "pressure_advance": [ + "0.033" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/PolyLite ABS @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/PolyLite ABS @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..1bf7cdf030 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/PolyLite ABS @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "oYlfF3MMF5DEeJpK", + "name": "PolyLite ABS @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "PolyLite ABS@X-Plus 5-Series", + "pressure_advance": [ + "0.02" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/PolyLite ABS @Qidi X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/filament/X5/PolyLite ABS @Qidi X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..9d1f541dfc --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/PolyLite ABS @Qidi X-Plus 5 0.8 nozzle.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "setting_id": "hHXz74Ps9x4T7kZl", + "name": "PolyLite ABS @Qidi X-Plus 5 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "PolyLite ABS@X-Plus 5-Series", + "pressure_advance": [ + "0.01" + ], + "slow_down_min_speed": [ + "10" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/PolyLite ABS @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/PolyLite ABS @X-Plus 5.json new file mode 100644 index 0000000000..48b6caa32b --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/PolyLite ABS @X-Plus 5.json @@ -0,0 +1,108 @@ +{ + "type": "filament", + "filament_id": "GFB99", + "name": "PolyLite ABS@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "box_temperature_range_high": [ + "45" + ], + "chamber_temperatures": [ + "60" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "cool_plate_temp_initial_layer": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "eng_plate_temp_initial_layer": [ + "90" + ], + "eng_plate_temp": [ + "90" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "20" + ], + "filament_adhesiveness_category": [ + "200" + ], + "filament_density": [ + "1.12" + ], + "filament_flow_ratio": [ + "0.96" + ], + "filament_max_volumetric_speed": [ + "17" + ], + "filament_type": [ + "ABS" + ], + "filament_vendor": [ + "Polymaker" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "hot_plate_temp": [ + "90" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "nozzle_temperature": [ + "255" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "pressure_advance": [ + "0.033" + ], + "slow_down_layer_time": [ + "6" + ], + "supertack_plate_temp_initial_layer": [ + "80" + ], + "supertack_plate_temp": [ + "80" + ], + "temperature_vitrification": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "90" + ], + "textured_plate_temp": [ + "90" + ], + "textured_cool_plate_temp_initial_layer": [ + "80" + ], + "textured_cool_plate_temp": [ + "80" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/Qidi/filament/X5/PolyLite PLA @Qidi X-Plus 5 0.2 nozzle.json b/resources/profiles/Qidi/filament/X5/PolyLite PLA @Qidi X-Plus 5 0.2 nozzle.json new file mode 100644 index 0000000000..f823b38e67 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/PolyLite PLA @Qidi X-Plus 5 0.2 nozzle.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "setting_id": "kKfybaeH6Llb3Vdc", + "name": "PolyLite PLA @Qidi X-Plus 5 0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "PolyLite PLA@X-Plus 5-Series", + "filament_max_volumetric_speed": [ + "2" + ], + "pressure_advance": [ + "0.062" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/PolyLite PLA @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/PolyLite PLA @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..b7f3ef07f6 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/PolyLite PLA @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "hzEsCxIKwuV2ubrz", + "name": "PolyLite PLA @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "PolyLite PLA@X-Plus 5-Series", + "pressure_advance": [ + "0.037" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/PolyLite PLA @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/PolyLite PLA @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..8b98d3842a --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/PolyLite PLA @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "PODs7XKIgMiJZI5x", + "name": "PolyLite PLA @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "PolyLite PLA@X-Plus 5-Series", + "pressure_advance": [ + "0.019" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/PolyLite PLA @Qidi X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/filament/X5/PolyLite PLA @Qidi X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..f4b6b8c2ee --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/PolyLite PLA @Qidi X-Plus 5 0.8 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "LQ1rP7NSTjw2moHk", + "name": "PolyLite PLA @Qidi X-Plus 5 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "PolyLite PLA@X-Plus 5-Series", + "pressure_advance": [ + "0.012" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/PolyLite PLA @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/PolyLite PLA @X-Plus 5.json new file mode 100644 index 0000000000..5b37f7ae8a --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/PolyLite PLA @X-Plus 5.json @@ -0,0 +1,66 @@ +{ + "type": "filament", + "filament_id": "GFL99", + "name": "PolyLite PLA@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "filament_adhesiveness_category": [ + "100" + ], + "filament_density": [ + "1.2" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "11" + ], + "filament_type": [ + "PLA" + ], + "filament_vendor": [ + "Polymaker" + ], + "additional_cooling_fan_speed": [ + "100" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_initial_layer": [ + "210" + ], + "nozzle_temperature": [ + "210" + ], + "overhang_fan_threshold": [ + "50%" + ], + "slow_down_layer_time": [ + "10" + ], + "supertack_plate_temp_initial_layer": [ + "45" + ], + "supertack_plate_temp": [ + "45" + ], + "temperature_vitrification": [ + "45" + ], + "textured_cool_plate_temp_initial_layer": [ + "45" + ], + "textured_cool_plate_temp": [ + "45" + ], + "compatible_printers": [], + "close_additional_fan_first_x_layers": [ + "1" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Polymaker PLA-HT @Qidi X-Plus 5 0.2 nozzle.json b/resources/profiles/Qidi/filament/X5/Polymaker PLA-HT @Qidi X-Plus 5 0.2 nozzle.json new file mode 100644 index 0000000000..78389ceeb5 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Polymaker PLA-HT @Qidi X-Plus 5 0.2 nozzle.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "setting_id": "p9cDXBgbjwjOX5me", + "name": "Polymaker PLA-HT @Qidi X-Plus 5 0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Polymaker PLA-HT@X-Plus 5-Series", + "filament_max_volumetric_speed": [ + "2" + ], + "pressure_advance": [ + "0.062" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Polymaker PLA-HT @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/Polymaker PLA-HT @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..9f77b41119 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Polymaker PLA-HT @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "TpI2jqmcVygyTO8N", + "name": "Polymaker PLA-HT @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Polymaker PLA-HT@X-Plus 5-Series", + "pressure_advance": [ + "0.037" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Polymaker PLA-HT @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/Polymaker PLA-HT @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..3c46385369 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Polymaker PLA-HT @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "69AgpjCCTxF5ffW1", + "name": "Polymaker PLA-HT @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Polymaker PLA-HT@X-Plus 5-Series", + "pressure_advance": [ + "0.019" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Polymaker PLA-HT @Qidi X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/filament/X5/Polymaker PLA-HT @Qidi X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..788db83504 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Polymaker PLA-HT @Qidi X-Plus 5 0.8 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "tcoQNICpWYGdE24e", + "name": "Polymaker PLA-HT @Qidi X-Plus 5 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Polymaker PLA-HT@X-Plus 5-Series", + "pressure_advance": [ + "0.012" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/Polymaker PLA-HT @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/Polymaker PLA-HT @X-Plus 5.json new file mode 100644 index 0000000000..f3c54e81f1 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/Polymaker PLA-HT @X-Plus 5.json @@ -0,0 +1,66 @@ +{ + "type": "filament", + "filament_id": "GFL99", + "name": "Polymaker PLA-HT@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "filament_adhesiveness_category": [ + "100" + ], + "filament_density": [ + "1.2" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "11" + ], + "filament_type": [ + "PLA" + ], + "filament_vendor": [ + "Polymaker" + ], + "additional_cooling_fan_speed": [ + "100" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature": [ + "215" + ], + "overhang_fan_threshold": [ + "50%" + ], + "slow_down_layer_time": [ + "10" + ], + "supertack_plate_temp_initial_layer": [ + "45" + ], + "supertack_plate_temp": [ + "45" + ], + "temperature_vitrification": [ + "45" + ], + "textured_cool_plate_temp_initial_layer": [ + "45" + ], + "textured_cool_plate_temp": [ + "45" + ], + "compatible_printers": [], + "close_additional_fan_first_x_layers": [ + "1" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI ABS Odorless @Qidi X-Plus 5 0.2 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI ABS Odorless @Qidi X-Plus 5 0.2 nozzle.json new file mode 100644 index 0000000000..254422bb19 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI ABS Odorless @Qidi X-Plus 5 0.2 nozzle.json @@ -0,0 +1,20 @@ +{ + "type": "filament", + "setting_id": "8SvrXXv743rCyyeN", + "name": "QIDI ABS Odorless @Qidi X-Plus 5 0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI ABS Odorless@X-Plus 5-Series", + "chamber_temperatures": [ + "0" + ], + "pressure_advance": [ + "0.03" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI ABS Odorless @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI ABS Odorless @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..1bd37ac08a --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI ABS Odorless @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "YviPsfkGYv6Q3r3T", + "name": "QIDI ABS Odorless @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI ABS Odorless@X-Plus 5-Series", + "pressure_advance": [ + "0.03" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI ABS Odorless @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI ABS Odorless @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..cbb361fb9c --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI ABS Odorless @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,20 @@ +{ + "type": "filament", + "setting_id": "YLOcbaCppSmQ1twv", + "name": "QIDI ABS Odorless @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI ABS Odorless@X-Plus 5-Series", + "filament_max_volumetric_speed": [ + "24.5" + ], + "nozzle_temperature": [ + "250" + ], + "pressure_advance": [ + "0.014" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI ABS Odorless @Qidi X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI ABS Odorless @Qidi X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..912dc04ed7 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI ABS Odorless @Qidi X-Plus 5 0.8 nozzle.json @@ -0,0 +1,23 @@ +{ + "type": "filament", + "setting_id": "Klsu6iALsWgbg3vK", + "name": "QIDI ABS Odorless @Qidi X-Plus 5 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI ABS Odorless@X-Plus 5-Series", + "filament_max_volumetric_speed": [ + "24.5" + ], + "nozzle_temperature": [ + "250" + ], + "pressure_advance": [ + "0.011" + ], + "slow_down_min_speed": [ + "10" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI ABS Odorless @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI ABS Odorless @X-Plus 5.json new file mode 100644 index 0000000000..a2f14984a0 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI ABS Odorless @X-Plus 5.json @@ -0,0 +1,108 @@ +{ + "type": "filament", + "filament_id": "QD_4_1_14", + "name": "QIDI ABS Odorless@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "box_temperature_range_high": [ + "45" + ], + "chamber_temperatures": [ + "55" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "cool_plate_temp_initial_layer": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "eng_plate_temp_initial_layer": [ + "90" + ], + "eng_plate_temp": [ + "90" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "10" + ], + "filament_adhesiveness_category": [ + "200" + ], + "filament_density": [ + "1.02" + ], + "filament_flow_ratio": [ + "0.92" + ], + "filament_max_volumetric_speed": [ + "22" + ], + "filament_type": [ + "ABS" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "hot_plate_temp": [ + "90" + ], + "impact_strength_z": [ + "7.4" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "nozzle_temperature": [ + "260" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "pressure_advance": [ + "0.035" + ], + "slow_down_layer_time": [ + "4" + ], + "temperature_vitrification": [ + "100" + ], + "supertack_plate_temp_initial_layer": [ + "80" + ], + "supertack_plate_temp": [ + "80" + ], + "textured_plate_temp_initial_layer": [ + "90" + ], + "textured_plate_temp": [ + "90" + ], + "textured_cool_plate_temp_initial_layer": [ + "80" + ], + "textured_cool_plate_temp": [ + "80" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI ABS Rapido @Qidi X-Plus 5 0.2 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI ABS Rapido @Qidi X-Plus 5 0.2 nozzle.json new file mode 100644 index 0000000000..99a9e16c08 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI ABS Rapido @Qidi X-Plus 5 0.2 nozzle.json @@ -0,0 +1,20 @@ +{ + "type": "filament", + "setting_id": "bTwNiMSHwex0gxrd", + "name": "QIDI ABS Rapido @Qidi X-Plus 5 0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI ABS Rapido@X-Plus 5-Series", + "chamber_temperatures": [ + "0" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "pressure_advance": [ + "0.03" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI ABS Rapido @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI ABS Rapido @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..30086f5dce --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI ABS Rapido @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "mcPlHcr33zPv3aIf", + "name": "QIDI ABS Rapido @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI ABS Rapido@X-Plus 5-Series", + "pressure_advance": [ + "0.03" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI ABS Rapido @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI ABS Rapido @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..47278a61b1 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI ABS Rapido @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "setting_id": "0np334pRpl3qa8Uq", + "name": "QIDI ABS Rapido @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI ABS Rapido@X-Plus 5-Series", + "nozzle_temperature": [ + "250" + ], + "pressure_advance": [ + "0.014" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI ABS Rapido @Qidi X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI ABS Rapido @Qidi X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..f79fcfdfac --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI ABS Rapido @Qidi X-Plus 5 0.8 nozzle.json @@ -0,0 +1,20 @@ +{ + "type": "filament", + "setting_id": "Vp2bJxFhsPvW6K0P", + "name": "QIDI ABS Rapido @Qidi X-Plus 5 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI ABS Rapido@X-Plus 5-Series", + "nozzle_temperature": [ + "250" + ], + "pressure_advance": [ + "0.011" + ], + "slow_down_min_speed": [ + "10" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI ABS Rapido @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI ABS Rapido @X-Plus 5.json new file mode 100644 index 0000000000..0ecb9c656c --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI ABS Rapido @X-Plus 5.json @@ -0,0 +1,105 @@ +{ + "type": "filament", + "filament_id": "QD_4_1_11", + "name": "QIDI ABS Rapido@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "box_temperature_range_high": [ + "45" + ], + "chamber_temperatures": [ + "55" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "cool_plate_temp_initial_layer": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "eng_plate_temp_initial_layer": [ + "90" + ], + "eng_plate_temp": [ + "90" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "20" + ], + "filament_adhesiveness_category": [ + "200" + ], + "filament_density": [ + "1.05" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_type": [ + "ABS" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "hot_plate_temp": [ + "90" + ], + "impact_strength_z": [ + "7.4" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "nozzle_temperature": [ + "260" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "pressure_advance": [ + "0.035" + ], + "slow_down_layer_time": [ + "4" + ], + "supertack_plate_temp_initial_layer": [ + "80" + ], + "supertack_plate_temp": [ + "80" + ], + "temperature_vitrification": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "90" + ], + "textured_plate_temp": [ + "90" + ], + "textured_cool_plate_temp_initial_layer": [ + "80" + ], + "textured_cool_plate_temp": [ + "80" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI ABS Rapido Metal @Qidi X-Plus 5 0.2 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI ABS Rapido Metal @Qidi X-Plus 5 0.2 nozzle.json new file mode 100644 index 0000000000..34632b393f --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI ABS Rapido Metal @Qidi X-Plus 5 0.2 nozzle.json @@ -0,0 +1,20 @@ +{ + "type": "filament", + "setting_id": "U69dFGlkEk9twDF6", + "name": "QIDI ABS Rapido Metal @Qidi X-Plus 5 0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI ABS Rapido Metal@X-Plus 5-Series", + "chamber_temperatures": [ + "0" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "pressure_advance": [ + "0.03" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI ABS Rapido Metal @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI ABS Rapido Metal @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..59492201a5 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI ABS Rapido Metal @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "XaJbATawtVrUsXpz", + "name": "QIDI ABS Rapido Metal @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI ABS Rapido Metal@X-Plus 5-Series", + "pressure_advance": [ + "0.03" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI ABS Rapido Metal @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI ABS Rapido Metal @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..93b4cb3aba --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI ABS Rapido Metal @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "setting_id": "Xb0A7YqmqP2peSM3", + "name": "QIDI ABS Rapido Metal @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI ABS Rapido Metal@X-Plus 5-Series", + "nozzle_temperature": [ + "250" + ], + "pressure_advance": [ + "0.016" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI ABS Rapido Metal @Qidi X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI ABS Rapido Metal @Qidi X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..c4edce73be --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI ABS Rapido Metal @Qidi X-Plus 5 0.8 nozzle.json @@ -0,0 +1,20 @@ +{ + "type": "filament", + "setting_id": "4AA9wGDNebbTHf4X", + "name": "QIDI ABS Rapido Metal @Qidi X-Plus 5 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI ABS Rapido Metal@X-Plus 5-Series", + "nozzle_temperature": [ + "250" + ], + "pressure_advance": [ + "0.008" + ], + "slow_down_min_speed": [ + "10" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI ABS Rapido Metal @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI ABS Rapido Metal @X-Plus 5.json new file mode 100644 index 0000000000..f3603eda99 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI ABS Rapido Metal @X-Plus 5.json @@ -0,0 +1,105 @@ +{ + "type": "filament", + "filament_id": "QD_4_1_13", + "name": "QIDI ABS Rapido Metal@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "box_temperature_range_high": [ + "45" + ], + "chamber_temperatures": [ + "55" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "cool_plate_temp_initial_layer": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "eng_plate_temp_initial_layer": [ + "90" + ], + "eng_plate_temp": [ + "90" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "20" + ], + "filament_adhesiveness_category": [ + "200" + ], + "filament_density": [ + "1.06" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_type": [ + "ABS" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "hot_plate_temp": [ + "90" + ], + "impact_strength_z": [ + "7.4" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "nozzle_temperature": [ + "260" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "pressure_advance": [ + "0.035" + ], + "slow_down_layer_time": [ + "4" + ], + "supertack_plate_temp_initial_layer": [ + "80" + ], + "supertack_plate_temp": [ + "80" + ], + "temperature_vitrification": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "90" + ], + "textured_plate_temp": [ + "90" + ], + "textured_cool_plate_temp_initial_layer": [ + "80" + ], + "textured_cool_plate_temp": [ + "80" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI ABS-GF @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI ABS-GF @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..d81d623d33 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI ABS-GF @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "V9h7YWcaTejmFCh0", + "name": "QIDI ABS-GF @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI ABS-GF@X-Plus 5-Series", + "pressure_advance": [ + "0.03" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI ABS-GF @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI ABS-GF @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..88ee5f2146 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI ABS-GF @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "hO8H1GUCzMkwFtQH", + "name": "QIDI ABS-GF @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI ABS-GF@X-Plus 5-Series", + "pressure_advance": [ + "0.01" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI ABS-GF @Qidi X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI ABS-GF @Qidi X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..997e67a0f0 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI ABS-GF @Qidi X-Plus 5 0.8 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "LskHdeEngKlRCSmg", + "name": "QIDI ABS-GF @Qidi X-Plus 5 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI ABS-GF@X-Plus 5-Series", + "pressure_advance": [ + "0.01" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI ABS-GF @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI ABS-GF @X-Plus 5.json new file mode 100644 index 0000000000..2ab2fbfc84 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI ABS-GF @X-Plus 5.json @@ -0,0 +1,114 @@ +{ + "type": "filament", + "filament_id": "QD_4_1_12", + "name": "QIDI ABS-GF@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "box_temperature_range_high": [ + "45" + ], + "box_temperature_range_low": [ + "0" + ], + "box_temperature": [ + "45" + ], + "chamber_temperatures": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "cool_plate_temp_initial_layer": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "eng_plate_temp_initial_layer": [ + "90" + ], + "eng_plate_temp": [ + "90" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "fan_max_speed": [ + "20" + ], + "fan_min_speed": [ + "20" + ], + "filament_adhesiveness_category": [ + "200" + ], + "filament_density": [ + "1.15" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_type": [ + "ABS-GF" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "hot_plate_temp": [ + "90" + ], + "impact_strength_z": [ + "5.3" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "nozzle_temperature": [ + "270" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "pressure_advance": [ + "0.035" + ], + "slow_down_layer_time": [ + "5" + ], + "supertack_plate_temp_initial_layer": [ + "80" + ], + "supertack_plate_temp": [ + "80" + ], + "temperature_vitrification": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "90" + ], + "textured_plate_temp": [ + "90" + ], + "textured_cool_plate_temp_initial_layer": [ + "80" + ], + "textured_cool_plate_temp": [ + "80" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI ASA @Qidi X-Plus 5 0.2 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI ASA @Qidi X-Plus 5 0.2 nozzle.json new file mode 100644 index 0000000000..d417265f5a --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI ASA @Qidi X-Plus 5 0.2 nozzle.json @@ -0,0 +1,20 @@ +{ + "type": "filament", + "setting_id": "FgeIGgT8xZCm4UO8", + "name": "QIDI ASA @Qidi X-Plus 5 0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI ASA@X-Plus 5-Series", + "chamber_temperatures": [ + "0" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "pressure_advance": [ + "0.03" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI ASA @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI ASA @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..ed86d714a1 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI ASA @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "VRicNQizOCKkgLBJ", + "name": "QIDI ASA @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI ASA@X-Plus 5-Series", + "pressure_advance": [ + "0.03" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI ASA @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI ASA @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..a7870accce --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI ASA @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "setting_id": "KDjln7WdhhbSztX3", + "name": "QIDI ASA @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI ASA@X-Plus 5-Series", + "filament_max_volumetric_speed": [ + "13" + ], + "pressure_advance": [ + "0.014" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI ASA @Qidi X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI ASA @Qidi X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..30496917d1 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI ASA @Qidi X-Plus 5 0.8 nozzle.json @@ -0,0 +1,20 @@ +{ + "type": "filament", + "setting_id": "X9TOBuOKBbJIoF7y", + "name": "QIDI ASA @Qidi X-Plus 5 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI ASA@X-Plus 5-Series", + "filament_max_volumetric_speed": [ + "13" + ], + "pressure_advance": [ + "0.011" + ], + "slow_down_min_speed": [ + "10" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI ASA @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI ASA @X-Plus 5.json new file mode 100644 index 0000000000..97127fe57b --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI ASA @X-Plus 5.json @@ -0,0 +1,111 @@ +{ + "type": "filament", + "filament_id": "QD_4_1_18", + "name": "QIDI ASA@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "box_temperature_range_high": [ + "45" + ], + "chamber_temperatures": [ + "55" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "cool_plate_temp_initial_layer": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "eng_plate_temp_initial_layer": [ + "90" + ], + "eng_plate_temp": [ + "90" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "fan_cooling_layer_time": [ + "40" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "10" + ], + "filament_adhesiveness_category": [ + "200" + ], + "filament_density": [ + "1.07" + ], + "filament_flow_ratio": [ + "0.92" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_type": [ + "ASA" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "hot_plate_temp": [ + "90" + ], + "impact_strength_z": [ + "4.9" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "nozzle_temperature": [ + "255" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "pressure_advance": [ + "0.035" + ], + "slow_down_layer_time": [ + "4" + ], + "supertack_plate_temp_initial_layer": [ + "80" + ], + "supertack_plate_temp": [ + "80" + ], + "temperature_vitrification": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "90" + ], + "textured_plate_temp": [ + "90" + ], + "textured_cool_plate_temp_initial_layer": [ + "80" + ], + "textured_cool_plate_temp": [ + "80" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI ASA-Aero @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI ASA-Aero @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..08a4ed22a9 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI ASA-Aero @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "setting_id": "g5F7NP83yx0Iub4c", + "name": "QIDI ASA-Aero @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI ASA-Aero@X-Plus 5-Series", + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI ASA-Aero @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI ASA-Aero @X-Plus 5.json new file mode 100644 index 0000000000..14423fd58c --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI ASA-Aero @X-Plus 5.json @@ -0,0 +1,126 @@ +{ + "type": "filament", + "filament_id": "QD_4_1_19", + "name": "QIDI ASA-Aero@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "box_temperature_range_high": [ + "45" + ], + "chamber_temperatures": [ + "60" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "cool_plate_temp_initial_layer": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "eng_plate_temp_initial_layer": [ + "90" + ], + "eng_plate_temp": [ + "90" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "fan_cooling_layer_time": [ + "40" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "10" + ], + "filament_adhesiveness_category": [ + "200" + ], + "filament_density": [ + "1.03" + ], + "filament_flow_ratio": [ + "0.7" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0.01" + ], + "filament_retraction_minimum_travel": [ + "0" + ], + "filament_type": [ + "ASA-AERO" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "hot_plate_temp": [ + "90" + ], + "filament_wipe": [ + "0" + ], + "filament_z_hop": [ + "0" + ], + "impact_strength_z": [ + "3.4" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "nozzle_temperature": [ + "260" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "pressure_advance": [ + "0.021" + ], + "slow_down_layer_time": [ + "4" + ], + "supertack_plate_temp_initial_layer": [ + "80" + ], + "supertack_plate_temp": [ + "80" + ], + "temperature_vitrification": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "90" + ], + "textured_plate_temp": [ + "90" + ], + "textured_cool_plate_temp_initial_layer": [ + "80" + ], + "textured_cool_plate_temp": [ + "80" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI ASA-CF @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI ASA-CF @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..be97fdfd58 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI ASA-CF @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "Aqh00EJ8ZaiPCU6F", + "name": "QIDI ASA-CF @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI ASA-CF@X-Plus 5-Series", + "pressure_advance": [ + "0.03" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI ASA-CF @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI ASA-CF @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..cd8bbc98bd --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI ASA-CF @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "setting_id": "fgwkL5igRvM0leJf", + "name": "QIDI ASA-CF @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI ASA-CF@X-Plus 5-Series", + "filament_max_volumetric_speed": [ + "13" + ], + "pressure_advance": [ + "0.014" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI ASA-CF @Qidi X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI ASA-CF @Qidi X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..3095a16138 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI ASA-CF @Qidi X-Plus 5 0.8 nozzle.json @@ -0,0 +1,20 @@ +{ + "type": "filament", + "setting_id": "bDAcTzwdiXT4fFnT", + "name": "QIDI ASA-CF @Qidi X-Plus 5 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI ASA-CF@X-Plus 5-Series", + "filament_max_volumetric_speed": [ + "13" + ], + "pressure_advance": [ + "0.011" + ], + "slow_down_min_speed": [ + "10" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI ASA-CF @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI ASA-CF @X-Plus 5.json new file mode 100644 index 0000000000..9a8958c860 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI ASA-CF @X-Plus 5.json @@ -0,0 +1,111 @@ +{ + "type": "filament", + "filament_id": "QD_4_1_20", + "name": "QIDI ASA-CF@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "box_temperature_range_high": [ + "45" + ], + "chamber_temperatures": [ + "55" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "cool_plate_temp_initial_layer": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "eng_plate_temp_initial_layer": [ + "90" + ], + "eng_plate_temp": [ + "90" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "fan_cooling_layer_time": [ + "35" + ], + "fan_max_speed": [ + "25" + ], + "fan_min_speed": [ + "10" + ], + "filament_adhesiveness_category": [ + "200" + ], + "filament_density": [ + "1.07" + ], + "filament_flow_ratio": [ + "0.9" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_type": [ + "ASA-CF" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "hot_plate_temp": [ + "90" + ], + "impact_strength_z": [ + "4.9" + ], + "nozzle_temperature_initial_layer": [ + "275" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "nozzle_temperature_range_low": [ + "260" + ], + "nozzle_temperature": [ + "275" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "pressure_advance": [ + "0.03" + ], + "slow_down_layer_time": [ + "12" + ], + "supertack_plate_temp_initial_layer": [ + "80" + ], + "supertack_plate_temp": [ + "80" + ], + "temperature_vitrification": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "90" + ], + "textured_plate_temp": [ + "90" + ], + "textured_cool_plate_temp_initial_layer": [ + "80" + ], + "textured_cool_plate_temp": [ + "80" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PA12-CF @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PA12-CF @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..165c5cfb62 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PA12-CF @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "setting_id": "vDXAb7Kkj7nFc8go", + "name": "QIDI PA12-CF @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PA12-CF@X-Plus 5-Series", + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PA12-CF @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PA12-CF @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..ad26af1f86 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PA12-CF @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "setting_id": "KjZ3jgo2Zoklkk0F", + "name": "QIDI PA12-CF @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PA12-CF@X-Plus 5-Series", + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PA12-CF @Qidi X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PA12-CF @Qidi X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..5324f0c183 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PA12-CF @Qidi X-Plus 5 0.8 nozzle.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "setting_id": "Xcl3UPe7tmXw9hXa", + "name": "QIDI PA12-CF @Qidi X-Plus 5 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PA12-CF@X-Plus 5-Series", + "compatible_printers": [ + "Qidi X-Plus 5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PA12-CF @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PA12-CF @X-Plus 5.json new file mode 100644 index 0000000000..3464bed9a3 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PA12-CF @X-Plus 5.json @@ -0,0 +1,111 @@ +{ + "type": "filament", + "filament_id": "QD_4_1_27", + "name": "QIDI PA12-CF@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "box_temperature_range_high": [ + "65" + ], + "box_temperature_range_low": [ + "0" + ], + "box_temperature": [ + "55" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "cool_plate_temp_initial_layer": [ + "60" + ], + "cool_plate_temp": [ + "60" + ], + "eng_plate_temp_initial_layer": [ + "80" + ], + "eng_plate_temp": [ + "80" + ], + "fan_cooling_layer_time": [ + "10" + ], + "fan_max_speed": [ + "40" + ], + "fan_min_speed": [ + "20" + ], + "filament_adhesiveness_category": [ + "400" + ], + "filament_density": [ + "1.09" + ], + "filament_flow_ratio": [ + "0.96" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_type": [ + "PA12-CF" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "hot_plate_temp": [ + "80" + ], + "impact_strength_z": [ + "5.7" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature_range_high": [ + "300" + ], + "nozzle_temperature_range_low": [ + "280" + ], + "nozzle_temperature": [ + "280" + ], + "overhang_fan_speed": [ + "40" + ], + "overhang_fan_threshold": [ + "0%" + ], + "pressure_advance": [ + "0.035" + ], + "slow_down_layer_time": [ + "5" + ], + "supertack_plate_temp_initial_layer": [ + "60" + ], + "supertack_plate_temp": [ + "60" + ], + "temperature_vitrification": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "textured_plate_temp": [ + "80" + ], + "textured_cool_plate_temp_initial_layer": [ + "60" + ], + "textured_cool_plate_temp": [ + "60" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PA6-CF @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PA6-CF @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..fbe5870078 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PA6-CF @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "setting_id": "qTjsP8oR1sbh56Gh", + "name": "QIDI PA6-CF @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PA6-CF@X-Plus 5-Series", + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PA6-CF @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PA6-CF @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..016f9bb2e4 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PA6-CF @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "setting_id": "4kzkdzJmDYGic0aa", + "name": "QIDI PA6-CF @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PA6-CF@X-Plus 5-Series", + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PA6-CF @Qidi X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PA6-CF @Qidi X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..ba0d981c29 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PA6-CF @Qidi X-Plus 5 0.8 nozzle.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "setting_id": "97peVPSildpjdDQj", + "name": "QIDI PA6-CF @Qidi X-Plus 5 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PA6-CF@X-Plus 5-Series", + "compatible_printers": [ + "Qidi X-Plus 5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PA6-CF @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PA6-CF @X-Plus 5.json new file mode 100644 index 0000000000..9b6a66f61b --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PA6-CF @X-Plus 5.json @@ -0,0 +1,111 @@ +{ + "type": "filament", + "filament_id": "QD_4_1_25", + "name": "QIDI PA6-CF@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "box_temperature_range_high": [ + "65" + ], + "box_temperature_range_low": [ + "0" + ], + "box_temperature": [ + "55" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "cool_plate_temp_initial_layer": [ + "60" + ], + "cool_plate_temp": [ + "60" + ], + "eng_plate_temp_initial_layer": [ + "80" + ], + "eng_plate_temp": [ + "80" + ], + "fan_cooling_layer_time": [ + "10" + ], + "fan_max_speed": [ + "40" + ], + "fan_min_speed": [ + "20" + ], + "filament_adhesiveness_category": [ + "400" + ], + "filament_density": [ + "1.09" + ], + "filament_flow_ratio": [ + "0.96" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_type": [ + "PA6-CF" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "hot_plate_temp": [ + "80" + ], + "impact_strength_z": [ + "5.7" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature_range_high": [ + "300" + ], + "nozzle_temperature_range_low": [ + "280" + ], + "nozzle_temperature": [ + "280" + ], + "overhang_fan_speed": [ + "40" + ], + "overhang_fan_threshold": [ + "0%" + ], + "pressure_advance": [ + "0.035" + ], + "slow_down_layer_time": [ + "5" + ], + "supertack_plate_temp_initial_layer": [ + "60" + ], + "supertack_plate_temp": [ + "60" + ], + "temperature_vitrification": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "textured_plate_temp": [ + "80" + ], + "textured_cool_plate_temp_initial_layer": [ + "60" + ], + "textured_cool_plate_temp": [ + "60" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PAHT-CF @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PAHT-CF @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..68d604414d --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PAHT-CF @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "setting_id": "3iw5hq0KFa9NU4b3", + "name": "QIDI PAHT-CF @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PAHT-CF@X-Plus 5-Series", + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PAHT-CF @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PAHT-CF @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..0ca7290e39 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PAHT-CF @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "setting_id": "7eBDjJbetxOC3aNT", + "name": "QIDI PAHT-CF @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PAHT-CF@X-Plus 5-Series", + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PAHT-CF @Qidi X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PAHT-CF @Qidi X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..b3b88d5f28 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PAHT-CF @Qidi X-Plus 5 0.8 nozzle.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "setting_id": "hkIpB0QZOGZpoYFX", + "name": "QIDI PAHT-CF @Qidi X-Plus 5 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PAHT-CF@X-Plus 5-Series", + "compatible_printers": [ + "Qidi X-Plus 5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PAHT-CF @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PAHT-CF @X-Plus 5.json new file mode 100644 index 0000000000..fcfccfe0f6 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PAHT-CF @X-Plus 5.json @@ -0,0 +1,111 @@ +{ + "type": "filament", + "filament_id": "QD_4_1_30", + "name": "QIDI PAHT-CF@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "box_temperature_range_high": [ + "65" + ], + "box_temperature_range_low": [ + "0" + ], + "box_temperature": [ + "60" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "cool_plate_temp_initial_layer": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "eng_plate_temp_initial_layer": [ + "80" + ], + "eng_plate_temp": [ + "80" + ], + "fan_cooling_layer_time": [ + "10" + ], + "fan_max_speed": [ + "40" + ], + "fan_min_speed": [ + "20" + ], + "filament_adhesiveness_category": [ + "400" + ], + "filament_density": [ + "1.2" + ], + "filament_flow_ratio": [ + "0.96" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_type": [ + "PAHT-CF" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "hot_plate_temp": [ + "80" + ], + "impact_strength_z": [ + "13.3" + ], + "nozzle_temperature_initial_layer": [ + "300" + ], + "nozzle_temperature_range_high": [ + "320" + ], + "nozzle_temperature_range_low": [ + "300" + ], + "nozzle_temperature": [ + "300" + ], + "overhang_fan_speed": [ + "40" + ], + "overhang_fan_threshold": [ + "0%" + ], + "pressure_advance": [ + "0.032" + ], + "slow_down_layer_time": [ + "5" + ], + "supertack_plate_temp_initial_layer": [ + "80" + ], + "supertack_plate_temp": [ + "80" + ], + "temperature_vitrification": [ + "180" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "textured_plate_temp": [ + "80" + ], + "textured_cool_plate_temp_initial_layer": [ + "80" + ], + "textured_cool_plate_temp": [ + "80" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PAHT-GF @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PAHT-GF @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..9638d33afc --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PAHT-GF @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "setting_id": "R7cctkITobdKgMkY", + "name": "QIDI PAHT-GF @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PAHT-GF@X-Plus 5-Series", + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PAHT-GF @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PAHT-GF @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..4d926ff370 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PAHT-GF @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "cVzpHjaSzsDm0bwG", + "name": "QIDI PAHT-GF @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PAHT-GF@X-Plus 5-Series", + "pressure_advance": [ + "0.015" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PAHT-GF @Qidi X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PAHT-GF @Qidi X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..ce49e3ef04 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PAHT-GF @Qidi X-Plus 5 0.8 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "N0aUkpcJD6CvODci", + "name": "QIDI PAHT-GF @Qidi X-Plus 5 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PAHT-GF@X-Plus 5-Series", + "pressure_advance": [ + "0.01" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PAHT-GF @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PAHT-GF @X-Plus 5.json new file mode 100644 index 0000000000..3c0f1056ed --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PAHT-GF @X-Plus 5.json @@ -0,0 +1,111 @@ +{ + "type": "filament", + "filament_id": "QD_4_1_31", + "name": "QIDI PAHT-GF@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "box_temperature_range_high": [ + "65" + ], + "box_temperature_range_low": [ + "0" + ], + "box_temperature": [ + "60" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "cool_plate_temp_initial_layer": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "eng_plate_temp_initial_layer": [ + "80" + ], + "eng_plate_temp": [ + "80" + ], + "fan_cooling_layer_time": [ + "10" + ], + "fan_max_speed": [ + "20" + ], + "fan_min_speed": [ + "20" + ], + "filament_adhesiveness_category": [ + "400" + ], + "filament_density": [ + "1.27" + ], + "filament_flow_ratio": [ + "0.96" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_type": [ + "PAHT-GF" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "hot_plate_temp": [ + "80" + ], + "impact_strength_z": [ + "13.3" + ], + "nozzle_temperature_initial_layer": [ + "300" + ], + "nozzle_temperature_range_high": [ + "320" + ], + "nozzle_temperature_range_low": [ + "300" + ], + "nozzle_temperature": [ + "300" + ], + "overhang_fan_speed": [ + "40" + ], + "overhang_fan_threshold": [ + "0%" + ], + "pressure_advance": [ + "0.027" + ], + "slow_down_layer_time": [ + "5" + ], + "supertack_plate_temp_initial_layer": [ + "80" + ], + "supertack_plate_temp": [ + "80" + ], + "temperature_vitrification": [ + "180" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "textured_plate_temp": [ + "80" + ], + "textured_cool_plate_temp_initial_layer": [ + "80" + ], + "textured_cool_plate_temp": [ + "80" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PC-ABS-FR @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PC-ABS-FR @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..e4842206ed --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PC-ABS-FR @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "uYwbMiemSo7LxiqR", + "name": "QIDI PC/ABS-FR @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PC/ABS-FR@X-Plus 5-Series", + "pressure_advance": [ + "0.042" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PC-ABS-FR @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PC-ABS-FR @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..35c317e8d3 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PC-ABS-FR @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "Fxkv0PN8RU17fkB0", + "name": "QIDI PC/ABS-FR @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PC/ABS-FR@X-Plus 5-Series", + "pressure_advance": [ + "0.031" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PC-ABS-FR @Qidi X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PC-ABS-FR @Qidi X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..456a93a6d0 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PC-ABS-FR @Qidi X-Plus 5 0.8 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "oKNGzYqymTnWQsBB", + "name": "QIDI PC/ABS-FR @Qidi X-Plus 5 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PC/ABS-FR@X-Plus 5-Series", + "pressure_advance": [ + "0.024" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PC-ABS-FR @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PC-ABS-FR @X-Plus 5.json new file mode 100644 index 0000000000..b6c6fb3b64 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PC-ABS-FR @X-Plus 5.json @@ -0,0 +1,111 @@ +{ + "type": "filament", + "filament_id": "QD_4_1_34", + "name": "QIDI PC/ABS-FR@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "box_temperature_range_high": [ + "50" + ], + "chamber_temperatures": [ + "55" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "cool_plate_temp_initial_layer": [ + "65" + ], + "cool_plate_temp": [ + "65" + ], + "eng_plate_temp_initial_layer": [ + "100" + ], + "eng_plate_temp": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "40" + ], + "fan_min_speed": [ + "10" + ], + "filament_adhesiveness_category": [ + "200" + ], + "filament_density": [ + "1.19" + ], + "filament_flow_ratio": [ + "0.92" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_type": [ + "PC-ABS-FR" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "hot_plate_temp": [ + "100" + ], + "impact_strength_z": [ + "8" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "nozzle_temperature": [ + "250" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "75%" + ], + "pressure_advance": [ + "0.082" + ], + "slow_down_layer_time": [ + "4" + ], + "supertack_plate_temp_initial_layer": [ + "65" + ], + "supertack_plate_temp": [ + "65" + ], + "temperature_vitrification": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "100" + ], + "textured_plate_temp": [ + "100" + ], + "textured_cool_plate_temp_initial_layer": [ + "65" + ], + "textured_cool_plate_temp": [ + "65" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PEBA 95A @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PEBA 95A @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..5fa07706a9 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PEBA 95A @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "setting_id": "hgdi1oL4EFzh0h7h", + "name": "QIDI PEBA 95A @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PEBA 95A@X-Plus 5-Series", + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PEBA 95A @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PEBA 95A @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..f44261951e --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PEBA 95A @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "setting_id": "iNZpBz1iklW3sJlj", + "name": "QIDI PEBA 95A @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PEBA 95A@X-Plus 5-Series", + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PEBA 95A @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PEBA 95A @X-Plus 5.json new file mode 100644 index 0000000000..43410eabe1 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PEBA 95A @X-Plus 5.json @@ -0,0 +1,96 @@ +{ + "type": "filament", + "filament_id": "QD_4_1_36", + "name": "QIDI PEBA 95A@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "cool_plate_temp_initial_layer": [ + "30" + ], + "cool_plate_temp": [ + "30" + ], + "eng_plate_temp_initial_layer": [ + "35" + ], + "eng_plate_temp": [ + "35" + ], + "fan_cooling_layer_time": [ + "100" + ], + "filament_adhesiveness_category": [ + "600" + ], + "filament_density": [ + "1.15" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_type": [ + "PEBA" + ], + "filament_vendor": [ + "QIDI" + ], + "filament_z_hop": [ + "0" + ], + "hot_plate_temp_initial_layer": [ + "35" + ], + "hot_plate_temp": [ + "35" + ], + "impact_strength_z": [ + "88.7" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "230" + ], + "nozzle_temperature": [ + "250" + ], + "pressure_advance": [ + "0.04" + ], + "slow_down_layer_time": [ + "14" + ], + "supertack_plate_temp_initial_layer": [ + "30" + ], + "supertack_plate_temp": [ + "30" + ], + "temperature_vitrification": [ + "30" + ], + "textured_plate_temp_initial_layer": [ + "35" + ], + "textured_plate_temp": [ + "35" + ], + "textured_cool_plate_temp_initial_layer": [ + "30" + ], + "textured_cool_plate_temp": [ + "30" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PET-CF @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PET-CF @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..bfdd1aed31 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PET-CF @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "setting_id": "bILtWMlzBPi4Ft8a", + "name": "QIDI PET-CF @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PET-CF@X-Plus 5-Series", + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PET-CF @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PET-CF @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..cb78cf3afc --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PET-CF @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "E0Y6g3qpoERrgSUH", + "name": "QIDI PET-CF @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PET-CF@X-Plus 5-Series", + "pressure_advance": [ + "0.025" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PET-CF @Qidi X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PET-CF @Qidi X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..ae40d594ff --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PET-CF @Qidi X-Plus 5 0.8 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "e2HuHVJZck2nKANa", + "name": "QIDI PET-CF @Qidi X-Plus 5 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PET-CF@X-Plus 5-Series", + "pressure_advance": [ + "0.025" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PET-CF @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PET-CF @X-Plus 5.json new file mode 100644 index 0000000000..162cbec691 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PET-CF @X-Plus 5.json @@ -0,0 +1,111 @@ +{ + "type": "filament", + "filament_id": "QD_4_1_37", + "name": "QIDI PET-CF@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "box_temperature_range_high": [ + "65" + ], + "box_temperature_range_low": [ + "0" + ], + "box_temperature": [ + "55" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "cool_plate_temp_initial_layer": [ + "70" + ], + "cool_plate_temp": [ + "70" + ], + "eng_plate_temp_initial_layer": [ + "80" + ], + "eng_plate_temp": [ + "80" + ], + "fan_cooling_layer_time": [ + "10" + ], + "fan_max_speed": [ + "40" + ], + "fan_min_speed": [ + "20" + ], + "filament_adhesiveness_category": [ + "800" + ], + "filament_density": [ + "1.3" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_type": [ + "PET-CF" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "hot_plate_temp": [ + "80" + ], + "impact_strength_z": [ + "4.5" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature_range_high": [ + "320" + ], + "nozzle_temperature_range_low": [ + "280" + ], + "nozzle_temperature": [ + "280" + ], + "overhang_fan_speed": [ + "40" + ], + "overhang_fan_threshold": [ + "0%" + ], + "pressure_advance": [ + "0.032" + ], + "slow_down_layer_time": [ + "5" + ], + "temperature_vitrification": [ + "185" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "textured_plate_temp": [ + "80" + ], + "supertack_plate_temp_initial_layer": [ + "70" + ], + "supertack_plate_temp": [ + "70" + ], + "textured_cool_plate_temp_initial_layer": [ + "70" + ], + "textured_cool_plate_temp": [ + "70" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PET-GF @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PET-GF @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..97029aeb25 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PET-GF @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "setting_id": "2NHbKFmgDoN1oHlo", + "name": "QIDI PET-GF @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PET-GF@X-Plus 5-Series", + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PET-GF @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PET-GF @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..480d13bb65 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PET-GF @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "cMlzOMKIIIro4H62", + "name": "QIDI PET-GF @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PET-GF@X-Plus 5-Series", + "pressure_advance": [ + "0.014" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PET-GF @Qidi X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PET-GF @Qidi X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..2cc0cfe2cb --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PET-GF @Qidi X-Plus 5 0.8 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "evxG7nCDQx2Y5UV5", + "name": "QIDI PET-GF @Qidi X-Plus 5 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PET-GF@X-Plus 5-Series", + "pressure_advance": [ + "0.01" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PET-GF @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PET-GF @X-Plus 5.json new file mode 100644 index 0000000000..84310856cc --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PET-GF @X-Plus 5.json @@ -0,0 +1,111 @@ +{ + "type": "filament", + "filament_id": "QD_4_1_38", + "name": "QIDI PET-GF@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "box_temperature_range_high": [ + "50" + ], + "box_temperature_range_low": [ + "0" + ], + "box_temperature": [ + "50" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "cool_plate_temp_initial_layer": [ + "70" + ], + "cool_plate_temp": [ + "70" + ], + "eng_plate_temp_initial_layer": [ + "80" + ], + "eng_plate_temp": [ + "80" + ], + "fan_cooling_layer_time": [ + "10" + ], + "fan_max_speed": [ + "20" + ], + "fan_min_speed": [ + "20" + ], + "filament_adhesiveness_category": [ + "800" + ], + "filament_density": [ + "1.38" + ], + "filament_flow_ratio": [ + "0.97" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_type": [ + "PET-GF" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "hot_plate_temp": [ + "80" + ], + "impact_strength_z": [ + "4.5" + ], + "nozzle_temperature_initial_layer": [ + "300" + ], + "nozzle_temperature_range_high": [ + "320" + ], + "nozzle_temperature_range_low": [ + "280" + ], + "nozzle_temperature": [ + "300" + ], + "overhang_fan_speed": [ + "40" + ], + "overhang_fan_threshold": [ + "0%" + ], + "pressure_advance": [ + "0.022" + ], + "slow_down_layer_time": [ + "5" + ], + "supertack_plate_temp_initial_layer": [ + "70" + ], + "supertack_plate_temp": [ + "70" + ], + "temperature_vitrification": [ + "185" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "textured_plate_temp": [ + "80" + ], + "textured_cool_plate_temp_initial_layer": [ + "70" + ], + "textured_cool_plate_temp": [ + "70" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PETG Basic @Qidi X-Plus 5 0.2 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PETG Basic @Qidi X-Plus 5 0.2 nozzle.json new file mode 100644 index 0000000000..6689cca71a --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PETG Basic @Qidi X-Plus 5 0.2 nozzle.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "setting_id": "k4jOZFY5QV2bMKHK", + "name": "QIDI PETG Basic @Qidi X-Plus 5 0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PETG Basic@X-Plus 5-Series", + "filament_max_volumetric_speed": [ + "1" + ], + "pressure_advance": [ + "0.054" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PETG Basic @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PETG Basic @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..c1b29f1b75 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PETG Basic @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "setting_id": "b55sLpGKCrWLiDPf", + "name": "QIDI PETG Basic @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PETG Basic@X-Plus 5-Series", + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PETG Basic @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PETG Basic @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..3be97a337f --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PETG Basic @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "XcxbsZ4d8Dh21WX0", + "name": "QIDI PETG Basic @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PETG Basic@X-Plus 5-Series", + "pressure_advance": [ + "0.04" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PETG Basic @Qidi X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PETG Basic @Qidi X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..92a57fb1b8 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PETG Basic @Qidi X-Plus 5 0.8 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "9MEoOjLU7AOCvb9X", + "name": "QIDI PETG Basic @Qidi X-Plus 5 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PETG Basic@X-Plus 5-Series", + "pressure_advance": [ + "0.04" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PETG Basic @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PETG Basic @X-Plus 5.json new file mode 100644 index 0000000000..46810f49c3 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PETG Basic @X-Plus 5.json @@ -0,0 +1,102 @@ +{ + "type": "filament", + "filament_id": "QD_4_1_39", + "name": "QIDI PETG Basic@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "box_temperature_range_high": [ + "45" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "cool_plate_temp_initial_layer": [ + "60" + ], + "cool_plate_temp": [ + "60" + ], + "eng_plate_temp_initial_layer": [ + "80" + ], + "eng_plate_temp": [ + "80" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "40" + ], + "fan_min_speed": [ + "10" + ], + "filament_adhesiveness_category": [ + "300" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "filament_type": [ + "PETG" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "hot_plate_temp": [ + "80" + ], + "impact_strength_z": [ + "10.6" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "nozzle_temperature": [ + "250" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "10%" + ], + "pressure_advance": [ + "0.054" + ], + "slow_down_layer_time": [ + "12" + ], + "temperature_vitrification": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "textured_plate_temp": [ + "80" + ], + "supertack_plate_temp_initial_layer": [ + "60" + ], + "supertack_plate_temp": [ + "60" + ], + "textured_cool_plate_temp_initial_layer": [ + "60" + ], + "textured_cool_plate_temp": [ + "60" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PETG Rapido @Qidi X-Plus 5 0.2 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PETG Rapido @Qidi X-Plus 5 0.2 nozzle.json new file mode 100644 index 0000000000..220a6ce55a --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PETG Rapido @Qidi X-Plus 5 0.2 nozzle.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "setting_id": "oi5JKM4fwEYHefs0", + "name": "QIDI PETG Rapido @Qidi X-Plus 5 0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PETG Rapido@X-Plus 5-Series", + "filament_max_volumetric_speed": [ + "1" + ], + "pressure_advance": [ + "0.054" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PETG Rapido @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PETG Rapido @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..9fe3affac2 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PETG Rapido @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "setting_id": "SZOwb16vrcdtaDzJ", + "name": "QIDI PETG Rapido @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PETG Rapido@X-Plus 5-Series", + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PETG Rapido @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PETG Rapido @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..a550919113 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PETG Rapido @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "4LKxL4N0ccD6vZ60", + "name": "QIDI PETG Rapido @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PETG Rapido@X-Plus 5-Series", + "pressure_advance": [ + "0.04" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PETG Rapido @Qidi X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PETG Rapido @Qidi X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..b56b55d1ff --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PETG Rapido @Qidi X-Plus 5 0.8 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "rsNDDt3IFUOMYV3O", + "name": "QIDI PETG Rapido @Qidi X-Plus 5 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PETG Rapido@X-Plus 5-Series", + "pressure_advance": [ + "0.04" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PETG Rapido @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PETG Rapido @X-Plus 5.json new file mode 100644 index 0000000000..fd506d8e74 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PETG Rapido @X-Plus 5.json @@ -0,0 +1,102 @@ +{ + "type": "filament", + "filament_id": "QD_4_1_41", + "name": "QIDI PETG Rapido@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "box_temperature_range_high": [ + "45" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "cool_plate_temp_initial_layer": [ + "60" + ], + "cool_plate_temp": [ + "60" + ], + "eng_plate_temp_initial_layer": [ + "80" + ], + "eng_plate_temp": [ + "80" + ], + "fan_cooling_layer_time": [ + "20" + ], + "fan_max_speed": [ + "40" + ], + "fan_min_speed": [ + "20" + ], + "filament_adhesiveness_category": [ + "300" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_type": [ + "PETG" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "hot_plate_temp": [ + "80" + ], + "impact_strength_z": [ + "10.6" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "275" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "nozzle_temperature": [ + "250" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "10%" + ], + "pressure_advance": [ + "0.054" + ], + "slow_down_layer_time": [ + "8" + ], + "temperature_vitrification": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "textured_plate_temp": [ + "80" + ], + "supertack_plate_temp_initial_layer": [ + "60" + ], + "supertack_plate_temp": [ + "60" + ], + "textured_cool_plate_temp_initial_layer": [ + "60" + ], + "textured_cool_plate_temp": [ + "60" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PETG Tough @Qidi X-Plus 5 0.2 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PETG Tough @Qidi X-Plus 5 0.2 nozzle.json new file mode 100644 index 0000000000..7708ebba0d --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PETG Tough @Qidi X-Plus 5 0.2 nozzle.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "setting_id": "k4kLQheLeWOw8bwp", + "name": "QIDI PETG Tough @Qidi X-Plus 5 0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PETG Tough@X-Plus 5-Series", + "filament_max_volumetric_speed": [ + "1" + ], + "pressure_advance": [ + "0.056" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PETG Tough @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PETG Tough @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..5c8c182a2b --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PETG Tough @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "setting_id": "WEyrSDtW2CJeLQmg", + "name": "QIDI PETG Tough @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PETG Tough@X-Plus 5-Series", + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PETG Tough @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PETG Tough @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..ad75cc5722 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PETG Tough @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "Morgo6GIzU3Voc0Q", + "name": "QIDI PETG Tough @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PETG Tough@X-Plus 5-Series", + "pressure_advance": [ + "0.04" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PETG Tough @Qidi X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PETG Tough @Qidi X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..37c0beddb9 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PETG Tough @Qidi X-Plus 5 0.8 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "DsoxBXKOjsENLEZf", + "name": "QIDI PETG Tough @Qidi X-Plus 5 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PETG Tough@X-Plus 5-Series", + "pressure_advance": [ + "0.04" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PETG Tough @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PETG Tough @X-Plus 5.json new file mode 100644 index 0000000000..3e9f0a1cdf --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PETG Tough @X-Plus 5.json @@ -0,0 +1,102 @@ +{ + "type": "filament", + "filament_id": "QD_4_1_40", + "name": "QIDI PETG Tough@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "box_temperature_range_high": [ + "45" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "cool_plate_temp_initial_layer": [ + "60" + ], + "cool_plate_temp": [ + "60" + ], + "eng_plate_temp_initial_layer": [ + "80" + ], + "eng_plate_temp": [ + "80" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "40" + ], + "fan_min_speed": [ + "10" + ], + "filament_adhesiveness_category": [ + "300" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "13" + ], + "filament_type": [ + "PETG" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "hot_plate_temp": [ + "80" + ], + "impact_strength_z": [ + "10.6" + ], + "nozzle_temperature_initial_layer": [ + "240" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "nozzle_temperature": [ + "250" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "10%" + ], + "pressure_advance": [ + "0.056" + ], + "slow_down_layer_time": [ + "8" + ], + "temperature_vitrification": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "textured_plate_temp": [ + "80" + ], + "supertack_plate_temp_initial_layer": [ + "60" + ], + "supertack_plate_temp": [ + "60" + ], + "textured_cool_plate_temp_initial_layer": [ + "60" + ], + "textured_cool_plate_temp": [ + "60" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PETG Translucent @Qidi X-Plus 5 0.2 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PETG Translucent @Qidi X-Plus 5 0.2 nozzle.json new file mode 100644 index 0000000000..03e72feba9 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PETG Translucent @Qidi X-Plus 5 0.2 nozzle.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "setting_id": "2UJnG0rXeU2nCIQL", + "name": "QIDI PETG Translucent @Qidi X-Plus 5 0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PETG Translucent@X-Plus 5-Series", + "filament_max_volumetric_speed": [ + "1" + ], + "pressure_advance": [ + "0.054" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PETG Translucent @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PETG Translucent @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..545bd42538 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PETG Translucent @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "setting_id": "S2DQ7jy5KqbiVNnV", + "name": "QIDI PETG Translucent @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PETG Translucent@X-Plus 5-Series", + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PETG Translucent @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PETG Translucent @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..963916f76e --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PETG Translucent @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "G33dlk73weGNFNwg", + "name": "QIDI PETG Translucent @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PETG Translucent@X-Plus 5-Series", + "pressure_advance": [ + "0.04" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PETG Translucent @Qidi X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PETG Translucent @Qidi X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..42bf38bde4 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PETG Translucent @Qidi X-Plus 5 0.8 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "zqI9F8vplNFfm2pa", + "name": "QIDI PETG Translucent @Qidi X-Plus 5 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PETG Translucent@X-Plus 5-Series", + "pressure_advance": [ + "0.04" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PETG Translucent @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PETG Translucent @X-Plus 5.json new file mode 100644 index 0000000000..62ea937028 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PETG Translucent @X-Plus 5.json @@ -0,0 +1,102 @@ +{ + "type": "filament", + "filament_id": "QD_4_1_45", + "name": "QIDI PETG Translucent@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "box_temperature_range_high": [ + "45" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "cool_plate_temp_initial_layer": [ + "60" + ], + "cool_plate_temp": [ + "60" + ], + "eng_plate_temp_initial_layer": [ + "80" + ], + "eng_plate_temp": [ + "80" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "30" + ], + "fan_min_speed": [ + "10" + ], + "filament_adhesiveness_category": [ + "300" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_type": [ + "PETG" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "hot_plate_temp": [ + "80" + ], + "impact_strength_z": [ + "10.6" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "nozzle_temperature": [ + "250" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "10%" + ], + "pressure_advance": [ + "0.054" + ], + "slow_down_layer_time": [ + "8" + ], + "temperature_vitrification": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "textured_plate_temp": [ + "80" + ], + "supertack_plate_temp_initial_layer": [ + "60" + ], + "supertack_plate_temp": [ + "60" + ], + "textured_cool_plate_temp_initial_layer": [ + "60" + ], + "textured_cool_plate_temp": [ + "60" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PETG-CF @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PETG-CF @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..04176974f5 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PETG-CF @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "setting_id": "cXbQtMQKmAFqwmqK", + "name": "QIDI PETG-CF @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PETG-CF@X-Plus 5-Series", + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PETG-CF @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PETG-CF @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..ce16a13acf --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PETG-CF @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "YNIWSLXvW6kSPRFG", + "name": "QIDI PETG-CF @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PETG-CF@X-Plus 5-Series", + "pressure_advance": [ + "0.04" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PETG-CF @Qidi X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PETG-CF @Qidi X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..e1ce42ee0a --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PETG-CF @Qidi X-Plus 5 0.8 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "O0lwfGXO3BdPCask", + "name": "QIDI PETG-CF @Qidi X-Plus 5 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PETG-CF@X-Plus 5-Series", + "pressure_advance": [ + "0.04" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PETG-CF @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PETG-CF @X-Plus 5.json new file mode 100644 index 0000000000..fcddc636a8 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PETG-CF @X-Plus 5.json @@ -0,0 +1,102 @@ +{ + "type": "filament", + "filament_id": "QD_4_1_42", + "name": "QIDI PETG-CF@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "box_temperature_range_high": [ + "45" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "cool_plate_temp_initial_layer": [ + "60" + ], + "cool_plate_temp": [ + "60" + ], + "eng_plate_temp_initial_layer": [ + "80" + ], + "eng_plate_temp": [ + "80" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "40" + ], + "fan_min_speed": [ + "5" + ], + "filament_adhesiveness_category": [ + "300" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "11.5" + ], + "filament_type": [ + "PETG-CF" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "hot_plate_temp": [ + "80" + ], + "impact_strength_z": [ + "10.6" + ], + "nozzle_temperature_initial_layer": [ + "255" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "nozzle_temperature": [ + "255" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "10%" + ], + "pressure_advance": [ + "0.048" + ], + "slow_down_layer_time": [ + "6" + ], + "temperature_vitrification": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "textured_plate_temp": [ + "80" + ], + "supertack_plate_temp_initial_layer": [ + "60" + ], + "supertack_plate_temp": [ + "60" + ], + "textured_cool_plate_temp_initial_layer": [ + "60" + ], + "textured_cool_plate_temp": [ + "60" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PETG-GF @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PETG-GF @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..46b3b1176a --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PETG-GF @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "setting_id": "zfI1VXQ7E0re78CC", + "name": "QIDI PETG-GF @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PETG-GF@X-Plus 5-Series", + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PETG-GF @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PETG-GF @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..4af6b7db02 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PETG-GF @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "zYEbjZPipK4BgHRO", + "name": "QIDI PETG-GF @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PETG-GF@X-Plus 5-Series", + "pressure_advance": [ + "0.04" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PETG-GF @Qidi X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PETG-GF @Qidi X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..bf819e04a9 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PETG-GF @Qidi X-Plus 5 0.8 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "5ef246YwGEK0eVCr", + "name": "QIDI PETG-GF @Qidi X-Plus 5 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PETG-GF@X-Plus 5-Series", + "pressure_advance": [ + "0.04" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PETG-GF @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PETG-GF @X-Plus 5.json new file mode 100644 index 0000000000..fa65907d3d --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PETG-GF @X-Plus 5.json @@ -0,0 +1,102 @@ +{ + "type": "filament", + "filament_id": "QD_4_1_43", + "name": "QIDI PETG-GF@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "box_temperature_range_high": [ + "45" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "cool_plate_temp_initial_layer": [ + "60" + ], + "cool_plate_temp": [ + "60" + ], + "eng_plate_temp_initial_layer": [ + "80" + ], + "eng_plate_temp": [ + "80" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "20" + ], + "filament_adhesiveness_category": [ + "300" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_type": [ + "PETG-GF" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "hot_plate_temp": [ + "80" + ], + "impact_strength_z": [ + "10.6" + ], + "nozzle_temperature_initial_layer": [ + "255" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "nozzle_temperature": [ + "255" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "10%" + ], + "pressure_advance": [ + "0.056" + ], + "slow_down_layer_time": [ + "8" + ], + "temperature_vitrification": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "textured_plate_temp": [ + "80" + ], + "supertack_plate_temp_initial_layer": [ + "60" + ], + "supertack_plate_temp": [ + "60" + ], + "textured_cool_plate_temp_initial_layer": [ + "60" + ], + "textured_cool_plate_temp": [ + "60" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PLA Basic @Qidi X-Plus 5 0.2 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PLA Basic @Qidi X-Plus 5 0.2 nozzle.json new file mode 100644 index 0000000000..4ec7f05eb9 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PLA Basic @Qidi X-Plus 5 0.2 nozzle.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "setting_id": "sfrpgBzPufKwgBCT", + "name": "QIDI PLA Basic @Qidi X-Plus 5 0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PLA Basic@X-Plus 5-Series", + "filament_max_volumetric_speed": [ + "2" + ], + "pressure_advance": [ + "0.034" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PLA Basic @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PLA Basic @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..20dd378bd2 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PLA Basic @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "6ZscfuWENwCkdSYE", + "name": "QIDI PLA Basic @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PLA Basic@X-Plus 5-Series", + "pressure_advance": [ + "0.038" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PLA Basic @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PLA Basic @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..574e748c98 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PLA Basic @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "pEry2GMq8UJEw7c7", + "name": "QIDI PLA Basic @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PLA Basic@X-Plus 5-Series", + "pressure_advance": [ + "0.016" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PLA Basic @Qidi X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PLA Basic @Qidi X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..527eb00054 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PLA Basic @Qidi X-Plus 5 0.8 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "MTq8xcAKCWABLI2k", + "name": "QIDI PLA Basic @Qidi X-Plus 5 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PLA Basic@X-Plus 5-Series", + "pressure_advance": [ + "0.008" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PLA Basic @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PLA Basic @X-Plus 5.json new file mode 100644 index 0000000000..0ee194dfb3 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PLA Basic @X-Plus 5.json @@ -0,0 +1,63 @@ +{ + "type": "filament", + "filament_id": "QD_4_1_7", + "name": "QIDI PLA Basic@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "cool_plate_temp_initial_layer": [ + "45" + ], + "cool_plate_temp": [ + "45" + ], + "filament_adhesiveness_category": [ + "100" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_type": [ + "PLA" + ], + "impact_strength_z": [ + "13.8" + ], + "additional_cooling_fan_speed": [ + "100" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_initial_layer": [ + "210" + ], + "nozzle_temperature": [ + "210" + ], + "overhang_fan_threshold": [ + "50%" + ], + "supertack_plate_temp_initial_layer": [ + "45" + ], + "supertack_plate_temp": [ + "45" + ], + "temperature_vitrification": [ + "45" + ], + "textured_cool_plate_temp_initial_layer": [ + "45" + ], + "textured_cool_plate_temp": [ + "45" + ], + "compatible_printers": [], + "close_additional_fan_first_x_layers": [ + "1" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PLA Matte Basic @Qidi X-Plus 5 0.2 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PLA Matte Basic @Qidi X-Plus 5 0.2 nozzle.json new file mode 100644 index 0000000000..0078600f36 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PLA Matte Basic @Qidi X-Plus 5 0.2 nozzle.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "setting_id": "54iiCCwizthHtT1v", + "name": "QIDI PLA Matte Basic @Qidi X-Plus 5 0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PLA Matte Basic@X-Plus 5-Series", + "filament_max_volumetric_speed": [ + "2" + ], + "pressure_advance": [ + "0.034" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PLA Matte Basic @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PLA Matte Basic @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..d67aa77dc4 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PLA Matte Basic @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "ojnl8sBbBL4QBL8q", + "name": "QIDI PLA Matte Basic @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PLA Matte Basic@X-Plus 5-Series", + "pressure_advance": [ + "0.038" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PLA Matte Basic @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PLA Matte Basic @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..6575396e45 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PLA Matte Basic @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "XtZarwF2HIipdHjN", + "name": "QIDI PLA Matte Basic @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PLA Matte Basic@X-Plus 5-Series", + "pressure_advance": [ + "0.016" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PLA Matte Basic @Qidi X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PLA Matte Basic @Qidi X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..8c4584a70b --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PLA Matte Basic @Qidi X-Plus 5 0.8 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "TRkCNQeoDvLBaJMt", + "name": "QIDI PLA Matte Basic @Qidi X-Plus 5 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PLA Matte Basic@X-Plus 5-Series", + "pressure_advance": [ + "0.008" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PLA Matte Basic @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PLA Matte Basic @X-Plus 5.json new file mode 100644 index 0000000000..7796bf1faa --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PLA Matte Basic @X-Plus 5.json @@ -0,0 +1,63 @@ +{ + "type": "filament", + "filament_id": "QD_4_1_8", + "name": "QIDI PLA Matte Basic@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "cool_plate_temp_initial_layer": [ + "45" + ], + "cool_plate_temp": [ + "45" + ], + "filament_adhesiveness_category": [ + "100" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_type": [ + "PLA" + ], + "impact_strength_z": [ + "13.8" + ], + "additional_cooling_fan_speed": [ + "100" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_initial_layer": [ + "210" + ], + "nozzle_temperature": [ + "210" + ], + "overhang_fan_threshold": [ + "50%" + ], + "supertack_plate_temp_initial_layer": [ + "45" + ], + "supertack_plate_temp": [ + "45" + ], + "temperature_vitrification": [ + "45" + ], + "textured_cool_plate_temp_initial_layer": [ + "45" + ], + "textured_cool_plate_temp": [ + "45" + ], + "compatible_printers": [], + "close_additional_fan_first_x_layers": [ + "1" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido @Qidi X-Plus 5 0.2 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido @Qidi X-Plus 5 0.2 nozzle.json new file mode 100644 index 0000000000..3ea3dac12f --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido @Qidi X-Plus 5 0.2 nozzle.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "setting_id": "S56TixVPmXr4uFut", + "name": "QIDI PLA Rapido @Qidi X-Plus 5 0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PLA Rapido@X-Plus 5-Series", + "filament_max_volumetric_speed": [ + "2" + ], + "pressure_advance": [ + "0.034" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..178fcfd08d --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "KATHrxoL84i7MiVJ", + "name": "QIDI PLA Rapido @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PLA Rapido@X-Plus 5-Series", + "pressure_advance": [ + "0.038" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..2ad1d18a60 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "YE6WmGAG5Ua6bbap", + "name": "QIDI PLA Rapido @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PLA Rapido@X-Plus 5-Series", + "pressure_advance": [ + "0.016" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido @Qidi X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido @Qidi X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..ffc9edfb78 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido @Qidi X-Plus 5 0.8 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "KPqnbBv0Np93O02u", + "name": "QIDI PLA Rapido @Qidi X-Plus 5 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PLA Rapido@X-Plus 5-Series", + "pressure_advance": [ + "0.008" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido @X-Plus 5.json new file mode 100644 index 0000000000..1aa1803258 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido @X-Plus 5.json @@ -0,0 +1,60 @@ +{ + "type": "filament", + "filament_id": "QD_4_1_1", + "name": "QIDI PLA Rapido@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "cool_plate_temp_initial_layer": [ + "45" + ], + "cool_plate_temp": [ + "45" + ], + "filament_adhesiveness_category": [ + "100" + ], + "filament_type": [ + "PLA" + ], + "impact_strength_z": [ + "13.8" + ], + "additional_cooling_fan_speed": [ + "100" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_initial_layer": [ + "210" + ], + "nozzle_temperature": [ + "210" + ], + "overhang_fan_threshold": [ + "50%" + ], + "supertack_plate_temp_initial_layer": [ + "45" + ], + "supertack_plate_temp": [ + "45" + ], + "temperature_vitrification": [ + "45" + ], + "textured_cool_plate_temp_initial_layer": [ + "45" + ], + "textured_cool_plate_temp": [ + "45" + ], + "compatible_printers": [], + "close_additional_fan_first_x_layers": [ + "1" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Matte @Qidi X-Plus 5 0.2 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Matte @Qidi X-Plus 5 0.2 nozzle.json new file mode 100644 index 0000000000..e469cf1fd1 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Matte @Qidi X-Plus 5 0.2 nozzle.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "setting_id": "jlUpp5oaYSWwaNn1", + "name": "QIDI PLA Rapido Matte @Qidi X-Plus 5 0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PLA Rapido Matte@X-Plus 5-Series", + "filament_max_volumetric_speed": [ + "2" + ], + "pressure_advance": [ + "0.034" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Matte @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Matte @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..3f74323770 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Matte @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "E0gYAZUksoFlebuH", + "name": "QIDI PLA Rapido Matte @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PLA Rapido Matte@X-Plus 5-Series", + "pressure_advance": [ + "0.034" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Matte @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Matte @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..f45479c37f --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Matte @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "juxpaK6EosaHj2ok", + "name": "QIDI PLA Rapido Matte @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PLA Rapido Matte@X-Plus 5-Series", + "pressure_advance": [ + "0.016" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Matte @Qidi X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Matte @Qidi X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..7e4ec99248 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Matte @Qidi X-Plus 5 0.8 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "OlgI3WQA3QLhPsdw", + "name": "QIDI PLA Rapido Matte @Qidi X-Plus 5 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PLA Rapido Matte@X-Plus 5-Series", + "pressure_advance": [ + "0.008" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Matte @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Matte @X-Plus 5.json new file mode 100644 index 0000000000..d8cbd06ea1 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Matte @X-Plus 5.json @@ -0,0 +1,57 @@ +{ + "type": "filament", + "filament_id": "QD_4_1_2", + "name": "QIDI PLA Rapido Matte@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "additional_cooling_fan_speed": [ + "100" + ], + "filament_adhesiveness_category": [ + "100" + ], + "filament_density": [ + "1.42" + ], + "filament_type": [ + "PLA" + ], + "impact_strength_z": [ + "6.6" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_initial_layer": [ + "210" + ], + "nozzle_temperature": [ + "210" + ], + "overhang_fan_threshold": [ + "50%" + ], + "supertack_plate_temp_initial_layer": [ + "45" + ], + "supertack_plate_temp": [ + "45" + ], + "temperature_vitrification": [ + "45" + ], + "textured_cool_plate_temp_initial_layer": [ + "45" + ], + "textured_cool_plate_temp": [ + "45" + ], + "compatible_printers": [], + "close_additional_fan_first_x_layers": [ + "1" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Metal @Qidi X-Plus 5 0.2 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Metal @Qidi X-Plus 5 0.2 nozzle.json new file mode 100644 index 0000000000..7506c80541 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Metal @Qidi X-Plus 5 0.2 nozzle.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "setting_id": "t9qUv1IlI5VJ8LoV", + "name": "QIDI PLA Rapido Metal @Qidi X-Plus 5 0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PLA Rapido Metal@X-Plus 5-Series", + "filament_max_volumetric_speed": [ + "2" + ], + "pressure_advance": [ + "0.038" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Metal @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Metal @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..e2be1216f3 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Metal @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "ARcrUoVsGSM0RB1a", + "name": "QIDI PLA Rapido Metal @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PLA Rapido Metal@X-Plus 5-Series", + "pressure_advance": [ + "0.038" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Metal @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Metal @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..2b3fae0a1e --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Metal @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "A23HjUFAyt4GeHAW", + "name": "QIDI PLA Rapido Metal @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PLA Rapido Metal@X-Plus 5-Series", + "pressure_advance": [ + "0.020" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Metal @Qidi X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Metal @Qidi X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..e6868b6772 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Metal @Qidi X-Plus 5 0.8 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "nMpSP1jmsQIUjGPb", + "name": "QIDI PLA Rapido Metal @Qidi X-Plus 5 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PLA Rapido Metal@X-Plus 5-Series", + "pressure_advance": [ + "0.01" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Metal @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Metal @X-Plus 5.json new file mode 100644 index 0000000000..404b7cd1e8 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Metal @X-Plus 5.json @@ -0,0 +1,57 @@ +{ + "type": "filament", + "filament_id": "QD_4_1_3", + "name": "QIDI PLA Rapido Metal@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "filament_type": [ + "PLA" + ], + "additional_cooling_fan_speed": [ + "100" + ], + "filament_adhesiveness_category": [ + "100" + ], + "filament_density": [ + "1.20" + ], + "impact_strength_z": [ + "16.8" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_initial_layer": [ + "210" + ], + "nozzle_temperature": [ + "210" + ], + "overhang_fan_threshold": [ + "50%" + ], + "supertack_plate_temp_initial_layer": [ + "45" + ], + "supertack_plate_temp": [ + "45" + ], + "temperature_vitrification": [ + "45" + ], + "textured_cool_plate_temp_initial_layer": [ + "45" + ], + "textured_cool_plate_temp": [ + "45" + ], + "compatible_printers": [], + "close_additional_fan_first_x_layers": [ + "1" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PLA Silk @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PLA Silk @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..dfd789a216 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PLA Silk @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "IUU7TApRivYtrrt0", + "name": "QIDI PLA Silk @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PLA Silk@X-Plus 5-Series", + "pressure_advance": [ + "0.034" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PLA Silk @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PLA Silk @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..286c1d3a36 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PLA Silk @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "lx9Dqv6EMmZ0C2SD", + "name": "QIDI PLA Silk @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PLA Silk@X-Plus 5-Series", + "pressure_advance": [ + "0.021" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PLA Silk @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PLA Silk @X-Plus 5.json new file mode 100644 index 0000000000..57c0c3e1dc --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PLA Silk @X-Plus 5.json @@ -0,0 +1,84 @@ +{ + "type": "filament", + "filament_id": "QD_4_1_4", + "name": "QIDI PLA Silk@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "additional_cooling_fan_speed": [ + "100" + ], + "filament_adhesiveness_category": [ + "100" + ], + "filament_density": [ + "1.24" + ], + "filament_max_volumetric_speed": [ + "7.5" + ], + "filament_type": [ + "PLA" + ], + "impact_strength_z": [ + "4.6" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature": [ + "220" + ], + "overhang_fan_threshold": [ + "50%" + ], + "supertack_plate_temp_initial_layer": [ + "45" + ], + "supertack_plate_temp": [ + "45" + ], + "cool_plate_temp_initial_layer": [ + "45" + ], + "cool_plate_temp": [ + "45" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "eng_plate_temp": [ + "55" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "hot_plate_temp": [ + "55" + ], + "textured_plate_temp_initial_layer": [ + "55" + ], + "textured_plate_temp": [ + "55" + ], + "temperature_vitrification": [ + "45" + ], + "textured_cool_plate_temp_initial_layer": [ + "45" + ], + "textured_cool_plate_temp": [ + "45" + ], + "compatible_printers": [], + "close_additional_fan_first_x_layers": [ + "1" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PLA-CF @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PLA-CF @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..c341f7c71d --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PLA-CF @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "5PocTwpY0SnNzcdc", + "name": "QIDI PLA-CF @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PLA-CF@X-Plus 5-Series", + "pressure_advance": [ + "0.034" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PLA-CF @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PLA-CF @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..5c08e7f67f --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PLA-CF @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "5NETSLSQlaoR2MYD", + "name": "QIDI PLA-CF @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PLA-CF@X-Plus 5-Series", + "pressure_advance": [ + "0.012" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PLA-CF @Qidi X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PLA-CF @Qidi X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..7435222e8b --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PLA-CF @Qidi X-Plus 5 0.8 nozzle.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "setting_id": "AUO7iSMEa6GDvM7Y", + "name": "QIDI PLA-CF @Qidi X-Plus 5 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PLA-CF@X-Plus 5-Series", + "filament_max_volumetric_speed": [ + "18" + ], + "pressure_advance": [ + "0.008" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PLA-CF @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PLA-CF @X-Plus 5.json new file mode 100644 index 0000000000..1c4d8c99e3 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PLA-CF @X-Plus 5.json @@ -0,0 +1,75 @@ +{ + "type": "filament", + "filament_id": "QD_4_1_5", + "name": "QIDI PLA-CF@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "additional_cooling_fan_speed": [ + "0" + ], + "cool_plate_temp_initial_layer": [ + "45" + ], + "cool_plate_temp": [ + "45" + ], + "filament_adhesiveness_category": [ + "100" + ], + "filament_density": [ + "1.25" + ], + "filament_flow_ratio": [ + "0.93" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "filament_type": [ + "PLA-CF" + ], + "impact_strength_z": [ + "7.8" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "250" + ], + "nozzle_temperature_range_low": [ + "210" + ], + "nozzle_temperature": [ + "220" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "pressure_advance": [ + "0.042" + ], + "supertack_plate_temp_initial_layer": [ + "45" + ], + "supertack_plate_temp": [ + "45" + ], + "temperature_vitrification": [ + "45" + ], + "textured_cool_plate_temp_initial_layer": [ + "45" + ], + "textured_cool_plate_temp": [ + "45" + ], + "compatible_printers": [], + "close_additional_fan_first_x_layers": [ + "1" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PPS-CF @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PPS-CF @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..2c2d573713 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PPS-CF @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "FwWut7sJIMbe87XC", + "name": "QIDI PPS-CF @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PPS-CF@X-Plus 5-Series", + "pressure_advance": [ + "0.03" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PPS-CF @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PPS-CF @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..9cc0556490 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PPS-CF @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "gDIuKCdgoP59Xc0G", + "name": "QIDI PPS-CF @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PPS-CF@X-Plus 5-Series", + "pressure_advance": [ + "0.021" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PPS-CF @Qidi X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PPS-CF @Qidi X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..573f8e17f8 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PPS-CF @Qidi X-Plus 5 0.8 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "D29sGCB9OI4cTn0S", + "name": "QIDI PPS-CF @Qidi X-Plus 5 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PPS-CF@X-Plus 5-Series", + "pressure_advance": [ + "0.008" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PPS-CF @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PPS-CF @X-Plus 5.json new file mode 100644 index 0000000000..c6be7046f6 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PPS-CF @X-Plus 5.json @@ -0,0 +1,117 @@ +{ + "type": "filament", + "filament_id": "QD_4_1_44", + "name": "QIDI PPS-CF@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "box_temperature_range_high": [ + "65" + ], + "box_temperature_range_low": [ + "0" + ], + "box_temperature": [ + "65" + ], + "chamber_temperatures": [ + "60" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "cool_plate_temp_initial_layer": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "eng_plate_temp_initial_layer": [ + "110" + ], + "eng_plate_temp": [ + "110" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "fan_cooling_layer_time": [ + "5" + ], + "fan_max_speed": [ + "30" + ], + "fan_min_speed": [ + "0" + ], + "filament_adhesiveness_category": [ + "801" + ], + "filament_density": [ + "1.3" + ], + "filament_flow_ratio": [ + "0.97" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "filament_type": [ + "PPS-CF" + ], + "hot_plate_temp_initial_layer": [ + "110" + ], + "hot_plate_temp": [ + "110" + ], + "impact_strength_z": [ + "2.8" + ], + "nozzle_temperature_initial_layer": [ + "320" + ], + "nozzle_temperature_range_high": [ + "350" + ], + "nozzle_temperature_range_low": [ + "300" + ], + "nozzle_temperature": [ + "320" + ], + "overhang_fan_speed": [ + "40" + ], + "overhang_fan_threshold": [ + "0%" + ], + "pressure_advance": [ + "0.032" + ], + "slow_down_layer_time": [ + "2" + ], + "supertack_plate_temp_initial_layer": [ + "80" + ], + "supertack_plate_temp": [ + "80" + ], + "temperature_vitrification": [ + "180" + ], + "textured_plate_temp_initial_layer": [ + "110" + ], + "textured_plate_temp": [ + "110" + ], + "textured_cool_plate_temp_initial_layer": [ + "80" + ], + "textured_cool_plate_temp": [ + "80" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PPS-GF @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PPS-GF @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..de96ad5f7a --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PPS-GF @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "5C6dIIgQOt4NiTu0", + "name": "QIDI PPS-GF @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PPS-GF@X-Plus 5-Series", + "pressure_advance": [ + "0.03" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PPS-GF @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PPS-GF @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..470839ef59 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PPS-GF @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "aSd6UW4Mrlxpa15E", + "name": "QIDI PPS-GF @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PPS-GF@X-Plus 5-Series", + "pressure_advance": [ + "0.021" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PPS-GF @Qidi X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI PPS-GF @Qidi X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..6cc49dbd68 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PPS-GF @Qidi X-Plus 5 0.8 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "7JC2zAUgtGu5zSGo", + "name": "QIDI PPS-GF @Qidi X-Plus 5 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI PPS-GF@X-Plus 5-Series", + "pressure_advance": [ + "0.008" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI PPS-GF @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PPS-GF @X-Plus 5.json new file mode 100644 index 0000000000..757d4dbf3d --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI PPS-GF @X-Plus 5.json @@ -0,0 +1,117 @@ +{ + "type": "filament", + "filament_id": "QD_4_1_46", + "name": "QIDI PPS-GF@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "box_temperature_range_high": [ + "65" + ], + "box_temperature_range_low": [ + "0" + ], + "box_temperature": [ + "65" + ], + "chamber_temperatures": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "cool_plate_temp_initial_layer": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "eng_plate_temp_initial_layer": [ + "90" + ], + "eng_plate_temp": [ + "90" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "90" + ], + "fan_min_speed": [ + "10" + ], + "filament_adhesiveness_category": [ + "801" + ], + "filament_density": [ + "1.3" + ], + "filament_flow_ratio": [ + "0.97" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_type": [ + "PPS-GF" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "hot_plate_temp": [ + "90" + ], + "impact_strength_z": [ + "2.8" + ], + "nozzle_temperature_initial_layer": [ + "320" + ], + "nozzle_temperature_range_high": [ + "350" + ], + "nozzle_temperature_range_low": [ + "300" + ], + "nozzle_temperature": [ + "320" + ], + "overhang_fan_speed": [ + "50" + ], + "overhang_fan_threshold": [ + "0%" + ], + "pressure_advance": [ + "0.03" + ], + "slow_down_layer_time": [ + "6" + ], + "supertack_plate_temp_initial_layer": [ + "80" + ], + "supertack_plate_temp": [ + "80" + ], + "temperature_vitrification": [ + "180" + ], + "textured_plate_temp_initial_layer": [ + "90" + ], + "textured_plate_temp": [ + "90" + ], + "textured_cool_plate_temp_initial_layer": [ + "80" + ], + "textured_cool_plate_temp": [ + "80" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI Support For PAHT @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI Support For PAHT @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..5bd3b85fb9 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI Support For PAHT @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "setting_id": "oMvDD9rKJGcezwpq", + "name": "QIDI Support For PAHT @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI Support For PAHT@X-Plus 5-Series", + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI Support For PAHT @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI Support For PAHT @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..37f474533e --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI Support For PAHT @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "setting_id": "6BhbbuUP6HCVScDd", + "name": "QIDI Support For PAHT @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI Support For PAHT@X-Plus 5-Series", + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI Support For PAHT @Qidi X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI Support For PAHT @Qidi X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..f28e56c5b1 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI Support For PAHT @Qidi X-Plus 5 0.8 nozzle.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "setting_id": "kA4fvvj6xZEhArXv", + "name": "QIDI Support For PAHT @Qidi X-Plus 5 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI Support For PAHT@X-Plus 5-Series", + "compatible_printers": [ + "Qidi X-Plus 5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI Support For PAHT @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI Support For PAHT @X-Plus 5.json new file mode 100644 index 0000000000..ed1222daa9 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI Support For PAHT @X-Plus 5.json @@ -0,0 +1,114 @@ +{ + "type": "filament", + "filament_id": "QD_4_1_32", + "name": "QIDI Support For PAHT@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "box_temperature_range_high": [ + "65" + ], + "box_temperature_range_low": [ + "0" + ], + "box_temperature": [ + "60" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "cool_plate_temp_initial_layer": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "eng_plate_temp_initial_layer": [ + "80" + ], + "eng_plate_temp": [ + "80" + ], + "fan_cooling_layer_time": [ + "10" + ], + "fan_max_speed": [ + "60" + ], + "fan_min_speed": [ + "0" + ], + "filament_adhesiveness_category": [ + "800" + ], + "filament_density": [ + "1.26" + ], + "filament_flow_ratio": [ + "0.94" + ], + "filament_is_support": [ + "1" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_type": [ + "PAHT-S" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "hot_plate_temp": [ + "80" + ], + "impact_strength_z": [ + "4.5" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "nozzle_temperature_range_low": [ + "260" + ], + "nozzle_temperature": [ + "280" + ], + "overhang_fan_speed": [ + "30" + ], + "overhang_fan_threshold": [ + "95%" + ], + "pressure_advance": [ + "0.02" + ], + "slow_down_layer_time": [ + "6" + ], + "temperature_vitrification": [ + "218" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "textured_plate_temp": [ + "80" + ], + "supertack_plate_temp_initial_layer": [ + "80" + ], + "supertack_plate_temp": [ + "80" + ], + "textured_cool_plate_temp_initial_layer": [ + "80" + ], + "textured_cool_plate_temp": [ + "80" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI Support For PET-PA @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI Support For PET-PA @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..615d9af041 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI Support For PET-PA @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "setting_id": "0xy82KbAJD5uBara", + "name": "QIDI Support For PET/PA @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI Support For PET/PA@X-Plus 5-Series", + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI Support For PET-PA @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI Support For PET-PA @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..1e0c81424c --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI Support For PET-PA @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "setting_id": "2oCGYFdC4dfpNUw4", + "name": "QIDI Support For PET/PA @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI Support For PET/PA@X-Plus 5-Series", + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI Support For PET-PA @Qidi X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI Support For PET-PA @Qidi X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..2d47d18707 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI Support For PET-PA @Qidi X-Plus 5 0.8 nozzle.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "setting_id": "hFYahJkYIgmjcuPb", + "name": "QIDI Support For PET/PA @Qidi X-Plus 5 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI Support For PET/PA@X-Plus 5-Series", + "compatible_printers": [ + "Qidi X-Plus 5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI Support For PET-PA @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI Support For PET-PA @X-Plus 5.json new file mode 100644 index 0000000000..346c3cc3eb --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI Support For PET-PA @X-Plus 5.json @@ -0,0 +1,114 @@ +{ + "type": "filament", + "filament_id": "QD_4_1_33", + "name": "QIDI Support For PET/PA@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "box_temperature_range_high": [ + "65" + ], + "box_temperature_range_low": [ + "0" + ], + "box_temperature": [ + "55" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "cool_plate_temp_initial_layer": [ + "70" + ], + "cool_plate_temp": [ + "70" + ], + "eng_plate_temp_initial_layer": [ + "80" + ], + "eng_plate_temp": [ + "80" + ], + "fan_cooling_layer_time": [ + "10" + ], + "fan_max_speed": [ + "60" + ], + "fan_min_speed": [ + "0" + ], + "filament_adhesiveness_category": [ + "800" + ], + "filament_density": [ + "1.16" + ], + "filament_flow_ratio": [ + "0.91" + ], + "filament_is_support": [ + "1" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_type": [ + "PA-S" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "hot_plate_temp": [ + "80" + ], + "impact_strength_z": [ + "4.5" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "nozzle_temperature_range_low": [ + "260" + ], + "nozzle_temperature": [ + "280" + ], + "overhang_fan_speed": [ + "30" + ], + "overhang_fan_threshold": [ + "95%" + ], + "pressure_advance": [ + "0.02" + ], + "slow_down_layer_time": [ + "6" + ], + "temperature_vitrification": [ + "168" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "textured_plate_temp": [ + "80" + ], + "supertack_plate_temp_initial_layer": [ + "70" + ], + "supertack_plate_temp": [ + "70" + ], + "textured_cool_plate_temp_initial_layer": [ + "70" + ], + "textured_cool_plate_temp": [ + "70" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI TPU 95A-HF @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI TPU 95A-HF @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..1f2db1eb25 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI TPU 95A-HF @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "setting_id": "ygLg4KVojo7YoG5K", + "name": "QIDI TPU 95A-HF @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI TPU 95A-HF@X-Plus 5-Series", + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI TPU 95A-HF @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI TPU 95A-HF @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..94e992d0e9 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI TPU 95A-HF @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "setting_id": "K98nPXclatc5HnIx", + "name": "QIDI TPU 95A-HF @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI TPU 95A-HF@X-Plus 5-Series", + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI TPU 95A-HF @Qidi X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI TPU 95A-HF @Qidi X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..e05faeed65 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI TPU 95A-HF @Qidi X-Plus 5 0.8 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "pTxBir6QC9KhWrLU", + "name": "QIDI TPU 95A-HF @Qidi X-Plus 5 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI TPU 95A-HF@X-Plus 5-Series", + "nozzle_temperature": [ + "220" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI TPU 95A-HF @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI TPU 95A-HF @X-Plus 5.json new file mode 100644 index 0000000000..4721ab171c --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI TPU 95A-HF @X-Plus 5.json @@ -0,0 +1,84 @@ +{ + "type": "filament", + "filament_id": "QD_4_1_50", + "name": "QIDI TPU 95A-HF@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "cool_plate_temp_initial_layer": [ + "30" + ], + "cool_plate_temp": [ + "30" + ], + "eng_plate_temp_initial_layer": [ + "35" + ], + "eng_plate_temp": [ + "35" + ], + "filament_adhesiveness_category": [ + "600" + ], + "filament_density": [ + "1.15" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "4" + ], + "filament_type": [ + "TPU" + ], + "filament_vendor": [ + "QIDI" + ], + "hot_plate_temp_initial_layer": [ + "35" + ], + "hot_plate_temp": [ + "35" + ], + "impact_strength_z": [ + "88.7" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature_range_high": [ + "250" + ], + "nozzle_temperature_range_low": [ + "200" + ], + "nozzle_temperature": [ + "230" + ], + "pressure_advance": [ + "0.1" + ], + "supertack_plate_temp_initial_layer": [ + "30" + ], + "supertack_plate_temp": [ + "30" + ], + "temperature_vitrification": [ + "30" + ], + "textured_plate_temp_initial_layer": [ + "35" + ], + "textured_plate_temp": [ + "35" + ], + "textured_cool_plate_temp_initial_layer": [ + "30" + ], + "textured_cool_plate_temp": [ + "30" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI TPU-Aero @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI TPU-Aero @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..592ad5a51c --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI TPU-Aero @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "setting_id": "KIIwoI87n5MkT83b", + "name": "QIDI TPU-Aero @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI TPU-Aero@X-Plus 5-Series", + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI TPU-Aero @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI TPU-Aero @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..f18b67f608 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI TPU-Aero @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "setting_id": "eUNygrv7weqgX7e0", + "name": "QIDI TPU-Aero @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI TPU-Aero@X-Plus 5-Series", + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI TPU-Aero @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI TPU-Aero @X-Plus 5.json new file mode 100644 index 0000000000..b6eee90916 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI TPU-Aero @X-Plus 5.json @@ -0,0 +1,93 @@ +{ + "type": "filament", + "filament_id": "QD_4_1_49", + "name": "QIDI TPU-Aero@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "cool_plate_temp_initial_layer": [ + "30" + ], + "cool_plate_temp": [ + "30" + ], + "eng_plate_temp_initial_layer": [ + "35" + ], + "eng_plate_temp": [ + "35" + ], + "fan_cooling_layer_time": [ + "100" + ], + "filament_adhesiveness_category": [ + "600" + ], + "filament_density": [ + "1.15" + ], + "filament_flow_ratio": [ + "0.5" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "filament_retraction_length": [ + "0" + ], + "filament_type": [ + "TPU-AERO" + ], + "filament_vendor": [ + "QIDI" + ], + "hot_plate_temp_initial_layer": [ + "35" + ], + "hot_plate_temp": [ + "35" + ], + "impact_strength_z": [ + "88.7" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "230" + ], + "nozzle_temperature": [ + "250" + ], + "pressure_advance": [ + "0.03" + ], + "slow_down_layer_time": [ + "14" + ], + "supertack_plate_temp_initial_layer": [ + "30" + ], + "supertack_plate_temp": [ + "30" + ], + "temperature_vitrification": [ + "30" + ], + "textured_plate_temp_initial_layer": [ + "35" + ], + "textured_plate_temp": [ + "35" + ], + "textured_cool_plate_temp_initial_layer": [ + "30" + ], + "textured_cool_plate_temp": [ + "30" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI TPU-GF @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI TPU-GF @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..8e88b23151 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI TPU-GF @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "setting_id": "AtsowCGhOIw4GeRJ", + "name": "QIDI TPU-GF @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI TPU-GF@X-Plus 5-Series", + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI TPU-GF @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI TPU-GF @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..5a7687b51c --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI TPU-GF @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "setting_id": "wqk4I1KaRyLEm12W", + "name": "QIDI TPU-GF @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI TPU-GF@X-Plus 5-Series", + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI TPU-GF @Qidi X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI TPU-GF @Qidi X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..2fe800d6ab --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI TPU-GF @Qidi X-Plus 5 0.8 nozzle.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "setting_id": "o2JjRsoi03ST3Wh2", + "name": "QIDI TPU-GF @Qidi X-Plus 5 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI TPU-GF@X-Plus 5-Series", + "compatible_printers": [ + "Qidi X-Plus 5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI TPU-GF @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI TPU-GF @X-Plus 5.json new file mode 100644 index 0000000000..b3f2f71866 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI TPU-GF @X-Plus 5.json @@ -0,0 +1,84 @@ +{ + "type": "filament", + "filament_id": "QD_4_1_15", + "name": "QIDI TPU-GF@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "cool_plate_temp_initial_layer": [ + "30" + ], + "cool_plate_temp": [ + "30" + ], + "eng_plate_temp_initial_layer": [ + "35" + ], + "eng_plate_temp": [ + "35" + ], + "filament_adhesiveness_category": [ + "600" + ], + "filament_density": [ + "1.15" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "filament_type": [ + "TPU-GF" + ], + "filament_vendor": [ + "QIDI" + ], + "hot_plate_temp_initial_layer": [ + "35" + ], + "hot_plate_temp": [ + "35" + ], + "impact_strength_z": [ + "88.7" + ], + "nozzle_temperature_initial_layer": [ + "240" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "nozzle_temperature": [ + "240" + ], + "pressure_advance": [ + "0.1" + ], + "supertack_plate_temp_initial_layer": [ + "30" + ], + "supertack_plate_temp": [ + "30" + ], + "temperature_vitrification": [ + "30" + ], + "textured_plate_temp_initial_layer": [ + "35" + ], + "textured_plate_temp": [ + "35" + ], + "textured_cool_plate_temp_initial_layer": [ + "30" + ], + "textured_cool_plate_temp": [ + "30" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI UltraPA @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI UltraPA @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..ae7b99531e --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI UltraPA @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "setting_id": "RzZGtHGu2xKASwwu", + "name": "QIDI UltraPA @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI UltraPA@X-Plus 5-Series", + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI UltraPA @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI UltraPA @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..e9bfbe4362 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI UltraPA @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "setting_id": "0seF33ojhYF6lNM4", + "name": "QIDI UltraPA @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI UltraPA@X-Plus 5-Series", + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI UltraPA @Qidi X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI UltraPA @Qidi X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..6f03ff7b5a --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI UltraPA @Qidi X-Plus 5 0.8 nozzle.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "setting_id": "vfr7Lv94OHi4KOCw", + "name": "QIDI UltraPA @Qidi X-Plus 5 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI UltraPA@X-Plus 5-Series", + "compatible_printers": [ + "Qidi X-Plus 5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI UltraPA @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI UltraPA @X-Plus 5.json new file mode 100644 index 0000000000..9d86c06f95 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI UltraPA @X-Plus 5.json @@ -0,0 +1,99 @@ +{ + "type": "filament", + "filament_id": "QD_4_1_24", + "name": "QIDI UltraPA@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "box_temperature_range_high": [ + "55" + ], + "box_temperature_range_low": [ + "0" + ], + "box_temperature": [ + "55" + ], + "cool_plate_temp_initial_layer": [ + "60" + ], + "cool_plate_temp": [ + "60" + ], + "eng_plate_temp_initial_layer": [ + "80" + ], + "eng_plate_temp": [ + "80" + ], + "fan_max_speed": [ + "40" + ], + "fan_min_speed": [ + "20" + ], + "filament_adhesiveness_category": [ + "400" + ], + "filament_density": [ + "1.21" + ], + "filament_flow_ratio": [ + "0.96" + ], + "filament_max_volumetric_speed": [ + "4" + ], + "filament_type": [ + "UltraPA" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "hot_plate_temp": [ + "80" + ], + "impact_strength_z": [ + "15.5" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature_range_high": [ + "290" + ], + "nozzle_temperature_range_low": [ + "250" + ], + "nozzle_temperature": [ + "280" + ], + "pressure_advance": [ + "0.03" + ], + "slow_down_layer_time": [ + "15" + ], + "supertack_plate_temp_initial_layer": [ + "60" + ], + "supertack_plate_temp": [ + "60" + ], + "temperature_vitrification": [ + "170" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "textured_plate_temp": [ + "80" + ], + "textured_cool_plate_temp_initial_layer": [ + "60" + ], + "textured_cool_plate_temp": [ + "60" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI UltraPA-CF25 @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI UltraPA-CF25 @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..c88635f447 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI UltraPA-CF25 @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "setting_id": "8h1ITuLzHYf0J4NA", + "name": "QIDI UltraPA-CF25 @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI UltraPA-CF25@X-Plus 5-Series", + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI UltraPA-CF25 @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI UltraPA-CF25 @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..66ac797bb8 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI UltraPA-CF25 @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "WK63qDyLkG4fznPW", + "name": "QIDI UltraPA-CF25 @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI UltraPA-CF25@X-Plus 5-Series", + "pressure_advance": [ + "0.022" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI UltraPA-CF25 @Qidi X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI UltraPA-CF25 @Qidi X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..282fed912a --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI UltraPA-CF25 @Qidi X-Plus 5 0.8 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "53sirpAAiDOx0c8P", + "name": "QIDI UltraPA-CF25 @Qidi X-Plus 5 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI UltraPA-CF25@X-Plus 5-Series", + "pressure_advance": [ + "0.02" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI UltraPA-CF25 @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI UltraPA-CF25 @X-Plus 5.json new file mode 100644 index 0000000000..73379541b3 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI UltraPA-CF25 @X-Plus 5.json @@ -0,0 +1,114 @@ +{ + "type": "filament", + "filament_id": "QD_4_1_26", + "name": "QIDI UltraPA-CF25@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "box_temperature_range_high": [ + "65" + ], + "box_temperature_range_low": [ + "0" + ], + "box_temperature": [ + "60" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "cool_plate_temp_initial_layer": [ + "60" + ], + "cool_plate_temp": [ + "60" + ], + "eng_plate_temp_initial_layer": [ + "80" + ], + "eng_plate_temp": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "fan_cooling_layer_time": [ + "5" + ], + "fan_max_speed": [ + "40" + ], + "fan_min_speed": [ + "20" + ], + "filament_adhesiveness_category": [ + "400" + ], + "filament_density": [ + "1.23" + ], + "filament_flow_ratio": [ + "0.94" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_type": [ + "UltraPA-CF25" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "hot_plate_temp": [ + "80" + ], + "impact_strength_z": [ + "15.5" + ], + "nozzle_temperature_initial_layer": [ + "300" + ], + "nozzle_temperature_range_high": [ + "320" + ], + "nozzle_temperature_range_low": [ + "300" + ], + "nozzle_temperature": [ + "300" + ], + "overhang_fan_speed": [ + "40" + ], + "overhang_fan_threshold": [ + "0%" + ], + "pressure_advance": [ + "0.026" + ], + "slow_down_layer_time": [ + "2" + ], + "supertack_plate_temp_initial_layer": [ + "60" + ], + "supertack_plate_temp": [ + "60" + ], + "temperature_vitrification": [ + "230" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "textured_plate_temp": [ + "80" + ], + "textured_cool_plate_temp_initial_layer": [ + "60" + ], + "textured_cool_plate_temp": [ + "60" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI WOOD Rapido @Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI WOOD Rapido @Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..2232226b78 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI WOOD Rapido @Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "gIumq0YfeZrNDTZt", + "name": "QIDI WOOD Rapido @Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI WOOD Rapido@X-Plus 5-Series", + "pressure_advance": [ + "0.044" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI WOOD Rapido @Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI WOOD Rapido @Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..b9ecf201ba --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI WOOD Rapido @Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "qUjZ8AUjivOk8uCf", + "name": "QIDI WOOD Rapido @Qidi X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI WOOD Rapido@X-Plus 5-Series", + "pressure_advance": [ + "0.024" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI WOOD Rapido @Qidi X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/filament/X5/QIDI WOOD Rapido @Qidi X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..fc15698443 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI WOOD Rapido @Qidi X-Plus 5 0.8 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "setting_id": "A2kztfG9PA7Qxh7r", + "name": "QIDI WOOD Rapido @Qidi X-Plus 5 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "QIDI WOOD Rapido@X-Plus 5-Series", + "pressure_advance": [ + "0.012" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/X5/QIDI WOOD Rapido @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI WOOD Rapido @X-Plus 5.json new file mode 100644 index 0000000000..30428c7422 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/QIDI WOOD Rapido @X-Plus 5.json @@ -0,0 +1,66 @@ +{ + "type": "filament", + "filament_id": "QD_4_1_6", + "name": "QIDI WOOD Rapido@X-Plus 5-Series", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_x5_common", + "additional_cooling_fan_speed": [ + "100" + ], + "box_temperature_range_high": [ + "45" + ], + "filament_adhesiveness_category": [ + "100" + ], + "filament_density": [ + "1.23" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_type": [ + "PLA" + ], + "impact_strength_z": [ + "5.6" + ], + "nozzle_temperature_range_high": [ + "220" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_initial_layer": [ + "210" + ], + "nozzle_temperature": [ + "210" + ], + "overhang_fan_threshold": [ + "50%" + ], + "pressure_advance": [ + "0.044" + ], + "supertack_plate_temp_initial_layer": [ + "45" + ], + "supertack_plate_temp": [ + "45" + ], + "temperature_vitrification": [ + "45" + ], + "textured_cool_plate_temp_initial_layer": [ + "45" + ], + "textured_cool_plate_temp": [ + "45" + ], + "compatible_printers": [] +} diff --git a/resources/profiles/Qidi/filament/X5/fdm_filament_x5_common.json b/resources/profiles/Qidi/filament/X5/fdm_filament_x5_common.json new file mode 100644 index 0000000000..a161158dc4 --- /dev/null +++ b/resources/profiles/Qidi/filament/X5/fdm_filament_x5_common.json @@ -0,0 +1,255 @@ +{ + "type": "filament", + "name": "fdm_filament_x5_common", + "from": "system", + "instantiation": "false", + "activate_air_filtration": [ + "1" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "additional_fan_full_speed_layer": [ + "0" + ], + "bed_type": [ + "Cool Plate" + ], + "box_temperature_range_high": [ + "0" + ], + "box_temperature_range_low": [ + "0" + ], + "box_temperature": [ + "0" + ], + "chamber_temperatures": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "close_additional_fan_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp_initial_layer": [ + "45" + ], + "cool_plate_temp": [ + "45" + ], + "during_print_exhaust_fan_speed": [ + "100" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp_initial_layer": [ + "60" + ], + "eng_plate_temp": [ + "60" + ], + "fan_cooling_layer_time": [ + "60" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_cost": [ + "0" + ], + "filament_cooling_before_tower": [ + "0" + ], + "filament_tower_interface_pre_extrusion_dist": [ + "10" + ], + "filament_tower_interface_pre_extrusion_length": [ + "0" + ], + "filament_tower_ironing_area": [ + "4" + ], + "filament_tower_interface_purge_volume": [ + "20" + ], + "filament_tower_interface_print_temp": [ + "-1" + ], + "filament_density": [ + "1.24" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_dev_ams_drying_ams_limitations": [ + "1" + ], + "filament_dev_ams_drying_temperature": [ + "40.0", + "40.0", + "40.0", + "40.0" + ], + "filament_dev_ams_drying_time": [ + "8.0", + "8.0", + "8.0", + "8.0" + ], + "filament_dev_drying_softening_temperature": [ + "40.0" + ], + "filament_dev_ams_drying_heat_distortion_temperature": [ + "45.0" + ], + "filament_dev_drying_cooling_temperature": [ + "35.0" + ], + "filament_dev_chamber_drying_bed_temperature": [ + "90.0" + ], + "filament_dev_chamber_drying_time": [ + "12.0" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; Filament-specific end gcode \n;END gcode for filament" + ], + "filament_extruder_compatibility": [ + "0" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_flush_temp": [ + "0" + ], + "filament_flush_volumetric_speed": [ + "0" + ], + "filament_max_volumetric_speed": [ + "24.5" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_settings_id": [ + "" + ], + "filament_soluble": [ + "0" + ], + "filament_start_gcode": [ + "; Filament start gcode" + ], + "filament_type": [ + "PLA" + ], + "filament_vendor": [ + "QIDI" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_wipe": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_ramming_travel_time": [ + "0" + ], + "filament_pre_cooling_temperature": [ + "0" + ], + "filament_ramming_volumetric_speed": [ + "-1" + ], + "filament_prime_volume": [ + "30" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "hot_plate_temp": [ + "60" + ], + "nozzle_temperature_initial_layer": [ + "210" + ], + "nozzle_temperature": [ + "210" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "95%" + ], + "pressure_advance": [ + "0.042" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "supertack_plate_temp_initial_layer": [ + "45" + ], + "supertack_plate_temp": [ + "45" + ], + "temperature_vitrification": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "60" + ], + "textured_plate_temp": [ + "60" + ] +} diff --git a/resources/profiles/Qidi/machine/Qidi X-Plus 5 0.2 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Plus 5 0.2 nozzle.json new file mode 100644 index 0000000000..54fed33aea --- /dev/null +++ b/resources/profiles/Qidi/machine/Qidi X-Plus 5 0.2 nozzle.json @@ -0,0 +1,28 @@ +{ + "type": "machine", + "name": "Qidi X-Plus 5 0.2 nozzle", + "inherits": "Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "setting_id": "prjWhtWxCsXqcrHr", + "instantiation": "true", + "printer_model": "Qidi X-Plus 5", + "printer_variant": "0.2", + "default_filament_profile": [ + "QIDI PLA Rapido @Qidi X-Plus 5 0.2 nozzle" + ], + "default_print_profile": "0.10mm Standard @X-Plus 5 0.2 nozzle", + "max_layer_height": [ + "0.14" + ], + "min_layer_height": [ + "0.04" + ], + "nozzle_diameter": [ + "0.2" + ], + "printer_agent": "qidi", + "retraction_length": [ + "0.4" + ], + "support_box_temp_control": "1" +} diff --git a/resources/profiles/Qidi/machine/Qidi X-Plus 5 0.4 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Plus 5 0.4 nozzle.json new file mode 100644 index 0000000000..f23f86af2a --- /dev/null +++ b/resources/profiles/Qidi/machine/Qidi X-Plus 5 0.4 nozzle.json @@ -0,0 +1,88 @@ +{ + "type": "machine", + "name": "Qidi X-Plus 5 0.4 nozzle", + "inherits": "fdm_machine_x_common", + "from": "system", + "setting_id": "exeoc5LTdCkPeWLD", + "instantiation": "true", + "printer_model": "Qidi X-Plus 5", + "auxiliary_fan": "1", + "bed_exclude_area": [ + "0x0,9x0,9x13,0x13" + ], + "box_id": "4", + "change_filament_gcode": "{if current_extruder != next_extruder}\n{if max_layer_z + 3 > max_print_height}\nG0 Z{max_print_height} F1200\n{else}\nG0 Z{max_layer_z + 3} F1200\n{endif}\nTOOL_CHANGE_START F=[current_extruder] T=[next_extruder]\nDISABLE_ALL_SENSOR\nM104 S{old_filament_temp - 10}\nM106 S255\n{if long_retractions_when_cut[previous_extruder]}\nG1 E-{retraction_distances_when_cut[previous_extruder]} F{old_filament_e_feedrate}\n{else}\nG1 E-5 F{old_filament_e_feedrate}\n{endif}\nM400\nCUT_FILAMENT T=[current_extruder]\nMOVE_TO_TRASH\nM106 P2 S0\nUNLOAD_T[current_extruder]\nT[next_extruder]\nM106 S0\n{if nozzle_temperature_range_high[current_extruder] >= nozzle_temperature_range_high[next_extruder]}\nM104 S{nozzle_temperature_range_high[current_extruder]}\nM109.0 S{(nozzle_temperature_range_high[current_extruder])-25}\n{else}\nM104 S{nozzle_temperature_range_high[next_extruder]}\nM109.0 S{(nozzle_temperature_range_high[next_extruder])-25}\n{endif}\n{if long_retractions_when_cut[previous_extruder]}\nG1 E{retraction_distances_when_cut[previous_extruder]} F{old_filament_e_feedrate}\n{endif}\n{if flush_length_1 > 1}\n; FLUSH_START\nG1 E{flush_length_1} F{old_filament_e_feedrate * 0.5}\n; FLUSH_END\n{endif}\n{if flush_length_2 > 1}\n; FLUSH_START\nG1 E{flush_length_2} F{new_filament_e_feedrate * 0.5}\n; FLUSH_END\n{endif}\n{if flush_length_3 > 1}\n; FLUSH_START\nG1 E{flush_length_3} F{new_filament_e_feedrate * 0.5}\n; FLUSH_END\n{endif}\n{if flush_length_4 > 1}\n; FLUSH_START\nG1 E{flush_length_4} F{new_filament_e_feedrate * 0.5}\n; FLUSH_END\n{endif}\nM400\nM106 S180\nM104 S{new_filament_temp - 10}\nG1 E1 F10\nM109.1 S{new_filament_temp - 10}\nG1 E-4 F1000\nG4 P2000\nM204 S5000\nG1 X109 F8000\nG1 X95 F5000\nG1 X109 F8000\nG1 X95 F5000\nG1 X140 F10000\nG1 Y319\nG1 X110\nG4 P2000\nG1 Y339 F2000\nG1 X123 F6000\nG1 X110\nG1 X123\nG1 X110\nG1 X123\nG1 X110\nG1 X123\nG1 X95\nG1 Y319 F10000\nM104 S[new_filament_temp]\nTOOL_CHANGE_END\nG1 E{new_retract_length_toolchange} F{new_filament_e_feedrate}\nENABLE_ALL_SENSOR\n{endif}", + "default_bed_type": "Textured PEI Plate", + "default_filament_profile": [ + "QIDI PLA Rapido @Qidi X-Plus 5 0.4 nozzle" + ], + "default_print_profile": "0.20mm Standard @X-Plus 5", + "enable_long_retraction_when_cut": "2", + "extruder_clearance_dist_to_rod": "42", + "extruder_clearance_height_to_lid": "168", + "extruder_clearance_height_to_rod": "42", + "extruder_clearance_max_radius": "75", + "fan_direction": "left", + "gcode_flavor": "klipper", + "is_support_3mf": "1", + "is_support_mqtt": "1", + "is_support_multi_box": "1", + "is_support_polar_cooler": "1", + "is_support_timelapse": "1", + "layer_change_gcode": "{if timelapse_type == 1} ; timelapse with wipe tower\nG92 E0\nG1 E-[retraction_length] F1800\n{if layer_z + 0.4 > max_print_height}\nG2 Z{max_print_height} I0.86 J0.86 P1 F20000 ; spiral lift a little\n{else}\nG2 Z{layer_z + 0.4} I0.86 J0.86 P1 F20000 ; spiral lift a little\n{endif}\nMOVE_TO_TRASH\n{if layer_z <=25}\nG1 Z25\n{endif}\nG92 E0\nM400\nTIMELAPSE_TAKE_FRAME\nG1 E[retraction_length] F300\nG1 X140 F8000\nG1 Y319\n{if layer_z <=25}\nG1 Z[layer_z]\n{endif}\n{elsif timelapse_type == 0} ; timelapse without wipe tower\nTIMELAPSE_TAKE_FRAME\n{endif}\nG92 E0\nSET_PRINT_STATS_INFO CURRENT_LAYER={layer_num + 1}", + "machine_end_gcode": "SET_PRINT_MAIN_STATUS MAIN_STATUS=print_end\nDISABLE_BOX_HEATER\nM141 S0\nM140 S0\nDISABLE_ALL_SENSOR\nG1 E-3 F1800\n{if max_layer_z + 3 > max_print_height}\nG0 Z{max_print_height} F600\n{else}\nG0 Z{max_layer_z + 3} F600\n{endif}\nUNLOAD_FILAMENT T=[current_extruder]\nG0 Y320 F12000\nG0 X105 Y320 F12000\n{if max_layer_z < max_print_height / 2}G1 Z{max_print_height / 2 + 10} F600{else}G1 Z{min(max_print_height, max_layer_z + 3)}{endif}\nM104 S0\nPRINT_END", + "machine_max_acceleration_x": [ + "20000" + ], + "machine_max_acceleration_y": [ + "20000" + ], + "machine_max_jerk_e": [ + "4" + ], + "machine_max_jerk_x": [ + "9" + ], + "machine_max_jerk_y": [ + "9" + ], + "machine_max_jerk_z": [ + "4" + ], + "machine_max_speed_x": [ + "600" + ], + "machine_max_speed_y": [ + "600" + ], + "machine_max_speed_z": [ + "20" + ], + "machine_pause_gcode": "PAUSE", + "machine_start_gcode": ";===== PRINT_PHASE_INIT =====\nSET_PRINT_STATS_INFO TOTAL_LAYER=[total_layer_count]\nSET_PRINT_MAIN_STATUS MAIN_STATUS=print_start\nM220 S100\nM221 S100\nDISABLE_ALL_SENSOR\nM1002 R1\nM107\nCLEAR_PAUSE\nM140 S[bed_temperature_initial_layer_single]\nM141 S[chamber_temperature]\nG29.0\nSET_PRINT_SUB_STATUS SUB_STATUS=tool_head_reset\nG28\n\n;===== BOX_PREPAR =====\nSET_PRINT_SUB_STATUS SUB_STATUS=change_filament\nBOX_PRINT_START EXTRUDER=[initial_no_support_extruder] HOTENDTEMP={nozzle_temperature_range_high[initial_tool]}\nM400\nEXTRUSION_AND_FLUSH HOTEND=[nozzle_temperature_initial_layer]\n\n;===== CLEAR_NOZZLE =====\nSET_PRINT_SUB_STATUS SUB_STATUS=flush_filament\nG1 Z20 F480\nMOVE_TO_TRASH\n{if chamber_temperature[0] == 0}\nM106 P3 S[during_print_exhaust_fan_speed]\n{else}\nM106 P3 S0\n{endif}\nM1004\nM106 S0\nM109 S[nozzle_temperature_initial_layer]\nG92 E0\nM83\nG1 E5 F80\nG1 E200 F300\nM400\nM106 S255\nG1 E-3 F1000\nM104 S140\nSET_PRINT_SUB_STATUS SUB_STATUS=clear_nozzle\nM109.1 S{nozzle_temperature_initial_layer[0]-30}\nM204 S10000\nG1 X109 F10000\nG1 X95 F6000\nG1 X109 F10000\nG1 X95 F6000\nG1 X109 F10000\nG1 X95 F6000\nG1 Y318\nG1 X151 F15000\nG1 Y327\nG1 Z5 F480\nM400\nprobe samples=1\nG91\nG1 Z0.1\nG90\nM106 S255\nM109.1 S150\nG91\nG1 X20 F200\nG1 Y3\nG1 X-20\nG1 Y-3\nG1 X20\nG90\nG2 I0.5 J0.5 F480\nG2 I0.5 J0.5\nG2 I0.5 J0.5\nG1 Z10\nG1 Y318 F12000\nG1 X77\nG1 Y338 F2000\nG1 X95 F12000\nG1 X123\nG1 X110\nG1 X123\nG1 X110\nG1 X123\nG1 X110\nG1 X123\nG1 X110\nG1 X140\nG1 X160 Y160\nM106 S0\nSET_PRINT_SUB_STATUS SUB_STATUS=wait_bed_temp\nM190 S[bed_temperature_initial_layer_single]\nSET_PRINT_SUB_STATUS SUB_STATUS=wait_chamber_temp\nM191 S[chamber_temperature]\nG1 Y-2 F15000\nG1 X15\nG1 X-2 F5000\nG4 P1000\nG1 X-1 F1000\nG1 X-2 F5000\nG4 P1000\nG1 E-4 F1800\nG1 X15 F3000\nG1 X20 Y20 F15000\nSET_PRINT_SUB_STATUS SUB_STATUS=z_tilt_adjust\nZ_TILT_ADJUST\nSET_PRINT_SUB_STATUS SUB_STATUS=auto_bed_adjust\nG29\nM1002 A1\nG1 X160 Y160 Z10 F20000\nM1006 Z{10 - ((nozzle_temperature_initial_layer[initial_tool] - 130) / 14 - 5.0) / 100}\nG0 Y-1\nM109 S[nozzle_temperature_initial_layer]\nENABLE_ALL_SENSOR\n\n;===== PRINT_START =====\n; LAYER_HEIGHT: 0.2\nT[initial_tool]\nM140 S[bed_temperature_initial_layer_single]\nM104 S[nozzle_temperature_initial_layer]\nM141 S[chamber_temperature]\nG4 P3000\nprobe samples=1\nG91\nG0 Z0.6 F480\nG90\nG1 X140 Y1 F20000\nG1 E5 F{filament_max_volumetric_speed[initial_no_support_extruder]/2/2.4053*60}\nG1 X180 E20 F{filament_max_volumetric_speed[initial_no_support_extruder]/2/2.4053*60}\nG1 Z1 F480\nSET_PRINT_MAIN_STATUS MAIN_STATUS=printing", + "nozzle_diameter": [ + "0.4" + ], + "nozzle_volume": [ + "125" + ], + "printable_area": [ + "0x0", + "320x0", + "320x320", + "0x320", + "0x0" + ], + "printable_height": "300", + "printer_agent": "qidi", + "printer_settings_id": "Qidi", + "retract_lift_below": [ + "299" + ], + "support_box_temp_control": "1", + "support_multi_bed_types": "1", + "thumbnail_size": [ + "50x50" + ], + "use_3mf": "1" +} diff --git a/resources/profiles/Qidi/machine/Qidi X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..649462eab9 --- /dev/null +++ b/resources/profiles/Qidi/machine/Qidi X-Plus 5 0.6 nozzle.json @@ -0,0 +1,31 @@ +{ + "type": "machine", + "name": "Qidi X-Plus 5 0.6 nozzle", + "inherits": "Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "setting_id": "C4EIoDQYYzDGANJA", + "instantiation": "true", + "printer_model": "Qidi X-Plus 5", + "printer_variant": "0.6", + "default_filament_profile": [ + "QIDI PLA Rapido @Qidi X-Plus 5 0.6 nozzle" + ], + "default_print_profile": "0.30mm Standard @X-Plus 5 0.6 nozzle", + "max_layer_height": [ + "0.42" + ], + "min_layer_height": [ + "0.12" + ], + "nozzle_diameter": [ + "0.6" + ], + "printer_agent": "qidi", + "retraction_length": [ + "1.4" + ], + "retraction_minimum_travel": [ + "3" + ], + "support_box_temp_control": "1" +} diff --git a/resources/profiles/Qidi/machine/Qidi X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..ed932902f9 --- /dev/null +++ b/resources/profiles/Qidi/machine/Qidi X-Plus 5 0.8 nozzle.json @@ -0,0 +1,31 @@ +{ + "type": "machine", + "name": "Qidi X-Plus 5 0.8 nozzle", + "inherits": "Qidi X-Plus 5 0.4 nozzle", + "from": "system", + "setting_id": "5eqkluxp0SrRzhV7", + "instantiation": "true", + "printer_model": "Qidi X-Plus 5", + "printer_variant": "0.8", + "default_filament_profile": [ + "QIDI PLA Rapido @Qidi X-Plus 5 0.8 nozzle" + ], + "default_print_profile": "0.40mm Standard @X-Plus 5 0.8 nozzle", + "max_layer_height": [ + "0.56" + ], + "min_layer_height": [ + "0.16" + ], + "nozzle_diameter": [ + "0.8" + ], + "printer_agent": "qidi", + "retract_length_toolchange": [ + "3" + ], + "retraction_length": [ + "3" + ], + "support_box_temp_control": "1" +} diff --git a/resources/profiles/Qidi/machine/Qidi X-Plus 5.json b/resources/profiles/Qidi/machine/Qidi X-Plus 5.json new file mode 100644 index 0000000000..afc1d9af54 --- /dev/null +++ b/resources/profiles/Qidi/machine/Qidi X-Plus 5.json @@ -0,0 +1,12 @@ +{ + "type": "machine_model", + "name": "Qidi X-Plus 5", + "model_id": "Qidi-XPlus-5", + "nozzle_diameter": "0.4;0.2;0.6;0.8", + "machine_tech": "FFF", + "family": "Qidi", + "bed_model": "qidi_xplus5_buildplate_model.stl", + "bed_texture": "qidi_xplus5_buildplate_texture.svg", + "hotend_model": "qidi_xseries_gen3_hotend.stl", + "default_materials": "Generic ABS @Qidi X-Plus 5 0.4 nozzle;Generic PLA @Qidi X-Plus 5 0.4 nozzle;QIDI ABS Odorless @Qidi X-Plus 5 0.4 nozzle;QIDI ABS Rapido @Qidi X-Plus 5 0.4 nozzle;QIDI PLA Rapido @Qidi X-Plus 5 0.2 nozzle;QIDI PLA Rapido @Qidi X-Plus 5 0.4 nozzle;QIDI PLA Rapido @Qidi X-Plus 5 0.6 nozzle;QIDI PLA Rapido @Qidi X-Plus 5 0.8 nozzle;QIDI PLA Rapido Matte @Qidi X-Plus 5 0.4 nozzle;QIDI PLA-CF @Qidi X-Plus 5 0.4 nozzle;Generic PLA Silk @Qidi X-Plus 5 0.4 nozzle;QIDI PLA Silk @Qidi X-Plus 5 0.4 nozzle;QIDI ASA @Qidi X-Plus 5 0.4 nozzle;QIDI PETG Basic @Qidi X-Plus 5 0.4 nozzle;QIDI PETG Rapido @Qidi X-Plus 5 0.4 nozzle;QIDI PETG Tough @Qidi X-Plus 5 0.4 nozzle;QIDI PETG Translucent @Qidi X-Plus 5 0.4 nozzle;QIDI PLA Basic @Qidi X-Plus 5 0.4 nozzle;QIDI PLA Matte Basic @Qidi X-Plus 5 0.4 nozzle;Generic PETG @Qidi X-Plus 5 0.4 nozzle" +} diff --git a/resources/profiles/Qidi/process/0.08mm High Quality @X-Plus 5 0.2 nozzle.json b/resources/profiles/Qidi/process/0.08mm High Quality @X-Plus 5 0.2 nozzle.json new file mode 100644 index 0000000000..6ef2deee1a --- /dev/null +++ b/resources/profiles/Qidi/process/0.08mm High Quality @X-Plus 5 0.2 nozzle.json @@ -0,0 +1,70 @@ +{ + "type": "process", + "setting_id": "ojwggKwtZ95dDdGn", + "name": "0.08mm High Quality @X-Plus 5 0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_n_common", + "bottom_color_penetration_layers": "5", + "bottom_shell_layers": "5", + "bridge_flow": "1", + "default_acceleration": [ + "10000" + ], + "elefant_foot_compensation": "0.15", + "enable_arc_fitting": "0", + "initial_layer_infill_speed": [ + "70" + ], + "initial_layer_line_width": "0.25", + "initial_layer_print_height": "0.1", + "initial_layer_speed": [ + "40" + ], + "inner_wall_acceleration": [ + "0" + ], + "inner_wall_line_width": "0.22", + "inner_wall_speed": [ + "150" + ], + "internal_solid_infill_line_width": "0.22", + "layer_height": "0.08", + "line_width": "0.22", + "outer_wall_acceleration": [ + "5000" + ], + "outer_wall_line_width": "0.22", + "outer_wall_speed": [ + "100" + ], + "overhang_1_4_speed": [ + "60" + ], + "prime_tower_width": "60", + "prime_tower_brim_width": "-1", + "prime_tower_flat_ironing": "1", + "skin_infill_line_width": "0.22", + "skeleton_infill_line_width": "0.22", + "sparse_infill_line_width": "0.22", + "sparse_infill_pattern": "gyroid", + "sparse_infill_speed": [ + "100" + ], + "support_bottom_z_distance": "0.08", + "support_line_width": "0.22", + "support_top_z_distance": "0.08", + "top_color_penetration_layers": "7", + "top_shell_layers": "7", + "top_surface_line_width": "0.22", + "top_surface_speed": [ + "150" + ], + "travel_speed": [ + "500" + ], + "wall_loops": "4", + "compatible_printers": [ + "Qidi X-Plus 5 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/process/0.08mm High Quality @X-Plus 5.json b/resources/profiles/Qidi/process/0.08mm High Quality @X-Plus 5.json new file mode 100644 index 0000000000..5b76c79ef4 --- /dev/null +++ b/resources/profiles/Qidi/process/0.08mm High Quality @X-Plus 5.json @@ -0,0 +1,73 @@ +{ + "type": "process", + "setting_id": "pdbmnAHtrlkeD1D6", + "name": "0.08mm High Quality @X-Plus 5", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_n_common", + "bottom_color_penetration_layers": "7", + "bottom_shell_layers": "7", + "bridge_flow": "1", + "default_acceleration": [ + "4000" + ], + "elefant_foot_compensation": "0.15", + "enable_arc_fitting": "0", + "gap_infill_speed": [ + "210" + ], + "initial_layer_infill_speed": [ + "105" + ], + "initial_layer_speed": [ + "50" + ], + "inner_wall_acceleration": [ + "0" + ], + "inner_wall_speed": [ + "120" + ], + "internal_solid_infill_speed": [ + "150" + ], + "ironing_flow": "8%", + "layer_height": "0.08", + "outer_wall_acceleration": [ + "2000" + ], + "outer_wall_speed": [ + "60" + ], + "overhang_1_4_speed": [ + "60" + ], + "overhang_2_4_speed": [ + "30" + ], + "overhang_3_4_speed": [ + "10" + ], + "prime_tower_width": "60", + "prime_tower_brim_width": "-1", + "prime_tower_flat_ironing": "0", + "sparse_infill_speed": [ + "150" + ], + "sparse_infill_pattern": "gyroid", + "support_bottom_z_distance": "0.08", + "support_threshold_angle": "15", + "support_top_z_distance": "0.08", + "top_color_penetration_layers": "9", + "top_shell_layers": "9", + "top_shell_thickness": "1", + "top_surface_speed": [ + "150" + ], + "travel_speed": [ + "350" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/process/0.10mm Standard @X-Plus 5 0.2 nozzle.json b/resources/profiles/Qidi/process/0.10mm Standard @X-Plus 5 0.2 nozzle.json new file mode 100644 index 0000000000..a8a9aa5f37 --- /dev/null +++ b/resources/profiles/Qidi/process/0.10mm Standard @X-Plus 5 0.2 nozzle.json @@ -0,0 +1,63 @@ +{ + "type": "process", + "setting_id": "3k8N3voNC9Kp0Ov6", + "name": "0.10mm Standard @X-Plus 5 0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_n_common", + "bottom_color_penetration_layers": "5", + "bottom_shell_layers": "5", + "bridge_flow": "1", + "elefant_foot_compensation": "0.15", + "enable_arc_fitting": "0", + "initial_layer_infill_speed": [ + "70" + ], + "initial_layer_line_width": "0.25", + "initial_layer_print_height": "0.1", + "initial_layer_speed": [ + "40" + ], + "inner_wall_acceleration": [ + "0" + ], + "inner_wall_line_width": "0.22", + "internal_solid_infill_line_width": "0.22", + "ironing_flow": "20%", + "ironing_speed": "20", + "layer_height": "0.1", + "line_width": "0.22", + "outer_wall_acceleration": [ + "5000" + ], + "outer_wall_line_width": "0.22", + "overhang_1_4_speed": [ + "60" + ], + "skin_infill_line_width": "0.22", + "outer_wall_speed": [ + "100" + ], + "prime_tower_width": "60", + "skeleton_infill_line_width": "0.22", + "sparse_infill_line_width": "0.22", + "sparse_infill_speed": [ + "100" + ], + "support_bottom_z_distance": "0.1", + "support_line_width": "0.22", + "support_top_z_distance": "0.1", + "top_color_penetration_layers": "7", + "top_shell_layers": "7", + "top_surface_line_width": "0.22", + "top_surface_speed": [ + "150" + ], + "travel_speed": [ + "500" + ], + "wall_loops": "4", + "compatible_printers": [ + "Qidi X-Plus 5 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/process/0.12mm Balanced Quality @X-Plus 5 0.2 nozzle.json b/resources/profiles/Qidi/process/0.12mm Balanced Quality @X-Plus 5 0.2 nozzle.json new file mode 100644 index 0000000000..1c1d304ccd --- /dev/null +++ b/resources/profiles/Qidi/process/0.12mm Balanced Quality @X-Plus 5 0.2 nozzle.json @@ -0,0 +1,66 @@ +{ + "type": "process", + "setting_id": "O20HfmdyTRg2xayA", + "name": "0.12mm Balanced Quality @X-Plus 5 0.2 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_n_common", + "bottom_color_penetration_layers": "5", + "bottom_shell_layers": "5", + "bridge_flow": "1", + "default_acceleration": [ + "10000" + ], + "elefant_foot_compensation": "0.15", + "enable_arc_fitting": "0", + "initial_layer_infill_speed": [ + "70" + ], + "initial_layer_line_width": "0.25", + "initial_layer_print_height": "0.1", + "initial_layer_speed": [ + "40" + ], + "inner_wall_acceleration": [ + "0" + ], + "inner_wall_line_width": "0.22", + "internal_solid_infill_line_width": "0.22", + "layer_height": "0.12", + "line_width": "0.22", + "outer_wall_acceleration": [ + "5000" + ], + "outer_wall_line_width": "0.22", + "outer_wall_speed": [ + "100" + ], + "overhang_1_4_speed": [ + "60" + ], + "prime_tower_width": "60", + "prime_tower_brim_width": "-1", + "prime_tower_flat_ironing": "1", + "skin_infill_line_width": "0.22", + "skeleton_infill_line_width": "0.22", + "sparse_infill_line_width": "0.22", + "sparse_infill_speed": [ + "100" + ], + "support_bottom_z_distance": "0.12", + "support_line_width": "0.22", + "support_top_z_distance": "0.12", + "top_color_penetration_layers": "7", + "top_shell_layers": "7", + "top_surface_line_width": "0.22", + "top_surface_speed": [ + "150" + ], + "travel_speed": [ + "500" + ], + "wall_loops": "4", + "compatible_printers": [ + "Qidi X-Plus 5 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/process/0.12mm High Quality @X-Plus 5.json b/resources/profiles/Qidi/process/0.12mm High Quality @X-Plus 5.json new file mode 100644 index 0000000000..a74aecb369 --- /dev/null +++ b/resources/profiles/Qidi/process/0.12mm High Quality @X-Plus 5.json @@ -0,0 +1,73 @@ +{ + "type": "process", + "setting_id": "xWoxLO8XiKAOEvPO", + "name": "0.12mm High Quality @X-Plus 5", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_n_common", + "bottom_color_penetration_layers": "5", + "bottom_shell_layers": "5", + "bridge_flow": "1", + "default_acceleration": [ + "4000" + ], + "elefant_foot_compensation": "0.15", + "enable_arc_fitting": "0", + "gap_infill_speed": [ + "230" + ], + "initial_layer_infill_speed": [ + "105" + ], + "initial_layer_speed": [ + "50" + ], + "inner_wall_acceleration": [ + "0" + ], + "inner_wall_speed": [ + "150" + ], + "internal_solid_infill_speed": [ + "180" + ], + "layer_height": "0.12", + "outer_wall_acceleration": [ + "2000" + ], + "outer_wall_speed": [ + "60" + ], + "overhang_1_4_speed": [ + "60" + ], + "overhang_2_4_speed": [ + "30" + ], + "overhang_3_4_speed": [ + "10" + ], + "prime_tower_width": "60", + "prime_tower_brim_width": "-1", + "prime_tower_flat_ironing": "1", + "sparse_infill_pattern": "gyroid", + "sparse_infill_speed": [ + "180" + ], + "support_bottom_z_distance": "0.12", + "support_threshold_angle": "20", + "support_top_z_distance": "0.12", + "top_color_penetration_layers": "7", + "top_shell_layers": "5", + "top_shell_thickness": "0.6", + "top_surface_speed": [ + "150" + ], + "travel_speed": [ + "350" + ], + "wall_loops": "2", + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/process/0.16mm High Quality @X-Plus 5.json b/resources/profiles/Qidi/process/0.16mm High Quality @X-Plus 5.json new file mode 100644 index 0000000000..54f20f7324 --- /dev/null +++ b/resources/profiles/Qidi/process/0.16mm High Quality @X-Plus 5.json @@ -0,0 +1,65 @@ +{ + "type": "process", + "setting_id": "7hYw7osV25Xu2yiu", + "name": "0.16mm High Quality @X-Plus 5", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_n_common", + "bottom_color_penetration_layers": "4", + "bottom_shell_layers": "4", + "bridge_flow": "1", + "default_acceleration": [ + "4000" + ], + "elefant_foot_compensation": "0.15", + "enable_arc_fitting": "0", + "gap_infill_speed": [ + "250" + ], + "inner_wall_acceleration": [ + "0" + ], + "internal_solid_infill_speed": [ + "200" + ], + "ironing_flow": "25%", + "ironing_speed": "20", + "layer_height": "0.16", + "outer_wall_acceleration": [ + "2000" + ], + "outer_wall_speed": [ + "60" + ], + "overhang_1_4_speed": [ + "60" + ], + "overhang_2_4_speed": [ + "30" + ], + "overhang_3_4_speed": [ + "10" + ], + "prime_tower_width": "60", + "prime_tower_brim_width": "-1", + "prime_tower_flat_ironing": "1", + "sparse_infill_pattern": "gyroid", + "sparse_infill_speed": [ + "200" + ], + "support_bottom_z_distance": "0.16", + "support_threshold_angle": "25", + "support_top_z_distance": "0.16", + "top_color_penetration_layers": "6", + "top_shell_layers": "6", + "top_shell_thickness": "1.0", + "top_surface_speed": [ + "150" + ], + "travel_speed": [ + "350" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/process/0.16mm Standard @X-Plus 5.json b/resources/profiles/Qidi/process/0.16mm Standard @X-Plus 5.json new file mode 100644 index 0000000000..5399e693aa --- /dev/null +++ b/resources/profiles/Qidi/process/0.16mm Standard @X-Plus 5.json @@ -0,0 +1,62 @@ +{ + "type": "process", + "setting_id": "xP7mco0WGscmPNoV", + "name": "0.16mm Standard @X-Plus 5", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_n_common", + "bottom_color_penetration_layers": "4", + "bottom_shell_layers": "4", + "bridge_flow": "1", + "default_acceleration": [ + "10000" + ], + "elefant_foot_compensation": "0.15", + "enable_arc_fitting": "0", + "gap_infill_speed": [ + "250" + ], + "inner_wall_acceleration": [ + "0" + ], + "inner_wall_speed": [ + "300" + ], + "internal_solid_infill_speed": [ + "250" + ], + "layer_height": "0.16", + "outer_wall_acceleration": [ + "5000" + ], + "outer_wall_speed": [ + "200" + ], + "overhang_1_4_speed": [ + "60" + ], + "overhang_2_4_speed": [ + "30" + ], + "overhang_3_4_speed": [ + "10" + ], + "prime_tower_width": "60", + "prime_tower_brim_width": "-1", + "prime_tower_flat_ironing": "1", + "sparse_infill_speed": [ + "350" + ], + "support_bottom_z_distance": "0.16", + "support_threshold_angle": "25", + "support_top_z_distance": "0.16", + "top_color_penetration_layers": "6", + "top_shell_layers": "6", + "top_shell_thickness": "1.0", + "travel_speed": [ + "500" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/process/0.18mm Balanced Quality @X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/process/0.18mm Balanced Quality @X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..85d94d49a7 --- /dev/null +++ b/resources/profiles/Qidi/process/0.18mm Balanced Quality @X-Plus 5 0.6 nozzle.json @@ -0,0 +1,73 @@ +{ + "type": "process", + "setting_id": "kj7YrKOrYowWXXrY", + "name": "0.18mm Balanced Quality @X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_n_common", + "bridge_flow": "1", + "bridge_speed": [ + "30" + ], + "default_acceleration": [ + "10000" + ], + "elefant_foot_compensation": "0.15", + "enable_arc_fitting": "0", + "gap_infill_speed": [ + "50" + ], + "initial_layer_line_width": "0.62", + "initial_layer_print_height": "0.3", + "initial_layer_speed": [ + "50" + ], + "inner_wall_acceleration": [ + "0" + ], + "inner_wall_line_width": "0.62", + "inner_wall_speed": [ + "300" + ], + "internal_solid_infill_line_width": "0.62", + "internal_solid_infill_speed": [ + "250" + ], + "layer_height": "0.18", + "line_width": "0.62", + "outer_wall_acceleration": [ + "5000" + ], + "outer_wall_line_width": "0.62", + "outer_wall_speed": [ + "200" + ], + "overhang_1_4_speed": [ + "0" + ], + "overhang_2_4_speed": [ + "50" + ], + "prime_tower_width": "60", + "prime_tower_brim_width": "-1", + "prime_tower_flat_ironing": "1", + "skin_infill_line_width": "0.62", + "skeleton_infill_line_width": "0.62", + "sparse_infill_line_width": "0.62", + "sparse_infill_speed": [ + "350" + ], + "support_bottom_z_distance": "0.18", + "support_line_width": "0.62", + "support_top_z_distance": "0.18", + "top_surface_line_width": "0.62", + "top_surface_speed": [ + "200" + ], + "travel_speed": [ + "500" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/process/0.20mm High Quality @X-Plus 5.json b/resources/profiles/Qidi/process/0.20mm High Quality @X-Plus 5.json new file mode 100644 index 0000000000..4f8c7b4ef4 --- /dev/null +++ b/resources/profiles/Qidi/process/0.20mm High Quality @X-Plus 5.json @@ -0,0 +1,63 @@ +{ + "type": "process", + "setting_id": "azERQAEOdeNEo2z7", + "name": "0.20mm High Quality @X-Plus 5", + "from": "system", + "inherits": "fdm_process_n_common", + "instantiation": "true", + "bottom_shell_layers": "3", + "bridge_flow": "1", + "default_acceleration": [ + "4000" + ], + "elefant_foot_compensation": "0.15", + "enable_arc_fitting": "0", + "gap_infill_speed": [ + "250" + ], + "inner_wall_acceleration": [ + "0" + ], + "inner_wall_speed": [ + "150" + ], + "internal_solid_infill_speed": [ + "200" + ], + "outer_wall_acceleration": [ + "2000" + ], + "outer_wall_speed": [ + "60" + ], + "overhang_1_4_speed": [ + "60" + ], + "overhang_2_4_speed": [ + "30" + ], + "overhang_3_4_speed": [ + "10" + ], + "prime_tower_width": "60", + "prime_tower_brim_width": "-1", + "prime_tower_flat_ironing": "1", + "sparse_infill_speed": [ + "200" + ], + "sparse_infill_density": "15%", + "sparse_infill_pattern": "gyroid", + "top_color_penetration_layers": "5", + "top_shell_layers": "5", + "top_shell_thickness": "1.0", + "top_surface_speed": [ + "150" + ], + "travel_speed": [ + "350" + ], + "wall_loops": "2", + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/process/0.20mm Standard @X-Plus 5.json b/resources/profiles/Qidi/process/0.20mm Standard @X-Plus 5.json new file mode 100644 index 0000000000..decaceecae --- /dev/null +++ b/resources/profiles/Qidi/process/0.20mm Standard @X-Plus 5.json @@ -0,0 +1,47 @@ +{ + "type": "process", + "setting_id": "ug7kxxCLKKE7MoJW", + "name": "0.20mm Standard @X-Plus 5", + "from": "system", + "inherits": "fdm_process_n_common", + "instantiation": "true", + "bridge_flow": "1", + "default_acceleration": [ + "10000" + ], + "elefant_foot_compensation": "0.15", + "enable_arc_fitting": "0", + "gap_infill_speed": [ + "250" + ], + "inner_wall_speed": [ + "300" + ], + "inner_wall_acceleration": [ + "0" + ], + "internal_solid_infill_speed": [ + "250" + ], + "ironing_flow": "15%", + "outer_wall_acceleration": [ + "5000" + ], + "outer_wall_speed": [ + "200" + ], + "prime_tower_width": "60", + "prime_tower_flat_ironing": "1", + "sparse_infill_speed": [ + "350" + ], + "top_color_penetration_layers": "5", + "top_shell_layers": "5", + "top_shell_thickness": "1.0", + "travel_speed": [ + "500" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/process/0.24mm Balanced Quality @X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/process/0.24mm Balanced Quality @X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..16e25dcef3 --- /dev/null +++ b/resources/profiles/Qidi/process/0.24mm Balanced Quality @X-Plus 5 0.6 nozzle.json @@ -0,0 +1,71 @@ +{ + "type": "process", + "setting_id": "BWwslzDWus0iHZM8", + "name": "0.24mm Balanced Quality @X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_n_common", + "bridge_flow": "1", + "bridge_speed": [ + "30" + ], + "default_acceleration": [ + "10000" + ], + "elefant_foot_compensation": "0.15", + "enable_arc_fitting": "0", + "gap_infill_speed": [ + "50" + ], + "initial_layer_infill_speed": [ + "105" + ], + "initial_layer_line_width": "0.62", + "initial_layer_print_height": "0.3", + "initial_layer_speed": [ + "50" + ], + "inner_wall_acceleration": [ + "0" + ], + "inner_wall_line_width": "0.62", + "inner_wall_speed": [ + "300" + ], + "internal_solid_infill_line_width": "0.62", + "internal_solid_infill_speed": [ + "250" + ], + "layer_height": "0.24", + "line_width": "0.62", + "outer_wall_acceleration": [ + "5000" + ], + "outer_wall_line_width": "0.62", + "outer_wall_speed": [ + "200" + ], + "overhang_3_4_speed": [ + "30" + ], + "prime_tower_width": "60", + "prime_tower_brim_width": "-1", + "prime_tower_flat_ironing": "1", + "skin_infill_line_width": "0.62", + "skeleton_infill_line_width": "0.62", + "sparse_infill_line_width": "0.62", + "sparse_infill_speed": [ + "350" + ], + "support_line_width": "0.62", + "top_surface_line_width": "0.62", + "top_surface_speed": [ + "200" + ], + "travel_speed": [ + "500" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/process/0.24mm Balanced Quality @X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/process/0.24mm Balanced Quality @X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..e7d69b3f09 --- /dev/null +++ b/resources/profiles/Qidi/process/0.24mm Balanced Quality @X-Plus 5 0.8 nozzle.json @@ -0,0 +1,63 @@ +{ + "type": "process", + "setting_id": "TdXf6dJK5dAiFtIW", + "name": "0.24mm Balanced Quality @X-Plus 5 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_n_common", + "bridge_flow": "1", + "bridge_speed": [ + "30" + ], + "default_acceleration": [ + "10000" + ], + "elefant_foot_compensation": "0.15", + "enable_arc_fitting": "0", + "gap_infill_speed": [ + "50" + ], + "initial_layer_line_width": "0.82", + "initial_layer_print_height": "0.4", + "initial_layer_speed": [ + "50" + ], + "inner_wall_acceleration": [ + "0" + ], + "inner_wall_line_width": "0.82", + "inner_wall_speed": [ + "300" + ], + "internal_solid_infill_line_width": "0.82", + "internal_solid_infill_speed": [ + "250" + ], + "layer_height": "0.24", + "line_width": "0.82", + "outer_wall_acceleration": [ + "5000" + ], + "outer_wall_line_width": "0.82", + "outer_wall_speed": [ + "200" + ], + "prime_tower_width": "60", + "prime_tower_brim_width": "-1", + "prime_tower_flat_ironing": "1", + "skin_infill_line_width": "0.82", + "skeleton_infill_line_width": "0.82", + "sparse_infill_line_width": "0.82", + "sparse_infill_speed": [ + "350" + ], + "support_line_width": "0.82", + "top_surface_line_width": "0.82", + "top_surface_pattern": "monotonic", + "travel_speed": [ + "500" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/process/0.24mm Standard @X-Plus 5.json b/resources/profiles/Qidi/process/0.24mm Standard @X-Plus 5.json new file mode 100644 index 0000000000..8a435e69e7 --- /dev/null +++ b/resources/profiles/Qidi/process/0.24mm Standard @X-Plus 5.json @@ -0,0 +1,50 @@ +{ + "type": "process", + "setting_id": "fiMTwk6ObF3WNpi5", + "name": "0.24mm Standard @X-Plus 5", + "from": "system", + "inherits": "fdm_process_n_common", + "instantiation": "true", + "bridge_flow": "1", + "default_acceleration": [ + "10000" + ], + "elefant_foot_compensation": "0.15", + "enable_arc_fitting": "0", + "gap_infill_speed": [ + "250" + ], + "inner_wall_acceleration": [ + "0" + ], + "inner_wall_speed": [ + "300" + ], + "internal_solid_infill_speed": [ + "250" + ], + "layer_height": "0.24", + "outer_wall_acceleration": [ + "5000" + ], + "outer_wall_speed": [ + "200" + ], + "prime_tower_width": "60", + "prime_tower_brim_width": "-1", + "prime_tower_flat_ironing": "1", + "sparse_infill_speed": [ + "350" + ], + "support_threshold_angle": "35", + "top_color_penetration_layers": "4", + "top_shell_layers": "4", + "top_shell_thickness": "1.0", + "top_surface_line_width": "0.45", + "travel_speed": [ + "500" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/process/0.30mm Standard @X-Plus 5 0.6 nozzle.json b/resources/profiles/Qidi/process/0.30mm Standard @X-Plus 5 0.6 nozzle.json new file mode 100644 index 0000000000..a297f33bac --- /dev/null +++ b/resources/profiles/Qidi/process/0.30mm Standard @X-Plus 5 0.6 nozzle.json @@ -0,0 +1,65 @@ +{ + "type": "process", + "setting_id": "ZHUAMUGv0HI3h8fQ", + "name": "0.30mm Standard @X-Plus 5 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_n_common", + "bridge_flow": "1", + "bridge_speed": [ + "30" + ], + "default_acceleration": [ + "10000" + ], + "elefant_foot_compensation": "0.15", + "enable_arc_fitting": "0", + "gap_infill_speed": [ + "50" + ], + "initial_layer_line_width": "0.62", + "initial_layer_print_height": "0.3", + "initial_layer_speed": [ + "50" + ], + "inner_wall_acceleration": [ + "0" + ], + "inner_wall_line_width": "0.62", + "inner_wall_speed": [ + "300" + ], + "internal_solid_infill_line_width": "0.62", + "internal_solid_infill_speed": [ + "250" + ], + "layer_height": "0.3", + "line_width": "0.62", + "outer_wall_acceleration": [ + "5000" + ], + "outer_wall_line_width": "0.62", + "outer_wall_speed": [ + "120" + ], + "prime_tower_width": "60", + "prime_tower_flat_ironing": "1", + "skin_infill_line_width": "0.62", + "skeleton_infill_line_width": "0.62", + "sparse_infill_line_width": "0.62", + "sparse_infill_speed": [ + "350" + ], + "support_line_width": "0.62", + "top_shell_layers": "4", + "top_surface_line_width": "0.62", + "top_surface_speed": [ + "200" + ], + "travel_speed": [ + "500" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/process/0.32mm Balanced Quality @X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/process/0.32mm Balanced Quality @X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..be02d140d6 --- /dev/null +++ b/resources/profiles/Qidi/process/0.32mm Balanced Quality @X-Plus 5 0.8 nozzle.json @@ -0,0 +1,72 @@ +{ + "type": "process", + "setting_id": "Vl4hMKR69J1JcquX", + "name": "0.32mm Balanced Quality @X-Plus 5 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_n_common", + "bridge_flow": "1", + "bridge_speed": [ + "30" + ], + "default_acceleration": [ + "10000" + ], + "elefant_foot_compensation": "0.15", + "enable_arc_fitting": "0", + "gap_infill_speed": [ + "50" + ], + "initial_layer_infill_speed": [ + "105" + ], + "initial_layer_line_width": "0.82", + "initial_layer_print_height": "0.4", + "initial_layer_speed": [ + "50" + ], + "inner_wall_acceleration": [ + "0" + ], + "inner_wall_line_width": "0.82", + "inner_wall_speed": [ + "300" + ], + "internal_solid_infill_line_width": "0.82", + "internal_solid_infill_speed": [ + "250" + ], + "layer_height": "0.32", + "line_width": "0.82", + "outer_wall_acceleration": [ + "5000" + ], + "outer_wall_line_width": "0.82", + "outer_wall_speed": [ + "200" + ], + "overhang_3_4_speed": [ + "30" + ], + "prime_tower_width": "60", + "prime_tower_brim_width": "-1", + "prime_tower_flat_ironing": "1", + "skin_infill_line_width": "0.82", + "skeleton_infill_line_width": "0.82", + "sparse_infill_line_width": "0.82", + "sparse_infill_speed": [ + "350" + ], + "support_line_width": "0.82", + "top_surface_line_width": "0.82", + "top_surface_pattern": "monotonic", + "top_surface_speed": [ + "200" + ], + "travel_speed": [ + "500" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/process/0.40mm Standard @X-Plus 5 0.8 nozzle.json b/resources/profiles/Qidi/process/0.40mm Standard @X-Plus 5 0.8 nozzle.json new file mode 100644 index 0000000000..cb3f30c20e --- /dev/null +++ b/resources/profiles/Qidi/process/0.40mm Standard @X-Plus 5 0.8 nozzle.json @@ -0,0 +1,60 @@ +{ + "type": "process", + "setting_id": "6EBzl1Pg5Px36Cu6", + "name": "0.40mm Standard @X-Plus 5 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_n_common", + "bridge_flow": "1", + "bridge_speed": [ + "30" + ], + "default_acceleration": [ + "10000" + ], + "elefant_foot_compensation": "0.15", + "enable_arc_fitting": "0", + "gap_infill_speed": [ + "50" + ], + "initial_layer_line_width": "0.82", + "initial_layer_print_height": "0.4", + "inner_wall_acceleration": [ + "0" + ], + "inner_wall_line_width": "0.82", + "inner_wall_speed": [ + "300" + ], + "internal_solid_infill_line_width": "0.82", + "internal_solid_infill_speed": [ + "250" + ], + "layer_height": "0.4", + "line_width": "0.82", + "outer_wall_acceleration": [ + "5000" + ], + "outer_wall_line_width": "0.82", + "prime_tower_width": "60", + "prime_tower_flat_ironing": "1", + "skin_infill_line_width": "0.82", + "skeleton_infill_line_width": "0.82", + "sparse_infill_line_width": "0.82", + "sparse_infill_speed": [ + "350" + ], + "support_line_width": "0.82", + "top_surface_line_width": "0.82", + "top_surface_pattern": "monotonic", + "top_surface_speed": [ + "200" + ], + "top_shell_layers": "4", + "travel_speed": [ + "500" + ], + "compatible_printers": [ + "Qidi X-Plus 5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/qidi_xplus5_buildplate_model.stl b/resources/profiles/Qidi/qidi_xplus5_buildplate_model.stl new file mode 100644 index 0000000000000000000000000000000000000000..5e2d7ca48585ce2287c9981b73a28977b93c779b GIT binary patch literal 28284 zcmbtbfAD8zRlb@IBPHp&5Tvlne)xXXP^>|X1iv4bPq-;f6a6%kQ9+CxEDRka#jZ$N zMos@X6X@gwVrUgzjF=|0VX)`q<4z^|#4R)UMob$fVd++@$&h#DF zJ$ui2-shb2p7-ay-z(mF*+svx_f^mT*~{K`#oiaa_M%JPu=oG<^TH=~@zXC&=ubHP znftr`jMW$JzHV*uA(8$0-FM%8M}z1R0nG^EXd)hb`IYMj-*fE_uowN_D-Qkj%b({Q z5C74{hd%YfZI|=;W&|{fNVy=E!m%G5f!GfY$j0H%5ntDtR}%y@)^0(hOvK`*3wPf2 z&8y~eRq}JzTVJsM`_DSV`MORJC0A%mtx_h(kuN`UdHhM|JBMmgMjSg2FZbX4=H~~8 zAiA_dTWXauIZl1X#mfud^bPb!ubPxKSCG3-5M5fKt<0z*3dcG)nm*Tlww4anIE-T! zp;jrA!y;ctuHcoo1x?EE$})1O_QxiKTBS@5>%oK3=g6+N1x?D}$jWD~HX+n1WpZ41 z#o>; z_A5?{x>AH{<`CpK$?EEA)>Ws7lsyg^U0tV$9Batp9HMZnlS5~Klp~HqH4ft_2y3@! z<`Cqt$k&-GMWpO;T=Tv|wLcVL`6-$?1Uak+4`!b$B4t=vZ`v#>eO?f%nM07{nFp?1 zUwh592QkjAouTXZ4ql@n!|Kwr@%+?bf-p=)s8!0W_9IVv(Hj4QLp3RTyVgGbO%6eH zX+^KZDiGvA42Xqs&}xdcZj#Z7rI5r?otyVo{ za#-Zc$Q8VDtB9i@tbOCo{@8?2tCY!MF)X9ckzH>Knv@v_p6{)FK8vsnRI8914qwm1 zigO07d_507m%A>!njq9FWpYI1SO+r>=SVB*kKovZh)mOpS*N#M^q_O3m9vKxIlLBv zV>3dmSTU6YwHq8>agi&^5yybIT!vR05MIX_ha*a^Fa|S@s$u0j!rC7YBRR}^7NJ%t zmp;c_;ytLElo^N57{P(jG>5>*!U$6YIbQ#gn=b1wom6cSA=Tj5ajs4XAc}awEG>-p@@`Wb>$;(Jq$0ID@CYg4l(8U{bN?v*7Llr zlwq~_@PWhcKks?N(GhBuGQGO>Cyrac@;>HDH7TRr&%WpU!$0`p(}QCZLakCR9LwY| z&ADg`nv^4sb88&NF^e#-idD)byF1w*s!16fmbY_}!;-66gj%IM<***Kw%E5Rqh0IG zb8B5$pBE0*%pvHNRpK&hR}m@0%Bu3*tm&>(glgsx&Pzm+6_k! zuksWRO`f(P=M6%G@HkYXi1xINnEBJ=mdkH$g2QiaARD*euoRBo5ca=&RWy0~0V{2Z zt@F>8LlKrMzh|0qXj^JE8;5(P8bxgGj}c;W57&5Qq4?}$=Ycqx#OcMY^qe4}`z&gR zIA=77QJ-53_!%R_N=_Cu^*<|OT1&ADFL4ksk8rfjlZcNkg*E;vkt;{YeukStl@_2U*uHp>VHiw7JUwq8T>=X=hPIHcAY2+w+~ z$YqbC2+c^#F+!BRh z2qIU8M0opzMpe5eMv=&+uBHfj#q+r!2JLh1`huN%XL?1e{&=icv8N7qd}rCIMi9*^ z8lfjgZA-0EE|If+8&bIrhVSNyo(G>%yo&YaE1 z#W4u4azxR?IyM~vW8YIJ0(nIBEny1ZxOY6m{$9XZQ8#{7uH)?l| zLu#}^c-Cv=);@l+O7ebJtT39jN(gX-Xkwhxt2&y)*#82DBC6GRoF}SZ=KP9wbKZrV zYhn|5k2rEQfF{={$j$5u0<*?Xzf_GPn!cfNAXKA>9JP&C&Y_6LN@fh9@a#%e(`x1I z>YOi-c6`LV;s}e+PfJs;Y}}O*)mZ6TGRNWdqX>)7&zu`M9HCY^x}2gXQNL8p2;nF1 zDTg9VE>@f8#N3~wE!*jrH?FzAo^q&05xLi%B65cu9OW%yo=Xa%M6Md+^Y`4a(w3N| z%#~^sp{s=377j(Il|A>9Oz|p+`lV_Vu{paVM0p#oIgIA%+%k81V9z}xWE=B-YdH0) zSu=E{-n@ROMiDwI!JnT0+lXoqI(Nz11w{N{42nkDoy>4OAuU3!bXLmt@pn64DZ*wV zzdM=cO50K^on4)y2LU*Ae$5>++MOUA283!9p*`!y);@kF2)}g%hk8p}{@F&Z?QX6T zZA-0mmGIVkcm&B1b+(jwH=masnc21o*9ao#U?M*9hAaF%>KAW*`})%_wUxfZyNOR6 zqP*?$1sCkG=i5W~*vAfaT_CzKLait-0&(x(KF9Z=AAI}E)~Zp&&);y0bDaJ^A2E(V zbYp~CQCecfq@jLlLT(A{GM?k6z3;9GbI$qY;qP~Lz2esmxwZO>&+i%jyuaDn+FITHp}oTk zeh2-$zqp*bk*g<*CJQwqi2U-;owvN?{rg6_Qp95Q?=Rdlobc6~B3GLb z)oN>mc=u0VwY=rL zR+rv(%5cN=Ck2Nhszwou5#otYe$nz@{hgGyrB>iRW!Uqzrv`^2szwpuQ^c3-`^1Or zJ4Nr?qERbwoNRGCB{*6{Y7_xEpO312sMWqDvdy4ne7yRiKfe8|cO2L`d@SBpt40x9 z!_&{%JAB^@2VYv^AJ3ks^FQ7@8>}_a&PUMAPcquiCe| z{D!R=jz;62M7wvMy0RD_4VBn-!{&CYpHd}7_UE>q z&-6JEp|QFu2=qnPn{)Jt1G&;&D&?ppoGdNA84l4*5mJeT18YQS%jK}L5dhB`4)+Sa z7EOcLH{5)QR3bR+$8NV3ac8xfL{0$5V9kjjK6c4z_FN+G3Gq=|5Uo|sde>Q>FM&Xn zSl@c&b*I1WJAFOLvyDG8bxf45X9l!scos1?HO#`7mi*LRig;omnZ@NLy@Cus+INN%6fN(qt#S| z^^GC?hCU)s4n;IpoL4Fbys{tjN;EBE-wOXOk-PaA0WXRb=f@U74%JK$wvR782y^F9 zgv+#g;Pp>gp|2W*b2OR>A~{e~X5OK$6hWC*PkZpm&cS+9gleXUt*B5#?7$^(7y{$N zHI!*(Xn)Q)6rq|aBI7^|_R}L*il7`;oRwyBWmQ<%r-(TYMNkea&PpwZdlmB)HO`la zeM6}j#1KDTiI@|Ku=y&j>=|aImcvl}ve5{_kcJqIj|rl+^8Ne_hxH!L0Iq2fm=k4Y zsBs8_D_L4ChB_;SxqAhUs?m10WvU(%;&iej=BBt`O8ne z_l`T3&pyd_7KunJ^k94E^jF`$dFL62pK!;sf8{M})hMFfQ*ZJr5$YA|>cz*rcDd`- zk9r(w1x?C8iu!qV77?q>Og+>_d)C2(?O?96$HiFYO#S z|F@k(H7R?$UisStIW{3M&*BWI2y#4ZBkJpZOJsrgY@oaQK*Zjc92*g86*4(ue0UtT zs?`0tAhr|66edjKm@+L%{ofJV1OAuo~r#EBGMo~G% zL$3F5@f}Ve>dj_*FRFJkBaU)gGeTHj8di~o z;7~-PVI0np&&h#2nP)qQBQ=O4WqRec5FCm?26OhALy*IB6l;jya&jM3P8K#($H{_# zTy^x!5i<4(){?Diayw`!pWl1E-_`fd#^(sum3pNbMd+LHaB9Y@#>!^zjd2u>B24z@ ze5*h5N)g4%Jan0F^##%EHxrs^y~}LlP>mw8Zzj3w6`@vo!`g75KipscLO}8}iKCAm z?6e29Z;X3|?DC5gV=0J6BmKOwN;*ZTmF3Vm_$`i|g4a0JGa~NWxMNNEo;&kw$mfb^ zHFJnqYs>FcE27F~6=&Sw;4I3SK{WFSaLk?0y{&>atH>KU8iZ~lp_8CKkpF%I07 zBtkXw2%zn!&uTY>Ra~AL><*yFe4cx12eHosL5(6PPY}kXyGc8r83(QSoNtuDAYQpu zzH6=sqWL_koqGnJ)qMBjF zLQD`=C#unJnA-87=fM^s)oweS`o&g3I7iiJyE-1nUX2kkx}1Y^$sB?jZCAf%5`^cf z-T?rS=YEqdj_-v-5aYA6wT~Zd3mkdE);E~ql_TU%zd>Nt$z2BbZ%$zx4Wd}-8_eM7 z6Cv*=EZS@r-sYPPLvU<3MBga1ZyIJ1#?!v@5Ds}aAsmj7I0i-3yamFn@zZ)$t@Kt+ zI2=*?7PE8d54j0B8lv8p=yy3|ujDJ{pI9kyKZ>qamslBcHn+R1G38tEkJl z4z_&`f7uohv5FcZpN}K2cRlTwXLXjC#8KAQ7E$kmj)tgK@Nndn*GR0dHlBSif(nnZ zt=}LBM-N0DA9bz8^ID;TFdo&k2-GpT1>qdEEh1VEx%bg=uKTEzxxcC{8OJihhF3Dy zT14X&5atnnCW!D|-)06!?*Kzcu6)!+94>RcqGi-pb34@BGg;r9P;v!K+#~bcPfdF> z<%lvTV!rDAf4NnOlQ(D1IE7F8!*D#GyC%@yZahy8YdtgE+(z(bf(YKWB}ap>oaFt* z6p(JVxs?1CG!Zi3Yi?NMEr?r)P1|| zACR|t{zwcFRig;sKiDd9WS!QPLlGDku+r}iT12az4a-AoUP zrbY0pg`*?#+XlDNnNK>z>Pj^>ui$ItijW;ZPuK|IX#J97E^^EY$nd0Hf4+f35x$Z+ znzu&tx$^Ih4v!!;8uljV;E+s2XjT zJ-eE4z$-TK;&Cij+k6*EIYG#YQWMRWZ? z+sQG9fR#NTz*jgFQ8mHg?RwsF{cwtiqiIX5ns0dtsF6E|=R^>!n20G5Ub~jBoX`E# z=qq)cEKJ_r^dNwiVU7=Kq(5w~!fG&sXf%Ro-YBP6&e0EGwgJjg@=522UcrVueP^-uYTWS!hQAA|-aS)AF znfXu)^{0G+&9=(wqkHN=^h6cJDtZm8C}pDKxpH79fmp@}i^V*%TyA={LFhWD>lL53djI0_$C7G3G>AMGl7 \ No newline at end of file From e2fd46f82cc9692211c3a0b61758ef2939273a9c Mon Sep 17 00:00:00 2001 From: Kris Austin Date: Fri, 7 Aug 2026 11:22:26 -0500 Subject: [PATCH 43/66] fix: default-initialize WallToolPathsParams fields (#15138) min_length_factor and is_top_or_bottom_layer had no default initializers, and the FillConcentric/FillConcentricInternal callers never set them, so WallToolPaths::removeSmallLines() thresholded on stack garbage. Which short extrusion lines it dropped then depended on memory layout, so concentric solid-infill output was nondeterministic between runs and across machines. Give every member a default, matching the adjacent FillParams. The perimeter path was already fine because it builds the struct via make_paths_params(). --- src/libslic3r/Arachne/WallToolPaths.hpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/libslic3r/Arachne/WallToolPaths.hpp b/src/libslic3r/Arachne/WallToolPaths.hpp index dde3dc785f..d7120a088c 100644 --- a/src/libslic3r/Arachne/WallToolPaths.hpp +++ b/src/libslic3r/Arachne/WallToolPaths.hpp @@ -23,14 +23,14 @@ inline coord_t meshfix_maximum_extrusion_area_deviation() { return scaled Date: Fri, 7 Aug 2026 11:28:54 -0500 Subject: [PATCH 44/66] fix: Slice all crash on a multi-plate project with an uninitialized toolbar (#15117) _update_select_plate_toolbar_stats_item(true) runs from on_action_slice_all before the select-plate toolbar has necessarily been initialized. m_all_plates_stats_item is only assigned in _init_select_plate_toolbar, so slicing a multi-plate project shortly after startup (before the Preview tab has rendered) leaves the pointer null while show_stats_item is true, and the branch dereferences it, crashing with SIGSEGV. Every other dereference of this pointer already null-checks it. Add the same check here so the all-plates stats item is left unselected until the toolbar is initialized instead of crashing. Fixes #15116 --- src/slic3r/GUI/GLCanvas3D.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 27fe44a867..303f9a2b76 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -6977,7 +6977,7 @@ void GLCanvas3D::_update_select_plate_toolbar_stats_item(bool force_selected) { else m_sel_plate_toolbar.show_stats_item = false; - if (force_selected && m_sel_plate_toolbar.show_stats_item) + if (force_selected && m_sel_plate_toolbar.show_stats_item && m_sel_plate_toolbar.m_all_plates_stats_item) m_sel_plate_toolbar.m_all_plates_stats_item->selected = true; } From 8bff9aaf32c00e01a2830987a9d6cf6488d76a77 Mon Sep 17 00:00:00 2001 From: Kris Austin Date: Fri, 7 Aug 2026 11:31:04 -0500 Subject: [PATCH 45/66] fix(GUI): honor "Ignore" when layer height exceeds the configured maximum (#14369) * fix(GUI): honor "Ignore" when layer height exceeds the configured maximum Entering a layer height above the printer's max_layer_height on the Print Settings tab fired two guards in sequence. Tab::on_value_change prompts "...Adjust to the set range automatically?" with an Adjust/Ignore choice, and ConfigManipulation::update_print_fff_config then showed an OK-only "Too large layer height. Reset to X" dialog whose result was never checked, so it always reset the value. The second guard overrode the user's "Ignore", resetting the layer height regardless. Changes: - Extract the shared Adjust/Ignore dialog into ConfigManipulation::layer_height_out_of_range_dialog, reused by the tab (Tab::on_value_change) and the per-object/part settings panels. The dialog now names the value it will clamp to and reads correctly for too-low as well as too-high. - The tab/plate path is already covered by Tab::on_value_change, so the duplicate reset is dropped from update_print_fff_config. - The per-object/part panels have no on_value_change hook, so add ConfigManipulation::check_object_layer_height and call it from the object settings update paths, gated on the edited option (changed_opt_key == "layer_height"). It prompts once per layer-height edit and does not re-prompt when unrelated object settings change after the user chose "Ignore". Fixes #14214 * refactor(GUI): unify the layer-height range check across tab and object panels Copilot review of #14369 noted that the per-object check only guarded the max at extruder 0 and skipped the too-low case, diverging from the tab. Move the whole range check into ConfigManipulation::check_layer_height, used by both Tab::on_value_change and the per-object/part panels. It takes the widest [min, max] window across the printer's extruders, offers Adjust/Ignore in both directions, and resets a near-zero value. The tab's inline block collapses to one call, dropping the duplicated limit logic. * fix(GUI): only enforce layer-height limits that are actually set max_layer_height defaults to 0 (unset), so the unconditional range check offered to clamp any layer height to 0 on presets that don't define it. Guard each branch (near-zero, too-high, too-low) so an unset limit disables that direction; the slice-time nozzle-diameter check still applies. Also run check_layer_height before update_print_fff_config in the object panels so a near-zero per-object value prompts the same way the tab does, with update_print_fff_config's fallback still covering the no-minimum case. --- src/slic3r/GUI/ConfigManipulation.cpp | 69 +++++++++++++++++----- src/slic3r/GUI/ConfigManipulation.hpp | 3 + src/slic3r/GUI/GUI_ObjectSettings.cpp | 8 ++- src/slic3r/GUI/GUI_ObjectSettings.hpp | 2 +- src/slic3r/GUI/GUI_ObjectTableSettings.cpp | 7 ++- src/slic3r/GUI/GUI_ObjectTableSettings.hpp | 2 +- src/slic3r/GUI/Tab.cpp | 38 +----------- 7 files changed, 72 insertions(+), 57 deletions(-) diff --git a/src/slic3r/GUI/ConfigManipulation.cpp b/src/slic3r/GUI/ConfigManipulation.cpp index e46faa803a..3885a391b8 100644 --- a/src/slic3r/GUI/ConfigManipulation.cpp +++ b/src/slic3r/GUI/ConfigManipulation.cpp @@ -12,6 +12,7 @@ #include "libslic3r/GCode/AdaptivePAProcessor.hpp" #include "Plater.hpp" +#include #include #include @@ -250,6 +251,59 @@ void ConfigManipulation::check_chamber_minimal_temperature(DynamicPrintConfig* c } } +void ConfigManipulation::layer_height_limits(double& min_layer_height, double& max_layer_height) const +{ + const DynamicPrintConfig& printer_config = GUI::wxGetApp().preset_bundle->printers.get_edited_preset().config; + const std::vector& min_limits = printer_config.option("min_layer_height")->values; + const std::vector& max_limits = printer_config.option("max_layer_height")->values; + min_layer_height = *std::min_element(min_limits.begin(), min_limits.end()); + max_layer_height = *std::max_element(max_limits.begin(), max_limits.end()); +} + +bool ConfigManipulation::check_layer_height(DynamicPrintConfig* config) +{ + double min_layer_height = 0., max_layer_height = 0.; + layer_height_limits(min_layer_height, max_layer_height); + const double layer_height = config->opt_float("layer_height"); + + if (min_layer_height > EPSILON && layer_height < EPSILON) { + const wxString msg_text = wxString::Format(_L("Layer height is too small. It will be set to the minimum (%g mm)."), min_layer_height); + MessageDialog dialog(wxGetApp().plater(), msg_text, "", wxICON_WARNING | wxOK); + dialog.SetButtonLabel(wxID_OK, _L("OK")); + is_msg_dlg_already_exist = true; + dialog.ShowModal(); + is_msg_dlg_already_exist = false; + DynamicPrintConfig new_conf = *config; + new_conf.set_key_value("layer_height", new ConfigOptionFloat(min_layer_height)); + apply(config, &new_conf); + return true; + } + if (max_layer_height > EPSILON && layer_height > max_layer_height + EPSILON) + return layer_height_out_of_range_dialog(config, max_layer_height); + if (min_layer_height > EPSILON && layer_height < min_layer_height - EPSILON) + return layer_height_out_of_range_dialog(config, min_layer_height); + return false; +} + +bool ConfigManipulation::layer_height_out_of_range_dialog(DynamicPrintConfig* config, double clamp_to) +{ + wxString msg_text = _(L("Layer height is outside the limits set in Printer Settings -> Extruder -> Layer height limits, " + "this may cause printing quality issues.")); + msg_text += "\n\n" + wxString::Format(_L("Adjust it to the limit (%g mm) automatically?"), clamp_to); + MessageDialog dialog(wxGetApp().plater(), msg_text, "", wxICON_WARNING | wxYES | wxNO); + dialog.SetButtonLabel(wxID_YES, _L("Adjust")); + dialog.SetButtonLabel(wxID_NO, _L("Ignore")); + is_msg_dlg_already_exist = true; + const bool adjust = dialog.ShowModal() == wxID_YES; + if (adjust) { + DynamicPrintConfig new_conf = *config; + new_conf.set_key_value("layer_height", new ConfigOptionFloat(clamp_to)); + apply(config, &new_conf); + } + is_msg_dlg_already_exist = false; + return adjust; +} + void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, const bool is_global_config, const bool is_plate_config) { // #ys_FIXME_to_delete @@ -264,7 +318,6 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con // layer_height shouldn't be equal to zero auto layer_height = config->opt_float("layer_height"); - auto gpreset = GUI::wxGetApp().preset_bundle->printers.get_edited_preset(); if (layer_height < EPSILON) { const wxString msg_text = _(L("Layer height too small\nIt has been reset to 0.2")); @@ -277,20 +330,6 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con is_msg_dlg_already_exist = false; } - //BBS: limite the max layer_herght - auto max_lh = gpreset.config.opt_float("max_layer_height",0); - if (max_lh > 0.2 && layer_height > max_lh+ EPSILON) - { - const wxString msg_text = wxString::Format(L"Too large layer height.\nReset to %0.3f.", max_lh); - MessageDialog dialog(nullptr, msg_text, "", wxICON_WARNING | wxOK); - DynamicPrintConfig new_conf = *config; - is_msg_dlg_already_exist = true; - dialog.ShowModal(); - new_conf.set_key_value("layer_height", new ConfigOptionFloat(max_lh)); - apply(config, &new_conf); - is_msg_dlg_already_exist = false; - } - //BBS: ironing_spacing shouldn't be too small or equal to zero if (config->opt_float("ironing_spacing") < 0.05) { diff --git a/src/slic3r/GUI/ConfigManipulation.hpp b/src/slic3r/GUI/ConfigManipulation.hpp index d191ef2c4f..ac53ffb4bb 100644 --- a/src/slic3r/GUI/ConfigManipulation.hpp +++ b/src/slic3r/GUI/ConfigManipulation.hpp @@ -86,6 +86,9 @@ public: void check_filament_max_volumetric_speed(DynamicPrintConfig *config); void check_chamber_temperature(DynamicPrintConfig* config); void check_chamber_minimal_temperature(DynamicPrintConfig* config); + bool check_layer_height(DynamicPrintConfig* config); + bool layer_height_out_of_range_dialog(DynamicPrintConfig* config, double clamp_to); + void layer_height_limits(double& min_layer_height, double& max_layer_height) const; void set_is_BBL_Printer(bool is_bbl_printer) { is_BBL_Printer = is_bbl_printer; }; bool get_is_BBL_Printer() { return is_BBL_Printer; }; // SLA print diff --git a/src/slic3r/GUI/GUI_ObjectSettings.cpp b/src/slic3r/GUI/GUI_ObjectSettings.cpp index 65cd99a2fa..25e6204a40 100644 --- a/src/slic3r/GUI/GUI_ObjectSettings.cpp +++ b/src/slic3r/GUI/GUI_ObjectSettings.cpp @@ -139,7 +139,7 @@ bool ObjectSettings::update_settings_list() optgroup->sidetext_width = 5; optgroup->m_on_change = [this, config](const t_config_option_key& opt_id, const boost::any& value) { - this->update_config_values(config); + this->update_config_values(config, opt_id); wxGetApp().obj_list()->changed_object(); }; // call back for rescaling of the extracolumn control @@ -325,7 +325,7 @@ bool ObjectSettings::add_missed_options(ModelConfig* config_to, const DynamicPri return is_added; } -void ObjectSettings::update_config_values(ModelConfig* config) +void ObjectSettings::update_config_values(ModelConfig* config, const std::string& changed_opt_key) { const auto objects_model = wxGetApp().obj_list()->GetModel(); const auto item = wxGetApp().obj_list()->GetSelection(); @@ -403,6 +403,10 @@ void ObjectSettings::update_config_values(ModelConfig* config) } main_config.apply(config->get(), true); + + if (printer_technology == ptFFF && changed_opt_key == "layer_height") + config_manipulation.check_layer_height(&main_config); + printer_technology == ptFFF ? config_manipulation.update_print_fff_config(&main_config) : config_manipulation.update_print_sla_config(&main_config) ; diff --git a/src/slic3r/GUI/GUI_ObjectSettings.hpp b/src/slic3r/GUI/GUI_ObjectSettings.hpp index 8903f8748b..21146425cc 100644 --- a/src/slic3r/GUI/GUI_ObjectSettings.hpp +++ b/src/slic3r/GUI/GUI_ObjectSettings.hpp @@ -66,7 +66,7 @@ public: * we should add sparse_infill_pattern to avoid endless loop in update */ bool add_missed_options(ModelConfig *config_to, const DynamicPrintConfig &config_from); - void update_config_values(ModelConfig *config); + void update_config_values(ModelConfig *config, const std::string& changed_opt_key = ""); void UpdateAndShow(const bool show); void msw_rescale(); void sys_color_changed(); diff --git a/src/slic3r/GUI/GUI_ObjectTableSettings.cpp b/src/slic3r/GUI/GUI_ObjectTableSettings.cpp index 37ccfb8e41..e72c421a08 100644 --- a/src/slic3r/GUI/GUI_ObjectTableSettings.cpp +++ b/src/slic3r/GUI/GUI_ObjectTableSettings.cpp @@ -223,7 +223,7 @@ bool ObjectTableSettings::update_settings_list(bool is_object, bool is_multiple_ std::weak_ptr weak_optgroup(optgroup); optgroup->m_on_change = [this, is_object, object, config, group_category](const t_config_option_key &opt_id, const boost::any &value) { this->m_parent->Freeze(); - this->update_config_values(is_object, object, config, group_category); + this->update_config_values(is_object, object, config, group_category, opt_id); wxGetApp().obj_list()->changed_object(); this->m_parent->Thaw(); //update_extra_column_visible_status(optgroup.get(), cat.second, config); @@ -369,7 +369,7 @@ int ObjectTableSettings::update_extra_column_visible_status(ConfigOptionsGroup* return count; } -void ObjectTableSettings::update_config_values(bool is_object, ModelObject* object, ModelConfig* config, const std::string& category) +void ObjectTableSettings::update_config_values(bool is_object, ModelObject* object, ModelConfig* config, const std::string& category, const std::string& changed_opt_key) { int different_count = 0; const auto printer_technology = wxGetApp().plater()->printer_technology(); @@ -403,6 +403,9 @@ void ObjectTableSettings::update_config_values(bool is_object, ModelObject* obje config_manipulation.set_is_BBL_Printer(wxGetApp().preset_bundle->is_bbl_vendor()); + if (printer_technology == ptFFF && changed_opt_key == "layer_height") + config_manipulation.check_layer_height(&main_config); + printer_technology == ptFFF ? config_manipulation.update_print_fff_config(&main_config) : config_manipulation.update_print_sla_config(&main_config) ; diff --git a/src/slic3r/GUI/GUI_ObjectTableSettings.hpp b/src/slic3r/GUI/GUI_ObjectTableSettings.hpp index 534426f554..39e7e514e2 100644 --- a/src/slic3r/GUI/GUI_ObjectTableSettings.hpp +++ b/src/slic3r/GUI/GUI_ObjectTableSettings.hpp @@ -70,7 +70,7 @@ public: bool add_missed_options(ModelConfig *config_to, const DynamicPrintConfig &config_from); //return visible count int update_extra_column_visible_status(ConfigOptionsGroup* option_group, const std::vector& option_keys, ModelConfig* config); - void update_config_values(bool is_object, ModelObject* object, ModelConfig* config, const std::string& category); + void update_config_values(bool is_object, ModelObject* object, ModelConfig* config, const std::string& category, const std::string& changed_opt_key = ""); void UpdateAndShow(int row, const bool show, bool is_object, bool is_multiple_selection, ModelObject* object, ModelConfig* config, const std::string& category); void ValueChanged(int row, bool is_object, ModelObject* object, ModelConfig* config, const std::string& category, const std::string& key); void resetAllValues(int row, bool is_object, ModelObject* object, ModelConfig* config, const std::string& category); diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 64c2b586c8..1a31355d0e 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -2136,43 +2136,9 @@ void Tab::on_value_change(const std::string& opt_key, const boost::any& value) m_last_sparse_infill_rotate_template_value = m_config->opt_string("sparse_infill_rotate_template"); } - if(opt_key=="layer_height"){ - auto min_layer_height_from_nozzle=m_preset_bundle->full_config().option("min_layer_height")->values; - auto max_layer_height_from_nozzle=m_preset_bundle->full_config().option("max_layer_height")->values; - auto layer_height_floor = *std::min_element(min_layer_height_from_nozzle.begin(), min_layer_height_from_nozzle.end()); - auto layer_height_ceil = *std::max_element(max_layer_height_from_nozzle.begin(), max_layer_height_from_nozzle.end()); - const auto lh = m_config->opt_float("layer_height"); - bool exceed_minimum_flag = lh < layer_height_floor; - bool exceed_maximum_flag = lh > layer_height_ceil; - - if (exceed_maximum_flag || exceed_minimum_flag) { - if (lh < EPSILON) { - auto msg_text = _(L("Layer height is too small.\nIt will set to min_layer_height\n")); - MessageDialog dialog(wxGetApp().plater(), msg_text, "", wxICON_WARNING | wxOK); - dialog.SetButtonLabel(wxID_OK, _L("OK")); - dialog.ShowModal(); - auto new_conf = *m_config; - new_conf.set_key_value("layer_height", new ConfigOptionFloat(layer_height_floor)); - m_config_manipulation.apply(m_config, &new_conf); - } else { - wxString msg_text = _(L("Layer height exceeds the limit in Printer Settings -> Extruder -> Layer height limits, " - "this may cause printing quality issues.")); - msg_text += "\n\n" + _(L("Adjust to the set range automatically?\n")); - MessageDialog dialog(wxGetApp().plater(), msg_text, "", wxICON_WARNING | wxYES | wxNO); - dialog.SetButtonLabel(wxID_YES, _L("Adjust")); - dialog.SetButtonLabel(wxID_NO, _L("Ignore")); - auto answer = dialog.ShowModal(); - auto new_conf = *m_config; - if (answer == wxID_YES) { - if (exceed_maximum_flag) - new_conf.set_key_value("layer_height", new ConfigOptionFloat(layer_height_ceil)); - if (exceed_minimum_flag) - new_conf.set_key_value("layer_height", new ConfigOptionFloat(layer_height_floor)); - m_config_manipulation.apply(m_config, &new_conf); - } - } + if (opt_key == "layer_height") { + if (m_config_manipulation.check_layer_height(m_config)) wxGetApp().plater()->update(); - } } string opt_key_without_idx = opt_key.substr(0, opt_key.find('#')); From 74aed7a2bb4bb2452ca0048ecfb658c55c503d72 Mon Sep 17 00:00:00 2001 From: Kris Austin Date: Fri, 7 Aug 2026 11:33:37 -0500 Subject: [PATCH 46/66] test: finish the temp-file cleanup (#14976) Follow-up to #14785. Routes the tests that still hand-rolled temp paths through the shared helpers and unifies the temp guards. - Add ScopedTemporaryDir and a shared ScopedTemporaryPath base under it and ScopedTemporaryFile. - Move test_3mf's round-trip .3mf output out of the TEST_DATA_DIR source tree (a fixed-name leak) and test_toolordering's fixed-name temp .gcode (a sharding collision) onto ScopedTemporaryFile. - Move test_config, test_slicing_pipeline_bindings, the test_3mf backup dirs, and test_preset_bundle_loading onto the guards. - Make slic3rutils ScopedDataDir compose ScopedTemporaryDir; dedupe test_network_versions' fixture and delete test_plugin_lifecycle's duplicate. --- tests/libslic3r/test_3mf.cpp | 36 +++----- tests/libslic3r/test_config.cpp | 7 +- .../libslic3r/test_preset_bundle_loading.cpp | 50 ++++------- .../test_toolordering_nozzle_group.cpp | 9 +- tests/slic3rutils/plugin_test_utils.hpp | 20 ++--- tests/slic3rutils/test_network_versions.cpp | 19 ++--- tests/slic3rutils/test_plugin_lifecycle.cpp | 28 +------ .../test_slicing_pipeline_bindings.cpp | 8 +- tests/test_utils.hpp | 82 +++++++++++-------- 9 files changed, 106 insertions(+), 153 deletions(-) diff --git a/tests/libslic3r/test_3mf.cpp b/tests/libslic3r/test_3mf.cpp index a6fe3ed460..c839149f5f 100644 --- a/tests/libslic3r/test_3mf.cpp +++ b/tests/libslic3r/test_3mf.cpp @@ -155,10 +155,8 @@ SCENARIO("H2C multi-nozzle .3mf round-trip", "[3mf][MultiNozzle]") { // store_bbs_3mf stages Metadata/project_settings.config through the model's backup path; // point it at a writable temp dir (the default lives under a read-only root in CI). - std::string backup_dir = - (boost::filesystem::temp_directory_path() / boost::filesystem::unique_path("orca_mn_%%%%%%%%")).string(); - boost::filesystem::create_directories(backup_dir); - model.set_backup_path(backup_dir); + ScopedTemporaryDir backup_dir("orca_mn"); + model.set_backup_path(backup_dir.string()); // Global (printer) config: give nozzle_volume_type a non-default value so the slice_info // read-back is a meaningful assertion (High Flow == 1). @@ -180,7 +178,8 @@ SCENARIO("H2C multi-nozzle .3mf round-trip", "[3mf][MultiNozzle]") { plate->config.set_key_value("enable_filament_dynamic_map", new ConfigOptionBool(true)); WHEN("stored to and reloaded from a .3mf") { - std::string test_file = std::string(TEST_DATA_DIR) + "/test_3mf/mn_roundtrip.3mf"; + ScopedTemporaryFile temp(".3mf"); + const std::string test_file = temp.string(); StoreParams store_params; store_params.path = test_file.c_str(); @@ -202,8 +201,6 @@ SCENARIO("H2C multi-nozzle .3mf round-trip", "[3mf][MultiNozzle]") { bool loaded = load_bbs_3mf(test_file.c_str(), &dst_config, &ctxt, &dst_model, &dst_plates, &project_presets, &is_bbl_3mf, &is_orca_3mf, &file_version, nullptr, LoadStrategy::LoadModel | LoadStrategy::LoadConfig); - boost::filesystem::remove(test_file); - THEN("every multi-nozzle key round-trips as expected") { REQUIRE(loaded); REQUIRE(dst_plates.size() >= 1); @@ -233,7 +230,6 @@ SCENARIO("H2C multi-nozzle .3mf round-trip", "[3mf][MultiNozzle]") { release_PlateData_list(dst_plates); } delete plate; // store_bbs_3mf does not take ownership of the source plate - boost::filesystem::remove_all(backup_dir); } } @@ -250,10 +246,8 @@ SCENARIO("Non-standard nozzle diameter survives .3mf save on a single-nozzle pri REQUIRE(load_stl(src_file.c_str(), &model)); model.add_default_instances(); - std::string backup_dir = - (boost::filesystem::temp_directory_path() / boost::filesystem::unique_path("orca_nd_%%%%%%%%")).string(); - boost::filesystem::create_directories(backup_dir); - model.set_backup_path(backup_dir); + ScopedTemporaryDir backup_dir("orca_nd"); + model.set_backup_path(backup_dir.string()); // Single extruder with a non-standard 0.5 mm nozzle; extruder_max_nozzle_count stays at its // default (no nozzle cluster), so the writer must emit the exact config diameter. @@ -276,7 +270,8 @@ SCENARIO("Non-standard nozzle diameter survives .3mf save on a single-nozzle pri plate->slice_filaments_info.push_back(fi); WHEN("stored to and reloaded from a .3mf") { - std::string test_file = std::string(TEST_DATA_DIR) + "/test_3mf/nd_roundtrip.3mf"; + ScopedTemporaryFile temp(".3mf"); + const std::string test_file = temp.string(); StoreParams store_params; store_params.path = test_file.c_str(); @@ -296,8 +291,6 @@ SCENARIO("Non-standard nozzle diameter survives .3mf save on a single-nozzle pri bool loaded = load_bbs_3mf(test_file.c_str(), &dst_config, &ctxt, &dst_model, &dst_plates, &project_presets, &is_bbl_3mf, &is_orca_3mf, &file_version, nullptr, LoadStrategy::LoadModel | LoadStrategy::LoadConfig); - boost::filesystem::remove(test_file); - THEN("the saved nozzle diameter is the exact 0.5, not the rounded 0.4") { REQUIRE(loaded); REQUIRE(dst_plates.size() >= 1); @@ -315,7 +308,6 @@ SCENARIO("Non-standard nozzle diameter survives .3mf save on a single-nozzle pri release_PlateData_list(dst_plates); } delete plate; // store_bbs_3mf does not take ownership of the source plate - boost::filesystem::remove_all(backup_dir); } } @@ -436,10 +428,8 @@ SCENARIO("Nozzle-group metadata .3mf round-trip", "[3mf][MultiNozzle]") { REQUIRE(load_stl(src_file.c_str(), &model)); model.add_default_instances(); - std::string backup_dir = - (boost::filesystem::temp_directory_path() / boost::filesystem::unique_path("orca_ng_%%%%%%%%")).string(); - boost::filesystem::create_directories(backup_dir); - model.set_backup_path(backup_dir); + ScopedTemporaryDir backup_dir("orca_ng"); + model.set_backup_path(backup_dir.string()); DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); @@ -459,7 +449,8 @@ SCENARIO("Nozzle-group metadata .3mf round-trip", "[3mf][MultiNozzle]") { plate->config.set_key_value("filament_map", new ConfigOptionInts({ 1, 2, 1 })); WHEN("stored to and reloaded from a .3mf") { - std::string test_file = std::string(TEST_DATA_DIR) + "/test_3mf/ng_roundtrip.3mf"; + ScopedTemporaryFile temp(".3mf"); + const std::string test_file = temp.string(); StoreParams store_params; store_params.path = test_file.c_str(); @@ -479,8 +470,6 @@ SCENARIO("Nozzle-group metadata .3mf round-trip", "[3mf][MultiNozzle]") { bool loaded = load_bbs_3mf(test_file.c_str(), &dst_config, &ctxt, &dst_model, &dst_plates, &project_presets, &is_bbl_3mf, &is_orca_3mf, &file_version, nullptr, LoadStrategy::LoadModel | LoadStrategy::LoadConfig); - boost::filesystem::remove(test_file); - THEN("the tags round-trip into the loaded plate's nozzles_info") { REQUIRE(loaded); REQUIRE(dst_plates.size() >= 1); @@ -506,6 +495,5 @@ SCENARIO("Nozzle-group metadata .3mf round-trip", "[3mf][MultiNozzle]") { release_PlateData_list(dst_plates); } delete plate; - boost::filesystem::remove_all(backup_dir); } } diff --git a/tests/libslic3r/test_config.cpp b/tests/libslic3r/test_config.cpp index f256ae3442..5bc825c3b2 100644 --- a/tests/libslic3r/test_config.cpp +++ b/tests/libslic3r/test_config.cpp @@ -4,6 +4,8 @@ #include "libslic3r/PrintConfigConstants.hpp" #include "libslic3r/LocalesUtils.hpp" +#include "test_utils.hpp" + #include #include #include @@ -407,8 +409,7 @@ SCENARIO("update_diff_values_to_child_config tolerates legacy machine-limit vect // } TEST_CASE("save_to_json round-trips plugin capability references as strings", "[Config][plugins]") { - namespace fs = boost::filesystem; - const fs::path tmp = fs::temp_directory_path() / fs::unique_path("orca_plugins_%%%%-%%%%.json"); + ScopedTemporaryFile tmp(".json"); const std::vector refs = { "local_plugin;;inset", "cloud_plugin;550e8400-e29b-41d4-a716-446655440000;inset" @@ -435,8 +436,6 @@ TEST_CASE("save_to_json round-trips plugin capability references as strings", "[ REQUIRE(reloaded.load_from_json(tmp.string(), substitutions, true, key_values, reason) == 0); CHECK(reason.empty()); CHECK(reloaded.option("slicing_pipeline_plugin")->values == refs); - - fs::remove(tmp); } TEST_CASE("plugin capability references survive string-map serialization", "[Config][plugins]") { diff --git a/tests/libslic3r/test_preset_bundle_loading.cpp b/tests/libslic3r/test_preset_bundle_loading.cpp index c697c4461c..844ccb6a8b 100644 --- a/tests/libslic3r/test_preset_bundle_loading.cpp +++ b/tests/libslic3r/test_preset_bundle_loading.cpp @@ -5,28 +5,14 @@ #include "libslic3r/PresetBundle.hpp" #include "libslic3r/AppConfig.hpp" +#include "test_utils.hpp" + using namespace Slic3r; namespace { namespace fs = boost::filesystem; -struct TempPresetDir { - fs::path path; - - TempPresetDir() - { - path = fs::temp_directory_path() / fs::unique_path("orcaslicer-preset-%%%%-%%%%-%%%%"); - fs::create_directories(path); - } - - ~TempPresetDir() - { - boost::system::error_code ec; - fs::remove_all(path, ec); - } -}; - void write_print_preset(const DynamicPrintConfig &default_config, const fs::path &file, const std::string &name, const std::string &inherits = {}) { DynamicPrintConfig config(default_config); @@ -82,17 +68,17 @@ struct RenameTestCollection : public PresetCollection TEST_CASE("Preset identity is canonicalized from load path", "[Preset][Identity]") { - TempPresetDir temp_dir; + ScopedTemporaryDir temp_dir; PresetBundle bundle; PresetsConfigSubstitutions substitutions; - write_print_preset(bundle.prints.default_preset().config, temp_dir.path / PRESET_PRINT_NAME / "User.json", "User"); - write_print_preset(bundle.prints.default_preset().config, temp_dir.path / PRESET_LOCAL_DIR / "bundle-1" / PRESET_PRINT_NAME / "LocalBundle.json", "LocalBundle"); - write_print_preset(bundle.prints.default_preset().config, temp_dir.path / PRESET_SUBSCRIBED_DIR / "remote-1" / PRESET_PRINT_NAME / "Subscribed.json", "Subscribed"); + write_print_preset(bundle.prints.default_preset().config, temp_dir.path() / PRESET_PRINT_NAME / "User.json", "User"); + write_print_preset(bundle.prints.default_preset().config, temp_dir.path() / PRESET_LOCAL_DIR / "bundle-1" / PRESET_PRINT_NAME / "LocalBundle.json", "LocalBundle"); + write_print_preset(bundle.prints.default_preset().config, temp_dir.path() / PRESET_SUBSCRIBED_DIR / "remote-1" / PRESET_PRINT_NAME / "Subscribed.json", "Subscribed"); - bundle.prints.load_presets(temp_dir.path.string(), PRESET_PRINT_NAME, substitutions, ForwardCompatibilitySubstitutionRule::Disable); - bundle.prints.load_presets((temp_dir.path / PRESET_LOCAL_DIR / "bundle-1").string(), PRESET_PRINT_NAME, substitutions, ForwardCompatibilitySubstitutionRule::Disable); - bundle.prints.load_presets((temp_dir.path / PRESET_SUBSCRIBED_DIR / "remote-1").string(), PRESET_PRINT_NAME, substitutions, ForwardCompatibilitySubstitutionRule::Disable); + bundle.prints.load_presets(temp_dir.path().string(), PRESET_PRINT_NAME, substitutions, ForwardCompatibilitySubstitutionRule::Disable); + bundle.prints.load_presets((temp_dir.path() / PRESET_LOCAL_DIR / "bundle-1").string(), PRESET_PRINT_NAME, substitutions, ForwardCompatibilitySubstitutionRule::Disable); + bundle.prints.load_presets((temp_dir.path() / PRESET_SUBSCRIBED_DIR / "remote-1").string(), PRESET_PRINT_NAME, substitutions, ForwardCompatibilitySubstitutionRule::Disable); const Preset *root_user = bundle.prints.find_preset("User"); REQUIRE(root_user != nullptr); @@ -112,14 +98,14 @@ TEST_CASE("Preset identity is canonicalized from load path", "[Preset][Identity] TEST_CASE("Legacy bundle import without bundle metadata stays in the user preset directory", "[Preset][Identity]") { - TempPresetDir temp_dir; + ScopedTemporaryDir temp_dir; PresetBundle bundle; PresetsConfigSubstitutions substitutions; std::vector result; int overwrite = 0; - std::string file = (temp_dir.path / "legacy-bundle" / "Imported.json").string(); - const fs::path user_root = temp_dir.path / "user"; + std::string file = (temp_dir.path() / "legacy-bundle" / "Imported.json").string(); + const fs::path user_root = temp_dir.path() / "user"; write_print_preset(bundle.prints.default_preset().config, file, "Imported"); fs::create_directories(user_root); @@ -252,7 +238,7 @@ TEST_CASE("find_preset2 auto-matches removed Generic vendor profiles to the libr TEST_CASE("Renamed parent is normalized into a loaded preset's inherits", "[Preset][Rename]") { - TempPresetDir temp_dir; + ScopedTemporaryDir temp_dir; RenameTestCollection coll; // Current parent, renamed from "Old Process". @@ -262,10 +248,10 @@ TEST_CASE("Renamed parent is normalized into a loaded preset's inherits", "[Pres // A user preset on disk that still inherits the OLD name. write_preset_with_inherits(coll.default_preset().config, - temp_dir.path / PRESET_PRINT_NAME / "Child.json", "Child", "Old Process"); + temp_dir.path() / PRESET_PRINT_NAME / "Child.json", "Child", "Old Process"); PresetsConfigSubstitutions substitutions; - coll.load_presets(temp_dir.path.string(), PRESET_PRINT_NAME, substitutions, + coll.load_presets(temp_dir.path().string(), PRESET_PRINT_NAME, substitutions, ForwardCompatibilitySubstitutionRule::Disable); const Preset *child = coll.find_preset("Child"); @@ -279,17 +265,17 @@ TEST_CASE("Renamed parent is normalized into a loaded preset's inherits", "[Pres TEST_CASE("Removed Generic parent is normalized into a loaded filament's inherits", "[Preset][Rename]") { - TempPresetDir temp_dir; + ScopedTemporaryDir temp_dir; PresetBundle bundle; add_inmemory_preset(bundle.filaments, "Generic PLA @System"); // A user filament that still inherits a removed " Generic PLA" profile. write_preset_with_inherits(bundle.filaments.default_preset().config, - temp_dir.path / PRESET_FILAMENT_NAME / "MyPLA.json", "MyPLA", "Voron Generic PLA"); + temp_dir.path() / PRESET_FILAMENT_NAME / "MyPLA.json", "MyPLA", "Voron Generic PLA"); PresetsConfigSubstitutions substitutions; - bundle.filaments.load_presets(temp_dir.path.string(), PRESET_FILAMENT_NAME, substitutions, + bundle.filaments.load_presets(temp_dir.path().string(), PRESET_FILAMENT_NAME, substitutions, ForwardCompatibilitySubstitutionRule::Disable); const Preset *child = bundle.filaments.find_preset("MyPLA"); diff --git a/tests/libslic3r/test_toolordering_nozzle_group.cpp b/tests/libslic3r/test_toolordering_nozzle_group.cpp index dc54aae80a..26e36c0dbf 100644 --- a/tests/libslic3r/test_toolordering_nozzle_group.cpp +++ b/tests/libslic3r/test_toolordering_nozzle_group.cpp @@ -8,6 +8,8 @@ #include "libslic3r/Print.hpp" #include "libslic3r/TriangleMesh.hpp" +#include "test_utils.hpp" + #include #include #include @@ -708,10 +710,9 @@ TEST_CASE("Sequential selector prints publish a stitched result and cache the pl REQUIRE(print.config().filament_self_index.values.size() >= print.config().filament_map.values.size()); // Export must consume the cached plans and produce g-code without throwing. - boost::filesystem::path gcode_path = boost::filesystem::temp_directory_path() / "orca_seq_dynamic_publish_test.gcode"; - REQUIRE_NOTHROW(print.export_gcode(gcode_path.string(), nullptr, nullptr)); - REQUIRE(boost::filesystem::exists(gcode_path)); - boost::filesystem::remove(gcode_path); + ScopedTemporaryFile gcode(".gcode"); + REQUIRE_NOTHROW(print.export_gcode(gcode.string(), nullptr, nullptr)); + REQUIRE(boost::filesystem::exists(gcode.path())); } TEST_CASE("Per-variant expansion gives migrating filaments one slot per variant", "[PrintConfig][H2C][Dynamic]") diff --git a/tests/slic3rutils/plugin_test_utils.hpp b/tests/slic3rutils/plugin_test_utils.hpp index 52e503f6f4..d60b3441c8 100644 --- a/tests/slic3rutils/plugin_test_utils.hpp +++ b/tests/slic3rutils/plugin_test_utils.hpp @@ -6,6 +6,8 @@ #include +#include "test_utils.hpp" + namespace Slic3r { // Point data_dir() at a throwaway directory for the lifetime of a test and @@ -13,24 +15,20 @@ namespace Slic3r { // disposable tree and tests don't leak state into each other. struct ScopedDataDir { + ScopedTemporaryDir tmp; // owns the temp dir (create + recursive remove) + boost::filesystem::path dir; // = tmp.path(); kept as a member for callers std::string previous; - boost::filesystem::path dir; explicit ScopedDataDir(const std::string& tag) + : tmp("orca-" + tag), dir(tmp.path()), previous(data_dir()) { - namespace fs = boost::filesystem; - previous = data_dir(); - dir = fs::temp_directory_path() / fs::unique_path("orca-" + tag + "-%%%%-%%%%"); - fs::create_directories(dir); set_data_dir(dir.string()); } - ~ScopedDataDir() - { - set_data_dir(previous); - boost::system::error_code ec; - boost::filesystem::remove_all(dir, ec); - } + ~ScopedDataDir() { set_data_dir(previous); } // tmp removes the directory + + // The plugin manager scans {data_dir}/orca_plugins. + boost::filesystem::path plugins_dir() const { return dir / "orca_plugins"; } ScopedDataDir(const ScopedDataDir&) = delete; ScopedDataDir& operator=(const ScopedDataDir&) = delete; diff --git a/tests/slic3rutils/test_network_versions.cpp b/tests/slic3rutils/test_network_versions.cpp index efe8b5d831..349082a965 100644 --- a/tests/slic3rutils/test_network_versions.cpp +++ b/tests/slic3rutils/test_network_versions.cpp @@ -6,6 +6,8 @@ #include "libslic3r/Utils.hpp" #include "slic3r/Utils/bambu_networking.hpp" +#include "plugin_test_utils.hpp" + using namespace Slic3r; namespace fs = boost::filesystem; @@ -25,27 +27,16 @@ static const char* PLUGIN_EXT = ".so"; struct PluginFolderFixture { - fs::path root; - std::string previous_data_dir; + ScopedDataDir data{"netver"}; PluginFolderFixture() { - previous_data_dir = data_dir(); - root = fs::temp_directory_path() / fs::unique_path("orca-netver-%%%%%%%%"); - fs::create_directories(root / "plugins"); - set_data_dir(root.string()); - } - - ~PluginFolderFixture() - { - set_data_dir(previous_data_dir); - boost::system::error_code ec; - fs::remove_all(root, ec); + fs::create_directories(data.dir / "plugins"); } void add_plugin(const std::string& version) { - boost::nowide::ofstream f((root / "plugins" / (PLUGIN_PREFIX + version + PLUGIN_EXT)).string()); + boost::nowide::ofstream f((data.dir / "plugins" / (PLUGIN_PREFIX + version + PLUGIN_EXT)).string()); f << "stub"; } }; diff --git a/tests/slic3rutils/test_plugin_lifecycle.cpp b/tests/slic3rutils/test_plugin_lifecycle.cpp index c49471de28..63a4e6827b 100644 --- a/tests/slic3rutils/test_plugin_lifecycle.cpp +++ b/tests/slic3rutils/test_plugin_lifecycle.cpp @@ -6,6 +6,8 @@ #include #include +#include "plugin_test_utils.hpp" + #include #include @@ -25,32 +27,6 @@ namespace fs = boost::filesystem; namespace { -// Point data_dir() at a throwaway directory for the lifetime of a test and restore the previous -// value afterwards, so discovery scans a disposable {data_dir}/orca_plugins tree and tests don't -// leak state into each other. -struct ScopedDataDir -{ - std::string previous; - fs::path dir; - - explicit ScopedDataDir(const std::string& tag) - { - previous = data_dir(); - dir = fs::temp_directory_path() / fs::unique_path("orca-" + tag + "-%%%%-%%%%"); - fs::create_directories(dir); - set_data_dir(dir.string()); - } - - ~ScopedDataDir() - { - set_data_dir(previous); - boost::system::error_code ec; - fs::remove_all(dir, ec); - } - - fs::path plugins_dir() const { return dir / "orca_plugins"; } -}; - // Brings the plugin system up, and tears it down explicitly at the end of the test. // // Shutting the interpreter down here, rather than leaving it to PythonInterpreter's static diff --git a/tests/slic3rutils/test_slicing_pipeline_bindings.cpp b/tests/slic3rutils/test_slicing_pipeline_bindings.cpp index 8f00b6f31b..5e819c09e0 100644 --- a/tests/slic3rutils/test_slicing_pipeline_bindings.cpp +++ b/tests/slic3rutils/test_slicing_pipeline_bindings.cpp @@ -16,6 +16,8 @@ TEST_CASE("SlicingPipeline capability-type string maps round-trip", "[slicing_pi #include "libslic3r/Point.hpp" #include "libslic3r/ExPolygon.hpp" #include "libslic3r/Surface.hpp" + +#include "test_utils.hpp" #include "libslic3r/Layer.hpp" #include "libslic3r/ExtrusionEntity.hpp" #include "libslic3r/ExtrusionEntityCollection.hpp" @@ -142,7 +144,7 @@ TEST_CASE("orca.slicing psGCodePostProcess context: file edit in place + config import_orca_module(); py::gil_scoped_acquire gil; - const fs::path gpath = fs::temp_directory_path() / fs::unique_path("orca_pp_%%%%-%%%%.gcode"); + ScopedTemporaryFile gpath(".gcode"); { boost::nowide::ofstream ofs(gpath.string()); ofs << "; header\nG1 X0 Y0\n"; @@ -196,9 +198,7 @@ _pp_result = Stamp().execute(_pp_ctx) boost::nowide::ifstream ifs(gpath.string()); std::stringstream ss; ss << ifs.rdbuf(); contents = ss.str(); } - CHECK(contents.find("; stamped by File") != std::string::npos); - fs::remove(gpath); -} + CHECK(contents.find("; stamped by File") != std::string::npos);} // --------------------------------------------------------------------------- // Toolpath helpers for the raw-graph tests. diff --git a/tests/test_utils.hpp b/tests/test_utils.hpp index d928f2f41e..97e684fd6e 100644 --- a/tests/test_utils.hpp +++ b/tests/test_utils.hpp @@ -27,26 +27,47 @@ inline Slic3r::TriangleMesh load_model(const std::string &obj_filename) return mesh; } -// RAII holder for a unique temporary file path, removed when the guard goes out -// of scope so a failing assertion never leaks it. Uses the system temp dir with -// a unique name (parallel-safe, cross-platform). The file itself is created by -// whoever writes to path()/string(); this only reserves the name and cleans up. -class ScopedTemporaryFile +// --------------------------------------------------------------------------- +// Scoped temporary paths +// --------------------------------------------------------------------------- + +// Owns a unique path under the system temp dir, "-[]" +// (parallel-safe, cross-platform). Shared base for the two RAII temp guards below. +class ScopedTemporaryPath +{ +public: + const boost::filesystem::path &path() const { return m_path; } + std::string string() const { return m_path.string(); } + ScopedTemporaryPath(const ScopedTemporaryPath &) = delete; + ScopedTemporaryPath &operator=(const ScopedTemporaryPath &) = delete; + +protected: + ScopedTemporaryPath(const std::string &prefix, const std::string &extension) + : m_path(boost::filesystem::temp_directory_path() + / boost::filesystem::unique_path(prefix + "-%%%%-%%%%-%%%%" + extension)) + {} + ~ScopedTemporaryPath() = default; // non-virtual: never deleted through a base pointer + + boost::filesystem::path m_path; +}; + +// A temp file the caller creates by writing to path()/string(); the guard only +// reserves the name and removes the file on scope exit. +class ScopedTemporaryFile : public ScopedTemporaryPath { public: explicit ScopedTemporaryFile(const std::string &extension = ".tmp") - : m_path(boost::filesystem::temp_directory_path() - / boost::filesystem::unique_path("orca-%%%%-%%%%-%%%%" + extension)) - {} + : ScopedTemporaryPath("orca", extension) {} ~ScopedTemporaryFile() { boost::system::error_code ec; boost::filesystem::remove(m_path, ec); } - ScopedTemporaryFile(const ScopedTemporaryFile &) = delete; - ScopedTemporaryFile &operator=(const ScopedTemporaryFile &) = delete; +}; - const boost::filesystem::path &path() const { return m_path; } - std::string string() const { return m_path.string(); } - -private: - boost::filesystem::path m_path; +// A temp directory created on construction and removed recursively on scope exit. +class ScopedTemporaryDir : public ScopedTemporaryPath +{ +public: + explicit ScopedTemporaryDir(const std::string &prefix = "orca") + : ScopedTemporaryPath(prefix, "") { boost::filesystem::create_directories(m_path); } + ~ScopedTemporaryDir() { boost::system::error_code ec; boost::filesystem::remove_all(m_path, ec); } }; // --------------------------------------------------------------------------- @@ -66,7 +87,7 @@ inline std::string debug_artifact_path(const std::string &name) boost::filesystem::path dir = boost::filesystem::temp_directory_path() / boost::filesystem::unique_path("orca-test-artifacts-%%%%-%%%%"); boost::filesystem::create_directories(dir); - std::printf("Debug test artifacts will be written to %s\n", dir.string().c_str()); + std::fprintf(stderr, "Debug test artifacts will be written to %s\n", dir.string().c_str()); return dir; }(); boost::filesystem::path full = root / name; @@ -75,57 +96,52 @@ inline std::string debug_artifact_path(const std::string &name) } // Dump a mesh as OBJ. -inline void write_debug_obj(const std::string &name, const Slic3r::TriangleMesh &mesh) +inline void write_debug_obj([[maybe_unused]] const std::string &name, + [[maybe_unused]] const Slic3r::TriangleMesh &mesh) { #ifndef NDEBUG mesh.WriteOBJFile(debug_artifact_path(name).c_str()); -#else - (void) name; (void) mesh; #endif } -inline void write_debug_obj(const std::string &name, const indexed_triangle_set &its) +inline void write_debug_obj([[maybe_unused]] const std::string &name, + [[maybe_unused]] const indexed_triangle_set &its) { #ifndef NDEBUG its_write_obj(its, debug_artifact_path(name).c_str()); -#else - (void) name; (void) its; #endif } // Dump a mesh as ASCII STL. -inline void write_debug_stl(const std::string &name, const Slic3r::TriangleMesh &mesh) +inline void write_debug_stl([[maybe_unused]] const std::string &name, + [[maybe_unused]] const Slic3r::TriangleMesh &mesh) { #ifndef NDEBUG mesh.write_ascii(debug_artifact_path(name).c_str()); -#else - (void) name; (void) mesh; #endif } // Draw an SVG artifact through a callback that receives the open SVG. Second // overload takes a BoundingBox when the drawing needs one. template -inline void write_debug_svg(const std::string &name, Draw &&draw) +inline void write_debug_svg([[maybe_unused]] const std::string &name, [[maybe_unused]] Draw &&draw) { #ifndef NDEBUG Slic3r::SVG svg(debug_artifact_path(name)); draw(svg); svg.Close(); -#else - (void) name; (void) draw; #endif } template -inline void write_debug_svg(const std::string &name, const Slic3r::BoundingBox &bbox, Draw &&draw) +inline void write_debug_svg([[maybe_unused]] const std::string &name, + [[maybe_unused]] const Slic3r::BoundingBox &bbox, + [[maybe_unused]] Draw &&draw) { #ifndef NDEBUG Slic3r::SVG svg(debug_artifact_path(name), bbox); draw(svg); svg.Close(); -#else - (void) name; (void) bbox; (void) draw; #endif } @@ -133,13 +149,11 @@ inline void write_debug_svg(const std::string &name, const Slic3r::BoundingBox & // artifact. operator<< is resolved by ADL at the call site, so this header needn't // include the producer's headers. template -inline void write_debug_stream(const std::string &name, Produce &&produce) +inline void write_debug_stream([[maybe_unused]] const std::string &name, [[maybe_unused]] Produce &&produce) { #ifndef NDEBUG std::ofstream out(debug_artifact_path(name), std::ios::out | std::ios::binary); out << produce(); -#else - (void) name; (void) produce; #endif } From af9fd10d7ae5fd6c9eb54b65ff58f324bd91c301 Mon Sep 17 00:00:00 2001 From: Mitchell Mashburn <128167557+re3Dev@users.noreply.github.com> Date: Fri, 7 Aug 2026 12:07:03 -0500 Subject: [PATCH 47/66] re:3D profile updates. (#15169) * re:3D profile updates. - Replace vendor-specific "re3D Greengate rPETG" filament with a generic "re3D rPETG" (base + @0.8/@1.75 nozzle variants), matching the naming convention used for rPLA/rPETG elsewhere in the re:3D vendor pack. - Add fdm_filament_pp as a proper filament-type parent and switch re3D rPP to inherit from it instead of overriding filament_type on top of fdm_filament_pet. - Added filament_type to the specific printer JSON file and removed from the base printer JSON file [fixes Issue#14693] - Updates to speeds and accelerations for re:3D profiles, moved from common to machine processes [closed: PR#14259] - Updates to fdm profile filename format so that it lists the filename and extruder number in the sliced .gcode file * Fix setting IDs * Add rename from for changed material names. --- resources/profiles/re3D.json | 431 +++++++++--------- .../re3D/filament/fdm_filament_pp.json | 10 + .../re3D/filament/re3D PC @0.4 nozzle.json | 3 + .../re3D/filament/re3D PC @0.8 nozzle.json | 3 + .../re3D/filament/re3D PETG @0.4 nozzle.json | 3 + .../re3D/filament/re3D PETG @0.8 nozzle.json | 3 + .../re3D/filament/re3D PLA @0.4 nozzle.json | 3 + .../re3D/filament/re3D PLA @0.8 nozzle.json | 3 + ...ozzle.json => re3D rPETG @0.8 nozzle.json} | 11 +- ...zzle.json => re3D rPETG @1.75 nozzle.json} | 11 +- ...D Greengate rPETG.json => re3D rPETG.json} | 7 +- .../re3D/filament/re3D rPP @0.8 nozzle.json | 2 +- .../re3D/filament/re3D rPP @1.75 nozzle.json | 2 +- .../profiles/re3D/filament/re3D rPP.json | 5 +- .../machine/re3D Gigabot 4 0.4 nozzle.json | 2 +- .../machine/re3D Gigabot 4 0.8 nozzle.json | 2 +- .../re3D Gigabot 4 XLT 0.4 nozzle.json | 2 +- .../re3D Gigabot 4 XLT 0.8 nozzle.json | 2 +- .../machine/re3D GigabotX 2 0.8 nozzle.json | 4 +- .../machine/re3D GigabotX 2 1.75 nozzle.json | 4 +- .../re3D GigabotX 2 XLT 0.8 nozzle.json | 4 +- .../re3D GigabotX 2 XLT 1.75 nozzle.json | 4 +- .../re3D/machine/re3D GigabotX 2 XLT.json | 2 +- .../re3D/machine/re3D GigabotX 2.json | 2 +- .../machine/re3D Terabot 4 0.4 nozzle.json | 2 +- .../machine/re3D Terabot 4 0.8 nozzle.json | 2 +- .../machine/re3D TerabotX 2 0.8 nozzle.json | 4 +- .../machine/re3D TerabotX 2 1.75 nozzle.json | 4 +- .../re3D/machine/re3D TerabotX 2.json | 2 +- .../0.26mm Standard @re3D fdm 0.4.json | 34 +- .../process/0.2mm Fine @re3D fdm 0.4.json | 31 +- .../process/0.32mm Draft @re3D fdm 0.4.json | 31 +- .../process/0.3mm Fine @re3D fdm 0.8.json | 31 +- .../process/0.4mm Draft @re3D fdm 0.8.json | 31 +- .../re3D/process/fdm_process_common.json | 12 - .../re3D/process/fdm_process_re3D_common.json | 202 ++++---- 36 files changed, 527 insertions(+), 384 deletions(-) create mode 100644 resources/profiles/re3D/filament/fdm_filament_pp.json rename resources/profiles/re3D/filament/{re3D Greengate rPETG @0.8 nozzle.json => re3D rPETG @0.8 nozzle.json} (89%) rename resources/profiles/re3D/filament/{re3D Greengate rPETG @1.75 nozzle.json => re3D rPETG @1.75 nozzle.json} (89%) rename resources/profiles/re3D/filament/{re3D Greengate rPETG.json => re3D rPETG.json} (78%) diff --git a/resources/profiles/re3D.json b/resources/profiles/re3D.json index e0acc669d0..94cca3c2ef 100644 --- a/resources/profiles/re3D.json +++ b/resources/profiles/re3D.json @@ -1,214 +1,219 @@ { - "name": "re3D", - "version": "02.04.00.03", - "force_update": "0", - "description": "re3D configurations", - "machine_model_list": [ - { - "name": "re3D Gigabot 4", - "sub_path": "machine/re3D Gigabot 4.json" - }, - { - "name": "re3D Gigabot 4 XLT", - "sub_path": "machine/re3D Gigabot 4 XLT.json" - }, - { - "name": "re3D GigabotX 2", - "sub_path": "machine/re3D GigabotX 2.json" - }, - { - "name": "re3D GigabotX 2 XLT", - "sub_path": "machine/re3D GigabotX 2 XLT.json" - }, - { - "name": "re3D Terabot 4", - "sub_path": "machine/re3D Terabot 4.json" - }, - { - "name": "re3D TerabotX 2", - "sub_path": "machine/re3D TerabotX 2.json" - } - ], - "process_list": [ - { - "name": "fdm_process_common", - "sub_path": "process/fdm_process_common.json" - }, - { - "name": "fdm_process_re3D_common", - "sub_path": "process/fdm_process_re3D_common.json" - }, - { - "name": "fgf_process_re3D_common", - "sub_path": "process/fgf_process_re3D_common.json" - }, - { - "name": "0.2 Fine", - "sub_path": "process/0.2mm Fine @re3D fdm 0.4.json" - }, - { - "name": "0.26 Standard", - "sub_path": "process/0.26mm Standard @re3D fdm 0.4.json" - }, - { - "name": "0.3 Fine", - "sub_path": "process/0.3mm Fine @re3D fdm 0.8.json" - }, - { - "name": "0.32 Draft", - "sub_path": "process/0.32mm Draft @re3D fdm 0.4.json" - }, - { - "name": "0.4 Standard", - "sub_path": "process/0.4mm Draft @re3D fdm 0.8.json" - }, - { - "name": "0.6 Standard", - "sub_path": "process/0.6mm Standard @re3D fgf 0.8.json" - }, - { - "name": "1.0 Standard", - "sub_path": "process/1.0mm Standard @re3D fgf 1.75.json" - } - ], - "filament_list": [ - { - "name": "fdm_filament_common", - "sub_path": "filament/fdm_filament_common.json" - }, - { - "name": "fdm_filament_pc", - "sub_path": "filament/fdm_filament_pc.json" - }, - { - "name": "fdm_filament_pet", - "sub_path": "filament/fdm_filament_pet.json" - }, - { - "name": "fdm_filament_pla", - "sub_path": "filament/fdm_filament_pla.json" - }, - { - "name": "re3D PC", - "sub_path": "filament/re3D PC.json" - }, - { - "name": "re3D PC @0.4 nozzle", - "sub_path": "filament/re3D PC @0.4 nozzle.json" - }, - { - "name": "re3D PC @0.8 nozzle", - "sub_path": "filament/re3D PC @0.8 nozzle.json" - }, - { - "name": "re3D Greengate rPETG", - "sub_path": "filament/re3D Greengate rPETG.json" - }, - { - "name": "re3D Greengate rPETG @0.8 nozzle", - "sub_path": "filament/re3D Greengate rPETG @0.8 nozzle.json" - }, - { - "name": "re3D Greengate rPETG @1.75 nozzle", - "sub_path": "filament/re3D Greengate rPETG @1.75 nozzle.json" - }, - { - "name": "re3D PETG", - "sub_path": "filament/re3D PETG.json" - }, - { - "name": "re3D PETG @0.4 nozzle", - "sub_path": "filament/re3D PETG @0.4 nozzle.json" - }, - { - "name": "re3D PETG @0.8 nozzle", - "sub_path": "filament/re3D PETG @0.8 nozzle.json" - }, - { - "name": "re3D rPP", - "sub_path": "filament/re3D rPP.json" - }, - { - "name": "re3D rPP @0.8 nozzle", - "sub_path": "filament/re3D rPP @0.8 nozzle.json" - }, - { - "name": "re3D rPP @1.75 nozzle", - "sub_path": "filament/re3D rPP @1.75 nozzle.json" - }, - { - "name": "re3D PLA", - "sub_path": "filament/re3D PLA.json" - }, - { - "name": "re3D PLA @0.4 nozzle", - "sub_path": "filament/re3D PLA @0.4 nozzle.json" - }, - { - "name": "re3D PLA @0.8 nozzle", - "sub_path": "filament/re3D PLA @0.8 nozzle.json" - } - ], - "machine_list": [ - { - "name": "fdm_machine_common", - "sub_path": "machine/fdm_machine_common.json" - }, - { - "name": "fdm_re3D_common", - "sub_path": "machine/fdm_re3D_common.json" - }, - { - "name": "fgf_re3D_common", - "sub_path": "machine/fgf_re3D_common.json" - }, - { - "name": "re3D Gigabot 4 0.4 nozzle", - "sub_path": "machine/re3D Gigabot 4 0.4 nozzle.json" - }, - { - "name": "re3D Gigabot 4 0.8 nozzle", - "sub_path": "machine/re3D Gigabot 4 0.8 nozzle.json" - }, - { - "name": "re3D Gigabot 4 XLT 0.4 nozzle", - "sub_path": "machine/re3D Gigabot 4 XLT 0.4 nozzle.json" - }, - { - "name": "re3D Gigabot 4 XLT 0.8 nozzle", - "sub_path": "machine/re3D Gigabot 4 XLT 0.8 nozzle.json" - }, - { - "name": "re3D Terabot 4 0.4 nozzle", - "sub_path": "machine/re3D Terabot 4 0.4 nozzle.json" - }, - { - "name": "re3D Terabot 4 0.8 nozzle", - "sub_path": "machine/re3D Terabot 4 0.8 nozzle.json" - }, - { - "name": "re3D GigabotX 2 0.8 nozzle", - "sub_path": "machine/re3D GigabotX 2 0.8 nozzle.json" - }, - { - "name": "re3D GigabotX 2 1.75 nozzle", - "sub_path": "machine/re3D GigabotX 2 1.75 nozzle.json" - }, - { - "name": "re3D GigabotX 2 XLT 0.8 nozzle", - "sub_path": "machine/re3D GigabotX 2 XLT 0.8 nozzle.json" - }, - { - "name": "re3D GigabotX 2 XLT 1.75 nozzle", - "sub_path": "machine/re3D GigabotX 2 XLT 1.75 nozzle.json" - }, - { - "name": "re3D TerabotX 2 0.8 nozzle", - "sub_path": "machine/re3D TerabotX 2 0.8 nozzle.json" - }, - { - "name": "re3D TerabotX 2 1.75 nozzle", - "sub_path": "machine/re3D TerabotX 2 1.75 nozzle.json" - } - ] -} + "name": "re3D", + "url": "", + "version": "03.00.08", + "force_update": "0", + "description": "re3D configurations", + "machine_model_list": [ + { + "name": "re3D Gigabot 4", + "sub_path": "machine/re3D Gigabot 4.json" + }, + { + "name": "re3D Gigabot 4 XLT", + "sub_path": "machine/re3D Gigabot 4 XLT.json" + }, + { + "name": "re3D GigabotX 2", + "sub_path": "machine/re3D GigabotX 2.json" + }, + { + "name": "re3D GigabotX 2 XLT", + "sub_path": "machine/re3D GigabotX 2 XLT.json" + }, + { + "name": "re3D Terabot 4", + "sub_path": "machine/re3D Terabot 4.json" + }, + { + "name": "re3D TerabotX 2", + "sub_path": "machine/re3D TerabotX 2.json" + } + ], + "process_list": [ + { + "name": "fdm_process_common", + "sub_path": "process/fdm_process_common.json" + }, + { + "name": "fdm_process_re3D_common", + "sub_path": "process/fdm_process_re3D_common.json" + }, + { + "name": "fgf_process_re3D_common", + "sub_path": "process/fgf_process_re3D_common.json" + }, + { + "name": "0.2 Fine", + "sub_path": "process/0.2mm Fine @re3D fdm 0.4.json" + }, + { + "name": "0.26 Standard", + "sub_path": "process/0.26mm Standard @re3D fdm 0.4.json" + }, + { + "name": "0.32 Draft", + "sub_path": "process/0.32mm Draft @re3D fdm 0.4.json" + }, + { + "name": "0.3 Fine", + "sub_path": "process/0.3mm Fine @re3D fdm 0.8.json" + }, + { + "name": "0.4 Standard", + "sub_path": "process/0.4mm Draft @re3D fdm 0.8.json" + }, + { + "name": "1.0 Standard", + "sub_path": "process/1.0mm Standard @re3D fgf 1.75.json" + }, + { + "name": "0.6 Standard", + "sub_path": "process/0.6mm Standard @re3D fgf 0.8.json" + } + ], + "filament_list": [ + { + "name": "fdm_filament_common", + "sub_path": "filament/fdm_filament_common.json" + }, + { + "name": "fdm_filament_pla", + "sub_path": "filament/fdm_filament_pla.json" + }, + { + "name": "fdm_filament_pet", + "sub_path": "filament/fdm_filament_pet.json" + }, + { + "name": "fdm_filament_pp", + "sub_path": "filament/fdm_filament_pp.json" + }, + { + "name": "fdm_filament_pc", + "sub_path": "filament/fdm_filament_pc.json" + }, + { + "name": "re3D PLA", + "sub_path": "filament/re3D PLA.json" + }, + { + "name": "re3D PETG", + "sub_path": "filament/re3D PETG.json" + }, + { + "name": "re3D PC", + "sub_path": "filament/re3D PC.json" + }, + { + "name": "re3D rPETG", + "sub_path": "filament/re3D rPETG.json" + }, + { + "name": "re3D rPP", + "sub_path": "filament/re3D rPP.json" + }, + { + "name": "re3D PLA @0.4 nozzle", + "sub_path": "filament/re3D PLA @0.4 nozzle.json" + }, + { + "name": "re3D PLA @0.8 nozzle", + "sub_path": "filament/re3D PLA @0.8 nozzle.json" + }, + { + "name": "re3D PETG @0.4 nozzle", + "sub_path": "filament/re3D PETG @0.4 nozzle.json" + }, + { + "name": "re3D PETG @0.8 nozzle", + "sub_path": "filament/re3D PETG @0.8 nozzle.json" + }, + { + "name": "re3D PC @0.4 nozzle", + "sub_path": "filament/re3D PC @0.4 nozzle.json" + }, + { + "name": "re3D PC @0.8 nozzle", + "sub_path": "filament/re3D PC @0.8 nozzle.json" + }, + { + "name": "re3D rPETG @0.8 nozzle", + "sub_path": "filament/re3D rPETG @0.8 nozzle.json" + }, + { + "name": "re3D rPETG @1.75 nozzle", + "sub_path": "filament/re3D rPETG @1.75 nozzle.json" + }, + { + "name": "re3D rPP @0.8 nozzle", + "sub_path": "filament/re3D rPP @0.8 nozzle.json" + }, + { + "name": "re3D rPP @1.75 nozzle", + "sub_path": "filament/re3D rPP @1.75 nozzle.json" + } + ], + "machine_list": [ + { + "name": "fdm_machine_common", + "sub_path": "machine/fdm_machine_common.json" + }, + { + "name": "fdm_re3D_common", + "sub_path": "machine/fdm_re3D_common.json" + }, + { + "name": "fgf_re3D_common", + "sub_path": "machine/fgf_re3D_common.json" + }, + { + "name": "re3D Gigabot 4 0.4 nozzle", + "sub_path": "machine/re3D Gigabot 4 0.4 nozzle.json" + }, + { + "name": "re3D Gigabot 4 0.8 nozzle", + "sub_path": "machine/re3D Gigabot 4 0.8 nozzle.json" + }, + { + "name": "re3D Gigabot 4 XLT 0.4 nozzle", + "sub_path": "machine/re3D Gigabot 4 XLT 0.4 nozzle.json" + }, + { + "name": "re3D Gigabot 4 XLT 0.8 nozzle", + "sub_path": "machine/re3D Gigabot 4 XLT 0.8 nozzle.json" + }, + { + "name": "re3D GigabotX 2 0.8 nozzle", + "sub_path": "machine/re3D GigabotX 2 0.8 nozzle.json" + }, + { + "name": "re3D GigabotX 2 1.75 nozzle", + "sub_path": "machine/re3D GigabotX 2 1.75 nozzle.json" + }, + { + "name": "re3D GigabotX 2 XLT 0.8 nozzle", + "sub_path": "machine/re3D GigabotX 2 XLT 0.8 nozzle.json" + }, + { + "name": "re3D GigabotX 2 XLT 1.75 nozzle", + "sub_path": "machine/re3D GigabotX 2 XLT 1.75 nozzle.json" + }, + { + "name": "re3D Terabot 4 0.4 nozzle", + "sub_path": "machine/re3D Terabot 4 0.4 nozzle.json" + }, + { + "name": "re3D Terabot 4 0.8 nozzle", + "sub_path": "machine/re3D Terabot 4 0.8 nozzle.json" + }, + { + "name": "re3D TerabotX 2 0.8 nozzle", + "sub_path": "machine/re3D TerabotX 2 0.8 nozzle.json" + }, + { + "name": "re3D TerabotX 2 1.75 nozzle", + "sub_path": "machine/re3D TerabotX 2 1.75 nozzle.json" + } + ] +} \ No newline at end of file diff --git a/resources/profiles/re3D/filament/fdm_filament_pp.json b/resources/profiles/re3D/filament/fdm_filament_pp.json new file mode 100644 index 0000000000..16a1c9705d --- /dev/null +++ b/resources/profiles/re3D/filament/fdm_filament_pp.json @@ -0,0 +1,10 @@ +{ + "type": "filament", + "name": "fdm_filament_pp", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_common", + "filament_type": [ + "PP" + ] +} \ No newline at end of file diff --git a/resources/profiles/re3D/filament/re3D PC @0.4 nozzle.json b/resources/profiles/re3D/filament/re3D PC @0.4 nozzle.json index 47a3a44f34..d3ec58f07c 100644 --- a/resources/profiles/re3D/filament/re3D PC @0.4 nozzle.json +++ b/resources/profiles/re3D/filament/re3D PC @0.4 nozzle.json @@ -9,6 +9,9 @@ "filament_settings_id": [ "re3D PC @0.4 nozzle" ], + "filament_type": [ + "PC" + ], "compatible_printers": [ "re3D Gigabot 4 0.4 nozzle", "re3D Gigabot 4 XLT 0.4 nozzle", diff --git a/resources/profiles/re3D/filament/re3D PC @0.8 nozzle.json b/resources/profiles/re3D/filament/re3D PC @0.8 nozzle.json index c1f329f295..2f4f743d07 100644 --- a/resources/profiles/re3D/filament/re3D PC @0.8 nozzle.json +++ b/resources/profiles/re3D/filament/re3D PC @0.8 nozzle.json @@ -9,6 +9,9 @@ "filament_settings_id": [ "re3D PC @0.8 nozzle" ], + "filament_type": [ + "PC" + ], "compatible_printers": [ "re3D Gigabot 4 0.8 nozzle", "re3D Gigabot 4 XLT 0.8 nozzle", diff --git a/resources/profiles/re3D/filament/re3D PETG @0.4 nozzle.json b/resources/profiles/re3D/filament/re3D PETG @0.4 nozzle.json index c275a7517f..d85397a1c0 100644 --- a/resources/profiles/re3D/filament/re3D PETG @0.4 nozzle.json +++ b/resources/profiles/re3D/filament/re3D PETG @0.4 nozzle.json @@ -17,6 +17,9 @@ "filament_vendor": [ "re3D" ], + "filament_type": [ + "PETG" + ], "close_fan_the_first_x_layers": [ "2" ], diff --git a/resources/profiles/re3D/filament/re3D PETG @0.8 nozzle.json b/resources/profiles/re3D/filament/re3D PETG @0.8 nozzle.json index 148f6540fe..c45d4a84e5 100644 --- a/resources/profiles/re3D/filament/re3D PETG @0.8 nozzle.json +++ b/resources/profiles/re3D/filament/re3D PETG @0.8 nozzle.json @@ -14,6 +14,9 @@ "re3D Gigabot 4 XLT 0.8 nozzle", "re3D Terabot 4 0.8 nozzle" ], + "filament_type": [ + "PETG" + ], "filament_vendor": [ "re3D" ], diff --git a/resources/profiles/re3D/filament/re3D PLA @0.4 nozzle.json b/resources/profiles/re3D/filament/re3D PLA @0.4 nozzle.json index 1719807f7f..a3630d0111 100644 --- a/resources/profiles/re3D/filament/re3D PLA @0.4 nozzle.json +++ b/resources/profiles/re3D/filament/re3D PLA @0.4 nozzle.json @@ -9,6 +9,9 @@ "filament_settings_id": [ "re3D PLA @0.4 nozzle" ], + "filament_type": [ + "PLA" + ], "compatible_printers": [ "re3D Gigabot 4 0.4 nozzle", "re3D Gigabot 4 XLT 0.4 nozzle", diff --git a/resources/profiles/re3D/filament/re3D PLA @0.8 nozzle.json b/resources/profiles/re3D/filament/re3D PLA @0.8 nozzle.json index 01e7abbc9a..002e18f67c 100644 --- a/resources/profiles/re3D/filament/re3D PLA @0.8 nozzle.json +++ b/resources/profiles/re3D/filament/re3D PLA @0.8 nozzle.json @@ -9,6 +9,9 @@ "filament_settings_id": [ "re3D PLA @0.8 nozzle" ], + "filament_type": [ + "PLA" + ], "compatible_printers": [ "re3D Gigabot 4 0.8 nozzle", "re3D Gigabot 4 XLT 0.8 nozzle", diff --git a/resources/profiles/re3D/filament/re3D Greengate rPETG @0.8 nozzle.json b/resources/profiles/re3D/filament/re3D rPETG @0.8 nozzle.json similarity index 89% rename from resources/profiles/re3D/filament/re3D Greengate rPETG @0.8 nozzle.json rename to resources/profiles/re3D/filament/re3D rPETG @0.8 nozzle.json index 028bf042bb..0ac0d012f5 100644 --- a/resources/profiles/re3D/filament/re3D Greengate rPETG @0.8 nozzle.json +++ b/resources/profiles/re3D/filament/re3D rPETG @0.8 nozzle.json @@ -1,14 +1,21 @@ { "type": "filament", "filament_id": "GFG01", - "setting_id": "fRX555Prkdu5ESIp", - "name": "re3D Greengate rPETG @0.8 nozzle", + "setting_id": "WlELqPVnuL7DaTxs", + "name": "re3D rPETG @0.8 nozzle", "from": "system", + "renamed_from": "re3D Greengate rPETG @0.8 nozzle", "instantiation": "true", "inherits": "fdm_filament_pet", "nozzle_temperature_initial_layer": [ "0" ], + "filament_type": [ + "PETG" + ], + "filament_vendor": [ + "re3D" + ], "nozzle_temperature": [ "0" ], diff --git a/resources/profiles/re3D/filament/re3D Greengate rPETG @1.75 nozzle.json b/resources/profiles/re3D/filament/re3D rPETG @1.75 nozzle.json similarity index 89% rename from resources/profiles/re3D/filament/re3D Greengate rPETG @1.75 nozzle.json rename to resources/profiles/re3D/filament/re3D rPETG @1.75 nozzle.json index 5ae3d832ff..8cd090fc06 100644 --- a/resources/profiles/re3D/filament/re3D Greengate rPETG @1.75 nozzle.json +++ b/resources/profiles/re3D/filament/re3D rPETG @1.75 nozzle.json @@ -1,14 +1,21 @@ { "type": "filament", "filament_id": "GFG01", - "setting_id": "6aPU6CYS2cmODkok", - "name": "re3D Greengate rPETG @1.75 nozzle", + "setting_id": "sHzO2S3mmE6Iqs2O", + "name": "re3D rPETG @1.75 nozzle", "from": "system", + "renamed_from": "re3D Greengate rPETG @1.75 nozzle", "instantiation": "true", "inherits": "fdm_filament_pet", "nozzle_temperature_initial_layer": [ "0" ], + "filament_type": [ + "PETG" + ], + "filament_vendor": [ + "re3D" + ], "nozzle_temperature": [ "0" ], diff --git a/resources/profiles/re3D/filament/re3D Greengate rPETG.json b/resources/profiles/re3D/filament/re3D rPETG.json similarity index 78% rename from resources/profiles/re3D/filament/re3D Greengate rPETG.json rename to resources/profiles/re3D/filament/re3D rPETG.json index de56af4f02..fe19f12539 100644 --- a/resources/profiles/re3D/filament/re3D Greengate rPETG.json +++ b/resources/profiles/re3D/filament/re3D rPETG.json @@ -1,13 +1,14 @@ { "type": "filament", - "name": "re3D Greengate rPETG", + "name": "re3D rPETG", "from": "system", + "renamed_from": "re3D Greengate rPETG", "instantiation": "true", "inherits": "fdm_filament_pet", "filament_id": "GFG01", - "setting_id": "SdugLw5oy9GB7NID", + "setting_id": "6aESuJ2S2Kogd4Lq", "filament_settings_id": [ - "re3D Greengate rPETG" + "re3D rPETG" ], "compatible_printers": [ "re3D GigabotX 2 0.8 nozzle", diff --git a/resources/profiles/re3D/filament/re3D rPP @0.8 nozzle.json b/resources/profiles/re3D/filament/re3D rPP @0.8 nozzle.json index a49f19e128..5f5467e86d 100644 --- a/resources/profiles/re3D/filament/re3D rPP @0.8 nozzle.json +++ b/resources/profiles/re3D/filament/re3D rPP @0.8 nozzle.json @@ -5,7 +5,7 @@ "name": "re3D rPP @0.8 nozzle", "from": "system", "instantiation": "true", - "inherits": "fdm_filament_pet", + "inherits": "fdm_filament_pp", "filament_type": [ "PP" ], diff --git a/resources/profiles/re3D/filament/re3D rPP @1.75 nozzle.json b/resources/profiles/re3D/filament/re3D rPP @1.75 nozzle.json index 0bde56c596..2e5a3f4386 100644 --- a/resources/profiles/re3D/filament/re3D rPP @1.75 nozzle.json +++ b/resources/profiles/re3D/filament/re3D rPP @1.75 nozzle.json @@ -5,7 +5,7 @@ "name": "re3D rPP @1.75 nozzle", "from": "system", "instantiation": "true", - "inherits": "fdm_filament_pet", + "inherits": "fdm_filament_pp", "filament_type": [ "PP" ], diff --git a/resources/profiles/re3D/filament/re3D rPP.json b/resources/profiles/re3D/filament/re3D rPP.json index bf96aa51e6..f7244f5985 100644 --- a/resources/profiles/re3D/filament/re3D rPP.json +++ b/resources/profiles/re3D/filament/re3D rPP.json @@ -3,10 +3,7 @@ "name": "re3D rPP", "from": "system", "instantiation": "true", - "inherits": "fdm_filament_pet", - "filament_type": [ - "PP" - ], + "inherits": "fdm_filament_pp", "filament_id": "GFG02", "setting_id": "8PB62qm5Cd3SHLf4", "filament_settings_id": [ diff --git a/resources/profiles/re3D/machine/re3D Gigabot 4 0.4 nozzle.json b/resources/profiles/re3D/machine/re3D Gigabot 4 0.4 nozzle.json index a0cbd3c0e2..d14d3c260e 100644 --- a/resources/profiles/re3D/machine/re3D Gigabot 4 0.4 nozzle.json +++ b/resources/profiles/re3D/machine/re3D Gigabot 4 0.4 nozzle.json @@ -6,7 +6,7 @@ "machine_tech": "FFF", "model_id": "GB4", "printer_model": "re3D Gigabot 4", - "bed_texture": "Gigabot 4_buildplate_texture.png", + "bed_texture": "re3D Gigabot 4_buildplate_texture.svg", "default_materials": "re3D PETG;re3D PLA;re3D PC", "printable_area": [ "0x0", diff --git a/resources/profiles/re3D/machine/re3D Gigabot 4 0.8 nozzle.json b/resources/profiles/re3D/machine/re3D Gigabot 4 0.8 nozzle.json index e5d847e62c..9bc78b36ad 100644 --- a/resources/profiles/re3D/machine/re3D Gigabot 4 0.8 nozzle.json +++ b/resources/profiles/re3D/machine/re3D Gigabot 4 0.8 nozzle.json @@ -6,7 +6,7 @@ "machine_tech": "FFF", "model_id": "GB4", "printer_model": "re3D Gigabot 4", - "bed_texture": "Gigabot 4_buildplate_texture.png", + "bed_texture": "re3D Gigabot 4_buildplate_texture.svg", "default_materials": "re3D PETG;re3D PLA;re3D PC", "printable_area": [ "0x0", diff --git a/resources/profiles/re3D/machine/re3D Gigabot 4 XLT 0.4 nozzle.json b/resources/profiles/re3D/machine/re3D Gigabot 4 XLT 0.4 nozzle.json index 8a5e118bff..56b4030476 100644 --- a/resources/profiles/re3D/machine/re3D Gigabot 4 XLT 0.4 nozzle.json +++ b/resources/profiles/re3D/machine/re3D Gigabot 4 XLT 0.4 nozzle.json @@ -6,7 +6,7 @@ "machine_tech": "FFF", "model_id": "GB4", "printer_model": "re3D Gigabot 4 XLT", - "bed_texture": "Gigabot 4 XLT_buildplate_texture.png", + "bed_texture": "re3D Gigabot 4 XLT_buildplate_texture.svg", "default_materials": "re3D PETG;re3D PLA;re3D PC", "printable_area": [ "0x0", diff --git a/resources/profiles/re3D/machine/re3D Gigabot 4 XLT 0.8 nozzle.json b/resources/profiles/re3D/machine/re3D Gigabot 4 XLT 0.8 nozzle.json index a3fabc985d..a14e730b30 100644 --- a/resources/profiles/re3D/machine/re3D Gigabot 4 XLT 0.8 nozzle.json +++ b/resources/profiles/re3D/machine/re3D Gigabot 4 XLT 0.8 nozzle.json @@ -6,7 +6,7 @@ "machine_tech": "FFF", "model_id": "GB4", "printer_model": "re3D Gigabot 4 XLT", - "bed_texture": "Gigabot 4 XLT_buildplate_texture.png", + "bed_texture": "re3D Gigabot 4 XLT_buildplate_texture.svg", "default_materials": "re3D PETG;re3D PLA;re3D PC", "printable_area": [ "0x0", diff --git a/resources/profiles/re3D/machine/re3D GigabotX 2 0.8 nozzle.json b/resources/profiles/re3D/machine/re3D GigabotX 2 0.8 nozzle.json index 8260ee5a1d..f6bac17a0d 100644 --- a/resources/profiles/re3D/machine/re3D GigabotX 2 0.8 nozzle.json +++ b/resources/profiles/re3D/machine/re3D GigabotX 2 0.8 nozzle.json @@ -6,7 +6,7 @@ "machine_tech": "FGF", "model_id": "re3D GBX2", "printer_model": "re3D GigabotX 2", - "bed_texture": "Gigabot 4_buildplate_texture.png", + "bed_texture": "re3D GigabotX 2_buildplate_texture.svg", "printable_area": [ "0x0", "552x0", @@ -25,7 +25,7 @@ "0.3" ], "default_filament_profile": [ - "re3D Greengate rPETG @0.8 nozzle" + "re3D rPETG @0.8 nozzle" ], "default_print_profile": "0.6 Standard", "printer_settings_id": "re3d_gbx_08", diff --git a/resources/profiles/re3D/machine/re3D GigabotX 2 1.75 nozzle.json b/resources/profiles/re3D/machine/re3D GigabotX 2 1.75 nozzle.json index 8a89e9d858..585c219bc7 100644 --- a/resources/profiles/re3D/machine/re3D GigabotX 2 1.75 nozzle.json +++ b/resources/profiles/re3D/machine/re3D GigabotX 2 1.75 nozzle.json @@ -7,7 +7,7 @@ "machine_tech": "FGF", "model_id": "re3D GBX2", "printer_model": "re3D GigabotX 2", - "bed_texture": "Gigabot 4_buildplate_texture.png", + "bed_texture": "re3D GigabotX 2_buildplate_texture.svg", "printable_area": [ "0x0", "552x0", @@ -26,7 +26,7 @@ "0.6" ], "default_filament_profile": [ - "re3D Greengate rPETG @1.75 nozzle" + "re3D rPETG @1.75 nozzle" ], "default_print_profile": "1.0 Standard", "printer_settings_id": "re3d_gbx_175", diff --git a/resources/profiles/re3D/machine/re3D GigabotX 2 XLT 0.8 nozzle.json b/resources/profiles/re3D/machine/re3D GigabotX 2 XLT 0.8 nozzle.json index 2d81331c5c..863d8e6403 100644 --- a/resources/profiles/re3D/machine/re3D GigabotX 2 XLT 0.8 nozzle.json +++ b/resources/profiles/re3D/machine/re3D GigabotX 2 XLT 0.8 nozzle.json @@ -6,7 +6,7 @@ "machine_tech": "FGF", "model_id": "re3D GBX2 XLT", "printer_model": "re3D GigabotX 2 XLT", - "bed_texture": "GigabotX 2 XLT_buildplate_texture.png", + "bed_texture": "re3D GigabotX 2 XLT_buildplate_texture.svg", "printable_area": [ "0x0", "552x0", @@ -25,7 +25,7 @@ "0.3" ], "default_filament_profile": [ - "re3D Greengate rPETG @0.8 nozzle" + "re3D rPETG @0.8 nozzle" ], "default_print_profile": "0.6 Standard", "printer_settings_id": "re3d_gbx_xlt_08", diff --git a/resources/profiles/re3D/machine/re3D GigabotX 2 XLT 1.75 nozzle.json b/resources/profiles/re3D/machine/re3D GigabotX 2 XLT 1.75 nozzle.json index 63503c01d8..5784b4e673 100644 --- a/resources/profiles/re3D/machine/re3D GigabotX 2 XLT 1.75 nozzle.json +++ b/resources/profiles/re3D/machine/re3D GigabotX 2 XLT 1.75 nozzle.json @@ -7,7 +7,7 @@ "machine_tech": "FGF", "model_id": "re3D GBX2 XLT", "printer_model": "re3D GigabotX 2 XLT", - "bed_texture": "GigabotX 2 XLT_buildplate_texture.png", + "bed_texture": "re3D GigabotX 2 XLT_buildplate_texture.svg", "printable_area": [ "0x0", "552x0", @@ -26,7 +26,7 @@ "0.6" ], "default_filament_profile": [ - "re3D Greengate rPETG @1.75 nozzle" + "re3D rPETG @1.75 nozzle" ], "default_print_profile": "1.0 Standard", "printer_settings_id": "re3d_gbx_xlt_175", diff --git a/resources/profiles/re3D/machine/re3D GigabotX 2 XLT.json b/resources/profiles/re3D/machine/re3D GigabotX 2 XLT.json index 09a2702f3a..99800331d9 100644 --- a/resources/profiles/re3D/machine/re3D GigabotX 2 XLT.json +++ b/resources/profiles/re3D/machine/re3D GigabotX 2 XLT.json @@ -9,5 +9,5 @@ "bed_model": "", "bed_texture": "re3D GigabotX 2 XLT_buildplate_texture.svg", "hotend_model": "GBX-HOTEND.stl", - "default_materials": "re3D Greengate rPETG;re3D rPP;" + "default_materials": "re3D rPETG;re3D rPP;" } diff --git a/resources/profiles/re3D/machine/re3D GigabotX 2.json b/resources/profiles/re3D/machine/re3D GigabotX 2.json index cc1470ee05..3a1db130b0 100644 --- a/resources/profiles/re3D/machine/re3D GigabotX 2.json +++ b/resources/profiles/re3D/machine/re3D GigabotX 2.json @@ -9,5 +9,5 @@ "bed_model": "", "bed_texture": "re3D GigabotX 2_buildplate_texture.svg", "hotend_model": "GBX-HOTEND.stl", - "default_materials": "re3D Greengate rPETG;re3D rPP;" + "default_materials": "re3D rPETG;re3D rPP;" } diff --git a/resources/profiles/re3D/machine/re3D Terabot 4 0.4 nozzle.json b/resources/profiles/re3D/machine/re3D Terabot 4 0.4 nozzle.json index 105b0f2621..d24ba564a2 100644 --- a/resources/profiles/re3D/machine/re3D Terabot 4 0.4 nozzle.json +++ b/resources/profiles/re3D/machine/re3D Terabot 4 0.4 nozzle.json @@ -6,7 +6,7 @@ "machine_tech": "FFF", "model_id": "TB4", "printer_model": "re3D Terabot 4", - "bed_texture": "Gigabot 4_buildplate_texture.png", + "bed_texture": "re3D Terabot 4_buildplate_texture.svg", "default_materials": "re3D PETG;re3D PLA;re3D PC", "printable_area": [ "0x0", diff --git a/resources/profiles/re3D/machine/re3D Terabot 4 0.8 nozzle.json b/resources/profiles/re3D/machine/re3D Terabot 4 0.8 nozzle.json index bd83a5ef45..6255e84896 100644 --- a/resources/profiles/re3D/machine/re3D Terabot 4 0.8 nozzle.json +++ b/resources/profiles/re3D/machine/re3D Terabot 4 0.8 nozzle.json @@ -6,7 +6,7 @@ "machine_tech": "FFF", "model_id": "TB4", "printer_model": "re3D Terabot 4", - "bed_texture": "Gigabot 4_buildplate_texture.png", + "bed_texture": "re3D Terabot 4_buildplate_texture.svg", "default_materials": "re3D PETG;re3D PLA;re3D PC", "printable_area": [ "0x0", diff --git a/resources/profiles/re3D/machine/re3D TerabotX 2 0.8 nozzle.json b/resources/profiles/re3D/machine/re3D TerabotX 2 0.8 nozzle.json index daa97c2e88..5622a813c1 100644 --- a/resources/profiles/re3D/machine/re3D TerabotX 2 0.8 nozzle.json +++ b/resources/profiles/re3D/machine/re3D TerabotX 2 0.8 nozzle.json @@ -6,7 +6,7 @@ "machine_tech": "FGF", "model_id": "re3D TBX2", "printer_model": "re3D TerabotX 2", - "bed_texture": "Gigabot 4_buildplate_texture.png", + "bed_texture": "re3D TerabotX 2_buildplate_texture.svg", "printable_area": [ "0x0", "892x0", @@ -25,7 +25,7 @@ "0.3" ], "default_filament_profile": [ - "re3D Greengate rPETG @0.8 nozzle" + "re3D rPETG @0.8 nozzle" ], "default_print_profile": "0.6 Standard", "printer_settings_id": "re3d_tbx2_08", diff --git a/resources/profiles/re3D/machine/re3D TerabotX 2 1.75 nozzle.json b/resources/profiles/re3D/machine/re3D TerabotX 2 1.75 nozzle.json index 401833977a..398ab006bd 100644 --- a/resources/profiles/re3D/machine/re3D TerabotX 2 1.75 nozzle.json +++ b/resources/profiles/re3D/machine/re3D TerabotX 2 1.75 nozzle.json @@ -7,7 +7,7 @@ "machine_tech": "FGF", "model_id": "re3D TBX2", "printer_model": "re3D TerabotX 2", - "bed_texture": "Gigabot 4_buildplate_texture.png", + "bed_texture": "re3D TerabotX 2_buildplate_texture.svg", "printable_area": [ "0x0", "892x0", @@ -26,7 +26,7 @@ "0.6" ], "default_filament_profile": [ - "re3D Greengate rPETG @1.75 nozzle" + "re3D rPETG @1.75 nozzle" ], "default_print_profile": "1.0 Standard", "printer_settings_id": "re3d_tbx2_175", diff --git a/resources/profiles/re3D/machine/re3D TerabotX 2.json b/resources/profiles/re3D/machine/re3D TerabotX 2.json index 9d8d0b2cb4..f541a62ad7 100644 --- a/resources/profiles/re3D/machine/re3D TerabotX 2.json +++ b/resources/profiles/re3D/machine/re3D TerabotX 2.json @@ -9,5 +9,5 @@ "bed_model": "", "bed_texture": "re3D TerabotX 2_buildplate_texture.svg", "hotend_model": "GBX-HOTEND.stl", - "default_materials": "re3D Greengate rPETG;re3D rPP;" + "default_materials": "re3D rPETG;re3D rPP;" } diff --git a/resources/profiles/re3D/process/0.26mm Standard @re3D fdm 0.4.json b/resources/profiles/re3D/process/0.26mm Standard @re3D fdm 0.4.json index 7d443c9730..2ab80cdf26 100644 --- a/resources/profiles/re3D/process/0.26mm Standard @re3D fdm 0.4.json +++ b/resources/profiles/re3D/process/0.26mm Standard @re3D fdm 0.4.json @@ -22,5 +22,35 @@ "top_surface_line_width": "0.48", "support_line_width": "0.48", "support_top_z_distance": "0.2", - "support_bottom_z_distance": "0.2" -} \ No newline at end of file + "support_bottom_z_distance": "0.2", + "bridge_speed": "50", + "internal_bridge_speed": "150%", + "default_acceleration": "5000", + "outer_wall_speed": "60", + "initial_layer_speed": "50", + "gap_infill_speed": "60", + "sparse_infill_speed": "80", + "inner_wall_speed": "80", + "internal_solid_infill_speed": "80", + "support_interface_speed": "30", + "support_speed": "90", + "top_surface_speed": "50", + "travel_speed": "300", + "top_surface_acceleration": "2500", + "initial_layer_acceleration": "1000", + "travel_acceleration": "5000", + "inner_wall_acceleration": "5000", + "ironing_speed": "25", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "10", + "initial_layer_infill_speed": "50", + "outer_wall_acceleration": "2500", + "bridge_acceleration": "3500", + "sparse_infill_acceleration": "5000", + "internal_solid_infill_acceleration": "5000", + "initial_layer_travel_speed": "100%", + "small_perimeter_speed": "50%", + "filename_format": "{input_filename_base}_{\"E\"}{initial_tool}_{filament_type[initial_tool]}_{print_time}.gcode" +} diff --git a/resources/profiles/re3D/process/0.2mm Fine @re3D fdm 0.4.json b/resources/profiles/re3D/process/0.2mm Fine @re3D fdm 0.4.json index 2734cf3334..10013e9c36 100644 --- a/resources/profiles/re3D/process/0.2mm Fine @re3D fdm 0.4.json +++ b/resources/profiles/re3D/process/0.2mm Fine @re3D fdm 0.4.json @@ -22,5 +22,32 @@ "top_surface_line_width": "0.44", "support_line_width": "0.48", "support_top_z_distance": "0.2", - "support_bottom_z_distance": "0.2" -} \ No newline at end of file + "support_bottom_z_distance": "0.2", + "outer_wall_speed": "60", + "initial_layer_speed": "50", + "gap_infill_speed": "60", + "sparse_infill_speed": "80", + "inner_wall_speed": "80", + "internal_solid_infill_speed": "80", + "support_interface_speed": "30", + "support_speed": "90", + "top_surface_speed": "50", + "travel_speed": "300", + "top_surface_acceleration": "2500", + "initial_layer_acceleration": "1000", + "travel_acceleration": "5000", + "inner_wall_acceleration": "5000", + "ironing_speed": "25", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "10", + "initial_layer_infill_speed": "50", + "outer_wall_acceleration": "2500", + "bridge_acceleration": "3500", + "sparse_infill_acceleration": "5000", + "internal_solid_infill_acceleration": "5000", + "initial_layer_travel_speed": "100%", + "small_perimeter_speed": "50%", + "filename_format": "{input_filename_base}_{\"E\"}{initial_tool}_{filament_type[initial_tool]}_{print_time}.gcode" +} diff --git a/resources/profiles/re3D/process/0.32mm Draft @re3D fdm 0.4.json b/resources/profiles/re3D/process/0.32mm Draft @re3D fdm 0.4.json index 3ce98e2e7e..1b14349f81 100644 --- a/resources/profiles/re3D/process/0.32mm Draft @re3D fdm 0.4.json +++ b/resources/profiles/re3D/process/0.32mm Draft @re3D fdm 0.4.json @@ -22,5 +22,32 @@ "top_surface_line_width": "0.48", "support_line_width": "0.48", "support_top_z_distance": "0.35", - "support_bottom_z_distance": "0.35" -} \ No newline at end of file + "support_bottom_z_distance": "0.35", + "outer_wall_speed": "60", + "initial_layer_speed": "50", + "gap_infill_speed": "60", + "sparse_infill_speed": "80", + "inner_wall_speed": "80", + "internal_solid_infill_speed": "80", + "support_interface_speed": "30", + "support_speed": "90", + "top_surface_speed": "50", + "travel_speed": "300", + "top_surface_acceleration": "2500", + "initial_layer_acceleration": "1000", + "travel_acceleration": "5000", + "inner_wall_acceleration": "5000", + "ironing_speed": "25", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "10", + "initial_layer_infill_speed": "50", + "outer_wall_acceleration": "2500", + "bridge_acceleration": "3500", + "sparse_infill_acceleration": "5000", + "internal_solid_infill_acceleration": "5000", + "initial_layer_travel_speed": "100%", + "small_perimeter_speed": "50%", + "filename_format": "{input_filename_base}_{\"E\"}{initial_tool}_{filament_type[initial_tool]}_{print_time}.gcode" +} diff --git a/resources/profiles/re3D/process/0.3mm Fine @re3D fdm 0.8.json b/resources/profiles/re3D/process/0.3mm Fine @re3D fdm 0.8.json index 27c2452d19..2b35f2c1f8 100644 --- a/resources/profiles/re3D/process/0.3mm Fine @re3D fdm 0.8.json +++ b/resources/profiles/re3D/process/0.3mm Fine @re3D fdm 0.8.json @@ -22,5 +22,32 @@ "top_surface_line_width": "1", "support_line_width": "1", "support_top_z_distance": "0.24", - "support_bottom_z_distance": "0.24" -} \ No newline at end of file + "support_bottom_z_distance": "0.24", + "outer_wall_speed": "60", + "initial_layer_speed": "50", + "gap_infill_speed": "60", + "sparse_infill_speed": "80", + "inner_wall_speed": "80", + "internal_solid_infill_speed": "80", + "support_interface_speed": "30", + "support_speed": "90", + "top_surface_speed": "50", + "travel_speed": "300", + "top_surface_acceleration": "2500", + "initial_layer_acceleration": "1000", + "travel_acceleration": "5000", + "inner_wall_acceleration": "5000", + "ironing_speed": "25", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "10", + "initial_layer_infill_speed": "50", + "outer_wall_acceleration": "2500", + "bridge_acceleration": "3500", + "sparse_infill_acceleration": "5000", + "internal_solid_infill_acceleration": "5000", + "initial_layer_travel_speed": "100%", + "small_perimeter_speed": "50%", + "filename_format": "{input_filename_base}_{\"E\"}{initial_tool}_{filament_type[initial_tool]}_{print_time}.gcode" +} diff --git a/resources/profiles/re3D/process/0.4mm Draft @re3D fdm 0.8.json b/resources/profiles/re3D/process/0.4mm Draft @re3D fdm 0.8.json index d46316ef4e..d00f8bce44 100644 --- a/resources/profiles/re3D/process/0.4mm Draft @re3D fdm 0.8.json +++ b/resources/profiles/re3D/process/0.4mm Draft @re3D fdm 0.8.json @@ -22,5 +22,32 @@ "top_surface_line_width": "1", "support_line_width": "1", "support_top_z_distance": "0.42", - "support_bottom_z_distance": "0.42" -} \ No newline at end of file + "support_bottom_z_distance": "0.42", + "outer_wall_speed": "60", + "initial_layer_speed": "50", + "gap_infill_speed": "60", + "sparse_infill_speed": "80", + "inner_wall_speed": "80", + "internal_solid_infill_speed": "80", + "support_interface_speed": "30", + "support_speed": "90", + "top_surface_speed": "50", + "travel_speed": "300", + "top_surface_acceleration": "2500", + "initial_layer_acceleration": "1000", + "travel_acceleration": "5000", + "inner_wall_acceleration": "5000", + "ironing_speed": "25", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "10", + "initial_layer_infill_speed": "50", + "outer_wall_acceleration": "2500", + "bridge_acceleration": "3500", + "sparse_infill_acceleration": "5000", + "internal_solid_infill_acceleration": "5000", + "initial_layer_travel_speed": "100%", + "small_perimeter_speed": "50%", + "filename_format": "{input_filename_base}_{\"E\"}{initial_tool}_{filament_type[initial_tool]}_{print_time}.gcode" +} diff --git a/resources/profiles/re3D/process/fdm_process_common.json b/resources/profiles/re3D/process/fdm_process_common.json index 164ff9d58a..dcd5c826ae 100644 --- a/resources/profiles/re3D/process/fdm_process_common.json +++ b/resources/profiles/re3D/process/fdm_process_common.json @@ -6,34 +6,27 @@ "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "bridge_flow": "0.95", - "bridge_speed": "10", "brim_width": "5", "compatible_printers": [], "print_sequence": "by layer", - "default_acceleration": "0", "bridge_no_support": "0", "elefant_foot_compensation": "0.1", "outer_wall_line_width": "0.4", - "outer_wall_speed": "25", "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", "initial_layer_line_width": "0.4", "initial_layer_print_height": "0.2", - "initial_layer_speed": "15", - "gap_infill_speed": "25", "infill_combination": "0", "sparse_infill_line_width": "0.4", "infill_wall_overlap": "25%", - "sparse_infill_speed": "70", "interface_shells": "0", "detect_overhang_wall": "0", "reduce_infill_retraction": "0", "filename_format": "{input_filename_base}.gcode", "wall_loops": "3", "inner_wall_line_width": "0.4", - "inner_wall_speed": "40", "print_settings_id": "", "raft_layers": "0", "seam_position": "nearest", @@ -41,7 +34,6 @@ "skirt_height": "2", "minimum_sparse_infill_area": "0", "internal_solid_infill_line_width": "0.4", - "internal_solid_infill_speed": "60", "spiral_mode": "0", "standby_temperature_delta": "-20", "enable_support": "0", @@ -53,16 +45,12 @@ "support_interface_loop_pattern": "0", "support_interface_top_layers": "2", "support_interface_spacing": "0", - "support_interface_speed": "80", "support_base_pattern": "rectilinear", "support_base_pattern_spacing": "2", - "support_speed": "40", "support_threshold_angle": "30", "support_object_xy_distance": "0.5", "detect_thin_wall": "0", "top_surface_line_width": "0.4", - "top_surface_speed": "35", - "travel_speed": "150", "enable_prime_tower": "1", "prime_tower_width": "60", "xy_hole_compensation": "0", diff --git a/resources/profiles/re3D/process/fdm_process_re3D_common.json b/resources/profiles/re3D/process/fdm_process_re3D_common.json index a1547448e3..ea169330f4 100644 --- a/resources/profiles/re3D/process/fdm_process_re3D_common.json +++ b/resources/profiles/re3D/process/fdm_process_re3D_common.json @@ -1,116 +1,88 @@ { - "type": "process", - "name": "fdm_process_re3D_common", - "from": "system", - "instantiation": "false", - "inherits": "fdm_process_common", - "adaptive_layer_height": "0", - "reduce_crossing_wall": "1", - "bridge_flow": "0.985", - "bridge_speed": "25", - "brim_width": "8", - "print_sequence": "by layer", - "default_acceleration": "5000", - "bridge_no_support": "0", - "elefant_foot_compensation": "0", - "outer_wall_speed": "120", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "rectilinear", - "initial_layer_speed": "50", - "gap_infill_speed": "30", - "infill_combination": "0", - "infill_wall_overlap": "25%", - "sparse_infill_speed": "50", - "detect_overhang_wall": "1", - "reduce_infill_retraction": "0", - "filename_format": "{input_filename_base}.gcode", - "wall_loops": "3", - "inner_wall_speed": "40", - "wall_generator": "arachne", - "raft_layers": "0", - "seam_position": "nearest", - "skirt_distance": "8", - "skirt_height": "1", - "minimum_sparse_infill_area": "0", - "internal_solid_infill_speed": "40", - "spiral_mode": "0", - "standby_temperature_delta": "-75", - "enable_support": "1", - "support_filament": "0", - "support_interface_filament": "0", - "support_on_build_plate_only": "0", - "support_interface_loop_pattern": "0", - "support_interface_top_layers": "2", - "support_interface_spacing": "0.05", - "support_interface_speed": "80", - "support_base_pattern": "rectilinear", - "support_base_pattern_spacing": "2", - "support_speed": "40", - "support_threshold_angle": "30", - "support_object_xy_distance": "0.5", - "detect_thin_wall": "0", - "top_surface_speed": "30", - "travel_speed": "300", - "enable_prime_tower": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "3", - "bottom_shell_thickness": "0", - "brim_object_gap": "0.1", - "compatible_printers_condition": "", - "top_surface_acceleration": "500", - "draft_shield": "disabled", - "enable_arc_fitting": "1", - "wall_infill_order": "inner wall/outer wall/infill", - "infill_direction": "45", - "initial_layer_acceleration": "500", - "travel_acceleration": "5000", - "inner_wall_acceleration": "5000", - "interface_shells": "0", - "ironing_flow": "10%", - "ironing_spacing": "0.1", - "ironing_speed": "20", - "ironing_type": "no ironing", - "overhang_1_4_speed": "45", - "overhang_2_4_speed": "35", - "overhang_3_4_speed": "25", - "overhang_4_4_speed": "15", - "print_settings_id": "fdm_process_re3D_common", - "skirt_loops": "2", - "resolution": "0.0", - "support_type": "normal(auto)", - "support_style": "snug", - "support_interface_bottom_layers": "2", - "tree_support_branch_angle": "45", - "tree_support_wall_count": "0", - "top_surface_pattern": "monotonicline", - "top_shell_layers": "4", - "top_shell_thickness": "0.6", - "initial_layer_infill_speed": "50", - "wipe_tower_no_sparse_layers": "0", - "precise_outer_wall": "0", - "outer_wall_acceleration": "2500", - "bridge_acceleration": "5000", - "sparse_infill_acceleration": "5000", - "internal_solid_infill_acceleration": "5000", - "accel_to_decel_enable": "0", - "prime_volume": "200", - "ooze_prevention": "1", - "preheat_time": "30", - "initial_layer_travel_speed": "100", - "slow_down_layers": "2", - "small_perimeter_speed": "20", - "small_perimeter_threshold": "10", - "exclude_object": "1", - "compatible_printers": [ - "re3D Gigabot 4 0.4 nozzle", - "re3D Gigabot 4 0.8 nozzle", - "re3D Gigabot 4 XLT 0.4 nozzle", - "re3D Gigabot 4 XLT 0.8 nozzle", - "re3D Terabot 4 0.4 nozzle", - "re3D Terabot 4 0.8 nozzle" - ] -} \ No newline at end of file + "type": "process", + "name": "fdm_process_re3D_common", + "from": "system", + "instantiation": "false", + "inherits": "fdm_process_common", + "adaptive_layer_height": "0", + "reduce_crossing_wall": "1", + "bridge_flow": "0.985", + "brim_width": "8", + "print_sequence": "by layer", + "bridge_no_support": "0", + "elefant_foot_compensation": "0", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "rectilinear", + "infill_combination": "0", + "infill_wall_overlap": "25%", + "detect_overhang_wall": "1", + "reduce_infill_retraction": "0", + "filename_format": "{input_filename_base}.gcode", + "wall_loops": "3", + "wall_generator": "arachne", + "raft_layers": "0", + "seam_position": "nearest", + "skirt_distance": "8", + "skirt_height": "1", + "minimum_sparse_infill_area": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-75", + "enable_support": "1", + "support_filament": "0", + "support_interface_filament": "0", + "support_on_build_plate_only": "0", + "support_interface_loop_pattern": "0", + "support_interface_top_layers": "2", + "support_interface_spacing": "0.05", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2", + "support_threshold_angle": "30", + "support_object_xy_distance": "0.5", + "detect_thin_wall": "0", + "enable_prime_tower": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "brim_object_gap": "0.1", + "compatible_printers_condition": "", + "draft_shield": "disabled", + "enable_arc_fitting": "1", + "wall_infill_order": "inner wall/outer wall/infill", + "infill_direction": "45", + "interface_shells": "0", + "ironing_flow": "10%", + "ironing_spacing": "0.1", + "ironing_type": "no ironing", + "print_settings_id": "fdm_process_re3D_common", + "skirt_loops": "2", + "resolution": "0.0", + "support_type": "normal(auto)", + "support_style": "snug", + "support_interface_bottom_layers": "2", + "tree_support_branch_angle": "45", + "tree_support_wall_count": "0", + "top_surface_pattern": "monotonicline", + "top_shell_layers": "4", + "top_shell_thickness": "0.6", + "wipe_tower_no_sparse_layers": "0", + "precise_outer_wall": "0", + "accel_to_decel_enable": "0", + "prime_volume": "200", + "ooze_prevention": "1", + "preheat_time": "30", + "slow_down_layers": "2", + "small_perimeter_threshold": "10", + "exclude_object": "1", + "compatible_printers": [ + "re3D Gigabot 4 0.4 nozzle", + "re3D Gigabot 4 0.8 nozzle", + "re3D Gigabot 4 XLT 0.4 nozzle", + "re3D Gigabot 4 XLT 0.8 nozzle", + "re3D Terabot 4 0.4 nozzle", + "re3D Terabot 4 0.8 nozzle" + ] +} From 9421e7fa9bb69767ead7b10e9b47570d94597ca6 Mon Sep 17 00:00:00 2001 From: TheLegendTubaGuy <95944177+thelegendtubaguy@users.noreply.github.com> Date: Sat, 8 Aug 2026 18:08:54 -0500 Subject: [PATCH 48/66] Fix detached copies of system presets (#15173) * Fix detached copies of system presets * Clarify detached preset compatibility * Show unique preset state in save dialog * Update SavePresetDialog.cpp --------- Co-authored-by: yw4z --- src/slic3r/GUI/SavePresetDialog.cpp | 47 ++++++++++++++++++----------- 1 file changed, 29 insertions(+), 18 deletions(-) diff --git a/src/slic3r/GUI/SavePresetDialog.cpp b/src/slic3r/GUI/SavePresetDialog.cpp index e24a2fc497..0b33e48ec4 100644 --- a/src/slic3r/GUI/SavePresetDialog.cpp +++ b/src/slic3r/GUI/SavePresetDialog.cpp @@ -111,18 +111,20 @@ SavePresetDialog::Item::Item(Preset::Type type, const std::string &suffix, wxBox sizer->Add(m_radio_group, 0, wxEXPAND | wxTOP | wxLEFT, BORDER_W); - std::string inherits_str = sel_preset.inherits(); - if (parent->m_mode == comDevelop && !inherits_str.empty()) { + if (parent->m_mode == comDevelop) { + // A new user copy of a system preset inherits from the selected system preset. + const std::string parent_name = sel_preset.is_system ? sel_preset.name : sel_preset.inherits(); + const bool can_detach = !parent_name.empty(); + wxBoxSizer *detach_sizer = new wxBoxSizer(wxHORIZONTAL); - auto detach_tooltip = _L("Copies all inherited values from the parent preset into this preset and removes the connection with the parent preset."); + auto detach_tooltip = _L("Copies all inherited values from the parent into this preset and removes the parent relationship. Presets compatible only with the parent may become unsupported."); auto detach_checkbox = new ::CheckBox(parent); detach_checkbox->SetToolTip(detach_tooltip); auto detach_label = new wxStaticText(parent, wxID_ANY, _L("Detach from parent")); detach_label->SetFont(::Label::Body_14); - detach_label->SetForegroundColour(wxColour("#363636")); detach_label->SetToolTip(detach_tooltip); detach_sizer->Add(detach_checkbox, 0, wxALIGN_LEFT | wxLEFT, BORDER_W); @@ -130,27 +132,36 @@ SavePresetDialog::Item::Item(Preset::Type type, const std::string &suffix, wxBox sizer->Add(detach_sizer, 0, wxEXPAND | wxTOP, BORDER_W); sizer->AddSpacer(FromDIP(5)); - auto parent_label = new wxStaticText(parent, wxID_ANY, inherits_str); + const wxString parent_text = can_detach ? from_u8(parent_name) : _L("Unique preset"); + auto parent_label = new wxStaticText(parent, wxID_ANY, parent_text); parent_label->SetFont(::Label::Body_12); parent_label->SetForegroundColour(wxColour("#6B6B6B")); - parent_label->SetToolTip(_L("Parent preset")); + parent_label->SetToolTip(can_detach ? _L("Parent preset") : _L("This preset does not inherit from another preset.")); sizer->Add(parent_label, 0, wxEXPAND | wxLEFT, BORDER_W + FromDIP(24)); sizer->AddSpacer(FromDIP(5)); - // Set initial state (unchecked by default) - detach_checkbox->SetValue(m_detach); - // Bind the checkbox event to update the detach state for this item - detach_checkbox->Bind(wxEVT_TOGGLEBUTTON, [this, detach_checkbox](wxCommandEvent&) { m_detach = detach_checkbox->GetValue(); }); + if (!can_detach) { + detach_checkbox->Disable(); + detach_label->SetForegroundColour(wxColour("#6B6B6B")); + } + else { + // Set initial state (unchecked by default) + detach_checkbox->SetValue(m_detach); + // Bind the checkbox event to update the detach state for this item + detach_checkbox->Bind(wxEVT_TOGGLEBUTTON, [this, detach_checkbox](wxCommandEvent&) { m_detach = detach_checkbox->GetValue(); }); - auto on_toggle = [this, detach_checkbox]() { - detach_checkbox->SetValue(!detach_checkbox->GetValue()); - wxCommandEvent ev(wxEVT_TOGGLEBUTTON, detach_checkbox->GetId()); - ev.SetEventObject(detach_checkbox); - detach_checkbox->GetEventHandler()->ProcessEvent(ev); - }; - detach_label->Bind(wxEVT_LEFT_DOWN, [on_toggle](wxMouseEvent& e) {if(!e.LeftDClick()) on_toggle();}); - detach_label->Bind(wxEVT_LEFT_DCLICK, [on_toggle](wxMouseEvent& e) {on_toggle();}); + detach_label->SetForegroundColour(wxColour("#363636")); + + auto on_toggle = [this, detach_checkbox]() { + detach_checkbox->SetValue(!detach_checkbox->GetValue()); + wxCommandEvent ev(wxEVT_TOGGLEBUTTON, detach_checkbox->GetId()); + ev.SetEventObject(detach_checkbox); + detach_checkbox->GetEventHandler()->ProcessEvent(ev); + }; + detach_label->Bind(wxEVT_LEFT_DOWN, [on_toggle](wxMouseEvent& e) {if(!e.LeftDClick()) on_toggle();}); + detach_label->Bind(wxEVT_LEFT_DCLICK, [on_toggle](wxMouseEvent& e) {on_toggle();}); + } } m_radio_group->Bind(wxEVT_COMMAND_RADIOBOX_SELECTED, [this](wxCommandEvent &e) { From 1a8f39c5f7322dc7d57343a511f9cf78a9c3a629 Mon Sep 17 00:00:00 2001 From: yw4z Date: Sun, 9 Aug 2026 08:24:04 +0300 Subject: [PATCH 49/66] Fix emboss gizmo font preview of style not rendering properly (#14612) --- .../GUI/Jobs/CreateFontStyleImagesJob.cpp | 30 ++++++++++--------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/src/slic3r/GUI/Jobs/CreateFontStyleImagesJob.cpp b/src/slic3r/GUI/Jobs/CreateFontStyleImagesJob.cpp index f988f622ce..31bd6728b1 100644 --- a/src/slic3r/GUI/Jobs/CreateFontStyleImagesJob.cpp +++ b/src/slic3r/GUI/Jobs/CreateFontStyleImagesJob.cpp @@ -45,24 +45,26 @@ void CreateFontStyleImagesJob::process(Ctl &ctl) for (const ExPolygon &shape : shapes) bounding_box.merge(BoundingBox(shape.contour.points)); for (ExPolygon &shape : shapes) shape.translate(-bounding_box.min); - - // calculate conversion from FontPoint to screen pixels by size of font - double scale = get_text_shape_scale(item.prop, *item.font.font_file) * m_input.ppm; - scales[index] = scale; - //double scale = font_prop.size_in_mm * SCALING_FACTOR; - BoundingBoxf bb2(bounding_box.min.cast(), - bounding_box.max.cast()); + if (bounding_box.size().x() < 1 || bounding_box.size().y() < 1) + continue; // or however the font job's degenerate-box case is handled + + // Normalize to fit max_size, exactly like CreateFontImageJob does against m_input.size. + // Fit by height (matches row height), then clamp width if needed. + constexpr float preview_padding_px = 2.f; // margin for AA sampling, tune to your AA kernel radius + + double scale = m_input.max_size.y() / (double) bounding_box.size().y(); + BoundingBoxf bb2(bounding_box.min.cast(), bounding_box.max.cast()); bb2.scale(scale); - image.tex_size.x = std::ceil(bb2.max.x() - bb2.min.x()); - image.tex_size.y = std::ceil(bb2.max.y() - bb2.min.y()); - // crop image width - if (image.tex_size.x > m_input.max_size.x()) + // crop width only if the (now height-normalized) text is too wide + image.tex_size.x = std::ceil(bb2.max.x() - bb2.min.x()) + 2 * preview_padding_px; + image.tex_size.y = std::ceil(bb2.max.y() - bb2.min.y()) + 2 * preview_padding_px; + + if (image.tex_size.x > m_input.max_size.x()) image.tex_size.x = m_input.max_size.x(); - // crop image height - if (image.tex_size.y > m_input.max_size.y()) - image.tex_size.y = m_input.max_size.y(); + + scales[index] = scale; } // arrange bounding boxes From c806a09c7cfaaf4c0d19aca7f6cb505487c8ecc8 Mon Sep 17 00:00:00 2001 From: Anson Liu Date: Sun, 9 Aug 2026 20:04:17 -0700 Subject: [PATCH 50/66] Show current filaments at top of AMS filament dropdown (#11293) * Move currently active filaments added to the Prepare sidebar to the top of the AMS Material Selection combo box. It is likely the user wants to set the material to the currently active filament. * Reduce logging verbosity. * Refactor current active preset filament finding to find nested preset inheritance. * Initialize pointer to null before usage. * Remove old commit code * Remove new line --------- Co-authored-by: Ioannis Giannakas <59056762+igiannakas@users.noreply.github.com> Co-authored-by: yw4z --- src/slic3r/GUI/AMSMaterialsSetting.cpp | 53 +++++++++++++++++++++++++- 1 file changed, 51 insertions(+), 2 deletions(-) diff --git a/src/slic3r/GUI/AMSMaterialsSetting.cpp b/src/slic3r/GUI/AMSMaterialsSetting.cpp index 74165c20fe..35db1a3955 100644 --- a/src/slic3r/GUI/AMSMaterialsSetting.cpp +++ b/src/slic3r/GUI/AMSMaterialsSetting.cpp @@ -1075,7 +1075,7 @@ void AMSMaterialsSetting::Popup(wxString filament, wxString sn, wxString temp_mi // Sort the filaments { - static std::unordered_map sorted_names + std::unordered_map sorted_names = { {"Bambu PLA Basic", 0}, {"Bambu PLA Matte", 1}, {"Bambu PETG HF", 2}, @@ -1090,9 +1090,58 @@ void AMSMaterialsSetting::Popup(wxString filament, wxString sn, wxString temp_mi {"Bambu ABS-GF", 11} }; + // Helper lambda to find a filament Preset by name. We can call this multiple times to walk the inheritance chain and find the base filament. + auto find_filament_by_name = [](const std::string& wanted, const PresetCollection& filaments) -> const Preset* { + for (auto it = filaments.begin(); it != filaments.end(); ++it) { + if (it->name == wanted) { + return &(*it); + } + } + return nullptr; + }; + + // For each active filament preset, find matching Preset in bundle->filaments and add the base filament alias to sorted_names in highest rank in extruder order + auto bundle = wxGetApp().preset_bundle; + const auto& preset_names = bundle->filament_presets; + for (size_t i = preset_names.size(); i-- > 0; ) { + std::string wanted = preset_names[i]; + const int sort_rank = -((int)preset_names.size() - i); + + const Preset* match = nullptr; + + do { + auto find_result = find_filament_by_name(wanted, bundle->filaments); + if (!find_result) { + BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << " No available filament name matches " << wanted; + break; + } + + match = find_result; + + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " Found available filament matching current preset name " << wanted + << " - Name: " << match->name << " - Alias: " << match->alias + << " - Inherits: " << match->inherits(); + + if (match->inherits().length() == 0) { + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " No more inherits so we reached the base filament"; + break; + } + + wanted = match->inherits(); + } while (1); // Or loop while (match->alias.length() == 0) because existence of alias and inherits on a Preset seem to be exclusive + + if (!match) { + continue; + } + + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " Update filament rank to " + std::to_string(sort_rank) + " for preset Name: " + << match->name << " - Alias: " << match->alias; + sorted_names.insert_or_assign(match->alias, sort_rank); + } + static std::vector sorted_vendors { "Bambu Lab", "Generic" }; static std::vector sorted_types { "PLA", "PETG", "ABS", "TPU" }; - auto _filament_sorter = [&query_filament_vendors, &query_filament_types](const wxString& left, const wxString& right) -> bool + auto _filament_sorter = [&query_filament_vendors, &query_filament_types, &sorted_names](const wxString& left, const wxString& right) -> bool { { // Compare name order const auto& iter1 = sorted_names.find(left); From b422636740623f5513692e103fc8af4433acdbf6 Mon Sep 17 00:00:00 2001 From: Anson Liu Date: Mon, 10 Aug 2026 23:51:25 -0700 Subject: [PATCH 51/66] Move Generic vendor above Bambu vendor in AMS material setting. (#11306) * Move Generic vendor above Bambu vendor in AMS material setting. * Remove hardcoded sorted_names. Alphabetically sort Bambu with all vendors * Fix sorting with case insensitive comparison * Use arithmetic to get rank distance because priorities are stored in a vector. This lets us remove the include. --- src/slic3r/GUI/AMSMaterialsSetting.cpp | 83 +++++++++++++------------- 1 file changed, 43 insertions(+), 40 deletions(-) diff --git a/src/slic3r/GUI/AMSMaterialsSetting.cpp b/src/slic3r/GUI/AMSMaterialsSetting.cpp index 35db1a3955..2e436e8462 100644 --- a/src/slic3r/GUI/AMSMaterialsSetting.cpp +++ b/src/slic3r/GUI/AMSMaterialsSetting.cpp @@ -4,6 +4,7 @@ #include "GUI_App.hpp" #include "libslic3r/Preset.hpp" #include "I18N.hpp" +#include #include #include #include @@ -1075,20 +1076,7 @@ void AMSMaterialsSetting::Popup(wxString filament, wxString sn, wxString temp_mi // Sort the filaments { - std::unordered_map sorted_names = - { {"Bambu PLA Basic", 0}, - {"Bambu PLA Matte", 1}, - {"Bambu PETG HF", 2}, - {"Bambu ABS", 3}, - {"Bambu PLA Silk", 4}, - {"Bambu PLA-CF" , 5}, - {"Bambu PLA Galaxy", 6}, - {"Bambu PLA Metal", 7}, - {"Bambu PLA Marble", 8}, - {"Bambu PETG-CF", 9}, - {"Bambu PETG Translucent", 10}, - {"Bambu ABS-GF", 11} - }; + std::unordered_map selected_filament_ranks; // Helper lambda to find a filament Preset by name. We can call this multiple times to walk the inheritance chain and find the base filament. auto find_filament_by_name = [](const std::string& wanted, const PresetCollection& filaments) -> const Preset* { @@ -1100,12 +1088,12 @@ void AMSMaterialsSetting::Popup(wxString filament, wxString sn, wxString temp_mi return nullptr; }; - // For each active filament preset, find matching Preset in bundle->filaments and add the base filament alias to sorted_names in highest rank in extruder order + // For each active filament preset, find its base filament alias and promote it in extruder order. auto bundle = wxGetApp().preset_bundle; const auto& preset_names = bundle->filament_presets; for (size_t i = preset_names.size(); i-- > 0; ) { std::string wanted = preset_names[i]; - const int sort_rank = -((int)preset_names.size() - i); + const int sort_rank = -static_cast(preset_names.size() - i); const Preset* match = nullptr; @@ -1136,42 +1124,57 @@ void AMSMaterialsSetting::Popup(wxString filament, wxString sn, wxString temp_mi BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " Update filament rank to " + std::to_string(sort_rank) + " for preset Name: " << match->name << " - Alias: " << match->alias; - sorted_names.insert_or_assign(match->alias, sort_rank); + selected_filament_ranks.insert_or_assign(match->alias, sort_rank); } - static std::vector sorted_vendors { "Bambu Lab", "Generic" }; - static std::vector sorted_types { "PLA", "PETG", "ABS", "TPU" }; - auto _filament_sorter = [&query_filament_vendors, &query_filament_types, &sorted_names](const wxString& left, const wxString& right) -> bool + static const std::vector sorted_vendors { "Generic" }; + static const std::vector sorted_types { "PLA", "PETG", "ABS", "TPU" }; + auto priority_rank = [](const std::vector& priorities, const wxString& value) { + const auto iter = std::find_if(priorities.begin(), priorities.end(), [&value](const wxString& priority) { + return priority.CmpNoCase(value) == 0; + }); + return iter - priorities.begin(); + }; + auto _filament_sorter = [&query_filament_vendors, &query_filament_types, &selected_filament_ranks, &priority_rank](const wxString& left, const wxString& right) -> bool { - { // Compare name order - const auto& iter1 = sorted_names.find(left); - int name_order1 = (iter1 != sorted_names.end()) ? iter1->second : INT_MAX; + { // Compare selected filament order + const auto& iter1 = selected_filament_ranks.find(left); + int selected_order1 = (iter1 != selected_filament_ranks.end()) ? iter1->second : INT_MAX; - const auto& iter2 = sorted_names.find(right); - int name_order2 = (iter2 != sorted_names.end()) ? iter2->second : INT_MAX; - if (name_order1 != name_order2) + const auto& iter2 = selected_filament_ranks.find(right); + int selected_order2 = (iter2 != selected_filament_ranks.end()) ? iter2->second : INT_MAX; + if (selected_order1 != selected_order2) { - return name_order1 < name_order2; + return selected_order1 < selected_order2; } } { // Compare vendor - auto iter1 = std::find(sorted_vendors.begin(), sorted_vendors.end(), query_filament_vendors[left]); - auto iter2 = std::find(sorted_vendors.begin(), sorted_vendors.end(), query_filament_vendors[right]); - if (iter1 != iter2) - { - return iter1 < iter2; - }; + const wxString& vendor1 = query_filament_vendors.at(left); + const wxString& vendor2 = query_filament_vendors.at(right); + const auto rank1 = priority_rank(sorted_vendors, vendor1); + const auto rank2 = priority_rank(sorted_vendors, vendor2); + if (rank1 != rank2) + return rank1 < rank2; + + const int vendor_compare = vendor1.CmpNoCase(vendor2); + if (vendor_compare != 0) + return vendor_compare < 0; } { // Compare type - auto iter1 = std::find(sorted_types.begin(), sorted_types.end(), query_filament_types[left]); - auto iter2 = std::find(sorted_types.begin(), sorted_types.end(), query_filament_types[right]); - if (iter1 != iter2) - { - return iter1 < iter2; - } + const wxString& type1 = query_filament_types.at(left); + const wxString& type2 = query_filament_types.at(right); + const auto rank1 = priority_rank(sorted_types, type1); + const auto rank2 = priority_rank(sorted_types, type2); + if (rank1 != rank2) + return rank1 < rank2; + + const int type_compare = type1.CmpNoCase(type2); + if (type_compare != 0) + return type_compare < 0; } - return left < right; + const int name_compare = left.CmpNoCase(right); + return name_compare != 0 ? name_compare < 0 : left < right; }; std::sort(filament_items.begin(), filament_items.end(), _filament_sorter); From c5d2944ee06dab86e8f90807d7622c97f822df86 Mon Sep 17 00:00:00 2001 From: Ian Bassi Date: Tue, 11 Aug 2026 09:54:37 -0300 Subject: [PATCH 52/66] Euskera update (#15215) Based in https://github.com/OrcaSlicer/OrcaSlicer/pull/14970#issuecomment-5145928650 --- localization/i18n/eu/OrcaSlicer_eu.po | 28 +++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/localization/i18n/eu/OrcaSlicer_eu.po b/localization/i18n/eu/OrcaSlicer_eu.po index 430e4f5a60..fa10cc387f 100644 --- a/localization/i18n/eu/OrcaSlicer_eu.po +++ b/localization/i18n/eu/OrcaSlicer_eu.po @@ -12013,11 +12013,11 @@ msgstr "Purgatze-dorreak euskarriak objektuaren geruza-altuera bera izatea eskat # AI Translated msgid "For Organic supports, two walls are supported only with the Hollow/Default base pattern." -msgstr "Euskarri organikoetan, bi horma Hollow/Default oinarri-patroiarekin soilik onartzen dira." +msgstr "Euskarri organikoetan, bi horma Hutsa/Lehenetsia oinarri-patroiarekin soilik onartzen dira." # AI Translated msgid "The Lightning base pattern is not supported by this support type; Rectilinear will be used instead." -msgstr "Lightning oinarri-patroia ez du euskarri mota honek onartzen; Rectilinear erabiliko da horren ordez." +msgstr "Tximista oinarri-patroia ez du euskarri mota honek onartzen; Lerrozuzena erabiliko da horren ordez." msgid "Organic support tree tip diameter must not be smaller than support material extrusion width." msgstr "Euskarri organikoaren zuhaitz-muturraren diametroak ezin du izan euskarri-materialaren estrusio-zabalera baino txikiagoa." @@ -12030,7 +12030,7 @@ msgstr "Euskarri organikoaren adar-diametroak ezin du izan euskarri-zuhaitzaren # AI Translated msgid "The Hollow base pattern is not supported by this support type; Rectilinear will be used instead." -msgstr "Hollow oinarri-patroia ez du euskarri mota honek onartzen; Rectilinear erabiliko da horren ordez." +msgstr "Hutsa oinarri-patroia ez du euskarri mota honek onartzen; Lerrozuzena erabiliko da horren ordez." msgid "Support enforcers are used but support is not enabled. Please enable support." msgstr "Euskarri-behartzaileak erabiltzen dira, baina euskarria ez dago gaituta. Gaitu euskarriak." @@ -13252,7 +13252,7 @@ msgstr "Moderatua" # AI Translated msgid "Top surface pattern" -msgstr "Goiko gainazalaren patroia" +msgstr "Goiko gainazaleko patroia" # AI Translated msgid "This is the line pattern for top surface infill." @@ -13265,13 +13265,13 @@ msgid "Monotonic line" msgstr "Lerro monotonikoa" msgid "Rectilinear" -msgstr "Rectilinear" +msgstr "Lerrozuzena" msgid "Aligned Rectilinear" msgstr "Lerrozuzen lerrokatua" msgid "Concentric" -msgstr "Concentric" +msgstr "Kontzentrikoa" msgid "Hilbert Curve" msgstr "Hilbert kurba" @@ -13337,7 +13337,7 @@ msgstr "Kanporantz" # AI Translated msgid "Bottom surface pattern" -msgstr "Beheko gainazalaren patroia" +msgstr "Beheko gainazaleko patroia" # AI Translated msgid "This is the line pattern of bottom surface infill, not including bridge infill." @@ -13362,7 +13362,7 @@ msgid "" "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" "Default uses shortest-path ordering, which may run in either direction." msgstr "" -"Gaineko gainazalak betetzen diren noranzkoa zentroan oinarritutako patroia erabiltzen denean (Konzentrikoa, Arkimedeen Akordeak, Oktograma Espirala).\n" +"Goiko gainazalak betetzen diren noranzkoa zentroan oinarritutako patroia erabiltzen denean (Kontzentrikoa, Arkimedesen kordak, Oktagrama-kiribila).\n" "Kanporanzkoa erdialdean hasten da, beraz, gehiegizko materiala gutxien ikusten den ertzera bultzatzen da. Barruranzkoa ertzean hasten da eta erdian kurba estuekin amaitzen da.\n" "Lehenetsiak bide laburreneko ordena erabiltzen du, zeina norabide batean zein bestean ibil daitekeen." @@ -13375,7 +13375,7 @@ msgid "" "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" "Default uses shortest-path ordering, which may run in either direction." msgstr "" -"Beheko gainazalak betetzen diren noranzkoa zentroan oinarritutako patroia erabiltzen denean (Konzentrikoa, Arkimedeen Akordeak, Oktograma Espirala).\n" +"Beheko gainazalak betetzen diren noranzkoa zentroan oinarritutako patroia erabiltzen denean (Kontzentrikoa, Arkimedesen kordak, Oktagrama-kiribila).\n" "Barruranzkoa hasten da gainazal bakoitza kanpoko kurba zabalagoekin, eta horrek lehen geruzaren atxikimendua hobetzen du erdiko kurba estuak itsatsi ez daitezkeen inprimatze-plaketan. Kanporanzkoa erdialdean hasten da, gehiegizko materiala ertzera bultzatuz.\n" "Lehenetsiak bide laburreneko ordena erabiltzen du, zeina norabide batean zein bestean ibil daitekeen." @@ -16431,9 +16431,9 @@ msgid "" msgstr "" "Euskarriaren lerro-patroia.\n" "\n" -"Zuhaitz-euskarrien aukera lehenetsia Hutsa da, hau da, ez dago oinarri-patroirik. Beste euskarri motetarako, aukera lehenetsia patroi zuzenekoa da.\n" +"Zuhaitz-euskarrien aukera lehenetsia Hutsa da, hau da, ez dago oinarri-patroirik. Beste euskarri motetarako, aukera lehenetsia patroi lerrozuzena da.\n" "\n" -"OHARRA: Euskarri organikoetan, bi hormak Hutsa/Lehenetsia oinarri-patroiarekin bakarrik onartzen dira. Tximistetan oinarritutako patroia Zuhaitz mehea/Indartsua/Hibridoa euskarriek bakarrik onartzen dute. Beste euskarri motetarako, Zuzenekoa erabiliko da Tximistenaren ordez." +"OHARRA: Euskarri organikoetan, bi hormak Hutsa/Lehenetsia oinarri-patroiarekin bakarrik onartzen dira. Tximista oinarri-patroia Zuhaitz mehea/Indartsua/Hibridoa euskarriek bakarrik onartzen dute. Beste euskarri motetarako, Lerrozuzena erabiliko da Tximistaren ordez." msgid "Rectilinear grid" msgstr "Sare lerrozuzena" @@ -16713,7 +16713,7 @@ msgid "" " - Each Model: centers the pattern on each connected body. Parts that touch or overlap share one center; parts detached from the rest each get their own.\n" " - Each Assembly: uses a single shared center for the whole object or assembly." msgstr "" -"Goiko eta beheko gainazaleko patroi zentratuen (Arkimedesen kordak, Oktagrama-espirala) zentroa non kokatzen den aukeratzen du.\n" +"Goiko eta beheko gainazaleko patroi zentratuen (Arkimedesen kordak, Oktagrama-kiribila) zentroa non kokatzen den aukeratzen du.\n" " - Gainazal bakoitza: patroia gainazal-eskualde bakoitzean zentratzen du, uharte bakoitza bere kabuz simetrikoa izan dadin.\n" " - Modelo bakoitza: patroia konektatutako gorputz bakoitzean zentratzen du. Elkar ukitzen edo gainjartzen diren piezek zentro bera partekatzen dute; gainerakoetatik bereizitako piezek beren zentroa dute.\n" " - Muntaketa bakoitza: zentro partekatu bakarra erabiltzen du objektu edo muntaketa osorako." @@ -17144,7 +17144,7 @@ msgid "Detect narrow internal solid infills" msgstr "Detektatu barruko betegarri solido estua" msgid "This option will auto-detect narrow internal solid infill areas. If enabled, the concentric pattern will be used for the area to speed up printing. Otherwise, the rectilinear pattern will be used by default." -msgstr "Aukera honek barruko betegarri solido estuko eremuak automatikoki detektatuko ditu. Gaituta badago, eremu horretan patroi zentrokidea erabiliko da inprimaketa azkartzeko. Bestela, patroi lerrozuzena erabiliko da lehenespenez." +msgstr "Aukera honek barruko betegarri solido estuko eremuak automatikoki detektatuko ditu. Gaituta badago, eremu horretan patroi kontzentrikoa erabiliko da inprimaketa azkartzeko. Bestela, patroi lerrozuzena erabiliko da lehenespenez." msgid "invalid value " msgstr "balio baliogabea " @@ -18703,7 +18703,7 @@ msgstr "YOLO (perfekzionista)" # AI Translated msgid "Top Surface Pattern" -msgstr "Goiko gainazalaren patroia" +msgstr "Goiko gainazaleko patroia" msgid "Choose a slot for the selected color" msgstr "Aukeratu zirrikitu bat hautatutako kolorearentzat" From 117ed0060d5ba6327cc993c9dcdd40de4b6c24a2 Mon Sep 17 00:00:00 2001 From: Kiss Lorand <50251547+kisslorand@users.noreply.github.com> Date: Tue, 11 Aug 2026 22:25:09 +0300 Subject: [PATCH 53/66] Fix Celsius symbol rendering in Preview (#15202) --- deps_src/imgui/imgui_draw.cpp | 1 + src/slic3r/GUI/ImGuiWrapper.cpp | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/deps_src/imgui/imgui_draw.cpp b/deps_src/imgui/imgui_draw.cpp index 913a551fa0..d88bc79904 100644 --- a/deps_src/imgui/imgui_draw.cpp +++ b/deps_src/imgui/imgui_draw.cpp @@ -2856,6 +2856,7 @@ const ImWchar* ImFontAtlas::GetGlyphRangesDefault() { 0x0020, 0x00FF, // Basic Latin + Latin Supplement 0x2000, 0x206F, // General Punctuation + 0x2103, 0x2103, // ℃ Celsius symbol 0x3000, 0x30FF, // CJK Symbols and Punctuations, Hiragana, Katakana 0x31F0, 0x31FF, // Katakana Phonetic Extensions 0xFF00, 0xFFEF, // Half-width characters diff --git a/src/slic3r/GUI/ImGuiWrapper.cpp b/src/slic3r/GUI/ImGuiWrapper.cpp index 8974a169d1..d46e8ed31b 100644 --- a/src/slic3r/GUI/ImGuiWrapper.cpp +++ b/src/slic3r/GUI/ImGuiWrapper.cpp @@ -2809,12 +2809,26 @@ void ImGuiWrapper::init_font(bool compress) } } + if (m_glyph_ranges == ImGui::GetIO().Fonts->GetGlyphRangesThai()) { + ImFontConfig fallback_cfg = cfg; + fallback_cfg.MergeMode = true; + static constexpr ImWchar celsius_range[] = { 0x2103, 0x2103, 0 }; + io.Fonts->AddFontFromFileTTF((Slic3r::resources_dir() + "/fonts/HarmonyOS_Sans_SC_Regular.ttf").c_str(), m_font_size, &fallback_cfg, celsius_range); + } + bold_font = io.Fonts->AddFontFromFileTTF((Slic3r::resources_dir() + "/fonts/" + font_name_bold).c_str(), m_font_size, &cfg, ranges.Data); if (bold_font == nullptr) { bold_font = io.Fonts->AddFontDefault(); if (bold_font == nullptr) { throw Slic3r::RuntimeError("ImGui: Could not load deafult font"); } } + if (m_glyph_ranges == ImGui::GetIO().Fonts->GetGlyphRangesThai()) { + ImFontConfig fallback_cfg = cfg; + fallback_cfg.MergeMode = true; + static constexpr ImWchar celsius_range[] = { 0x2103, 0x2103, 0 }; + io.Fonts->AddFontFromFileTTF((Slic3r::resources_dir() + "/fonts/HarmonyOS_Sans_SC_Bold.ttf").c_str(), m_font_size, &fallback_cfg, celsius_range); + } + if (m_glyph_ranges == ImGui::GetIO().Fonts->GetGlyphRangesThai()) { default_font->Scale *= 1.25f; bold_font->Scale *= 1.25f; From 6dbdb1d07e0448e0bcfc1c38451fc1d256d86c7a Mon Sep 17 00:00:00 2001 From: Terasit Juntarasombut <93132156+Icezaza2543@users.noreply.github.com> Date: Wed, 12 Aug 2026 02:56:59 +0700 Subject: [PATCH 54/66] l10n: Fix contextual and technical translation errors in Thai (th) (#15213) * l10n: Fix contextual and technical translation errors in Thai (th) * l10n(th): standardize technical terms and sync localization glossary (#15213) * l10n(th): remove localization_glossary.tsv from PR (#15213) --- localization/i18n/th/OrcaSlicer_th.po | 368 +++++++++++++------------- 1 file changed, 184 insertions(+), 184 deletions(-) diff --git a/localization/i18n/th/OrcaSlicer_th.po b/localization/i18n/th/OrcaSlicer_th.po index 6a4499d148..a419ba320e 100644 --- a/localization/i18n/th/OrcaSlicer_th.po +++ b/localization/i18n/th/OrcaSlicer_th.po @@ -843,7 +843,7 @@ msgid "Hexagon" msgstr "หกเหลี่ยม" msgid "Keep orientation" -msgstr "รักษาปฐมนิเทศ" +msgstr "คงการวางแนว" msgid "Place on cut" msgstr "วางบนการตัด" @@ -891,7 +891,7 @@ msgid "Cut position" msgstr "ตำแหน่งตัด" msgid "Build Volume" -msgstr "ปริมาตรพื้นที่พิมพ์" +msgstr "ปริมาตรการพิมพ์ (Build Volume)" msgid "Multiple" msgstr "หลายรายการ" @@ -1200,7 +1200,7 @@ msgid "Horizontal text" msgstr "ข้อความแนวนอน" msgid "Shift+" -msgstr "กะ+" +msgstr "Shift+" msgid "Mouse move up or down" msgstr "เมาส์เลื่อนขึ้นหรือลง" @@ -2592,7 +2592,7 @@ msgid "Ironing" msgstr "รีดผิว" msgid "Fuzzy skin" -msgstr "ผิวฟัซซี" +msgstr "ผิวฟัซซี (Fuzzy Skin)" msgid "Extruders" msgstr "ชุดดันเส้น" @@ -2817,10 +2817,10 @@ msgid "current" msgstr "ปัจจุบัน" msgid "Scale to build volume" -msgstr "ปรับขนาดเพื่อสร้างปริมาณ" +msgstr "ปรับขนาดให้พอดีกับปริมาตรการพิมพ์" msgid "Scale an object to fit the build volume" -msgstr "ปรับขนาดวัตถุให้พอดีกับปริมาณงานสร้าง" +msgstr "ปรับขนาดวัตถุให้พอดีกับปริมาตรการพิมพ์" msgid "Flush Options" msgstr "ตัวเลือกการไล่เส้น" @@ -2898,10 +2898,10 @@ msgid "Change SVG source file, projection, size, ..." msgstr "เปลี่ยนไฟล์ต้นฉบับ SVG, การฉายภาพ, ขนาด, ..." msgid "Invalidate cut info" -msgstr "ข้อมูลการตัดไม่ถูกต้อง" +msgstr "ยกเลิกข้อมูลการตัด" msgid "Add Primitive" -msgstr "เพิ่มดั้งเดิม" +msgstr "เพิ่มรูปทรงพื้นฐาน" msgid "Add Handy models" msgstr "เพิ่มรุ่นแฮนดี้" @@ -3027,7 +3027,7 @@ msgid "Center" msgstr "กึ่งกลาง" msgid "Drop" -msgstr "หยด" +msgstr "วางลงฐานพิมพ์" msgid "Edit Process Settings" msgstr "แก้ไขการตั้งค่ากระบวนการ" @@ -3182,7 +3182,7 @@ msgid "Switch to per-object setting mode to edit process settings of selected ob msgstr "สลับไปที่โหมดการตั้งค่าต่ออ็อบเจ็กต์เพื่อแก้ไขการตั้งค่ากระบวนการของอ็อบเจ็กต์ที่เลือก" msgid "Remove paint-on fuzzy skin" -msgstr "ลบสีบนผิวที่คลุมเครือ" +msgstr "ลบการระบายสีผิวฟัซซี" # AI Translated msgid "Delete Settings" @@ -3242,7 +3242,7 @@ msgid "Add layers" msgstr "เพิ่มเลเยอร์" msgid "Cut Connectors information" -msgstr "ตัดข้อมูลตัวเชื่อมต่อ" +msgstr "ข้อมูลตัวเชื่อมสำหรับการตัด" msgid "Object manipulation" msgstr "การจัดการวัตถุ" @@ -3279,7 +3279,7 @@ msgid "Layer" msgstr "เลเยอร์" msgid "Selection conflicts" -msgstr "ข้อขัดแย้งในการคัดเลือก" +msgstr "การเลือกขัดแย้งกัน" msgid "If the first selected item is an object, the second should also be an object." msgstr "หากรายการแรกที่เลือกเป็นวัตถุ รายการที่สองก็ควรเป็นวัตถุด้วย" @@ -3390,7 +3390,7 @@ msgid "Plate" msgstr "ฐานพิมพ์" msgid "Brim" -msgstr "ขอบยึดชิ้นงาน" +msgstr "ขอบยึดชิ้นงาน (Brim)" msgid "Object/Part Settings" msgstr "การตั้งค่าวัตถุ/ชิ้นส่วน" @@ -4786,7 +4786,7 @@ msgid "" "YES - Keep Prime Tower\n" "NO - Keep Adaptive Layer Height and Independent Support Layer Height" msgstr "" -"ไพรม์ทาวเวอร์ไม่ทำงานเมื่อเปิดใช้งาน Adaptive Layer Height หรือ Independent ส่วนรองรับ Layer Height\n" +"Prime Tower ไม่ทำงานเมื่อเปิดใช้งาน Adaptive Layer Height หรือ Independent ส่วนรองรับ Layer Height\n" "คุณต้องการเก็บอันไหน?\n" "ใช่ - เก็บ Prime Tower ไว้\n" "ไม่ - คงความสูงของเลเยอร์แบบปรับได้และความสูงของเลเยอร์รองรับที่เป็นอิสระ" @@ -4797,7 +4797,7 @@ msgid "" "YES - Keep Prime Tower\n" "NO - Keep Adaptive Layer Height" msgstr "" -"ไพรม์ทาวเวอร์ไม่ทำงานเมื่อเปิด Adaptive Layer Height\n" +"Prime Tower ไม่ทำงานเมื่อเปิด Adaptive Layer Height\n" "คุณต้องการเก็บอันไหน?\n" "ใช่ - เก็บ Prime Tower ไว้\n" "ไม่ - คงความสูงของเลเยอร์แบบปรับได้" @@ -4808,7 +4808,7 @@ msgid "" "YES - Keep Prime Tower\n" "NO - Keep Independent Support Layer Height" msgstr "" -"ไพร์มทาวเวอร์ไม่ทำงานเมื่อเปิดความสูงของเลเยอร์รองรับอิสระ\n" +"Prime Tower ไม่ทำงานเมื่อเปิดความสูงของเลเยอร์รองรับอิสระ\n" "คุณต้องการเก็บอันไหน?\n" "ใช่ - เก็บ Prime Tower ไว้\n" "ไม่ - รักษาความสูงของชั้นรองรับที่เป็นอิสระ" @@ -5381,7 +5381,7 @@ msgid "Pressure Advance" msgstr "แรงดันล่วงหน้า (Pressure Advance)" msgid "Noop" -msgstr "นะ" +msgstr "ไม่มีการดำเนินการ" msgid "Retract" msgstr "ดึงกลับ" @@ -5405,7 +5405,7 @@ msgid "Travel" msgstr "เดินหัวเปล่า" msgid "Wipe" -msgstr "เช็ดหัวฉีด" +msgstr "เช็ดหัวฉีด (Wipe)" msgid "Extrude" msgstr "ฉีดเส้น" @@ -5441,7 +5441,7 @@ msgid "Support interface" msgstr "ผิวสัมผัสส่วนรองรับ" msgid "Prime tower" -msgstr "ทาวเวอร์ไล่เส้น" +msgstr "Prime Tower" msgid "Bottom surface" msgstr "ผิวด้านล่าง" @@ -5486,7 +5486,7 @@ msgid "Jerk: " msgstr "เจิร์ก: " msgid "PA: " -msgstr "พ่อ:" +msgstr "PA: " msgid "mm/s" msgstr "มม./วินาที" @@ -5552,7 +5552,7 @@ msgid "Tips:" msgstr "เคล็ดลับ:" msgid "Current grouping of slice result is not optimal." -msgstr "การจัดกลุ่มผลลัพธ์การแบ่งส่วนในปัจจุบันไม่เหมาะสมที่สุด" +msgstr "การจัดกลุ่มผลการสไลซ์ปัจจุบันยังไม่เหมาะสม" #, boost-format msgid "Increase %1%g filament and %2% changes compared to optimal grouping." @@ -5585,7 +5585,7 @@ msgid "Regroup filament" msgstr "จัดกลุ่มเส้นพลาสติกใหม่" msgid "up to" -msgstr "ขึ้นไป" +msgstr "สูงสุด" msgid "above" msgstr "ข้างบน" @@ -5642,7 +5642,7 @@ msgid "Filament change times" msgstr "จำนวนครั้งที่เปลี่ยนเส้น" msgid "Tool changes" -msgstr "การเปลี่ยนแปลงเครื่องมือ" +msgstr "การเปลี่ยนเครื่องมือ" msgid "Color change" msgstr "เปลี่ยนสี" @@ -5673,7 +5673,7 @@ msgid "Model printing time" msgstr "ระยะเวลาในการพิมพ์โมเดล" msgid "Show stealth mode" -msgstr "แสดงโหมดซ่อนตัว" +msgstr "แสดงโหมดเงียบ" msgid "Show normal mode" msgstr "แสดงโหมดปกติ" @@ -5690,10 +5690,10 @@ msgid "" "Please solve the problem by moving it totally on or off the plate, and confirming that the height is within the build volume." msgstr "" "วัตถุวางอยู่เหนือขอบเขตของแผ่นหรือสูงเกินขีดจำกัดความสูง\n" -"โปรดแก้ไขปัญหาด้วยการเลื่อนเข้าหรือออกจากเพลตโดยสิ้นเชิง และยืนยันว่าความสูงอยู่ภายในปริมาตรงานประกอบ" +"โปรดแก้ไขปัญหาด้วยการเลื่อนเข้าหรือออกจากเพลตโดยสิ้นเชิง และยืนยันว่าความสูงอยู่ภายในปริมาตรการพิมพ์" msgid "Variable layer height" -msgstr "ความสูงของชั้นตัวแปร" +msgstr "ความสูงเลเยอร์แบบแปรผัน" msgid "Adaptive" msgstr "ปรับตัวได้" @@ -5743,7 +5743,7 @@ msgid "Following objects are laid over the boundary of plate or exceeds the heig msgstr "วัตถุต่อไปนี้วางอยู่เหนือขอบเขตของแผ่นหรือสูงเกินขีดจำกัดความสูง:\n" msgid "Please solve the problem by moving it totally on or off the plate, and confirming that the height is within the build volume.\n" -msgstr "โปรดแก้ไขปัญหาด้วยการเลื่อนเข้าหรือออกจากเพลตโดยสิ้นเชิง และยืนยันว่าความสูงอยู่ภายในปริมาตรงานประกอบ\n" +msgstr "โปรดแก้ไขปัญหาด้วยการเลื่อนเข้าหรือออกจากเพลตโดยสิ้นเชิง และยืนยันว่าความสูงอยู่ภายในปริมาตรการพิมพ์\n" #, c-format, boost-format msgid "The position or size of some models exceeds the %s's printable range." @@ -5783,7 +5783,7 @@ msgid "Optimize support interface area" msgstr "ปรับพื้นที่อินเทอร์เฟซส่วนรองรับให้เหมาะสม" msgid "Orient" -msgstr "ตะวันออก" +msgstr "จัดวางแนว" msgid "Arrange options" msgstr "ตัวเลือกจัดเรียง" @@ -5929,7 +5929,7 @@ msgid "Paint Toolbar" msgstr "แถบเครื่องมือสี" msgid "Explosion Ratio" -msgstr "อัตราส่วนการระเบิด" +msgstr "ระดับการแยกชิ้นส่วน" msgid "Section View" msgstr "มุมมองส่วน" @@ -6002,7 +6002,7 @@ msgid "PLA and PETG filaments detected in the mixture. Adjust parameters accordi msgstr "ตรวจพบเส้นพลาสติก PLA และ PETG ในส่วนผสม ปรับพารามิเตอร์ตาม Wiki เพื่อรับรองคุณภาพการพิมพ์" msgid "The prime tower extends beyond the plate boundary." -msgstr "หอคอยหลักขยายออกไปเกินขอบเขตแผ่นเปลือกโลก" +msgstr "Prime Tower ยื่นออกนอกขอบเขตของเพลตพิมพ์" msgid "Partial flushing volume set to 0. Multi-color printing may cause color mixing in models. Please readjust flushing settings." msgstr "ตั้งค่าปริมาณการไล่เส้นบางส่วนเป็น 0 การพิมพ์หลายสีอาจทำให้เกิดการผสมสีในรุ่นต่างๆ โปรดปรับการตั้งค่าการไล่เส้นใหม่" @@ -7953,7 +7953,7 @@ msgid "Enabling traditional timelapse photography may cause surface imperfection msgstr "การเปิดใช้งานการถ่ายภาพไทม์แลปส์แบบดั้งเดิมอาจทำให้เกิดความไม่สมบูรณ์ของพื้นผิวได้ ขอแนะนำให้เปลี่ยนเป็นโหมดราบรื่น" msgid "Smooth mode for timelapse is enabled, but the prime tower is off, which may cause print defects. Please enable the prime tower, re-slice and print again." -msgstr "เปิดใช้งานโหมด Smooth สำหรับไทม์แลปส์แล้ว แต่ไพรม์ทาวเวอร์ปิดอยู่ ซึ่งอาจทำให้เกิดข้อบกพร่องในการพิมพ์ โปรดเปิดใช้งานไพร์มทาวเวอร์ สไลซ์ใหม่และพิมพ์อีกครั้ง" +msgstr "เปิดใช้งานโหมด Smooth สำหรับไทม์แลปส์แล้ว แต่ Prime Tower ปิดอยู่ ซึ่งอาจทำให้เกิดข้อบกพร่องในการพิมพ์ โปรดเปิดใช้งาน Prime Tower สไลซ์ใหม่และพิมพ์อีกครั้ง" msgid "Expand sidebar" msgstr "ขยายแถบด้านข้าง" @@ -9311,7 +9311,7 @@ msgid "" "Attempt to keep painted features (color/seam/support/fuzzy etc.) after changing the object mesh (such as cut/reload from disk/simplify/fix etc.)\n" "Highly experimental! Slow and may create artifact." msgstr "" -"พยายามคงคุณสมบัติการทาสีไว้ (สี/รอยตะเข็บ/ส่วนรองรับ/คลุมเครือ ฯลฯ) หลังจากเปลี่ยนตาข่ายวัตถุ (เช่น ตัด/โหลดซ้ำจากดิสก์/ลดความซับซ้อน/แก้ไข ฯลฯ)\n" +"พยายามคงคุณสมบัติการทาสีไว้ (สี/รอยตะเข็บ/ส่วนรองรับ/ผิวฟัซซี ฯลฯ) หลังจากเปลี่ยนตาข่ายวัตถุ (เช่น ตัด/โหลดซ้ำจากดิสก์/ลดความซับซ้อน/แก้ไข ฯลฯ)\n" "น่าทดลองมาก! ช้าและอาจสร้างสิ่งประดิษฐ์" msgid "Allow Abnormal Storage" @@ -10241,25 +10241,25 @@ msgstr "คลิกเพื่อรีเซ็ตการตั้งค่ # AI Translated msgid "Prime tower is required for nozzle changing. There may be flaws on the model without prime tower. Are you sure you want to disable prime tower?" -msgstr "จำเป็นต้องใช้ทาวเวอร์ไล่เส้นสำหรับการเปลี่ยนหัวฉีด อาจเกิดข้อบกพร่องบนโมเดลหากไม่มีทาวเวอร์ไล่เส้น คุณแน่ใจหรือไม่ว่าต้องการปิดทาวเวอร์ไล่เส้น?" +msgstr "จำเป็นต้องใช้ Prime Tower สำหรับการเปลี่ยนหัวฉีด อาจเกิดข้อบกพร่องบนโมเดลหากไม่มี Prime Tower คุณแน่ใจหรือไม่ว่าต้องการปิด Prime Tower?" msgid "A prime tower is required for smooth timelapse mode. There may be flaws on the model without a prime tower. Are you sure you want to disable the prime tower?" -msgstr "โหมดไทม์แลปส์แบบราบรื่นต้องใช้ไพรม์ทาวเวอร์ หากไม่มีไพรม์ทาวเวอร์อาจเกิดตำหนิบนโมเดลได้ คุณแน่ใจหรือไม่ว่าต้องการปิดไพรม์ทาวเวอร์?" +msgstr "จำเป็นต้องใช้ Prime Tower สำหรับโหมดไทม์แลปส์แบบราบรื่น หากไม่มี Prime Tower อาจเกิดตำหนิบนโมเดลได้ คุณแน่ใจหรือไม่ว่าต้องการปิด Prime Tower?" msgid "A prime tower is required for clumping detection. There may be flaws on the model without prime tower. Are you sure you want to disable prime tower?" -msgstr "ต้องใช้ไพรม์ทาวเวอร์ในการตรวจจับการจับกันเป็นก้อน อาจมีตำหนิตรงรุ่นที่ไม่มีไพร์มทาวเวอร์ คุณแน่ใจหรือไม่ว่าต้องการปิดการใช้งานไพร์มทาวเวอร์?" +msgstr "จำเป็นต้องใช้ Prime Tower ในการตรวจจับการจับกันเป็นก้อน อาจมีตำหนิบนโมเดลที่ไม่มี Prime Tower คุณแน่ใจหรือไม่ว่าต้องการปิด Prime Tower?" msgid "Enabling both precise Z height and the prime tower may cause slicing errors. Do you still want to enable?" -msgstr "การเปิดใช้งานทั้งความสูง Z ที่แม่นยำและหอคอยหลักอาจทำให้เกิดข้อผิดพลาดในการแบ่งส่วน คุณยังต้องการเปิดใช้งานหรือไม่?" +msgstr "การเปิดใช้งานทั้งความสูง Z ที่แม่นยำและ Prime Tower อาจทำให้เกิดข้อผิดพลาดในการแบ่งส่วน คุณยังต้องการเปิดใช้งานหรือไม่?" msgid "A prime tower is required for clumping detection. There may be flaws on the model without prime tower. Do you still want to enable clumping detection?" -msgstr "ต้องใช้ไพรม์ทาวเวอร์ในการตรวจจับการจับกันเป็นก้อน อาจมีตำหนิตรงรุ่นที่ไม่มีไพร์มทาวเวอร์ คุณยังต้องการเปิดใช้งานการตรวจจับการจับกันเป็นก้อนหรือไม่" +msgstr "จำเป็นต้องใช้ Prime Tower ในการตรวจจับการจับกันเป็นก้อน อาจมีตำหนิบนโมเดลที่ไม่มี Prime Tower คุณยังต้องการเปิดใช้งานการตรวจจับการจับกันเป็นก้อนหรือไม่" msgid "Enabling both precise Z height and the prime tower may cause slicing errors. Do you still want to enable precise Z height?" -msgstr "การเปิดใช้งานทั้งความสูง Z ที่แม่นยำและหอคอยหลักอาจทำให้เกิดข้อผิดพลาดในการแบ่งส่วน คุณยังต้องการเปิดใช้งานความสูง Z ที่แม่นยำหรือไม่" +msgstr "การเปิดใช้งานทั้งความสูง Z ที่แม่นยำและ Prime Tower อาจทำให้เกิดข้อผิดพลาดในการแบ่งส่วน คุณยังต้องการเปิดใช้งานความสูง Z ที่แม่นยำหรือไม่" msgid "A prime tower is required for smooth timelapse mode. There may be flaws on the model without prime tower. Do you want to enable the prime tower?" -msgstr "โหมดไทม์แลปส์แบบราบรื่นต้องใช้ไพรม์ทาวเวอร์ หากไม่มีไพรม์ทาวเวอร์อาจเกิดตำหนิบนโมเดลได้ ต้องการเปิดใช้ไพรม์ทาวเวอร์หรือไม่?" +msgstr "จำเป็นต้องใช้ Prime Tower สำหรับโหมดไทม์แลปส์แบบราบรื่น หากไม่มี Prime Tower อาจเกิดตำหนิบนโมเดลได้ ต้องการเปิดใช้ Prime Tower หรือไม่?" msgid "Still print by object?" msgstr "ยังคงพิมพ์ตามวัตถุใช่ไหม" @@ -10411,7 +10411,7 @@ msgid "Z contouring" msgstr "รูปร่าง Z" msgid "Wall generator" -msgstr "เครื่องกำเนิดไฟฟ้าติดผนัง" +msgstr "ตัวสร้างผนัง" msgid "Walls and surfaces" msgstr "ผนังและพื้นผิว" @@ -10477,7 +10477,7 @@ msgid "G-code output" msgstr "เอาต์พุตรหัส G" msgid "Change extrusion role G-code" -msgstr "เปลี่ยนบทบาทการอัดขึ้นรูป G-code" +msgstr "เปลี่ยนประเภทการพิมพ์ G-code" msgid "Post-processing Scripts" msgstr "สคริปต์หลังการประมวลผล" @@ -10616,7 +10616,7 @@ msgid "Filament end G-code" msgstr "G-code สิ้นสุดของเส้นพลาสติก" msgid "Wipe tower parameters" -msgstr "พารามิเตอร์ทาวเวอร์เช็ดหัวฉีด" +msgstr "พารามิเตอร์ Wipe Tower" msgid "Multi Filament" msgstr "เส้นพลาสติกแบบหลากหลาย" @@ -10753,7 +10753,7 @@ msgid "Nozzle diameter" msgstr "เส้นผ่านศูนย์กลางหัวฉีด" msgid "Wipe tower" -msgstr "ทาวเวอร์เช็ดหัวฉีด" +msgstr "Wipe Tower" msgid "Single extruder multi-material parameters" msgstr "พารามิเตอร์วัสดุหลายชุดดันเส้นเดี่ยว" @@ -10780,7 +10780,7 @@ msgstr "" "ต้องการตั้งค่าเป็น 100% เพื่อเปิดใช้งาน Firmware Retraction หรือไม่?" msgid "Firmware Retraction" -msgstr "การเพิกถอนเฟิร์มแวร์" +msgstr "การดึงกลับด้วยเฟิร์มแวร์ (Firmware Retraction)" msgid "Switching to a printer with different extruder types or numbers will discard or reset changes to extruder or multi-nozzle-related parameters." msgstr "การเปลี่ยนไปใช้เครื่องพิมพ์ที่มีประเภทหรือหมายเลขชุดดันเส้นที่แตกต่างกันจะยกเลิกหรือรีเซ็ตการเปลี่ยนแปลงในชุดดันเส้นหรือพารามิเตอร์ที่เกี่ยวข้องกับหัวฉีดหลายตัว" @@ -11596,7 +11596,7 @@ msgid "Gizmo mesh boolean" msgstr "Gizmo mesh บูลีน" msgid "Gizmo FDM paint-on fuzzy skin" -msgstr "Gizmo FDM เพ้นท์บนผิวที่คลุมเครือ" +msgstr "Gizmo FDM เพ้นท์ผิวฟัซซี" msgid "Gizmo SLA support points" msgstr "จุดส่วนรองรับ Gizmo SLA" @@ -11614,7 +11614,7 @@ msgid "Gizmo assemble" msgstr "กิสโมประกอบ" msgid "Gizmo brim ears" -msgstr "กิสโม่ขอบหู" +msgstr "Gizmo หูขอบยึดชิ้นงาน (Brim Ears)" msgid "Zoom in" msgstr "ซูมเข้า" @@ -11936,10 +11936,10 @@ msgid "Parts of the object at these heights may be too thin or the object may ha msgstr "บางส่วนของวัตถุที่ความสูงเหล่านี้อาจบางเกินไป หรือวัตถุอาจมี mesh ผิดปกติ" msgid "Process change extrusion role G-code" -msgstr "กระบวนการเปลี่ยนบทบาทการอัดขึ้นรูป G-code" +msgstr "กระบวนการเปลี่ยนประเภทการพิมพ์ G-code" msgid "Filament change extrusion role G-code" -msgstr "เส้นพลาสติกเปลี่ยนบทบาทการอัดขึ้นรูป G-code" +msgstr "เส้นพลาสติกเปลี่ยนประเภทการพิมพ์ G-code" msgid "No object can be printed. It may be too small." msgstr "ไม่สามารถพิมพ์วัตถุได้ อาจจะเล็กเกินไป" @@ -12100,7 +12100,7 @@ msgid " is too close to clumping detection area, there may be collisions when pr msgstr "อยู่ใกล้พื้นที่การตรวจจับการจับตัวกันมากเกินไป อาจเกิดการชนกันเมื่อพิมพ์" msgid "Prime Tower" -msgstr "ทาวเวอร์ไล่เส้น" +msgstr "Prime Tower" msgid " is too close to others, and collisions may be caused.\n" msgstr "อยู่ใกล้ผู้อื่นมากเกินไปและอาจเกิดการชนได้\n" @@ -12130,10 +12130,10 @@ msgid "Clumping detection is not supported when \"by object\" sequence is enable msgstr "ไม่รองรับการตรวจจับการจับกันเป็นก้อนเมื่อเปิดใช้งานลำดับ \"ตามวัตถุ\"" msgid "Enabling both precise Z height and the prime tower may cause slicing errors." -msgstr "การเปิดใช้งานทั้งความสูง Z ที่แม่นยำและหอคอยหลักอาจทำให้เกิดข้อผิดพลาดในการแบ่งส่วน" +msgstr "การเปิดใช้งานทั้งความสูง Z ที่แม่นยำและ Prime Tower อาจทำให้เกิดข้อผิดพลาดในการแบ่งส่วน" msgid "A prime tower is required for clumping detection; otherwise, there may be flaws on the model." -msgstr "จำเป็นต้องใช้หอคอยหลักในการตรวจจับการจับกันเป็นก้อน มิฉะนั้นอาจมีข้อบกพร่องในแบบจำลอง" +msgstr "จำเป็นต้องใช้ Prime Tower ในการตรวจจับการจับกันเป็นก้อน มิฉะนั้นอาจมีข้อบกพร่องในแบบจำลอง" msgid "Please select \"By object\" print sequence to print multiple objects in spiral vase mode." msgstr "โปรดเลือกลำดับการพิมพ์ \"ตามวัตถุ\" เพื่อพิมพ์วัตถุหลายชิ้นในโหมดแจกันเกลียว" @@ -12143,15 +12143,15 @@ msgstr "โหมดแจกันเกลียวจะไม่ทำงา #, boost-format msgid "While the object %1% itself fits the build volume, it exceeds the maximum build volume height because of material shrinkage compensation." -msgstr "แม้ว่าวัตถุ %1% จะพอดีกับปริมาตรการสร้าง แต่วัตถุนั้นเกินความสูงของปริมาตรการสร้างสูงสุดเนื่องจากการชดเชยการหดตัวของวัสดุ" +msgstr "แม้ว่าวัตถุ %1% จะพอดีกับปริมาตรการพิมพ์ แต่วัตถุนั้นเกินความสูงของปริมาตรการพิมพ์สูงสุดเนื่องจากการชดเชยการหดตัวของวัสดุ" #, boost-format msgid "The object %1% exceeds the maximum build volume height." -msgstr "วัตถุ %1% เกินความสูงของปริมาตรบิลด์สูงสุด" +msgstr "วัตถุ %1% เกินความสูงของปริมาตรการพิมพ์สูงสุด" #, boost-format msgid "While the object %1% itself fits the build volume, its last layer exceeds the maximum build volume height." -msgstr "แม้ว่าออบเจ็กต์ %1% จะพอดีกับปริมาณการสร้าง แต่เลเยอร์สุดท้ายก็เกินความสูงของปริมาตรการสร้างสูงสุด" +msgstr "แม้ว่าวัตถุ %1% จะพอดีกับปริมาตรการพิมพ์ แต่วัตถุนั้นเกินความสูงของปริมาตรการพิมพ์สูงสุด" msgid "You might want to reduce the size of your model or change current print settings and retry." msgstr "คุณอาจต้องการลดขนาดแบบจำลองของคุณหรือเปลี่ยนการตั้งค่าการพิมพ์ปัจจุบันแล้วลองอีกครั้ง" @@ -12160,40 +12160,40 @@ msgid "Variable layer height is not supported with Organic supports." msgstr "ไม่รองรับความสูงของเลเยอร์ที่แปรผันได้ด้วยการรองรับแบบออร์แกนิก" msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." -msgstr "เส้นผ่านศูนย์กลางของหัวฉีดที่แตกต่างกันและเส้นผ่านศูนย์กลางของเส้นพลาสติกที่แตกต่างกันอาจทำงานได้ไม่ดีนักเมื่อเปิดใช้งานไพรม์ทาวเวอร์ ยังเป็นการทดลองอยู่มาก ดังนั้นโปรดดำเนินการด้วยความระมัดระวัง" +msgstr "เส้นผ่านศูนย์กลางของหัวฉีดที่แตกต่างกันและเส้นผ่านศูนย์กลางของเส้นพลาสติกที่แตกต่างกันอาจทำงานได้ไม่ดีนักเมื่อเปิดใช้งาน Prime Tower ยังเป็นการทดลองอยู่มาก ดังนั้นโปรดดำเนินการด้วยความระมัดระวัง" msgid "The Wipe Tower is currently only supported with the relative extruder addressing (use_relative_e_distances=1)." msgstr "ขณะนี้ Wipe Tower รองรับการกำหนดที่อยู่ของชุดดันเส้นแบบสัมพันธ์เท่านั้น (use_relative_e_distances=1)" msgid "Ooze prevention is only supported with the wipe tower when 'single_extruder_multi_material' is off." -msgstr "รองรับการป้องกันน้ำซึมด้วยหอเช็ดเมื่อปิด 'single_extruder_multi_material' เท่านั้น" +msgstr "รองรับการป้องกันน้ำซึมด้วย Wipe Tower เมื่อปิด 'single_extruder_multi_material' เท่านั้น" msgid "The prime tower is currently only supported for the Marlin, RepRap/Sprinter, RepRapFirmware and Repetier G-code flavors." -msgstr "ขณะนี้ไพรม์ทาวเวอร์รองรับเฉพาะรสชาติ Marlin, RepRap/Sprinter, RepRapFirmware และ Repetier G-code เท่านั้น" +msgstr "ขณะนี้ Prime Tower รองรับเฉพาะรสชาติ Marlin, RepRap/Sprinter, RepRapFirmware และ Repetier G-code เท่านั้น" msgid "A prime tower is not supported in “By object” print." -msgstr "ไม่รองรับไพรม์ทาวเวอร์ในการพิมพ์ \"ตามวัตถุ\"" +msgstr "ไม่รองรับ Prime Tower ในการพิมพ์ \"ตามวัตถุ\"" msgid "A prime tower is not supported when adaptive layer height is on. It requires that all objects have the same layer height." -msgstr "ไม่รองรับไพรม์ทาวเวอร์เมื่อเปิดความสูงของเลเยอร์แบบปรับได้ กำหนดให้วัตถุทั้งหมดมีความสูงของชั้นเท่ากัน" +msgstr "ไม่รองรับ Prime Tower เมื่อเปิดความสูงของเลเยอร์แบบปรับได้ กำหนดให้วัตถุทั้งหมดมีความสูงของชั้นเท่ากัน" msgid "A prime tower requires any “support gap” to be a multiple of layer height." -msgstr "ไพรม์ทาวเวอร์ต้องการให้ “support gap” เป็นจำนวนเท่าของความสูงชั้น" +msgstr "Prime Tower ต้องการให้ “support gap” เป็นจำนวนเท่าของความสูงชั้น" msgid "A prime tower requires that all objects have the same layer height." -msgstr "ไพรม์ทาวเวอร์ต้องการให้วัตถุทั้งหมดมีความสูงชั้นเท่ากัน" +msgstr "Prime Tower ต้องการให้วัตถุทั้งหมดมีความสูงชั้นเท่ากัน" msgid "A prime tower requires that all objects are printed over the same number of raft layers." -msgstr "ไพรม์ทาวเวอร์ต้องการให้วัตถุทั้งหมดพิมพ์บนจำนวนชั้น raft เท่ากัน" +msgstr "Prime Tower ต้องการให้วัตถุทั้งหมดพิมพ์บนจำนวนชั้น raft เท่ากัน" msgid "The prime tower is only supported for multiple objects if they are printed with the same support_top_z_distance." -msgstr "ไพรม์ทาวเวอร์รองรับวัตถุหลายชิ้นเท่านั้นหากพิมพ์ด้วย support_top_z_distance เท่ากัน" +msgstr "Prime Tower รองรับวัตถุหลายชิ้นเท่านั้นหากพิมพ์ด้วย support_top_z_distance เท่ากัน" msgid "A prime tower requires that all objects are sliced with the same layer height." -msgstr "ไพรม์ทาวเวอร์ต้องการให้วัตถุทั้งหมดถูกสไลซ์ด้วยความสูงชั้นเท่ากัน" +msgstr "Prime Tower ต้องการให้วัตถุทั้งหมดถูกสไลซ์ด้วยความสูงชั้นเท่ากัน" msgid "The prime tower is only supported if all objects have the same variable layer height." -msgstr "ไพรม์ทาวเวอร์ได้รับส่วนรองรับก็ต่อเมื่อวัตถุทั้งหมดมีความสูงของเลเยอร์ที่แปรผันเท่ากัน" +msgstr "Prime Tower ได้รับส่วนรองรับก็ต่อเมื่อวัตถุทั้งหมดมีความสูงของเลเยอร์ที่แปรผันเท่ากัน" msgid "One or more object were assigned an extruder that the printer does not have." msgstr "วัตถุอย่างน้อยหนึ่งชิ้นถูกกำหนดให้เป็นชุดดันเส้นที่เครื่องพิมพ์ไม่มี" @@ -12208,7 +12208,7 @@ msgid "Printing with multiple extruders of differing nozzle diameters. If suppor msgstr "การพิมพ์ด้วยชุดดันเส้นหลายเครื่องที่มีเส้นผ่านศูนย์กลางหัวฉีดต่างกัน หากจะพิมพ์ส่วนรองรับด้วยฟิลาเมนต์ปัจจุบัน (support_filament == 0 หรือ support_interface_filament == 0) หัวฉีดทั้งหมดจะต้องมีเส้นผ่านศูนย์กลางเท่ากัน" msgid "A prime tower requires that support has the same layer height as the object." -msgstr "ไพรม์ทาวเวอร์ต้องการให้ส่วนรองรับมีความสูงชั้นเท่ากับวัตถุ" +msgstr "Prime Tower ต้องการให้ส่วนรองรับมีความสูงชั้นเท่ากับวัตถุ" msgid "For Organic supports, two walls are supported only with the Hollow/Default base pattern." msgstr "สำหรับการรองรับแบบออร์แกนิก ผนังทั้งสองได้รับการรองรับด้วยรูปแบบฐานกลวง/ค่าเริ่มต้นเท่านั้น" @@ -12845,9 +12845,9 @@ msgid "" "\n" "For the first layer, the actual flow ratio for each path role (does not affect brims and skirts) will be multiplied by this value." msgstr "" -"ปัจจัยนี้ส่งผลต่อปริมาณวัสดุในชั้นแรกสำหรับบทบาทเส้นทางการอัดขึ้นรูปที่แสดงอยู่ในส่วนนี้\n" +"ปัจจัยนี้ส่งผลต่อปริมาณวัสดุในชั้นแรกสำหรับประเภทการพิมพ์ที่แสดงอยู่ในส่วนนี้\n" "\n" -"สำหรับชั้นแรก อัตราการไหลตามจริงสำหรับแต่ละบทบาทของเส้นทาง (ไม่ส่งผลต่อขอบยึดชิ้นงานและเส้นล้อมชิ้นงาน) จะถูกคูณด้วยค่านี้" +"สำหรับชั้นแรก อัตราการไหลตามจริงสำหรับแต่ละประเภทการพิมพ์ (ไม่ส่งผลต่อขอบยึดชิ้นงานและเส้นล้อมชิ้นงาน) จะถูกคูณด้วยค่านี้" msgid "Outer wall flow ratio" msgstr "อัตราส่วนการไหลของผนังด้านนอก" @@ -13138,7 +13138,7 @@ msgstr "" "หมายเหตุ: ค่าผลลัพธ์จะไม่ได้รับผลกระทบจากอัตราส่วนการไหลของชั้นแรก" msgid "Brim follows compensated outline" -msgstr "ขอบยึดชิ้นงาน ปฏิบัติตามโครงร่างที่ได้รับการชดเชย" +msgstr "Brim ตามแนวที่ชดเชยแล้ว" msgid "" "When enabled, the brim is aligned with the first-layer perimeter geometry after Elephant Foot Compensation is applied.\n" @@ -13161,10 +13161,10 @@ msgid "Brim ears" msgstr "หู ขอบยึดชิ้นงาน" msgid "Only draw brim over the sharp edges of the model." -msgstr "วาดขอบยึดชิ้นงานไว้เหนือขอบคมของนางแบบเท่านั้น" +msgstr "วาดขอบยึดชิ้นงานไว้เหนือขอบคมของชิ้นงานเท่านั้น" msgid "Brim ear max angle" -msgstr "มุมสูงสุดของหูขอบยึดชิ้นงานนก" +msgstr "มุมสูงสุดของหูขอบยึดชิ้นงาน (Brim Ears)" msgid "" "Maximum angle to let a brim ear appear.\n" @@ -13753,7 +13753,7 @@ msgstr "" "อัตราการไหลของวัตถุขั้นสุดท้ายคือค่านี้คูณด้วยอัตราการไหลของเส้นพลาสติก" msgid "Enable pressure advance" -msgstr "เปิดใช้งานPressure Advance" +msgstr "เปิดใช้ Pressure Advance" msgid "Enable pressure advance, auto calibration result will be overwritten once enabled." msgstr "เปิดใช้งานการเลื่อนแรงดัน ผลลัพธ์การสอบเทียบอัตโนมัติจะถูกเขียนทับเมื่อเปิดใช้งาน" @@ -13762,7 +13762,7 @@ msgid "Pressure advance (Klipper) AKA Linear advance factor (Marlin)." msgstr "แรงดันล่วงหน้า (Pressure Advance) (Klipper) AKA Linear Advance Factor (Marlin)" msgid "Enable adaptive pressure advance (beta)" -msgstr "เปิดใช้งานการปรับPressure Advance (เบต้า)" +msgstr "เปิดใช้ Adaptive Pressure Advance (เบต้า)" #, no-c-format, no-boost-format msgid "" @@ -13780,7 +13780,7 @@ msgstr "" "เมื่อเปิดใช้งาน ค่าล่วงหน้าของแรงดันด้านบนจะถูกแทนที่ อย่างไรก็ตาม แนะนำให้ใช้ค่าเริ่มต้นที่สมเหตุสมผลด้านบนเพื่อเป็นทางเลือกและเมื่อมีการเปลี่ยนเครื่องมือ\n" msgid "Adaptive pressure advance measurements (beta)" -msgstr "การวัดล่วงหน้าด้วยแรงดันแบบปรับได้ (เบต้า)" +msgstr "ข้อมูลวัด Adaptive Pressure Advance (เบต้า)" #, no-c-format, no-boost-format msgid "" @@ -14021,7 +14021,7 @@ msgid "Loading speed" msgstr "ความเร็วกำลังโหลด" msgid "Speed used for loading the filament on the wipe tower." -msgstr "ความเร็วที่ใช้ในการโหลดเส้นพลาสติกบนไวด์ทาวเวอร์" +msgstr "ความเร็วที่ใช้ในการโหลดเส้นพลาสติกบน Wipe Tower" msgid "Loading speed at the start" msgstr "ความเร็วในการโหลดเมื่อเริ่มต้น" @@ -14033,7 +14033,7 @@ msgid "Unloading speed" msgstr "ความเร็วในการขนถ่าย" msgid "Speed used for unloading the filament on the wipe tower (does not affect initial part of unloading just after ramming)." -msgstr "ความเร็วที่ใช้ในการขนถ่ายเส้นพลาสติกบนไวด์ทาวเวอร์ (ไม่ส่งผลต่อส่วนเริ่มแรกของการขนถ่ายหลังจากการชน)" +msgstr "ความเร็วที่ใช้ในการขนถ่ายเส้นพลาสติกบน Wipe Tower (ไม่ส่งผลต่อส่วนเริ่มแรกของการขนถ่ายหลังจากการชน)" msgid "Unloading speed at the start" msgstr "ขนถ่ายความเร็วที่จุดเริ่มต้น" @@ -14075,10 +14075,10 @@ msgid "Minimal purge on wipe tower" msgstr "การล้างข้อมูลบน Wipe Tower น้อยที่สุด" msgid "After a tool change, the exact position of the newly loaded filament inside the nozzle may not be known, and the filament pressure is likely not yet stable. Before purging the print head into an infill or a sacrificial object, Orca Slicer will always prime this amount of material into the wipe tower to produce successive infill or sacrificial object extrusions reliably." -msgstr "หลังจากเปลี่ยนเครื่องมือ อาจไม่ทราบตำแหน่งที่แน่นอนของเส้นพลาสติกที่เพิ่งโหลดใหม่ภายในหัวฉีด และความดันเส้นพลาสติกก็มีแนวโน้มว่ายังไม่เสถียร ก่อนที่จะล้างหัวพิมพ์ลงในวัสดุไส้ในหรือวัตถุบูชายัญ Orca Slicer จะเตรียมวัสดุจำนวนนี้ลงในหอเช็ดเสมอเพื่อสร้างการอัดขึ้นรูปวัตถุแบบไส้ในหรือบูชายัญต่อเนื่องกันอย่างน่าเชื่อถือ" +msgstr "หลังจากเปลี่ยนเครื่องมือ อาจไม่ทราบตำแหน่งที่แน่นอนของเส้นพลาสติกที่เพิ่งโหลดใหม่ภายในหัวฉีด และความดันเส้นพลาสติกก็มีแนวโน้มว่ายังไม่เสถียร ก่อนที่จะล้างหัวพิมพ์ลงในวัสดุไส้ในหรือวัตถุบูชายัญ Orca Slicer จะเตรียมวัสดุจำนวนนี้ลงใน Wipe Tower เสมอเพื่อสร้างการอัดขึ้นรูปวัตถุแบบไส้ในหรือบูชายัญต่อเนื่องกันอย่างน่าเชื่อถือ" msgid "Wipe tower cooling" -msgstr "เช็ดทาวเวอร์คูลลิ่ง" +msgstr "Wipe Tower คูลลิ่ง" msgid "Temperature drop before entering filament tower" msgstr "อุณหภูมิลดลงก่อนเข้าหอใย" @@ -14087,19 +14087,19 @@ msgid "Interface layer pre-extrusion distance" msgstr "ระยะการอัดรีดชั้นอินเตอร์เฟซ" msgid "Pre-extrusion distance for prime tower interface layer (where different materials meet)." -msgstr "ระยะก่อนการอัดขึ้นรูปสำหรับชั้นอินเทอร์เฟซของไพรม์ทาวเวอร์ (ที่วัสดุที่แตกต่างกันมาบรรจบกัน)" +msgstr "ระยะก่อนการอัดขึ้นรูปสำหรับชั้นอินเทอร์เฟซของ Prime Tower (ที่วัสดุที่แตกต่างกันมาบรรจบกัน)" msgid "Interface layer pre-extrusion length" msgstr "ความยาวชั้นอินเตอร์เฟซก่อนการอัดขึ้นรูป" msgid "Pre-extrusion length for prime tower interface layer (where different materials meet)." -msgstr "ความยาวก่อนการอัดขึ้นรูปสำหรับชั้นอินเทอร์เฟซของไพรม์ทาวเวอร์ (ที่วัสดุที่แตกต่างกันมาบรรจบกัน)" +msgstr "ความยาวก่อนการอัดขึ้นรูปสำหรับชั้นอินเทอร์เฟซของ Prime Tower (ที่วัสดุที่แตกต่างกันมาบรรจบกัน)" msgid "Tower ironing area" msgstr "พื้นที่รีดผิวแบบทาวเวอร์" msgid "Ironing area for prime tower interface layer (where different materials meet)." -msgstr "พื้นที่รีดผิวสำหรับชั้นอินเทอร์เฟซของไพร์มทาวเวอร์ (บริเวณที่วัสดุต่างกันมาบรรจบกัน)" +msgstr "พื้นที่รีดผิวสำหรับชั้นอินเทอร์เฟซของ Prime Tower (บริเวณที่วัสดุต่างกันมาบรรจบกัน)" msgid "mm²" msgstr "มม.²" @@ -14108,13 +14108,13 @@ msgid "Interface layer purge length" msgstr "ความยาวการล้างเลเยอร์อินเทอร์เฟซ" msgid "Purge length for prime tower interface layer (where different materials meet)." -msgstr "ความยาวในการไล่ล้างสำหรับชั้นอินเทอร์เฟซของไพรม์ทาวเวอร์ (เมื่อวัสดุต่างกันมาบรรจบกัน)" +msgstr "ความยาวในการไล่ล้างสำหรับชั้นอินเทอร์เฟซของ Prime Tower (เมื่อวัสดุต่างกันมาบรรจบกัน)" msgid "Interface layer print temperature" msgstr "อุณหภูมิการพิมพ์เลเยอร์อินเทอร์เฟซ" msgid "Print temperature for prime tower interface layer (where different materials meet). If set to -1, use max recommended nozzle temperature." -msgstr "อุณหภูมิการพิมพ์สำหรับชั้นอินเทอร์เฟซของไพรม์ทาวเวอร์ (เมื่อวัสดุต่างกันมาบรรจบกัน) หากตั้งค่าเป็น -1 ให้ใช้อุณหภูมิหัวฉีดสูงสุดที่แนะนำ" +msgstr "อุณหภูมิการพิมพ์สำหรับชั้นอินเทอร์เฟซของ Prime Tower (เมื่อวัสดุต่างกันมาบรรจบกัน) หากตั้งค่าเป็น -1 ให้ใช้อุณหภูมิหัวฉีดสูงสุดที่แนะนำ" msgid "Speed of the last cooling move" msgstr "ความเร็วของการทำความเย็นครั้งล่าสุด" @@ -14132,7 +14132,7 @@ msgid "Enable ramming for multi-tool setups" msgstr "เปิดใช้งานการกระแทกสำหรับการตั้งค่าหลายเครื่องมือ" msgid "Perform ramming when using multi-tool printer (i.e. when the 'Single Extruder Multimaterial' in Printer Settings is unchecked). When checked, a small amount of filament is rapidly extruded on the wipe tower just before the tool change. This option is only used when the wipe tower is enabled." -msgstr "ทำการกระแทกเมื่อใช้เครื่องพิมพ์แบบหลายเครื่องมือ (เช่น เมื่อไม่ได้เลือก 'Single ชุดดันเส้น Multimaterial' ในการตั้งค่าเครื่องพิมพ์) เมื่อตรวจสอบแล้ว เส้นพลาสติกจำนวนเล็กน้อยจะถูกอัดรีดอย่างรวดเร็วบนไวด์ทาวเวอร์ก่อนที่จะเปลี่ยนเครื่องมือ ตัวเลือกนี้ใช้เฉพาะเมื่อเปิดใช้งาน Wipe Tower เท่านั้น" +msgstr "ทำการกระแทกเมื่อใช้เครื่องพิมพ์แบบหลายเครื่องมือ (เช่น เมื่อไม่ได้เลือก 'Single ชุดดันเส้น Multimaterial' ในการตั้งค่าเครื่องพิมพ์) เมื่อตรวจสอบแล้ว เส้นพลาสติกจำนวนเล็กน้อยจะถูกอัดรีดอย่างรวดเร็วบน Wipe Tower ก่อนที่จะเปลี่ยนเครื่องมือ ตัวเลือกนี้ใช้เฉพาะเมื่อเปิดใช้งาน Wipe Tower เท่านั้น" msgid "Multi-tool ramming volume" msgstr "ปริมาณการกระแทกหลายเครื่องมือ" @@ -14517,13 +14517,13 @@ msgid "Filament-specific override for ironing flow. This allows you to customize msgstr "การแทนที่เส้นพลาสติกเฉพาะสำหรับกระแสการรีดผิว ซึ่งช่วยให้คุณปรับแต่งกระแสการรีดผิวสำหรับเส้นพลาสติกแต่ละประเภทได้ ค่าที่สูงเกินไปส่งผลให้เกิดการอัดขึ้นรูปมากเกินไปบนพื้นผิว" msgid "Ironing line spacing" -msgstr "ระยะห่างระหว่างสายรีดผิว" +msgstr "ระยะห่างระหว่างเส้นรีดผิว" msgid "Filament-specific override for ironing line spacing. This allows you to customize the spacing between ironing lines for each filament type." msgstr "การแทนที่เส้นพลาสติกเฉพาะสำหรับระยะห่างระหว่างรีดผิว ซึ่งช่วยให้คุณปรับแต่งระยะห่างระหว่างเส้นรีดผิวสำหรับเส้นพลาสติกแต่ละประเภทได้" msgid "Ironing inset" -msgstr "อุปกรณ์รีดผิว" +msgstr "ระยะเว้นขอบการรีดผิว" msgid "Filament-specific override for ironing inset. This allows you to customize the distance to keep from the edges when ironing for each filament type." msgstr "การแทนที่เส้นพลาสติกเฉพาะสำหรับส่วนเสริมการรีดผิว ซึ่งช่วยให้คุณปรับแต่งระยะห่างจากขอบเมื่อรีดผิวสำหรับเส้นพลาสติกแต่ละประเภทได้" @@ -14565,10 +14565,10 @@ msgid "The average distance between the random points introduced on each line se msgstr "ระยะห่างเฉลี่ยระหว่างจุดสุ่มที่แนะนำในแต่ละส่วนของเส้น" msgid "Apply fuzzy skin to first layer" -msgstr "ทาผิวที่คลุมเครือเป็นชั้นแรก" +msgstr "ใช้ Fuzzy Skin กับชั้นแรก" msgid "Whether to apply fuzzy skin on the first layer." -msgstr "ไม่ว่าจะทาผิวฟุ้งๆในชั้นแรกหรือไม่" +msgstr "กำหนดว่าจะใช้ Fuzzy Skin กับชั้นแรกหรือไม่" msgid "Fuzzy skin generator mode" msgstr "โหมดสร้างผิวฟัซซี" @@ -14599,7 +14599,7 @@ msgid "Combined" msgstr "รวม" msgid "Fuzzy skin noise type" -msgstr "ประเภทเสียงผิวเลือน" +msgstr "ประเภท Noise ของ Fuzzy Skin" msgid "" "Noise type to use for fuzzy skin generation:\n" @@ -14610,12 +14610,12 @@ msgid "" "Voronoi: Divides the surface into voronoi cells, and displaces each one by a random amount. Creates a patchwork texture.\n" "Ripple: Uniform ripple pattern that ripples left and right of the original path. Repeating pattern, woven appearance." msgstr "" -"ประเภทเสียงรบกวนที่ใช้สำหรับการสร้างผิวที่คลุมเครือ:\n" +"ประเภท Noise ที่ใช้สำหรับการสร้างผิวฟัซซี:\n" "คลาสสิก: เสียงสุ่มเครื่องแบบคลาสสิก\n" "Perlin: เสียง Perlin ซึ่งให้เนื้อสัมผัสที่สม่ำเสมอยิ่งขึ้น\n" "Billow: คล้ายกับเสียงเพอร์ลิน แต่เป็นกลุ่มมากกว่า\n" "Ridged Multifractal: สัญญาณรบกวนที่คมชัดพร้อมคุณสมบัติหยัก สร้างพื้นผิวเหมือนหินอ่อน\n" -"โวโรนอย: แบ่งพื้นผิวออกเป็นเซลล์โวโรนอย และแทนที่แต่ละเซลล์ด้วยจำนวนสุ่ม สร้างพื้นผิวแบบเย็บปะติดปะต่อกัน\n" +"Voronoi: แบ่งพื้นผิวออกเป็นเซลล์ Voronoi และแทนที่แต่ละเซลล์ด้วยจำนวนสุ่ม สร้างพื้นผิวแบบเย็บปะติดปะต่อกัน\n" "ระลอกคลื่น: รูปแบบระลอกคลื่นสม่ำเสมอที่กระเพื่อมไปทางซ้ายและขวาของเส้นทางเดิม ลายซ้ำ ลักษณะการทอ." msgid "Classic" @@ -14631,7 +14631,7 @@ msgid "Ridged Multifractal" msgstr "Multifractal แบบสัน" msgid "Voronoi" -msgstr "โวโรน้อย" +msgstr "Voronoi" msgid "Ripple" msgstr "ระลอกคลื่น" @@ -14643,13 +14643,13 @@ msgid "The base size of the coherent noise features, in mm. Higher values will r msgstr "ขนาดฐานของคุณสมบัติเสียงที่สอดคล้องกัน หน่วยเป็น มม. ค่าที่สูงกว่าจะส่งผลให้มีคุณลักษณะที่ใหญ่ขึ้น" msgid "Fuzzy Skin Noise Octaves" -msgstr "อ็อกเทฟเสียงผิวฟัซซี" +msgstr "จำนวน Octave ของ Noise ใน Fuzzy Skin" msgid "The number of octaves of coherent noise to use. Higher values increase the detail of the noise, but also increase computation time." msgstr "จำนวนอ็อกเทฟของสัญญาณรบกวนที่สอดคล้องกันที่จะใช้ ค่าที่สูงกว่าจะเพิ่มรายละเอียดของสัญญาณรบกวน แต่ยังเพิ่มเวลาในการคำนวณด้วย" msgid "Fuzzy skin noise persistence" -msgstr "ความคงอยู่ของเสียงผิวเลือน" +msgstr "ค่า Persistence ของ Noise ใน Fuzzy Skin" msgid "The decay rate for higher octaves of the coherent noise. Lower values will result in smoother noise." msgstr "อัตราการสลายตัวของอ็อกเทฟที่สูงขึ้นของสัญญาณรบกวนที่สอดคล้องกัน ค่าที่ต่ำกว่าจะส่งผลให้มีสัญญาณรบกวนที่นุ่มนวลขึ้น" @@ -15737,7 +15737,7 @@ msgid "The start and end points which are from the cutter area to the excess chu msgstr "จุดเริ่มต้นและจุดสิ้นสุดตั้งแต่บริเวณเครื่องตัดถึงถังขยะ" msgid "Reduce infill retraction" -msgstr "ลดการหดตัวของ ไส้ใน" +msgstr "ลดการดึงกลับในไส้ใน" msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that z-hop is also not performed in areas where retraction is skipped." msgstr "อย่าถอยกลับเมื่อการเดินทางอยู่ภายในพื้นที่ที่ไส้ในเข้าไปทั้งหมด นั่นหมายความว่าไม่สามารถมองเห็นการรั่วไหลได้ วิธีนี้จะช่วยลดเวลาในการดึงกลับสำหรับโมเดลที่ซับซ้อนและประหยัดเวลาในการพิมพ์ แต่จะทำให้การแบ่งส่วนและการสร้าง G-code ช้าลง โปรดทราบว่า z-hop จะไม่ดำเนินการในพื้นที่ที่มีการข้ามการถอนกลับ" @@ -15825,10 +15825,10 @@ msgid "If you want to process the output G-code through custom scripts, just lis msgstr "หากคุณต้องการประมวลผลเอาต์พุต G-code ผ่านสคริปต์ที่กำหนดเอง เพียงระบุเส้นทางสัมบูรณ์ของสคริปต์ไว้ที่นี่ แยกสคริปต์หลายรายการด้วยเครื่องหมายอัฒภาค สคริปต์จะถูกส่งผ่านเส้นทางสัมบูรณ์ไปยังไฟล์ G-code เป็นอาร์กิวเมนต์แรก และสคริปต์เหล่านี้สามารถเข้าถึงการตั้งค่าการกำหนดค่า Orca Slicer ได้โดยการอ่านตัวแปรสภาพแวดล้อม" msgid "Change extrusion role G-code (process)" -msgstr "เปลี่ยนบทบาทการอัดขึ้นรูป G-code (กระบวนการ)" +msgstr "เปลี่ยนประเภทการพิมพ์ G-code (กระบวนการ)" msgid "This G-code is inserted when the extrusion role is changed. It runs after the machine and filament extrusion role G-code." -msgstr "G-code นี้จะถูกแทรกเมื่อบทบาทการอัดขึ้นรูปมีการเปลี่ยนแปลง มันทำงานหลังจากบทบาทการอัดขึ้นรูปของเครื่องจักรและการอัดขึ้นรูปเส้นพลาสติก G-code" +msgstr "G-code นี้จะถูกแทรกเมื่อประเภทการพิมพ์มีการเปลี่ยนแปลง มันทำงานหลังจากประเภทการพิมพ์ของเครื่องจักรและเส้นพลาสติก G-code" # AI Translated msgid "Plugins Used" @@ -15897,7 +15897,7 @@ msgid "Only trigger retraction when the travel distance is longer than this thre msgstr "ทริกเกอร์การถอนกลับเมื่อระยะการเดินทางยาวกว่าเกณฑ์นี้เท่านั้น" msgid "Retract amount before wipe" -msgstr "ถอนจำนวนก่อนเช็ด" +msgstr "สัดส่วนการดึงกลับก่อน Wipe" msgid "This is the length of fast retraction before a wipe, relative to retraction length." msgstr "ความยาวของการดึงกลับอย่างรวดเร็วก่อนเช็ด สัมพันธ์กับความยาวการดึงกลับ" @@ -15916,7 +15916,7 @@ msgstr "" "ค่าจะถูกจำกัดด้วย 100% ลบด้วยปริมาณการดึงกลับก่อนค่าเช็ดหัว" msgid "Retract on layer change" -msgstr "ถอนออกเมื่อเปลี่ยนเลเยอร์" +msgstr "ดึงเส้นกลับเมื่อเปลี่ยนเลเยอร์" msgid "This forces a retraction on layer changes." msgstr "บังคับให้ถอนกลับเมื่อเปลี่ยนเลเยอร์" @@ -15925,7 +15925,7 @@ msgid "Retraction Length" msgstr "ระยะดึงกลับ" msgid "Some amount of material in extruder is pulled back to avoid ooze during long travel. Set zero to disable retraction." -msgstr "วัสดุบางส่วนในชุดดันเส้นถูกดึงกลับเพื่อหลีกเลี่ยงไม่ให้ซึ่มในระหว่างการเดินทางระยะไกล ตั้งค่าเป็นศูนย์เพื่อปิดใช้งานการเพิกถอน" +msgstr "วัสดุบางส่วนในชุดดันเส้นถูกดึงกลับเพื่อหลีกเลี่ยงไม่ให้ซึ่มในระหว่างการเดินทางระยะไกล ตั้งเป็น 0 เพื่อปิดการดึงกลับ" msgid "Long retraction when cut (beta)" msgstr "การถอยกลับยาวเมื่อตัด (เบต้า)" @@ -16049,7 +16049,7 @@ msgid "Speed for retracting filament from the nozzle." msgstr "ความเร็วในการดึงเส้นพลาสติกออกจากหัวฉีด" msgid "Deretraction speed" -msgstr "ความเร็วในการถอนกลับ" +msgstr "ความเร็วคืนเส้นหลังดึงกลับ" msgid "Speed for reloading filament into the nozzle. Zero means same speed of retraction." msgstr "ความเร็วในการบรรจุเส้นพลาสติกลงในหัวฉีด ศูนย์หมายถึงความเร็วการถอยกลับเท่ากัน" @@ -16063,7 +16063,7 @@ msgid "Speed for reloading filament into the nozzle when switching extruder." msgstr "ความเร็วในการโหลดเส้นพลาสติกกลับเข้าหัวฉีดเมื่อเปลี่ยนชุดดันเส้น" msgid "Use firmware retraction" -msgstr "ใช้การเพิกถอนเฟิร์มแวร์" +msgstr "ใช้การดึงกลับด้วยเฟิร์มแวร์" msgid "This experimental setting uses G10 and G11 commands to have the firmware handle the retraction. This is only supported in recent Marlin." msgstr "การตั้งค่าทดลองนี้ใช้คำสั่ง G10 และ G11 เพื่อให้เฟิร์มแวร์จัดการกับการเพิกถอน สิ่งนี้รองรับใน Marlin ล่าสุดเท่านั้น" @@ -16115,16 +16115,16 @@ msgstr "" "ปริมาณนี้สามารถระบุได้ในหน่วยมิลลิเมตรหรือเป็นเปอร์เซ็นต์ของเส้นผ่านศูนย์กลางของชุดดันเส้นในปัจจุบัน ค่าเริ่มต้นสำหรับพารามิเตอร์นี้คือ 10%" msgid "Scarf joint seam (beta)" -msgstr "รอยต่อเฉียง (เบต้า)" +msgstr "รอยต่อ Scarf (เบต้า)" msgid "Use scarf joint to minimize seam visibility and increase seam strength." -msgstr "ใช้ข้อต่อเฉียงเพื่อลดการมองเห็นรอยตะเข็บและเพิ่มความแข็งแรงของรอยตะเข็บ" +msgstr "ใช้รอยต่อ Scarf เพื่อลดการมองเห็นรอยตะเข็บและเพิ่มความแข็งแรง" msgid "Conditional scarf joint" -msgstr "ข้อต่อเฉียงแบบมีเงื่อนไข" +msgstr "รอยต่อ Scarf แบบมีเงื่อนไข" msgid "Apply scarf joints only to smooth perimeters where traditional seams do not conceal the seams at sharp corners effectively." -msgstr "ใช้ข้อต่อเฉียงกับขอบเรียบเท่านั้น โดยที่รอยตะเข็บแบบเดิมไม่สามารถปกปิดรอยตะเข็บที่มุมแหลมคมได้อย่างมีประสิทธิภาพ" +msgstr "ใช้รอยต่อ Scarf กับขอบเรียบเท่านั้น โดยที่รอยตะเข็บแบบเดิมไม่สามารถปกปิดรอยตะเข็บที่มุมแหลมคมได้อย่างมีประสิทธิภาพ" msgid "Conditional angle threshold" msgstr "เกณฑ์มุมแบบมีเงื่อนไข" @@ -16133,67 +16133,67 @@ msgid "" "This option sets the threshold angle for applying a conditional scarf joint seam.\n" "If the maximum angle within the perimeter loop exceeds this value (indicating the absence of sharp corners), a scarf joint seam will be used. The default value is 155°." msgstr "" -"ตัวเลือกนี้จะกำหนดมุมเกณฑ์สำหรับการใช้รอยตะเข็บข้อต่อเฉียงแบบมีเงื่อนไข\n" -"หากมุมสูงสุดภายในวงรอบปริมณฑลเกินค่านี้ (แสดงว่าไม่มีมุมแหลมคม) จะใช้รอยตะเข็บข้อต่อเฉียง ค่าเริ่มต้นคือ 155°" +"ตัวเลือกนี้จะกำหนดมุมเกณฑ์สำหรับการใช้รอยต่อ Scarf แบบมีเงื่อนไข\n" +"หากมุมสูงสุดภายในวงรอบปริมณฑลเกินค่านี้ (แสดงว่าไม่มีมุมแหลมคม) จะใช้รอยต่อ Scarf ค่าเริ่มต้นคือ 155°" msgid "Conditional overhang threshold" msgstr "เกณฑ์ระยะยื่นแบบมีเงื่อนไข" #, no-c-format, no-boost-format msgid "This option determines the overhang threshold for the application of scarf joint seams. If the unsupported portion of the perimeter is less than this threshold, scarf joint seams will be applied. The default threshold is set at 40% of the external wall's width. Due to performance considerations, the degree of overhang is estimated." -msgstr "ตัวเลือกนี้จะกำหนดเกณฑ์ส่วนยื่นสำหรับการใช้รอยตะเข็บข้อต่อเฉียง หากส่วนที่ไม่ได้รับส่วนรองรับของเส้นรอบวงน้อยกว่าเกณฑ์นี้ จะมีการเย็บรอยตะเข็บเฉียง เกณฑ์เริ่มต้นตั้งไว้ที่ 40% ของความกว้างของผนังภายนอก เมื่อพิจารณาถึงประสิทธิภาพแล้ว ระดับของระยะยื่นจึงถูกประมาณไว้" +msgstr "ตัวเลือกนี้จะกำหนดเกณฑ์ส่วนยื่นสำหรับการใช้รอยต่อ Scarf หากส่วนที่ไม่ได้รับส่วนรองรับของเส้นรอบวงน้อยกว่าเกณฑ์นี้ จะใช้รอยต่อ Scarf เกณฑ์เริ่มต้นตั้งไว้ที่ 40% ของความกว้างของผนังภายนอก เมื่อพิจารณาถึงประสิทธิภาพแล้ว ระดับของระยะยื่นจึงถูกประมาณไว้" msgid "Scarf joint speed" -msgstr "ความเร็วของข้อต่อเฉียง" +msgstr "ความเร็วรอยต่อ Scarf" msgid "This option sets the printing speed for scarf joints. It is recommended to print scarf joints at a slow speed (less than 100 mm/s). It's also advisable to enable 'Extrusion rate smoothing' if the set speed varies significantly from the speed of the outer or inner walls. If the speed specified here is higher than the speed of the outer or inner walls, the printer will default to the slower of the two speeds. When specified as a percentage (e.g., 80%), the speed is calculated based on the respective outer or inner wall speed. The default value is set to 100%." -msgstr "ตัวเลือกนี้จะตั้งค่าความเร็วในการพิมพ์สำหรับข้อต่อเฉียง ขอแนะนำให้พิมพ์ข้อต่อเฉียงด้วยความเร็วต่ำ (น้อยกว่า 100 มม./วินาที) ขอแนะนำให้เปิดใช้งาน 'การปรับอัตราการอัดรีดให้เรียบ' หากความเร็วที่ตั้งไว้แตกต่างอย่างมากจากความเร็วของผนังด้านนอกหรือด้านใน หากความเร็วที่ระบุที่นี่สูงกว่าความเร็วของผนังด้านนอกหรือด้านใน เครื่องพิมพ์จะตั้งค่าเริ่มต้นไว้ที่ความเร็วที่ช้ากว่าทั้งสอง เมื่อระบุเป็นเปอร์เซ็นต์ (เช่น 80%) ความเร็วจะคำนวณตามความเร็วผนังด้านนอกหรือด้านในตามลำดับ ค่าเริ่มต้นตั้งไว้ที่ 100%" +msgstr "ตัวเลือกนี้จะตั้งค่าความเร็วในการพิมพ์สำหรับรอยต่อ Scarf ขอแนะนำให้พิมพ์รอยต่อ Scarfด้วยความเร็วต่ำ (น้อยกว่า 100 มม./วินาที) ขอแนะนำให้เปิดใช้งาน 'การปรับอัตราการอัดรีดให้เรียบ' หากความเร็วที่ตั้งไว้แตกต่างอย่างมากจากความเร็วของผนังด้านนอกหรือด้านใน หากความเร็วที่ระบุที่นี่สูงกว่าความเร็วของผนังด้านนอกหรือด้านใน เครื่องพิมพ์จะตั้งค่าเริ่มต้นไว้ที่ความเร็วที่ช้ากว่าทั้งสอง เมื่อระบุเป็นเปอร์เซ็นต์ (เช่น 80%) ความเร็วจะคำนวณตามความเร็วผนังด้านนอกหรือด้านในตามลำดับ ค่าเริ่มต้นตั้งไว้ที่ 100%" msgid "Scarf joint flow ratio" -msgstr "อัตราการไหลของข้อต่อเฉียง" +msgstr "อัตราส่วนการไหลของรอยต่อ Scarf" msgid "This factor affects the amount of material for scarf joints." -msgstr "ปัจจัยนี้ส่งผลต่อปริมาณวัสดุสำหรับข้อต่อเฉียง" +msgstr "ปัจจัยนี้ส่งผลต่อปริมาณวัสดุสำหรับรอยต่อ Scarf" msgid "Scarf start height" -msgstr "ความสูงเริ่มต้นของเฉียง" +msgstr "ความสูงเริ่มต้นของรอยต่อ Scarf" msgid "" "Start height of the scarf.\n" "This amount can be specified in millimeters or as a percentage of the current layer height. The default value for this parameter is 0." msgstr "" -"เริ่มต้นความสูงของเฉียง\n" +"ความสูงเริ่มต้นของรอยต่อ Scarf\n" "จำนวนนี้สามารถระบุได้ในหน่วยมิลลิเมตรหรือเป็นเปอร์เซ็นต์ของความสูงของเลเยอร์ปัจจุบัน ค่าเริ่มต้นสำหรับพารามิเตอร์นี้คือ 0" msgid "Scarf around entire wall" -msgstr "เฉียงพันรอบผนังทั้งหมด" +msgstr "ใช้รอยต่อ Scarf ตลอดทั้งผนัง" msgid "The scarf extends to the entire length of the wall." -msgstr "เฉียงยาวตลอดความยาวของผนัง" +msgstr "รอยต่อ Scarf ครอบคลุมตลอดความยาวผนัง" msgid "Scarf length" -msgstr "ความยาวเฉียง" +msgstr "ความยาวรอยต่อ Scarf" msgid "Length of the scarf. Setting this parameter to zero effectively disables the scarf." -msgstr "ความยาวของเฉียง. การตั้งค่าพารามิเตอร์นี้เป็นศูนย์จะปิดใช้เฉียงอย่างมีประสิทธิภาพ" +msgstr "ความยาวของรอยต่อ Scarf ตั้งเป็น 0 เพื่อปิดการใช้ Scarf" msgid "Scarf steps" -msgstr "ขั้นตอนเฉียง" +msgstr "จำนวนขั้นของรอยต่อ Scarf" msgid "Minimum number of segments of each scarf." -msgstr "จำนวนขั้นต่ำของส่วนเฉียงแต่ละอัน" +msgstr "จำนวนเซกเมนต์ขั้นต่ำของรอยต่อ Scarf" msgid "Scarf joint for inner walls" -msgstr "ข้อต่อเฉียงสำหรับผนังด้านใน" +msgstr "รอยต่อ Scarf สำหรับผนังด้านใน" msgid "Use scarf joint for inner walls as well." -msgstr "ใช้ข้อต่อเฉียงสำหรับผนังด้านในด้วย" +msgstr "ใช้รอยต่อ Scarf กับผนังด้านในด้วย" msgid "Role base wipe speed" -msgstr "ความเร็วในการล้างฐานบทบาท" +msgstr "ความเร็ว Wipe ตามประเภทการพิมพ์" msgid "The wipe speed is determined by the speed of the current extrusion role. e.g. if a wipe action is executed immediately following an outer wall extrusion, the speed of the outer wall extrusion will be utilized for the wipe action." -msgstr "ความเร็วในการเช็ดถูกกำหนดโดยความเร็วของบทบาทการอัดขึ้นรูปในปัจจุบัน เช่น หากการดำเนินการเช็ดถูกดำเนินการทันทีหลังจากการอัดขึ้นรูปผนังด้านนอก ความเร็วของการอัดขึ้นรูปผนังด้านนอกจะถูกใช้สำหรับการดำเนินการเช็ด" +msgstr "ความเร็ว Wipe จะอิงจากความเร็วของประเภทการพิมพ์ปัจจุบัน เช่น หากการ Wipe เกิดขึ้นทันทีหลังจากพิมพ์ผนังด้านนอก ความเร็วของผนังด้านนอกจะถูกใช้สำหรับการ Wipe" msgid "Wipe on loops" msgstr "เช็ดบนลูป" @@ -16241,10 +16241,10 @@ msgid "Single loop after first layer" msgstr "วนรอบเดียวหลังจากชั้นแรก" msgid "Limits the skirt/draft shield loops to one wall after the first layer. This is useful, on occasion, to conserve filament but may cause the draft shield/skirt to warp / crack." -msgstr "จำกัดห่วงสเกิร์ต/โล่ครอบไว้ที่ผนังด้านหนึ่งหลังจากชั้นแรก สิ่งนี้มีประโยชน์ในบางครั้งเพื่ออนุรักษ์เส้นพลาสติก แต่อาจทำให้โครง/เส้นล้อมชิ้นงานบิดเบี้ยว/แตกร้าวได้" +msgstr "จำกัดห่วงสเกิร์ต/แนวป้องกันลม (Draft Shield) ไว้ที่ผนังเดียวหลังจากชั้นแรก สิ่งนี้มีประโยชน์ในบางครั้งเพื่อประหยัดเส้นพลาสติก แต่อาจทำให้แนวป้องกันลม/เส้นล้อมชิ้นงานบิดเบี้ยว/แตกร้าวได้" msgid "Draft shield" -msgstr "โล่ร่าง" +msgstr "แนวป้องกันลม (Draft Shield)" msgid "" "A draft shield is useful to protect an ABS or ASA print from warping and detaching from print bed due to wind draft. It is usually needed only with open frame printers, i.e. without an enclosure.\n" @@ -16252,10 +16252,10 @@ msgid "" "Enabled = skirt is as tall as the highest printed object. Otherwise 'Skirt height' is used.\n" "Note: With the draft shield active, the skirt will be printed at skirt distance from the object. Therefore, if brims are active it may intersect with them. To avoid this, increase the skirt distance value.\n" msgstr "" -"แผงครอบมีประโยชน์ในการปกป้องงานพิมพ์ ABS หรือ ASA จากการบิดงอและการหลุดออกจากฐานพิมพ์เนื่องจากกระแสลม โดยทั่วไปจำเป็นต้องใช้กับเครื่องพิมพ์แบบเปิดเฟรมเท่านั้น กล่าวคือ ไม่มีกล่องหุ้ม\n" +"แนวป้องกันลม (Draft Shield) มีประโยชน์ในการปกป้องงานพิมพ์ ABS หรือ ASA จากการบิดงอและการหลุดออกจากฐานพิมพ์เนื่องจากกระแสลม โดยทั่วไปจำเป็นต้องใช้กับเครื่องพิมพ์แบบเปิดเฟรมเท่านั้น กล่าวคือ ไม่มีกล่องหุ้ม\n" "\n" "Enabled = เส้นล้อมชิ้นงานสูงเท่ากับวัตถุที่พิมพ์สูงสุด มิฉะนั้น จะใช้ 'ความสูงของเส้นล้อมชิ้นงาน'\n" -"หมายเหตุ: เมื่อใช้งานดราฟชีลด์ เส้นล้อมชิ้นงานจะถูกพิมพ์ที่ระยะห่างจากเส้นล้อมชิ้นงานจากวัตถุ ดังนั้นหากขอบยึดชิ้นงานยังทำงานอยู่ ขอบยึดชิ้นงานอาจตัดกัน เพื่อหลีกเลี่ยงปัญหานี้ ให้เพิ่มค่าระยะห่างของเส้นล้อมชิ้นงาน\n" +"หมายเหตุ: เมื่อใช้งานแนวป้องกันลม (Draft Shield) เส้นล้อมชิ้นงานจะถูกพิมพ์ที่ระยะห่างจากวัตถุ ดังนั้นหากขอบยึดชิ้นงานยังทำงานอยู่ ขอบยึดชิ้นงานอาจตัดกัน เพื่อหลีกเลี่ยงปัญหานี้ ให้เพิ่มค่าระยะห่างของเส้นล้อมชิ้นงาน\n" msgid "Enabled" msgstr "เปิดใช้" @@ -16362,7 +16362,7 @@ msgid "Sets the finishing flow ratio while ending the spiral. Normally the spira msgstr "ตั้งค่าอัตราส่วนการไหลขั้นสุดท้ายขณะสิ้นสุดเกลียว โดยปกติการเปลี่ยนผ่านของเกลียวจะปรับขนาดอัตราส่วนการไหลจาก 100% เป็น 0% ในระหว่างลูปสุดท้าย ซึ่งในบางกรณีอาจนำไปสู่การรีดขึ้นรูปที่ปลายเกลียว" msgid "If smooth or traditional mode is selected, a timelapse video will be generated for each print. After each layer is printed, a snapshot is taken with the chamber camera. All of these snapshots are composed into a timelapse video when printing completes. If smooth mode is selected, the toolhead will move to the excess chute after each layer is printed and then take a snapshot. Since the melt filament may leak from the nozzle during the process of taking a snapshot, a prime tower is required for smooth mode to wipe the nozzle." -msgstr "หากเลือกโหมดเรียบหรือโหมดดั้งเดิม วิดีโอไทม์แลปส์จะถูกสร้างขึ้นสำหรับการพิมพ์แต่ละครั้ง หลังจากพิมพ์แต่ละชั้นแล้ว กล้องจะถ่ายภาพสแนปช็อตด้วยกล้องแชมเบอร์ สแน็ปช็อตทั้งหมดนี้จะถูกประกอบเป็นวิดีโอไทม์แลปส์เมื่อการพิมพ์เสร็จสิ้น หากเลือกโหมดเรียบ หัวเครื่องมือจะย้ายไปยังรางส่วนเกินหลังจากพิมพ์แต่ละเลเยอร์แล้วจึงถ่ายภาพสแน็ปช็อต เนื่องจากเส้นพลาสติกที่หลอมละลายอาจรั่วไหลออกจากหัวฉีดในระหว่างขั้นตอนการถ่ายภาพ จึงจำเป็นต้องมีไพรม์ทาวเวอร์เพื่อให้โหมดราบรื่นในการเช็ดหัวฉีด" +msgstr "หากเลือกโหมดเรียบหรือโหมดดั้งเดิม วิดีโอไทม์แลปส์จะถูกสร้างขึ้นสำหรับการพิมพ์แต่ละครั้ง หลังจากพิมพ์แต่ละชั้นแล้ว กล้องจะถ่ายภาพสแนปช็อตด้วยกล้องแชมเบอร์ สแน็ปช็อตทั้งหมดนี้จะถูกประกอบเป็นวิดีโอไทม์แลปส์เมื่อการพิมพ์เสร็จสิ้น หากเลือกโหมดเรียบ หัวเครื่องมือจะย้ายไปยังรางส่วนเกินหลังจากพิมพ์แต่ละเลเยอร์แล้วจึงถ่ายภาพสแน็ปช็อต เนื่องจากเส้นพลาสติกที่หลอมละลายอาจรั่วไหลออกจากหัวฉีดในระหว่างขั้นตอนการถ่ายภาพ จึงจำเป็นต้องมี Prime Tower เพื่อให้โหมดราบรื่นในการเช็ดหัวฉีด" msgid "Traditional" msgstr "แบบดั้งเดิม" @@ -16376,7 +16376,7 @@ msgstr "ไทม์แลปส์จุดไกลสุด" # AI Translated msgid "When enabled, the timelapse snapshot is taken at the farthest point from camera instead of traveling to the wipe tower or excess chute. Only effective in traditional timelapse mode on non-I3 printers." -msgstr "เมื่อเปิดใช้งาน ภาพไทม์แลปส์จะถูกถ่ายที่จุดไกลสุดจากกล้องแทนที่จะเดินหัวไปยังทาวเวอร์เช็ดหัวฉีดหรือช่องทิ้งส่วนเกิน มีผลเฉพาะในโหมดไทม์แลปส์แบบดั้งเดิมบนเครื่องพิมพ์ที่ไม่ใช่ I3" +msgstr "เมื่อเปิดใช้งาน ภาพไทม์แลปส์จะถูกถ่ายที่จุดไกลสุดจากกล้องแทนที่จะเดินหัวไปยัง Wipe Tower หรือช่องทิ้งส่วนเกิน มีผลเฉพาะในโหมดไทม์แลปส์แบบดั้งเดิมบนเครื่องพิมพ์ที่ไม่ใช่ I3" msgid "Temperature variation" msgstr "การเปลี่ยนแปลงของอุณหภูมิ" @@ -16425,10 +16425,10 @@ msgid "Enable this option to omit the custom Change filament G-code only at the msgstr "เปิดใช้งานตัวเลือกนี้เพื่อละเว้น G-code เปลี่ยนฟิลาเมนต์แบบกำหนดเองเฉพาะตอนเริ่มต้นการพิมพ์เท่านั้น คำสั่งเปลี่ยนเครื่องมือ (เช่น T0) จะถูกข้ามไปตลอดการพิมพ์ทั้งหมด สิ่งนี้มีประโยชน์สำหรับการพิมพ์หลายวัสดุด้วยตนเอง โดยที่เราใช้ M600/PAUSE เพื่อกระตุ้นการดำเนินการเปลี่ยนเส้นพลาสติกด้วยตนเอง" msgid "Wipe tower type" -msgstr "ชนิดทาวเวอร์เช็ด" +msgstr "ชนิด Wipe Tower" msgid "Choose the wipe tower implementation for multi-material prints. Type 1 is recommended for Bambu and Qidi printers with a filament cutter. Type 2 offers better compatibility with multi-tool and MMU printers and provide overall better compatibility." -msgstr "เลือกการใช้งานไวด์ทาวเวอร์สำหรับการพิมพ์แบบหลายวัสดุ แนะนำให้ใช้ประเภท 1 สำหรับเครื่องพิมพ์ Bambu และ Qidi ที่มีเครื่องตัดเส้นพลาสติก Type 2 ให้ความเข้ากันได้ที่ดีกว่ากับเครื่องพิมพ์หลายเครื่องมือและ MMU และให้ความเข้ากันได้โดยรวมดีขึ้น" +msgstr "เลือกการใช้งาน Wipe Tower สำหรับการพิมพ์แบบหลายวัสดุ แนะนำให้ใช้ประเภท 1 สำหรับเครื่องพิมพ์ Bambu และ Qidi ที่มีเครื่องตัดเส้นพลาสติก Type 2 ให้ความเข้ากันได้ที่ดีกว่ากับเครื่องพิมพ์หลายเครื่องมือและ MMU และให้ความเข้ากันได้โดยรวมดีขึ้น" msgid "Type 1" msgstr "ประเภทที่ 1" @@ -16437,25 +16437,25 @@ msgid "Type 2" msgstr "ประเภทที่ 2" msgid "Purge in prime tower" -msgstr "ระยะเว้นในไพร์มทาวเวอร์" +msgstr "ระยะเว้นใน Prime Tower" msgid "Purge remaining filament into prime tower." -msgstr "ล้างเส้นพลาสติกที่เหลือลงในไพร์มทาวเวอร์" +msgstr "ล้างเส้นพลาสติกที่เหลือลงใน Prime Tower" msgid "Enable filament ramming" msgstr "เปิดใช้งานการอัดกระแทกเส้นเส้นพลาสติก" msgid "Tool change on wipe tower" -msgstr "การเปลี่ยนเครื่องมือบนไวด์ทาวเวอร์" +msgstr "การเปลี่ยนเครื่องมือบน Wipe Tower" msgid "Force the toolhead to travel to the wipe tower before issuing the tool change command (Tx). Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. By default Orca skips the travel on multi-toolhead machines because the firmware handles the head swap, which can result in the Tx command being issued above the printed part. Enable this option if you want the tool change to always be issued above the wipe tower instead." -msgstr "บังคับให้หัวเครื่องมือเคลื่อนที่ไปที่หอเช็ดก่อนที่จะออกคำสั่งเปลี่ยนเครื่องมือ (Tx) เกี่ยวข้องเฉพาะกับเครื่องพิมพ์ที่มีชุดดันเส้นหลายเครื่อง (หลายหัวเครื่องมือ) ที่ใช้แผ่นเช็ดแบบ Type 2 ตามค่าเริ่มต้น Orca จะข้ามการเดินทางบนเครื่องที่มีหัวเครื่องมือหลายหัวเนื่องจากเฟิร์มแวร์จัดการการสลับหัว ซึ่งอาจส่งผลให้มีการออกคำสั่ง Tx เหนือส่วนที่พิมพ์ เปิดใช้งานตัวเลือกนี้หากคุณต้องการให้ทำการเปลี่ยนแปลงเครื่องมือเหนือหอเช็ดแทนเสมอ" +msgstr "บังคับให้หัวเครื่องมือเคลื่อนที่ไปที่ Wipe Tower ก่อนที่จะออกคำสั่งเปลี่ยนเครื่องมือ (Tx) เกี่ยวข้องเฉพาะกับเครื่องพิมพ์ที่มีชุดดันเส้นหลายเครื่อง (หลายหัวเครื่องมือ) ที่ใช้แผ่นเช็ดแบบ Type 2 ตามค่าเริ่มต้น Orca จะข้ามการเดินทางบนเครื่องที่มีหัวเครื่องมือหลายหัวเนื่องจากเฟิร์มแวร์จัดการการสลับหัว ซึ่งอาจส่งผลให้มีการออกคำสั่ง Tx เหนือส่วนที่พิมพ์ เปิดใช้งานตัวเลือกนี้หากคุณต้องการให้ทำการเปลี่ยนแปลงเครื่องมือเหนือ Wipe Tower แทนเสมอ" msgid "No sparse layers (beta)" msgstr "ไม่มีชั้นกระจัดกระจาย (เบต้า)" msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print." -msgstr "หากเปิดใช้งาน หอเช็ดจะไม่ถูกพิมพ์บนเลเยอร์โดยไม่มีการเปลี่ยนแปลงเครื่องมือ บนเลเยอร์ที่มีการเปลี่ยนเครื่องมือ ชุดดันเส้นจะเคลื่อนลงด้านล่างเพื่อพิมพ์ไวด์ทาวเวอร์ ผู้ใช้มีหน้าที่รับผิดชอบในการตรวจสอบให้แน่ใจว่าไม่มีการชนกันกับงานพิมพ์" +msgstr "หากเปิดใช้งาน Wipe Tower จะไม่ถูกพิมพ์บนเลเยอร์โดยไม่มีการเปลี่ยนแปลงเครื่องมือ บนเลเยอร์ที่มีการเปลี่ยนเครื่องมือ ชุดดันเส้นจะเคลื่อนลงด้านล่างเพื่อพิมพ์ Wipe Tower ผู้ใช้มีหน้าที่รับผิดชอบในการตรวจสอบให้แน่ใจว่าไม่มีการชนกันกับงานพิมพ์" msgid "Prime all printing extruders" msgstr "ใช้ชุดดันเส้นการพิมพ์ทั้งหมด" @@ -16720,7 +16720,7 @@ msgid "Independent support layer height" msgstr "ความสูงของชั้นรองรับอิสระ" msgid "Support layer uses layer height independent with object layer. This is to support customizing Z-gap and save print time. This option will be invalid when the prime tower is enabled." -msgstr "เลเยอร์ส่วนรองรับใช้ความสูงของเลเยอร์ที่เป็นอิสระจากเลเยอร์วัตถุ เพื่อรองรับการปรับแต่ง Z-gap และประหยัดเวลาในการพิมพ์ ตัวเลือกนี้จะไม่ถูกต้องเมื่อเปิดใช้งานไพรม์ทาวเวอร์" +msgstr "เลเยอร์ส่วนรองรับใช้ความสูงของเลเยอร์ที่เป็นอิสระจากเลเยอร์วัตถุ เพื่อรองรับการปรับแต่ง Z-gap และประหยัดเวลาในการพิมพ์ ตัวเลือกนี้จะไม่ถูกต้องเมื่อเปิดใช้งาน Prime Tower" msgid "Threshold angle" msgstr "มุมเกณฑ์" @@ -16885,13 +16885,13 @@ msgid "This G-code is inserted when filament is changed, including T commands to msgstr "รหัส G นี้จะถูกแทรกเมื่อมีการเปลี่ยนเส้นพลาสติก รวมถึงคำสั่ง T เพื่อกระตุ้นการเปลี่ยนเครื่องมือ" msgid "This G-code is inserted when the extrusion role is changed." -msgstr "G-code นี้จะถูกแทรกเมื่อบทบาทการอัดขึ้นรูปมีการเปลี่ยนแปลง" +msgstr "G-code นี้จะถูกแทรกเมื่อประเภทการพิมพ์มีการเปลี่ยนแปลง" msgid "Change extrusion role G-code (filament)" -msgstr "เปลี่ยนบทบาทการอัดขึ้นรูป G-code (เส้นพลาสติก)" +msgstr "เปลี่ยนประเภทการพิมพ์ G-code (เส้นพลาสติก)" msgid "This G-code is inserted when the extrusion role is changed for the active filament." -msgstr "รหัส G นี้จะถูกแทรกเมื่อมีการเปลี่ยนบทบาทการอัดขึ้นรูปสำหรับเส้นพลาสติกที่ใช้งานอยู่" +msgstr "รหัส G นี้จะถูกแทรกเมื่อมีการเปลี่ยนประเภทการพิมพ์สำหรับเส้นพลาสติกที่ใช้งานอยู่" msgid "Line width for top surfaces. If expressed as a %, it will be computed over the nozzle diameter." msgstr "ความกว้างของเส้นสำหรับพื้นผิวด้านบน หากแสดงเป็น % จะคำนวณตามเส้นผ่านศูนย์กลางของหัวฉีด" @@ -16981,13 +16981,13 @@ msgstr "" "การตั้งค่าในจำนวนการถอนก่อนการล้างการตั้งค่าด้านล่างจะทำการถอนส่วนที่เกินก่อนการล้าง มิฉะนั้นจะดำเนินการหลังจากนั้น" msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." -msgstr "หอเช็ดสามารถใช้เพื่อทำความสะอาดสิ่งตกค้างบนหัวฉีด และทำให้แรงดันในห้องภายในหัวฉีดคงที่ เพื่อหลีกเลี่ยงข้อบกพร่องในลักษณะที่ปรากฏเมื่อพิมพ์วัตถุ" +msgstr "Wipe Tower สามารถใช้เพื่อทำความสะอาดสิ่งตกค้างบนหัวฉีด และทำให้แรงดันในห้องภายในหัวฉีดคงที่ เพื่อหลีกเลี่ยงข้อบกพร่องในลักษณะที่ปรากฏเมื่อพิมพ์วัตถุ" msgid "Internal ribs" -msgstr "ซี่โครงภายใน" +msgstr "ครีบเสริมภายใน" msgid "Enable internal ribs to increase the stability of the prime tower." -msgstr "เปิดใช้งานซี่โครงภายในเพื่อเพิ่มความมั่นคงของหอคอยหลัก" +msgstr "เปิดใช้ครีบเสริมภายในเพื่อเพิ่มความมั่นคงของ Prime Tower" msgid "Purging volumes" msgstr "ปริมาตรการไล่เส้น" @@ -17007,10 +17007,10 @@ msgid "The flush multiplier used in fast purge mode." msgstr "ตัวคูณการไล่เส้นที่ใช้ในโหมดไล่เส้นเร็ว" msgid "Prime volume" -msgstr "ปริมาณเฉพาะ" +msgstr "ปริมาตร Prime" msgid "This is the volume of material to prime the extruder with on the tower." -msgstr "ปริมาตรวัสดุสำหรับเตรียมหัวฉีดบนไพรม์ทาวเวอร์" +msgstr "ปริมาตรวัสดุสำหรับเตรียมหัวฉีดบน Prime Tower" # AI Translated msgid "Prime volume mode" @@ -17018,7 +17018,7 @@ msgstr "โหมดปริมาณการไพรม์" # AI Translated msgid "Selects how the wipe-tower prime and flush volumes are computed on multi-extruder printers." -msgstr "เลือกวิธีการคำนวณปริมาณการไพรม์และการไล่เส้นของทาวเวอร์เช็ดหัวฉีดบนเครื่องพิมพ์แบบหลายชุดดันเส้น" +msgstr "เลือกวิธีการคำนวณปริมาณการไพรม์และการไล่เส้นของ Wipe Tower บนเครื่องพิมพ์แบบหลายชุดดันเส้น" # AI Translated msgid "Saving" @@ -17029,25 +17029,25 @@ msgid "Fast" msgstr "เร็ว" msgid "This is the width of prime towers." -msgstr "ความกว้างของไพรม์ทาวเวอร์" +msgstr "ความกว้างของ Prime Tower" msgid "Wipe tower rotation angle" -msgstr "เช็ดมุมการหมุนของทาวเวอร์" +msgstr "มุมหมุนของ Wipe Tower" msgid "Wipe tower rotation angle with respect to X axis." -msgstr "เช็ดมุมการหมุนของทาวเวอร์ตามแกน X" +msgstr "มุมหมุนของ Wipe Tower เทียบกับแกน X" msgid "Brim width of prime tower, negative number means auto calculated width based on the height of prime tower." -msgstr "ความกว้างขอบของหอคอยหลัก ตัวเลขติดลบหมายถึงความกว้างที่คำนวณโดยอัตโนมัติตามความสูงของหอคอยหลัก" +msgstr "ความกว้างขอบของ Prime Tower ตัวเลขติดลบหมายถึงความกว้างที่คำนวณโดยอัตโนมัติตามความสูงของ Prime Tower" msgid "Stabilization cone apex angle" msgstr "มุมเอเพ็กซ์ของกรวยป้องกันการสั่นไหว" msgid "Angle at the apex of the cone that is used to stabilize the wipe tower. Larger angle means wider base." -msgstr "มุมที่ปลายกรวยที่ใช้เพื่อรักษาเสถียรภาพของหอเช็ด มุมที่ใหญ่ขึ้นหมายถึงฐานที่กว้างขึ้น" +msgstr "มุมที่ปลายกรวยที่ใช้เพื่อรักษาเสถียรภาพของ Wipe Tower มุมที่ใหญ่ขึ้นหมายถึงฐานที่กว้างขึ้น" msgid "Maximum wipe tower print speed" -msgstr "ความเร็วการพิมพ์ไวต์ทาวเวอร์สูงสุด" +msgstr "ความเร็วการพิมพ์ Wipe Tower สูงสุด" msgid "" "The maximum print speed when purging in the wipe tower and printing the wipe tower sparse layers. When purging, if the sparse infill speed or calculated speed from the filament max volumetric speed is lower, the lowest will be used instead.\n" @@ -17064,11 +17064,11 @@ msgstr "" "\n" "เมื่อพิมพ์ชั้นเบาบาง หากความเร็วเส้นรอบวงภายในหรือความเร็วที่คำนวณจากความเร็วปริมาตรสูงสุดของเส้นพลาสติกต่ำกว่า ความเร็วต่ำสุดจะถูกนำมาใช้แทน\n" "\n" -"การเพิ่มความเร็วนี้อาจส่งผลต่อเสถียรภาพของทาวเวอร์ รวมทั้งเพิ่มแรงที่หัวฉีดชนกับหยดใดๆ ที่อาจก่อตัวบนทาวเวอร์เช็ด\n" +"การเพิ่มความเร็วนี้อาจส่งผลต่อเสถียรภาพของทาวเวอร์ รวมทั้งเพิ่มแรงที่หัวฉีดชนกับหยดใดๆ ที่อาจก่อตัวบน Wipe Tower\n" "\n" "ก่อนที่จะเพิ่มพารามิเตอร์นี้เกินกว่าค่าเริ่มต้นที่ 90 มม./วินาที ตรวจสอบให้แน่ใจว่าเครื่องพิมพ์ของคุณสามารถเชื่อมต่อที่ความเร็วที่เพิ่มขึ้นได้อย่างน่าเชื่อถือ และจะมีการควบคุมอย่างดีเมื่อเปลี่ยนเครื่องมือ\n" "\n" -"สำหรับปริมณฑลภายนอกของไวต์ทาวเวอร์ ความเร็วของปริมณฑลภายในจะถูกใช้โดยไม่คำนึงถึงการตั้งค่านี้" +"สำหรับปริมณฑลภายนอกของ Wipe Tower ความเร็วของปริมณฑลภายในจะถูกใช้โดยไม่คำนึงถึงการตั้งค่านี้" msgid "Wall type" msgstr "ชนิดติดผนัง" @@ -17079,10 +17079,10 @@ msgid "" "2. Cone: A cone with a fillet at the bottom to help stabilize the wipe tower.\n" "3. Rib: Adds four ribs to the tower wall for enhanced stability." msgstr "" -"เช็ดทาวเวอร์ชนิดผนังด้านนอก\n" +"Wipe Tower ชนิดผนังด้านนอก\n" "1. สี่เหลี่ยมผืนผ้า: ประเภทผนังเริ่มต้น ซึ่งเป็นสี่เหลี่ยมผืนผ้าที่มีความกว้างและความสูงคงที่\n" -"2. กรวย: กรวยที่มีเนื้ออยู่ด้านล่างเพื่อช่วยรักษาเสถียรภาพของหอเช็ด\n" -"3. ซี่โครง: เพิ่มสี่ซี่โครงเข้ากับผนังหอคอยเพื่อเพิ่มความมั่นคง" +"2. กรวย: กรวยที่มีเนื้ออยู่ด้านล่างเพื่อช่วยรักษาเสถียรภาพของ Wipe Tower\n" +"3. ซี่โครง: เพิ่มสี่ซี่โครงเข้ากับผนัง Wipe Tower เพื่อเพิ่มความมั่นคง" msgid "Rectangle" msgstr "สี่เหลี่ยมผืนผ้า" @@ -17100,40 +17100,40 @@ msgid "Rib width" msgstr "ความกว้างของซี่โครง" msgid "Rib width is always less than half the prime tower side length." -msgstr "ความกว้างของซี่โครงจะน้อยกว่าครึ่งหนึ่งของความยาวด้านของไพรม์ทาวเวอร์เสมอ" +msgstr "ความกว้างของซี่โครงจะน้อยกว่าครึ่งหนึ่งของความยาวด้านของ Prime Tower เสมอ" msgid "Fillet wall" msgstr "ผนังเนื้อ" msgid "The wall of prime tower will fillet." -msgstr "ผนังของไพร์มทาวเวอร์จะแล่เป็นเนื้อเดียวกัน" +msgstr "ผนังของ Prime Tower จะแล่เป็นเนื้อเดียวกัน" msgid "The extruder to use when printing perimeter of the wipe tower. Set to 0 to use the one that is available (non-soluble would be preferred)." -msgstr "ชุดดันเส้นที่จะใช้ในการพิมพ์ปริมณฑลของหอเช็ด ตั้งค่าเป็น 0 เพื่อใช้อันที่มีอยู่ (แนะนำให้ใช้แบบไม่ละลายน้ำ)" +msgstr "ชุดดันเส้นที่จะใช้ในการพิมพ์ปริมณฑลของ Wipe Tower ตั้งค่าเป็น 0 เพื่อใช้อันที่มีอยู่ (แนะนำให้ใช้แบบไม่ละลายน้ำ)" msgid "Purging volumes - load/unload volumes" msgstr "การล้างไดรฟ์ข้อมูล - โหลด/ยกเลิกการโหลดไดรฟ์ข้อมูล" msgid "This vector saves required volumes to change from/to each tool used on the wipe tower. These values are used to simplify creation of the full purging volumes below." -msgstr "เวกเตอร์นี้จะบันทึกปริมาณที่ต้องการเพื่อเปลี่ยนจาก/ไปยังแต่ละเครื่องมือที่ใช้บนไวด์ทาวเวอร์ ค่าเหล่านี้ใช้เพื่อทำให้การสร้างวอลุ่มการล้างข้อมูลทั้งหมดด้านล่างง่ายขึ้น" +msgstr "เวกเตอร์นี้จะบันทึกปริมาณที่ต้องการเพื่อเปลี่ยนจาก/ไปยังแต่ละเครื่องมือที่ใช้บน Wipe Tower ค่าเหล่านี้ใช้เพื่อทำให้การสร้างวอลุ่มการล้างข้อมูลทั้งหมดด้านล่างง่ายขึ้น" msgid "Skip points" msgstr "ข้ามจุด" msgid "The wall of prime tower will skip the start points of wipe path." -msgstr "ผนังของไพร์มทาวเวอร์จะข้ามจุดเริ่มต้นของเส้นทางการเช็ด" +msgstr "ผนังของ Prime Tower จะข้ามจุดเริ่มต้นของเส้นทางการเช็ด" msgid "Enable tower interface features" msgstr "เปิดใช้งานคุณสมบัติอินเทอร์เฟซแบบทาวเวอร์" msgid "Enable optimized prime tower interface behavior when different materials meet." -msgstr "เปิดใช้งานพฤติกรรมอินเทอร์เฟซของไพรม์ทาวเวอร์ที่ได้รับการปรับให้เหมาะสมเมื่อวัสดุที่แตกต่างกันมาบรรจบกัน" +msgstr "เปิดใช้งานพฤติกรรมอินเทอร์เฟซของ Prime Tower ที่ได้รับการปรับให้เหมาะสมเมื่อวัสดุที่แตกต่างกันมาบรรจบกัน" msgid "Cool down from interface boost during prime tower" -msgstr "เย็นลงจากการเพิ่มอินเทอร์เฟซระหว่างหอคอยหลัก" +msgstr "การระบายความร้อนที่เลเยอร์อินเทอร์เฟซของ Prime Tower" msgid "When interface-layer temperature boost is active, set the nozzle back to print temperature at the start of the prime tower so it cools down during the tower." -msgstr "เมื่อเปิดใช้งานการเพิ่มอุณหภูมิของชั้นอินเทอร์เฟซ ให้ตั้งค่าหัวฉีดกลับไปเป็นอุณหภูมิการพิมพ์ที่จุดเริ่มต้นของไพรม์ทาวเวอร์ เพื่อให้เย็นลงระหว่างทาวเวอร์" +msgstr "เมื่อเปิดใช้งานการเพิ่มอุณหภูมิของชั้นอินเทอร์เฟซ ให้ตั้งค่าหัวฉีดกลับไปเป็นอุณหภูมิการพิมพ์ที่จุดเริ่มต้นของ Prime Tower เพื่อให้เย็นลงระหว่าง Prime Tower" msgid "Infill gap" msgstr "การเติมช่องว่าง" @@ -17142,13 +17142,13 @@ msgid "Infill gap." msgstr "การเติมช่องว่าง." msgid "Purging after filament change will be done inside objects' infills. This may lower the amount of waste and decrease the print time. If the walls are printed with transparent filament, the mixed color infill will be visible. It will not take effect unless the prime tower is enabled." -msgstr "การล้างหลังจากเปลี่ยนเส้นพลาสติกจะดำเนินการภายในส่วนไส้ในของวัตถุ สิ่งนี้อาจลดปริมาณขยะและลดเวลาในการพิมพ์ หากผนังพิมพ์ด้วยเส้นพลาสติกโปร่งใส จะเห็นไส้ในสีผสมไว้ด้านนอก มันจะไม่มีผลเว้นแต่จะเปิดใช้งานไพรม์ทาวเวอร์" +msgstr "การล้างหลังจากเปลี่ยนเส้นพลาสติกจะดำเนินการภายในส่วนไส้ในของวัตถุ สิ่งนี้อาจลดปริมาณขยะและลดเวลาในการพิมพ์ หากผนังพิมพ์ด้วยเส้นพลาสติกโปร่งใส จะเห็นไส้ในสีผสมไว้ด้านนอก มันจะไม่มีผลเว้นแต่จะเปิดใช้งาน Prime Tower" msgid "Purging after filament change will be done inside objects' support. This may lower the amount of waste and decrease the print time. It will not take effect unless a prime tower is enabled." -msgstr "การล้างข้อมูลหลังจากเปลี่ยนเส้นพลาสติกจะดำเนินการภายในส่วนรองรับของวัตถุ สิ่งนี้อาจลดปริมาณขยะและลดเวลาในการพิมพ์ มันจะไม่มีผลเว้นแต่จะเปิดใช้งานไพรม์ทาวเวอร์" +msgstr "การล้างข้อมูลหลังจากเปลี่ยนเส้นพลาสติกจะดำเนินการภายในส่วนรองรับของวัตถุ สิ่งนี้อาจลดปริมาณขยะและลดเวลาในการพิมพ์ มันจะไม่มีผลเว้นแต่จะเปิดใช้งาน Prime Tower" msgid "This object will be used to purge the nozzle after a filament change to save filament and decrease the print time. Colors of the objects will be mixed as a result. It will not take effect unless the prime tower is enabled." -msgstr "วัตถุนี้จะใช้ในการล้างหัวฉีดหลังจากเปลี่ยนเส้นพลาสติกเพื่อประหยัดเส้นพลาสติกและลดเวลาในการพิมพ์ สีของวัตถุจะผสมกัน มันจะไม่มีผลเว้นแต่จะเปิดใช้งานไพรม์ทาวเวอร์" +msgstr "วัตถุนี้จะใช้ในการล้างหัวฉีดหลังจากเปลี่ยนเส้นพลาสติกเพื่อประหยัดเส้นพลาสติกและลดเวลาในการพิมพ์ สีของวัตถุจะผสมกัน มันจะไม่มีผลเว้นแต่จะเปิดใช้งาน Prime Tower" msgid "Maximal bridging distance" msgstr "ระยะเชื่อมต่อสูงสุด" @@ -17157,16 +17157,16 @@ msgid "Maximal distance between supports on sparse infill sections." msgstr "ระยะห่างสูงสุดระหว่างส่วนรองรับในส่วน ไส้ใน แบบกระจัดกระจาย" msgid "Wipe tower purge lines spacing" -msgstr "เช็ดระยะห่างบรรทัดล้างทาวเวอร์" +msgstr "ระยะห่างเส้นไล่พลาสติกของ Wipe Tower" msgid "Spacing of purge lines on the wipe tower." -msgstr "ระยะห่างของเส้นไล่ล้างบนหอเช็ด" +msgstr "ระยะห่างของเส้นไล่ล้างบน Wipe Tower" msgid "Extra flow for purging" msgstr "กระแสพิเศษสำหรับการล้าง" msgid "Extra flow used for the purging lines on the wipe tower. This makes the purging lines thicker or narrower than they normally would be. The spacing is adjusted automatically." -msgstr "การไหลพิเศษที่ใช้สำหรับท่อไล่ล้างบนหอเช็ด ซึ่งจะทำให้เส้นการล้างหนาหรือแคบกว่าปกติ ระยะห่างจะถูกปรับโดยอัตโนมัติ" +msgstr "การไหลพิเศษที่ใช้สำหรับท่อไล่ล้างบน Wipe Tower ซึ่งจะทำให้เส้นการล้างหนาหรือแคบกว่าปกติ ระยะห่างจะถูกปรับโดยอัตโนมัติ" msgid "Idle temperature" msgstr "อุณหภูมิว่าง" @@ -17748,10 +17748,10 @@ msgid "Specific for sequential printing. Zero-based index of currently printed o msgstr "เฉพาะสำหรับการพิมพ์ตามลำดับ ดัชนีแบบศูนย์ของวัตถุที่พิมพ์ในปัจจุบัน" msgid "Has wipe tower" -msgstr "มีหอเช็ด" +msgstr "มี Wipe Tower" msgid "Whether or not wipe tower is being generated in the print." -msgstr "มีการสร้างเช็ดทาวเวอร์ในการพิมพ์หรือไม่" +msgstr "มีการสร้าง Wipe Tower ในการพิมพ์หรือไม่" msgid "Initial extruder" msgstr "ชุดดันเส้นเริ่มต้น" @@ -17838,16 +17838,16 @@ msgid "Total cost of all material used in the print. Calculated from filament_co msgstr "ต้นทุนรวมของวัสดุทั้งหมดที่ใช้ในการพิมพ์ คำนวณจากค่า fil_cost ในการตั้งค่า เส้นพลาสติก" msgid "Total wipe tower cost" -msgstr "ต้นทุนเช็ดทาวเวอร์ทั้งหมด" +msgstr "ต้นทุน Wipe Tower ทั้งหมด" msgid "Total cost of the material wasted on the wipe tower. Calculated from filament_cost value in Filament Settings." -msgstr "ต้นทุนรวมของวัสดุที่เสียไปบนไวด์ทาวเวอร์ คำนวณจากค่า fil_cost ในการตั้งค่า เส้นพลาสติก" +msgstr "ต้นทุนรวมของวัสดุที่เสียไปบน Wipe Tower คำนวณจากค่า fil_cost ในการตั้งค่า เส้นพลาสติก" msgid "Wipe tower volume" msgstr "เช็ดปริมาตรทาวเวอร์" msgid "Total filament volume extruded on the wipe tower." -msgstr "ปริมาตรเส้นพลาสติกทั้งหมดที่อัดบนไวด์ทาวเวอร์" +msgstr "ปริมาตรเส้นพลาสติกทั้งหมดที่อัดบน Wipe Tower" msgid "Used filament" msgstr "เส้นพลาสติกที่ใช้แล้ว" @@ -18045,8 +18045,8 @@ msgid "" "An object has enabled XY Size compensation which will not be used because it is also fuzzy skin painted.\n" "XY Size compensation cannot be combined with fuzzy skin painting." msgstr "" -"วัตถุได้เปิดใช้งานการชดเชยขนาด XY ซึ่งจะไม่ถูกใช้เนื่องจากเป็นสีที่ไม่ชัดเจนเช่นกัน\n" -"การชดเชยขนาด XY ไม่สามารถใช้ร่วมกับการลงสีผิวแบบคลุมเครือได้" +"วัตถุได้เปิดใช้งานการชดเชยขนาด XY ซึ่งจะไม่ถูกใช้เนื่องจากถูกระบายสีผิวฟัซซีไว้เช่นกัน\n" +"การชดเชยขนาด XY ไม่สามารถใช้ร่วมกับการระบายสีผิวฟัซซีได้" msgid "Object name" msgstr "ชื่อออบเจ็กต์" @@ -20591,7 +20591,7 @@ msgid "Auto-generate" msgstr "สร้างอัตโนมัติ" msgid "Generate brim ears using Max angle and Detection radius" -msgstr "สร้างหูขอบยึดชิ้นงานนกโดยใช้มุมสูงสุดและรัศมีการตรวจจับ" +msgstr "สร้างหูขอบยึดชิ้นงาน (Brim Ears) โดยใช้มุมสูงสุดและรัศมีการตรวจจับ" msgid "Add or Select" msgstr "เพิ่มหรือเลือก" @@ -20606,7 +20606,7 @@ msgid "invalid brim ears" msgstr "หูขอบยึดชิ้นงานไม่ถูกต้อง" msgid "Brim Ears" -msgstr "หูขอบยึดชิ้นงาน" +msgstr "หูขอบยึดชิ้นงาน (Brim Ears)" msgid "Please select single object." msgstr "กรุณาเลือกวัตถุเดียว" @@ -21572,7 +21572,7 @@ msgstr "" #~ msgstr "เนื้อหาที่ตั้งไว้ล่วงหน้ามีขนาดใหญ่เกินกว่าจะซิงค์กับระบบคลาวด์ (เกิน 1MB) โปรดลดขนาดที่กำหนดไว้ล่วงหน้าโดยการลบการกำหนดค่าที่กำหนดเองออกหรือใช้เฉพาะในเครื่องเท่านั้น" #~ msgid "Enable adaptive pressure advance for overhangs (beta)" -#~ msgstr "เปิดใช้งานการปรับPressure Advanceสำหรับระยะยื่น (เบต้า)" +#~ msgstr "เปิดใช้ Adaptive Pressure Advance สำหรับส่วนยื่น (เบต้า)" #~ msgid "" #~ "Enable adaptive PA for overhangs as well as when flow changes within the same feature. This is an experimental option, as if the PA profile is not set accurately, it will cause uniformity issues on the external surfaces before and after overhangs.\n" @@ -21582,7 +21582,7 @@ msgstr "" #~ "ไม่รองรับเครื่องพิมพ์ Prusa เพราะจะหยุดชั่วคราวเพื่อประมวลผลการเปลี่ยน PA ทำให้เกิดความล่าช้าและข้อบกพร่อง" #~ msgid "Pressure advance for bridges" -#~ msgstr "แรงดันล่วงหน้า (Pressure Advance)สำหรับสะพาน" +#~ msgstr "Pressure Advance สำหรับสะพาน" #~ msgid "" #~ "Pressure advance value for bridges. Set to 0 to disable.\n" From e9d421050e0eff618c0c2c5abb5869d91bfa4081 Mon Sep 17 00:00:00 2001 From: Ian Chua Date: Wed, 12 Aug 2026 18:50:49 +0800 Subject: [PATCH 55/66] refactor: access codes and device tab (#15134) --- src/slic3r/GUI/ConnectPrinter.cpp | 4 ++- src/slic3r/GUI/DeviceCore/DevManager.cpp | 19 +++++++++--- src/slic3r/GUI/DeviceManager.cpp | 36 +--------------------- src/slic3r/GUI/DeviceManager.hpp | 6 ---- src/slic3r/GUI/GUI_App.cpp | 4 +-- src/slic3r/GUI/MainFrame.cpp | 24 +++++++++++---- src/slic3r/GUI/Plater.cpp | 13 ++++++-- src/slic3r/GUI/ReleaseNote.cpp | 9 ++++-- src/slic3r/GUI/SelectMachinePop.cpp | 1 - src/slic3r/Utils/MoonrakerPrinterAgent.cpp | 1 - 10 files changed, 54 insertions(+), 63 deletions(-) diff --git a/src/slic3r/GUI/ConnectPrinter.cpp b/src/slic3r/GUI/ConnectPrinter.cpp index b4cd7f4f2f..3e78e7fe5c 100644 --- a/src/slic3r/GUI/ConnectPrinter.cpp +++ b/src/slic3r/GUI/ConnectPrinter.cpp @@ -156,6 +156,8 @@ void ConnectPrinterDialog::on_input_enter(wxCommandEvent& evt) void ConnectPrinterDialog::on_button_confirm(wxCommandEvent &event) { wxString code = m_textCtrl_code->GetTextCtrl()->GetValue(); + if (code.empty()) + code = "88888888"; for (char c : code) { if (!(('0' <= c && c <= '9') || ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z'))) { show_error(this, _L("Invalid input")); @@ -163,7 +165,7 @@ void ConnectPrinterDialog::on_button_confirm(wxCommandEvent &event) } } if (m_obj) { - m_obj->set_user_access_code(code.ToStdString()); + m_obj->set_access_code(code.ToStdString()); } EndModal(wxID_OK); } diff --git a/src/slic3r/GUI/DeviceCore/DevManager.cpp b/src/slic3r/GUI/DeviceCore/DevManager.cpp index d13f8b7215..edc958ec53 100644 --- a/src/slic3r/GUI/DeviceCore/DevManager.cpp +++ b/src/slic3r/GUI/DeviceCore/DevManager.cpp @@ -15,6 +15,18 @@ using namespace nlohmann; +namespace { + // Orca: access_code and user_access_code used to be separate AppConfig keys before the two + // fields were merged; fall back to the legacy key so existing users' saved codes aren't lost. + std::string get_access_code_with_legacy_fallback(Slic3r::AppConfig* config, const std::string& dev_id) + { + std::string code = config->get("access_code", dev_id); + if (code.empty()) + code = config->get("user_access_code", dev_id); + return code; + } +} + namespace Slic3r { DeviceManager::DeviceManager(NetworkAgent* agent) @@ -48,8 +60,7 @@ namespace Slic3r obj->bind_sec_link = "secure"; obj->m_is_online = true; obj->last_alive = Slic3r::Utils::get_current_time_utc(); - obj->set_access_code(config->get("access_code", m.dev_id), false); - obj->set_user_access_code(config->get("user_access_code", m.dev_id), false); + obj->set_access_code(get_access_code_with_legacy_fallback(config, m.dev_id), false); if (obj->has_access_right()) { localMachineList.insert(std::make_pair(m.dev_id, obj)); } else { @@ -339,8 +350,7 @@ namespace Slic3r //load access code AppConfig* config = Slic3r::GUI::wxGetApp().app_config; if (config) { - obj->set_access_code(Slic3r::GUI::wxGetApp().app_config->get("access_code", dev_id), false); - obj->set_user_access_code(Slic3r::GUI::wxGetApp().app_config->get("user_access_code", dev_id), false); + obj->set_access_code(get_access_code_with_legacy_fallback(config, dev_id), false); } localMachineList.insert(std::make_pair(dev_id, obj)); @@ -382,7 +392,6 @@ namespace Slic3r obj->m_is_online = true; obj->last_alive = Slic3r::Utils::get_current_time_utc(); obj->set_access_code(access_code, false); - obj->set_user_access_code(access_code, false); update_local_machine(*obj); diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index ef85870461..f4befe78c1 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -449,9 +449,7 @@ bool MachineObject::HasRecentLanMessage() std::string MachineObject::get_access_code() const { - if (get_user_access_code().empty()) - return access_code; - return get_user_access_code(); + return access_code; } void MachineObject::set_access_code(std::string code, bool only_refresh) @@ -470,37 +468,6 @@ void MachineObject::set_access_code(std::string code, bool only_refresh) } } -void MachineObject::erase_user_access_code() -{ - this->user_access_code = ""; - AppConfig* config = GUI::wxGetApp().app_config; - if (config) { - GUI::wxGetApp().app_config->erase("user_access_code", get_dev_id()); - //GUI::wxGetApp().app_config->save(); - } -} - -void MachineObject::set_user_access_code(std::string code, bool only_refresh) -{ - this->user_access_code = code; - if (only_refresh && !code.empty()) { - AppConfig* config = GUI::wxGetApp().app_config; - if (config && !code.empty()) { - GUI::wxGetApp().app_config->set_str("user_access_code", get_dev_id(), code); - DeviceManager::update_local_machine(*this); - } - } -} - -std::string MachineObject::get_user_access_code() const -{ - AppConfig* config = GUI::wxGetApp().app_config; - if (config) { - return GUI::wxGetApp().app_config->get("user_access_code", get_dev_id()); - } - return ""; -} - std::string MachineObject::get_show_printer_type() const { std::string printer_type = this->printer_type; @@ -2907,7 +2874,6 @@ int MachineObject::parse_json(std::string tunnel, std::string payload, bool key_ std::string access_code = j_pre["system"]["access_code"].get(); if (!access_code.empty()) { set_access_code(access_code); - set_user_access_code(access_code); } } } diff --git a/src/slic3r/GUI/DeviceManager.hpp b/src/slic3r/GUI/DeviceManager.hpp index 2790e37cfa..33635fbe6e 100644 --- a/src/slic3r/GUI/DeviceManager.hpp +++ b/src/slic3r/GUI/DeviceManager.hpp @@ -113,7 +113,6 @@ private: std::string dev_name; std::string dev_ip; std::string access_code; - std::string user_access_code; // type, time stamp, delay std::vector> message_delay; @@ -228,11 +227,6 @@ public: std::string get_access_code() const; void set_access_code(std::string code, bool only_refresh = true); - /*user access code*/ - void set_user_access_code(std::string code, bool only_refresh = true); - void erase_user_access_code(); - std::string get_user_access_code() const; - //PRINTER_TYPE printer_type = PRINTER_3DPrinter_UKNOWN; std::string printer_type; /* model_id */ std::string get_show_printer_type() const; diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 14edeb8038..db51bd9d8e 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -2166,7 +2166,6 @@ void GUI_App::init_networking_callbacks() obj->is_tunnel_mqtt = tunnel; obj->command_request_push_all(true); obj->command_get_version(); - obj->erase_user_access_code(); obj->command_get_access_code(); if (m_agent) m_agent->install_device_cert(obj->get_dev_id(), obj->is_lan_mode_printer()); @@ -2216,7 +2215,6 @@ void GUI_App::init_networking_callbacks() wxString text; if (msg == "5") { obj->set_access_code(""); - obj->erase_user_access_code(); text = wxString::Format(_L("Incorrect password")); wxGetApp().show_dialog(text); } else { @@ -8286,7 +8284,7 @@ bool GUI_App::show_modal_ip_address_enter_dialog(bool input_sn, wxString title) wxGetApp().app_config->save(); obj->set_dev_ip(ip_address.ToStdString()); - obj->set_user_access_code(access_code.ToStdString()); + obj->set_access_code(access_code.ToStdString()); } } }); diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 5ef81a32e1..5a0e70b74c 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -1373,8 +1373,8 @@ void MainFrame::show_device(bool should_use_native) { const bool use_printer_agents = wxGetApp().app_config->get_bool("use_printer_agents"); - // The legacy page is appended when printer agents are enabled. Remove that - // extra page before switching back to the normal native/legacy layout. + // The web page is appended when printer agents are enabled. Remove that + // extra page before switching back to the normal native/Web layout. if (!use_printer_agents) { if ((idx = m_tabpanel->FindPage(m_printer_view)) != wxNOT_FOUND && idx != tpMonitor) { m_printer_view->Show(false); @@ -1434,10 +1434,10 @@ void MainFrame::show_device(bool should_use_native) { if ((idx = m_tabpanel->FindPage(m_printer_view)) == wxNOT_FOUND) { m_printer_view->Show(false); - m_tabpanel->AddPage(m_printer_view, _L("Device (legacy)"), std::string("tab_monitor_active"), + m_tabpanel->AddPage(m_printer_view, _L("Device (Web)"), std::string("tab_monitor_active"), std::string("tab_monitor_active"), false); } else { - m_tabpanel->SetPageText(idx, _L("Device (legacy)")); + m_tabpanel->SetPageText(idx, _L("Device (Web)")); } #ifdef _MSW_DARK_MODE @@ -4333,14 +4333,26 @@ void MainFrame::load_printer_url(wxString url, wxString apikey) void MainFrame::load_printer_url() { PresetBundle &preset_bundle = *wxGetApp().preset_bundle; - if (preset_bundle.use_bbl_device_tab() || wxGetApp().app_config->get_bool("use_printer_agents")) + if (preset_bundle.use_bbl_device_tab() && !wxGetApp().app_config->get_bool("use_printer_agents")) return; auto cfg = preset_bundle.printers.get_edited_preset().config; + if (cfg.opt_string("print_host").empty()) { + if (auto *device_manager = wxGetApp().getDeviceManager()) { + auto *machine = device_manager->get_selected_machine(); + if (!machine) { + auto machines = device_manager->get_my_machine_list(); + if (machines.size() == 1) + machine = machines.begin()->second; + } + if (machine && !machine->get_dev_ip().empty()) + cfg.opt_string("print_host") = machine->get_dev_ip(); + } + } wxString url = from_u8(PrintHost::get_print_host_webui(&cfg)); wxString apikey; const auto host_type = cfg.option>("host_type")->value; - if (cfg.has("printhost_apikey") && (host_type == htPrusaLink || host_type == htPrusaConnect)) + if (cfg.has("printhost_apikey") && host_type != htSimplyPrint) apikey = cfg.opt_string("printhost_apikey"); if (!url.empty()) { load_printer_url(url, apikey); diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 8299125353..5b06db9d3e 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -3287,7 +3287,9 @@ void Sidebar::update_all_preset_comboboxes() : MainFrame::PrintSelectType::eSendGcode; } - if (!use_native_device_tab || use_printer_agents) + if (use_printer_agents) + p_mainframe->load_printer_url(); + else if (!use_native_device_tab) p_mainframe->load_printer_url(url, apikey); @@ -11236,9 +11238,14 @@ void Plater::priv::on_tab_selection_changing(wxBookCtrlEvent& e) } } } else { - if (new_sel == MainFrame::tpMonitor && wxGetApp().preset_bundle != nullptr) { + const bool selecting_web_device_tab = main_frame->m_printer_view && + main_frame->m_tabpanel->GetPage(new_sel) == main_frame->m_printer_view; + if (selecting_web_device_tab) { + // Use the selected discovered machine when the preset has no host. + main_frame->load_printer_url(); + } else if (new_sel == MainFrame::tpMonitor && wxGetApp().preset_bundle != nullptr) { auto cfg = wxGetApp().preset_bundle->printers.get_edited_preset().config; - wxString url = cfg.opt_string("print_host_webui").empty() ? cfg.opt_string("print_host") : cfg.opt_string("print_host_webui"); + wxString url = from_u8(PrintHost::get_print_host_webui(&cfg)); if (main_frame->m_printer_view && url.empty()) { // It's missing_connection page, reload so that we can replay the gif image main_frame->m_printer_view->reload(); diff --git a/src/slic3r/GUI/ReleaseNote.cpp b/src/slic3r/GUI/ReleaseNote.cpp index 22f65f4a60..7b2d091176 100644 --- a/src/slic3r/GUI/ReleaseNote.cpp +++ b/src/slic3r/GUI/ReleaseNote.cpp @@ -1991,7 +1991,7 @@ void InputIpAddressDialog::workerThreadFunc(std::string str_ip, std::string str_ if (w.expired()) return; if (m_obj) { - m_obj->set_user_access_code(str_access_code); + m_obj->set_access_code(str_access_code); wxGetApp().getDeviceManager()->set_selected_machine(m_obj->get_dev_id()); } @@ -2055,6 +2055,11 @@ void InputIpAddressDialog::on_text(wxCommandEvent &evt) { auto str_ip = m_input_ip->GetTextCtrl()->GetValue(); auto str_access_code = m_input_access_code->GetTextCtrl()->GetValue(); + + if (str_access_code.empty()) { + str_access_code = "88888888"; + } + auto str_name = m_input_printer_name->GetTextCtrl()->GetValue().Strip(wxString::both); auto str_sn = m_input_sn->GetTextCtrl()->GetValue().Strip(wxString::both); bool invalid_access_code = true; @@ -2062,7 +2067,7 @@ void InputIpAddressDialog::on_text(wxCommandEvent &evt) for (char c : str_access_code) { if (!(('0' <= c && c <= '9') || ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z'))) { invalid_access_code = false; - return; + break; } } diff --git a/src/slic3r/GUI/SelectMachinePop.cpp b/src/slic3r/GUI/SelectMachinePop.cpp index 492199569e..96324fb4d8 100644 --- a/src/slic3r/GUI/SelectMachinePop.cpp +++ b/src/slic3r/GUI/SelectMachinePop.cpp @@ -704,7 +704,6 @@ void SelectMachinePopup::update_user_devices() } mobj->set_access_code(""); - mobj->erase_user_access_code(); } if (GUI::wxGetApp().plater()) diff --git a/src/slic3r/Utils/MoonrakerPrinterAgent.cpp b/src/slic3r/Utils/MoonrakerPrinterAgent.cpp index d21dce5070..cd3ef82b62 100644 --- a/src/slic3r/Utils/MoonrakerPrinterAgent.cpp +++ b/src/slic3r/Utils/MoonrakerPrinterAgent.cpp @@ -1359,7 +1359,6 @@ void MoonrakerPrinterAgent::announce_printhost_device() if (auto* app_config = GUI::wxGetApp().app_config) { const std::string access_code = device_info.api_key.empty() ? "88888888" : device_info.api_key; app_config->set_str("access_code", device_info.dev_id, access_code); - app_config->set_str("user_access_code", device_info.dev_id, access_code); } nlohmann::json payload; From ee6613a4b8b0720723518c823ef815c4be9d64d4 Mon Sep 17 00:00:00 2001 From: Kiss Lorand <50251547+kisslorand@users.noreply.github.com> Date: Wed, 12 Aug 2026 21:18:00 +0300 Subject: [PATCH 56/66] Fix stale flush matrix after enabling SEMM (#15223) --- src/libslic3r/PresetBundle.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index 01cbc43bc2..5557d36891 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -5378,7 +5378,7 @@ void PresetBundle::update_multi_material_filament_presets(size_t to_delete_filam f_multiplier.resize(nozzle_nums, 1.f); } - if ( (num_filaments * num_filaments) != size_t(old_matrix.size() / old_nozzle_nums) ) { + if (old_matrix.size() != num_filaments * num_filaments * nozzle_nums) { // First verify if purging volumes presets for each extruder matches number of extruders std::vector& filaments = this->project_config.option("flush_volumes_vector")->values; while (filaments.size() < 2* num_filaments) { From d322b1a156b9afb6ef412665594e374baf316a88 Mon Sep 17 00:00:00 2001 From: Kiss Lorand <50251547+kisslorand@users.noreply.github.com> Date: Wed, 12 Aug 2026 21:42:21 +0300 Subject: [PATCH 57/66] Fix assembly parts omitted by height range modifiers (#15225) --- src/libslic3r/PrintApply.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/libslic3r/PrintApply.cpp b/src/libslic3r/PrintApply.cpp index e2e9bc737d..6d5dbb05f5 100644 --- a/src/libslic3r/PrintApply.cpp +++ b/src/libslic3r/PrintApply.cpp @@ -559,9 +559,11 @@ static inline bool model_volume_solid_or_modifier(const ModelVolume &mv) static inline Transform3f trafo_for_bbox(const Transform3d &object_trafo, const Transform3d &volume_trafo) { - Transform3d m = object_trafo * volume_trafo; - m.translation().x() = 0.; - m.translation().y() = 0.; + // Orca: Keep the volume's local XY offset for multipart overlap checks, but remove the object's bed placement. + Transform3d object_trafo_local = object_trafo; + object_trafo_local.translation().x() = 0.; + object_trafo_local.translation().y() = 0.; + Transform3d m = object_trafo_local * volume_trafo; return m.cast(); } From fd23b74b99d95ef25e5b524f90a308538632afd9 Mon Sep 17 00:00:00 2001 From: Kiss Lorand <50251547+kisslorand@users.noreply.github.com> Date: Thu, 13 Aug 2026 23:09:10 +0300 Subject: [PATCH 58/66] Fix single-value object overrides on multi-nozzle printers (#15221) --- src/libslic3r/PrintConfig.cpp | 12 +++++++++++- src/libslic3r/PrintConfig.hpp | 3 +++ src/libslic3r/PrintObject.cpp | 2 +- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index fdb20253d6..f9d895332a 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -10426,6 +10426,16 @@ int DynamicPrintConfig::update_values_from_multi_to_multi_2(const std::vector &variant_index, int stride) +{ + // A single-value object or region override applies to every nozzle variant. + std::vector indices = variant_index; + if (source.size() == 1 && !source.is_nil(0)) + std::fill(indices.begin(), indices.end(), 0); + target.set_to_index(&source, indices, stride); +} + //used for object/region config //use the smallest of multiple to single @@ -11503,7 +11513,7 @@ void update_static_print_config_from_dynamic(ConfigBase& config, const DynamicPr else { ConfigOptionVectorBase* opt_vec_src = static_cast(opt_src); const ConfigOptionVectorBase* opt_vec_dest = static_cast(opt_dest); - opt_vec_src->set_to_index(opt_vec_dest, variant_index, stride); + set_variant_override(*opt_vec_src, *opt_vec_dest, variant_index, stride); } } } diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index 6029d5bd88..b6364c32c2 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -842,6 +842,9 @@ extern std::set printer_options_with_variant_1; extern std::set printer_options_with_variant_2; extern std::set empty_options; +void set_variant_override(ConfigOptionVectorBase &target, const ConfigOptionVectorBase &source, + const std::vector &variant_index, int stride = 1); + extern std::set filament_dev_options; extern void update_static_print_config_from_dynamic(ConfigBase& config, const DynamicPrintConfig& dest_config, std::vector variant_index, std::set& key_set1, int stride = 1); diff --git a/src/libslic3r/PrintObject.cpp b/src/libslic3r/PrintObject.cpp index b2a92f11a6..8368de1a4f 100644 --- a/src/libslic3r/PrintObject.cpp +++ b/src/libslic3r/PrintObject.cpp @@ -3812,7 +3812,7 @@ static void apply_to_print_region_config(PrintRegionConfig &out, const DynamicPr else { ConfigOptionVectorBase* opt_vec_src = static_cast(my_opt); const ConfigOptionVectorBase* opt_vec_dest = static_cast(it->second.get()); - opt_vec_src->set_to_index(opt_vec_dest, variant_index, 1); + set_variant_override(*opt_vec_src, *opt_vec_dest, variant_index); } } } From 56d2c527cbb0fe50afbb09c75bc74cf2cdeddda7 Mon Sep 17 00:00:00 2001 From: Kiss Lorand <50251547+kisslorand@users.noreply.github.com> Date: Thu, 13 Aug 2026 23:28:31 +0300 Subject: [PATCH 59/66] Fix crashes from object-level small perimeter speed overrides (#15232) --- src/libslic3r/Config.hpp | 2 ++ src/libslic3r/Model.cpp | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/libslic3r/Config.hpp b/src/libslic3r/Config.hpp index 509095cbfc..ef93f0d509 100644 --- a/src/libslic3r/Config.hpp +++ b/src/libslic3r/Config.hpp @@ -2982,6 +2982,8 @@ public: const double & opt_float(const t_config_option_key &opt_key, unsigned int idx) const; double & opt_float_nullable(const t_config_option_key &opt_key, unsigned int idx) { return this->option(opt_key)->get_at(idx); } const double & opt_float_nullable(const t_config_option_key &opt_key, unsigned int idx) const { return dynamic_cast(this->option(opt_key))->get_at(idx); } + FloatOrPercent & opt_float_or_percent_nullable(const t_config_option_key &opt_key, unsigned int idx) { return this->option(opt_key)->get_at(idx); } + const FloatOrPercent & opt_float_or_percent_nullable(const t_config_option_key &opt_key, unsigned int idx) const { return dynamic_cast(this->option(opt_key))->get_at(idx); } int& opt_int(const t_config_option_key &opt_key) { return this->option(opt_key)->value; } int opt_int(const t_config_option_key &opt_key) const { return dynamic_cast(this->option(opt_key))->value; } diff --git a/src/libslic3r/Model.cpp b/src/libslic3r/Model.cpp index 1177a5227d..c689c7ce78 100644 --- a/src/libslic3r/Model.cpp +++ b/src/libslic3r/Model.cpp @@ -3243,9 +3243,9 @@ double Model::findMaxSpeed(const ModelObject* object) { if (objectKey == "outer_wall_speed") externalPerimeterSpeedObj = object->config.get().opt_float_nullable(objectKey, 0); if (objectKey == "small_perimeter_speed") - smallPerimeterSpeedObj = object->config.get().opt_float_nullable(objectKey, 0); + smallPerimeterSpeedObj = object->config.get().opt_float_or_percent_nullable(objectKey, 0).get_abs_value(externalPerimeterSpeedObj); if (objectKey == "small_support_perimeter_speed") - smallSupportPerimeterSpeedObj = object->config.get().opt_float_nullable(objectKey, 0); + smallSupportPerimeterSpeedObj = object->config.get().opt_float_or_percent_nullable(objectKey, 0).get_abs_value(supportSpeedObj); } objMaxSpeed = std::max(perimeterSpeedObj, std::max(externalPerimeterSpeedObj, std::max(infillSpeedObj, std::max(solidInfillSpeedObj, std::max(topSolidInfillSpeedObj, std::max(supportSpeedObj, std::max(smallPerimeterSpeedObj, std::max(smallSupportPerimeterSpeedObj, objMaxSpeed)))))))); if (objMaxSpeed <= 0) objMaxSpeed = 250.; From 78eef79ffea599653c305b2461afa51b174ef72b Mon Sep 17 00:00:00 2001 From: Robert J Audas Date: Thu, 13 Aug 2026 14:50:55 -0600 Subject: [PATCH 60/66] Fix flushing-volume warning for single-filament plates (#14704) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Rodrigo Faselli <162915171+RF47@users.noreply.github.com> --- src/libslic3r/PrintConfig.hpp | 49 ++++++++++++++++++++++++++++++++ src/slic3r/GUI/GLCanvas3D.cpp | 20 ++++--------- tests/libslic3r/test_config.cpp | 50 +++++++++++++++++++++++++++++++++ 3 files changed, 104 insertions(+), 15 deletions(-) diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index b6364c32c2..f51c1c6411 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -2397,6 +2397,55 @@ static void set_flush_volumes_matrix(std::vector &out_matrix, const std::vect } } +template +static bool has_zero_flush_volume_for_used_filaments(const std::vector &fv_matrix, + const std::vector &flush_multipliers, + const std::vector &used_filaments) +{ + if (used_filaments.size() < 2 || flush_multipliers.empty()) + return false; + + if (fv_matrix.size() % flush_multipliers.size() != 0) + return false; + + const size_t matrix_len = fv_matrix.size() / flush_multipliers.size(); + const size_t row_len = size_t(std::sqrt(double(matrix_len))); + if (row_len < 2 || row_len * row_len != matrix_len) + return false; + + std::vector filtered_filaments; + filtered_filaments.reserve(used_filaments.size()); + for (int filament_id : used_filaments) { + if (filament_id <= 0 || filament_id > int(row_len)) + continue; + if (std::find(filtered_filaments.begin(), filtered_filaments.end(), filament_id) == filtered_filaments.end()) + filtered_filaments.push_back(filament_id); + } + if (filtered_filaments.size() < 2) + return false; + + for (T multiplier : flush_multipliers) { + if (multiplier == 0) + return true; + } + + for (size_t nozzle_idx = 0; nozzle_idx < flush_multipliers.size(); nozzle_idx++) { + const size_t block_offset = nozzle_idx * matrix_len; + for (int from_id : filtered_filaments) { + for (int to_id : filtered_filaments) { + if (from_id == to_id) + continue; + + const size_t matrix_idx = block_offset + size_t(from_id - 1) * row_len + size_t(to_id - 1); + if (matrix_idx < fv_matrix.size() && fv_matrix[matrix_idx] == 0) + return true; + } + } + } + + return false; +} + size_t get_extruder_index(const GCodeConfig& config, unsigned int filament_id); } // namespace Slic3r diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 303f9a2b76..d0eb79881b 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -10738,24 +10738,14 @@ bool GLCanvas3D::is_flushing_matrix_error() { if (!Sidebar::should_show_SEMM_buttons()) return false; + std::vector plate_extruders = wxGetApp().plater()->get_partplate_list().get_curr_plate()->get_extruders(true); + if (plate_extruders.size() < 2) + return false; + const auto &project_config = wxGetApp().preset_bundle->project_config; const std::vector &config_matrix = (project_config.option("flush_volumes_matrix"))->values; const std::vector &config_multiplier = (project_config.option("flush_multiplier"))->values; - - for (auto multiplier : config_multiplier) { - if (multiplier == 0) return true; - } - - int matrix_len = config_matrix.size() / config_multiplier.size(); - int row_len = std::sqrt(matrix_len); - for (int i = 0; i < config_matrix.size(); i++) - { - int relative_id = i % matrix_len; - int row_id = relative_id / row_len; - int col_id = relative_id % row_len; - if (row_id != col_id && config_matrix[i] == 0) return true; - } - return false; + return has_zero_flush_volume_for_used_filaments(config_matrix, config_multiplier, plate_extruders); } bool GLCanvas3D::_is_any_volume_outside() const diff --git a/tests/libslic3r/test_config.cpp b/tests/libslic3r/test_config.cpp index 5bc825c3b2..12b161322d 100644 --- a/tests/libslic3r/test_config.cpp +++ b/tests/libslic3r/test_config.cpp @@ -235,6 +235,56 @@ SCENARIO("Config ini load/save interface", "[Config]") { } } +TEST_CASE("Flush-volume warning predicate respects used filament transitions", "[Config][Regression]") +{ + const std::vector multipliers = {1.0}; + + SECTION("Single used filament does not trigger warning with zero transition entries") + { + const std::vector matrix = { + 0.0, 0.0, + 0.0, 0.0 + }; + const std::vector used_filaments = {1}; + + REQUIRE_FALSE(has_zero_flush_volume_for_used_filaments(matrix, multipliers, used_filaments)); + } + + SECTION("Two used filaments trigger warning when transition flush entry is zero") + { + const std::vector matrix = { + 0.0, 0.0, + 0.0, 0.0 + }; + const std::vector used_filaments = {1, 2}; + + REQUIRE(has_zero_flush_volume_for_used_filaments(matrix, multipliers, used_filaments)); + } + + SECTION("Two used filaments do not trigger warning when transitions are non-zero") + { + const std::vector matrix = { + 0.0, 280.0, + 280.0, 0.0 + }; + const std::vector used_filaments = {1, 2}; + + REQUIRE_FALSE(has_zero_flush_volume_for_used_filaments(matrix, multipliers, used_filaments)); + } + + SECTION("Zero multiplier still triggers warning when multiple filaments are used") + { + const std::vector matrix = { + 0.0, 280.0, + 280.0, 0.0 + }; + const std::vector zero_multiplier = {0.0}; + const std::vector used_filaments = {1, 2}; + + REQUIRE(has_zero_flush_volume_for_used_filaments(matrix, zero_multiplier, used_filaments)); + } +} + // TODO: https://github.com/SoftFever/OrcaSlicer/issues/11269 - Is this test still relevant? Delete if not. // It was failing so at least "nozzle_type" and "extruder_printable_area" could not be serialized // and an exception was thrown, but "nozzle_type" has been around for at least 3 months now. From c5aedd1cea4b00b30b67749ad69781a563a07e8b Mon Sep 17 00:00:00 2001 From: TheLegendTubaGuy <95944177+thelegendtubaguy@users.noreply.github.com> Date: Thu, 13 Aug 2026 16:25:52 -0500 Subject: [PATCH 61/66] Enable Snapmaker U1 bed type selector (#15174) --- resources/profiles/Snapmaker.json | 2 +- .../profiles/Snapmaker/machine/Snapmaker U1 (0.2 nozzle).json | 1 - .../profiles/Snapmaker/machine/Snapmaker U1 (0.4 nozzle).json | 1 - .../profiles/Snapmaker/machine/Snapmaker U1 (0.6 nozzle).json | 1 - .../profiles/Snapmaker/machine/Snapmaker U1 (0.8 nozzle).json | 1 - resources/profiles/Snapmaker/machine/fdm_U1.json | 3 ++- 6 files changed, 3 insertions(+), 6 deletions(-) diff --git a/resources/profiles/Snapmaker.json b/resources/profiles/Snapmaker.json index ab2433242e..9a6fab7942 100644 --- a/resources/profiles/Snapmaker.json +++ b/resources/profiles/Snapmaker.json @@ -1,6 +1,6 @@ { "name": "Snapmaker", - "version": "02.04.00.08", + "version": "02.04.00.09", "force_update": "0", "description": "Snapmaker configurations", "machine_model_list": [ diff --git a/resources/profiles/Snapmaker/machine/Snapmaker U1 (0.2 nozzle).json b/resources/profiles/Snapmaker/machine/Snapmaker U1 (0.2 nozzle).json index aebc032855..183e125c73 100644 --- a/resources/profiles/Snapmaker/machine/Snapmaker U1 (0.2 nozzle).json +++ b/resources/profiles/Snapmaker/machine/Snapmaker U1 (0.2 nozzle).json @@ -186,7 +186,6 @@ "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\nTIMELAPSE_TAKE_FRAME\nDEFECT_DETECTION_DETECT", "machine_pause_gcode": "M600", "nozzle_volume": "143", - "support_multi_bed_types": "0", "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]\nSET_PRINT_STATS_INFO TOTAL_LAYER={total_layer_count} CURRENT_LAYER={layer_num+1}", "default_print_profile": "0.10 Standard @Snapmaker U1 (0.2 nozzle)" } diff --git a/resources/profiles/Snapmaker/machine/Snapmaker U1 (0.4 nozzle).json b/resources/profiles/Snapmaker/machine/Snapmaker U1 (0.4 nozzle).json index 28ccfd0a29..6d2ec2cfe6 100644 --- a/resources/profiles/Snapmaker/machine/Snapmaker U1 (0.4 nozzle).json +++ b/resources/profiles/Snapmaker/machine/Snapmaker U1 (0.4 nozzle).json @@ -186,7 +186,6 @@ "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\nTIMELAPSE_TAKE_FRAME\nDEFECT_DETECTION_DETECT", "default_print_profile": "0.20 Standard @Snapmaker U1 (0.4 nozzle)", "machine_pause_gcode": "M600", - "default_bed_type": "Textured PEI Plate", "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]\nSET_PRINT_STATS_INFO TOTAL_LAYER={total_layer_count} CURRENT_LAYER={layer_num+1}", "nozzle_volume": "143", "resonance_avoidance": "1", diff --git a/resources/profiles/Snapmaker/machine/Snapmaker U1 (0.6 nozzle).json b/resources/profiles/Snapmaker/machine/Snapmaker U1 (0.6 nozzle).json index f4dff2f357..a6cb0d0bd3 100644 --- a/resources/profiles/Snapmaker/machine/Snapmaker U1 (0.6 nozzle).json +++ b/resources/profiles/Snapmaker/machine/Snapmaker U1 (0.6 nozzle).json @@ -187,6 +187,5 @@ "machine_pause_gcode": "M600", "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]\nSET_PRINT_STATS_INFO TOTAL_LAYER={total_layer_count} CURRENT_LAYER={layer_num+1}", "nozzle_volume": "143", - "support_multi_bed_types": "0", "default_print_profile": "0.30 Standard @Snapmaker U1 (0.6 nozzle)" } diff --git a/resources/profiles/Snapmaker/machine/Snapmaker U1 (0.8 nozzle).json b/resources/profiles/Snapmaker/machine/Snapmaker U1 (0.8 nozzle).json index e356f4264b..ef4da1a516 100644 --- a/resources/profiles/Snapmaker/machine/Snapmaker U1 (0.8 nozzle).json +++ b/resources/profiles/Snapmaker/machine/Snapmaker U1 (0.8 nozzle).json @@ -187,6 +187,5 @@ "machine_pause_gcode": "M600", "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]\nSET_PRINT_STATS_INFO TOTAL_LAYER={total_layer_count} CURRENT_LAYER={layer_num+1}", "nozzle_volume": "143", - "support_multi_bed_types": "0", "default_print_profile": "0.40 Standard @Snapmaker U1 (0.8 nozzle)" } diff --git a/resources/profiles/Snapmaker/machine/fdm_U1.json b/resources/profiles/Snapmaker/machine/fdm_U1.json index 7ee65878e6..717215b507 100644 --- a/resources/profiles/Snapmaker/machine/fdm_U1.json +++ b/resources/profiles/Snapmaker/machine/fdm_U1.json @@ -183,7 +183,8 @@ "scan_first_layer": "0", "nozzle_type": "undefine", "auxiliary_fan": "0", - "default_bed_type": "Textured PEI Plate", + "support_multi_bed_types": "1", + "default_bed_type": "4", "printable_area": [ "0.5x1", "270.5x1", From 0225cadff03e6750cfb505ca00aae37ce67b9a54 Mon Sep 17 00:00:00 2001 From: TheLegendTubaGuy <95944177+thelegendtubaguy@users.noreply.github.com> Date: Thu, 13 Aug 2026 16:57:08 -0500 Subject: [PATCH 62/66] Fix PLA/PETG warning wiki link (#15172) --- src/slic3r/GUI/GLCanvas3D.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index d0eb79881b..a51a10296c 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -10602,9 +10602,8 @@ void GLCanvas3D::_set_warning_notification(EWarning warning, bool state) wxString region = L"en"; if (language.find("zh") == 0) region = L"zh"; - // Use the generic dual-nozzle PLA+PETG guide rather than the H2D-specific page - // so the link is relevant for all dual-extrusion printers, not just Bambu H2D. (#12073) - wxGetApp().open_browser_with_warning_dialog(wxString::Format(L"https://wiki.bambulab.com/%s/filament-acc/filament/pla-and-petg-dual-extrusion", region)); + // Although this link looks like it's only for the H2D, its guidance is generic. + wxGetApp().open_browser_with_warning_dialog(wxString::Format(L"https://wiki.bambulab.com/%s/filament-acc/filament/h2d-pla-and-petg-mutual-support", region)); return false; }); } From d5dbd96dd64b830076c81053ed5fda26d5a1771b Mon Sep 17 00:00:00 2001 From: Manzari <22736528+manzari@users.noreply.github.com> Date: Fri, 14 Aug 2026 02:52:52 +0200 Subject: [PATCH 63/66] Skip filament_colour_type in G-code config block to fix Anycubic Kobra 3 parse crash (#13507) Co-authored-by: manzari Co-authored-by: Claude Opus 4.7 (1M context) Co-authored-by: Rodrigo Faselli <162915171+RF47@users.noreply.github.com> --- src/libslic3r/GCode.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index 8e2e9f713c..18d805936e 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -6726,6 +6726,7 @@ void GCode::append_full_config(const Print &print, std::string &str) "farthest_point_timelapse"sv, "compatible_printers"sv, "compatible_prints"sv, + "filament_colour_type"sv, "print_host"sv, "print_host_webui"sv, "printhost_apikey"sv, From 728cf63c3d0b3a59be0a70cdc158515f251c9181 Mon Sep 17 00:00:00 2001 From: Alexandre Folle de Menezes Date: Sat, 15 Aug 2026 12:54:00 -0300 Subject: [PATCH 64/66] Verify and improve AI pt_BR translations (#15261) --- localization/i18n/pt_BR/OrcaSlicer_pt_BR.po | 220 +++++++------------- 1 file changed, 81 insertions(+), 139 deletions(-) diff --git a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po index 0d777ec32e..595e46b8cf 100644 --- a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po +++ b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po @@ -217,7 +217,6 @@ msgstr "Os filamentos %s são duros e quebradiços, podendo se romper no AMS. E msgid "%s has a risk of nozzle clogging when using 0.4, 0.6, 0.8mm high-flow nozzles. Use with caution." msgstr "%s apresenta risco de entupimento do bico ao utilizar bicos de alto fluxo de 0,4, 0,6 ou 0,8 mm. Use com cautela." -# AI Translated #, c-format, boost-format msgid "%s may fail to load or unload due to the Filament Track Switch. If you wish to continue." msgstr "%s pode falhar ao carregar ou descarregar devido ao Filament Track Switch. Se você deseja continuar." @@ -347,7 +346,6 @@ msgstr "Leitura " msgid "Please wait" msgstr "Por favor, aguarde" -# AI Translated msgid "Reading" msgstr "Lendo" @@ -700,7 +698,6 @@ msgstr "Redefinir posição" msgid "Reset rotation" msgstr "Redefinir rotação" -# AI Translated msgid "World" msgstr "Mundo" @@ -988,7 +985,6 @@ msgstr "Plano de corte com cavidade é inválido" msgid "Connector" msgstr "Conector" -# AI Translated #, boost-format msgid "" "Objects(%1%) have duplicated connectors. Some connectors may be missing in slicing result.\n" @@ -2032,7 +2028,6 @@ msgstr "" "\n" "Se você não usava o Bambu Cloud para sincronizar perfis, esta mudança não afeta você e você pode ignorar esta mensagem com segurança." -# AI Translated msgid "Profile syncing change" msgstr "Alteração de sincronização de perfil" @@ -3429,7 +3424,7 @@ msgid "AMS has not been initialized. Please initialize it before use." msgstr "O AMS não foi inicializado. Por favor, inicialize-o antes de usar." msgid "Changing fan speed during printing may affect print quality, please choose carefully." -msgstr "Mudar a velocidade do ventilador durante a impressão pode afetar a qualidade da impressão. Escolha com cuidado." +msgstr "Mudar a velocidade da ventoinha durante a impressão pode afetar a qualidade da impressão. Escolha com cuidado." msgid "Change Anyway" msgstr "Mudar Mesmo Assim" @@ -3441,7 +3436,7 @@ msgid "Filter" msgstr "Filtrar" msgid "Enabling filtration redirects the right fan to filter gas, which may reduce cooling performance." -msgstr "Ativar a filtragem redireciona o ventilador direito para filtrar o gás, o que pode reduzir o desempenho de resfriamento." +msgstr "Ativar a filtragem redireciona a ventoinha direito para filtrar o gás, o que pode reduzir o desempenho de resfriamento." msgid "Enabling filtration during printing may reduce cooling and affect print quality. Please choose carefully." msgstr "Habilitar a filtragem durante a impressão pode reduzir o resfriamento e afetar a qualidade da impressão. Escolha com cuidado." @@ -3474,7 +3469,7 @@ msgid "Top" msgstr "Topo" msgid "The fan controls the temperature during printing to improve print quality. The system automatically adjusts the fan's switch and speed according to different printing materials." -msgstr "O ventilador controla a temperatura durante a impressão para melhorar a qualidade da impressão. O sistema ajusta automaticamente a ativação e a velocidade do ventilador de acordo com os diferentes materiais de impressão." +msgstr "A ventoinha controla a temperatura durante a impressão para melhorar a qualidade da impressão. O sistema ajusta automaticamente a ativação e a velocidade da ventoinha de acordo com os diferentes materiais de impressão." msgid "Cooling mode is suitable for printing PLA/PETG/TPU materials and filters the chamber air." msgstr "O modo de resfriamento é adequado para impressão com materiais PLA/PETG/TPU e filtra o ar da câmara." @@ -4798,7 +4793,7 @@ msgid "Pause (AMS offline)" msgstr "Pausa (AMS offline)" msgid "Pause (low speed of the heatbreak fan)" -msgstr "Pausa (baixa velocidade do ventilador do heatbreak)" +msgstr "Pausa (baixa velocidade da ventoinha do heatbreak)" msgid "Pause (chamber temperature control problem)" msgstr "Pausa (problema no controle de temperatura da câmara)" @@ -4922,7 +4917,7 @@ msgstr "Para garantir sua segurança, certas tarefas de processamento (como o la #, c-format, boost-format msgid "The chamber temperature is too high, which may cause the filament to soften. Please wait until the chamber temperature drops below %d℃. You may open the front door or enable fans to cool down." -msgstr "A temperatura da câmara está muito alta, o que pode causar o amolecimento do filamento. Aguarde até que a temperatura da câmara caia abaixo de %d℃. Você pode abrir a porta frontal ou ligar os ventiladores para resfriar." +msgstr "A temperatura da câmara está muito alta, o que pode causar o amolecimento do filamento. Aguarde até que a temperatura da câmara caia abaixo de %d℃. Você pode abrir a porta frontal ou ligar as ventoinhas para resfriar." #, c-format, boost-format msgid "AMS temperature is too high, which may cause the filament to soften. Please wait until the AMS temperature drops below %d℃." @@ -5208,7 +5203,7 @@ msgid "Jerk" msgstr "Jerk" msgid "Fan Speed" -msgstr "Velocidade do Ventilador" +msgstr "Velocidade da Ventoinha" msgid "Flow" msgstr "Fluxo" @@ -5314,7 +5309,7 @@ msgid "Flow: " msgstr "Fluxo: " msgid "Fan: " -msgstr "Ventilador: " +msgstr "Ventoinha: " msgid "Temperature: " msgstr "Temperatura: " @@ -5350,7 +5345,7 @@ msgid "Flow rate" msgstr "Taxa de fluxo" msgid "Fan speed" -msgstr "Velocidade do ventilador" +msgstr "Velocidade da ventoinha" msgid "Time" msgstr "Tempo" @@ -5464,7 +5459,7 @@ msgid "Jerk (mm/s)" msgstr "Jerk (mm/s)" msgid "Fan speed (%)" -msgstr "Velocidade do ventilador (%)" +msgstr "Velocidade da ventoinha (%)" msgid "Temperature (℃)" msgstr "Temperatura (℃)" @@ -7368,12 +7363,11 @@ msgstr "Inferior" msgid "Plugin Selection" msgstr "Seleção de plugins" -# AI Translated msgid "" "No plugins capabilities available for this type.\n" "Enable or install some to use." msgstr "" -"Nenhum recurso de plugins disponível para este tipo.\n" +"Nenhuma capacidade de plugin disponível para este tipo.\n" "Ative ou instale algum para usar." msgid "There is stringing-prone filament in the current print job. Enabling nozzle clumping detection now may degrade print quality. Are you sure you want to enable it?" @@ -9758,7 +9752,7 @@ msgid "Unable to automatically match to suitable filament. Please click to manua msgstr "Não foi possível encontrar automaticamente um filamento adequado. Clique para selecionar manualmente." msgid "Install toolhead enhanced cooling fan to prevent filament softening." -msgstr "Instale um ventilador de resfriamento aprimorado no cabeçote de impressão para evitar o amolecimento do filamento." +msgstr "Instale uma ventoinha de resfriamento aprimorado no cabeçote de impressão para evitar o amolecimento do filamento." msgid "Smooth Cool Plate" msgstr "Placa Fria Lisa" @@ -10382,25 +10376,25 @@ msgid "Cooling for specific layer" msgstr "Resfriamento para camada específica" msgid "Part cooling fan" -msgstr "Ventilador de resfriamento de peças" +msgstr "Ventoinha de resfriamento de peças" msgid "Min fan speed threshold" -msgstr "Limiar de velocidade mínima do ventilador" +msgstr "Limiar de velocidade mínima da ventoinha" msgid "The part cooling fan will run at the minimum fan speed when the estimated layer time is longer than the threshold value. When the layer time is shorter than the threshold, the fan speed will be interpolated between the minimum and maximum fan speed according to layer printing time." -msgstr "O ventilador de resfriamento de peças irá girar na velocidade mínima quando o tempo estimado da camada for mais longo do que o valor de limiar. Quando o tempo da camada for mais curto que o limiar, a velocidade do ventilador é interpolada entre a velocidade mínima e máxima de acordo com o tempo de impressão da camada." +msgstr "A ventoinha de resfriamento de peças irá girar na velocidade mínima quando o tempo estimado da camada for mais longo do que o valor de limiar. Quando o tempo da camada for mais curto que o limiar, a velocidade da ventoinha é interpolada entre a velocidade mínima e máxima de acordo com o tempo de impressão da camada." msgid "Max fan speed threshold" -msgstr "Limiar de velocidade máxima do ventilador" +msgstr "Limiar de velocidade máxima da ventoinha" msgid "The part cooling fan will run at maximum speed when the estimated layer time is shorter than the threshold value." -msgstr "O ventilador de resfriamento de peças irá girar na velocidade máxima quando o tempo estimado da camada for mais curto que o limiar." +msgstr "A ventoinha de resfriamento de peças irá girar na velocidade máxima quando o tempo estimado da camada for mais curto que o limiar." msgid "Auxiliary part cooling fan" -msgstr "Ventilador auxiliar de resfriamento de peças" +msgstr "Ventoinha auxiliar de resfriamento de peças" msgid "Exhaust fan" -msgstr "Ventilador de exaustão" +msgstr "Ventoinha de exaustão" msgid "During print" msgstr "Durante a impressão" @@ -10450,10 +10444,10 @@ msgid "G-code flavor is switched" msgstr "Tipo de G-code está trocado" msgid "Cooling Fan" -msgstr "Ventilador de resfriamento" +msgstr "Ventoinha de resfriamento" msgid "Fan speed-up time" -msgstr "Tempo de aceleração do ventilador" +msgstr "Tempo de aceleração da ventoinha" msgid "Extruder Clearance" msgstr "Folga da extrusora" @@ -11770,7 +11764,6 @@ msgstr "Erro de agrupamento: " msgid " can not be placed in the " msgstr " não pode ser colocado na " -# AI Translated msgid "Group error in manual mode. Please check nozzle count or regroup." msgstr "Erro de agrupamento no modo manual. Por favor, verifique o número de bicos ou reagrupe." @@ -12096,7 +12089,6 @@ msgstr "A contração de filamento não será usada porque a contração dos fil msgid "Generating skirt & brim" msgstr "Gerando saia e borda" -# AI Translated msgid "" "Per-object skirts cannot fit between the objects in By object print sequence.\n" "\n" @@ -12277,9 +12269,8 @@ msgstr "API Key" msgid "HTTP digest" msgstr "Digest HTTP" -# AI Translated msgid "Configuration for the plugin capabilities this preset uses, overriding the global Capabilities configuration. Stored as a raw JSON array and edited through the dialog behind the button, never typed in directly." -msgstr "Configuração dos recursos de plugin que esta predefinição usa, substituindo a configuração global de Recursos. Armazenada como um array JSON bruto e editada por meio da caixa de diálogo atrás do botão, nunca digitada diretamente." +msgstr "Configuração das capacidades de plugin que esta predefinição usa, substituindo a configuração global de Capacidades. Armazenada como um array JSON bruto e editada por meio da caixa de diálogo atrás do botão, nunca digitada diretamente." msgid "Avoid crossing walls" msgstr "Evitar atravessar paredes" @@ -12420,26 +12411,26 @@ msgid "Force cooling for overhangs and bridges" msgstr "Resfriamento forçado para saliências e pontes" msgid "Enable this option to allow adjustment of the part cooling fan speed for specifically for overhangs, internal and external bridges. Setting the fan speed specifically for these features can improve overall print quality and reduce warping." -msgstr "Habilite esta opção para permitir o ajuste da velocidade do ventilador de resfriamento de peças especificamente para saliências, pontes internas e externas. Definir a velocidade do ventilador especificamente para esses recursos pode melhorar a qualidade geral da impressão e reduzir a deformação." +msgstr "Habilite esta opção para permitir o ajuste da velocidade da ventoinha de resfriamento de peças especificamente para saliências, pontes internas e externas. Definir a velocidade da ventoinha especificamente para esses recursos pode melhorar a qualidade geral da impressão e reduzir a deformação." msgid "Overhangs and external bridges fan speed" -msgstr "Velocidade do ventilador para saliências e pontes externas" +msgstr "Velocidade da ventoinha para saliências e pontes externas" msgid "" "Use this part cooling fan speed when printing bridges or overhang walls with an overhang threshold that exceeds the value set in the 'Overhangs cooling threshold' parameter above. Increasing the cooling specifically for overhangs and bridges can improve the overall print quality of these features.\n" "\n" "Please note, this fan speed is clamped on the lower end by the minimum fan speed threshold set above. It is also adjusted upwards up to the maximum fan speed threshold when the minimum layer time threshold is not met." msgstr "" -"Use esta parte da velocidade do ventilador de resfriamento ao imprimir pontes ou paredes salientes com um limite de saliência que exceda o valor definido no parâmetro 'Limiar de resfriamento de saliências' acima. Aumentar o resfriamento especificamente para saliências e pontes pode melhorar a qualidade geral de impressão desses recursos.\n" +"Use esta parte da velocidade da ventoinha de resfriamento ao imprimir pontes ou paredes salientes com um limite de saliência que exceda o valor definido no parâmetro 'Limiar de resfriamento de saliências' acima. Aumentar o resfriamento especificamente para saliências e pontes pode melhorar a qualidade geral de impressão desses recursos.\n" "\n" -"Observe que esta velocidade do ventilador é fixada na extremidade inferior pelo limiar mínimo de velocidade do ventilador definido acima. Ela também é ajustada para cima até o limiar máximo de velocidade do ventilador quando o limiar mínimo de tempo da camada não é atingido." +"Observe que esta velocidade da ventoinha é fixada na extremidade inferior pelo limiar mínimo de velocidade da ventoinha definido acima. Ela também é ajustada para cima até o limiar máximo de velocidade da ventoinha quando o limiar mínimo de tempo da camada não é atingido." msgid "Overhang cooling activation threshold" msgstr "Limiar de ativação de resfriamento de saliência" #, no-c-format, no-boost-format msgid "When the overhang exceeds this specified threshold, force the cooling fan to run at the 'Overhang Fan Speed' set below. This threshold is expressed as a percentage, indicating the portion of each line's width that is unsupported by the layer beneath it. Setting this value to 0% forces the cooling fan to run for all outer walls, regardless of the overhang degree." -msgstr "Quando a saliência excede esse limiar especificado, força o ventilador de resfriamento a funcionar na 'Velocidade da ventoinha de saliência' definida abaixo. Esse limiar é expresso como uma porcentagem, indicando a parte da largura de cada linha que não é suportada pela camada abaixo dela. Definir esse valor como 0% força o ventilador de resfriamento a funcionar para todas as paredes externas, independentemente do grau de saliência." +msgstr "Quando a saliência excede esse limiar especificado, força a ventoinha de resfriamento a funcionar na 'Velocidade da ventoinha de saliência' definida abaixo. Esse limiar é expresso como uma porcentagem, indicando a parte da largura de cada linha que não é suportada pela camada abaixo dela. Definir esse valor como 0% força a ventoinha de resfriamento a funcionar para todas as paredes externas, independentemente do grau de saliência." msgid "External bridge infill direction" msgstr "Direção de preenchimento de ponte externa" @@ -13026,11 +13017,9 @@ msgstr "" msgid "As object list" msgstr "Como lista de objetos" -# AI Translated msgid "Best of all (shortest path)" msgstr "Melhor de todas (caminho mais curto)" -# AI Translated msgid "Snake" msgstr "Serpentina" @@ -13038,7 +13027,7 @@ msgid "Slow printing down for better layer cooling" msgstr "Diminuir a velocidade de impressão para melhor resfriamento de camada" msgid "Enable this option to slow printing speed down to ensure that the final layer time is not shorter than the layer time threshold in \"Max fan speed threshold\", so that the layer can be cooled for a longer time. This can improve the quality for small details." -msgstr "Ative esta opção para diminuir a velocidade de impressão para que o tempo da camada final não seja menor do que o limiar de tempo da camada em \"Limiar de velocidade máxima do ventilador\", para que a camada possa ser resfriada um tempo mais longo. Isso pode melhorar a qualidade para detalhes pequenos." +msgstr "Ative esta opção para diminuir a velocidade de impressão para que o tempo da camada final não seja menor do que o limiar de tempo da camada em \"Limiar de velocidade máxima da ventoinha\", para que a camada possa ser resfriada um tempo mais longo. Isso pode melhorar a qualidade para detalhes pequenos." msgid "Normal printing" msgstr "Impressão normal" @@ -13093,16 +13082,16 @@ msgid "Enable this to override the fan speed set in custom G-code after print co msgstr "Habilite para substituir a velocidade da ventoinha definida no G-code personalizado após a conclusão da impressão." msgid "Speed of exhaust fan during printing. This speed will override the speed in filament custom G-code." -msgstr "Velocidade do ventilador de exaustão durante a impressão. Esta velocidade substituirá a velocidade no G-code personalizado do filamento." +msgstr "Velocidade da ventoinha de exaustão durante a impressão. Esta velocidade substituirá a velocidade no G-code personalizado do filamento." msgid "Speed of exhaust fan after printing completes." -msgstr "Velocidade do ventilador de exaustão após a conclusão da impressão." +msgstr "Velocidade da ventoinha de exaustão após a conclusão da impressão." msgid "No cooling for the first" msgstr "Sem resfriamento para as primeiras" msgid "Turn off all cooling fans for the first few layers. This can be used to improve build plate adhesion." -msgstr "Desligar todos os ventiladores de resfriamento para as primeiras camadas. Isso pode ser usado para obter uma melhor adesão à placa de impressão." +msgstr "Desligar todos as ventoinhas de resfriamento para as primeiras camadas. Isso pode ser usado para obter uma melhor adesão à placa de impressão." msgid "Don't support bridges" msgstr "Não suportar pontes" @@ -13278,11 +13267,9 @@ msgstr "Densidade da superfície superior" msgid "Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. Reducing this value results in a textured top surface, according to the chosen top surface pattern. A value of 0% will result in only the walls on the top layer being created. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion." msgstr "Densidade da camada superior. Um valor de 100% cria uma camada superior totalmente sólida e lisa. Reduzir esse valor resulta em uma superfície superior texturizada, de acordo com o padrão de superfície superior escolhido. Um valor de 0% resultará na criação apenas das paredes da camada superior. Destinado a fins estéticos ou funcionais, não para corrigir problemas como extrusão excessiva." -# AI Translated msgid "Top surface expansion" msgstr "Expansão da superfície superior" -# AI Translated msgid "" "Expands the top surfaces by this distance to connect distinct top surfaces and fill gaps.\n" "Useful for cases where the top surface is interrupted by a raised feature, such as text on a plane. Expanding it removes the holes beneath these features and creates a continuous path with a better finish for printing on top. The expansion is applied to the original top surface, before any other processing such as bridging or overhang detection." @@ -13290,11 +13277,9 @@ msgstr "" "Expande as superfícies superiores por esta distância para conectar superfícies superiores distintas e preencher lacunas.\n" "Útil para casos em que a superfície superior é interrompida por um recurso elevado, como um texto sobre um plano. Expandi-la remove os buracos sob esses recursos e cria um caminho contínuo com melhor acabamento para imprimir por cima. A expansão é aplicada à superfície superior original, antes de qualquer outro processamento, como detecção de ponte ou de saliência." -# AI Translated msgid "Top expansion wall margin" msgstr "Margem de parede da expansão superior" -# AI Translated msgid "" "Using “Top surface expansion” may cause a surface that did not previously touch the model's outer walls to now do so.\n" "This can cause contraction marks (such as the hull line) on the outer walls.\n" @@ -13304,11 +13289,9 @@ msgstr "" "Isso pode causar marcas de contração (como a linha do casco) nas paredes externas.\n" "Ao adicionar uma pequena margem, essa contração não ocorrerá diretamente nas paredes, evitando assim uma marca visível." -# AI Translated msgid "Top expansion direction" msgstr "Direção da expansão superior" -# AI Translated msgid "" "Direction in which the top surface expansion grows.\n" " - Inward grows into the holes and gaps left by features rising from the middle of a top surface.\n" @@ -13335,11 +13318,9 @@ msgstr "Padrão de superfície inferior" msgid "This is the line pattern of bottom surface infill, not including bridge infill." msgstr "Este é o padrão de linha do preenchimento da superfície inferior, não incluindo o preenchimento de ponte." -# AI Translated msgid "Bottom surface density" msgstr "Densidade da superfície inferior" -# AI Translated msgid "" "Density of the bottom surface layer. Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion.\n" "WARNING: Lowering this value may negatively affect bed adhesion." @@ -13347,31 +13328,27 @@ msgstr "" "Densidade da camada da superfície inferior. Destinada a fins estéticos ou funcionais, não a corrigir problemas como sobre-extrusão.\n" "AVISO: reduzir este valor pode afetar negativamente a aderência à mesa." -# AI Translated msgid "Top surface fill order" msgstr "Ordem de preenchimento da superfície superior" -# AI Translated msgid "" "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" "Default uses shortest-path ordering, which may run in either direction." msgstr "" -"Direção em que as superfícies superiores são preenchidas ao usar um padrão baseado no centro (Concêntrico, Cordas de Arquimedes, Espiral Octograma).\n" +"Direção em que as superfícies superiores são preenchidas ao usar um padrão baseado no centro (Concêntrico, Cordas de Arquimedes, Espiral de Octograma).\n" "Para fora começa no centro da superfície, de modo que qualquer excesso de material seja empurrado em direção à borda, onde é menos visível. Para dentro começa na borda e termina com as curvas fechadas no centro.\n" "O padrão usa a ordenação de caminho mais curto, que pode seguir em qualquer direção." -# AI Translated msgid "Bottom surface fill order" msgstr "Ordem de preenchimento da superfície inferior" -# AI Translated msgid "" "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" "Default uses shortest-path ordering, which may run in either direction." msgstr "" -"Direção em que as superfícies inferiores são preenchidas ao usar um padrão baseado no centro (Concêntrico, Cordas de Arquimedes, Espiral Octograma).\n" +"Direção em que as superfícies inferiores são preenchidas ao usar um padrão baseado no centro (Concêntrico, Cordas de Arquimedes, Espiral de Octograma).\n" "Para dentro começa cada superfície com as curvas externas mais largas, o que melhora a aderência da primeira camada em mesas onde as curvas fechadas no centro podem não aderir. Para fora começa no centro, empurrando qualquer excesso de material em direção à borda.\n" "O padrão usa a ordenação de caminho mais curto, que pode seguir em qualquer direção." @@ -13399,19 +13376,15 @@ msgstr "Limiar de pequenos perímetros" msgid "This sets the threshold for small perimeter length. Default threshold is 0mm." msgstr "Isso define o limiar para o comprimento do perímetro pequeno. O limiar padrão é 0 mm." -# AI Translated msgid "Small support perimeters" msgstr "Pequenos perímetros de suporte" -# AI Translated msgid "Same as \"Small perimeters\", but for supports. This separate setting will affect the speed of support for areas <= `small_support_perimeter_threshold`. If expressed as a percentage (for example: 80%), it will be calculated on the support or support interface speed setting above. Set to zero for auto." msgstr "Igual a \"Pequenos perímetros\", mas para suportes. Esta configuração separada afetará a velocidade do suporte para áreas <= `small_support_perimeter_threshold`. Se expressa como uma porcentagem (por exemplo: 80%), será calculada com base na configuração de velocidade de suporte ou de interface de suporte acima. Defina como zero para automático." -# AI Translated msgid "Small support perimeters threshold" -msgstr "Limite de pequenos perímetros de suporte" +msgstr "Limiar de pequenos perímetros de suporte" -# AI Translated msgid "This sets the threshold for small support perimeter length. The default threshold is 0mm." msgstr "Isto define o limite para o comprimento de pequenos perímetros de suporte. O limite padrão é 0mm." @@ -13603,7 +13576,6 @@ msgstr "" msgid "Enable adaptive pressure advance within features (beta)" msgstr "Habilitar pressure advance adaptativo nos recursos (beta)" -# AI Translated msgid "" "Enable adaptive PA whenever there are flow changes in a feature, such as line width changes in a corner or overhangs.\n" "\n" @@ -13635,10 +13607,10 @@ msgid "Default line width if other line widths are set to 0. If expressed as a % msgstr "Largura de linha padrão se outras larguras de linha estiverem definidas como 0. Se expresso como %, será calculado sobre o diâmetro do bico." msgid "Keep fan always on" -msgstr "Manter o ventilador sempre ligado" +msgstr "Manter a ventoinha sempre ligado" msgid "Enabling this setting means that part cooling fan will never stop entirely and will instead run at least at minimum speed to reduce the frequency of starting and stopping." -msgstr "Habilitar esta configuração significa que o ventilador de resfriamento da peça nunca será desligado completamente e funcionará pelo menos na velocidade mínima para reduzir a frequência de inícios e paradas." +msgstr "Habilitar esta configuração significa que a ventoinha de resfriamento da peça nunca será desligado completamente e funcionará pelo menos na velocidade mínima para reduzir a frequência de inícios e paradas." msgid "Don't slow down outer walls" msgstr "Não desacelerar as paredes externas" @@ -13658,7 +13630,7 @@ msgid "Layer time" msgstr "Tempo da camada" msgid "The part cooling fan will be enabled for layers where the estimated time is shorter than this value. Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time." -msgstr "O ventilador de resfriamento de peças será ativado para camadas cujo tempo estimado seja mais curto que esse valor. A velocidade do ventilador é interpolada entre as velocidades mínima e máxima do ventilador de acordo com o tempo de impressão da camada." +msgstr "A ventoinha de resfriamento de peças será ativado para camadas cujo tempo estimado seja mais curto que esse valor. A velocidade da ventoinha é interpolada entre as velocidades mínima e máxima da ventoinha de acordo com o tempo de impressão da camada." msgid "s" msgstr "s" @@ -13706,7 +13678,6 @@ msgstr "Temperatura de purga" msgid "Temperature when flushing filament. 0 indicates the upper bound of the recommended nozzle temperature range." msgstr "Temperatura ao purgar filamento. 0 indica o limite superior da faixa de temperatura recomendada para o bico." -# AI Translated msgid "Flush temperature used in fast purge mode." msgstr "Temperatura de purga usada no modo de purga rápida." @@ -13972,11 +13943,9 @@ msgstr "Filamento imprimível" msgid "The filament is printable in extruder." msgstr "O filamento é imprimível na extrusora." -# AI Translated msgid "Filament-extruder compatibility" msgstr "Compatibilidade filamento-extrusora" -# AI Translated msgid "A single 32-bit int encoding the compatibility level of a filament across all extruders (up to 10). Every 3 bits represent one extruder (bits [3*i, 3*i+2] for extruder i). 0: printable, 1: error, 2: critical warning, 3: warning, 4-7: reserved." msgstr "Um único inteiro de 32 bits que codifica o nível de compatibilidade de um filamento em todas as extrusoras (até 10). Cada 3 bits representam uma extrusora (bits [3*i, 3*i+2] para a extrusora i). 0: imprimível, 1: erro, 2: aviso crítico, 3: aviso, 4-7: reservado." @@ -14016,11 +13985,9 @@ msgstr "Direção do preenchimento sólido" msgid "Angle for solid infill pattern, which controls the start or main direction of line." msgstr "Ângulo para padrão de preenchimento sólido, que controla a direção inicial ou principal da linha." -# AI Translated msgid "Top layer direction" msgstr "Direção da camada superior" -# AI Translated msgid "" "Fixed angle for the top solid infill and ironing lines.\n" "Set to -1 to follow the default solid infill direction." @@ -14028,11 +13995,9 @@ msgstr "" "Ângulo fixo para o preenchimento sólido superior e as linhas de alisamento.\n" "Defina como -1 para seguir a direção padrão do preenchimento sólido." -# AI Translated msgid "Bottom layer direction" msgstr "Direção da camada inferior" -# AI Translated msgid "" "Fixed angle for the bottom solid infill lines.\n" "Set to -1 to follow the default solid infill direction." @@ -14047,11 +14012,9 @@ msgstr "Densidade do preenchimento esparso" msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used." msgstr "Densidade do preenchimento esparso interno, 100% transforma todo o preenchimento esparso em preenchimento sólido e será usado o padrão de preenchimento sólido interno." -# AI Translated msgid "Align directions to model" msgstr "Alinhar direções ao modelo" -# AI Translated msgid "" "Aligns infill, bridge, ironing, and top/bottom surface directions to follow the model's orientation on the build plate.\n" "When enabled, these directions rotate together with the model so the printed features keep their intended orientation relative to the part, preserving optimal strength and surface characteristics regardless of how the model is placed." @@ -14071,11 +14034,9 @@ msgstr "Multilinhas de Preenchimento" msgid "Using multiple lines for the infill pattern, if supported by infill pattern." msgstr "Usar múltiplas linhas para o padrão de preenchimento, se suportado pelo padrão de preenchimento." -# AI Translated msgid "Z-buckling bias optimization (experimental)" msgstr "Otimização de tendência à flambagem em Z (experimental)" -# AI Translated #, no-c-format, no-boost-format msgid "Tightens the gyroid wave along the Z (vertical) axis at low infill density to shorten the effective vertical column length and improve Z-axis compression buckling resistance. Filament use is preserved. No effect at ~30% sparse infill density and above. Only applies when Sparse infill pattern is set to Gyroid." msgstr "Aperta a onda giroide ao longo do eixo Z (vertical) em baixa densidade de preenchimento para encurtar o comprimento efetivo da coluna vertical e melhorar a resistência à flambagem por compressão no eixo Z. O uso de filamento é preservado. Sem efeito em densidade de preenchimento esparso de ~30% ou mais. Aplica-se apenas quando o padrão de Preenchimento esparso está definido como Giroide." @@ -14198,13 +14159,12 @@ msgstr "Jerk para primeira camada." msgid "Jerk for travel." msgstr "Jerk para deslocamento." -# AI Translated msgid "" "Travel jerk of first layer.\n" "The percentage value is relative to Travel Jerk." msgstr "" "Jerk de deslocamento da primeira camada.\n" -"O valor percentual é relativo ao Jerk de deslocamento." +"O valor percentual é relativo ao Jerk de Deslocamento." msgid "Line width of the first layer. If expressed as a %, it will be computed over the nozzle diameter." msgstr "Largura da linha da primeira camada. Se expresso como uma %, será calculado sobre o diâmetro do bico." @@ -14243,10 +14203,10 @@ msgid "Nozzle temperature for printing the first layer with this filament" msgstr "Temperatura do bico para imprimir a primeira camada com este filamento" msgid "Full fan speed at layer" -msgstr "Velocidade total do ventilador na camada" +msgstr "Velocidade total da ventoinha na camada" msgid "Fan speed will be ramped up linearly from zero at layer \"close_fan_the_first_x_layers\" to maximum at layer \"full_fan_speed_layer\". \"full_fan_speed_layer\" will be ignored if lower than \"close_fan_the_first_x_layers\", in which case the fan will be running at maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." -msgstr "A velocidade do ventilador aumentará linearmente de zero na camada \"close_fan_the_first_x_layers\" para o máximo na camada \"full_fan_speed_layer\". \"full_fan_speed_layer\" será ignorado se for menor que \"close_fan_the_first_x_layers\", caso em que o ventilador funcionará na velocidade máxima permitida na camada \"close_fan_the_first_x_layers\" + 1." +msgstr "A velocidade da ventoinha aumentará linearmente de zero na camada \"close_fan_the_first_x_layers\" para o máximo na camada \"full_fan_speed_layer\". \"full_fan_speed_layer\" será ignorado se for menor que \"close_fan_the_first_x_layers\", caso em que a ventoinha funcionará na velocidade máxima permitida na camada \"close_fan_the_first_x_layers\" + 1." msgid "layer" msgstr "camada" @@ -14254,7 +14214,6 @@ msgstr "camada" msgid "First layer fan speed" msgstr "Velocidade da ventoinha na primeira camada" -# AI Translated msgid "" "Sets an exact fan speed for the first layer, overriding all other cooling settings. Useful for protecting 3D-printed toolhead parts (e.g. Voron-style ABS/ASA ducts) from a hot bed. A small amount of airflow cools the ducts down, without using full cooling that may in certain conditions hurt first-layer adhesion.\n" "From the second layer onwards, normal cooling resumes.\n" @@ -14262,44 +14221,44 @@ msgid "" "Only available when \"No cooling for the first\" is 0.\n" "Set to -1 to disable it." msgstr "" -"Define uma velocidade exata do ventilador para a primeira camada, substituindo todas as outras configurações de resfriamento. Útil para proteger peças impressas em 3D da cabeça da ferramenta (por exemplo, dutos ABS/ASA no estilo Voron) de uma mesa quente. Uma pequena quantidade de fluxo de ar resfria os dutos, sem usar o resfriamento total que pode, em certas condições, prejudicar a aderência da primeira camada.\n" +"Define uma velocidade exata da ventoinha para a primeira camada, substituindo todas as outras configurações de resfriamento. Útil para proteger peças impressas em 3D da cabeça da ferramenta (por exemplo, dutos ABS/ASA no estilo Voron) de uma mesa aquecida. Uma pequena quantidade de fluxo de ar resfria os dutos, sem usar o resfriamento total que pode, em certas condições, prejudicar a aderência da primeira camada.\n" "A partir da segunda camada, o resfriamento normal é retomado.\n" -"Se \"Velocidade total do ventilador na camada\" também estiver definida, o ventilador aumenta suavemente deste valor na primeira camada até o seu alvo na camada escolhida.\n" +"Se \"Velocidade total da ventoinha na camada\" também estiver definida, a ventoinha aumenta suavemente deste valor na primeira camada até o seu alvo na camada escolhida.\n" "Disponível apenas quando \"Sem resfriamento nas primeiras\" é 0.\n" "Defina como -1 para desativá-la." msgid "Support interface fan speed" -msgstr "Velocidade do ventilador para interface de suporte" +msgstr "Velocidade da ventoinha para interface de suporte" msgid "" "This part cooling fan speed is applied when printing support interfaces. Setting this parameter to a higher than regular speed reduces the layer binding strength between supports and the supported part, making them easier to separate.\n" "Set to -1 to disable it.\n" "This setting is overridden by disable_fan_first_layers." msgstr "" -"Esta velocidade do ventilador de resfriamento de peças é aplicada ao imprimir interfaces de suporte. Definir este parâmetro para uma velocidade maior que a normal reduz a força de adesão de camada entre os suportes e a peça suportada, tornando-os mais fáceis de separar.\n" +"Esta velocidade da ventoinha de resfriamento de peças é aplicada ao imprimir interfaces de suporte. Definir este parâmetro para uma velocidade maior que a normal reduz a força de adesão de camada entre os suportes e a peça suportada, tornando-os mais fáceis de separar.\n" "Defina como -1 para desabilitá-lo.\n" "Esta configuração é substituída por disable_fan_first_layers." msgid "Internal bridges fan speed" -msgstr "Velocidade do ventilador para pontes internas" +msgstr "Velocidade da ventoinha para pontes internas" msgid "" "The part cooling fan speed used for all internal bridges. Set to -1 to use the overhang fan speed settings instead.\n" "\n" "Reducing the internal bridges fan speed, compared to your regular fan speed, can help reduce part warping due to excessive cooling applied over a large surface for a prolonged period of time." msgstr "" -"A velocidade do ventilador de resfriamento de peças usada para todas as pontes internas. Defina como -1 para usar as configurações de velocidade do ventilador de sobreposição.\n" +"A velocidade da ventoinha de resfriamento de peças usada para todas as pontes internas. Defina como -1 para usar as configurações de velocidade da ventoinha de sobreposição.\n" "\n" -"Reduzir a velocidade do ventilador das pontes internas, em comparação com a velocidade normal do ventilador, pode ajudar a reduzir a deformação das peças devido ao resfriamento excessivo aplicado sobre uma grande superfície por um período prolongado de tempo." +"Reduzir a velocidade da ventoinha das pontes internas, em comparação com a velocidade normal da ventoinha, pode ajudar a reduzir a deformação das peças devido ao resfriamento excessivo aplicado sobre uma grande superfície por um período prolongado de tempo." msgid "Ironing fan speed" -msgstr "Velocidade do ventilador para alisamento" +msgstr "Velocidade da ventoinha para alisamento" msgid "" "This part cooling fan speed is applied when ironing. Setting this parameter to a lower than regular speed reduces possible nozzle clogging due to the low volumetric flow rate, making the interface smoother.\n" "Set to -1 to disable it." msgstr "" -"Esta velocidade do ventilador de resfriamento de peças é aplicada durante o alisamento. Definir este parâmetro para uma velocidade menor que a normal reduz a possibilidade de entupimento do bico devido ao baixa taxa de fluxo volumétrico, tornando a interface mais suave.\n" +"Esta velocidade da ventoinha de resfriamento de peças é aplicada durante o alisamento. Definir este parâmetro para uma velocidade menor que a normal reduz a possibilidade de entupimento do bico devido ao baixa taxa de fluxo volumétrico, tornando a interface mais suave.\n" "Defina como -1 para desabilitá-lo." msgid "Ironing flow" @@ -14584,7 +14543,7 @@ msgid "Best auto arranging position in range [0,1] w.r.t. bed shape." msgstr "Melhor posição de arranjo automático na faixa [0,1] em relação ao formato da mesa." msgid "Enable this option if machine has auxiliary part cooling fan. G-code command: M106 P2 S(0-255)." -msgstr "Habilitar esta opção se a máquina tiver ventilador auxiliar de resfriamento de peças. Comando G-code: M106 P2 S(0-255)." +msgstr "Habilitar esta opção se a máquina tiver ventoinha auxiliar de resfriamento de peças. Comando G-code: M106 P2 S(0-255)." msgid "Fan direction" msgstr "Direção da ventoinha" @@ -14592,7 +14551,6 @@ msgstr "Direção da ventoinha" msgid "Cooling fan direction of the printer" msgstr "Direção da ventoinha de resfriamento da impressora" -# AI Translated msgid "Both" msgstr "Ambos" @@ -14602,9 +14560,9 @@ msgid "" "It won't move fan commands into the start G-code if the 'only custom start G-code' is activated.\n" "Use 0 to deactivate." msgstr "" -"Ativar o ventilador este número de segundos antes do seu tempo de início alvo (você pode usar frações de segundos). Ele assume aceleração infinita para esta estimativa de tempo e levará em conta apenas os movimentos G1 e G0 (o ajuste de arco não é suportado).\n" -"Não moverá G-code de comandos do ventilador personalizados (eles funcionam como uma espécie de 'barreira').\n" -"Não moverá comandos do ventilador para o início do G-code se 'apenas G-code de início personalizado' estiver ativo.\n" +"Ativar a ventoinha este número de segundos antes do seu tempo de início alvo (você pode usar frações de segundos). Ele assume aceleração infinita para esta estimativa de tempo e levará em conta apenas os movimentos G1 e G0 (o ajuste de arco não é suportado).\n" +"Não moverá G-code de comandos da ventoinha personalizados (eles funcionam como uma espécie de 'barreira').\n" +"Não moverá comandos da ventoinha para o início do G-code se 'apenas G-code de início personalizado' estiver ativo.\n" "Use 0 para desativar." msgid "Only overhangs" @@ -14614,15 +14572,15 @@ msgid "Will only take into account the delay for the cooling of overhangs." msgstr "Levará em conta apenas o atraso para o resfriamento das saliências." msgid "Fan kick-start time" -msgstr "Tempo de inicialização do ventilador" +msgstr "Tempo de inicialização da ventoinha" msgid "" "Emit a max fan speed command for this amount of seconds before reducing to target speed to kick-start the cooling fan.\n" "This is useful for fans where a low PWM/power may be insufficient to get the fan started spinning from a stop, or to get the fan up to speed faster.\n" "Set to 0 to deactivate." msgstr "" -"Emita um comando de velocidade máxima do ventilador por esta quantidade de segundos antes de reduzir para a velocidade alvo para iniciar o ventilador de resfriamento.\n" -"Isto é útil para ventiladores onde um baixo PWM/potência pode ser insuficiente para fazer o ventilador começar a girar a partir de uma parada, ou para fazer o ventilador alcançar a velocidade mais rapidamente.\n" +"Emita um comando de velocidade máxima da ventoinha por esta quantidade de segundos antes de reduzir para a velocidade alvo para iniciar a ventoinha de resfriamento.\n" +"Isto é útil para ventoinhas onde um baixo PWM/potência pode ser insuficiente para fazer a ventoinha começar a girar a partir de uma parada, ou para fazer a ventoinha alcançar a velocidade mais rapidamente.\n" "Defina como 0 para desativar." msgid "Minimum non-zero part cooling fan speed" @@ -14830,19 +14788,15 @@ msgstr "Ângulo de saliência do preenchimento" msgid "The angle of the infill angled lines. 60° will result in a pure honeycomb." msgstr "O ângulo das linhas de preenchimento. 60° resultará em um favo de mel puro." -# AI Translated msgid "Lightning overhang angle" -msgstr "Ângulo de saliência Relâmpago" +msgstr "Ângulo de saliência de Relâmpago" -# AI Translated msgid "Maximum overhang angle for Lightning infill support propagation." msgstr "Ângulo máximo de saliência para a propagação de suporte do preenchimento Relâmpago." -# AI Translated msgid "Prune angle" msgstr "Ângulo de poda" -# AI Translated msgid "" "Controls how aggressively short or unsupported Lightning branches are pruned.\n" "This angle is converted internally to a per-layer distance." @@ -14850,11 +14804,9 @@ msgstr "" "Controla a agressividade com que os ramos Relâmpago curtos ou sem suporte são podados.\n" "Este ângulo é convertido internamente em uma distância por camada." -# AI Translated msgid "Straightening angle" msgstr "Ângulo de retificação" -# AI Translated msgid "Maximum straightening angle used to simplify Lightning branches." msgstr "Ângulo máximo de retificação usado para simplificar os ramos Relâmpago." @@ -15205,7 +15157,7 @@ msgstr "Força máxima do eixo Y" msgid "The allowed maximum output force of Y axis" msgstr "A força máxima de saída permitida do eixo Y" -# AI Translated +#, fuzzy msgid "N" msgstr "N" @@ -15215,6 +15167,7 @@ msgstr "Massa da mesa do eixo Y" msgid "The machine bed mass load of Y axis" msgstr "A carga de massa da mesa do equipamento no eixo Y" +#, fuzzy msgid "g" msgstr "G" @@ -15369,7 +15322,7 @@ msgstr "" "Para desativar o modelador de entrada, use o tipo Desativar." msgid "The part cooling fan speed may be increased when auto cooling is enabled. This is the maximum speed for the part cooling fan." -msgstr "A velocidade do ventilador de resfriamento de peças pode ser aumentada quando o resfriamento automático está habilitado. Este é o limite máximo de velocidade do ventilador de resfriamento de peças." +msgstr "A velocidade da ventoinha de resfriamento de peças pode ser aumentada quando o resfriamento automático está habilitado. Este é o limite máximo de velocidade da ventoinha de resfriamento de peças." msgid "The highest printable layer height for the extruder. Used to limit the maximum layer height when enable adaptive layer height." msgstr "A maior altura de camada imprimível para a extrusora. Usada para limitar a altura máxima da camada quando a altura da camada adaptativa está ativada." @@ -15432,31 +15385,31 @@ msgid "Applies extrusion rate smoothing only on external perimeters and overhang msgstr "Aplica suavização de taxa de extrusão somente em perímetros externos e saliências. Isso pode ajudar a reduzir artefatos devido a transições de velocidade bruscas em saliências visíveis externamente sem impactar a velocidade de impressão de recursos que não serão visíveis ao usuário." msgid "Minimum speed for part cooling fan." -msgstr "Velocidade mínima para o ventilador de resfriamento de peças." +msgstr "Velocidade mínima para a ventoinha de resfriamento de peças." msgid "" "Speed of auxiliary part cooling fan. Auxiliary fan will run at this speed during printing except the first several layers which is defined by no cooling layers.\n" "Please enable auxiliary_fan in printer settings to use this feature. G-code command: M106 P2 S(0-255)" msgstr "" -"Velocidade do ventilador auxiliar de resfriamento de peças. O ventilador auxiliar funcionará nesta velocidade durante a impressão, exceto nas primeiras camadas, que são definidas por camadas sem resfriamento.\n" +"Velocidade da ventoinha auxiliar de resfriamento de peças. A ventoinha auxiliar funcionará nesta velocidade durante a impressão, exceto nas primeiras camadas, que são definidas por camadas sem resfriamento.\n" "\n" -"Por favor, habilite o ventilador auxiliar nas configurações da impressora para usar esta função. Comando G-code: M106 P2 S(0-255)" +"Por favor, habilite a ventoinha auxiliar nas configurações da impressora para usar esta função. Comando G-code: M106 P2 S(0-255)" msgid "For the first" msgstr "Para as primeiras" msgid "Set special auxiliary cooling fan for the first certain layers." -msgstr "Definir um ventilador auxiliar de resfriamento específico para as primeiras camadas." +msgstr "Definir uma ventoinha auxiliar de resfriamento específico para as primeiras camadas." msgid "" "Auxiliary fan speed will be ramped up linearly from layer \"For the first\" to maximum at layer \"Full fan speed at layer\".\n" "\"Full fan speed at layer\" will be ignored if lower than \"For the first\", in which case the fan will run at maximum allowed speed at layer \"For the first\" + 1." msgstr "" -"A velocidade do ventilador auxiliar aumentará linearmente da camada \"Para as primeiras\" até o máximo na camada \"Velocidade total do ventilador na camada\".\n" -"A \"Velocidade total do ventilador na camada\" será ignorada se for menor que \"Para as primeiras\", caso em que o ventilador funcionará na velocidade máxima permitida na camada \"Para as primeiras\" + 1." +"A velocidade da ventoinha auxiliar aumentará linearmente da camada \"Para as primeiras\" até o máximo na camada \"Velocidade total da ventoinha na camada\".\n" +"A \"Velocidade total da ventoinha na camada\" será ignorada se for menor que \"Para as primeiras\", caso em que a ventoinha funcionará na velocidade máxima permitida na camada \"Para as primeiras\" + 1." msgid "Special auxiliary cooling fan speed, effective only for the first x layers." -msgstr "Velocidade especial do ventilador de resfriamento auxiliar, efetiva apenas para as primeiras x camadas." +msgstr "Velocidade especial da ventoinha de resfriamento auxiliar, efetiva apenas para as primeiras x camadas." msgid "The lowest printable layer height for the extruder. Used to limit the minimum layer height when enable adaptive layer height." msgstr "A menor altura de camada imprimível para a extrusora. Usada para limitar a altura mínima da camada ao habilitar a altura de camada adaptativa." @@ -15621,11 +15574,9 @@ msgstr "Este G-code é inserido quando a função de extrusão é trocada. Ele msgid "Plugins Used" msgstr "Plugins Utilizados" -# AI Translated msgid "Plugin capabilities referenced by this preset, stored as name;uuid;capability." -msgstr "Recursos de plugin referenciados por esta predefinição, armazenados como name;uuid;capability." +msgstr "Capacidades de plugin referenciados por esta predefinição, armazenados como name;uuid;capability." -# AI Translated msgid "Python plugin(s) invoked at each slicing pipeline step to read and modify intermediate slicing data, including a final G-code post-processing step. Research/experimental." msgstr "Plugin(s) Python invocado(s) em cada etapa do pipeline de fatiamento para ler e modificar dados intermediários de fatiamento, incluindo uma etapa final de pós-processamento do G-code. Pesquisa/experimental." @@ -16243,11 +16194,9 @@ msgstr "Preparar todas as extrusoras de impressão" msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print." msgstr "Se ativado, todos as extrusoras de impressão serão preparados na borda frontal da mesa de impressão no início da impressão." -# AI Translated msgid "Toolchange ordering" msgstr "Ordenação de troca de ferramenta" -# AI Translated msgid "" "Determines the order of tool changes on each layer.\n" "- Default: Starts with the last used extruder to minimize tool changes.\n" @@ -16257,7 +16206,6 @@ msgstr "" "- Padrão: começa com a última extrusora usada para minimizar as trocas de ferramenta.\n" "- Cíclico: usa uma sequência fixa de ferramentas em cada camada. Isso sacrifica a velocidade em prol de uma melhor qualidade de superfície, pois as trocas de ferramenta extras dão mais tempo para as camadas resfriarem." -# AI Translated msgid "Cyclic" msgstr "Cíclico" @@ -16638,7 +16586,6 @@ msgstr "" "\n" "Se habilitado, este parâmetro também define uma variável G-code chamada chamber_temperature, que pode ser usada para passar a temperatura desejada da câmara para sua macro de início de impressão ou uma macro de absorção de calor como esta: PRINT_START (outras variáveis) CHAMBER_TEMP=[chamber_temperature]. Isso pode ser útil se sua impressora não suportar comandos M141/M191 ou se você desejar lidar com a absorção de calor na macro de início de impressão se nenhum aquecedor de câmara ativo estiver instalado." -# AI Translated msgid "" "This is the chamber temperature at which printing should start, while the chamber continues heating toward the \"Target\" chamber temperature. For example, set the Target to 60 and the Minimal to 50 to begin printing once the chamber reaches 50℃, without waiting for the full 60℃.\n" "\n" @@ -16646,11 +16593,11 @@ msgid "" "\n" "Unlike the \"Target\" chamber temperature, this option does not emit any M141/M191 commands; it only exposes the value to your custom G-code. It should not exceed the \"Target\" chamber temperature." msgstr "" -"Esta é a temperatura da câmara na qual a impressão deve começar, enquanto a câmara continua aquecendo em direção à temperatura da câmara \"Alvo\". Por exemplo, defina o Alvo como 60 e o Mínimo como 50 para começar a imprimir assim que a câmara atingir 50℃, sem esperar pelos 60℃ completos.\n" +"Esta é a temperatura da câmara na qual a impressão deve começar, enquanto a câmara continua aquecendo em direção à temperatura \"Alvo\" da câmara. Por exemplo, defina o Alvo como 60 e o Mínimo como 50 para começar a imprimir assim que a câmara atingir 50℃, sem esperar pelos 60℃ completos.\n" "\n" "Isso define uma variável de G-code chamada chamber_minimal_temperature, que pode ser passada para a sua macro de início de impressão ou uma macro de aquecimento prolongado, assim: PRINT_START (outras variáveis) CHAMBER_MIN_TEMP=[chamber_minimal_temperature].\n" "\n" -"Ao contrário da temperatura da câmara \"Alvo\", esta opção não emite nenhum comando M141/M191; ela apenas expõe o valor ao seu G-code personalizado. Não deve exceder a temperatura da câmara \"Alvo\"." +"Ao contrário da temperatura \"Alvo\" da câmara, esta opção não emite nenhum comando M141/M191; ela apenas expõe o valor ao seu G-code personalizado. Não deve exceder a temperatura \"Alvo\" da câmara." msgid "Chamber minimal temperature" msgstr "Temperatura mínima da câmara" @@ -16694,20 +16641,18 @@ msgstr "Espessura da casca do topo" msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin a shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is determined simply by the number of top shell layers." msgstr "O número de camadas sólidas superiores é aumentado ao fatiar se a espessura calculada pelas camadas da casca do topo for menor do que este valor. Isso pode evitar que a casca seja muito fina quando a altura da camada é pequena. 0 significa que esta configuração está desativada e a espessura da casca do topo é determinada apenas pelo número de camadas da casca do topo." -# AI Translated msgid "Separated infills" msgstr "Preenchimentos separados" -# AI Translated msgid "" "Centers the internal infill of each part on itself, as if it were sliced on its own, instead of on the whole assembly. Parts that touch or overlap are treated as one body and share a center; separate parts (or distinct 3D objects) each get their own.\n" "Useful when an assembly groups several objects that should each keep a consistent, self-centered infill.\n" "Affects line and grid patterns and rotation-template infills.\n" "Patterns locked to global coordinates (Gyroid, Honeycomb, TPMS, ...) are unaffected." msgstr "" -"Centraliza o preenchimento interno de cada peça em si mesma, como se fosse fatiada isoladamente, em vez de no conjunto inteiro. Peças que se tocam ou se sobrepõem são tratadas como um único corpo e compartilham um centro; peças separadas (ou objetos 3D distintos) recebem cada uma o seu próprio.\n" +"Centraliza o preenchimento interno de cada peça em si mesmo, como se fosse fatiada isoladamente, em vez de no conjunto inteiro. Peças que se tocam ou se sobrepõem são tratadas como um único corpo e compartilham um centro; peças separadas (ou objetos 3D distintos) recebem cada uma o seu próprio.\n" "Útil quando um conjunto agrupa vários objetos que devem manter, cada um, um preenchimento consistente e autocentrado.\n" -"Afeta os padrões de linha e grade e os preenchimentos com modelo de rotação.\n" +"Afeta os padrões de linha e grade e os preenchimentos com gabarito de rotação.\n" "Os padrões fixados em coordenadas globais (Giroide, Favo de mel, TPMS, ...) não são afetados." msgid "Center surface pattern on" @@ -16776,11 +16721,9 @@ msgstr "Multiplicador de purga" msgid "The actual flushing volumes is equal to the flush multiplier value multiplied by the flushing volumes in the table." msgstr "Os volumes de purga reais são iguais ao multiplicador de purga multiplicado pelos volumes de purga na tabela." -# AI Translated msgid "Flush multiplier (Fast mode)" msgstr "Multiplicador de purga (Modo rápido)" -# AI Translated msgid "The flush multiplier used in fast purge mode." msgstr "O multiplicador de purga usado no modo de purga rápida." @@ -16790,13 +16733,12 @@ msgstr "Volume de preparo" msgid "This is the volume of material to prime the extruder with on the tower." msgstr "Este é o volume de material para preparar a extrusora na torre." -# AI Translated +#,fuzzy msgid "Prime volume mode" msgstr "Modo de volume de preparação" -# AI Translated msgid "Selects how the wipe-tower prime and flush volumes are computed on multi-extruder printers." -msgstr "Seleciona como os volumes de preparação e de purga da torre de purga são calculados em impressoras com várias extrusoras." +msgstr "Seleciona como os volumes de preparação e de purga da torre de purga são computados em impressoras com múltiplas extrusoras." msgid "Saving" msgstr "Salvando" @@ -17116,7 +17058,7 @@ msgid "The maximum volumetric speed for ramming before extruder change, where -1 msgstr "A velocidade volumétrica máxima para compactação antes da troca de extrusor, onde -1 significa usar a velocidade volumétrica máxima." msgid "To prevent oozing, the nozzle temperature will be cooled during ramming. Note: only a cooldown command and fan activation are triggered, reaching the target temperature is not guaranteed. 0 means disabled." -msgstr "Para evitar o gotejamento, a temperatura do bico será reduzida durante a compactação. Nota: somente um comando de resfriamento e ativação do ventilador são acionados, não sendo garantido o alcance da temperatura alvo. 0 significa desativado." +msgstr "Para evitar o gotejamento, a temperatura do bico será reduzida durante a compactação. Nota: somente um comando de resfriamento e ativação da ventoinha são acionados, não sendo garantido o alcance da temperatura alvo. 0 significa desativado." msgid "The maximum volumetric speed for ramming before a hotend change, where -1 means using the maximum volumetric speed." msgstr "A velocidade volumétrica máxima para compactação antes de uma troca de hotend, em que -1 significa usar a velocidade volumétrica máxima." @@ -20744,8 +20686,8 @@ msgid "" "Auxiliary fan\n" "Did you know that OrcaSlicer supports Auxiliary part cooling fan?" msgstr "" -"Ventilador auxiliar\n" -"Você sabia que o OrcaSlicer suporta ventilador auxiliar de resfriamento de peças?" +"Ventoinha auxiliar\n" +"Você sabia que o OrcaSlicer suporta ventoinha auxiliar de resfriamento de peças?" #: resources/data/hints.ini: [hint:Air filtration] msgid "" @@ -21939,7 +21881,7 @@ msgstr "" #~ msgstr "Pausado devido à perda do AMS" #~ msgid "Paused due to low speed of the heat break fan" -#~ msgstr "Pausado devido a baixa velocidade do ventilador do bloco de aquecimento" +#~ msgstr "Pausado devido a baixa velocidade da ventoinha do bloco de aquecimento" #~ msgid "Paused due to chamber temperature control error" #~ msgstr "Pausado devido a erro no controle de temperatura da câmara" @@ -22468,20 +22410,20 @@ msgstr "" #~ msgstr "Forçar resfriamento para saliências e pontes" #~ msgid "Enable this option to optimize part cooling fan speed for overhang and bridge to get better cooling" -#~ msgstr "Ative esta opção para otimizar a velocidade do ventilador de resfriamento de peças para saliência e ponte para obter melhor resfriamento" +#~ msgstr "Ative esta opção para otimizar a velocidade da ventoinha de resfriamento de peças para saliência e ponte para obter melhor resfriamento" #~ msgid "Fan speed for overhang" -#~ msgstr "Velocidade do ventilador para saliência" +#~ msgstr "Velocidade da ventoinha para saliência" #~ msgid "Force part cooling fan to be this speed when printing bridge or overhang wall which has large overhang degree. Forcing cooling for overhang and bridge can get better quality for these part" -#~ msgstr "Forçar o ventilador de resfriamento de peças a ser nesta velocidade ao imprimir ponte ou parede saliente que tenha um grande grau de saliência. Forçar o resfriamento para saliência e ponte pode obter melhor qualidade para estas partes" +#~ msgstr "Forçar a ventoinha de resfriamento de peças a ser nesta velocidade ao imprimir ponte ou parede saliente que tenha um grande grau de saliência. Forçar o resfriamento para saliência e ponte pode obter melhor qualidade para estas partes" #~ msgid "Cooling overhang threshold" #~ msgstr "Limiar de resfriamento de saliência" #, c-format #~ msgid "Force cooling fan to be specific speed when overhang degree of printed part exceeds this value. Expressed as percentage which indicates how much width of the line without support from lower layer. 0% means forcing cooling for all outer wall no matter how much overhang degree" -#~ msgstr "Forçar o ventilador de resfriamento a ser uma velocidade específica quando o grau de saliência das peças impressa excede este valor. Expresso como porcentagem, que indica quanto da largura da linha sem suporte da camada inferior. Zero significa forçar o resfriamento para toda a parede externa, não importa quanto seja o grau de saliência" +#~ msgstr "Forçar a ventoinha de resfriamento a ser uma velocidade específica quando o grau de saliência das peças impressa excede este valor. Expresso como porcentagem, que indica quanto da largura da linha sem suporte da camada inferior. Zero significa forçar o resfriamento para toda a parede externa, não importa quanto seja o grau de saliência" #~ msgid "Density of external bridges. 100% means solid bridge. Default is 100%." #~ msgstr "Densidade de pontes externas. 100% significa ponte sólida. O padrão é 100%." From f529692ac0eb0f224f13b1e5f21e27744028db18 Mon Sep 17 00:00:00 2001 From: Robert J Audas Date: Sun, 16 Aug 2026 20:40:50 -0600 Subject: [PATCH 65/66] Fix slowdown for caged external overhangs (#14735) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Rodrigo Faselli <162915171+RF47@users.noreply.github.com> Co-authored-by: Ian Bassi --- src/libslic3r/GCode/ExtrusionProcessor.hpp | 148 ++++++- tests/fff_print/CMakeLists.txt | 1 + tests/fff_print/test_extrusion_processor.cpp | 441 +++++++++++++++++++ 3 files changed, 569 insertions(+), 21 deletions(-) create mode 100644 tests/fff_print/test_extrusion_processor.cpp diff --git a/src/libslic3r/GCode/ExtrusionProcessor.hpp b/src/libslic3r/GCode/ExtrusionProcessor.hpp index b282af8f4e..1d65e83f3e 100644 --- a/src/libslic3r/GCode/ExtrusionProcessor.hpp +++ b/src/libslic3r/GCode/ExtrusionProcessor.hpp @@ -19,6 +19,7 @@ #include #include #include +#include #include #include #include @@ -39,7 +40,11 @@ std::vector> estimate_points_properties(const POINTS& const AABBTreeLines::LinesDistancer& unscaled_prev_layer, float flow_width, float max_line_length = -1.0f, - float min_distance = -1.0f) + float min_distance = -1.0f, + // Maps an overhang distance onto the speed it will be printed at. Interior sampling + // needs it to tell which of the points it could add would change the G-code, and is + // skipped without it. + const std::function& distance_to_speed = {}) { bool looped = input_points.front() == input_points.back(); std::function get_prev_index = [](size_t idx, size_t count) { @@ -120,6 +125,107 @@ std::vector> estimate_points_properties(const POINTS& points.push_back(next_point); } + // ORCA: Interior sampling + // The passes below infer the support under a span from its endpoints alone, so an interior that is supported + // differently from both ends is invisible to them: the outer perimeter of an overhang whose ends are caged by + // full height walls reads as supported along its whole length. Probe the interior, keep the samples the + // endpoint interpolation fails to predict, and bisect either side of each one, so a span that is only partly + // unsupported gets points where its support actually changes instead of one reading spread across all of it. + if (PREV_LAYER_BOUNDARY_OFFSET && ADD_INTERSECTIONS && min_distance > 0 && distance_to_speed) { + // Probe at least this densely before treating matching samples as evidence that a span is uniform. The + // segmentation pass below only splits lines of 2mm or more, and every pass here drops points closer + // together than min_spacing, so finer discovery would not produce a more precise speed transition. + const double max_probe_spacing = std::max(2., 4. * min_spacing); + // A backstop for that length test, which on a non-finite length would never be met. + constexpr int max_bisection_depth = 10; + // Whether two readings are interchangeable. A segment is printed at the lower of the speeds its ends + // read, so a sample that agrees on speed with what is already known cannot change the G-code, whatever + // its distance says. The distances themselves are far too coarse a stand-in for this: the speed sections + // interpolate, so readings a small fraction of min_distance apart can still be tens of mm/s apart. + // The tolerance matches the one GCode.cpp applies when it decides a path has a variable speed at all. + auto same_speed = [&distance_to_speed](float a, float b) { + return std::abs(distance_to_speed(a) - distance_to_speed(b)) <= 1.f; + }; + // Whether the first reading is printed slower than the second, once they are known to differ. + auto prints_slower = [&distance_to_speed](float a, float b) { return distance_to_speed(a) < distance_to_speed(b); }; + + // Part of a segment still to bisect: its positions along the segment and bisections left. + struct Subspan { double t0, t1; int depth; }; + + std::vector> sampled_points; // Populated lazily, on the first insertion + std::vector> interior; // Samples of one segment, keyed by position along it + std::vector pending; + + for (size_t point_idx = 0; point_idx + 1 < points.size(); ++point_idx) { + const ExtendedPoint& curr = points[point_idx]; + const ExtendedPoint& next = points[point_idx + 1]; + const Vec step = next.position - curr.position; + const double line_len = step.norm(); + + interior.clear(); + if (line_len >= max_probe_spacing) + pending.push_back({0., 1., max_bisection_depth}); + + while (!pending.empty()) { + const Subspan subspan = pending.back(); + pending.pop_back(); + if (subspan.depth <= 0 || (subspan.t1 - subspan.t0) * line_len < max_probe_spacing) + continue; + + const double t = 0.5 * (subspan.t0 + subspan.t1); + auto [distance, nearest_line, x] = unscaled_prev_layer.template distance_from_lines_extra( + (curr.position + t * step).template cast()); + const float sampled = float(distance + boundary_offset); + + interior.emplace_back(t, sampled); + pending.push_back({subspan.t0, t, subspan.depth - 1}); + pending.push_back({t, subspan.t1, subspan.depth - 1}); + } + + if (!interior.empty()) { + std::sort(interior.begin(), interior.end(), + [](const std::pair& l, const std::pair& r) { return l.first < r.first; }); + // Coarse probing keeps every sample it took until this pass can see which ones bracket a speed + // transition. Matching samples cannot be discarded during discovery: one may be the last + // supported point before a narrow unsupported pocket found by a later probe. + size_t kept = 0; + for (size_t i = 0; i < interior.size(); ++i) { + const float sample = interior[i].second; + const bool at_start = kept == 0; // Nothing kept yet, so the segment's own start precedes it + const bool at_end = i + 1 == interior.size(); // And nothing follows the last sample but the segment's end + const float before = at_start ? curr.distance : interior[kept - 1].second; + const float after = at_end ? next.distance : interior[i + 1].second; + // A sample is worth a point in the path only where it prints at a different speed from the + // readings either side of it. Differing from one of the segment's own ends is not enough on + // its own where the sample is the faster of the two: the segmentation pass below already + // ends the slowdown an end reads, at a distance taken from how far out that end is rather + // than from wherever bisection happened to stop, and a point here would leave the span + // beside the end too short for that pass to run at all. Support an end cannot account for, + // where the interior is the slower reading, is exactly what this pass is here to find. + const bool worth_before = !same_speed(sample, before) && (!at_start || prints_slower(sample, before)); + const bool worth_after = !same_speed(sample, after) && (!at_end || prints_slower(sample, after)); + if (worth_before || worth_after) + interior[kept++] = interior[i]; + } + interior.resize(kept); + } + + if (!interior.empty() && sampled_points.empty()) { + sampled_points.reserve(points.size() + 8); + sampled_points.assign(points.begin(), points.begin() + point_idx + 1); + } + if (!sampled_points.empty()) { + // Only a sub-span of max_probe_spacing or more is ever bisected, so these sit at least + // 2 * min_spacing apart, and need none of the filtering the passes either side of this one do. + for (const auto& [t, distance] : interior) + sampled_points.push_back({curr.position + t * step, distance}); + sampled_points.push_back(next); + } + } + if (!sampled_points.empty()) + points = std::move(sampled_points); + } + // Segmentation handling if (PREV_LAYER_BOUNDARY_OFFSET && ADD_INTERSECTIONS) { std::vector> new_points; @@ -362,9 +468,28 @@ public: smallest_distance_with_lower_speed=-1.f; // Orca: Pass to the point properties estimator the smallest ovehang distance that triggers a slowdown (smallest_distance_with_lower_speed) + auto calculate_speed = [&speed_sections, &original_speed](float distance) { + float final_speed; + if (distance <= speed_sections.front().first) { + final_speed = original_speed; + } else if (distance >= speed_sections.back().first) { + final_speed = speed_sections.back().second; + } else { + size_t section_idx = 0; + while (distance > speed_sections[section_idx + 1].first) { + section_idx++; + } + float t = (distance - speed_sections[section_idx].first) / + (speed_sections[section_idx + 1].first - speed_sections[section_idx].first); + t = std::clamp(t, 0.0f, 1.0f); + final_speed = (1.0f - t) * speed_sections[section_idx].second + t * speed_sections[section_idx + 1].second; + } + return round(final_speed); + }; + std::vector> extended_points = estimate_points_properties(path.polyline.points, prev_layer_boundaries[current_object], path.width, -1, - smallest_distance_with_lower_speed); + smallest_distance_with_lower_speed, calculate_speed); const auto width_inv = 1.0f / path.width; std::vector processed_points; processed_points.reserve(extended_points.size()); @@ -423,25 +548,6 @@ public: } } - auto calculate_speed = [&speed_sections, &original_speed](float distance) { - float final_speed; - if (distance <= speed_sections.front().first) { - final_speed = original_speed; - } else if (distance >= speed_sections.back().first) { - final_speed = speed_sections.back().second; - } else { - size_t section_idx = 0; - while (distance > speed_sections[section_idx + 1].first) { - section_idx++; - } - float t = (distance - speed_sections[section_idx].first) / - (speed_sections[section_idx + 1].first - speed_sections[section_idx].first); - t = std::clamp(t, 0.0f, 1.0f); - final_speed = (1.0f - t) * speed_sections[section_idx].second + t * speed_sections[section_idx + 1].second; - } - return round(final_speed); - }; - float extrusion_speed = std::min(calculate_speed(curr.distance), calculate_speed(next.distance)); // ORCA: Clamp resulting speed to lowest of calculated speed based on the overhang values and the current speed // Fixes bug where resulting overhang speed is higher than the current speed due to (for example) volumetric flow limits. diff --git a/tests/fff_print/CMakeLists.txt b/tests/fff_print/CMakeLists.txt index 08f86de8a7..43afd4281d 100644 --- a/tests/fff_print/CMakeLists.txt +++ b/tests/fff_print/CMakeLists.txt @@ -5,6 +5,7 @@ add_executable(${_TEST_NAME}_tests test_helpers.hpp test_cooling.cpp test_extrusion_entity.cpp + test_extrusion_processor.cpp test_fill.cpp test_flow.cpp test_gcode_timing.cpp diff --git a/tests/fff_print/test_extrusion_processor.cpp b/tests/fff_print/test_extrusion_processor.cpp new file mode 100644 index 0000000000..76e331d66a --- /dev/null +++ b/tests/fff_print/test_extrusion_processor.cpp @@ -0,0 +1,441 @@ +#include + +#include "libslic3r/AABBTreeLines.hpp" +#include "libslic3r/GCode/ExtrusionProcessor.hpp" +#include "libslic3r/GCodeReader.hpp" +#include "libslic3r/TriangleMesh.hpp" + +#include "test_helpers.hpp" + +#include +#include +#include +#include + +using namespace Slic3r; +using namespace Slic3r::Test; + +namespace { + +// Print settings the assertions below are derived from. +constexpr double caged_layer_height = 0.2; // mm +constexpr double caged_wall_width = 0.42; // mm, outer wall line width +constexpr double caged_outer_wall_speed = 200.; // mm/s +constexpr double caged_slow_speed = 100.; // mm/s, between every configured overhang speed (<= 50) and the wall speed + +// A wall running 0.2mm out over a previous layer whose edge dishes 0.03mm away from it in the middle, +// standing in for the endpoint readings a caged overhang perimeter takes: enough of a difference to +// print at another speed, but only a fraction of the distance at which slowdown begins. +constexpr double dished_wall_gap = 0.2; // mm, how far the wall runs out past the previous layer's edge +constexpr double dished_layer_depth = 0.03; // mm, how much further out the middle of it reads +constexpr double dished_min_distance = 0.042; // mm, the reading at which the configured speeds begin to slow down +// Every reading here is past that, so the whole wall is slowed and only the amount is in question. +constexpr float dished_end_reading = float(dished_wall_gap + 0.5 * caged_wall_width); +constexpr float dished_mid_reading = float(dished_end_reading + dished_layer_depth); +// The two readings are dished_layer_depth apart, so half of that tells them apart while still allowing +// for the points the passes after sampling add, which read a little further out than the ends do. +constexpr double dished_reading_tolerance = 0.5 * dished_layer_depth; + +// A 40 x 20 x 20 mm box with a 45 degree overhang cut into the y = 0 side. The sloped face spans +// x = 5.086 .. 34.914 only, so the full-height walls of the box cage both ends of every overhang +// perimeter: the endpoints look supported even though the span between them is not. +TriangleMesh caged_overhang_mesh() +{ + return TriangleMesh( + { + {5.0859987f, 10.167065f, 5.711731f}, {34.914257f, 10.167065f, 5.711731f}, + {34.914257f, 0.f, 15.878796f}, {5.0859995f, 0.f, 15.878796f}, + {0.f, 0.f, 0.f}, {0.f, 0.f, 20.f}, + {0.f, 20.f, 20.f}, {0.f, 20.f, 0.f}, + {40.f, 20.f, 20.f}, {40.f, 20.f, 0.f}, + {40.f, 0.f, 20.f}, {40.f, 0.f, 0.f}, + {34.914257f, 0.f, 0.f}, {5.0859995f, 0.f, 0.f}, + {34.914257f, 10.167065f, 0.f}, {5.0859995f, 10.167065f, 0.f}, + }, + { + {0, 1, 2}, {0, 2, 3}, {4, 5, 6}, {4, 6, 7}, {7, 6, 8}, {7, 8, 9}, + {9, 8, 10}, {9, 10, 11}, {12, 11, 10}, {5, 4, 13}, {5, 13, 3}, {2, 12, 10}, + {5, 3, 2}, {10, 5, 2}, {9, 11, 12}, {9, 12, 14}, {13, 4, 7}, {9, 14, 15}, + {15, 13, 7}, {7, 9, 15}, {8, 6, 5}, {8, 5, 10}, {14, 1, 0}, {14, 0, 15}, + {2, 1, 14}, {2, 14, 12}, {15, 0, 3}, {15, 3, 13}, + }); +} + +// Mesh geometry the wall filters below are derived from. +constexpr double caged_box_depth = 20.; // mm, the box spans y = 0 .. 20 +constexpr double caged_slope_face_sum = 15.878796; // mm, y + z of the sloped face, from its corners +// The sloped face spans this x range; outside it the box walls run full height. +constexpr double caged_slope_x_min = 5.0859995; +constexpr double caged_slope_x_max = 34.914257; +constexpr double caged_slope_span = caged_slope_x_max - caged_slope_x_min; // ~29.8 mm +// The z range the sloped face occupies, from the same fixture vertices. +constexpr double caged_slope_z_min = 5.711731; +constexpr double caged_slope_z_max = 15.878796; +// The lowest slope layer still sits on the solid body below the notch, so it is fully supported and +// runs at the outer wall speed by design. The caged span proper begins one layer above it. +constexpr double caged_span_z_min = caged_slope_z_min + caged_layer_height; + +// A layer printed at z is sliced at z - layer_height / 2, and the outer wall centreline sits half a +// line width inside the contour, so the wall on the slope satisfies y + z = 16.189. +constexpr double caged_slope_wall_sum = caged_slope_face_sum + 0.5 * caged_layer_height + 0.5 * caged_wall_width; +// Same inset on the fully supported y = 20 face, vertical over the whole height. +constexpr double caged_back_wall_y = caged_box_depth - 0.5 * caged_wall_width; +// And on the y = 0 face, which runs full height only outside the slope's x range. +constexpr double caged_front_wall_y = 0.5 * caged_wall_width; +// Arachne varies the wall width along a face, and the centreline inset is half that width, so a +// wall sits within about half a line width of where the nominal inset alone would put it. The +// faces being selected are millimetres apart, so this stays far from ambiguous. +constexpr double caged_wall_tolerance = 0.5 * caged_wall_width; + +// Feed rates in mm/min of the long outer wall extrusions `keep_line` selects. +template std::vector outer_wall_feed_rates(const std::string& gcode, KeepLine keep_line) +{ + std::vector feed_rates; + bool outer_wall = false; + GCodeReader parser; + parser.parse_buffer(gcode, [&feed_rates, &outer_wall, &keep_line](GCodeReader& self, const GCodeReader::GCodeLine& line) { + const std::string_view comment = line.comment(); + if (comment.find("FEATURE:") != std::string_view::npos || comment.find("TYPE:") != std::string_view::npos) + outer_wall = comment.find("Outer wall") != std::string_view::npos || + comment.find("External perimeter") != std::string_view::npos; + + if (outer_wall && line.extruding(self) && line.dist_XY(self) > 1.0 && keep_line(self, line)) + feed_rates.push_back(line.new_F(self)); + }); + + return feed_rates; +} + +// The caged 45 degree overhang: outer walls crossing the sloped face for most of its width, on the +// layers where the face genuinely overhangs. +// Both ends are tested against the slope plane rather than requiring a constant Y. Arachne's +// variable-width walls drift slightly in Y along the same slope (Y6.186 -> Y6.189 on one move), so +// a constant-Y filter matches almost nothing under Arachne and silently reduces its coverage. +// The length test excludes the cage walls: they are only as wide as the box is either side of the +// slope, but being vertical their y + z sweeps through the slope plane as z rises, so a couple of +// their fully supported moves would otherwise be counted as part of the span. +std::vector caged_slope_feed_rates(const std::string& gcode) +{ + return outer_wall_feed_rates(gcode, [](const GCodeReader& self, const GCodeReader::GCodeLine& line) { + const double z = line.new_Z(self); + return z > caged_span_z_min && z < caged_slope_z_max && + line.dist_XY(self) > 0.5 * caged_slope_span && + std::abs(self.y() + z - caged_slope_wall_sum) < caged_wall_tolerance && + std::abs(line.new_Y(self) + z - caged_slope_wall_sum) < caged_wall_tolerance; + }); +} + +// The opposite, fully supported face, skipping the initial layer and its own speed settings. +std::vector back_wall_feed_rates(const std::string& gcode) +{ + return outer_wall_feed_rates(gcode, [](const GCodeReader& self, const GCodeReader::GCodeLine& line) { + return line.new_Z(self) > 1.5 * caged_layer_height && + std::abs(self.y() - caged_back_wall_y) < caged_wall_tolerance && + std::abs(line.new_Y(self) - caged_back_wall_y) < caged_wall_tolerance; + }); +} + +// The first layer printed entirely above the slope. Its y = 0 wall runs the full width of the box. +const double caged_layer_above_slope_z = std::ceil(caged_slope_z_max / caged_layer_height) * caged_layer_height; + +// The parts of that wall standing on the cage rather than the slope, so on a contour identical to their own. +// Where the support changes is found by bisection, which stops at spans of 2mm, so the move spanning each end of +// the slope reaches a little way into the cage. Taking only the moves lying wholly outside the slope's x range +// leaves the wall that is unambiguously supported, without asserting how closely the bisection converged. +std::vector cage_shoulder_feed_rates(const std::string& gcode) +{ + return outer_wall_feed_rates(gcode, [](const GCodeReader& self, const GCodeReader::GCodeLine& line) { + return std::abs(line.new_Z(self) - caged_layer_above_slope_z) < 0.5 * caged_layer_height && + std::abs(self.y() - caged_front_wall_y) < caged_wall_tolerance && + std::abs(line.new_Y(self) - caged_front_wall_y) < caged_wall_tolerance && + (std::max(self.x(), line.new_X(self)) <= caged_slope_x_min || + std::min(self.x(), line.new_X(self)) >= caged_slope_x_max); + }); +} + +// The readings a 40mm wall takes over a previous layer whose edge falls away by 0.03mm towards the +// middle: both ends read the same, and the middle reads slightly further out over air. Whether that +// middle reading survives is what decides the speed the wall is printed at. +std::vector> sampled_wall_over_dished_layer(const std::function& distance_to_speed) +{ + const AABBTreeLines::LinesDistancer prev_layer(std::vector{ + {{0., 0.}, {20., -dished_layer_depth}}, + {{20., -dished_layer_depth}, {40., 0.}}, + {{40., 0.}, {40., -10.}}, + {{40., -10.}, {0., -10.}}, + {{0., -10.}, {0., 0.}}, + }); + const Points wall{Point::new_scale(0., dished_wall_gap), Point::new_scale(40., dished_wall_gap)}; + + return estimate_points_properties(wall, prev_layer, caged_wall_width, -1.f, + dished_min_distance, distance_to_speed); +} + +// A straight, otherwise supported wall over a previous-layer boundary with a 2mm-wide pocket. Moving the +// pocket between x = 10 and x = 20 covers both discovery away from the wall's midpoint and refinement around +// a midpoint that has already been discovered. The current wall is inset half its width from the flat boundary, +// so its supported readings are zero after the estimator applies its boundary offset. +constexpr double narrow_pocket_wall_length = 40.; +constexpr double narrow_pocket_width = 2.; +constexpr double narrow_pocket_depth = 0.3; + +std::vector> sampled_wall_over_narrow_pocket( + double pocket_center, const std::function& distance_to_speed) +{ + const double pocket_left = pocket_center - 0.5 * narrow_pocket_width; + const double pocket_right = pocket_center + 0.5 * narrow_pocket_width; + const AABBTreeLines::LinesDistancer prev_layer(std::vector{ + {{0., 0.}, {pocket_left, 0.}}, + {{pocket_left, 0.}, {pocket_left, -narrow_pocket_depth}}, + {{pocket_left, -narrow_pocket_depth}, {pocket_right, -narrow_pocket_depth}}, + {{pocket_right, -narrow_pocket_depth}, {pocket_right, 0.}}, + {{pocket_right, 0.}, {narrow_pocket_wall_length, 0.}}, + {{narrow_pocket_wall_length, 0.}, {narrow_pocket_wall_length, -10.}}, + {{narrow_pocket_wall_length, -10.}, {0., -10.}}, + {{0., -10.}, {0., 0.}}, + }); + const double wall_y = -0.5 * caged_wall_width; + const Points wall{Point::new_scale(0., wall_y), Point::new_scale(narrow_pocket_wall_length, wall_y)}; + + return estimate_points_properties(wall, prev_layer, caged_wall_width, -1.f, + dished_min_distance, distance_to_speed); +} + +// A cross section that grows a layer's worth on the two faces meeting at either end of a wall, as any +// 45 degree overhang does. The wall itself stands on a contour identical to its own, but its ends sit +// where the growing faces cut the corners off, and the previous layer's edge there is nearer than the +// half line width the centreline is inset by. Both ends therefore read an overhang while everything +// between them reads supported: the reverse of the caged span, and the case the sampling above must +// leave to the passes after it. +constexpr double stepped_wall_inset = 0.5 * caged_wall_width; // mm, centreline inset from the contour +constexpr double stepped_end_gap = stepped_wall_inset - caged_layer_height; // mm, how far inside the corner ends up +constexpr double stepped_wall_span = 30.; // mm, the length of the wall + +std::vector> sampled_wall_between_growing_corners(const std::function& distance_to_speed) +{ + const AABBTreeLines::LinesDistancer prev_layer(std::vector{ + {{0., 0.}, {32., 0.}}, + {{32., 0.}, {32., -stepped_wall_span}}, + {{32., -stepped_wall_span}, {0., -stepped_wall_span}}, + {{0., -stepped_wall_span}, {0., 0.}}, + }); + const Points wall{Point::new_scale(stepped_wall_inset, -stepped_end_gap), + Point::new_scale(stepped_wall_inset, stepped_end_gap - stepped_wall_span)}; + + return estimate_points_properties(wall, prev_layer, caged_wall_width, -1.f, + dished_min_distance, distance_to_speed); +} + +// How much of a path is printed below the speed a fully supported reading gives. A segment is printed +// at the lower of the speeds its ends read. +double slowed_length(const std::vector>& points, const std::function& distance_to_speed) +{ + double length = 0.; + for (size_t i = 0; i + 1 < points.size(); ++i) + if (std::min(distance_to_speed(points[i].distance), distance_to_speed(points[i + 1].distance)) < distance_to_speed(0.f)) + length += (points[i + 1].position - points[i].position).norm(); + return length; +} + +float furthest_reading(const std::vector>& points) +{ + return std::max_element(points.begin(), points.end(), [](const ExtendedPoint<2>& l, const ExtendedPoint<2>& r) { + return l.distance < r.distance; + })->distance; +} + +DynamicPrintConfig caged_overhang_config(const char* wall_generator){ + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.set_deserialize_strict({ + {"nozzle_diameter", "0.4"}, + {"initial_layer_print_height", caged_layer_height}, + {"layer_height", caged_layer_height}, + {"line_width", caged_wall_width}, + {"outer_wall_line_width", caged_wall_width}, + {"inner_wall_line_width", "0.45"}, + {"wall_loops", "2"}, + {"wall_generator", wall_generator}, + {"wall_sequence", "inner wall/outer wall"}, + {"sparse_infill_density", "15%"}, + {"detect_overhang_wall", "1"}, + {"enable_overhang_speed", "1"}, + {"slowdown_for_curled_perimeters", "0"}, + {"zaa_enabled", "0"}, + {"outer_wall_speed", caged_outer_wall_speed}, + {"inner_wall_speed", "300"}, + {"overhang_1_4_speed", "0"}, + {"overhang_2_4_speed", "50"}, + {"overhang_3_4_speed", "30"}, + {"overhang_4_4_speed", "10"}, + {"bridge_speed", "50"}, + {"filament_max_volumetric_speed", "22"}, + {"slow_down_for_layer_cooling", "0"}, + {"slow_down_layers", "0"}, // Nothing but the overhang settings may lower a wall speed + }); + return config; +} + +std::string caged_overhang_gcode(const char* wall_generator) +{ + Print print; + Model model; + init_print(std::vector{caged_overhang_mesh()}, print, model, caged_overhang_config(wall_generator), nullptr, + false); + return gcode(print); +} + +// Reports the matched move count alongside the extremes, so a filter that selected nothing is +// distinguishable from a span that simply was not slowed. +void info_feed_rates(const char* span, const std::vector& feed_rates) +{ + UNSCOPED_INFO("matched " << feed_rates.size() << " " << span << " moves"); + if (!feed_rates.empty()) { + const auto extremes = std::minmax_element(feed_rates.begin(), feed_rates.end()); + UNSCOPED_INFO("slowest " << *extremes.first / MM_PER_MIN << " mm/s, fastest " << *extremes.second / MM_PER_MIN << " mm/s"); + } +} + +} // namespace + +// Classic reproduces the endpoint-sampling bug: it emits the span as one long move whose endpoints +// both read as supported, so endpoint-only sampling never slows it. Arachne's endpoints already read +// as overhanging, but their placement near the cage makes the inferred support vary by layer. Arachne +// parity is therefore part of this regression's scope: both generators must classify the unsupported +// interior of the same 45-degree span consistently. +TEST_CASE("Caged external overhangs are slowed along their span", "[ExtrusionProcessor][Regression]") +{ + const char* wall_generator = GENERATE("classic", "arachne"); + INFO("wall generator: " << wall_generator); + + const std::vector feed_rates = caged_slope_feed_rates(caged_overhang_gcode(wall_generator)); + info_feed_rates("caged slope", feed_rates); + + REQUIRE_FALSE(feed_rates.empty()); + + // The endpoint bug left Classic at the full wall speed, while Arachne's cage-adjacent endpoint + // samples selected much faster bands on some layers. The whole span must stay in the slowed range + // for both generators, without requiring their different path segmentations to match. + const double fastest = *std::max_element(feed_rates.begin(), feed_rates.end()); + REQUIRE(fastest < caged_slow_speed * MM_PER_MIN); +} + +// The other side of the fix: the midpoint probe fires on every long external perimeter, so a +// regression that over-slows would leave the test above green. A fully supported wall must keep the +// speed it was configured with. +TEST_CASE("Supported vertical walls keep their normal speed", "[ExtrusionProcessor][Regression]") +{ + const char* wall_generator = GENERATE("classic", "arachne"); + INFO("wall generator: " << wall_generator); + + const std::vector feed_rates = back_wall_feed_rates(caged_overhang_gcode(wall_generator)); + info_feed_rates("back wall", feed_rates); + + REQUIRE_FALSE(feed_rates.empty()); + + const double slowest = *std::min_element(feed_rates.begin(), feed_rates.end()); + REQUIRE(slowest >= caged_slow_speed * MM_PER_MIN); +} + +// The slope's top edge falls mid layer, so the first layer above it still stands 0.179mm proud of the layer +// below wherever that layer was still on the slope. That is a real overhang and is slowed, but it ends with the +// slope: outside the slope's x range the box runs full height, so the same wall stands on a contour identical to +// its own. Sampling the interior of that wall at a single point reported one support reading for all of it and +// slowed these fully supported ends along with the rest. +TEST_CASE("Wall sections beside a caged overhang keep their normal speed", "[ExtrusionProcessor][Regression]") +{ + const char* wall_generator = GENERATE("classic", "arachne"); + INFO("wall generator: " << wall_generator); + + const std::vector feed_rates = cage_shoulder_feed_rates(caged_overhang_gcode(wall_generator)); + info_feed_rates("cage shoulder", feed_rates); + + REQUIRE_FALSE(feed_rates.empty()); + + const double slowest = *std::min_element(feed_rates.begin(), feed_rates.end()); + REQUIRE_THAT(slowest / MM_PER_MIN, Catch::Matchers::WithinRel(caged_outer_wall_speed, 0.01)); +} + +// A wall is printed at the lower of the speeds its ends read, so a reading only earns a point in the +// path where it prints at a different speed from the readings around it. Judging that on the readings +// themselves rather than the speeds they produce was too coarse: the configured speeds interpolate +// between their sections, so readings a fraction of the slowdown threshold apart still print more than +// 10% apart, and a real 45 degree overhang had its true reading dropped as if it agreed with its ends. +// The ends then chose the speed on their own, and being next to the walls either side of the overhang +// they read differently from layer to layer, banding an overhang that should have been uniform. +TEST_CASE("An overhang reading is kept whenever it changes the speed", "[ExtrusionProcessor][Regression]") +{ + // A steep speed curve, of the kind the configured overhang speeds interpolate across. + const std::vector> points = + sampled_wall_over_dished_layer([](float distance) { return std::round(200.f - 400.f * distance); }); + + REQUIRE_THAT(furthest_reading(points), Catch::Matchers::WithinAbs(dished_mid_reading, dished_reading_tolerance)); +} + +// The complement, and why the readings alone were tempting: a reading that prints at the same speed as +// its neighbours cannot change the G-code, so sampling must leave the path alone however far out it is. +TEST_CASE("An overhang reading is dropped when the speed is unchanged", "[ExtrusionProcessor]") +{ + // A flat speed curve, of the kind a single configured overhang speed produces. + const std::vector> points = sampled_wall_over_dished_layer([](float) { return 50.f; }); + + REQUIRE_THAT(furthest_reading(points), Catch::Matchers::WithinAbs(dished_end_reading, dished_reading_tolerance)); +} + +TEST_CASE("Coarse probing detects an unsupported pocket away from the wall midpoint", + "[ExtrusionProcessor][Regression]") +{ + const std::function distance_to_speed = [](float distance) { return distance <= 0.2f ? 100.f : 50.f; }; + const std::vector> points = + sampled_wall_over_narrow_pocket(0.25 * narrow_pocket_wall_length, distance_to_speed); + const double slowed = slowed_length(points, distance_to_speed); + + REQUIRE(slowed > 0.); + REQUIRE(slowed < 5.); +} + +TEST_CASE("Coarse probing brackets a narrow slowdown at the wall midpoint", + "[ExtrusionProcessor][Regression]") +{ + // Half of the pocket reading still maps to full speed. A matching probe in either half therefore must not + // prune that half before a supported point has been found close enough to bracket the slow midpoint. + const std::function distance_to_speed = [](float distance) { return distance <= 0.2f ? 100.f : 50.f; }; + const std::vector> points = + sampled_wall_over_narrow_pocket(0.5 * narrow_pocket_wall_length, distance_to_speed); + const double slowed = slowed_length(points, distance_to_speed); + + REQUIRE(slowed > 0.); + REQUIRE(slowed < 5.); +} + +// Sampling probes the interior, so it must not answer for the ends. On a supported wall between two +// corners that read an overhang, the reading that differs is the end's own, and the pass that ends a +// slowdown an end reads places its point from how far out that end is. Sampling took the difference as +// its own to report and put a point at the nearest position bisection had reached instead, which both +// sits further along the wall and leaves too little of it for that pass to run on, so the corner +// slowdown ran millimetres up an otherwise supported wall. Its length grows with the wall, so on a +// model whose cross section keeps growing it reads as a stair stepped band up the corner. +TEST_CASE("A supported wall between overhanging corners is slowed no further than its ends require", + "[ExtrusionProcessor][Regression]") +{ + // A steep speed curve, so the ends and the interior between them print at clearly different speeds. + const std::function distance_to_speed = [](float distance) { + return std::round(float(caged_outer_wall_speed) - 400.f * distance); + }; + + const double sampled = slowed_length(sampled_wall_between_growing_corners(distance_to_speed), distance_to_speed); + // The same wall with sampling switched off: what the endpoint driven passes alone make of the corners. + const double unsampled = slowed_length(sampled_wall_between_growing_corners({}), distance_to_speed); + + // The corners do read an overhang, so there is a slowdown for sampling to have lengthened. + REQUIRE(unsampled > 0.); + REQUIRE(sampled <= unsampled); +} + +TEST_CASE("Benchmark caged overhang interior sampling", "[ExtrusionProcessor][!benchmark]"){ + const char* wall_generator = GENERATE("classic", "arachne"); + + BENCHMARK(wall_generator) + { + return caged_overhang_gcode(wall_generator); + }; +} From 57092d5abd55daf2f3e2e44b06507646d77c3420 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Mon, 17 Aug 2026 13:31:30 +0800 Subject: [PATCH 66/66] Reorder network initialization calls --- src/slic3r/GUI/GUI_App.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index db51bd9d8e..0d4e3f35cf 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -3273,15 +3273,12 @@ bool GUI_App::on_init_inner() } } */ - copy_network_if_available(); if (scrn) { scrn->SetText(_L("Loading Plugins") + dots, 20); wxYield(); } - on_init_network(); - // Initialize plugins after network then register on_load callbacks so once the plugin loads finish, it gets registered automatically. // initialize() also installs the libslic3r hooks (capability resolver, // slicing-pipeline dispatcher) via plugin_hooks::install() -- no @@ -3310,6 +3307,9 @@ bool GUI_App::on_init_inner() } } + copy_network_if_available(); + on_init_network(); + if (m_agent) plugin_mgr.set_cloud_agent(std::dynamic_pointer_cast(m_agent->get_cloud_agent()));