From ca0c83d914bb8cd654357f3f146ed582555c3b61 Mon Sep 17 00:00:00 2001 From: Vojtech Bubnik Date: Mon, 16 Jan 2023 14:39:48 +0100 Subject: [PATCH 01/14] The new ExtrusionRole implementation newly supports both "Bridging" and "External" attributes at the same time. PerimeterGenerator was updated to make use of it and set "External" attribute for overhang perimeters. --- src/libslic3r/ExtrusionRole.cpp | 7 ++++--- src/libslic3r/GCode.cpp | 4 ++-- src/libslic3r/PerimeterGenerator.cpp | 23 ++++++++++++----------- src/libslic3r/SupportSpotsGenerator.cpp | 4 +--- src/libslic3r/enum_bitmask.hpp | 6 ++++++ 5 files changed, 25 insertions(+), 19 deletions(-) diff --git a/src/libslic3r/ExtrusionRole.cpp b/src/libslic3r/ExtrusionRole.cpp index f43db4835d..1e91df2044 100644 --- a/src/libslic3r/ExtrusionRole.cpp +++ b/src/libslic3r/ExtrusionRole.cpp @@ -13,9 +13,10 @@ namespace Slic3r { GCodeExtrusionRole extrusion_role_to_gcode_extrusion_role(ExtrusionRole role) { if (role == ExtrusionRole::None) return GCodeExtrusionRole::None; - if (role == ExtrusionRole::Perimeter) return GCodeExtrusionRole::Perimeter; - if (role == ExtrusionRole::ExternalPerimeter) return GCodeExtrusionRole::ExternalPerimeter; - if (role == ExtrusionRole::OverhangPerimeter) return GCodeExtrusionRole::OverhangPerimeter; + if (role.is_perimeter()) { + return role.is_bridge() ? GCodeExtrusionRole::OverhangPerimeter : + role.is_external() ? GCodeExtrusionRole::ExternalPerimeter : GCodeExtrusionRole::Perimeter; + } if (role == ExtrusionRole::InternalInfill) return GCodeExtrusionRole::InternalInfill; if (role == ExtrusionRole::SolidInfill) return GCodeExtrusionRole::SolidInfill; if (role == ExtrusionRole::TopSolidInfill) return GCodeExtrusionRole::TopSolidInfill; diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index e26e0b55eb..ad0d3c43f1 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -2631,7 +2631,7 @@ std::string GCode::extrude_loop(ExtrusionLoop loop, const std::string_view descr } // make a little move inwards before leaving loop - if (paths.back().role() == ExtrusionRole::ExternalPerimeter && m_layer != NULL && m_config.perimeters.value > 1 && paths.front().size() >= 2 && paths.back().polyline.points.size() >= 3) { + if (paths.back().role().is_external_perimeter() && m_layer != NULL && m_config.perimeters.value > 1 && paths.front().size() >= 2 && paths.back().polyline.points.size() >= 3) { // detect angle between last and first segment // the side depends on the original winding order of the polygon (left for contours, right for holes) //FIXME improve the algorithm in case the loop is tiny. @@ -2877,7 +2877,7 @@ std::string GCode::_extrude(const ExtrusionPath &path, const std::string_view de } else if (path.role() == ExtrusionRole::ExternalPerimeter) { speed = m_config.get_abs_value("external_perimeter_speed"); } else if (path.role().is_bridge()) { - assert(path.role() == ExtrusionRole::OverhangPerimeter || path.role() == ExtrusionRole::BridgeInfill); + assert(path.role().is_perimeter() || path.role() == ExtrusionRole::BridgeInfill); speed = m_config.get_abs_value("bridge_speed"); } else if (path.role() == ExtrusionRole::InternalInfill) { speed = m_config.get_abs_value("infill_speed"); diff --git a/src/libslic3r/PerimeterGenerator.cpp b/src/libslic3r/PerimeterGenerator.cpp index a9044367a3..1f30661478 100644 --- a/src/libslic3r/PerimeterGenerator.cpp +++ b/src/libslic3r/PerimeterGenerator.cpp @@ -114,7 +114,7 @@ ExtrusionMultiPath PerimeterGenerator::thick_polyline_to_multi_path(const ThickP } const double w = fmax(line.a_width, line.b_width); - const Flow new_flow = (role == ExtrusionRole::OverhangPerimeter && flow.bridge()) ? flow : flow.with_width(unscale(w) + flow.height() * float(1. - 0.25 * PI)); + const Flow new_flow = (role.is_bridge() && flow.bridge()) ? flow : flow.with_width(unscale(w) + flow.height() * float(1. - 0.25 * PI)); if (path.polyline.points.empty()) { path.polyline.append(line.a); path.polyline.append(line.b); @@ -292,9 +292,9 @@ static ExtrusionEntityCollection traverse_loops_classic(const PerimeterGenerator for (const PerimeterGeneratorLoop &loop : loops) { bool is_external = loop.is_external(); - ExtrusionRole role = ExtrusionRole::None; ExtrusionLoopRole loop_role; - role = is_external ? ExtrusionRole::ExternalPerimeter : ExtrusionRole::Perimeter; + ExtrusionRole role_normal = is_external ? ExtrusionRole::ExternalPerimeter : ExtrusionRole::Perimeter; + ExtrusionRole role_overhang = role_normal | ExtrusionRoleModifier::Bridge; if (loop.is_internal_contour()) { // Note that we set loop role to ContourInternalPerimeter // also when loop is both internal and external (i.e. @@ -321,7 +321,7 @@ static ExtrusionEntityCollection traverse_loops_classic(const PerimeterGenerator extrusion_paths_append( paths, intersection_pl({ polygon }, lower_slices_polygons_clipped), - role, + role_normal, is_external ? params.ext_mm3_per_mm : params.mm3_per_mm, is_external ? params.ext_perimeter_flow.width() : params.perimeter_flow.width(), float(params.layer_height)); @@ -332,7 +332,7 @@ static ExtrusionEntityCollection traverse_loops_classic(const PerimeterGenerator extrusion_paths_append( paths, diff_pl({ polygon }, lower_slices_polygons_clipped), - ExtrusionRole::OverhangPerimeter, + role_overhang, params.mm3_per_mm_overhang, params.overhang_flow.width(), params.overhang_flow.height()); @@ -341,7 +341,7 @@ static ExtrusionEntityCollection traverse_loops_classic(const PerimeterGenerator // We allow polyline reversal because Clipper may have randomly reversed polylines during clipping. chain_and_reorder_extrusion_paths(paths, &paths.front().first_point()); } else { - ExtrusionPath path(role); + ExtrusionPath path(role_normal); path.polyline = polygon.split_at_first_point(); path.mm3_per_mm = is_external ? params.ext_mm3_per_mm : params.mm3_per_mm; path.width = is_external ? params.ext_perimeter_flow.width() : params.perimeter_flow.width(); @@ -503,7 +503,8 @@ static ExtrusionEntityCollection traverse_extrusions(const PerimeterGenerator::P continue; const bool is_external = extrusion->inset_idx == 0; - ExtrusionRole role = is_external ? ExtrusionRole::ExternalPerimeter : ExtrusionRole::Perimeter; + ExtrusionRole role_normal = is_external ? ExtrusionRole::ExternalPerimeter : ExtrusionRole::Perimeter; + ExtrusionRole role_overhang = role_normal | ExtrusionRoleModifier::Bridge; if (pg_extrusion.fuzzify) fuzzy_extrusion_line(*extrusion, scaled(params.config.fuzzy_skin_thickness.value), scaled(params.config.fuzzy_skin_point_dist.value)); @@ -541,13 +542,13 @@ static ExtrusionEntityCollection traverse_extrusions(const PerimeterGenerator::P } // get non-overhang paths by intersecting this loop with the grown lower slices - extrusion_paths_append(paths, clip_extrusion(extrusion_path, lower_slices_paths, ClipperLib_Z::ctIntersection), role, + extrusion_paths_append(paths, clip_extrusion(extrusion_path, lower_slices_paths, ClipperLib_Z::ctIntersection), role_normal, is_external ? params.ext_perimeter_flow : params.perimeter_flow); // get overhang paths by checking what parts of this loop fall // outside the grown lower slices (thus where the distance between // the loop centerline and original lower slices is >= half nozzle diameter - extrusion_paths_append(paths, clip_extrusion(extrusion_path, lower_slices_paths, ClipperLib_Z::ctDifference), ExtrusionRole::OverhangPerimeter, + extrusion_paths_append(paths, clip_extrusion(extrusion_path, lower_slices_paths, ClipperLib_Z::ctDifference), role_overhang, params.overhang_flow); // Reapply the nearest point search for starting point. @@ -568,7 +569,7 @@ static ExtrusionEntityCollection traverse_extrusions(const PerimeterGenerator::P for (const ExtrusionPath &path : paths) { ++point_occurrence[path.polyline.first_point()].occurrence; ++point_occurrence[path.polyline.last_point()].occurrence; - if (path.role() == ExtrusionRole::OverhangPerimeter) { + if (path.role().is_bridge()) { point_occurrence[path.polyline.first_point()].is_overhang = true; point_occurrence[path.polyline.last_point()].is_overhang = true; } @@ -588,7 +589,7 @@ static ExtrusionEntityCollection traverse_extrusions(const PerimeterGenerator::P chain_and_reorder_extrusion_paths(paths, &start_point); } } else { - extrusion_paths_append(paths, *extrusion, role, is_external ? params.ext_perimeter_flow : params.perimeter_flow); + extrusion_paths_append(paths, *extrusion, role_normal, is_external ? params.ext_perimeter_flow : params.perimeter_flow); } // Append paths to collection. diff --git a/src/libslic3r/SupportSpotsGenerator.cpp b/src/libslic3r/SupportSpotsGenerator.cpp index 43637d25f8..eaf7dd57d1 100644 --- a/src/libslic3r/SupportSpotsGenerator.cpp +++ b/src/libslic3r/SupportSpotsGenerator.cpp @@ -58,9 +58,7 @@ public: bool is_external_perimeter() const { assert(origin_entity != nullptr); - //FIXME origin_entity->role() == ExtrusionRole::OverhangPerimeter is not quite right. - // rather use origin_entity->role().is_external_perimeter() - return origin_entity->role() == ExtrusionRole::ExternalPerimeter || origin_entity->role() == ExtrusionRole::OverhangPerimeter; + return origin_entity->role().is_external_perimeter(); } Vec2f a; diff --git a/src/libslic3r/enum_bitmask.hpp b/src/libslic3r/enum_bitmask.hpp index 274952cb02..d5d2473713 100644 --- a/src/libslic3r/enum_bitmask.hpp +++ b/src/libslic3r/enum_bitmask.hpp @@ -36,6 +36,12 @@ public: // Combine with another enum_bitmask of the same type. constexpr enum_bitmask operator|(enum_bitmask t) const { return enum_bitmask(m_bits | t.m_bits); } + // Set the bit corresponding to the given option. + constexpr void operator|=(option_type t) { m_bits = enum_bitmask(m_bits | mask_value(t)); } + + // Combine with another enum_bitmask of the same type. + constexpr void operator|=(enum_bitmask t) { m_bits = enum_bitmask(m_bits | t.m_bits); } + // Get the value of the bit corresponding to the given option. constexpr bool operator&(option_type t) const { return m_bits & mask_value(t); } constexpr bool has(option_type t) const { return m_bits & mask_value(t); } From e2a51a4da9d9ae892c11fc38dbf914724ba24686 Mon Sep 17 00:00:00 2001 From: YuSanka Date: Mon, 16 Jan 2023 14:57:33 +0100 Subject: [PATCH 02/14] Fixed info for SplashScreen --- src/slic3r/GUI/GUI_App.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 42ba4295f2..5a2562aab3 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -276,7 +276,7 @@ private: _L("Developed by Prusa Research.") + "\n\n" + title + " " + _L("is licensed under the") + " " + _L("GNU Affero General Public License, version 3") + ".\n\n" + _L("Contributions by Vojtech Bubnik, Enrico Turri, Oleksandra Iushchenko, Tamas Meszaros, Lukas Matena, Vojtech Kral, David Kocik and numerous others.") + "\n\n" + - _L("Artwork model by Leslie Ing"); + _L("Artwork model by Creative Tools"); title_font = version_font = credits_font = init_font; } From 9dce38b9a77f179db9437d6e5fad07c31821897c Mon Sep 17 00:00:00 2001 From: David Kocik Date: Mon, 16 Jan 2023 15:22:22 +0100 Subject: [PATCH 03/14] missing include --- src/slic3r/GUI/Jobs/ArrangeJob.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/slic3r/GUI/Jobs/ArrangeJob.cpp b/src/slic3r/GUI/Jobs/ArrangeJob.cpp index 7214ccdaba..7873af758d 100644 --- a/src/slic3r/GUI/Jobs/ArrangeJob.cpp +++ b/src/slic3r/GUI/Jobs/ArrangeJob.cpp @@ -13,6 +13,8 @@ #include "libnest2d/common.hpp" +#include + namespace Slic3r { namespace GUI { // Cache the wti info From 63a3fcf5714ded2c3a41670dc3b359f673ceaf0b Mon Sep 17 00:00:00 2001 From: David Kocik Date: Mon, 16 Jan 2023 14:09:17 +0100 Subject: [PATCH 04/14] Changes in windows eject. Second request if first fail with different dev inst. Small refactor. --- src/slic3r/GUI/RemovableDriveManager.cpp | 50 +++++++++++------------- 1 file changed, 22 insertions(+), 28 deletions(-) diff --git a/src/slic3r/GUI/RemovableDriveManager.cpp b/src/slic3r/GUI/RemovableDriveManager.cpp index 2189f2ad91..b6881f1aea 100644 --- a/src/slic3r/GUI/RemovableDriveManager.cpp +++ b/src/slic3r/GUI/RemovableDriveManager.cpp @@ -78,34 +78,13 @@ namespace { DEVINST get_dev_inst_by_device_number(long device_number, UINT drive_type, WCHAR* dos_device_name) { bool is_floppy = (wcsstr(dos_device_name, L"\\Floppy") != NULL); // TODO: could be tested better? - GUID* guid; - switch (drive_type) { - case DRIVE_REMOVABLE: - if (is_floppy) { - // we are interested only in SD cards or USB sticks - BOOST_LOG_TRIVIAL(debug) << "get_dev_inst_by_device_number failed: Drive is floppy disk."; - return 0; - //guid = (GUID*)&GUID_DEVINTERFACE_FLOPPY; - } else { - guid = (GUID*)&GUID_DEVINTERFACE_DISK; - } - break; - case DRIVE_FIXED: - // we are interested only in SD cards or USB sticks - BOOST_LOG_TRIVIAL(debug) << "get_dev_inst_by_device_number failed: Drive is harddisk."; - return 0; - //guid = (GUID*)&GUID_DEVINTERFACE_DISK; - //break; - case DRIVE_CDROM: - BOOST_LOG_TRIVIAL(debug) << "get_dev_inst_by_device_number failed: Drive is cd-rom."; - // we are interested only in SD cards or USB sticks - return 0; - //guid = (GUID*)&GUID_DEVINTERFACE_CDROM; - //break; - default: + + if (drive_type != DRIVE_REMOVABLE || is_floppy) { + BOOST_LOG_TRIVIAL(debug) << "get_dev_inst_by_device_number failed: Drive is not removable."; return 0; } + GUID* guid = (GUID*)& GUID_DEVINTERFACE_DISK; // Get device interface info set handle for all devices attached to system HDEVINFO h_dev_info = SetupDiGetClassDevs(guid, NULL, NULL, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE); @@ -228,7 +207,11 @@ int eject_inner(const std::string& path) // get drives's parent, e.g. the USB bridge, the SATA port, an IDE channel with two drives! DEVINST dev_inst_parent = 0; res = CM_Get_Parent(&dev_inst_parent, dev_inst, 0); - + if (res != CR_SUCCESS) { + BOOST_LOG_TRIVIAL(error) << GUI::format("Ejecting of %1% has failed: Failed to get drive parent. Code: %2%", path, res); + return 1; + } + #if 0 // loop with several tries and sleep (this is running on main UI thread) for (int i = 0; i < 3; ++i) { @@ -247,13 +230,22 @@ int eject_inner(const std::string& path) } #endif // 0 - // perform eject + // Perform eject over parent dev_inst. This works for usb drives and some SD cards. res = CM_Request_Device_EjectW(dev_inst_parent, &veto_type, veto_name, MAX_PATH, 0); + //res = CM_Query_And_Remove_SubTreeW(dev_inst_parent, &veto_type, veto_name, MAX_PATH, CM_REMOVE_UI_OK); + if (res == CR_SUCCESS && veto_type == PNP_VetoTypeUnknown) { + return 0; + } + BOOST_LOG_TRIVIAL(warning) << GUI::format("Ejecting of %1% has failed: Request to eject device has failed. Another request will follow. Veto type: %2%", path, veto_type); + + // But on some PC, SD cards ejects only with its own dev_inst. + res = CM_Request_Device_EjectW(dev_inst, &veto_type, veto_name, MAX_PATH, 0); + //res = CM_Query_And_Remove_SubTreeW(dev_inst_parent, &veto_type, veto_name, MAX_PATH, CM_REMOVE_UI_OK); if (res == CR_SUCCESS && veto_type == PNP_VetoTypeUnknown) { return 0; } - BOOST_LOG_TRIVIAL(error) << GUI::format("Ejecting of %1% has failed: Request to eject device has failed.", path); + BOOST_LOG_TRIVIAL(error) << GUI::format("Ejecting of %1% has failed: Request to eject device has failed. Veto type: %2%", path, veto_type); return 1; } @@ -272,6 +264,7 @@ void RemovableDriveManager::eject_drive() BOOST_LOG_TRIVIAL(info) << "Ejecting started"; std::scoped_lock lock(m_drives_mutex); auto it_drive_data = this->find_last_save_path_drive_data(); +#if 1 if (it_drive_data != m_current_drives.end()) { if (!eject_inner(m_last_save_path)) { // success @@ -291,6 +284,7 @@ void RemovableDriveManager::eject_drive() if (m_callback_evt_handler) wxPostEvent(m_callback_evt_handler, RemovableDriveEjectEvent(EVT_REMOVABLE_DRIVE_EJECTED, std::pair({"",""}, false))); } +#endif #if 0 // Implementation used until 2.5.x version // Some usb drives does not eject properly (still visible in file explorer). Some even does not write all content and eject. From 21c8cefef28a52c854a0613c95e77b5e7de0f3cd Mon Sep 17 00:00:00 2001 From: David Kocik Date: Mon, 16 Jan 2023 13:30:09 +0100 Subject: [PATCH 05/14] downloader - binary write on resume --- src/slic3r/GUI/DownloaderFileGet.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/slic3r/GUI/DownloaderFileGet.cpp b/src/slic3r/GUI/DownloaderFileGet.cpp index 10142c7c12..deac45ad55 100644 --- a/src/slic3r/GUI/DownloaderFileGet.cpp +++ b/src/slic3r/GUI/DownloaderFileGet.cpp @@ -129,7 +129,7 @@ void FileGet::priv::get_perform() if (m_written == 0) file = fopen(temp_path_wstring.c_str(), "wb"); else - file = fopen(temp_path_wstring.c_str(), "a"); + file = fopen(temp_path_wstring.c_str(), "ab"); assert(file != NULL); From e959fd0e58200b737952a36a65603c719f09225c Mon Sep 17 00:00:00 2001 From: David Kocik Date: Mon, 16 Jan 2023 16:17:20 +0100 Subject: [PATCH 06/14] Error dialog on download failure. --- src/slic3r/GUI/Downloader.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/slic3r/GUI/Downloader.cpp b/src/slic3r/GUI/Downloader.cpp index 157233076d..ff66b85c58 100644 --- a/src/slic3r/GUI/Downloader.cpp +++ b/src/slic3r/GUI/Downloader.cpp @@ -177,6 +177,7 @@ void Downloader::on_error(wxCommandEvent& event) BOOST_LOG_TRIVIAL(error) << "Download error: " << event.GetString(); NotificationManager* ntf_mngr = wxGetApp().notification_manager(); ntf_mngr->set_download_URL_error(id, boost::nowide::narrow(event.GetString())); + show_error(nullptr, format_wxstr(L"%1%\n%2%", _L("The download has failed:"), event.GetString())); } void Downloader::on_complete(wxCommandEvent& event) { From 52ea2edf842e81e0f81fcd8303b69d288d903ae3 Mon Sep 17 00:00:00 2001 From: Vojtech Bubnik Date: Mon, 16 Jan 2023 17:01:28 +0100 Subject: [PATCH 07/14] Fixed Layer::sort_perimeters_into_islands() for fuzzy skin: 1) An extrusion sample is taken for sorting extrusions into island so that a sample deep inside its island is taken with high probability. 2) With fuzzy skin active, the inexact search is done with bounding boxes inflated with the fuzzying distance. --- src/libslic3r/Layer.cpp | 86 ++++++++++++++++++++++++++--------------- 1 file changed, 55 insertions(+), 31 deletions(-) diff --git a/src/libslic3r/Layer.cpp b/src/libslic3r/Layer.cpp index 37a24b54c2..44fc18f917 100644 --- a/src/libslic3r/Layer.cpp +++ b/src/libslic3r/Layer.cpp @@ -568,19 +568,33 @@ void Layer::sort_perimeters_into_islands( const std::pair &extrusions = perimeter_and_gapfill_ranges[islice]; Point sample; bool sample_set = false; - if (! extrusions.first.empty()) { - sample = this_layer_region.perimeters().entities[*extrusions.first.begin()]->first_point(); - sample_set = true; - } else if (! extrusions.second.empty()) { - sample = this_layer_region.thin_fills().entities[*extrusions.second.begin()]->first_point(); - sample_set = true; - } else { - for (uint32_t iexpoly : fill_expolygons_ranges[islice]) - if (const ExPolygon &expoly = fill_expolygons[iexpoly]; ! expoly.empty()) { - sample = expoly.contour.points.front(); + // Take a sample deep inside its island if available. Infills are usually quite far from the island boundary. + for (uint32_t iexpoly : fill_expolygons_ranges[islice]) + if (const ExPolygon &expoly = fill_expolygons[iexpoly]; ! expoly.empty()) { + sample = expoly.contour.points.front(); + sample_set = true; + break; + } + if (! sample_set) { + // If there is no infill, take a sample of some inner perimeter. + for (uint32_t iperimeter : extrusions.first) + if (const ExtrusionEntity &ee = *this_layer_region.perimeters().entities[iperimeter]; ! ee.role().is_external()) { + sample = ee.first_point(); sample_set = true; break; } + if (! sample_set) { + if (! extrusions.second.empty()) { + // If there is no inner perimeter, take a sample of some gap fill extrusion. + sample = this_layer_region.thin_fills().entities[*extrusions.second.begin()]->first_point(); + sample_set = true; + } + if (! sample_set && ! extrusions.first.empty()) { + // As a last resort, take a sample of some external perimeter. + sample = this_layer_region.perimeters().entities[*extrusions.first.begin()]->first_point(); + sample_set = true; + } + } } // There may be a valid empty island. // assert(sample_set); @@ -729,27 +743,37 @@ void Layer::sort_perimeters_into_islands( perimeter_slices_queue.pop_back(); break; } - // If anything fails to be sorted in using exact fit, try to find a closest island. - auto point_inside_surface_dist2 = - [&lslices = this->lslices, &lslices_ex = this->lslices_ex, bbox_eps = scaled(this->object()->print()->config().gcode_resolution.value) + SCALED_EPSILON] - (const size_t lslice_idx, const Point &point) { - const BoundingBox &bbox = lslices_ex[lslice_idx].bbox; - return - point.x() < bbox.min.x() - bbox_eps || point.x() > bbox.max.x() + bbox_eps || - point.y() < bbox.min.y() - bbox_eps || point.y() > bbox.max.y() + bbox_eps ? - std::numeric_limits::max() : - (lslices[lslice_idx].point_projection(point) - point).cast().squaredNorm(); - }; - for (auto it_source_slice = perimeter_slices_queue.begin(); it_source_slice != perimeter_slices_queue.end(); ++ it_source_slice) { - double d2min = std::numeric_limits::max(); - int lslice_idx_min = -1; - for (int lslice_idx = int(lslices_ex.size()) - 1; lslice_idx >= 0; -- lslice_idx) - if (double d2 = point_inside_surface_dist2(lslice_idx, it_source_slice->second); d2 < d2min) { - d2min = d2; - lslice_idx_min = lslice_idx; - } - assert(lslice_idx_min != -1); - insert_into_island(lslice_idx_min, it_source_slice->first); + if (! perimeter_slices_queue.empty()) { + // If the slice sample was not fitted into any slice using exact fit, try to find a closest island as a last resort. + // This should be a rare event especially if the sample point was taken from infill or inner perimeter, + // however we may land here for external perimeter only islands with fuzzy skin applied. + // Check whether fuzzy skin was enabled and adjust the bounding box accordingly. + const PrintConfig &print_config = this->object()->print()->config(); + const PrintRegionConfig ®ion_config = this_layer_region.region().config(); + const auto bbox_eps = scaled( + EPSILON + print_config.gcode_resolution.value + + (region_config.fuzzy_skin.value == FuzzySkinType::None ? 0. : region_config.fuzzy_skin_thickness.value)); + auto point_inside_surface_dist2 = + [&lslices = this->lslices, &lslices_ex = this->lslices_ex, bbox_eps] + (const size_t lslice_idx, const Point &point) { + const BoundingBox &bbox = lslices_ex[lslice_idx].bbox; + return + point.x() < bbox.min.x() - bbox_eps || point.x() > bbox.max.x() + bbox_eps || + point.y() < bbox.min.y() - bbox_eps || point.y() > bbox.max.y() + bbox_eps ? + std::numeric_limits::max() : + (lslices[lslice_idx].point_projection(point) - point).cast().squaredNorm(); + }; + for (auto it_source_slice = perimeter_slices_queue.begin(); it_source_slice != perimeter_slices_queue.end(); ++ it_source_slice) { + double d2min = std::numeric_limits::max(); + int lslice_idx_min = -1; + for (int lslice_idx = int(lslices_ex.size()) - 1; lslice_idx >= 0; -- lslice_idx) + if (double d2 = point_inside_surface_dist2(lslice_idx, it_source_slice->second); d2 < d2min) { + d2min = d2; + lslice_idx_min = lslice_idx; + } + assert(lslice_idx_min != -1); + insert_into_island(lslice_idx_min, it_source_slice->first); + } } } From 3438b5184ed85cd78ba8f036646137092f13fd8e Mon Sep 17 00:00:00 2001 From: David Kocik Date: Mon, 16 Jan 2023 17:18:04 +0100 Subject: [PATCH 08/14] missing include --- src/slic3r/GUI/Downloader.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/slic3r/GUI/Downloader.cpp b/src/slic3r/GUI/Downloader.cpp index ff66b85c58..4ec4e04eb4 100644 --- a/src/slic3r/GUI/Downloader.cpp +++ b/src/slic3r/GUI/Downloader.cpp @@ -1,6 +1,7 @@ #include "Downloader.hpp" #include "GUI_App.hpp" #include "NotificationManager.hpp" +#include "format.hpp" #include #include From 02d5ad9d8ca4f7ce6179d3a86da39f98cdd50874 Mon Sep 17 00:00:00 2001 From: David Kocik Date: Mon, 16 Jan 2023 17:41:22 +0100 Subject: [PATCH 09/14] Downloader URL check --- src/slic3r/GUI/Downloader.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/slic3r/GUI/Downloader.cpp b/src/slic3r/GUI/Downloader.cpp index 4ec4e04eb4..ad46162cbf 100644 --- a/src/slic3r/GUI/Downloader.cpp +++ b/src/slic3r/GUI/Downloader.cpp @@ -146,14 +146,15 @@ void Downloader::start_download(const std::string& full_url) #else std::string escaped_url = FileGet::escape_url(full_url.substr(24)); #endif - // TODO: enable after testing - /* - if (!boost::starts_with(escaped_url, "https://media.printables.com/")) { - BOOST_LOG_TRIVIAL(error) << "Download won't start. Download URL doesn't point to https://media.printables.com : " << escaped_url; - // TODO: show error? + + if (!boost::starts_with(escaped_url, "https://files.printables.com") && !boost::starts_with(escaped_url, "https://dev-files.printables.com")) { + std::string msg = format(_L("Download won't start. Download URL doesn't point to https://files.printables.com : %1%"), escaped_url); + BOOST_LOG_TRIVIAL(error) << msg; + NotificationManager* ntf_mngr = wxGetApp().notification_manager(); + ntf_mngr->push_notification(NotificationType::CustomNotification, NotificationManager::NotificationLevel::RegularNotificationLevel, msg); return; } - */ + std::string text(escaped_url); m_downloads.emplace_back(std::make_unique(id, std::move(escaped_url), this, m_dest_folder)); NotificationManager* ntf_mngr = wxGetApp().notification_manager(); From 6047e82310f9e7d4ea053268f7e5cb18b45d9fc2 Mon Sep 17 00:00:00 2001 From: YuSanka Date: Tue, 17 Jan 2023 10:31:06 +0100 Subject: [PATCH 10/14] Deps: Updated wxWidgets --- deps/wxWidgets/wxWidgets.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/deps/wxWidgets/wxWidgets.cmake b/deps/wxWidgets/wxWidgets.cmake index 95f54c1a29..93d716c128 100644 --- a/deps/wxWidgets/wxWidgets.cmake +++ b/deps/wxWidgets/wxWidgets.cmake @@ -13,8 +13,8 @@ if (UNIX AND NOT APPLE) # wxWidgets will not use char as the underlying type for endif() prusaslicer_add_cmake_project(wxWidgets - URL https://github.com/prusa3d/wxWidgets/archive/34b524f8d5134a40a90d93a16360d533af2676ae.zip - URL_HASH SHA256=e76ca0dd998905c4dbb86f41f264e6e0468504dc2398f7e7e3bba8dc37de2f45 + URL https://github.com/prusa3d/wxWidgets/archive/9c12f4f269e545bacc7a6418bc82bf10db5842a6.zip + URL_HASH SHA256=901ae1148855507968d5ecd09b5a6ce2e24400f77ba67467165c55053ac213fd DEPENDS ${PNG_PKG} ${ZLIB_PKG} ${EXPAT_PKG} dep_TIFF dep_JPEG dep_NanoSVG CMAKE_ARGS -DwxBUILD_PRECOMP=ON From bcc193d8dc131fcb7fb6bd76edc2494852e2a0f3 Mon Sep 17 00:00:00 2001 From: rtyr <36745189+rtyr@users.noreply.github.com> Date: Tue, 17 Jan 2023 10:38:56 +0100 Subject: [PATCH 11/14] Added thumbnails for new printer models. --- .../profiles/Elegoo/NEPTUNE3MAX_thumbnail.png | Bin 0 -> 40643 bytes .../profiles/Elegoo/NEPTUNE3PLUS_thumbnail.png | Bin 0 -> 35858 bytes .../profiles/Elegoo/NEPTUNE3PRO_thumbnail.png | Bin 0 -> 36880 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 resources/profiles/Elegoo/NEPTUNE3MAX_thumbnail.png create mode 100644 resources/profiles/Elegoo/NEPTUNE3PLUS_thumbnail.png create mode 100644 resources/profiles/Elegoo/NEPTUNE3PRO_thumbnail.png diff --git a/resources/profiles/Elegoo/NEPTUNE3MAX_thumbnail.png b/resources/profiles/Elegoo/NEPTUNE3MAX_thumbnail.png new file mode 100644 index 0000000000000000000000000000000000000000..5b429ac32ab0f0ac6cb208629ff387d6b1f1162d GIT binary patch literal 40643 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 Ifvsi#2Scu7=l}o! literal 0 HcmV?d00001 diff --git a/resources/profiles/Elegoo/NEPTUNE3PLUS_thumbnail.png b/resources/profiles/Elegoo/NEPTUNE3PLUS_thumbnail.png new file mode 100644 index 0000000000000000000000000000000000000000..78293eebbdb64d1524d85a87d67df4702bad9721 GIT binary patch literal 35858 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%0D#Vw!hAHKbvK&|yDy%UL^iK+^&& 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

FRgB^PT_e&2M^R#^unB) zYgS=spa&i^p;QW)RPdD~lrT~WIBFFSlpv4V36@tu2;qSE8#}s4SV2M%1Ptgy69xq7 z)*BWKNE5)c0huQ-698!{gC+=_Vnk0EkY=iAi!(MMG@DZ((@pd>XV}_>b50&MzqD6h zYeE^d8g{gVmz6bQt!>56&NDP1$H>_6Ig9gjtQ}viv1|A4+6&&G8DqtmSa&q#7rOW? zq(PFT2t11B%&vhe&O7x(Ub-FaB!Mv*s)2z|L--y?7+9lKN^~%KFEMZqEunsMenR(x2Og2&0Hl zLSP6f(sRZcppptwNJt@}xtp1C43$CvsDwci&Os^ndW}Y-4q*HRZO~boxr^usO4>NB zVurqmA><53#PFB*V6eXj%ZB?AhCb3Xg;pAj5Cpyl&KUxa!S{GE(n4tsp(L0jpxnjM z6kwEq669l*o!M%4LrpZBLUa{=!U)UL10o4Gyn=?)KnaAxuHb~CbS{*1ZG+rG(boLpc4do+5k;W{1zc}R2n)@ z7@u!@OBY(Tm&~3taAb%eMV1dCw9Z2ah)h6A2`M!ib92aqfC+pT?0LuPsHW^j$vajw z(kwe{`TGT9(A?w2-5jiW7^rjf)qHrZ?KtP;IvUM38V!aj??=5_fz}4CxD7(Au~ACE zIRgiU&p9|_ZYr&YQuaeK4XSbj1E2xppg48!O>^jO3>YD{&&Zgjo zwj042tg+Tl+=eju`1fL>m-YR$G${_FihMG8de&;mTv~8r8PJL z7zqS&27T=US2}VdEy3eYHgsD24k%61#Qp|-0`)Q)6;vdy843U#ACBqbqr3!<{ zG6O9ophD=tLl}5q)OMz19xHm*II}ZaSe`R=RMb4FueF9G08!RUn-V`k!+-)%g~v6J z&fpjYU^zHLOa=XhL%7ZgN|~aDJYnEDzbR3k~ooegQj#@i@EUro%e+4 z9!lET1m#vK1!L3z0S4^YJZtpK{hky8em0L*Ge(*uSeReH*yuP~%{ZS)=*E4Npx`lD zb{GV4J_SIVf~3^@f->kW5BeyHOuR0#VOh;fm8}gIZve( zgvWu%w`wJvfpcmxnR3{eSbaRoC^(~F%oXOM$vhI*7*kLoC5j(6GA$JG0XEX-DAtMxed_4 zz;5&C61<`LW^lj%>_Ut!dl&HdmI+KuOhO6;nPq6TVq}>Fq1{TOrUNC8>0VcSzfA}! z;F*#djYhNod2P`9Hs4ue+4Lnwi&tx{*Bi5NR;DG@N3Cyz zCshtPOb412p0nT$JM`4`n1gcWptKWEmc4#HPdgu{CbjOsq}))A3sZB?osYsJ_O)HY z!Wnq^Jq*%JV(ad4JhWvB^RjMMt~%ka@!8$0o6UG#zB#0j?lkC3-n4TJ?dw!3;VGZ} z+~-e!?;rlx%}2WT)hL){l(+~1kV-;G`TWAr8z1 z0{WOdQ&S!xVgHT;6LYx#@m;v}fe~mHP7W_w@~>;x^nCHR-u;_f)^B*@9Ry?@B@~3v zBHNMAi=>oUPwgiCKKAG%AKJBZ=lehO;g4MX@&EO)+Yb+-(>chjVCmU-M*VUd^!7~; z(7HNs7S-u`K);%xaj7x73PTE(RdMvY<6pUmR~O#JdIOtzutuqra!|s0QZO4lab}IV zgI7%v8g+s-bREUI%R>_jBcNdj0Vl*_Y8V$B8tb{;V@)|nZj3eH!VPy)6UJp}if0f~ zY*ym}&m0?3`*H! ze$@Z}z5MjkzVo3EejqLEPGmISImD$miM#HUQgF`$Wz4;g!PL|=DwT>iGc$ARU;WRI ze*Z82{C`|~NDo~J7Rl9pSobK3{H>%55S_oY9$%+Ee*R#v;QquzmleX;9^VN*iyXMisppxPePc6tc=G`~I+B6#5c6{c5Ggcp&xIGg>aPFu_kS<# zO4}tdg-AgCN^u@A%D^~xu?YvG45W}Gutk=!u~C{N$zinwIb#h@DX2;zMFP!hFvk4y z81#3({Vl&QduZouduFB26*#A0l)+~lo(~w!VNwrDyWqwcNR{K*+@LMw(8fZ6ypWQA zpcL2;3NS;Vi3Z`!R`_V=I4sX)G42%L+y*g9X?WbeFVz}MQ)mZy2)D0egGB;uh&$#r zC_#~eD-WN{1HAmi$sb=%oSAOBEXQv+gd;AXMfo|M*C5^6%qV3=^6Z0i1X=^_B*VrX zqj+LZhBj)*vO1<`cHoJ}9z&9}!8u2zQhD!PFn{>rk9_2bYE=EfU;gD^e8gf~MJNoQ zGHiW%GenkHs6p&x*?bHIamu5F5M&~Q$2~|Xb{)=M)~s3G^gISnFl4EKF+h^0zdUKX zlTSH=oPPSL`zWQclwwc_*`FqD(r&jArwO!bL(>LeVo)NG#VttH1|cz$Yz`0r^8qi= z@C=2n7$8V=N}c;F%@;3%zK-W5C2!p^))LGuvK_hLiZw*{{4Rqn<8Bm&n!gYsri&S_ z-N|%dd=5|Un!~Fw>k<<=kk)$6W$ZOdpwh|A|c@x+r*nE+)RpaBRNI++T45(Pm3DJ2-=kmB$Svm#BJ zf#(_FNs=aQ5CB4mUmgto(wCf(0(fQq{lvr+9~v4M?&<9tAcXXTkQFdy5I`RxWT`P& zB1Cq2yWKu3ryOQ!icDl^w^~Tj1ieULNDHdnLOX6k=qB2Y2FAuFFgi8|LkVCkL|`=c zj-4By8@n}L1H#?ScG-zuBG%wa@6q~peC)m7u8r#MJ77Za44BNIpg_~}= z5wkNhHaj9Ek|ZhOfSH*YOwGl%?~(+VoNcZ7yk z|NXT_o9}LZ`e~ed?zz~rX9PX37Ms6&bL5W0z!Mxifd@aF*s2ml%Y}yv1Di%oHMAb1x5i%3^)TA0XS!% zl)z*5Gb^HbYxp_mgAh_c0#Y)poPB0;uj^7Hq$>~H8G}X%4yx%DaHGiYb^f2AJKoGQ zEmCP5n3%`Y`(n(gKGf>H*fTPMEnBxD69Q?HV%P3nn46u&!u%Yx)(9&VoB5#(^}az+ z%F%4hVaZTGJkNttx^M)_Xed<>@ogamj;o$u50{gs)TUV(r5GIOn_0eW>EF{oUXB(DODA{onrV&;GA=+`})_=Y&0OHgpigeFnVAV(=*ekMpZ=hI{NzhT|~`Y5rtx5p@H67gucE$L{WsH zp&LM=1y5X$L1Yxwa{#1>)tu+n-3AxhLDgNHf??aKfL{iIC0Gy5JE6BGmWI3 zU~X;}jYb3g{R4=qRVRW;;dwqZDC&_9Ea^SAp+D&GFY;K&&Qmuo*q6}KV0?Uh;K1nk z#n95mCji#1TZ?wP4Iu=SQpnN_wOSpudi@heq(J;K8u6F^?JNDeckfz1KR5p?J9g~+ ztBp@>^zOXtP7p#dGdoj|khIb0?dwIYR)dfdnGl$om;j*!-19*wg^~gb^Yhpx1f<9y zrGgL{k|cq&GYPF;G-WWx2AqQf1L&#uVC~v9Sh;c~`uh6d`#ySmdeGZjM_-+y-fPek zR=|meBq2yt1&vk;&-1Z-`3khFJ;>4+o)^O)h88ho(t=Vk7)g<|=HXL{N<_gt1`j@h zkidY$q&}3PU8U@@iBj6B2Ij}CEBCmx5A z3Il@!n3|kKtJ%c#^b{y#=&ARhcV#aa=kPd35CjM-A>ve_LOVHZ=0))Q8jR7!2lB7A zf-wrlXizAZ+duL>Z?!YbFDyWb6#Mq=#kzHC(Q37D;J_&EfAB$^dBzzKS%x%8`T^{J zUKsR0ees{e@v+gZPdxtE36DSiINI%Y!GSdfP)cHYT7xmRC}B^)IWGp-$L%)u?%q{o zL2^$=sm)Ed<2Hm8AUpu^ZG2%=29+hy+F+s4M6(rRVrmNBV~^WZo>ERm%((n)iZo4& z04J(OIQgWLuyVx;tXj1S>(-rwzP?^mt5x*(_almypm(?zK@gx?t08dGzETRb;}~(P zh1oO#Lxz;kf|$1bI+=&c5)jpbF)=*G5O^MZpCa%XIQ5_vhgKZMP)yIYuycPCBeNW} z-X&=17@MAY0yo}hu`#98k$fbilBiXypp;^8Xb8R^fKm$2X5jlCIOmw0oJK2-;d>sYrsn_{EG#q;x7#jNr(ukO6m7_? zSt21Rh%|-K8v73%!0z3o(8ymyS)C8mu@I4OC^Ds6x0jZ>mwkc}W2n)@YYtN$KoWm=qqq-1CH^v|n0$G;9 z^E?EBZ;xWmi|Abm2_Z6P@EHiT915)z80T2G?j*F^ZHu3^Mo&*KF1qMK^!N9pR;yun zco+i%1E|$(4A9$aH$)Hws8*}+eIH6nwA*cDS&DWXBS~UF#b7MPz4tzhMiL^5Y8crw zf}i~49^7~Dy@;w+5JJ$7V^k`U!@km$pev}?>j=XTzV9Q7B2>ZxRnw-0Z8? ztXcE=k&%(B<2YVNDS?y{E-O-US(btI+lreZ1V#!ZB7+}>V0pRNQ5}^Fy|PT$mMuaM zh5>4|8W>}i1MOZ@WGRFYMQ#}m|0-d#5tS%HwOWIcvZ!E!5G*V#;O1Lyfz}#XniW4M zE@zCK2Y4Uol_0^LT3Lpp8iZj8&N-CQ zNYc~>V#3GxpG5DSb z&-3AV7Sl6kKNBxNVmJh$pq_`QR>eSnFBr9or<4*XrI4l>lBA6^NgDVQ3wGTpqgeleaRB+Xt(jwm%bDLFf}!GR1WpCZqQ%; z^1rP}lJ@JAQX3BJ-?#oqb@wuD5sTPnaoon}*cf*09P|llXS!y}cu1Jv+XgH&e)ukNI!d}BP6E^qk z+t#5pN$qnfMG#gB112Qri7>FR3gQKj+=ny(NoB!_9-V7q-^>CsX?qq!kHcpaRApd9 zgVRoR%^F?^$|%11&40)A^mM^5?CrOf|$kMF%y_8l+lN6q(VPN3< zH5*8C?iz?QwBp!ed>23q!%+)6CPG;N?%Qsko*o-a&d$wYa&iWXbB`Y9SiXE1=big< zJowOK*t%^5#%QGNg%VlHpc$u7GA-`C7e>%hK#m?j0t4my*fBYYiOI<$RurE#gTC`e zce9<_x1FD5+119F4GZ&gXBDj;i`s(9FW zr{i26w&{6Zt~(5E417jFLBJ~^q~uU}mZFrq%{xStRxW#yYY|IFQe6zOpv4?Xe}l6HzDN!=yYAYgz2dg>8;&%=WcK8l^Y z_q$V0K#Epz52VtF<2IzQ&Zt(eqtS}-(wDsqOF75*_U%vu14#GoLx2AO>h+$Vk3oO! zYhNF1G#XcFtu}0W>dC8&EmfC{rTcTISGt?)TmE`(ZUNuD>2}2Jc0nGZr2I^ajWcP< zN|36nj7$h|{d~k#%Z#Njatcris^zFNCm7!&)Qa z5&9~fMpjBaFfS}1#oXLHsaMd?jI_?TK z&|$td==SC?22y0mQVFGmBeGM_paP>LM5_tKIivx=Jb=(n_emb%O97??h{_!G)m9d> zG_?lpniiyzV3a{ARY;jBr6HsM=L}le0J!)S-6 zu04&kQXtHS?|WTyx`U{{w8=H3RG6Qe?{-d<0!CqGW(LzUGsUR|*gnKEcGkwA8MmRN zfYQn;D=`Ks1on(f!e6@vno?*XFtlU|W@qO_HHtp>GaK}UmtXaURm+DjUAknT??gAs!)i94ld$I(STJe}Ym=0j1DE43)eq=h7I6qP$$iDaOZAtz!G zqd}xZl`{~VH-STvJ7z?1I`0?x&}-^+^5v?!5Qtu36x40gMvz6j6qPTp;q$FgmRnN z(Dnp)!>_JKPfr~`_~DN+>QZwg?-wIwo!4Bj)K78mOJi&k_wa< zgh7D*z8;rIub@&15xUe=;M)k__x%E29?Byx{(dpDEU%(*&Rqj2aS{CDbkJgICPff1 zRI61C4=+VuZ!h-m8^P91k0Z-6fKc=e3?qnY#dFfkYI7V+KF!r&D3mb>YkjU!fD|4( z7qZE3Byn&_NdX~J2w}Tss$n05&}g<|Ysk{(w+#$9_Yj1Yf^MpE2#_UMn6rUrPL9v* z)b~6PLa>l#Hcwq}qYr(pIpc-Hv1!6I9}NM(KnlBA7!NES_jvK#u+mqs_}+Z&Yf!C5 zh^iIz_SCFF8*NW30IxXbC3wl1r($k?0S`R*sLMqgh^#wR*NjsbX-_Fi8Ad0kP>muC z4i2IgMc^JsJ4rA;Hin*_I;v50Ou{sWH0b*udSpl&L(4Z-X@GLiW)?IsHa!om=bWKg z&y#Ch*e+@Uk8?y(h*~v5HOlj`Hvj5zYxJIPQ$~w2KG0f$Qf7-0o?oV|cXebOnh;}| zUd?6$S(bt_j%s}X3;TE51_3ECFtiM{o<2}U5e7XLU%E70-utB5gxT>#<3x z%%2B&IZ>Wc2H*FJ(<)b9EjD-;slMpPvqdMVK&b$w$^~dvKf{lDP_6LNsmtI8HCr^I z6yN@j+wjsePsaWO6PTWvKd577#fo89aSYK;GMBqgp+u+Pl4c5NnpkBerO`jok8{pF z7fLD2FDxK#HL-vHKD6U@0ojgK_JAJ-(;5H>sKTH9>4)$S|NL(lotP?QvAQ3d4}CXC zl6G1269y?T-vTgI^!t&5ZrRIgLXGmGJ&``hp1WuAs&Pg4(}bz3dp4aqFNp8W&=^J4g=%7h+i1LRvKxVU^Z@n zSg9*yA}c(fGC(2~7~`nddn}916>-ueLA%w2RW=&lmxX{*4^kEb zbwHV&s7pI?OvN>2%yzQpmCih$oYP!AKeWXlzXLadN?&nOtz5YbzUQIQN>Q!VFg-JG zTg}`is)PZ4@WXo{ge+yI4lbm$k_=j;HnuVbt5>hV-26P+ag2$HG0e}-b|7rgd9QzV zgQk=U0672Lvv9_lXW-OdS%=YysY6tSY|kAWuIAk95)v=XJ%Rxswe9j0hY&Vllpt=! z7Lz(7l|mp`Gz+EZl-A0oo+$0;L6_b)6SiF^%>>%**jD6}?09yU5~MCV&-?obIjBp| z9lH@G=4KGpdTiQFYsjQ+H=WxH-18BHAr|IZ5bahch;nJgp58tSpELwx`Zm4HZgRmPr6AI>4 zAY}#uU}X15_qkZ&Z4>t%^?DtZN{Er&dy7<^5^)DcDucM4z$k0TT{4OHIskKeIt|&IJJ6_=CI9KQM?VH*P(I8%NOwq?Lvu(p_ZQX=ie{SCtfV z%Kp3X0)Bu>6e6lbh+9px;wG{*h1LocSx2qb;|#YWU_LiJiKtfZA`f+8YeGS}hiXqB z(lkZVwinfRC27W8TYZjm7WeF7Q8OTbT2CM1Rs&JB)=2>}(`l1JZZL~8B(~5%DMj3B zq1jwO8n?hbi=7$cU7J*E)zP#gWr0Ws=~!NcWF0*Xr=vh!&mPbzQdtjdiC4Mj&aWAv z)?7M;0zhLSLt|l~%bkg=g|ZZMoCw?O>O6R*Qu%mqPyNsD zzxST@JKph*%9br#mN%Qte$M%_Mx(J@Yuy)BtGuVT_Y22j(1(PfZ+^#nhIWtaoh%9< z2OY;Q^6x?)8Vhq%&ckk=Oq2c9FN?C(Kw+hh0+$`p2rXZ45cPBOhn$0F)47iv7uKA!NWAnxZ3^0e(<{(ad zve=Z2L2Kg}emVKSONGN_DJUqhv{25yqU@c2aL$oPf@5JE6NXT6ReScA0W9!vMk`4o8>SV@I;lE4pw zLcXAo03f6gG}l@|D^*k&?N0MRxc%js7ZkM4ywC!zAsoj8gdnVRTJl|!H0sVvSE9Om ze|<<8;*JPTKK!WM%4#|R9-##Xym-$XUJ%$)J?ZF+*iArP zy3R7~Jl})o9Dwip@O_(p)IuN({7&gQs5w#i?vu4%i$E#G(%~U2EHn^?0SG17wR_(| z*FcG+J5`rS$Sf^_K`-?F>De^q!y5Fmr9)!Z$R5}IeCT|_;_^n8B#5GFC(3qxb@sx0 zi}tSRa(mh}OKPo<$rOoJML=Yn?nVw_7_~Pg2mMaN>2*RM0E4R zUBR^%)DHm>36=~GqcJ~^IF8YZ+vxA_#g?tR7AqyVX6D90T`4L{Y;nwJ^wjIOJ=Zzx(vxzIR&FYAbPry?dq!9wfedAPT?DJ|axt2uV;MEHf8Xifv|;xczi<8iZDzyN@__am5@ znsgZ#Cr!(2k;NE|BxxZ@+F;xR_qfH}l*11y#dEaQ#U?I3E7g^rv>RF#-!q!am#Hqn z#&Yv%Zr}yvb67jS7CCLz^E~*z4+DyJ8e_OW>Ppp#tOY{s#v`=zdFPH@T}J!#)}81| zKomi{=uXuMWh=cd7&HLd?e-f0-1&1i=$Y9$0|0{q{fMFng9H6Vt=@DAm7pk{az~QM zjhP%o?LInyFOJz#rXe4hVm&7VC&9fe=uVUn2%W`9Vfc2t6oO7bnuSxGAUXuaIWh>jAv~=WfupU_kKDW1I285C1pJ zH?vM)*mblxMI$8;hS4Fcwv&44O7)b}2}Uf!##u3b!oWaD%kInJfG325B!@QU&IYr; zyZz<6n>QT02kTc|M{_2=4n3LKfv=ix(-B>i{tY`3DC@;)NlXREtm|^&BjRWjcY- zQQIR;sS4A1U1IMX*rBK#i(rp!!&k1-CJNF}J`ATrinn;1b7o@-XYkc1D#puM6(kC& z+}x3aQkva4d{S_tZ8=&I0zZr}Gckt2;pJeQS$IQyRI7EA@`#WwE-=R6pTBYg+N~yL zCP&do67HYr^XvI20PDF3;6=7rVsv5D1n5M~IYp9MMNUTT zv6p8dq>zOGA)_6VkQCCTgAUe1UM!r_opJ#dA0SKr4K68y$n zuf>+F+c7ycgOR=ayMj@zONMVcMFThU3S-br?B;JT%s^x*+DY36r<|i+ubsJh^QKKdcMlB!JDz?bJ#oeQY1^pS z&7sJoMk_PW4&dk9+cZfI0l7$#2c?wQVnPtu?-_-Zy3jNBd=DWDt;&xhoi7e{at~>9 z(&Qk|U3}}<7zpoc-)~vx(8#m*+uU-#$Hi-Ry zKlU{$Mx;3qHuiTEC`0)Gw06TY$;O0AiY`u2cMs;8qz5Rm_S&9RDM-YS+_(53Wf*ibw z^9@-vXXIk+`GhJEP(z?KU{r^?tYii$v*Lsc!w`(KJD+W1J}MuY5~4_1hsynZp=YOx z2mz#-L?VUb{?dbp6~-7CrJx;KImkS8C{Yj*s$ShY~K7dglh#e zFrb9tzyIa`1I8#;EE`6v)w1G@_N+c+aGSN8j^;`Wu1GsgKnZ~mq6-z-OHCoO3|m`T{&}{= zxS*B8Xi;1wky?EfA*Jo)HUQ_|Km0uUSdVPbl**0=Bwg1&@HqmHgF>P)zW|X52r0Jp zEji(00LuZa0k90fDgYaL^5-P`3`TIlsi@qOHx7?vd`iBN$b|( zU#|NyF1qN#E{vY%>$TJv**|uq^iE+f^D|@M%*yum4X*}c96>;>F_)|Kc~?tVLELJh z#}A5JeYx;8F+Gp_?t1{!v-6fJY7G1!gfbdZWMG`5Z)gCudcEL^|nu;b~+<0C%y^s^a&m6Vd@09F`- z6A7@~04rgz8U#y>F>47SzH#|I+g;qLkXd?YV4G)wg3F+du@%X@6-ntLN18v^dRbbK z-(e2jZL@CmN}O@pDOfTzh@U?C1fJTw?GT&793G38K~UB}r4nLcVFB>!pxgt2oogbq zq%-`d^xW3M9G0zIU8)$OtDiGXVn^~KXf@}tXU|S(rBSQZQK{Bkt6Q0zPr4e1E0xf8 zm%C<$yl|73*$a6Bks-}8JMqh<6X$0qVWfprLP%7?0G{uEboZ{EfBu|%XhO&orSwPE z!;)pjn8=`0V$B0Cmk-Tg%-u(O!yQjQW&p&;^2_bm{HOx3$9){m=!r3=pHaHfz?=wR z*l2yCfmx-MTn2#?vm{*sAEfrBZ}SO2Mxq9tB|q49^2Q000T`NklD=LK%EmxM@@gAy}Ymcru<_1*y-ZHRWOxqy9pcG(z0YxEBegLALr zd5ipiP9!s!pP9gl<;yTPH;YV2RO$n+k%tuNOf2H1=P`>A36fUBis4wY+PC+N?0)kv z+@N0!>!j1q<^TpMAt!=hr7>6vV@?7vXn?f@SOE)p>P3pgagk{ba~NHO?NOq=8hB3B z5C$b&3NT{OYPJwnBM=w_9>dt=EZVIF)OrU&DT7c7B1=2`j?(;;xH*sE$P==tU+Ie0+@o);Vh@5+?a zeAto5GGu8CqHQ%Zs#e!;+q&hBpVvL)$IZA4;z-z`=;Ht$I)dT%5lU7PV5u=?EsS2G z6xI-^l}ci1mZm3>ChCg=+8o{xLcusgCA5-elrgj#v+$xmNNo*ENrEt{fe-^?6g)qK zO5swZj{H@c5w5ki6of@Hv}*yu7e40#v>SgKqy%OU?pId!17|Do144fsVAR!OZn$#pLgMs*_p|uL0DU5Kvo%G2*6qZ%M7rb0IRhz{YD#4hy>8` zj=}!kUwiD)M_R`X`USY&^0s%eZ98_I-`7(;cY1RCFH*(6ZHzesz>vf1LAh(CFzQM* zFROF~VM?y=VIc&2=>8w?eJ-x+afAK^ugkA^)$i}$zweUm+qS)X5o8&p zlq@&KtcJmIz^s%~oCshU zI)Xu8e95JMo@LoZ4?Xz6>z*&y^Eih71urG#xd3iE1Wum@Fb&|T!{y&W5OT&&JYnVX z1ERg~g*a}#-IUU9#8Fr%<3%S=;CqPUqo4X0Uvk+=N{SCv!tm1P)Ac-V(7)hifb%%x zpZ*yFQv;w4V9VC0fXgqxqBB3dEI4VWMh?n2oO8~(gmeB6ob!6E zR{OK(+ciCI(7(Wyrs=EGG`(-*#;4@}wmlO<2ql0vB_r-oe)G?rE*x9*D6jL*e`S>t ze8Kbhm6fn^@l7{=zkS@GkFR6L&q}_Bd;ErHidVggEMLB&(r&lcEG*2g)Jm<=+N>5*EGLAlX*HXf zl=3e&Zru0?0KE39*F{o_Z65b-^?d)s-~Zl!PCs9-@o^9R94;xvZ?&4ucQMA^pp?4Y z&V=!2G+Rzq4Mi|L(W0|9A6zzQ)H5`Z-)ZJw0@Me0-P^GMozW=k=cY z|DlxZg)z%(wd#cQfE z%ivzz|KHx-yG9YjVH}^`nc3OB+-bZQ6T##XmjW@vYHDM6eKIDT;PhiWV9~Py{PM)DTI~oJFESBtd+MhSTI?vb%S;FSD~VYi(m; z5u(iJFBl%a&99njZDH)?(%-zxb>02xbo$1>9PRDT^O~X4Ogbe|u2O&ZagMeO%gqY!B zI6x`A2BF&D-M#0T5Mnii@CQO@CSa^49*@7Jl%@$GQ%=>v!^1PvtJ1zHxYzc-OwM0EbPV@&)Q{sFNCnxsXDs^=S?(VTNq;r z8qlqbv7cecJB8o{git;nuX$3o?biDGy6NKgVnf~9IyN^yXK0$%Y}porD%|I|&O#)_ zdEfIsM?&0VVK|~F;8jz$>2Ax$-2F|PS|2qxZ#Zk)_IttknZd!^1OLOu@+e#ZwzjuJ z06+~?VSNOm80S2X5w<9$hcrSy`JQ(KYuZQO_c}1v$}9+C7-KI2k;ge-AVjZmU8k@r zv8tm|t=!6FGN&xlJe^9XZ<$MGUow>(_dIV00AMVW&gADy^Dhj;=m}`>5CG5@f#|{O zLZMX#EiId#-d<=~R!&jWKnT$(IEO$1InH^Ts;W?M(WOFYQs2*Mg!sPiQH=3w9`Xr< zPjM|7sE{u+j2)U3XNs=T$L|0D002ov JPDHLkV1i==9Q`#!HcuahWcMQKblQZxVnfGH~@sS1B?0sw#jFf#ln(jC16_%C5r5)#U?5)x2H zX9sgDTQdNFA;~XENM=wO5~lQdm_{8}Ad=U#T#-;RhF6Xt#;CA~K*x>E>o*mbm5iz$ zInr`)h)9e&3Xz3Ag&vaFUzDN6Vc9t;xh_`5rpSwdJ--}}nVs%OK%t6p>A982X$WH|m^|3tle}|E<*hC!JwVq^ zCz#gFS(J-wJ|8zEp0s&yRl7hcMgB89KUPEZ)#$);nBCp|TViUU1GzB&8=O0fHP6*kKM!BM#jmfoo6Ds$GT&Hu+IPe4Y<0>@!;_U85<^2lS_ra` zU#1JU>9$b2L4;2PjESMiiK4+3g~YMHjY8t$oYI+f8-B=;T5)CFtakT`7-W*@w$N#g zAO9mUomklP+44B&+j5z{#UZDDZ(!(w8rX}NcrmUGlP1fGA3Sy@5)$uwk^&?I4D>yH z2;`Ke_6-H{!{3J)C=H0rFF3iO4^)D`^+B3i5CQ0SkY1PBM8+0?--ieYRhs4Y!R+&z z3orf2;495gpsVY#{yNO++iv@oEdaZ(8!-0v*jva!_wb6rRhq4UTR-83-n)z_@V*RS z{~Q{0uMJ3-B+L4#^6T6`4&1xIrQrLwKYFyPa`cc=P?iaZ^Af6GHVW|NTb(tH6~6%k zxB#H8yvi*qrSApK$8~f;q<_`cWV$~lAl%6{6^@gKo#5^|GawA-E1{m^XN1Y3A4}Bf#F+QS)>knBvm?z9$dmr@D|c?kf-lCEcWaq z$?pPqY?DWR9^uau=m6jQ9fN!Vj_BygiK!O(<-sF@`Rh?nw@vFK5m8Y z-Jch2>dlxq{G)vVc_7DWVJfWx@|ppd_m5hPr{8M^K!uD}N$DV%rpuSH4MPVG6MT=d?(NETWv6DFHyCc{=*Fa-$&ei^;EHx>S#R^g=-3yfc0{tEOY>8pR-HNY@c@Op=A zb;wtc;+ok^@dAoZJ3pt~gz|OM60}?Hb zQ?PgKrVdC0WHhqce*D`ZQ0Sm70^M$7l*n_*vhkw^8C3@iyM02&JjG`X=DH;R{=%en z6pq*s1ZbmQoxSQ~z(^=4fFsJY)H1nngEWc7J?cV28{mUD$^6N~%V1w~LTu3N{1T5R zm(yrl8i5<^cccRTx_5KeK5}!dEaGVuz#xL(rw#|OH&*=b|4x=4@ChitNyR3xlOK)3JmT~ zk-*DumGN4a0qn%@MWcUDc@a-&hgwdMcfd4aW7o%nz zBrH${FoulfDg>ob>j;_Qt)Er8cYFxwP!VA9kt|D?JZ$Cv+3$u0kO^U1NZH6eO>i%i zIwZ@574B*fb^^cN_B+uKKIH9KONoWiZ#V)?F_flkhFIHFfK)`_;pAmNFo_L||K?E- zrrAzhh`-_4a{zqvLwks*sZ?Ww_CQC~rb4R?hOT%hIz?SwC!U5=k82-7U%ErsTnELE zuErSEpAro}bwuF4Ros#3r5sU-qBw@(XNThG4gbRvhNgJve^H}0ViEf-IUC!WEi!Ba z*>B?E8G#!!&gn#eJU~zXe)UCTksHX%ygJ+D2hsSSGrR(~^ZcAFWD1byt2sAF&GROp z*P~Qox;M)8R9*Q6A9OW?mL}aqPylVRmr|c3^cW?^$A12Ig4PsaKXLaZ;5YRLZ7X6V zZP5pjhW5O&CW`XSW9wnU&CtGn?mSC-iuqI0(;24J3mf2$r44JKILzl(Fiq(5mB&mJ zk&aopgkEOEX3-aa6RAxaK$?o8bCF~jLA?+Gb zWBP1L6<;No19rNRmck$7W*;c{iZ?6z%Wva6I?cVcqZ!~|ZzA}ibZR8+urxw?#}%Xn zk3JMp%gY;R+ixGy%**sXmy<_q^PGDy|20|?P0RB11^eygb?f|D*S#mDhA&>?2fw?O z*!nsLVGT0S#1f@4g2oX4nmt*C>SH$H>RIhSHzL|z^9`}M%qjosbl1||*# zlyU;<9(SKTdv5gPvt77K6>_7a-1g>vwIL1XH}5?gI3 zT&f!X^WWhm@Lhdl7r?YYs?m+%;}P|u^(p4h-L@48@BFFX&QDcO zlA&*mUEM~Mb#-IT)>^-HR3fy?BX9er9uQmomj=RsUEu9l39Q5RGR$^>l}7=kwM3u! znGl zk$b>*Kkt`}shqxvxr-TOks{&!Ji5aFv^)Y4^rwO(1pkY6Zfa>ZK5eVFbbyIkaYeiG zBZ`AfwJY^o-D?n_JZKfh82{xpq`=`{D8P)MzDbu%KZHgX{L_;kLa!6lLIDcyc>Y~U zGuBOgk~GHEdhKW_^a?{iur>Rsz=1AU=2^!Iv>)fVa)5B}uL@e6W@gD<*t=g)tDjUalO81`cT1Q)~Mk^59Nv2IcbGw(8hgQ>r(S|Gaf z@nm*sGxq!(tLfA-h)%>J>KI>uZj8^Pe+rn9L%q4c8C`1pJrvj{NRpPNvfsq+I^Cn%1xq0e5N2(Fm8loS#u24P4Zxc*Zj?oDKFNzV$pyPx`-c5|#4w3fj|~S?0A49PVwmf2TO^n)xF3C{0<#Ig zB;H5R8d>*ju=G5nObrMK@aq^@C%EMqeilGhSN|#j;EeXQUND`-M64_YLTBClAjT1^ z|5a{^;oJx`O{^NrF6VK|@qFK8YBlt)NgI@&y<3x;cc?_vL8g7G>~fpl{lYG#*pk;*o3FuX4+A;|D8cBAW5zcbVAseH6}(THqmmN zWS>>LJ|F)~@4v;RaNH4Z`@!bry!AGAnp|)!P!aeSn=dP;38&x2eg!Eb#Fznjx11v1 zTWLH2QO&)wcY)wxVy4AYNduBFXbc8aT+7D1YPT1G!)3w3vArqyL7nwA>=VR+q9C|!u_{u{`g{_;|*?6g~sv%v}qHeB`=`XltFEo6ZE=-7VJL_IA8(X2HoL(H+9^ZoJ30~F{v_o~=-zAtksA9^ zU%I%XM>`HSkUe7AmvKTImA~B2myT~Ym4MX%CTYu}NY?FdazdO$aTs_ljADaSaRFOO z-0}^abqy0RUa-7GgiL))b=MyWF&tk6Iy7)nU;9wM5pk(`)+86-8}dMa9I-_zC)NnB zXth=}yCOhYoA6CEZLQ};SXu9fd4N#y&b5FI=cOLKwtfcH)4M5t zv(`X&oicai=GO*T|LG={%Y-U8g^+jWfX9T~!TSjMvQo{PbY8n8= z88*F7D9C+IeHo%-5r*VY zBCfD73s0!}xf|O#5)f2c6#&X;8nf=)>MB|aNqKd(q%3c6m_-h z|MaeluGeb<;j3K@MWNHuGN#)>6=FPe^YeE;HMT1H;oR&Wf1Op=&!pS{LwqPGe;>m; z``V&vYwZE#2L}f-Wea1)3+3hIfyNo0e+wg=78ebXI7#?BJH8)BN!>kM8-^4ycs^tv zIsU15`$mU!*ru*Gs8^_G%v>tbLKbWH$3a6PEs5}!k$TKZAkWvY(>!_FFPmgU6e@w6 zL~Phs9l)A7`^^*4CTlYV;A>|ghC^xiJcq1%5vTh>VN51gr!s21(zM5qD5?kMY4LiBE#6Q zNb3-X%49v!JiTPY5c%jI%bDKevLy?Jh6exjWjiF6>?wN=0))2NT~|i4@3s`y_MxX%HjOG@4_1B5`W2Z z$7NvfP?}v^mP5f8cv#UA^t)-sk4!LSJ#6I{g=UwFU3kl>m}MiY*x!e>OAR_bWOxhG zsqFJ-zBA${hncu#fJC;teuLug%4FTMRWy8ho_@Z@a*e!OT*i{x_tfBE^zwl%#6X5< zmN%jm05KdfyS}I*unI)K9KGn;Ar%LVAjJT2c7Td+FGcPfvIeR4AGV@O%7R3x<&vkO zTr9H={i)2el+`hrnVET-Pc4OXr%0DDx7UqQts5;AUZ=MxpC@3sFcGUCO?3+KsrduM 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 Date: Tue, 17 Jan 2023 10:40:01 +0100 Subject: [PATCH 12/14] Added new printer models --- resources/profiles/Elegoo.idx | 2 + resources/profiles/Elegoo.ini | 90 +++++++++++++++++++++++++---------- 2 files changed, 66 insertions(+), 26 deletions(-) diff --git a/resources/profiles/Elegoo.idx b/resources/profiles/Elegoo.idx index 6fcdedd3f8..8e95dcec9a 100644 --- a/resources/profiles/Elegoo.idx +++ b/resources/profiles/Elegoo.idx @@ -1,3 +1,5 @@ +min_slic3r_version = 2.6.0-alpha1 +1.0.2 Added new printer models. min_slic3r_version = 2.5.0-alpha3 1.0.1 Decreased bed size to 220x220. 1.0.0 Initial version diff --git a/resources/profiles/Elegoo.ini b/resources/profiles/Elegoo.ini index d9053e5a24..2a734002e6 100644 --- a/resources/profiles/Elegoo.ini +++ b/resources/profiles/Elegoo.ini @@ -6,7 +6,7 @@ name = Elegoo # Configuration version of this file. Config file will only be installed, if the config_version differs. # This means, the server may force the PrusaSlicer configuration to be downgraded. -config_version = 1.0.1 +config_version = 1.0.2 config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/Elegoo/ # The printer models will be shown by the Configuration Wizard in this order, @@ -58,6 +58,33 @@ bed_model = bed_texture = default_materials = Generic PLA @ELEGOO; Generic PETG @ELEGOO; Generic ABS @ELEGOO +[printer_model:NEPTUNE3MAX] +name = Elegoo Neptune-3 Max +variants = 0.4 +technology = FFF +family = NEPTUNE +bed_model = +bed_texture = +default_materials = Generic PLA @ELEGOO; Generic PETG @ELEGOO; Generic ABS @ELEGOO + +[printer_model:NEPTUNE3PLUS] +name = Elegoo Neptune-3 Plus +variants = 0.4 +technology = FFF +family = NEPTUNE +bed_model = +bed_texture = +default_materials = Generic PLA @ELEGOO; Generic PETG @ELEGOO; Generic ABS @ELEGOO + +[printer_model:NEPTUNE3PRO] +name = Elegoo Neptune-3 Pro +variants = 0.4 +technology = FFF +family = NEPTUNE +bed_model = +bed_texture = +default_materials = Generic PLA @ELEGOO; Generic PETG @ELEGOO; Generic ABS @ELEGOO + [printer_model:NEPTUNEX] name = Elegoo Neptune-X variants = 0.4 @@ -428,26 +455,9 @@ retract_length = 5 retract_speed = 60 deretract_speed = 40 retract_before_wipe = 70% -start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S120 ; set temporary nozzle temp to prevent oozing during homing and auto bed leveling\nM140 S[first_layer_bed_temperature] ; set final bed temp\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[first_layer_temperature] ; set final nozzle temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp to stabilize\nM109 S[first_layer_temperature] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0 +start_gcode = M413 S0 ; disable Power Loss Recovery\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S120 ; set temporary nozzle temp to prevent oozing during homing and auto bed leveling\nM140 S[first_layer_bed_temperature] ; set final bed temp\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[first_layer_temperature] ; set final nozzle temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp to stabilize\nM109 S[first_layer_temperature] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0 end_gcode = {if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+2, max_print_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < max_print_height-10}G1 Z{z_offset+min(max_layer_z+70, max_print_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{max_print_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors - -# Intended for printers with a smaller bed -# [printer:*fastabl*] -# start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S120 ; set temporary nozzle temp to prevent oozing during homing and auto bed leveling\nM140 S[first_layer_bed_temperature] ; set final bed temp\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\nG29 ; auto bed levelling\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[first_layer_temperature] ; set final nozzle temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp to stabilize\nM109 S[first_layer_temperature] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0 - -# Intended for printers with a larger bed -# [printer:*slowabl*] -# start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S120 ; set temporary nozzle temp to prevent oozing during homing and auto bed leveling\nM140 S[first_layer_bed_temperature] ; set final bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp to stabilize\nG28 ; home all axis\nG29 ; auto bed levelling\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[first_layer_temperature] ; set final nozzle temp\nM109 S[first_layer_temperature] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0 - -# Intended for printers with vendor official firmware verified to support M25 -# [printer:*pauseprint*] -# pause_print_gcode = M25 ; pause print - -# Intended for printers where the Z-axis lowers the print bed during printing -# [printer:*invertedz*] -# end_gcode = {if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+2, max_print_height)} F600{endif} ; Move print bed down\nG1 X50 Y50 F{travel_speed*60} ; present print\n{if max_layer_z < max_print_height-10}G1 Z{z_offset+max_print_height-10} F600{endif} ; Move print bed down further down\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors - # Intended for printers with dual extruders and a single hotend/nozzle [printer:*dualextruder*] single_extruder_multi_material = 1 @@ -473,7 +483,7 @@ retract_restart_extra = 0,0 retract_restart_extra_toolchange = 0,0 retract_speed = 60,60 wipe = 1,1 -start_gcode = T[initial_tool] ; set active extruder\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S{first_layer_bed_temperature[0]} ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing and auto bed leveling\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\n;G29 ; auto bed levelling - remove ; at beginning of line to enable\n;M420 S1 ; enable mesh - remove ; at beginning of line to enable\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S{first_layer_temperature[0]} ; set final nozzle temp\nM190 S{first_layer_bed_temperature[0]} ; wait for bed temp to stabilize\nM109 S{first_layer_temperature[0]} ; wait for nozzle temp to stabilize\nG1 Z0.28 F240 ; move down to prime nozzle\nG92 E0 ; reset extruder\nG1 E90 ; load filament\nG92 E0 ; reset extruder\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000 ; move over for second prime line\nG92 E0 ; reset extruder\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0 ; reset extruder +start_gcode = T[initial_tool] ; set active extruder\nM413 S0 ; disable Power Loss Recovery\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S{first_layer_bed_temperature[0]} ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing and auto bed leveling\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\n;G29 ; auto bed levelling - remove ; at beginning of line to enable\n;M420 S1 ; enable mesh - remove ; at beginning of line to enable\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S{first_layer_temperature[0]} ; set final nozzle temp\nM190 S{first_layer_bed_temperature[0]} ; wait for bed temp to stabilize\nM109 S{first_layer_temperature[0]} ; wait for nozzle temp to stabilize\nG1 Z0.28 F240 ; move down to prime nozzle\nG92 E0 ; reset extruder\nG1 E90 ; load filament\nG92 E0 ; reset extruder\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000 ; move over for second prime line\nG92 E0 ; reset extruder\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0 ; reset extruder end_gcode = {if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+2, max_print_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\nG1 E-80 F2000 ; unload filament\n{if max_layer_z < max_print_height-10}G1 Z{z_offset+min(max_layer_z+70, max_print_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{max_print_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors # Copy of Creality CR-X config for the Neptune 2D (dual extruder, single hotend) @@ -482,29 +492,57 @@ end_gcode = {if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+2, inherits = Elegoo Neptune-2; *dualextruder* retract_length = 6,6 printer_model = NEPTUNE2D -printer_notes = Do not remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_ELEGOO\nPRINTER_MODEL_NEPTUNE2D\nPRINTER_HAS_BOWDEN +printer_notes = Do not remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_ELEGOO\nPRINTER_MODEL_NEPTUNE2D [printer:Elegoo Neptune-2S] inherits = Elegoo Neptune-2 printer_model = NEPTUNE2S -printer_notes = Do not remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_ELEGOO\nPRINTER_MODEL_NEPTUNE2D\nPRINTER_HAS_BOWDEN +printer_notes = Do not remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_ELEGOO\nPRINTER_MODEL_NEPTUNE2S [printer:Elegoo Neptune-X] inherits = Elegoo Neptune-2 max_print_height = 300 printer_model = NEPTUNEX -printer_notes = Do not remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_ELEGOO\nPRINTER_MODEL_NEPTUNE2D\nPRINTER_HAS_BOWDEN +printer_notes = Do not remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_ELEGOO\nPRINTER_MODEL_NEPTUNEX [printer:Elegoo Neptune-3] inherits = Elegoo Neptune-2 max_print_height = 280 -start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S120 ; set temporary nozzle temp to prevent oozing during homing and auto bed leveling\nM140 S[first_layer_bed_temperature] ; set final bed temp\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\nG29 ; run abl mesh\nM420 S1 ; load mesh\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[first_layer_temperature] ; set final nozzle temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp to stabilize\nM109 S[first_layer_temperature] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0 +start_gcode = M413 S0 ; disable Power Loss Recovery\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S120 ; set temporary nozzle temp to prevent oozing during homing and auto bed leveling\nM140 S[first_layer_bed_temperature] ; set final bed temp\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\n;G29 ; run abl mesh\nM420 S1 ; load mesh\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[first_layer_temperature] ; set final nozzle temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp to stabilize\nM109 S[first_layer_temperature] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0 printer_model = NEPTUNE3 -printer_notes = Do not remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_ELEGOO\nPRINTER_MODEL_NEPTUNE2D\nPRINTER_HAS_BOWDEN +printer_notes = Do not remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_ELEGOO\nPRINTER_MODEL_NEPTUNE3 [printer:Elegoo Neptune-1] inherits = Elegoo Neptune-2 bed_shape = 0x0,210x0,210x210,0x210 max_print_height = 200 printer_model = NEPTUNE1 -printer_notes = Do not remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_ELEGOO\nPRINTER_MODEL_NEPTUNE2D\nPRINTER_HAS_BOWDEN +printer_notes = Do not remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_ELEGOO\nPRINTER_MODEL_NEPTUNE1 + +[printer:Elegoo Neptune-3 Max] +inherits = Elegoo Neptune-3 +retract_length = 2.5 +retract_speed = 25 +bed_shape = 0x0,420x0,420x420,0x420 +max_print_height = 500 +printer_model = NEPTUNE3MAX +printer_notes = Do not remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_ELEGOO\nPRINTER_MODEL_NEPTUNE3MAX + +[printer:Elegoo Neptune-3 Plus] +inherits = Elegoo Neptune-3 +retract_length = 2.5 +retract_speed = 25 +bed_shape = 0x0,320x0,320x320,0x320 +max_print_height = 400 +printer_model = NEPTUNE3PLUS +printer_notes = Do not remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_ELEGOO\nPRINTER_MODEL_NEPTUNE3PLUS + +[printer:Elegoo Neptune-3 Pro] +inherits = Elegoo Neptune-3 +bed_shape = 0x0,225x0,225x225,0x225 +max_print_height = 280 +retract_length = 2.5 +retract_speed = 25 +printer_model = NEPTUNE3PRO +printer_notes = Do not remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_ELEGOO\nPRINTER_MODEL_NEPTUNE3PRO + From fc3cdbc99dea85c15ea3b3f23416f88f3f5c20c3 Mon Sep 17 00:00:00 2001 From: rtyr <36745189+rtyr@users.noreply.github.com> Date: Tue, 17 Jan 2023 12:17:41 +0100 Subject: [PATCH 13/14] sync with PrusaSlicer-settings --- resources/profiles/Creality.idx | 4 + resources/profiles/Creality.ini | 554 +++++++++++++++++++++++++++++--- 2 files changed, 513 insertions(+), 45 deletions(-) diff --git a/resources/profiles/Creality.idx b/resources/profiles/Creality.idx index 80d951b0ba..cd44bb1f1d 100644 --- a/resources/profiles/Creality.idx +++ b/resources/profiles/Creality.idx @@ -1,4 +1,8 @@ +min_slic3r_version = 2.6.0-alpha0 +0.2.6 Add Ender-5 Pro, Ender-5 S1, Sermoon-V1, Sermoon-V1 Pro. Unlock HIGHSPEED/SUPERSPEED presets for Ender-5 S1/Ender-6/Ender-7. min_slic3r_version = 2.5.0-alpha0 +0.2.4 Add SPEED presets. More conservative extruder clearance. +0.2.3 Improve start_gcode's. Object labeling. MatterHackers filament profiles. 0.2.2 General improvements. 0.2.1 Added Ender 3 Neo and Ender 3 S1 Plus. Various updates. 0.2.0 Added alternative nozzle support diff --git a/resources/profiles/Creality.ini b/resources/profiles/Creality.ini index 4fab957e29..b617e2e6d0 100644 --- a/resources/profiles/Creality.ini +++ b/resources/profiles/Creality.ini @@ -5,7 +5,7 @@ name = Creality # Configuration version of this file. Config file will only be installed, if the config_version differs. # This means, the server may force the PrusaSlicer configuration to be downgraded. -config_version = 0.2.2 +config_version = 0.2.6 # Where to get the updates from? config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/Creality/ # changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1% @@ -131,14 +131,14 @@ bed_model = ender3_bed.stl bed_texture = ender3.svg default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY -#[printer_model:ENDER5PRO] -#name = Creality Ender-5 Pro -#variants = 0.4; 0.3; 0.5; 0.6 -#technology = FFF -#family = ENDER -#bed_model = ender3_bed.stl -#bed_texture = ender3.svg -#default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY +[printer_model:ENDER5PRO] +name = Creality Ender-5 Pro +variants = 0.4; 0.3; 0.5; 0.6 +technology = FFF +family = ENDER +bed_model = ender3_bed.stl +bed_texture = ender3.svg +default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY [printer_model:ENDER5PLUS] name = Creality Ender-5 Plus @@ -149,6 +149,15 @@ bed_model = ender5plus_bed.stl bed_texture = ender5plus.svg default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY +[printer_model:ENDER5S1] +name = Creality Ender-5 S1 +variants = 0.4; 0.3; 0.5; 0.6 +technology = FFF +family = ENDER +bed_model = ender3_bed.stl +bed_texture = ender3.svg +default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY + [printer_model:ENDER6] name = Creality Ender-6 variants = 0.4; 0.3; 0.5; 0.6 @@ -394,6 +403,28 @@ default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @ +[printer_model:SERMOONV1] +name = Creality Sermoon-V1 +variants = 0.4; 0.3; 0.5; 0.6 +technology = FFF +family = SERMOON +bed_model = sermoonv1_bed.stl +bed_texture = sermoonv1.svg +default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY + + + +[printer_model:SERMOONV1PRO] +name = Creality Sermoon-V1 Pro +variants = 0.4; 0.3; 0.5; 0.6 +technology = FFF +family = SERMOON +bed_model = sermoonv1_bed.stl +bed_texture = sermoonv1.svg +default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY + + + # All presets starting with asterisk, for example *common*, are intermediate and they will # not make it into the user interface. @@ -416,8 +447,8 @@ external_fill_pattern = rectilinear external_perimeters_first = 0 external_perimeter_speed = 25 extra_perimeters = 0 -extruder_clearance_height = 34 -extruder_clearance_radius = 47 +extruder_clearance_height = 25 +extruder_clearance_radius = 55 fill_angle = 45 fill_density = 15% fill_pattern = grid @@ -425,6 +456,7 @@ first_layer_height = 0.2 first_layer_speed = 20 gap_fill_speed = 30 gcode_comments = 0 +gcode_label_objects = 1 infill_every_layers = 1 infill_extruder = 1 infill_first = 0 @@ -489,7 +521,62 @@ wipe_tower_x = 170 wipe_tower_y = 140 xy_size_compensation = 0 +[print:*speed*] +perimeter_speed = 60 +small_perimeter_speed = 30 +external_perimeter_speed = 30 +infill_speed = 60 +solid_infill_speed = 60 +top_solid_infill_speed = 30 +support_material_speed = 40 +support_material_interface_speed = 100% +bridge_speed = 25 +ironing_speed = 15 +travel_speed = 150 +travel_speed_z = 0 +first_layer_speed = 20 +first_layer_speed_over_raft = 30 +[print:*highspeed*] +perimeter_speed = 120 +small_perimeter_speed = 60 +external_perimeter_speed = 60 +infill_speed = 120 +solid_infill_speed = 120 +top_solid_infill_speed = 60 +support_material_speed = 80 +support_material_interface_speed = 100% +bridge_speed = 50 +ironing_speed = 30 +travel_speed = 150 +travel_speed_z = 0 +first_layer_speed = 40 +first_layer_speed_over_raft = 60 + +[print:*superspeed*] +perimeter_speed = 180 +small_perimeter_speed = 90 +external_perimeter_speed = 90 +infill_speed = 180 +solid_infill_speed = 180 +top_solid_infill_speed = 90 +support_material_speed = 120 +support_material_interface_speed = 100% +bridge_speed = 75 +ironing_speed = 45 +travel_speed = 250 +travel_speed_z = 0 +first_layer_speed = 60 +first_layer_speed_over_raft = 90 + + + +[print:*0.06mm*] +inherits = *common* +layer_height = 0.06 +bottom_solid_layers = 11 +top_solid_layers = 13 +bridge_flow_ratio = 0.70 [print:*0.08mm*] inherits = *common* @@ -609,6 +696,16 @@ support_material_extrusion_width = 0.54 +[print:0.06 mm ULTRADETAIL (0.3 mm nozzle) @CREALITY] +inherits = *0.06mm*; *0.3nozzle* +compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.3 and printer_notes=~/.*PRINTER_HAS_ULTRADETAIL.*/ + +[print:0.06 mm ULTRADETAIL (0.4 mm nozzle) @CREALITY] +inherits = *0.06mm*; *0.4nozzle* +compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.4 and printer_notes=~/.*PRINTER_HAS_ULTRADETAIL.*/ + + + [print:0.08 mm SUPERDETAIL (0.3 mm nozzle) @CREALITY] inherits = *0.08mm*; *0.3nozzle* compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.3 @@ -685,6 +782,60 @@ compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle +[print:0.16 mm OPTIMAL SPEED (0.3 mm nozzle) @CREALITY] +inherits = *0.16mm*; *0.3nozzle*; *speed* +compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.3 + +[print:0.16 mm OPTIMAL SPEED (0.4 mm nozzle) @CREALITY] +inherits = *0.16mm*; *0.4nozzle*; *speed* +compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.4 + +[print:0.16 mm OPTIMAL SPEED (0.5 mm nozzle) @CREALITY] +inherits = *0.16mm*; *0.5nozzle*; *speed* +compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.5 + +[print:0.16 mm OPTIMAL SPEED (0.6 mm nozzle) @CREALITY] +inherits = *0.16mm*; *0.6nozzle*; *speed* +compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.6 + + + +[print:0.16 mm OPTIMAL HIGHSPEED (0.3 mm nozzle) @CREALITY] +inherits = *0.16mm*; *0.3nozzle*; *highspeed* +compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.3 and printer_notes=~/.*PRINTER_HAS_HIGHSPEED.*/ + +[print:0.16 mm OPTIMAL HIGHSPEED (0.4 mm nozzle) @CREALITY] +inherits = *0.16mm*; *0.4nozzle*; *highspeed* +compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.4 and printer_notes=~/.*PRINTER_HAS_HIGHSPEED.*/ + +[print:0.16 mm OPTIMAL HIGHSPEED (0.5 mm nozzle) @CREALITY] +inherits = *0.16mm*; *0.5nozzle*; *highspeed* +compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.5 and printer_notes=~/.*PRINTER_HAS_HIGHSPEED.*/ + +[print:0.16 mm OPTIMAL HIGHSPEED (0.6 mm nozzle) @CREALITY] +inherits = *0.16mm*; *0.6nozzle*; *highspeed* +compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.6 and printer_notes=~/.*PRINTER_HAS_HIGHSPEED.*/ + + + +[print:0.16 mm OPTIMAL SUPERSPEED (0.3 mm nozzle) @CREALITY] +inherits = *0.16mm*; *0.3nozzle*; *superspeed* +compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.3 and printer_notes=~/.*PRINTER_HAS_SUPERSPEED.*/ + +[print:0.16 mm OPTIMAL SUPERSPEED (0.4 mm nozzle) @CREALITY] +inherits = *0.16mm*; *0.4nozzle*; *superspeed* +compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.4 and printer_notes=~/.*PRINTER_HAS_SUPERSPEED.*/ + +[print:0.16 mm OPTIMAL SUPERSPEED (0.5 mm nozzle) @CREALITY] +inherits = *0.16mm*; *0.5nozzle*; *superspeed* +compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.5 and printer_notes=~/.*PRINTER_HAS_SUPERSPEED.*/ + +[print:0.16 mm OPTIMAL SUPERSPEED (0.6 mm nozzle) @CREALITY] +inherits = *0.16mm*; *0.6nozzle*; *superspeed* +compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.6 and printer_notes=~/.*PRINTER_HAS_SUPERSPEED.*/ + + + [print:0.20 mm NORMAL (0.3 mm nozzle) @CREALITY] inherits = *0.20mm*; *0.3nozzle* compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.3 @@ -704,6 +855,60 @@ compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle +[print:0.20 mm NORMAL SPEED (0.3 mm nozzle) @CREALITY] +inherits = *0.20mm*; *0.3nozzle*; *speed* +compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.3 + +[print:0.20 mm NORMAL SPEED (0.4 mm nozzle) @CREALITY] +inherits = *0.20mm*; *0.4nozzle*; *speed* +compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.4 + +[print:0.20 mm NORMAL SPEED (0.5 mm nozzle) @CREALITY] +inherits = *0.20mm*; *0.5nozzle*; *speed* +compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.5 + +[print:0.20 mm NORMAL SPEED (0.6 mm nozzle) @CREALITY] +inherits = *0.20mm*; *0.6nozzle*; *speed* +compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.6 + + + +[print:0.20 mm NORMAL HIGHSPEED (0.3 mm nozzle) @CREALITY] +inherits = *0.20mm*; *0.3nozzle*; *highspeed* +compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.3 and printer_notes=~/.*PRINTER_HAS_HIGHSPEED.*/ + +[print:0.20 mm NORMAL HIGHSPEED (0.4 mm nozzle) @CREALITY] +inherits = *0.20mm*; *0.4nozzle*; *highspeed* +compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.4 and printer_notes=~/.*PRINTER_HAS_HIGHSPEED.*/ + +[print:0.20 mm NORMAL HIGHSPEED (0.5 mm nozzle) @CREALITY] +inherits = *0.20mm*; *0.5nozzle*; *highspeed* +compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.5 and printer_notes=~/.*PRINTER_HAS_HIGHSPEED.*/ + +[print:0.20 mm NORMAL HIGHSPEED (0.6 mm nozzle) @CREALITY] +inherits = *0.20mm*; *0.6nozzle*; *highspeed* +compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.6 and printer_notes=~/.*PRINTER_HAS_HIGHSPEED.*/ + + + +[print:0.20 mm NORMAL SUPERSPEED (0.3 mm nozzle) @CREALITY] +inherits = *0.20mm*; *0.3nozzle*; *superspeed* +compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.3 and printer_notes=~/.*PRINTER_HAS_SUPERSPEED.*/ + +[print:0.20 mm NORMAL SUPERSPEED (0.4 mm nozzle) @CREALITY] +inherits = *0.20mm*; *0.4nozzle*; *superspeed* +compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.4 and printer_notes=~/.*PRINTER_HAS_SUPERSPEED.*/ + +[print:0.20 mm NORMAL SUPERSPEED (0.5 mm nozzle) @CREALITY] +inherits = *0.20mm*; *0.5nozzle*; *superspeed* +compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.5 and printer_notes=~/.*PRINTER_HAS_SUPERSPEED.*/ + +[print:0.20 mm NORMAL SUPERSPEED (0.6 mm nozzle) @CREALITY] +inherits = *0.20mm*; *0.6nozzle*; *superspeed* +compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.6 and printer_notes=~/.*PRINTER_HAS_SUPERSPEED.*/ + + + [print:0.24 mm DRAFT (0.4 mm nozzle) @CREALITY] inherits = *0.24mm*; *0.4nozzle* renamed_from = "0.24mm DRAFT @CREALITY"; "0.24mm DRAFT @ENDER3" @@ -719,6 +924,48 @@ compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle +[print:0.24 mm DRAFT SPEED (0.4 mm nozzle) @CREALITY] +inherits = *0.24mm*; *0.4nozzle*; *speed* +compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.4 + +[print:0.24 mm DRAFT SPEED (0.5 mm nozzle) @CREALITY] +inherits = *0.24mm*; *0.5nozzle*; *speed* +compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.5 + +[print:0.24 mm DRAFT SPEED (0.6 mm nozzle) @CREALITY] +inherits = *0.24mm*; *0.6nozzle*; *speed* +compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.6 + + + +[print:0.24 mm DRAFT HIGHSPEED (0.4 mm nozzle) @CREALITY] +inherits = *0.24mm*; *0.4nozzle*; *highspeed* +compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.4 and printer_notes=~/.*PRINTER_HAS_HIGHSPEED.*/ + +[print:0.24 mm DRAFT HIGHSPEED (0.5 mm nozzle) @CREALITY] +inherits = *0.24mm*; *0.5nozzle*; *highspeed* +compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.5 and printer_notes=~/.*PRINTER_HAS_HIGHSPEED.*/ + +[print:0.24 mm DRAFT HIGHSPEED (0.6 mm nozzle) @CREALITY] +inherits = *0.24mm*; *0.6nozzle*; *highspeed* +compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.6 and printer_notes=~/.*PRINTER_HAS_HIGHSPEED.*/ + + + +[print:0.24 mm DRAFT SUPERSPEED (0.4 mm nozzle) @CREALITY] +inherits = *0.24mm*; *0.4nozzle*; *superspeed* +compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.4 and printer_notes=~/.*PRINTER_HAS_SUPERSPEED.*/ + +[print:0.24 mm DRAFT SUPERSPEED (0.5 mm nozzle) @CREALITY] +inherits = *0.24mm*; *0.5nozzle*; *superspeed* +compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.5 and printer_notes=~/.*PRINTER_HAS_SUPERSPEED.*/ + +[print:0.24 mm DRAFT SUPERSPEED (0.6 mm nozzle) @CREALITY] +inherits = *0.24mm*; *0.6nozzle*; *superspeed* +compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.6 and printer_notes=~/.*PRINTER_HAS_SUPERSPEED.*/ + + + [print:0.28 mm SUPERDRAFT (0.4 mm nozzle) @CREALITY] inherits = *0.28mm*; *0.4nozzle* renamed_from = "0.28mm SUPERDRAFT @CREALITY" @@ -734,6 +981,48 @@ compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle +[print:0.28 mm SUPERDRAFT SPEED (0.4 mm nozzle) @CREALITY] +inherits = *0.28mm*; *0.4nozzle*; *speed* +compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.4 + +[print:0.28 mm SUPERDRAFT SPEED (0.5 mm nozzle) @CREALITY] +inherits = *0.28mm*; *0.5nozzle*; *speed* +compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.5 + +[print:0.28 mm SUPERDRAFT SPEED (0.6 mm nozzle) @CREALITY] +inherits = *0.28mm*; *0.6nozzle*; *speed* +compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.6 + + + +[print:0.28 mm SUPERDRAFT HIGHSPEED (0.4 mm nozzle) @CREALITY] +inherits = *0.28mm*; *0.4nozzle*; *highspeed* +compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.4 and printer_notes=~/.*PRINTER_HAS_HIGHSPEED.*/ + +[print:0.28 mm SUPERDRAFT HIGHSPEED (0.5 mm nozzle) @CREALITY] +inherits = *0.28mm*; *0.5nozzle*; *highspeed* +compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.5 and printer_notes=~/.*PRINTER_HAS_HIGHSPEED.*/ + +[print:0.28 mm SUPERDRAFT HIGHSPEED (0.6 mm nozzle) @CREALITY] +inherits = *0.28mm*; *0.6nozzle*; *highspeed* +compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.6 and printer_notes=~/.*PRINTER_HAS_HIGHSPEED.*/ + + + +[print:0.28 mm SUPERDRAFT SUPERSPEED (0.4 mm nozzle) @CREALITY] +inherits = *0.28mm*; *0.4nozzle*; *superspeed* +compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.4 and printer_notes=~/.*PRINTER_HAS_SUPERSPEED.*/ + +[print:0.28 mm SUPERDRAFT SUPERSPEED (0.5 mm nozzle) @CREALITY] +inherits = *0.28mm*; *0.5nozzle*; *superspeed* +compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.5 and printer_notes=~/.*PRINTER_HAS_SUPERSPEED.*/ + +[print:0.28 mm SUPERDRAFT SUPERSPEED (0.6 mm nozzle) @CREALITY] +inherits = *0.28mm*; *0.6nozzle*; *superspeed* +compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.6 and printer_notes=~/.*PRINTER_HAS_SUPERSPEED.*/ + + + [print:0.36 mm CHUNKY (0.5 mm nozzle) @CREALITY] inherits = *0.36mm*; *0.5nozzle* compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.5 @@ -744,12 +1033,60 @@ compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle +[print:0.36 mm CHUNKY SPEED (0.5 mm nozzle) @CREALITY] +inherits = *0.36mm*; *0.5nozzle*; *speed* +compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.5 + +[print:0.36 mm CHUNKY SPEED (0.6 mm nozzle) @CREALITY] +inherits = *0.36mm*; *0.6nozzle*; *speed* +compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.6 + + + +[print:0.36 mm CHUNKY HIGHSPEED (0.5 mm nozzle) @CREALITY] +inherits = *0.36mm*; *0.5nozzle*; *highspeed* +compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.5 and printer_notes=~/.*PRINTER_HAS_HIGHSPEED.*/ + +[print:0.36 mm CHUNKY HIGHSPEED (0.6 mm nozzle) @CREALITY] +inherits = *0.36mm*; *0.6nozzle*; *highspeed* +compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.6 and printer_notes=~/.*PRINTER_HAS_HIGHSPEED.*/ + + + +[print:0.36 mm CHUNKY SUPERSPEED (0.5 mm nozzle) @CREALITY] +inherits = *0.36mm*; *0.5nozzle*; *superspeed* +compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.5 and printer_notes=~/.*PRINTER_HAS_SUPERSPEED.*/ + +[print:0.36 mm CHUNKY SUPERSPEED (0.6 mm nozzle) @CREALITY] +inherits = *0.36mm*; *0.6nozzle*; *superspeed* +compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.6 and printer_notes=~/.*PRINTER_HAS_SUPERSPEED.*/ + + + [print:0.44 mm SUPERCHUNKY (0.6 mm nozzle) @CREALITY] inherits = *0.44mm*; *0.6nozzle* compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.6 +[print:0.44 mm SUPERCHUNKY SPEED (0.6 mm nozzle) @CREALITY] +inherits = *0.44mm*; *0.6nozzle*; *speed* +compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.6 + + + +[print:0.44 mm SUPERCHUNKY HIGHSPEED (0.6 mm nozzle) @CREALITY] +inherits = *0.44mm*; *0.6nozzle*; *highspeed* +compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.6 and printer_notes=~/.*PRINTER_HAS_HIGHSPEED.*/ + + + +[print:0.44 mm SUPERCHUNKY SUPERSPEED (0.6 mm nozzle) @CREALITY] +inherits = *0.44mm*; *0.6nozzle*; *superspeed* +compatible_printers_condition = printer_model=~/(ENDER|CR|SERMOON).*/ and nozzle_diameter[0]==0.6 and printer_notes=~/.*PRINTER_HAS_SUPERSPEED.*/ + + + # When submitting new filaments please print the following temperature tower at 0.1mm layer height: # https://www.thingiverse.com/thing:2615842 # Pay particular attention to bridging, overhangs and retractions. @@ -830,6 +1167,26 @@ bridge_fan_speed = 30 top_fan_speed = 0 temperature = 245 +[filament:*TPU*] +inherits = *common* +bed_temperature = 50 +cooling = 0 +disable_fan_first_layers = 3 +fan_below_layer_time = 20 +filament_colour = #DDDDDD +filament_max_volumetric_speed = 11 +filament_type = TPU +filament_density = 1.2 +filament_cost = 30 +first_layer_bed_temperature = 55 +first_layer_temperature = 245 +fan_always_on = 0 +max_fan_speed = 0 +min_fan_speed = 0 +bridge_fan_speed = 30 +top_fan_speed = 0 +temperature = 245 + [filament:Generic PLA @CREALITY] inherits = *PLA* renamed_from = "Generic PLA @ENDER3" @@ -1109,6 +1466,50 @@ filament_cost = 16.99 filament_density = 1.24 filament_colour = #2862C4 +[filament:MatterHackers MH Build Series PLA @CREALITY] +inherits = *PLA* +filament_vendor = MatterHackers +temperature = 205 +bed_temperature = 60 +first_layer_temperature = 210 +first_layer_bed_temperature = 60 +filament_cost = 20.87 +filament_density = 1.25 +filament_colour = #3598DB + +[filament:MatterHackers MH Build Series PETG @CREALITY] +inherits = *PET* +filament_vendor = MatterHackers +temperature = 245 +bed_temperature = 60 +first_layer_temperature = 250 +first_layer_bed_temperature = 65 +filament_cost = 21.98 +filament_density = 1.27 +filament_colour = #3598DB + +[filament:MatterHackers MH Build Series ABS @CREALITY] +inherits = *ABS* +filament_vendor = MatterHackers +temperature = 230 +bed_temperature = 90 +first_layer_temperature = 240 +first_layer_bed_temperature = 100 +filament_cost = 20.87 +filament_density = 1.07 +filament_colour = #3598DB + +[filament:MatterHackers MH Build Series TPU @CREALITY] +inherits = *TPU* +filament_vendor = MatterHackers +temperature = 240 +bed_temperature = 50 +first_layer_temperature = 250 +first_layer_bed_temperature = 60 +filament_cost = 28.99 +filament_density = 1.12 +filament_colour = #3598DB + # Common printer preset @@ -1165,7 +1566,7 @@ wipe = 1 z_offset = 0 printer_model = default_filament_profile = "Generic PLA @CREALITY" -start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S{first_layer_bed_temperature[0]} ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S{first_layer_temperature[0]} ; set final nozzle temp\nM190 S{first_layer_bed_temperature[0]} ; wait for bed temp to stabilize\nM109 S{first_layer_temperature[0]} ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0 +start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nM140 S{first_layer_bed_temperature[0]} ; set final bed temp\nG4 S30 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2.0 Y10 F3000\nM104 S{first_layer_temperature[0]} ; set final nozzle temp\nM190 S{first_layer_bed_temperature[0]} ; wait for bed temp to stabilize\nM109 S{first_layer_temperature[0]} ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 X2.0 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 Y140 F5000\nG92 E0\nG1 X2.3 Y10 E10 F1200 ; prime the nozzle\nG92 E0 end_gcode = {if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+2, max_print_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.85} F{travel_speed*60} ; present print\n{if max_layer_z < max_print_height-10}G1 Z{z_offset+min(max_layer_z+70, max_print_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{max_print_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors # Intended for printers that have exclusively shipped with a 32bit mainboard @@ -1174,19 +1575,19 @@ gcode_flavor = marlin2 # Intended for printers equipped with a strain gauge mechanism, like the CR-6 series [printer:*straingauge*] -start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S{first_layer_bed_temperature[0]} ; set final bed temp\nM109 S{first_layer_temperature[0]-50} ; set temporary nozzle temp to prevent oozing during homing\nM190 S{first_layer_bed_temperature[0]} ; wait for bed temp to stabilize\nG28 ; home all axis\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S{first_layer_temperature[0]} ; set final nozzle temp\nM109 S{first_layer_temperature[0]} ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0 +start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM109 S{first_layer_temperature[0]-50} ; set temporary nozzle temp to prevent oozing during homing\nM190 S{first_layer_bed_temperature[0]} ; wait for bed temp to stabilize\nM140 S{first_layer_bed_temperature[0]} ; set final bed temp\nG28 ; home all axis\nG1 Z50 F240\nG1 X2.0 Y10 F3000\nM104 S{first_layer_temperature[0]} ; set final nozzle temp\nM109 S{first_layer_temperature[0]} ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 X2.0 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 Y140 F5000\nG92 E0\nG1 X2.3 Y10 E10 F1200 ; prime the nozzle\nG92 E0 # Intended for printers with a smaller bed, like the Ender-3 series [printer:*fastabl*] -start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S{first_layer_bed_temperature[0]} ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing and auto bed leveling\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\nG29 ; auto bed levelling\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S{first_layer_temperature[0]} ; set final nozzle temp\nM190 S{first_layer_bed_temperature[0]} ; wait for bed temp to stabilize\nM109 S{first_layer_temperature[0]} ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0 +start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing and auto bed leveling\nM140 S{first_layer_bed_temperature[0]} ; set final bed temp\nG4 S30 ; allow partial nozzle warmup\nG28 ; home all axis\nG29 ; auto bed levelling\nG1 Z50 F240\nG1 X2.0 Y10 F3000\nM104 S{first_layer_temperature[0]} ; set final nozzle temp\nM190 S{first_layer_bed_temperature[0]} ; wait for bed temp to stabilize\nM109 S{first_layer_temperature[0]} ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 X2.0 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 Y140 F5000\nG92 E0\nG1 X2.3 Y10 E10 F1200 ; prime the nozzle\nG92 E0 # Intended for printers with a larger bed, like the CR-10 series [printer:*slowabl*] -start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S{first_layer_bed_temperature[0]} ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing and auto bed leveling\nM190 S{first_layer_bed_temperature[0]} ; wait for bed temp to stabilize\nG28 ; home all axis\nG29 ; auto bed levelling\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S{first_layer_temperature[0]} ; set final nozzle temp\nM109 S{first_layer_temperature[0]} ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0 +start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing and auto bed leveling\nM140 S{first_layer_bed_temperature[0]} ; set final bed temp\nM190 S{first_layer_bed_temperature[0]} ; wait for bed temp to stabilize\nG28 ; home all axis\nG29 ; auto bed levelling\nG1 Z50 F240\nG1 X2.0 Y10 F3000\nM104 S{first_layer_temperature[0]} ; set final nozzle temp\nM109 S{first_layer_temperature[0]} ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 X2.0 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 Y140 F5000\nG92 E0\nG1 X2.3 Y10 E10 F1200 ; prime the nozzle\nG92 E0 # intended for printers that have RESTORE_LEVELING_AFTER_G28 enabled in firmware [printer:*storedabl*] -start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S{first_layer_bed_temperature[0]} ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis and restore leveling\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S{first_layer_temperature[0]} ; set final nozzle temp\nM190 S{first_layer_bed_temperature[0]} ; wait for bed temp to stabilize\nM109 S{first_layer_temperature[0]} ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0 +start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nM140 S{first_layer_bed_temperature[0]} ; set final bed temp\nG4 S30 ; allow partial nozzle warmup\nG28 ; home all axis and restore leveling\nG1 Z50 F240\nG1 X2.0 Y10 F3000\nM104 S{first_layer_temperature[0]} ; set final nozzle temp\nM190 S{first_layer_bed_temperature[0]} ; wait for bed temp to stabilize\nM109 S{first_layer_temperature[0]} ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 X2.0 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 Y140 F5000\nG92 E0\nG1 X2.3 Y10 E10 F1200 ; prime the nozzle\nG92 E0 # Intended for printers with vendor official firmware verified to support M25 [printer:*pauseprint*] @@ -1238,7 +1639,7 @@ retract_before_wipe = 0% [printer:*0.3nozzle*] nozzle_diameter = 0.3 printer_variant = 0.3 -min_layer_height = 0.08 +min_layer_height = 0.06 max_layer_height = 0.24 retract_lift_above = 0.2 default_print_profile = "0.12 mm DETAIL (0.3 mm nozzle) @CREALITY" @@ -1246,7 +1647,7 @@ default_print_profile = "0.12 mm DETAIL (0.3 mm nozzle) @CREALITY" [printer:*0.4nozzle*] nozzle_diameter = 0.4 printer_variant = 0.4 -min_layer_height = 0.08 +min_layer_height = 0.06 max_layer_height = 0.32 retract_lift_above = 0.2 default_print_profile = "0.16 mm OPTIMAL (0.4 mm nozzle) @CREALITY" @@ -1405,7 +1806,7 @@ inherits = *common*; *storedabl*; *spriteextruder*; *pauseprint* bed_shape = 5x0,215x0,215x220,5x220 max_print_height = 270 printer_model = ENDER3S1 -printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_CREALITY\nPRINTER_MODEL_ENDER3S1 +printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_CREALITY\nPRINTER_MODEL_ENDER3S1\nPRINTER_HAS_ULTRADETAIL [printer:Creality Ender-3 S1 (0.3 mm nozzle)] inherits = *ENDER3S1*; *0.3nozzle* @@ -1427,7 +1828,7 @@ inherits = *common*; *storedabl*; *spriteextruder*; *pauseprint* bed_shape = 5x0,215x0,215x220,5x220 max_print_height = 270 printer_model = ENDER3S1PRO -printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_CREALITY\nPRINTER_MODEL_ENDER3S1PRO +printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_CREALITY\nPRINTER_MODEL_ENDER3S1PRO\nPRINTER_HAS_ULTRADETAIL [printer:Creality Ender-3 S1 Pro (0.3 mm nozzle)] inherits = *ENDER3S1PRO*; *0.3nozzle* @@ -1449,7 +1850,7 @@ inherits = *common*; *storedabl*; *spriteextruder*; *pauseprint* bed_shape = 5x5,295x5,295x295,5x295 max_print_height = 300 printer_model = ENDER3S1PLUS -printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_CREALITY\nPRINTER_MODEL_ENDER3S1PLUS +printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_CREALITY\nPRINTER_MODEL_ENDER3S1PLUS\nPRINTER_HAS_ULTRADETAIL [printer:Creality Ender-3 S1 Plus (0.3 mm nozzle)] inherits = *ENDER3S1PLUS*; *0.3nozzle* @@ -1554,26 +1955,26 @@ inherits = *ENDER5*; *0.6nozzle* -#[printer:*ENDER5PRO*] -#inherits = *common*; *bowdencapricorn*; *descendingz* -#bed_shape = 5x2.5,225x2.5,225x222.5,5x222.5 -#max_print_height = 300 -#printer_model = ENDER5PRO -#printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_CREALITY\nPRINTER_MODEL_ENDER5PRO\nPRINTER_HAS_BOWDEN -#machine_max_acceleration_e = 1000 -#machine_max_feedrate_z = 5 -# -#[printer:Creality Ender-5 Pro (0.3 mm nozzle)] -#inherits = *ENDER5PRO*; *0.3nozzle* -# -#[printer:Creality Ender-5 Pro (0.4 mm nozzle)] -#inherits = *ENDER5PRO*; *0.4nozzle* -# -#[printer:Creality Ender-5 Pro (0.5 mm nozzle)] -#inherits = *ENDER5PRO*; *0.5nozzle* -# -#[printer:Creality Ender-5 Pro (0.6 mm nozzle)] -#inherits = *ENDER5PRO*; *0.6nozzle* +[printer:*ENDER5PRO*] +inherits = *common*; *bowdencapricorn*; *descendingz* +bed_shape = 5x2.5,225x2.5,225x222.5,5x222.5 +max_print_height = 300 +printer_model = ENDER5PRO +printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_CREALITY\nPRINTER_MODEL_ENDER5PRO\nPRINTER_HAS_BOWDEN +machine_max_acceleration_e = 1000 +machine_max_feedrate_z = 5 + +[printer:Creality Ender-5 Pro (0.3 mm nozzle)] +inherits = *ENDER5PRO*; *0.3nozzle* + +[printer:Creality Ender-5 Pro (0.4 mm nozzle)] +inherits = *ENDER5PRO*; *0.4nozzle* + +[printer:Creality Ender-5 Pro (0.5 mm nozzle)] +inherits = *ENDER5PRO*; *0.5nozzle* + +[printer:Creality Ender-5 Pro (0.6 mm nozzle)] +inherits = *ENDER5PRO*; *0.6nozzle* @@ -1603,12 +2004,33 @@ inherits = *ENDER5PLUS*; *0.6nozzle* +[printer:*ENDER5S1*] +inherits = *common*; *descendingz*; *spriteextruder* +bed_shape = 5x0,215x0,215x220,5x220 +max_print_height = 280 +printer_model = ENDER5S1 +printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_CREALITY\nPRINTER_MODEL_ENDER5S1\nPRINTER_HAS_ULTRADETAIL\nPRINTER_HAS_HIGHSPEED\nPRINTER_HAS_SUPERSPEED + +[printer:Creality Ender-5 S1 (0.3 mm nozzle)] +inherits = *ENDER5S1*; *0.3nozzle* + +[printer:Creality Ender-5 S1 (0.4 mm nozzle)] +inherits = *ENDER5S1*; *0.4nozzle* + +[printer:Creality Ender-5 S1 (0.5 mm nozzle)] +inherits = *ENDER5S1*; *0.5nozzle* + +[printer:Creality Ender-5 S1 (0.6 mm nozzle)] +inherits = *ENDER5S1*; *0.6nozzle* + + + [printer:*ENDER6*] inherits = *common*; *bowden*; *descendingz* bed_shape = 5x5,255x5,255x255,5x255 max_print_height = 400 printer_model = ENDER6 -printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_CREALITY\nPRINTER_MODEL_ENDER6\nPRINTER_HAS_BOWDEN +printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_CREALITY\nPRINTER_MODEL_ENDER6\nPRINTER_HAS_BOWDEN\nPRINTER_HAS_HIGHSPEED [printer:Creality Ender-6 (0.3 mm nozzle)] inherits = *ENDER6*; *0.3nozzle* @@ -1630,7 +2052,7 @@ inherits = *common*; *bowden*; *descendingz* bed_shape = 5x5,245x5,245x245,5x245 max_print_height = 300 printer_model = ENDER7 -printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_CREALITY\nPRINTER_MODEL_ENDER7\nPRINTER_HAS_BOWDEN +printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_CREALITY\nPRINTER_MODEL_ENDER7\nPRINTER_HAS_BOWDEN\nPRINTER_HAS_HIGHSPEED\nPRINTER_HAS_SUPERSPEED [printer:Creality Ender-7 (0.3 mm nozzle)] inherits = *ENDER7*; *0.3nozzle* @@ -1805,7 +2227,7 @@ inherits = *common*; *slowabl*; *spriteextruder* bed_shape = 5x5,295x5,295x295,5x295 max_print_height = 400 printer_model = CR10SMARTPRO -printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_CREALITY\nPRINTER_MODEL_CR10SMARTPRO\nPRINTER_HAS_BOWDEN +printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_CREALITY\nPRINTER_MODEL_CR10SMARTPRO\nPRINTER_HAS_ULTRADETAIL [printer:Creality CR-10 SMART Pro (0.3 mm nozzle)] inherits = *CR10SMARTPRO*; *0.3nozzle* @@ -2130,7 +2552,7 @@ inherits = *common*; *directdriveextruder*; *descendingz* bed_shape = 5x5,275x5,275x255,5x255 max_print_height = 310 printer_model = SERMOOND1 -printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_CREALITY\nPRINTER_MODEL_SERMOOND1\nPRINTER_HAS_BOWDEN +printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_CREALITY\nPRINTER_MODEL_SERMOOND1 [printer:Creality Sermoon-D1 (0.3 mm nozzle)] inherits = *SERMOOND1*; *0.3nozzle* @@ -2144,3 +2566,45 @@ inherits = *SERMOOND1*; *0.5nozzle* [printer:Creality Sermoon-D1 (0.6 mm nozzle)] inherits = *SERMOOND1*; *0.6nozzle* + + + +[printer:*SERMOONV1*] +inherits = *common*; *spriteextruder*; *descendingz* +bed_shape = 5x5,170x5,170x170,5x170 +max_print_height = 165 +printer_model = SERMOONV1 +printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_CREALITY\nPRINTER_MODEL_SERMOONV1\nPRINTER_HAS_ULTRADETAIL + +[printer:Creality Sermoon-V1 (0.3 mm nozzle)] +inherits = *SERMOONV1*; *0.3nozzle* + +[printer:Creality Sermoon-V1 (0.4 mm nozzle)] +inherits = *SERMOONV1*; *0.4nozzle* + +[printer:Creality Sermoon-V1 (0.5 mm nozzle)] +inherits = *SERMOONV1*; *0.5nozzle* + +[printer:Creality Sermoon-V1 (0.6 mm nozzle)] +inherits = *SERMOONV1*; *0.6nozzle* + + + +[printer:*SERMOONV1PRO*] +inherits = *common*; *spriteextruder*; *descendingz* +bed_shape = 5x5,170x5,170x170,5x170 +max_print_height = 165 +printer_model = SERMOONV1PRO +printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_CREALITY\nPRINTER_MODEL_SERMOONV1PRO\nPRINTER_HAS_ULTRADETAIL + +[printer:Creality Sermoon-V1 Pro (0.3 mm nozzle)] +inherits = *SERMOONV1PRO*; *0.3nozzle* + +[printer:Creality Sermoon-V1 Pro (0.4 mm nozzle)] +inherits = *SERMOONV1PRO*; *0.4nozzle* + +[printer:Creality Sermoon-V1 Pro (0.5 mm nozzle)] +inherits = *SERMOONV1PRO*; *0.5nozzle* + +[printer:Creality Sermoon-V1 Pro (0.6 mm nozzle)] +inherits = *SERMOONV1PRO*; *0.6nozzle* From 086dec2196782d36ab5525da54ee9d42a6a05f3b Mon Sep 17 00:00:00 2001 From: rtyr <36745189+rtyr@users.noreply.github.com> Date: Tue, 17 Jan 2023 12:20:23 +0100 Subject: [PATCH 14/14] Sync with PrusaSlicer-settings --- resources/profiles/PrusaResearch.idx | 1 + resources/profiles/PrusaResearch.ini | 203 +++++++++++++++++++++++++-- 2 files changed, 193 insertions(+), 11 deletions(-) diff --git a/resources/profiles/PrusaResearch.idx b/resources/profiles/PrusaResearch.idx index 7a5b18a1a8..68dff19c14 100644 --- a/resources/profiles/PrusaResearch.idx +++ b/resources/profiles/PrusaResearch.idx @@ -1,4 +1,5 @@ min_slic3r_version = 2.5.0-alpha0 +1.5.5 Added new Prusament Resin material profiles. Enabled g-code thumbnails for MK2.5 family printers. 1.5.4 Added material profiles for Prusament Resin BioBased60. 1.5.3 Added filament profiles for ColorFabb VarioShore TPU, FormFutura PP, NinjaTek NinjaFlex/Cheetah TPU and for multiple Eolas Prints filaments. Updated bridging settings in 50um and 70um profiles. 1.5.2 Added SLA material profiles. diff --git a/resources/profiles/PrusaResearch.ini b/resources/profiles/PrusaResearch.ini index f24d3a71a0..5922b216a2 100644 --- a/resources/profiles/PrusaResearch.ini +++ b/resources/profiles/PrusaResearch.ini @@ -5,7 +5,7 @@ name = Prusa Research # Configuration version of this file. Config file will only be installed, if the config_version differs. # This means, the server may force the PrusaSlicer configuration to be downgraded. -config_version = 1.5.4 +config_version = 1.5.5 # Where to get the updates from? config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/PrusaResearch/ changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1% @@ -4065,7 +4065,6 @@ inherits = *FLEX* filament_vendor = Eolas Prints filament_cost = 34.99 filament_density = 1.21 -filament_spool_weight = 1000 filament_colour = #4D9398 filament_max_volumetric_speed = 1.2 temperature = 235 @@ -5755,6 +5754,14 @@ material_type = Tough material_vendor = BlueCast material_colour = #007EFD +[sla_material:BlueCast X-One @0.025] +inherits = *common 0.025* +exposure_time = 25 +initial_exposure_time = 35 +material_type = Casting +material_vendor = BlueCast +material_colour = #C0C0C0 + [sla_material:DruckWege Type D High Temp @0.025] inherits = *common 0.025* exposure_time = 6 @@ -5957,6 +5964,14 @@ material_type = Tough material_vendor = Prusa Polymers material_colour = #FCB30E +[sla_material:Prusament Resin Tough Classic Red @0.025] +inherits = *common 0.025* +exposure_time = 3 +initial_exposure_time = 35 +material_type = Tough +material_vendor = Prusa Polymers +material_colour = #EC0000 + [sla_material:Prusament Resin BioBased60 Herbal Green @0.025] inherits = *common 0.025* exposure_time = 7 @@ -5981,6 +5996,22 @@ material_type = Tough material_vendor = Prusa Polymers material_colour = #ECDE05 +[sla_material:Prusament Resin Flex80 Transparent Clear @0.025] +inherits = *common 0.025* +exposure_time = 10 +initial_exposure_time = 30 +material_type = Flexible +material_vendor = Prusa Polymers +material_colour = #F3F6F4 + +[sla_material:Prusament Resin Flex80 Black @0.025] +inherits = *common 0.025* +exposure_time = 8 +initial_exposure_time = 30 +material_type = Flexible +material_vendor = Prusa Polymers +material_colour = #595959 + ## Prusa 0.025 [sla_material:Prusa Orange Tough @0.025] @@ -6432,6 +6463,14 @@ material_type = Tough material_vendor = BlueCast material_colour = #007EFD +[sla_material:BlueCast X-One @0.05] +inherits = *common 0.05* +exposure_time = 27 +initial_exposure_time = 35 +material_type = Casting +material_vendor = BlueCast +material_colour = #C0C0C0 + [sla_material:DruckWege Type D High Temp @0.05] inherits = *common 0.05* exposure_time = 10 @@ -6938,6 +6977,14 @@ material_type = Tough material_vendor = Prusa Polymers material_colour = #FCB30E +[sla_material:Prusament Resin Tough Classic Red @0.05] +inherits = *common 0.05* +exposure_time = 4 +initial_exposure_time = 35 +material_type = Tough +material_vendor = Prusa Polymers +material_colour = #EC0000 + [sla_material:Prusament Resin BioBased60 Herbal Green @0.05] inherits = *common 0.05* exposure_time = 8 @@ -6962,6 +7009,22 @@ material_type = Tough material_vendor = Prusa Polymers material_colour = #ECDE05 +[sla_material:Prusament Resin Flex80 Transparent Clear @0.05] +inherits = *common 0.05* +exposure_time = 15 +initial_exposure_time = 30 +material_type = Flexible +material_vendor = Prusa Polymers +material_colour = #F3F6F4 + +[sla_material:Prusament Resin Flex80 Black @0.05] +inherits = *common 0.05* +exposure_time = 10 +initial_exposure_time = 30 +material_type = Flexible +material_vendor = Prusa Polymers +material_colour = #595959 + ## Prusa 0.05 [sla_material:Prusa Beige Tough @0.05] @@ -7252,6 +7315,14 @@ material_type = Tough material_vendor = BlueCast material_colour = #FFEEE6 +[sla_material:BlueCast X-One @0.1] +inherits = *common 0.1* +exposure_time = 30 +initial_exposure_time = 45 +material_type = Casting +material_vendor = BlueCast +material_colour = #C0C0C0 + [sla_material:Ameralabs TGM-7 LED @0.1] inherits = *common 0.1* exposure_time = 10 @@ -7286,6 +7357,14 @@ material_type = Tough material_vendor = Prusa Polymers material_colour = #808080 +[sla_material:Prusament Resin Tough Classic Red @0.1] +inherits = *common 0.1* +exposure_time = 6 +initial_exposure_time = 45 +material_type = Tough +material_vendor = Prusa Polymers +material_colour = #EC0000 + [sla_material:Prusament Resin Tough Sandstone Model @0.1] inherits = *common 0.1* exposure_time = 13 @@ -7374,6 +7453,22 @@ material_type = Tough material_vendor = Prusa Polymers material_colour = #ECDE05 +[sla_material:Prusament Resin Flex80 Transparent Clear @0.1] +inherits = *common 0.1* +exposure_time = 20 +initial_exposure_time = 30 +material_type = Flexible +material_vendor = Prusa Polymers +material_colour = #F3F6F4 + +[sla_material:Prusament Resin Flex80 Black @0.1] +inherits = *common 0.1* +exposure_time = 13 +initial_exposure_time = 30 +material_type = Flexible +material_vendor = Prusa Polymers +material_colour = #595959 + ## Prusa 0.1 [sla_material:Prusa Orange Tough @0.1] @@ -7590,6 +7685,14 @@ material_type = Tough material_vendor = Prusa Polymers material_colour = #FCB30E +[sla_material:Prusament Resin Tough Classic Red @0.025 SL1S] +inherits = *0.025_sl1s* +exposure_time = 1.8 +initial_exposure_time = 25 +material_type = Tough +material_vendor = Prusa Polymers +material_colour = #EC0000 + [sla_material:Prusament Resin BioBased60 Herbal Green @0.025 SL1S] inherits = *0.025_sl1s* exposure_time = 3.5 @@ -7615,6 +7718,24 @@ material_vendor = Prusa Polymers material_colour = #ECDE05 material_print_speed = slow +[sla_material:Prusament Resin Flex80 Transparent Clear @0.025 SL1S] +inherits = *0.025_sl1s* +exposure_time = 4 +initial_exposure_time = 25 +material_type = Flexible +material_vendor = Prusa Polymers +material_colour = #F3F6F4 +material_print_speed = slow + +[sla_material:Prusament Resin Flex80 Black @0.025 SL1S] +inherits = *0.025_sl1s* +exposure_time = 2.6 +initial_exposure_time = 25 +material_type = Flexible +material_vendor = Prusa Polymers +material_colour = #595959 +material_print_speed = slow + ## Made for Prusa 0.025 [sla_material:Prusa Orange Tough @0.025 SL1S] @@ -8042,6 +8163,14 @@ material_type = Tough material_vendor = Prusa Polymers material_colour = #FCB30E +[sla_material:Prusament Resin Tough Classic Red @0.05 SL1S] +inherits = *0.05_sl1s* +exposure_time = 2 +initial_exposure_time = 25 +material_type = Tough +material_vendor = Prusa Polymers +material_colour = #EC0000 + [sla_material:Prusament Resin BioBased60 Herbal Green @0.05 SL1S] inherits = *0.05_sl1s* exposure_time = 4 @@ -8067,6 +8196,24 @@ material_vendor = Prusa Polymers material_colour = #ECDE05 material_print_speed = slow +[sla_material:Prusament Resin Flex80 Transparent Clear @0.05 SL1S] +inherits = *0.05_sl1s* +exposure_time = 5 +initial_exposure_time = 25 +material_type = Flexible +material_vendor = Prusa Polymers +material_colour = #F3F6F4 +material_print_speed = slow + +[sla_material:Prusament Resin Flex80 Black @0.05 SL1S] +inherits = *0.05_sl1s* +exposure_time = 3 +initial_exposure_time = 25 +material_type = Flexible +material_vendor = Prusa Polymers +material_colour = #595959 +material_print_speed = slow + ## Made for Prusa 0.05 [sla_material:Prusa Orange Tough @0.05 SL1S] @@ -8798,6 +8945,14 @@ material_type = Tough material_vendor = Prusa Polymers material_colour = #FCB30E +[sla_material:Prusament Resin Tough Classic Red @0.1 SL1S] +inherits = *0.1_sl1s* +exposure_time = 2.6 +initial_exposure_time = 25 +material_type = Tough +material_vendor = Prusa Polymers +material_colour = #EC0000 + [sla_material:Prusament Resin BioBased60 Herbal Green @0.1 SL1S] inherits = *0.1_sl1s* exposure_time = 5 @@ -8823,6 +8978,24 @@ material_vendor = Prusa Polymers material_colour = #ECDE05 material_print_speed = slow +[sla_material:Prusament Resin Flex80 Transparent Clear @0.1 SL1S] +inherits = *0.1_sl1s* +exposure_time = 6 +initial_exposure_time = 25 +material_type = Flexible +material_vendor = Prusa Polymers +material_colour = #F3F6F4 +material_print_speed = slow + +[sla_material:Prusament Resin Flex80 Black @0.1 SL1S] +inherits = *0.1_sl1s* +exposure_time = 3.5 +initial_exposure_time = 25 +material_type = Flexible +material_vendor = Prusa Polymers +material_colour = #595959 +material_print_speed = slow + ## Made for Prusa 0.1 [sla_material:Prusa Orange Tough @0.1 SL1S] @@ -9312,6 +9485,8 @@ printer_model = MK2.5 remaining_times = 1 machine_max_jerk_e = 4.5 start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.11.0 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\n{if filament_settings_id[initial_tool]=~/.*Prusament PA11.*/}\nG1 Z0.3 F720\nG1 Y-3 F1000 ; go outside print area\nG92 E0\nG1 X60 E9 F1000 ; intro line\nG1 X100 E9 F1000 ; intro line\n{else}\nG1 Z0.2 F720\nG1 Y-3 F1000 ; go outside print area\nG92 E0\nG1 X60 E9 F1000 ; intro line\nG1 X100 E12.5 F1000 ; intro line\n{endif}\nG92 E0 +end_gcode = {if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+1, max_print_height)} F720 ; Move print head up{endif}\nG1 X0 Y200 F3600 ; park\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+49, max_print_height)} F720 ; Move print head further up{endif}\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nM900 K0 ; reset LA\nM84 ; disable motors\n; max_layer_z = [max_layer_z] +thumbnails = 160x120 [printer:Original Prusa i3 MK2.5 0.25 nozzle] inherits = Original Prusa i3 MK2S 0.25 nozzle @@ -9319,6 +9494,8 @@ printer_model = MK2.5 remaining_times = 1 machine_max_jerk_e = 4.5 start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.11.0 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\nG1 Z0.2 F720\nG1 Y-3 F1000 ; go outside print area\nG92 E0\nG1 X60 E9 F1000 ; intro line\nG1 X100 E12.5 F1000 ; intro line\nG92 E0 +end_gcode = {if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+1, max_print_height)} F720 ; Move print head up{endif}\nG1 X0 Y200 F3600 ; park\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+49, max_print_height)} F720 ; Move print head further up{endif}\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nM900 K0 ; reset LA\nM84 ; disable motors\n; max_layer_z = [max_layer_z] +thumbnails = 160x120 [printer:Original Prusa i3 MK2.5 0.6 nozzle] inherits = Original Prusa i3 MK2S 0.6 nozzle @@ -9327,6 +9504,8 @@ remaining_times = 1 machine_max_jerk_e = 4.5 deretract_speed = 25 start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.11.0 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\n{if filament_settings_id[initial_tool]=~/.*Prusament PA11.*/}\nG1 Z0.3 F720\nG1 Y-3 F1000 ; go outside print area\nG92 E0\nG1 X60 E9 F1000 ; intro line\nG1 X100 E9 F1000 ; intro line\n{else}\nG1 Z0.2 F720\nG1 Y-3 F1000 ; go outside print area\nG92 E0\nG1 X60 E9 F1000 ; intro line\nG1 X100 E12.5 F1000 ; intro line\n{endif}\nG92 E0 +end_gcode = {if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+1, max_print_height)} F720 ; Move print head up{endif}\nG1 X0 Y200 F3600 ; park\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+49, max_print_height)} F720 ; Move print head further up{endif}\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nM900 K0 ; reset LA\nM84 ; disable motors\n; max_layer_z = [max_layer_z] +thumbnails = 160x120 [printer:Original Prusa i3 MK2.5 0.8 nozzle] inherits = Original Prusa i3 MK2S 0.6 nozzle @@ -9342,9 +9521,11 @@ retract_lift = 0.25 remaining_times = 1 machine_max_jerk_e = 4.5 start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.11.0 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\n{if filament_settings_id[initial_tool]=~/.*Prusament PA11.*/}\nG1 Z0.3 F720\nG1 Y-3 F1000 ; go outside print area\nG92 E0\nG1 X60 E9 F1000 ; intro line\nG1 X100 E9 F1000 ; intro line\n{else}\nG1 Z0.2 F720\nG1 Y-3 F1000 ; go outside print area\nG92 E0\nG1 X60 E9 F1000 ; intro line\nG1 X100 E12.5 F1000 ; intro line\n{endif}\nG92 E0 +end_gcode = {if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+1, max_print_height)} F720 ; Move print head up{endif}\nG1 X0 Y200 F3600 ; park\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+49, max_print_height)} F720 ; Move print head further up{endif}\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nM900 K0 ; reset LA\nM84 ; disable motors\n; max_layer_z = [max_layer_z] default_print_profile = 0.40mm QUALITY @0.8 nozzle default_filament_profile = Prusament PLA @0.8 nozzle color_change_gcode = M600\nG1 E0.6 F1500 ; prime after color change +thumbnails = 160x120 [printer:Original Prusa i3 MK2.5 MMU2 Single] inherits = *25mm2* @@ -9379,7 +9560,7 @@ single_extruder_multi_material = 1 nozzle_diameter = 0.4,0.4,0.4,0.4,0.4 extruder_colour = #FF8000;#DB5182;#3EC0FF;#FF4F4F;#FBEB7D start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.11.0 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\n\n; Send the filament type to the MMU2.0 unit.\n; E stands for extruder number, F stands for filament type (0: default; 1:flex; 2: PVA)\nM403 E0 F{"" + ((filament_type[0]=="FLEX") ? 1 : ((filament_type[0]=="PVA") ? 2 : 0))}\nM403 E1 F{"" + ((filament_type[1]=="FLEX") ? 1 : ((filament_type[1]=="PVA") ? 2 : 0))}\nM403 E2 F{"" + ((filament_type[2]=="FLEX") ? 1 : ((filament_type[2]=="PVA") ? 2 : 0))}\nM403 E3 F{"" + ((filament_type[3]=="FLEX") ? 1 : ((filament_type[3]=="PVA") ? 2 : 0))}\nM403 E4 F{"" + ((filament_type[4]=="FLEX") ? 1 : ((filament_type[4]=="PVA") ? 2 : 0))}\n\n{if not has_single_extruder_multi_material_priming}\n;go outside print area\nG1 Y-3 F1000\nG1 Z0.4 F1000\n; select extruder\nT[initial_tool]\n; initial load\nG1 X55 E32 F1073\nG1 X5 E32 F1800\nG1 X55 E8 F2000\nG1 Z0.3 F1000\nG92 E0\nG1 X240 E25 F2200\nG1 Y-2 F1000\nG1 X55 E25 F1400\nG1 Z0.2 F1000\nG1 X5 E4 F1000\nG92 E0\n{endif}\nG92 E0\n -end_gcode = {if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+1, max_print_height)} F720 ; Move print head up{endif}\nG1 X0 Y210 F7200 ; park\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+49, max_print_height)} F720 ; Move print head further up{endif}\n{if has_wipe_tower}\nG1 E-15 F3000\n{else}\nG1 E2 F5000\nG1 E2 F5500\nG1 E2 F6000\nG1 E-15 F5800\nG1 E-20 F5500\nG1 E10 F3000\nG1 E-10 F3100\nG1 E10 F3150\nG1 E-10 F3250\nG1 E10 F3300\n{endif}\n\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\n\n; Unload filament\nM702 C\n\nG4 ; wait\nM104 S0 ; turn off temperature\nM900 K0 ; reset LA\nM84 ; disable motors\n +end_gcode = {if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+1, max_print_height)} F720 ; Move print head up{endif}\nG1 X0 Y210 F7200 ; park\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+49, max_print_height)} F720 ; Move print head further up{endif}\n{if has_wipe_tower}\nG1 E-15 F3000\n{else}\nG1 E2 F5000\nG1 E2 F5500\nG1 E2 F6000\nG1 E-15 F5800\nG1 E-20 F5500\nG1 E10 F3000\nG1 E-10 F3100\nG1 E10 F3150\nG1 E-10 F3250\nG1 E10 F3300\n{endif}\n\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\n\n; Unload filament\nM702 C\n\nG4 ; wait\nM104 S0 ; turn off temperature\nM900 K0 ; reset LA\nM84 ; disable motors\n; max_layer_z = [max_layer_z] [printer:Original Prusa i3 MK2.5S] inherits = Original Prusa i3 MK2.5 @@ -9406,7 +9587,7 @@ default_print_profile = 0.15mm OPTIMAL @MK2.5 default_filament_profile = Prusament PLA printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_MK2.5\n start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.11.0 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nTx\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\n\n;go outside print area\nG1 Y-3 F1000\nG1 Z0.4 F1000\n; select extruder\nTc\n; purge line\nG1 X55 F2000\nG1 Z0.3 F1000\nG92 E0\nG1 X240 E25 F2200\nG1 Y-2 F1000\nG1 X55 E25 F1400\nG1 Z0.2 F1000\nG1 X5 E4 F1000\nG92 E0\n -end_gcode = {if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+1, max_print_height)} F720 ; Move print head up{endif}\nG1 X0 Y210 F7200 ; park\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+49, max_print_height)} F720 ; Move print head further up{endif}\nG1 E2 F5000\nG1 E2 F5500\nG1 E2 F6000\nG1 E-15 F5800\nG1 E-20 F5500\nG1 E10 F3000\nG1 E-10 F3100\nG1 E10 F3150\nG1 E-10 F3250\nG1 E10 F3300\n\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nM702 C\nG4 ; wait\nM104 S0 ; turn off temperature\nM900 K0 ; reset LA\nM84 ; disable motors +end_gcode = {if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+1, max_print_height)} F720 ; Move print head up{endif}\nG1 X0 Y210 F7200 ; park\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+49, max_print_height)} F720 ; Move print head further up{endif}\nG1 E2 F5000\nG1 E2 F5500\nG1 E2 F6000\nG1 E-15 F5800\nG1 E-20 F5500\nG1 E10 F3000\nG1 E-10 F3100\nG1 E10 F3150\nG1 E-10 F3250\nG1 E10 F3300\n\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nM702 C\nG4 ; wait\nM104 S0 ; turn off temperature\nM900 K0 ; reset LA\nM84 ; disable motors\n; max_layer_z = [max_layer_z] [printer:Original Prusa i3 MK2.5S MMU2S Single 0.8 nozzle] inherits = Original Prusa i3 MK2.5S MMU2S Single @@ -9457,7 +9638,7 @@ single_extruder_multi_material = 1 nozzle_diameter = 0.4,0.4,0.4,0.4,0.4 extruder_colour = #FF8000;#DB5182;#3EC0FF;#FF4F4F;#FBEB7D start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.11.0 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\n\n; Send the filament type to the MMU2.0 unit.\n; E stands for extruder number, F stands for filament type (0: default; 1:flex; 2: PVA)\nM403 E0 F{"" + ((filament_type[0]=="FLEX") ? 1 : ((filament_type[0]=="PVA") ? 2 : 0))}\nM403 E1 F{"" + ((filament_type[1]=="FLEX") ? 1 : ((filament_type[1]=="PVA") ? 2 : 0))}\nM403 E2 F{"" + ((filament_type[2]=="FLEX") ? 1 : ((filament_type[2]=="PVA") ? 2 : 0))}\nM403 E3 F{"" + ((filament_type[3]=="FLEX") ? 1 : ((filament_type[3]=="PVA") ? 2 : 0))}\nM403 E4 F{"" + ((filament_type[4]=="FLEX") ? 1 : ((filament_type[4]=="PVA") ? 2 : 0))}\n\n{if not has_single_extruder_multi_material_priming}\n;go outside print area\nG1 Y-3 F1000\nG1 Z0.4 F1000\n; select extruder\nT[initial_tool]\n; initial load\nG1 X55 E29 F1073\nG1 X5 E29 F1800\nG1 X55 E8 F2000\nG1 Z0.3 F1000\nG92 E0\nG1 X240 E25 F2200\nG1 Y-2 F1000\nG1 X55 E25 F1400\nG1 Z0.2 F1000\nG1 X5 E4 F1000\nG92 E0\n{endif}\nG92 E0\n -end_gcode = {if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+1, max_print_height)} F720 ; Move print head up{endif}\nG1 X0 Y210 F7200 ; park\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+49, max_print_height)} F720 ; Move print head further up{endif}\n{if has_wipe_tower}\nG1 E-15 F3000\n{else}\nG1 X0 Y210 F7200\nG1 E2 F5000\nG1 E2 F5500\nG1 E2 F6000\nG1 E-15 F5800\nG1 E-20 F5500\nG1 E10 F3000\nG1 E-10 F3100\nG1 E10 F3150\nG1 E-10 F3250\nG1 E10 F3300\n{endif}\n\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\n\n; Unload filament\nM702 C\n\nG4 ; wait\nM104 S0 ; turn off temperature\nM900 K0 ; reset LA\nM84 ; disable motors\n +end_gcode = {if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+1, max_print_height)} F720 ; Move print head up{endif}\nG1 X0 Y210 F7200 ; park\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+49, max_print_height)} F720 ; Move print head further up{endif}\n{if has_wipe_tower}\nG1 E-15 F3000\n{else}\nG1 X0 Y210 F7200\nG1 E2 F5000\nG1 E2 F5500\nG1 E2 F6000\nG1 E-15 F5800\nG1 E-20 F5500\nG1 E10 F3000\nG1 E-10 F3100\nG1 E10 F3150\nG1 E-10 F3250\nG1 E10 F3300\n{endif}\n\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\n\n; Unload filament\nM702 C\n\nG4 ; wait\nM104 S0 ; turn off temperature\nM900 K0 ; reset LA\nM84 ; disable motors\n; max_layer_z = [max_layer_z] [printer:Original Prusa i3 MK2.5S MMU2S 0.6 nozzle] inherits = Original Prusa i3 MK2.5S MMU2S @@ -9527,7 +9708,7 @@ color_change_gcode = M600\nG1 E0.3 F1500 ; prime after color change [printer:Original Prusa i3 MK3] inherits = *common* -end_gcode = {if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+1, max_print_height)} F720 ; Move print head up{endif}\nG1 X0 Y200 F3600 ; park\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+49, max_print_height)} F720 ; Move print head further up{endif}\nG4 ; wait\nM221 S100 ; reset flow\nM900 K0 ; reset LA\n{if print_settings_id=~/.*(DETAIL @MK3|QUALITY @MK3|@0.25 nozzle MK3).*/}M907 E538 ; reset extruder motor current{endif}\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nM84 ; disable motors +end_gcode = {if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+1, max_print_height)} F720 ; Move print head up{endif}\nG1 X0 Y200 F3600 ; park\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+49, max_print_height)} F720 ; Move print head further up{endif}\nG4 ; wait\nM221 S100 ; reset flow\nM900 K0 ; reset LA\n{if print_settings_id=~/.*(DETAIL @MK3|QUALITY @MK3|@0.25 nozzle MK3).*/}M907 E538 ; reset extruder motor current{endif}\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nM84 ; disable motors\n; max_layer_z = [max_layer_z] machine_max_acceleration_e = 5000,5000 machine_max_acceleration_extruding = 1250,1250 machine_max_acceleration_retracting = 1250,1250 @@ -9659,7 +9840,7 @@ inherits = *mm2* single_extruder_multi_material = 0 default_filament_profile = Prusament PLA start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.11.0 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nTx\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\n\n;go outside print area\nG1 Y-3 F1000\nG1 Z0.4 F1000\n; select extruder\nTc\n; purge line\nG1 X55 E8 F2000\nG1 Z0.3 F1000\nG92 E0\nG1 X240 E25 F2200\nG1 Y-2 F1000\nG1 X55 E25 F1400\nG1 Z0.2 F1000\nG1 X5 E4 F1000\n\nM221 S{if layer_height<0.075}100{else}95{endif}\nG92 E0\n\n; Don't change E values below. Excessive value can damage the printer.\n{if print_settings_id=~/.*(DETAIL @MK3|QUALITY @MK3).*/}M907 E430 ; set extruder motor current{endif}\n{if print_settings_id=~/.*(SPEED @MK3|DRAFT @MK3).*/}M907 E538 ; set extruder motor current{endif} -end_gcode = {if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+1, max_print_height)} F720 ; Move print head up{endif}\nG1 X0 Y210 F7200 ; park\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+49, max_print_height)} F720 ; Move print head further up{endif}\nG1 E2 F5000\nG1 E2 F5500\nG1 E2 F6000\nG1 E-15 F5800\nG1 E-20 F5500\nG1 E10 F3000\nG1 E-10 F3100\nG1 E10 F3150\nG1 E-10 F3250\nG1 E10 F3300\n\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nM702 C\nG4 ; wait\nM221 S100 ; reset flow\nM900 K0 ; reset LA\n{if print_settings_id=~/.*(DETAIL @MK3|QUALITY @MK3|@0.25 nozzle MK3).*/}M907 E538 ; reset extruder motor current{endif}\nM104 S0 ; turn off temperature\nM84 ; disable motors +end_gcode = {if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+1, max_print_height)} F720 ; Move print head up{endif}\nG1 X0 Y210 F7200 ; park\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+49, max_print_height)} F720 ; Move print head further up{endif}\nG1 E2 F5000\nG1 E2 F5500\nG1 E2 F6000\nG1 E-15 F5800\nG1 E-20 F5500\nG1 E10 F3000\nG1 E-10 F3100\nG1 E10 F3150\nG1 E-10 F3250\nG1 E10 F3300\n\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nM702 C\nG4 ; wait\nM221 S100 ; reset flow\nM900 K0 ; reset LA\n{if print_settings_id=~/.*(DETAIL @MK3|QUALITY @MK3|@0.25 nozzle MK3).*/}M907 E538 ; reset extruder motor current{endif}\nM104 S0 ; turn off temperature\nM84 ; disable motors\n; max_layer_z = [max_layer_z] [printer:Original Prusa i3 MK3 MMU2 Single 0.6 nozzle] inherits = Original Prusa i3 MK3 MMU2 Single @@ -9707,7 +9888,7 @@ machine_max_acceleration_e = 8000,8000 nozzle_diameter = 0.4,0.4,0.4,0.4,0.4 extruder_colour = #FF8000;#DB5182;#3EC0FF;#FF4F4F;#FBEB7D start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.11.0 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\n\n; Send the filament type to the MMU2.0 unit.\n; E stands for extruder number, F stands for filament type (0: default; 1:flex; 2: PVA)\nM403 E0 F{"" + ((filament_type[0]=="FLEX") ? 1 : ((filament_type[0]=="PVA") ? 2 : 0))}\nM403 E1 F{"" + ((filament_type[1]=="FLEX") ? 1 : ((filament_type[1]=="PVA") ? 2 : 0))}\nM403 E2 F{"" + ((filament_type[2]=="FLEX") ? 1 : ((filament_type[2]=="PVA") ? 2 : 0))}\nM403 E3 F{"" + ((filament_type[3]=="FLEX") ? 1 : ((filament_type[3]=="PVA") ? 2 : 0))}\nM403 E4 F{"" + ((filament_type[4]=="FLEX") ? 1 : ((filament_type[4]=="PVA") ? 2 : 0))}\n\n{if not has_single_extruder_multi_material_priming}\n;go outside print area\nG1 Y-3 F1000\nG1 Z0.4 F1000\n; select extruder\nT[initial_tool]\n; initial load\nG1 X55 E32 F1073\nG1 X5 E32 F1800\nG1 X55 E8 F2000\nG1 Z0.3 F1000\nG92 E0\nG1 X240 E25 F2200\nG1 Y-2 F1000\nG1 X55 E25 F1400\nG1 Z0.2 F1000\nG1 X5 E4 F1000\nG92 E0\n{endif}\n\nM221 S{if layer_height<0.075}100{else}95{endif}\nG92 E0\n\n; Don't change E values below. Excessive value can damage the printer.\n{if print_settings_id=~/.*(DETAIL @MK3|QUALITY @MK3|SOLUBLE).*/}M907 E430 ; set extruder motor current{endif}\n{if print_settings_id=~/.*(SPEED @MK3|DRAFT @MK3).*/}M907 E538 ; set extruder motor current{endif} -end_gcode = {if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+1, max_print_height)} F720 ; Move print head up{endif}\nG1 X0 Y210 F7200 ; park\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+49, max_print_height)} F720 ; Move print head further up{endif}\n{if has_wipe_tower}\nG1 E-15 F3000\n{else}\nG1 E2 F5000\nG1 E2 F5500\nG1 E2 F6000\nG1 E-15 F5800\nG1 E-20 F5500\nG1 E10 F3000\nG1 E-10 F3100\nG1 E10 F3150\nG1 E-10 F3250\nG1 E10 F3300\n{endif}\n\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\n\n; Unload filament\nM702 C\n\nG4 ; wait\nM221 S100 ; reset flow\nM900 K0 ; reset LA\n{if print_settings_id=~/.*(DETAIL @MK3|QUALITY @MK3|SOLUBLE|@0.25 nozzle MK3).*/}M907 E538 ; reset extruder motor current{endif}\nM104 S0 ; turn off temperature\nM84 ; disable motors\n +end_gcode = {if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+1, max_print_height)} F720 ; Move print head up{endif}\nG1 X0 Y210 F7200 ; park\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+49, max_print_height)} F720 ; Move print head further up{endif}\n{if has_wipe_tower}\nG1 E-15 F3000\n{else}\nG1 E2 F5000\nG1 E2 F5500\nG1 E2 F6000\nG1 E-15 F5800\nG1 E-20 F5500\nG1 E10 F3000\nG1 E-10 F3100\nG1 E10 F3150\nG1 E-10 F3250\nG1 E10 F3300\n{endif}\n\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\n\n; Unload filament\nM702 C\n\nG4 ; wait\nM221 S100 ; reset flow\nM900 K0 ; reset LA\n{if print_settings_id=~/.*(DETAIL @MK3|QUALITY @MK3|SOLUBLE|@0.25 nozzle MK3).*/}M907 E538 ; reset extruder motor current{endif}\nM104 S0 ; turn off temperature\nM84 ; disable motors\n; max_layer_z = [max_layer_z] [printer:Original Prusa i3 MK3S & MK3S+ MMU2S Single] inherits = *mm2s* @@ -9715,7 +9896,7 @@ renamed_from = "Original Prusa i3 MK3S MMU2S Single" single_extruder_multi_material = 0 default_filament_profile = Prusament PLA start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.11.0 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nTx\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\n\n;go outside print area\nG1 Y-3 F1000\nG1 Z0.4 F1000\n; select extruder\nTc\n; purge line\nG1 X55 F2000\nG1 Z0.3 F1000\nG92 E0\nG1 X240 E25 F2200\nG1 Y-2 F1000\nG1 X55 E25 F1400\nG1 Z0.2 F1000\nG1 X5 E4 F1000\n\nM221 S{if layer_height<0.075}100{else}95{endif}\nG92 E0\n\n; Don't change E values below. Excessive value can damage the printer.\n{if print_settings_id=~/.*(DETAIL @MK3|QUALITY @MK3).*/}M907 E430 ; set extruder motor current{endif}\n{if print_settings_id=~/.*(SPEED @MK3|DRAFT @MK3).*/}M907 E538 ; set extruder motor current{endif} -end_gcode = {if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+1, max_print_height)} F720 ; Move print head up{endif}\nG1 X0 Y210 F7200 ; park\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+49, max_print_height)} F720 ; Move print head further up{endif}\nG1 E2 F5000\nG1 E2 F5500\nG1 E2 F6000\nG1 E-15 F5800\nG1 E-20 F5500\nG1 E10 F3000\nG1 E-10 F3100\nG1 E10 F3150\nG1 E-10 F3250\nG1 E10 F3300\n\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nM702 C\nG4 ; wait\nM221 S100 ; reset flow\nM900 K0 ; reset LA\n{if print_settings_id=~/.*(DETAIL @MK3|QUALITY @MK3|@0.25 nozzle MK3).*/}M907 E538 ; reset extruder motor current{endif}\nM104 S0 ; turn off temperature\nM84 ; disable motors +end_gcode = {if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+1, max_print_height)} F720 ; Move print head up{endif}\nG1 X0 Y210 F7200 ; park\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+49, max_print_height)} F720 ; Move print head further up{endif}\nG1 E2 F5000\nG1 E2 F5500\nG1 E2 F6000\nG1 E-15 F5800\nG1 E-20 F5500\nG1 E10 F3000\nG1 E-10 F3100\nG1 E10 F3150\nG1 E-10 F3250\nG1 E10 F3300\n\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nM702 C\nG4 ; wait\nM221 S100 ; reset flow\nM900 K0 ; reset LA\n{if print_settings_id=~/.*(DETAIL @MK3|QUALITY @MK3|@0.25 nozzle MK3).*/}M907 E538 ; reset extruder motor current{endif}\nM104 S0 ; turn off temperature\nM84 ; disable motors\n; max_layer_z = [max_layer_z] [printer:Original Prusa i3 MK3S & MK3S+ MMU2S Single 0.6 nozzle] inherits = Original Prusa i3 MK3S & MK3S+ MMU2S Single @@ -9766,7 +9947,7 @@ machine_max_acceleration_e = 8000,8000 nozzle_diameter = 0.4,0.4,0.4,0.4,0.4 extruder_colour = #FF8000;#DB5182;#3EC0FF;#FF4F4F;#FBEB7D start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U3.11.0 ; tell printer latest fw version\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 W ; home all without mesh bed level\nG80 ; mesh bed leveling\n\n; Send the filament type to the MMU2.0 unit.\n; E stands for extruder number, F stands for filament type (0: default; 1:flex; 2: PVA)\nM403 E0 F{"" + ((filament_type[0]=="FLEX") ? 1 : ((filament_type[0]=="PVA") ? 2 : 0))}\nM403 E1 F{"" + ((filament_type[1]=="FLEX") ? 1 : ((filament_type[1]=="PVA") ? 2 : 0))}\nM403 E2 F{"" + ((filament_type[2]=="FLEX") ? 1 : ((filament_type[2]=="PVA") ? 2 : 0))}\nM403 E3 F{"" + ((filament_type[3]=="FLEX") ? 1 : ((filament_type[3]=="PVA") ? 2 : 0))}\nM403 E4 F{"" + ((filament_type[4]=="FLEX") ? 1 : ((filament_type[4]=="PVA") ? 2 : 0))}\n\n{if not has_single_extruder_multi_material_priming}\n;go outside print area\nG1 Y-3 F1000\nG1 Z0.4 F1000\n; select extruder\nT[initial_tool]\n; initial load\nG1 X55 E29 F1073\nG1 X5 E29 F1800\nG1 X55 E8 F2000\nG1 Z0.3 F1000\nG92 E0\nG1 X240 E25 F2200\nG1 Y-2 F1000\nG1 X55 E25 F1400\nG1 Z0.2 F1000\nG1 X5 E4 F1000\nG92 E0\n{endif}\n\nM221 S{if layer_height<0.075}100{else}95{endif}\nG92 E0\n\n; Don't change E values below. Excessive value can damage the printer.\n{if print_settings_id=~/.*(DETAIL @MK3|QUALITY @MK3|SOLUBLE).*/}M907 E430 ; set extruder motor current{endif}\n{if print_settings_id=~/.*(SPEED @MK3|DRAFT @MK3).*/}M907 E538 ; set extruder motor current{endif} -end_gcode = {if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+1, max_print_height)} F720 ; Move print head up{endif}\nG1 X0 Y210 F7200 ; park\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+49, max_print_height)} F720 ; Move print head further up{endif}\n{if has_wipe_tower}\nG1 E-15 F3000\n{else}\nG1 E2 F5000\nG1 E2 F5500\nG1 E2 F6000\nG1 E-15 F5800\nG1 E-20 F5500\nG1 E10 F3000\nG1 E-10 F3100\nG1 E10 F3150\nG1 E-10 F3250\nG1 E10 F3300\n{endif}\n\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\n\n; Unload filament\nM702 C\n\nG4 ; wait\nM221 S100 ; reset flow\nM900 K0 ; reset LA\n{if print_settings_id=~/.*(DETAIL @MK3|QUALITY @MK3|SOLUBLE|@0.25 nozzle MK3).*/}M907 E538 ; reset extruder motor current{endif}\nM104 S0 ; turn off temperature\nM84 ; disable motors\n +end_gcode = {if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+1, max_print_height)} F720 ; Move print head up{endif}\nG1 X0 Y210 F7200 ; park\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+49, max_print_height)} F720 ; Move print head further up{endif}\n{if has_wipe_tower}\nG1 E-15 F3000\n{else}\nG1 E2 F5000\nG1 E2 F5500\nG1 E2 F6000\nG1 E-15 F5800\nG1 E-20 F5500\nG1 E10 F3000\nG1 E-10 F3100\nG1 E10 F3150\nG1 E-10 F3250\nG1 E10 F3300\n{endif}\n\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\n\n; Unload filament\nM702 C\n\nG4 ; wait\nM221 S100 ; reset flow\nM900 K0 ; reset LA\n{if print_settings_id=~/.*(DETAIL @MK3|QUALITY @MK3|SOLUBLE|@0.25 nozzle MK3).*/}M907 E538 ; reset extruder motor current{endif}\nM104 S0 ; turn off temperature\nM84 ; disable motors\n; max_layer_z = [max_layer_z] ## 0.6mm nozzle MMU2/S printer profiles @@ -9883,7 +10064,7 @@ retract_layer_change = 1 silent_mode = 0 remaining_times = 1 start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S170 ; set extruder temp for bed leveling\nM140 S[first_layer_bed_temperature] ; set bed temp\nM109 R170 ; wait for bed leveling temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM204 T1250 ; set travel acceleration\nG28 ; home all without mesh bed level\nG29 ; mesh bed leveling \nM204 T[machine_max_acceleration_travel] ; restore travel acceleration\nM104 S[first_layer_temperature] ; set extruder temp\nG92 E0\nG1 Y-2 X179 F2400\nG1 Z3 F720\nM109 S[first_layer_temperature] ; wait for extruder temp\n\n; intro line\nG1 X170 F1000\nG1 Z0.2 F720\nG1 X110 E8 F900\nG1 X40 E10 F700\nG92 E0\n\nM221 S95 ; set flow -end_gcode = G1 E-1 F2100 ; retract\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+2, max_print_height)} F720 ; Move print head up{endif}\nG1 X178 Y178 F4200 ; park print head\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+30, max_print_height)} F720 ; Move print head further up{endif}\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nM221 S100 ; reset flow\nM900 K0 ; reset LA\nM84 ; disable motors +end_gcode = G1 E-1 F2100 ; retract\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+2, max_print_height)} F720 ; Move print head up{endif}\nG1 X178 Y178 F4200 ; park print head\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+30, max_print_height)} F720 ; Move print head further up{endif}\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nM221 S100 ; reset flow\nM900 K0 ; reset LA\nM84 ; disable motors\n; max_layer_z = [max_layer_z] printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_MINI\n extruder_colour = color_change_gcode = M600