diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index c7fe287dc4..e4e2353eb5 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -435,6 +435,11 @@ bool GCode::gcode_label_objects = true; gcode += tcr_gcode; check_add_eol(toolchange_gcode_str); + //SoftFever: set new PA for new filament + if (gcodegen.config().enable_pressure_advance.get_at(new_extruder_id)) { + gcode += gcodegen.writer().set_pressure_advance(gcodegen.config().pressure_advance.get_at(new_extruder_id)); + } + // A phony move to the end position at the wipe tower. gcodegen.writer().travel_to_xy(end_pos.cast()); gcodegen.set_last_pos(wipe_tower_point_to_object_point(gcodegen, end_pos + plate_origin_2d)); @@ -1641,19 +1646,6 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato if (is_bbl_printers) { // if (print.config().spaghetti_detector.value) file.write("M981 S1 P20000 ;open spaghetti detector\n"); - file.write_format("M900 K%.3f M%0.3f ; Override pressure advance value\n", - m_config.pressure_advance.values.front(), - outer_wall_volumetric_speed / (1.75 * 1.75 / 4 * 3.14) * - m_config.pressure_advance.values.front()); - } else { - if (m_config.enable_pressure_advance.value) { - if(print.config().gcode_flavor.value == gcfKlipper) - file.write_format("SET_PRESSURE_ADVANCE ADVANCE=%.3f ; Override pressure advance value\n", - m_config.pressure_advance.values.front()); - else - file.write_format("M900 K%.3f ; Override pressure advance value\n", - m_config.pressure_advance.values.front()); - } } // Do all objects for each layer. @@ -4226,6 +4218,10 @@ std::string GCode::set_extruder(unsigned int extruder_id, double print_z) if (m_ooze_prevention.enable) gcode += m_ooze_prevention.post_toolchange(*this); + if (m_config.enable_pressure_advance.get_at(extruder_id)) { + gcode += m_writer.set_pressure_advance(m_config.pressure_advance.get_at(extruder_id)); + } + return gcode; } diff --git a/src/libslic3r/GCodeWriter.cpp b/src/libslic3r/GCodeWriter.cpp index 9bdd1d59a8..68bfb562a3 100644 --- a/src/libslic3r/GCodeWriter.cpp +++ b/src/libslic3r/GCodeWriter.cpp @@ -209,6 +209,22 @@ std::string GCodeWriter::set_jerk_xy(unsigned int jerk) } +std::string GCodeWriter::set_pressure_advance(double pa) const +{ + std::ostringstream gcode; + if (pa < 0) + return gcode.str(); + + if (FLAVOR_IS(gcfKlipper)) + gcode << "SET_PRESSURE_ADVANCE ADVANCE=" << std::setprecision(4) << pa << "; Override pressure advance value\n"; + else + gcode << "M900 K" < temps_per_bed, int default_temp, bool wait = false); std::string set_acceleration(unsigned int acceleration); std::string set_jerk_xy(unsigned int jerk); + std::string set_pressure_advance(double pa) const; std::string reset_e(bool force = false); std::string update_progress(unsigned int num, unsigned int tot, bool allow_100 = false) const; // return false if this extruder was already selected diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 146a8f8e5d..89d9ff106b 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -1085,10 +1085,10 @@ void PrintConfigDef::init_fff_params() def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloats { 1. }); - def = this->add("enable_pressure_advance", coBool); + def = this->add("enable_pressure_advance", coBools); def->label = L("Enable pressure advance"); def->tooltip = L("Enable pressure advance, auto calibration result will be overwriten once enabled."); - def->set_default_value(new ConfigOptionBool(false)); + def->set_default_value(new ConfigOptionBools{ false }); def = this->add("pressure_advance", coFloats); def->label = L("Pressure advance"); diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index c4d6f9eedd..dfc0888d66 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -760,7 +760,7 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionString, machine_end_gcode)) ((ConfigOptionStrings, filament_end_gcode)) ((ConfigOptionFloats, filament_flow_ratio)) - ((ConfigOptionBool, enable_pressure_advance)) + ((ConfigOptionBools, enable_pressure_advance)) ((ConfigOptionFloats, pressure_advance)) ((ConfigOptionFloats, filament_diameter)) ((ConfigOptionFloats, filament_density)) diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index ffa4e411ab..6094c2119e 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -2675,7 +2675,7 @@ void TabFilament::toggle_options() } if (m_active_page->title() == "Filament") { - bool pa = m_config->opt_bool("enable_pressure_advance"); + bool pa = m_config->opt_bool("enable_pressure_advance", 0); toggle_option("pressure_advance", pa); toggle_line("cool_plate_temp_initial_layer", is_BBL_printer);