From 296041da38273fbf0053d6e338bf5a2bb51d030d Mon Sep 17 00:00:00 2001 From: enricoturri1966 Date: Tue, 14 Dec 2021 10:21:31 +0100 Subject: [PATCH 01/19] #7464 - Fixed 'Export as .stl' scaling not applied on scaled object instances --- src/slic3r/GUI/Plater.cpp | 62 ++++++++++++++++----------------------- 1 file changed, 26 insertions(+), 36 deletions(-) diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index b3ec464256..89d74f7bb5 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -5707,23 +5707,26 @@ void Plater::export_stl(bool extended, bool selection_only) return; // Following lambda generates a combined mesh for export with normals pointing outwards. - auto mesh_to_export = [](const ModelObject* mo, bool instances) -> TriangleMesh { + auto mesh_to_export = [](const ModelObject& mo, int instance_id) { TriangleMesh mesh; - for (const ModelVolume *v : mo->volumes) + for (const ModelVolume* v : mo.volumes) if (v->is_model_part()) { TriangleMesh vol_mesh(v->mesh()); vol_mesh.transform(v->get_matrix(), true); mesh.merge(vol_mesh); } - if (instances) { + if (instance_id == -1) { TriangleMesh vols_mesh(mesh); mesh = TriangleMesh(); - for (const ModelInstance *i : mo->instances) { + for (const ModelInstance* i : mo.instances) { TriangleMesh m = vols_mesh; m.transform(i->get_matrix(), true); mesh.merge(m); } } + else if (0 <= instance_id && instance_id < mo.instances.size()) + mesh.transform(mo.instances[instance_id]->get_matrix(), true); + return mesh; }; @@ -5732,14 +5735,8 @@ void Plater::export_stl(bool extended, bool selection_only) if (selection_only) { const ModelObject* model_object = p->model.objects[obj_idx]; if (selection.get_mode() == Selection::Instance) - { - if (selection.is_single_full_object()) - mesh = mesh_to_export(model_object, true); - else - mesh = mesh_to_export(model_object, false); - } - else - { + mesh = selection.is_single_full_object() ? mesh_to_export(*model_object, -1) : mesh_to_export(*model_object, selection.get_instance_idx()); + else { const GLVolume* volume = selection.get_volume(*selection.get_volume_idxs().begin()); mesh = model_object->volumes[volume->volume_idx()]->mesh(); mesh.transform(volume->get_volume_transformation().get_matrix(), true); @@ -5747,69 +5744,62 @@ void Plater::export_stl(bool extended, bool selection_only) } } else { - for (const ModelObject *o : p->model.objects) - mesh.merge(mesh_to_export(o, true)); + for (const ModelObject* o : p->model.objects) { + mesh.merge(mesh_to_export(*o, -1)); + } } } - else - { + else { // This is SLA mode, all objects have only one volume. // However, we must have a look at the backend to load // hollowed mesh and/or supports const PrintObjects& objects = p->sla_print.objects(); - for (const SLAPrintObject* object : objects) - { + for (const SLAPrintObject* object : objects) { const ModelObject* model_object = object->model_object(); if (selection_only) { if (model_object->id() != p->model.objects[obj_idx]->id()) continue; } - Transform3d mesh_trafo_inv = object->trafo().inverse(); - bool is_left_handed = object->is_left_handed(); + const Transform3d mesh_trafo_inv = object->trafo().inverse(); + const bool is_left_handed = object->is_left_handed(); TriangleMesh pad_mesh; - bool has_pad_mesh = extended && object->has_mesh(slaposPad); - if (has_pad_mesh) - { + const bool has_pad_mesh = extended && object->has_mesh(slaposPad); + if (has_pad_mesh) { pad_mesh = object->get_mesh(slaposPad); pad_mesh.transform(mesh_trafo_inv); } TriangleMesh supports_mesh; - bool has_supports_mesh = extended && object->has_mesh(slaposSupportTree); - if (has_supports_mesh) - { + const bool has_supports_mesh = extended && object->has_mesh(slaposSupportTree); + if (has_supports_mesh) { supports_mesh = object->get_mesh(slaposSupportTree); supports_mesh.transform(mesh_trafo_inv); } const std::vector& obj_instances = object->instances(); - for (const SLAPrintObject::Instance& obj_instance : obj_instances) - { + for (const SLAPrintObject::Instance& obj_instance : obj_instances) { auto it = std::find_if(model_object->instances.begin(), model_object->instances.end(), [&obj_instance](const ModelInstance *mi) { return mi->id() == obj_instance.instance_id; }); assert(it != model_object->instances.end()); - if (it != model_object->instances.end()) - { - bool one_inst_only = selection_only && ! selection.is_single_full_object(); + if (it != model_object->instances.end()) { + const bool one_inst_only = selection_only && ! selection.is_single_full_object(); - int instance_idx = it - model_object->instances.begin(); + const int instance_idx = it - model_object->instances.begin(); const Transform3d& inst_transform = one_inst_only ? Transform3d::Identity() : object->model_object()->instances[instance_idx]->get_transformation().get_matrix(); TriangleMesh inst_mesh; - if (has_pad_mesh) - { + if (has_pad_mesh) { TriangleMesh inst_pad_mesh = pad_mesh; inst_pad_mesh.transform(inst_transform, is_left_handed); inst_mesh.merge(inst_pad_mesh); } - if (has_supports_mesh) - { + if (has_supports_mesh) { TriangleMesh inst_supports_mesh = supports_mesh; inst_supports_mesh.transform(inst_transform, is_left_handed); inst_mesh.merge(inst_supports_mesh); From 9e88eb09b51f95e676486ed072153393a6c9d1aa Mon Sep 17 00:00:00 2001 From: Filip Sykala Date: Wed, 15 Dec 2021 14:22:27 +0100 Subject: [PATCH 02/19] add VS filter by subdir --- src/libslic3r/CMakeLists.txt | 10 +++++++++- src/slic3r/CMakeLists.txt | 6 ++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/libslic3r/CMakeLists.txt b/src/libslic3r/CMakeLists.txt index deaa0b9241..97d1d5ce5c 100644 --- a/src/libslic3r/CMakeLists.txt +++ b/src/libslic3r/CMakeLists.txt @@ -14,7 +14,7 @@ if (TARGET OpenVDB::openvdb) set(OpenVDBUtils_SOURCES OpenVDBUtils.cpp OpenVDBUtils.hpp) endif() -add_library(libslic3r STATIC +set(SLIC3R_SOURCES pchheader.cpp pchheader.hpp BoundingBox.cpp @@ -291,6 +291,14 @@ add_library(libslic3r STATIC SLA/ReprojectPointsOnMesh.hpp ) +add_library(libslic3r STATIC ${SLIC3R_SOURCES}) + +foreach(_source IN ITEMS ${SLIC3R_SOURCES}) + get_filename_component(_source_path "${_source}" PATH) + string(REPLACE "/" "\\" _group_path "${_source_path}") + source_group("${_group_path}" FILES "${_source}") +endforeach() + if (SLIC3R_STATIC) set(CGAL_Boost_USE_STATIC_LIBS ON CACHE BOOL "" FORCE) endif () diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt index 34cc980513..211a2c2e7a 100644 --- a/src/slic3r/CMakeLists.txt +++ b/src/slic3r/CMakeLists.txt @@ -258,6 +258,12 @@ endif () add_library(libslic3r_gui STATIC ${SLIC3R_GUI_SOURCES}) +foreach(_source IN ITEMS ${SLIC3R_GUI_SOURCES}) + get_filename_component(_source_path "${_source}" PATH) + string(REPLACE "/" "\\" _group_path "${_source_path}") + source_group("${_group_path}" FILES "${_source}") +endforeach() + encoding_check(libslic3r_gui) target_link_libraries(libslic3r_gui libslic3r avrdude cereal imgui GLEW::GLEW OpenGL::GL hidapi libcurl ${wxWidgets_LIBRARIES}) From f4b9d535de7df5f25abd793f64b31eee1e9cc80f Mon Sep 17 00:00:00 2001 From: Maximilian Engelhardt Date: Mon, 11 Oct 2021 11:09:11 +0200 Subject: [PATCH 03/19] Update Anycubic i3 Mega (S) profile - revert retraction settings as the previous change causes issues with stringing. - sync many settings with Prusa MK2 profile and some with Prusa MK3 profile. - remove no longer needed SUPPORTED print settings. Support settings can now be selected directly in the PrusaSlicer menu. - add DAS FILAMENT PETG profile. --- resources/profiles/Anycubic.ini | 59 +++++++++++++++++---------------- 1 file changed, 30 insertions(+), 29 deletions(-) diff --git a/resources/profiles/Anycubic.ini b/resources/profiles/Anycubic.ini index 2cb42f0281..9e7a0036df 100644 --- a/resources/profiles/Anycubic.ini +++ b/resources/profiles/Anycubic.ini @@ -828,34 +828,35 @@ end_gcode = M117 Cooling down...\nM104 S0 ; turn off extruder\nM107 ; Fan off\nM bottom_solid_min_thickness = 0.5 bridge_acceleration = 1000 bridge_flow_ratio = 0.95 -bridge_speed = 30 +bridge_speed = 25 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_ANYCUBIC.*/ and printer_notes=~/.*PRINTER_MODEL_I3_MEGA.*/ and nozzle_diameter[0]==0.4 default_acceleration = 1000 ensure_vertical_shell_thickness = 1 external_perimeter_extrusion_width = 0.45 -external_perimeter_speed = 25 +external_perimeter_speed = 40 extruder_clearance_height = 35 extruder_clearance_radius = 60 extrusion_width = 0.45 fill_density = 15% fill_pattern = gyroid -first_layer_acceleration = 1000 +first_layer_acceleration = 800 first_layer_extrusion_width = 0.42 first_layer_height = 0.2 first_layer_speed = 20 gap_fill_speed = 40 -gcode_comments = 1 +gcode_comments = 0 +gcode_label_objects = 1 infill_acceleration = 1000 infill_anchor = 2.5 infill_anchor_max = 12 infill_extrusion_width = 0.45 -max_print_speed = 200 +max_print_speed = 100 min_skirt_length = 4 only_retract_when_crossing_perimeters = 0 output_filename_format = {input_filename_base}_{layer_height}mm_{filament_type[0]}_{printer_model}_{print_time}.gcode perimeter_acceleration = 800 perimeter_extrusion_width = 0.45 -perimeter_speed = 45 +perimeter_speed = 50 perimeters = 2 seam_position = nearest skirt_distance = 2 @@ -864,25 +865,24 @@ skirts = 1 small_perimeter_speed = 25 solid_infill_below_area = 0 solid_infill_extrusion_width = 0.45 -solid_infill_speed = 80 -support_material_buildplate_only = 1 +solid_infill_speed = 50 +support_material = 0 +support_material_buildplate_only = 0 support_material_contact_distance = 0.1 support_material_extrusion_width = 0.35 support_material_interface_layers = 2 support_material_interface_spacing = 0.2 +support_material_interface_speed = 80% support_material_spacing = 2 support_material_speed = 50 -support_material_threshold = 55 +support_material_threshold = 50 +support_material_xy_spacing = 60% thin_walls = 0 top_infill_extrusion_width = 0.4 top_solid_infill_speed = 40 -top_solid_layers = 5 -top_solid_min_thickness = 0.6 +top_solid_min_thickness = 0.7 travel_speed = 180 -[print:*supported_mega*] -support_material = 1 - # XXXXXXXXXXXXXXXXXXXX # XXX--- 0.15mm ---XXX # XXXXXXXXXXXXXXXXXXXX @@ -890,15 +890,14 @@ support_material = 1 [print:*0.15mm_mega*] inherits = *common_mega* bottom_solid_layers = 5 +bridge_flow_ratio = 1 +infill_speed = 60 layer_height = 0.15 top_solid_layers = 7 [print:0.15mm QUALITY @MEGA] inherits = *0.15mm_mega* -[print:0.15mm QUALITY SUPPORTED @MEGA] -inherits = *0.15mm_mega*;*supported_mega* - # XXXXXXXXXXXXXXXXXXXX # XXX--- 0.20mm ---XXX # XXXXXXXXXXXXXXXXXXXX @@ -906,15 +905,13 @@ inherits = *0.15mm_mega*;*supported_mega* [print:*0.20mm_mega*] inherits = *common_mega* bottom_solid_layers = 4 +infill_speed = 60 layer_height = 0.2 top_solid_layers = 5 [print:0.20mm QUALITY @MEGA] inherits = *0.20mm_mega* -[print:0.20mm QUALITY SUPPORTED @MEGA] -inherits = *0.20mm_mega*;*supported_mega* - # XXXXXXXXXXXXXXXXXXXX # XXX--- 0.30mm ---XXX # XXXXXXXXXXXXXXXXXXXX @@ -925,12 +922,11 @@ bottom_solid_layers = 4 external_perimeter_extrusion_width = 0.6 external_perimeter_speed = 35 extrusion_width = 0.5 -fill_pattern = grid +fill_pattern = cubic infill_extrusion_width = 0.5 infill_speed = 85 layer_height = 0.3 perimeter_extrusion_width = 0.5 -perimeter_speed = 50 small_perimeter_speed = 30 solid_infill_extrusion_width = 0.5 support_material_extrusion_width = 0.38 @@ -940,9 +936,6 @@ top_solid_layers = 4 [print:0.30mm DRAFT @MEGA] inherits = *0.30mm_mega* -[print:0.30mm DRAFT SUPPORTED @MEGA] -inherits = *0.30mm_mega*;*supported_mega* - # XXXXXXXXXXXXXXXXXXXXXX # XXX--- filament ---XXX # XXXXXXXXXXXXXXXXXXXXXX @@ -1092,6 +1085,14 @@ first_layer_temperature = 215 min_fan_speed = 100 temperature = 210 +[filament:DAS FILAMENT PETG @MEGA] +inherits = *PETG_mega* +filament_vendor = DAS FILAMENT +bed_temperature = 75 +first_layer_bed_temperature = 75 +first_layer_temperature = 220 +temperature = 225 + [filament:*PLA_mega*] inherits = *common_mega* bed_temperature = 60 @@ -1166,7 +1167,7 @@ bed_shape = 0x0,210x0,210x210,0x210 before_layer_gcode = ;BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z] default_filament_profile = Generic PLA @MEGA default_print_profile = 0.15mm QUALITY @MEGA -deretract_speed = 40 +deretract_speed = 50 end_gcode = G1 E-1.0 F2100 ; retract\nG92 E0.0\nG1{if max_layer_z < max_print_height} Z{z_offset+min(max_layer_z+30, max_print_height)}{endif} E-34.0 F720 ; move print head up & retract filament\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X0 Y105 F3000 ; park print head\nM84 ; disable motors extruder_colour = #808080 gcode_flavor = marlin @@ -1177,10 +1178,10 @@ remaining_times = 1 retract_before_travel = 1.5 retract_before_wipe = 60% retract_layer_change = 1 -retract_length = 3.2 -retract_lift = 0.2 +retract_length = 6 +retract_lift = 0.075 retract_lift_below = 204 -retract_speed = 70 +retract_speed = 40 silent_mode = 0 start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM204 S[machine_max_acceleration_extruding] T[machine_max_acceleration_retracting]\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nG28 ; home all\nG1 Y1.0 Z0.3 F1000 ; move print head up\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG92 E0.0\n; initial load\nG1 X205.0 E19 F1000\nG1 Y1.6\nG1 X5.0 E19 F1000\nG92 E0.0\n; intro line\nG1 Y2.0 Z0.2 F1000\nG1 X65.0 E9.0 F1000\nG1 X105.0 E12.5 F1000\nG92 E0.0 thumbnails = 16x16,220x124 From 5579b31a2638baf0a42cb3d891bb363fbe161255 Mon Sep 17 00:00:00 2001 From: YuSanka Date: Wed, 15 Dec 2021 15:58:18 +0100 Subject: [PATCH 04/19] UpdateDialogs: Fixed an alignment inside a GridSizer, when "Open changelog page" is added. --- src/slic3r/GUI/UpdateDialogs.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/slic3r/GUI/UpdateDialogs.cpp b/src/slic3r/GUI/UpdateDialogs.cpp index 367c290d94..f80975ce52 100644 --- a/src/slic3r/GUI/UpdateDialogs.cpp +++ b/src/slic3r/GUI/UpdateDialogs.cpp @@ -132,6 +132,7 @@ MsgUpdateConfig::MsgUpdateConfig(const std::vector &updates, bool force_ line->AddSpacer(3*VERT_SPACING); line->Add(new wxHyperlinkCtrl(this, wxID_ANY, _(L("Open changelog page")), changelog_url)); versions->Add(line); + versions->AddSpacer(1); // empty value for the correct alignment inside a GridSizer } } @@ -189,6 +190,7 @@ MsgUpdateForced::MsgUpdateForced(const std::vector& updates) : line->AddSpacer(3 * VERT_SPACING); line->Add(new wxHyperlinkCtrl(this, wxID_ANY, _(L("Open changelog page")), changelog_url)); versions->Add(line); + versions->AddSpacer(1); // empty value for the correct alignment inside a GridSizer } } From 2dc461719f44acbc7b967f8ca159373b0ed34b41 Mon Sep 17 00:00:00 2001 From: Vojtech Bubnik Date: Wed, 15 Dec 2021 16:09:16 +0100 Subject: [PATCH 05/19] Importing newer config when starting the application: Cache directory is newly deleted before it is imported from the newer config location. Linux specific: When asking for certificate directory, perform import of configs first. --- src/libslic3r/PresetBundle.cpp | 14 ++++++++++-- src/slic3r/GUI/GUI_App.cpp | 41 +++++++++++++++++----------------- 2 files changed, 32 insertions(+), 23 deletions(-) diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index 81983b4aa8..b6ac1a51b8 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -212,17 +212,27 @@ static void copy_dir(const boost::filesystem::path& from_dir, const boost::files // Import newer configuration from alternate PrusaSlicer configuration directory. // AppConfig from the alternate location is already loaded. // User profiles are being merged (old files are not being deleted), -// while old system bundles are being deleted before newer are copied. +// while old vendors and cache folders are being deleted before newer are copied. void PresetBundle::import_newer_configs(const std::string& from) { boost::filesystem::path data_dir = boost::filesystem::path(Slic3r::data_dir()); // Clean-up vendors from the target directory, as the existing vendors will not be referenced // by the copied PrusaSlicer.ini - boost::filesystem::remove_all(data_dir / "vendor"); + try { + boost::filesystem::remove_all(data_dir / "cache"); + } catch (const std::exception &ex) { + BOOST_LOG_TRIVIAL(error) << "Error deleting old cache " << (data_dir / "cache").string(); + } + try { + boost::filesystem::remove_all(data_dir / "vendor"); + } catch (const std::exception &ex) { + BOOST_LOG_TRIVIAL(error) << "Error deleting old vendors " << (data_dir / "vendor").string(); + } // list of searched paths based on current directory system in setup_directories() // do not copy cache and snapshots boost::filesystem::path from_data_dir = boost::filesystem::path(from); std::initializer_list from_dirs= { + from_data_dir / "cache", from_data_dir / "vendor", from_data_dir / "shapes", #ifdef SLIC3R_PROFILE_USE_PRESETS_SUBDIR diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 0436ab1e6a..0a4aa4bffe 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -1078,27 +1078,6 @@ bool GUI_App::on_init_inner() // Slic3r::debugf "wxWidgets version %s, Wx version %s\n", wxVERSION_STRING, wxVERSION; - - if (is_editor()) { - std::string msg = Http::tls_global_init(); - std::string ssl_cert_store = app_config->get("tls_accepted_cert_store_location"); - bool ssl_accept = app_config->get("tls_cert_store_accepted") == "yes" && ssl_cert_store == Http::tls_system_cert_store(); - - if (!msg.empty() && !ssl_accept) { - RichMessageDialog - dlg(nullptr, - wxString::Format(_L("%s\nDo you want to continue?"), msg), - "PrusaSlicer", wxICON_QUESTION | wxYES_NO); - dlg.ShowCheckBox(_L("Remember my choice")); - if (dlg.ShowModal() != wxID_YES) return false; - - app_config->set("tls_cert_store_accepted", - dlg.IsCheckBoxChecked() ? "yes" : "no"); - app_config->set("tls_accepted_cert_store_location", - dlg.IsCheckBoxChecked() ? Http::tls_system_cert_store() : ""); - } - } - // !!! Initialization of UI settings as a language, application color mode, fonts... have to be done before first UI action. // Like here, before the show InfoDialog in check_older_app_config() @@ -1136,6 +1115,26 @@ bool GUI_App::on_init_inner() NppDarkMode::SetSystemMenuForApp(new_sys_menu_enabled); #endif + if (is_editor()) { + std::string msg = Http::tls_global_init(); + std::string ssl_cert_store = app_config->get("tls_accepted_cert_store_location"); + bool ssl_accept = app_config->get("tls_cert_store_accepted") == "yes" && ssl_cert_store == Http::tls_system_cert_store(); + + if (!msg.empty() && !ssl_accept) { + RichMessageDialog + dlg(nullptr, + wxString::Format(_L("%s\nDo you want to continue?"), msg), + "PrusaSlicer", wxICON_QUESTION | wxYES_NO); + dlg.ShowCheckBox(_L("Remember my choice")); + if (dlg.ShowModal() != wxID_YES) return false; + + app_config->set("tls_cert_store_accepted", + dlg.IsCheckBoxChecked() ? "yes" : "no"); + app_config->set("tls_accepted_cert_store_location", + dlg.IsCheckBoxChecked() ? Http::tls_system_cert_store() : ""); + } + } + SplashScreen* scrn = nullptr; if (app_config->get("show_splash_screen") == "1") { // make a bitmap with dark grey banner on the left side From c045a34fa03c172c3bc6644b4cceab551c84e41c Mon Sep 17 00:00:00 2001 From: Pascal de Bruijn Date: Wed, 15 Dec 2021 19:43:15 +0100 Subject: [PATCH 06/19] creality.ini: always output layer heights with two decimals --- resources/profiles/Creality.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/profiles/Creality.ini b/resources/profiles/Creality.ini index 0605568806..401682820d 100644 --- a/resources/profiles/Creality.ini +++ b/resources/profiles/Creality.ini @@ -362,7 +362,7 @@ notes = overhangs = 0 only_retract_when_crossing_perimeters = 0 ooze_prevention = 0 -output_filename_format = {input_filename_base}_{print_time}_{layer_height}mm_{temperature[0]}C_{filament_type[0]}_{printer_model}.gcode +output_filename_format = {input_filename_base}_{print_time}_{digits(layer_height,1,2)}mm_{temperature[0]}C_{filament_type[0]}_{printer_model}.gcode perimeters = 2 perimeter_extruder = 1 perimeter_extrusion_width = 0.45 From f5d434901617cbca250847fc2cb36681d128099d Mon Sep 17 00:00:00 2001 From: Pascal de Bruijn Date: Wed, 15 Dec 2021 20:03:45 +0100 Subject: [PATCH 07/19] creality.ini: slight improvements to Ender-2 Pro Replace bed stl with something consistent with the rest Replace bed svg with something simpler consistent with the rest Add tiny safety margin --- resources/profiles/Creality.ini | 4 +- resources/profiles/Creality/ender2pro.svg | 624 +----------------- resources/profiles/Creality/ender2pro_bed.stl | Bin 4072 -> 35884 bytes 3 files changed, 5 insertions(+), 623 deletions(-) diff --git a/resources/profiles/Creality.ini b/resources/profiles/Creality.ini index 401682820d..909052ae26 100644 --- a/resources/profiles/Creality.ini +++ b/resources/profiles/Creality.ini @@ -1014,10 +1014,10 @@ printer_notes = Don't remove the following keywords! These keywords are used in [printer:Creality Ender-2 Pro] inherits = *common* renamed_from = "Creality ENDER-2 Pro" -bed_shape = 0x0,165x0,165x165,0x165 +bed_shape = 2.5x2.5,160x2.5,160x160,2.5x160 max_print_height = 180 printer_model = ENDER2PRO -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_ENDER2\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_ENDER2PRO\nPRINTER_HAS_BOWDEN [printer:Creality CR-5 Pro] inherits = *common*; *slowabl*; *descendingz* diff --git a/resources/profiles/Creality/ender2pro.svg b/resources/profiles/Creality/ender2pro.svg index 1f8499d736..d5a14a6133 100644 --- a/resources/profiles/Creality/ender2pro.svg +++ b/resources/profiles/Creality/ender2pro.svg @@ -1,622 +1,4 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + diff --git a/resources/profiles/Creality/ender2pro_bed.stl b/resources/profiles/Creality/ender2pro_bed.stl index ec0afb298c7685e1ae3fe2f73e399cb126b73ced..fdce98e1f1cfd8b42b336279480fba892c41859f 100644 GIT binary patch literal 35884 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 literal 4072 zcmcJS!A`?442JJKgi>GZ6F?>H0csINo{M&G->MUIsWqd zkGma*{;Px6z23cTo}S-dhEDf40H50reS+O^_}=zVo0n?LU4Y@|qz}*!!`^-b_|=D# z{)6>>wOWIESXJizb{?}gmm{+zz3ZmM&6S0?07g+XRP3&?yLfEFF0K!hDe7fanP3qj zN(EBBq?tu;KVXKq&|rTzF$d%r%}y#zR1Is*`=?Dlyi&ZBGZW!!6+Gx z-D$SsL>mnOya$)Y(~NV69y>wr2nF{q3fUZoQx0V2(x@QEf}|{=2~m!s#FM6+F6pYl zpA=}C$4fIhm+=d6S_qohWju<2gs4YQUS!?|lrW1es(XTgdDkB%%~F#I=iy_ zqBl#ZMi7d}+$acxVhiFaAwUU`Qc3vPAJ&XF&Ja3wu_WU!JVugfMOQZ-@2s7%mXZTx za2VH8(@e}-QXs5>yjwU+>KofFMxJGV;EDuiNojIFWc`UshrJKY@=B^Btr_cs^TYzF zx@zmTsas>|^Of7o(nOx^J7yq_pJ^_C+yYj(VgPX+_tkvU5_qhjxT9y)qHh(jzW_-9 From 37cfcadaddb76bbabeb1294774dfd4b2ce22c640 Mon Sep 17 00:00:00 2001 From: Pascal de Bruijn Date: Wed, 15 Dec 2021 20:14:01 +0100 Subject: [PATCH 08/19] creality.ini: add preliminary Ender-3 S1 --- resources/profiles/Creality.ini | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/resources/profiles/Creality.ini b/resources/profiles/Creality.ini index 909052ae26..2b05272e2c 100644 --- a/resources/profiles/Creality.ini +++ b/resources/profiles/Creality.ini @@ -41,6 +41,15 @@ bed_model = ender3v2_bed.stl bed_texture = ender3v2.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 +[printer_model:ENDER3S1] +name = Creality Ender-3 S1 +variants = 0.4 +technology = FFF +family = ENDER +bed_model = ender3v2_bed.stl +bed_texture = ender3v2.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 + [printer_model:ENDER3MAX] name = Creality Ender-3 Max variants = 0.4 @@ -952,6 +961,14 @@ max_print_height = 250 printer_model = ENDER3V2 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_ENDER3V2\nPRINTER_HAS_BOWDEN +[printer:Creality Ender-3 S1] +inherits = *common*; *fastabl* +retract_length = 1 +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:Creality Ender-3 Max] inherits = *common* retract_length = 6 From 729ffc9dd676bd1e823180c8b802b44cf11a89b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Hejl?= Date: Thu, 16 Dec 2021 08:56:29 +0100 Subject: [PATCH 09/19] Fixed that external travels led inside holes (around the perimeter) instead of inside the model when the avoid crossing perimeters was enabled. Caused by changed behaviour of offset/expand functions when called on CW polygons (holes) after 7ff76d07684858fd937ef2f5d863f105a10f798e. When it is called expand on CW polygons (holes), they shrunk instead of expanded. --- src/libslic3r/GCode/AvoidCrossingPerimeters.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/libslic3r/GCode/AvoidCrossingPerimeters.cpp b/src/libslic3r/GCode/AvoidCrossingPerimeters.cpp index 48b9515f75..1b55514ee2 100644 --- a/src/libslic3r/GCode/AvoidCrossingPerimeters.cpp +++ b/src/libslic3r/GCode/AvoidCrossingPerimeters.cpp @@ -1034,24 +1034,30 @@ static Polygons get_boundary_external(const Layer &layer) #endif // Collect all holes for all printed objects and their instances, which will be printed at the same time as passed "layer". for (const PrintObject *object : layer.object()->print()->objects()) { - Polygons polygons_per_obj; + Polygons holes_per_obj; #ifdef INCLUDE_SUPPORTS_IN_BOUNDARY ExPolygons supports_per_obj; #endif if (const Layer *l = object->get_layer_at_printz(layer.print_z, EPSILON); l) - for (const ExPolygon &island : l->lslices) append(polygons_per_obj, island.holes); + for (const ExPolygon &island : l->lslices) + append(holes_per_obj, island.holes); if (support_layer) { auto *layer_below = object->get_first_layer_bellow_printz(layer.print_z, EPSILON); if (layer_below) - for (const ExPolygon &island : layer_below->lslices) append(polygons_per_obj, island.holes); + for (const ExPolygon &island : layer_below->lslices) + append(holes_per_obj, island.holes); #ifdef INCLUDE_SUPPORTS_IN_BOUNDARY append(supports_per_obj, support_layer->support_islands.expolygons); #endif } + // After 7ff76d07684858fd937ef2f5d863f105a10f798e, when expand is called on CW polygons (holes), they are shrunk + // instead of expanded because union that makes CCW from CW isn't called anymore. So let's make it CCW. + polygons_reverse(holes_per_obj); + for (const PrintInstance &instance : object->instances()) { size_t boundary_idx = boundary.size(); - append(boundary, polygons_per_obj); + append(boundary, holes_per_obj); for (; boundary_idx < boundary.size(); ++boundary_idx) boundary[boundary_idx].translate(instance.shift); #ifdef INCLUDE_SUPPORTS_IN_BOUNDARY From 285e2a32a2bc53465f6d8c885d3a6b99bcca2be1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Hejl?= Date: Thu, 16 Dec 2021 08:57:04 +0100 Subject: [PATCH 10/19] Fixed issues in inner_offset() in the avoid crossing perimeters that caused in some cases travels to follow the first perimeter instead of the second one. --- .../GCode/AvoidCrossingPerimeters.cpp | 52 ++++++++++++------- 1 file changed, 34 insertions(+), 18 deletions(-) diff --git a/src/libslic3r/GCode/AvoidCrossingPerimeters.cpp b/src/libslic3r/GCode/AvoidCrossingPerimeters.cpp index 1b55514ee2..4173225847 100644 --- a/src/libslic3r/GCode/AvoidCrossingPerimeters.cpp +++ b/src/libslic3r/GCode/AvoidCrossingPerimeters.cpp @@ -731,34 +731,50 @@ static bool need_wipe(const GCode &gcodegen, } // Adds points around all vertices so that the offset affects only small sections around these vertices. -static void resample_polygon(Polygon &polygon, double dist_from_vertex) +static void resample_polygon(Polygon &polygon, double dist_from_vertex, double max_allowed_distance) { Points resampled_poly; resampled_poly.reserve(3 * polygon.size()); - resampled_poly.emplace_back(polygon.first_point()); - for (size_t pt_idx = 1; pt_idx < polygon.size(); ++pt_idx) { - const Point &p1 = polygon[pt_idx - 1]; - const Point &p2 = polygon[pt_idx]; - double line_length = (p2 - p1).cast().norm(); - Vector line_vec = ((p2 - p1).cast().normalized() * dist_from_vertex).cast(); - if (line_length > 2 * dist_from_vertex) { - resampled_poly.emplace_back(p1 + line_vec); - resampled_poly.emplace_back(p2 - line_vec); - } + for (size_t pt_idx = 0; pt_idx < polygon.size(); ++pt_idx) { resampled_poly.emplace_back(polygon[pt_idx]); + + const Point &p1 = polygon[pt_idx]; + const Point &p2 = polygon[next_idx_modulo(pt_idx, polygon.size())]; + const Vec2d line_vec = (p2 - p1).cast(); + double line_length = line_vec.norm(); + const Vector vertex_offset_vec = (line_vec.normalized() * dist_from_vertex).cast(); + if (line_length > 2 * dist_from_vertex && vertex_offset_vec != Vector(0, 0)) { + resampled_poly.emplace_back(p1 + vertex_offset_vec); + + const Vec2d new_vertex_vec = (p2 - p1 - 2 * vertex_offset_vec).cast(); + const double new_vertex_vec_length = new_vertex_vec.norm(); + if (new_vertex_vec_length > max_allowed_distance) { + const Vec2d &prev_point = resampled_poly.back().cast(); + const size_t parts_count = size_t(ceil(new_vertex_vec_length / max_allowed_distance)); + for (size_t part_idx = 1; part_idx < parts_count; ++part_idx) { + const double part_param = double(part_idx) / double(parts_count); + const Vec2d new_point = prev_point + new_vertex_vec * part_param; + resampled_poly.emplace_back(new_point.cast()); + } + } + + resampled_poly.emplace_back(p2 - vertex_offset_vec); + } } polygon.points = std::move(resampled_poly); } -static void resample_expolygon(ExPolygon &ex_polygon, double dist_from_vertex) +static void resample_expolygon(ExPolygon &ex_polygon, double dist_from_vertex, double max_allowed_distance) { - resample_polygon(ex_polygon.contour, dist_from_vertex); - for (Polygon &polygon : ex_polygon.holes) resample_polygon(polygon, dist_from_vertex); + resample_polygon(ex_polygon.contour, dist_from_vertex, max_allowed_distance); + for (Polygon &polygon : ex_polygon.holes) + resample_polygon(polygon, dist_from_vertex, max_allowed_distance); } -static void resample_expolygons(ExPolygons &ex_polygons, double dist_from_vertex) +static void resample_expolygons(ExPolygons &ex_polygons, double dist_from_vertex, double max_allowed_distance) { - for (ExPolygon &ex_poly : ex_polygons) resample_expolygon(ex_poly, dist_from_vertex); + for (ExPolygon &ex_poly : ex_polygons) + resample_expolygon(ex_poly, dist_from_vertex, max_allowed_distance); } static void precompute_polygon_distances(const Polygon &polygon, std::vector &polygon_distances_out) @@ -834,7 +850,7 @@ static std::vector contour_distance(const EdgeGrid::Grid &grid, double param_end = boundary_parameters.back(); const size_t ipt = it_contour_and_segment->second; if (contour.begin() + ipt + 1 < contour.end()) - param_hi += boundary_parameters[ipt > 0 ? ipt - 1 : 0]; + param_hi += boundary_parameters[ipt]; if (param_lo > param_hi) std::swap(param_lo, param_hi); assert(param_lo > -SCALED_EPSILON && param_lo <= param_end + SCALED_EPSILON); @@ -932,7 +948,7 @@ static ExPolygons inner_offset(const ExPolygons &ex_polygons, double offset) double min_contour_width = 2. * offset + SCALED_EPSILON; double search_radius = 2. * (offset + min_contour_width); ExPolygons ex_poly_result = ex_polygons; - resample_expolygons(ex_poly_result, offset / 2); + resample_expolygons(ex_poly_result, offset / 2, scaled(0.5)); for (ExPolygon &ex_poly : ex_poly_result) { BoundingBox bbox(get_extents(ex_poly)); From 0516cfb6121cd52f02a3deac6c8d55682565ba05 Mon Sep 17 00:00:00 2001 From: rtyr <36745189+rtyr@users.noreply.github.com> Date: Thu, 16 Dec 2021 10:35:32 +0100 Subject: [PATCH 11/19] Sync with PrusaSlicer-settings --- resources/profiles/TriLAB.idx | 1 + resources/profiles/TriLAB.ini | 183 +++++++++++++++++++++++++++++++--- 2 files changed, 168 insertions(+), 16 deletions(-) diff --git a/resources/profiles/TriLAB.idx b/resources/profiles/TriLAB.idx index 5809ea390f..b64aab27b0 100644 --- a/resources/profiles/TriLAB.idx +++ b/resources/profiles/TriLAB.idx @@ -1,4 +1,5 @@ min_slic3r_version = 2.3.2-alpha0 +0.0.9 Added AzteQ Industrial materials PC/ABS (Fillamentum), PC-Max (Polymaker), Nylon FX256 (Fillamentum), Added DeltiQ 2 materials Nylon PA12 (Fiberlogy), Nylon CF15 Carbon (Fillamentum), PEBA 90A - FlexFill (Fillamentum), MoldLay (Wax-Alike), disabled retract only when crossing perimeters, some minor setting improvements 0.0.8 Added new AzteQ Industrial printer, added DeltiQ 2 profiles for 0.6mm nozzle, added material ASA 275 (Spectrum), some minor setting improvements min_slic3r_version = 2.3.0-alpha3 0.0.7 Added PLA, PETG profiles for 0.25 nozzle, fixed supports on 0.8 nozzle profile, fixed max volumetric speed, disabled elefant foot compensation diff --git a/resources/profiles/TriLAB.ini b/resources/profiles/TriLAB.ini index 00e6295cce..8a68b82197 100644 --- a/resources/profiles/TriLAB.ini +++ b/resources/profiles/TriLAB.ini @@ -6,7 +6,7 @@ name = TriLAB # 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.0.8 +config_version = 0.0.9 # Where to get the updates from? config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/TriLAB/ # changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1% @@ -22,7 +22,7 @@ technology = FFF family = AzteQ bed_model = aq_bed.stl bed_texture = aq_bed_texture.svg -default_materials = AzteQ Industrial (Door Opened) - PLA - ExtraFill (Fillamentum);AzteQ Industrial (Door Opened) - PLA - Generic;AzteQ Industrial (PLA Printhead) - PLA - ExtraFill (Fillamentum);AzteQ Industrial - ABS - ExtraFill (Fillamentum);AzteQ Industrial - ABS - Generic;AzteQ Industrial - ASA - ExtraFill (Fillamentum);AzteQ Industrial - ASA - Generic;AzteQ Industrial - ASA - Prusament (Prusa);AzteQ Industrial - PA - Nylon PA12 (Fiberlogy);AzteQ Industrial - PC Blend - Prusament (Prusa) +default_materials = AzteQ Industrial (Door Opened) - PLA - ExtraFill (Fillamentum);AzteQ Industrial (Door Opened) - PLA - Generic;AzteQ Industrial (PLA Printhead) - PLA - ExtraFill (Fillamentum);AzteQ Industrial - ABS - ExtraFill (Fillamentum);AzteQ Industrial - ABS - Generic;AzteQ Industrial - ASA - ExtraFill (Fillamentum);AzteQ Industrial - ASA - Generic;AzteQ Industrial - ASA - Prusament (Prusa);AzteQ Industrial - PA - Nylon PA12 (Fiberlogy);AzteQ Industrial - PC Blend - Prusament (Prusa);AzteQ Industrial - PC - PolyMax (Polymaker);AzteQ Industrial - PC - PolyMax (Polymaker) @0.6 nozzle;AzteQ Industrial - PC/ABS - (Fillamentum);AzteQ Industrial - PC/ABS - (Fillamentum) @0.6 nozzle;AzteQ Industrial - PA - Nylon FX256 (Fillamentum);AzteQ Industrial - PA - Nylon FX256 (Fillamentum) @0.6 nozzle [printer_model:DQ2] name = DeltiQ 2 @@ -31,7 +31,7 @@ technology = FFF family = DeltiQ 2 bed_model = dq2_bed.stl bed_texture = dq2_bed_texture.svg -default_materials = DeltiQ - PLA - Generic;DeltiQ - PLA - ExtraFill (Fillamentum);DeltiQ - PETG - Generic;DeltiQ - PETG (Devil Design);DeltiQ - ABS - Generic;DeltiQ - ABS - ExtraFill (Fillamentum);DeltiQ - ASA - ExtraFill (Fillamentum);DeltiQ - ASA - ASA 275 (Spectrum);DeltiQ - CPE - HG100 (Fillamentum);DeltiQ - PLA - ExtraFill (Fillamentum) @0.25 nozzle;DeltiQ - PETG (Devil Design) @0.25 nozzle;DeltiQ - PLA - ExtraFill (Fillamentum) @0.6 nozzle;DeltiQ - PETG (Devil Design) @0.6 nozzle;DeltiQ - ABS - ExtraFill (Fillamentum) @0.6 nozzle;DeltiQ - ASA - ExtraFill (Fillamentum) @0.6 nozzle;DeltiQ - ASA - ASA 275 (Spectrum) @0.6 nozzle;DeltiQ - CPE - HG100 (Fillamentum) @0.6 nozzle;DeltiQ - PLA - ExtraFill (Fillamentum) @0.8 nozzle;DeltiQ - PETG (Devil Design) @0.8 nozzle +default_materials = DeltiQ - PLA - Generic;DeltiQ - PLA - ExtraFill (Fillamentum);DeltiQ - PETG - Generic;DeltiQ - PETG (Devil Design);DeltiQ - ABS - Generic;DeltiQ - ABS - ExtraFill (Fillamentum);DeltiQ - ASA - ExtraFill (Fillamentum);DeltiQ - ASA - ASA 275 (Spectrum);DeltiQ - CPE - HG100 (Fillamentum);DeltiQ - PLA - ExtraFill (Fillamentum) @0.25 nozzle;DeltiQ - PETG (Devil Design) @0.25 nozzle;DeltiQ - PLA - ExtraFill (Fillamentum) @0.6 nozzle;DeltiQ - PETG (Devil Design) @0.6 nozzle;DeltiQ - ABS - ExtraFill (Fillamentum) @0.6 nozzle;DeltiQ - ASA - ExtraFill (Fillamentum) @0.6 nozzle;DeltiQ - ASA - ASA 275 (Spectrum) @0.6 nozzle;DeltiQ - CPE - HG100 (Fillamentum) @0.6 nozzle;DeltiQ - PLA - ExtraFill (Fillamentum) @0.8 nozzle;DeltiQ - PETG (Devil Design) @0.8 nozzle;DeltiQ - PA - Nylon PA12 (Fiberlogy);DeltiQ - PA - Nylon CF15 Carbon (Fillamentum);DeltiQ - MoldLay (Wax-Alike) [printer_model:DQ2P] name = DeltiQ 2 Plus @@ -40,7 +40,7 @@ technology = FFF family = DeltiQ 2 bed_model = dq2_bed.stl bed_texture = dq2_bed_texture.svg -default_materials = DeltiQ - PLA - Generic;DeltiQ - PLA - ExtraFill (Fillamentum);DeltiQ - PETG - Generic;DeltiQ - PETG (Devil Design);DeltiQ - ABS - Generic;DeltiQ - ABS - ExtraFill (Fillamentum);DeltiQ - ASA - ExtraFill (Fillamentum);DeltiQ - ASA - ASA 275 (Spectrum);DeltiQ - CPE - HG100 (Fillamentum);DeltiQ - PLA - ExtraFill (Fillamentum) @0.25 nozzle;DeltiQ - PETG (Devil Design) @0.25 nozzle;DeltiQ - PLA - ExtraFill (Fillamentum) @0.6 nozzle;DeltiQ - PETG (Devil Design) @0.6 nozzle;DeltiQ - ABS - ExtraFill (Fillamentum) @0.6 nozzle;DeltiQ - ASA - ExtraFill (Fillamentum) @0.6 nozzle;DeltiQ - ASA - ASA 275 (Spectrum) @0.6 nozzle;DeltiQ - CPE - HG100 (Fillamentum) @0.6 nozzle;DeltiQ - PLA - ExtraFill (Fillamentum) @0.8 nozzle;DeltiQ - PETG (Devil Design) @0.8 nozzle +default_materials = DeltiQ - PLA - Generic;DeltiQ - PLA - ExtraFill (Fillamentum);DeltiQ - PETG - Generic;DeltiQ - PETG (Devil Design);DeltiQ - ABS - Generic;DeltiQ - ABS - ExtraFill (Fillamentum);DeltiQ - ASA - ExtraFill (Fillamentum);DeltiQ - ASA - ASA 275 (Spectrum);DeltiQ - CPE - HG100 (Fillamentum);DeltiQ - PLA - ExtraFill (Fillamentum) @0.25 nozzle;DeltiQ - PETG (Devil Design) @0.25 nozzle;DeltiQ - PLA - ExtraFill (Fillamentum) @0.6 nozzle;DeltiQ - PETG (Devil Design) @0.6 nozzle;DeltiQ - ABS - ExtraFill (Fillamentum) @0.6 nozzle;DeltiQ - ASA - ExtraFill (Fillamentum) @0.6 nozzle;DeltiQ - ASA - ASA 275 (Spectrum) @0.6 nozzle;DeltiQ - CPE - HG100 (Fillamentum) @0.6 nozzle;DeltiQ - PLA - ExtraFill (Fillamentum) @0.8 nozzle;DeltiQ - PETG (Devil Design) @0.8 nozzle;DeltiQ - PA - Nylon PA12 (Fiberlogy);DeltiQ - PA - Nylon CF15 Carbon (Fillamentum);DeltiQ - MoldLay (Wax-Alike) [printer_model:DQ2+FP2] name = DeltiQ 2 + FlexPrint 2 @@ -49,7 +49,7 @@ technology = FFF family = DeltiQ 2 bed_model = dq2_bed.stl bed_texture = dq2_bed_texture.svg -default_materials = DeltiQ FP2 - PLA - Generic;DeltiQ FP2 - PLA - ExtraFill (Fillamentum);DeltiQ FP2 - PETG - Generic;DeltiQ FP2 - PETG (Devil Design);DeltiQ FP2 - ABS - Generic;DeltiQ FP2 - ABS - ExtraFill (Fillamentum);DeltiQ FP2 - ASA - ExtraFill (Fillamentum);DeltiQ FP2 - CPE - HG100 (Fillamentum);DeltiQ FP2 - FLEX - Generic;DeltiQ FP2 - TPU 92A - FlexFill (Fillamentum);DeltiQ FP2 - TPU 98A - FlexFill (Fillamentum);DeltiQ FP2 - TPU 93A (SMARTFIL) +default_materials = DeltiQ FP2 - PLA - Generic;DeltiQ FP2 - PLA - ExtraFill (Fillamentum);DeltiQ FP2 - PETG - Generic;DeltiQ FP2 - PETG (Devil Design);DeltiQ FP2 - ABS - Generic;DeltiQ FP2 - ABS - ExtraFill (Fillamentum);DeltiQ FP2 - ASA - ExtraFill (Fillamentum);DeltiQ FP2 - CPE - HG100 (Fillamentum);DeltiQ FP2 - FLEX - Generic;DeltiQ FP2 - TPU 92A - FlexFill (Fillamentum);DeltiQ FP2 - TPU 98A - FlexFill (Fillamentum);DeltiQ FP2 - TPU 93A (SMARTFIL);DeltiQ FP2 - PEBA 90A - FlexFill (Fillamentum) [printer_model:DQ2P+FP2] name = DeltiQ 2 Plus + FlexPrint 2 @@ -58,7 +58,7 @@ technology = FFF family = DeltiQ 2 bed_model = dq2_bed.stl bed_texture = dq2_bed_texture.svg -default_materials = DeltiQ FP2 - PLA - Generic;DeltiQ FP2 - PLA - ExtraFill (Fillamentum);DeltiQ FP2 - PETG - Generic;DeltiQ FP2 - PETG (Devil Design);DeltiQ FP2 - ABS - Generic;DeltiQ FP2 - ABS - ExtraFill (Fillamentum);DeltiQ FP2 - ASA - ExtraFill (Fillamentum);DeltiQ FP2 - CPE - HG100 (Fillamentum);DeltiQ FP2 - FLEX - Generic;DeltiQ FP2 - TPU 92A - FlexFill (Fillamentum);DeltiQ FP2 - TPU 98A - FlexFill (Fillamentum);DeltiQ FP2 - TPU 93A (SMARTFIL) +default_materials = DeltiQ FP2 - PLA - Generic;DeltiQ FP2 - PLA - ExtraFill (Fillamentum);DeltiQ FP2 - PETG - Generic;DeltiQ FP2 - PETG (Devil Design);DeltiQ FP2 - ABS - Generic;DeltiQ FP2 - ABS - ExtraFill (Fillamentum);DeltiQ FP2 - ASA - ExtraFill (Fillamentum);DeltiQ FP2 - CPE - HG100 (Fillamentum);DeltiQ FP2 - FLEX - Generic;DeltiQ FP2 - TPU 92A - FlexFill (Fillamentum);DeltiQ FP2 - TPU 98A - FlexFill (Fillamentum);DeltiQ FP2 - TPU 93A (SMARTFIL);DeltiQ FP2 - PEBA 90A - FlexFill (Fillamentum) [printer_model:DQ2+FP] name = DeltiQ 2 + FlexPrint @@ -156,7 +156,7 @@ max_print_speed = 60 max_volumetric_speed = 0 min_skirt_length = 4 notes = -only_retract_when_crossing_perimeters = 1 +only_retract_when_crossing_perimeters = 0 ooze_prevention = 0 output_filename_format = {input_filename_base}_{printer_model}_{filament_type[0]}_{layer_height}mm_{print_time}_{timestamp}.gcode overhangs = 1 @@ -456,7 +456,7 @@ max_print_speed = 60 max_volumetric_speed = 0 min_skirt_length = 4 notes = -only_retract_when_crossing_perimeters = 1 +only_retract_when_crossing_perimeters = 0 ooze_prevention = 0 output_filename_format = {input_filename_base}_{printer_model}_{filament_type[0]}_{layer_height}mm_{print_time}_{timestamp}.gcode overhangs = 1 @@ -1050,6 +1050,63 @@ min_print_speed = 10 slowdown_below_layer_time = 4 temperature = 235 +[filament:DeltiQ FP2 - PEBA 90A - FlexFill (Fillamentum)] +inherits = DeltiQ FP2 - TPU 98A - FlexFill (Fillamentum) +extrusion_multiplier = 1.1 +filament_cost = 3578 +filament_density = 1.00 +filament_max_volumetric_speed = 2.9 +filament_retract_length = 0.0 +filament_type = PEBA90A +bridge_fan_speed = 100 +max_fan_speed = 50 +min_fan_speed = 50 +disable_fan_first_layers = 2 +first_layer_bed_temperature = 75 +first_layer_temperature = 245 +bed_temperature = 75 +temperature = 245 + +[filament:DeltiQ - PA - Nylon PA12 (Fiberlogy)] +inherits = DeltiQ - ABS - Generic +bed_temperature = 100 +filament_cost = 1213 +filament_density = 1.02 +filament_retract_length = 4.1 +filament_type = NYLON +first_layer_bed_temperature = 100 +first_layer_temperature = 255 +max_fan_speed = 30 +min_fan_speed = 20 +temperature = 255 + +[filament:DeltiQ - PA - Nylon CF15 Carbon (Fillamentum)] +inherits = DeltiQ - ABS - Generic +bed_temperature = 100 +filament_cost = 2287 +filament_density = 1.08 +filament_retract_length = 2.0 +filament_type = NYLON +first_layer_bed_temperature = 100 +first_layer_temperature = 255 +max_fan_speed = 50 +min_fan_speed = 20 +temperature = 255 +extrusion_multiplier = 0.95 + +[filament:DeltiQ - MoldLay (Wax-Alike)] +inherits = DeltiQ - PLA - Generic +bed_temperature = 50 +filament_cost = 1951 +filament_retract_length = 2.0 +filament_type = PLA +first_layer_bed_temperature = 50 +first_layer_temperature = 175 +max_fan_speed = 70 +min_fan_speed = 70 +temperature = 175 +filament_vendor = Wax-Alike + # AzteQ filaments # [filament:*AzteQ common*] @@ -1211,6 +1268,47 @@ inherits = AzteQ Industrial - ABS - ExtraFill (Fillamentum) compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_TRILAB.*/ and printer_notes=~/.*PRINTER_MODEL_AQI.*/ and nozzle_diameter[0]==0.6 filament_max_volumetric_speed = 15 +[filament:AzteQ Industrial - PC/ABS - (Fillamentum)] +inherits = AzteQ Industrial - ABS - Generic +filament_vendor = Fillamentum +filament_type = PCABS +filament_cost = 1324 +filament_density = 1.07 +bed_temperature = 100 +filament_retract_length = 4.0 +first_layer_bed_temperature = 100 +first_layer_temperature = 265 +max_fan_speed = 50 +min_fan_speed = 50 +start_filament_gcode = "; FILAMENT_START_GCODE\nM191 S75 ; Set and wait - chamber temperature" +temperature = 265 +filament_notes = "S180 ; Probing temperature" + +[filament:AzteQ Industrial - PC/ABS - (Fillamentum) @0.6 nozzle] +inherits = AzteQ Industrial - PC/ABS - (Fillamentum) +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_TRILAB.*/ and printer_notes=~/.*PRINTER_MODEL_AQI.*/ and nozzle_diameter[0]==0.6 +filament_max_volumetric_speed = 15 + +[filament:AzteQ Industrial - PC - PolyMax (Polymaker)] +inherits = AzteQ Industrial - ABS - Generic +filament_vendor = Polymaker +filament_cost = 1290 +filament_density = 1.21 +bed_temperature = 100 +filament_retract_length = 4.0 +first_layer_bed_temperature = 100 +first_layer_temperature = 265 +max_fan_speed = 50 +min_fan_speed = 50 +start_filament_gcode = "; FILAMENT_START_GCODE\nM191 S75 ; Set and wait - chamber temperature" +temperature = 265 +filament_notes = "S180 ; Probing temperature" + +[filament:AzteQ Industrial - PC - PolyMax (Polymaker) @0.6 nozzle] +inherits = AzteQ Industrial - PC - PolyMax (Polymaker) +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_TRILAB.*/ and printer_notes=~/.*PRINTER_MODEL_AQI.*/ and nozzle_diameter[0]==0.6 +filament_max_volumetric_speed = 15 + [filament:AzteQ Industrial - ASA - Generic] inherits = *AzteQ common* bed_temperature = 100 @@ -1245,7 +1343,7 @@ max_fan_speed = 75 min_fan_speed = 50 min_print_speed = 10 slowdown_below_layer_time = 5 -start_filament_gcode = "; FILAMENT_START_GCODE\nM191 S75 ; Set and wait - chamber temperature" +start_filament_gcode = "; FILAMENT_START_GCODE\nM191 S50 ; Set and wait - chamber temperature" temperature = 265 [filament:AzteQ Industrial - ASA - Generic @0.6 nozzle] @@ -1256,6 +1354,10 @@ filament_max_volumetric_speed = 15 [filament:AzteQ Industrial - ASA - ExtraFill (Fillamentum)] inherits = AzteQ Industrial - ASA - Generic filament_vendor = Fillamentum +first_layer_temperature = 255 +temperature = 255 +max_fan_speed = 80 +min_fan_speed = 60 [filament:AzteQ Industrial - ASA - ExtraFill (Fillamentum) @0.6 nozzle] inherits = AzteQ Industrial - ASA - ExtraFill (Fillamentum) @@ -1268,11 +1370,11 @@ filament_cost = 680 filament_density = 1.07 filament_spool_weight = 0 filament_vendor = Prusa -first_layer_temperature = 255 -max_fan_speed = 100 -min_fan_speed = 95 +first_layer_temperature = 260 +max_fan_speed = 70 +min_fan_speed = 70 start_filament_gcode = "; FILAMENT_START_GCODE\nM191 S50 ; Set and wait - chamber temperature" -temperature = 255 +temperature = 260 [filament:AzteQ Industrial - ASA - Prusament (Prusa) @0.6 nozzle] inherits = AzteQ Industrial - ASA - Prusament (Prusa) @@ -1325,6 +1427,52 @@ inherits = AzteQ Industrial - PA - Nylon PA12 (Fiberlogy) compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_TRILAB.*/ and printer_notes=~/.*PRINTER_MODEL_AQI.*/ and nozzle_diameter[0]==0.6 filament_max_volumetric_speed = 15 +[filament:AzteQ Industrial - PA - Nylon FX256 (Fillamentum)] +inherits = *AzteQ common* +bed_temperature = 100 +bridge_fan_speed = 100 +cooling = 1 +disable_fan_first_layers = 3 +extrusion_multiplier = 1 +fan_always_on = 1 +fan_below_layer_time = 20 +filament_cost = 1565 +filament_density = 1.01 +filament_deretract_speed = nil +filament_max_volumetric_speed = 8 +filament_retract_before_travel = 3 +filament_retract_before_wipe = 70% +filament_retract_layer_change = 1 +filament_retract_length = 6.1 +filament_retract_lift = 0.2 +filament_retract_lift_above = nil +filament_retract_lift_below = nil +filament_retract_restart_extra = nil +filament_retract_speed = 25 +filament_soluble = 0 +filament_spool_weight = 0 +filament_toolchange_delay = 0 +filament_type = NYLON +filament_unload_time = 0 +filament_unloading_speed = 90 +filament_unloading_speed_start = 100 +filament_vendor = Fillamentum +filament_wipe = 1 +first_layer_bed_temperature = 100 +first_layer_temperature = 255 +full_fan_speed_layer = 0 +max_fan_speed = 85 +min_fan_speed = 50 +min_print_speed = 10 +slowdown_below_layer_time = 5 +start_filament_gcode = "; FILAMENT_START_GCODE\nM191 S60 ; Set and wait - chamber temperature" +temperature = 255 + +[filament:AzteQ Industrial - PA - Nylon FX256 (Fillamentum) @0.6 nozzle] +inherits = AzteQ Industrial - PA - Nylon FX256 (Fillamentum) +compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_TRILAB.*/ and printer_notes=~/.*PRINTER_MODEL_AQI.*/ and nozzle_diameter[0]==0.6 +filament_max_volumetric_speed = 15 + [filament:AzteQ Industrial - PC Blend - Prusament (Prusa)] inherits = *AzteQ common* bed_temperature = 100 @@ -1353,19 +1501,22 @@ filament_type = PC filament_vendor = Prusa filament_wipe = 1 first_layer_bed_temperature = 100 -first_layer_temperature = 275 +first_layer_temperature = 270 full_fan_speed_layer = 0 max_fan_speed = 50 min_fan_speed = 30 min_print_speed = 10 slowdown_below_layer_time = 5 start_filament_gcode = "; FILAMENT_START_GCODE\nM191 S75 ; Set and wait - chamber temperature" -temperature = 275 +temperature = 270 +filament_notes = "S180 ; Probing temperature" [filament:AzteQ Industrial - PC Blend - Prusament (Prusa) @0.6 nozzle] inherits = AzteQ Industrial - PC Blend - Prusament (Prusa) compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_TRILAB.*/ and printer_notes=~/.*PRINTER_MODEL_AQI.*/ and nozzle_diameter[0]==0.6 filament_max_volumetric_speed = 15 + + # DeltiQ Printer # @@ -1581,7 +1732,7 @@ retract_lift_below = 0 retract_restart_extra = 0 retract_restart_extra_toolchange = 0 retract_speed = 30 -start_gcode = ; START_GCODE\nT0\nM220 S100 ; Set feedmultiply back to 100 percent\nG90 ; Absolute positioning for motion\nM83 ; Relative extruder\nM107 ; Layer fan off\n\nM140 S[first_layer_bed_temperature] ; Set and continue - bed temperature\n[start_filament_gcode]\nM104 S150 ; Set and continue - hotend probing temperature\nM190 S[first_layer_bed_temperature] ; Set and wait - bed temperature\nM109 S150 ; Set and wait - hotend probing temperature\n\nG28 ; Home all axes\nG32 ; Probe Z and calculate Z plane\nG29 ; Mesh bed probe\n\nM104 S[first_layer_temperature] ; Set and continue - printing temperature\n\nG1009 ; Purge hotend\nG92 E0 ; Zero extruder +start_gcode = ; START_GCODE\nT0\nM220 S100 ; Set feedmultiply back to 100 percent\nG90 ; Absolute positioning for motion\nM83 ; Relative extruder\nM107 ; Layer fan off\n\nM140 S[first_layer_bed_temperature] ; Set and continue - bed temperature\nM104 S150 ; Set and continue - hotend probing temperature\n[start_filament_gcode]\nM190 S[first_layer_bed_temperature] ; Set and wait - bed temperature\nM109 [filament_notes] ; Set and wait for material specific hotend probing temperature\n\nG28 ; Home all axes\nG32 ; Probe Z and calculate Z plane\nG29 ; Mesh bed probe\n\nM104 S[first_layer_temperature] ; Set and continue - printing temperature\n\nG1009 ; Purge hotend\nG92 E0 ; Zero extruder wipe = 1 [printer:AzteQ Industrial] From e84d5847a7372a414471b8a843a536ca83861367 Mon Sep 17 00:00:00 2001 From: rtyr <36745189+rtyr@users.noreply.github.com> Date: Thu, 16 Dec 2021 11:50:46 +0100 Subject: [PATCH 12/19] Ender 3 S1 thumbnail --- .../profiles/Creality/ENDER3S1_thumbnail.png | Bin 0 -> 44669 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 resources/profiles/Creality/ENDER3S1_thumbnail.png diff --git a/resources/profiles/Creality/ENDER3S1_thumbnail.png b/resources/profiles/Creality/ENDER3S1_thumbnail.png new file mode 100644 index 0000000000000000000000000000000000000000..42cc53f7f4b6e5abe40a676b1fa416768e9dbe29 GIT binary patch literal 44669 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 literal 0 HcmV?d00001 From 33351c4e5f6aa4cddf08be7b023c202bff0d641f Mon Sep 17 00:00:00 2001 From: rtyr <36745189+rtyr@users.noreply.github.com> Date: Thu, 16 Dec 2021 12:02:32 +0100 Subject: [PATCH 13/19] Bumped up version to 0.1.2 - Added Ender 3 S1 --- resources/profiles/Creality.idx | 2 ++ resources/profiles/Creality.ini | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/resources/profiles/Creality.idx b/resources/profiles/Creality.idx index b9d24c624b..502f93eb82 100644 --- a/resources/profiles/Creality.idx +++ b/resources/profiles/Creality.idx @@ -1,3 +1,5 @@ +min_slic3r_version = 2.4.0-rc +0.1.2 Added alpha Ender 3 S1 profiles. min_slic3r_version = 2.4.0-beta4 0.1.1 Added Ender 2 Pro min_slic3r_version = 2.3.2-alpha0 diff --git a/resources/profiles/Creality.ini b/resources/profiles/Creality.ini index 2b05272e2c..3237423fbf 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.1.1 +config_version = 0.1.2 # 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% From 818a92497a18eb033ad46aff14c9242d4be1df4d Mon Sep 17 00:00:00 2001 From: enricoturri1966 Date: Thu, 16 Dec 2021 12:03:11 +0100 Subject: [PATCH 14/19] Fixed call to take_snapshot() in ObjectList::load_subobject() --- src/slic3r/GUI/GUI_ObjectList.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index 160999db38..85ab421190 100644 --- a/src/slic3r/GUI/GUI_ObjectList.cpp +++ b/src/slic3r/GUI/GUI_ObjectList.cpp @@ -1398,6 +1398,8 @@ void ObjectList::load_subobject(ModelVolumeType type, bool from_galery/* = false if (m_objects_model->GetItemType(item)&itInstance) item = m_objects_model->GetItemById(obj_idx); + take_snapshot((type == ModelVolumeType::MODEL_PART) ? _L("Load Part") : _L("Load Modifier")); + std::vector volumes; // ! ysFIXME - delete commented code after testing and rename "load_modifier" to something common /* @@ -1409,8 +1411,6 @@ void ObjectList::load_subobject(ModelVolumeType type, bool from_galery/* = false if (volumes.empty()) return; - take_snapshot((type == ModelVolumeType::MODEL_PART) ? _L("Load Part") : _L("Load Modifier")); - wxDataViewItemArray items = reorder_volumes_and_get_selection(obj_idx, [volumes](const ModelVolume* volume) { return std::find(volumes.begin(), volumes.end(), volume) != volumes.end(); }); From acee3ff1f98ddff7c3a97a72f97fa20c88b4440d Mon Sep 17 00:00:00 2001 From: enricoturri1966 Date: Thu, 16 Dec 2021 14:01:44 +0100 Subject: [PATCH 15/19] Fixed crash when changing modifier type on a circular printbed --- src/slic3r/GUI/GLCanvas3D.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 622f5b3e27..9b14839874 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -1869,6 +1869,9 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re // updates volumes transformations volume->set_instance_transformation(mvs->model_volume->get_object()->instances[mvs->composite_id.instance_id]->get_transformation()); volume->set_volume_transformation(mvs->model_volume->get_transformation()); + + // updates volumes convex hull + volume->set_convex_hull(mvs->model_volume->get_convex_hull_shared_ptr()); } } } From f83ba22a12ed05304d9c60e8a9e4960cfbec744f Mon Sep 17 00:00:00 2001 From: YuSanka Date: Thu, 16 Dec 2021 15:05:51 +0100 Subject: [PATCH 16/19] Fix for switch Dark/Light mode when preset settings are in separate dialog. Set new color for title bar, tab bar and all scroll bars for settings dialog --- src/slic3r/GUI/GUI_App.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 0a4aa4bffe..cf14fc7351 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -1718,6 +1718,7 @@ void GUI_App::force_colors_update() if (WXHWND wxHWND = wxToolTip::GetToolTipCtrl()) NppDarkMode::SetDarkExplorerTheme((HWND)wxHWND); NppDarkMode::SetDarkTitleBar(mainframe->GetHWND()); + NppDarkMode::SetDarkTitleBar(mainframe->m_settings_dialog.GetHWND()); #endif //_MSW_DARK_MODE m_force_colors_update = true; } @@ -1737,6 +1738,14 @@ void GUI_App::update_ui_from_settings() mainframe->printhost_queue_dlg()->force_color_changed(); #ifdef _MSW_DARK_MODE update_scrolls(mainframe); + if (mainframe->is_dlg_layout()) { + // update for tabs bar + UpdateDarkUI(&mainframe->m_settings_dialog); + mainframe->m_settings_dialog.Fit(); + mainframe->m_settings_dialog.Refresh(); + // update scrollbars + update_scrolls(&mainframe->m_settings_dialog); + } #endif //_MSW_DARK_MODE } #endif From 65053fd77662d2cc3fc8fbd058ffbcfca53acd1a Mon Sep 17 00:00:00 2001 From: rtyr <36745189+rtyr@users.noreply.github.com> Date: Thu, 16 Dec 2021 15:49:19 +0100 Subject: [PATCH 17/19] Anycubic bumped up to 0.0.12 --- resources/profiles/Anycubic.idx | 1 + resources/profiles/Anycubic.ini | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/resources/profiles/Anycubic.idx b/resources/profiles/Anycubic.idx index a834d2c706..12652625c3 100644 --- a/resources/profiles/Anycubic.idx +++ b/resources/profiles/Anycubic.idx @@ -1,4 +1,5 @@ min_slic3r_version = 2.3.2-alpha0 +0.0.12 Updated Anycubic i3 MEGA(S) profiles. 0.0.11 Added bed model and texture for i3 Mega, i3 Mega S. min_slic3r_version = 2.3.1-beta 0.0.10 Various updates for Anycubic Mega. Added filament profiles. diff --git a/resources/profiles/Anycubic.ini b/resources/profiles/Anycubic.ini index 9e7a0036df..053aecbd59 100644 --- a/resources/profiles/Anycubic.ini +++ b/resources/profiles/Anycubic.ini @@ -5,7 +5,7 @@ name = Anycubic # 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.0.11 +config_version = 0.0.12 # Where to get the updates from? config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/Anycubic/ # changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1% From 13566e3f933a39a080d6b31f405e853133930333 Mon Sep 17 00:00:00 2001 From: Vojtech Bubnik Date: Thu, 16 Dec 2021 17:50:36 +0100 Subject: [PATCH 18/19] Follow-up to acee3ff1f98ddff7c3a97a72f97fa20c88b4440d Fixed crash when changing modifier type on a circular printbed --- src/slic3r/GUI/GLCanvas3D.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 9b14839874..a3b54a8417 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -1871,7 +1871,10 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re volume->set_volume_transformation(mvs->model_volume->get_transformation()); // updates volumes convex hull - volume->set_convex_hull(mvs->model_volume->get_convex_hull_shared_ptr()); + if (mvs->model_volume->is_model_part() && ! volume->convex_hull()) + // Model volume was likely changed from modifier or support blocker / enforcer to a model part. + // Only model parts require convex hulls. + volume->set_convex_hull(mvs->model_volume->get_convex_hull_shared_ptr()); } } } From 93c4b941b560fb1d690e890594b05b435ea11e85 Mon Sep 17 00:00:00 2001 From: Vojtech Bubnik Date: Thu, 16 Dec 2021 17:51:40 +0100 Subject: [PATCH 19/19] Importing newer configuration data: Fixed compiler warning, improved error reporting when deleting old cache and vendors directory. --- src/libslic3r/PresetBundle.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index b6ac1a51b8..874b775cd2 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -221,12 +221,12 @@ void PresetBundle::import_newer_configs(const std::string& from) try { boost::filesystem::remove_all(data_dir / "cache"); } catch (const std::exception &ex) { - BOOST_LOG_TRIVIAL(error) << "Error deleting old cache " << (data_dir / "cache").string(); + BOOST_LOG_TRIVIAL(error) << "Error deleting old cache " << (data_dir / "cache").string() << ": " << ex.what(); } try { boost::filesystem::remove_all(data_dir / "vendor"); } catch (const std::exception &ex) { - BOOST_LOG_TRIVIAL(error) << "Error deleting old vendors " << (data_dir / "vendor").string(); + BOOST_LOG_TRIVIAL(error) << "Error deleting old vendors " << (data_dir / "vendor").string() << ": " << ex.what(); } // list of searched paths based on current directory system in setup_directories() // do not copy cache and snapshots