diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index 74289e0f1..ac2b9ac3c 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -1373,7 +1373,8 @@ void GCode::_do_export(Print &print, FILE *file) bbox_prime.offset(0.5f); // Beep for 500ms, tone 800Hz. Yet better, play some Morse. _write(file, this->retract()); - _write(file, "M300 S800 P500\n"); + if(print.config().gcode_flavor.value != gcfKlipper) + _write(file, "M300 S800 P500\n"); if (bbox_prime.overlap(bbox_print)) { // Wait for the user to remove the priming extrusions, otherwise they would // get covered by the print. @@ -1888,7 +1889,10 @@ void GCode::process_layer( // && !MMU1 ) { //! FIXME_in_fw show message during print pause - gcode += "M601\n"; // pause print + if (print.config().gcode_flavor.value == gcfKlipper) + gcode += "PAUSE\n"; + else + gcode += "M601\n"; // pause print gcode += "M117 Change filament for Extruder " + std::to_string(m600_before_extruder) + "\n"; } else diff --git a/src/libslic3r/GCode/WipeTower.cpp b/src/libslic3r/GCode/WipeTower.cpp index e119e747d..24a6bb726 100644 --- a/src/libslic3r/GCode/WipeTower.cpp +++ b/src/libslic3r/GCode/WipeTower.cpp @@ -102,7 +102,12 @@ public: } WipeTowerWriter& disable_linear_advance() { - m_gcode += (m_gcode_flavor == gcfRepRap ? std::string("M572 D0 S0\n") : std::string("M900 K0\n")); + if(m_gcode_flavor == gcfRepRap) + m_gcode += std::string("M572 D0 S0\n"); + else if(m_gcode_flavor == gcfKlipper) + m_gcode += std::string("SET_PRESSURE_ADVANCE ADVANCE=0\n"); + else + m_gcode += std::string("M900 K0\n"); return *this; } @@ -399,6 +404,8 @@ public: // Set digital trimpot motor WipeTowerWriter& set_extruder_trimpot(int current) { + if (m_gcode_flavor == gcfKlipper) + return *this; if (m_gcode_flavor == gcfRepRap) m_gcode += "M906 E"; else diff --git a/src/libslic3r/GCodeTimeEstimator.cpp b/src/libslic3r/GCodeTimeEstimator.cpp index c624c0fce..854ef0b37 100644 --- a/src/libslic3r/GCodeTimeEstimator.cpp +++ b/src/libslic3r/GCodeTimeEstimator.cpp @@ -1195,6 +1195,7 @@ namespace Slic3r { // see: http://reprap.org/wiki/G-code#G4:_Dwell if ((dialect == gcfRepetier) || (dialect == gcfMarlin) || + (dialect == gcfKlipper) || (dialect == gcfSmoothie) || (dialect == gcfRepRap)) { diff --git a/src/libslic3r/GCodeWriter.cpp b/src/libslic3r/GCodeWriter.cpp index e0b671189..9b30e03ee 100644 --- a/src/libslic3r/GCodeWriter.cpp +++ b/src/libslic3r/GCodeWriter.cpp @@ -19,7 +19,7 @@ void GCodeWriter::apply_print_config(const PrintConfig &print_config) this->config.apply(print_config, true); m_extrusion_axis = this->config.get_extrusion_axis(); m_single_extruder_multi_material = print_config.single_extruder_multi_material.value; - m_max_acceleration = (print_config.gcode_flavor.value == gcfMarlin) ? + m_max_acceleration = (print_config.gcode_flavor.value == gcfMarlin || print_config.gcode_flavor.value == gcfKlipper) ? print_config.machine_max_acceleration_extruding.values.front() : 0; } @@ -44,7 +44,8 @@ std::string GCodeWriter::preamble() gcode << "G21 ; set units to millimeters\n"; gcode << "G90 ; use absolute coordinates\n"; } - if (FLAVOR_IS(gcfRepRap) || FLAVOR_IS(gcfMarlin) || FLAVOR_IS(gcfTeacup) || FLAVOR_IS(gcfRepetier) || FLAVOR_IS(gcfSmoothie)) { + if (FLAVOR_IS(gcfRepRap) || FLAVOR_IS(gcfMarlin) || FLAVOR_IS(gcfTeacup) || FLAVOR_IS(gcfRepetier) || FLAVOR_IS(gcfSmoothie) + || FLAVOR_IS(gcfKlipper)) { if (this->config.use_relative_e_distances) { gcode << "M83 ; use relative distances for extrusion\n"; } else { @@ -241,7 +242,8 @@ std::string GCodeWriter::update_progress(unsigned int num, unsigned int tot, boo std::string GCodeWriter::toolchange_prefix() const { return FLAVOR_IS(gcfMakerWare) ? "M135 T" : - FLAVOR_IS(gcfSailfish) ? "M108 T" : "T"; + FLAVOR_IS(gcfSailfish) ? "M108 T" : + FLAVOR_IS(gcfKlipper) ? "ACTIVATE_EXTRUDER EXTRUDER=extruder" : "T"; } std::string GCodeWriter::toolchange(unsigned int extruder_id) diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index d112ad215..e095ad989 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -1278,7 +1278,8 @@ std::string Print::validate() const "and use filaments of the same diameter."); } - if (m_config.gcode_flavor != gcfRepRap && m_config.gcode_flavor != gcfRepetier && m_config.gcode_flavor != gcfMarlin) + if (m_config.gcode_flavor != gcfRepRap && m_config.gcode_flavor != gcfRepetier && m_config.gcode_flavor != gcfMarlin + && m_config.gcode_flavor != gcfKlipper) return L("The Wipe Tower is currently only supported for the Marlin, RepRap/Sprinter and Repetier G-code flavors."); if (! m_config.use_relative_e_distances) return L("The Wipe Tower is currently only supported with the relative extruder addressing (use_relative_e_distances=1)."); diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index bade6bdbf..daaeb3776 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -1390,6 +1390,7 @@ void PrintConfigDef::init_fff_params() def->enum_values.push_back("teacup"); def->enum_values.push_back("makerware"); def->enum_values.push_back("marlin"); + def->enum_values.push_back("klipper"); def->enum_values.push_back("sailfish"); def->enum_values.push_back("mach3"); def->enum_values.push_back("machinekit"); @@ -1400,6 +1401,7 @@ void PrintConfigDef::init_fff_params() def->enum_labels.push_back("Teacup"); def->enum_labels.push_back("MakerWare (MakerBot)"); def->enum_labels.push_back("Marlin"); + def->enum_labels.push_back("Klipper"); def->enum_labels.push_back("Sailfish (MakerBot)"); def->enum_labels.push_back("Mach3/LinuxCNC"); def->enum_labels.push_back("Machinekit"); diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index 92e88e5ba..1f242e788 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -42,7 +42,7 @@ enum WipeAlgo { }; enum GCodeFlavor : unsigned char { - gcfRepRap, gcfRepetier, gcfTeacup, gcfMakerWare, gcfMarlin, gcfSailfish, gcfMach3, gcfMachinekit, + gcfRepRap, gcfRepetier, gcfTeacup, gcfMakerWare, gcfMarlin, gcfKlipper, gcfSailfish, gcfMach3, gcfMachinekit, gcfSmoothie, gcfNoExtrusion, }; @@ -129,6 +129,7 @@ template<> inline const t_config_enum_values& ConfigOptionEnum::get keys_map["teacup"] = gcfTeacup; keys_map["makerware"] = gcfMakerWare; keys_map["marlin"] = gcfMarlin; + keys_map["klipper"] = gcfKlipper; keys_map["sailfish"] = gcfSailfish; keys_map["smoothie"] = gcfSmoothie; keys_map["mach3"] = gcfMach3;