From 5e65b9416bf41fee2b73a0a8d39eaeb71778cc00 Mon Sep 17 00:00:00 2001 From: supermerill Date: Thu, 8 Oct 2020 14:22:29 +0200 Subject: [PATCH] #542 fix bad temperature set --- src/libslic3r/GCode.cpp | 14 ++++++++++---- src/libslic3r/GCodeWriter.cpp | 2 +- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index 864cce52c..50a643fe8 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -2297,8 +2297,7 @@ void GCode::process_layer( // In single extruder multi material mode, set the temperature for the current extruder only. continue; int temperature = print.config().temperature.get_at(extruder.id()); - if (temperature > 0 && temperature != print.config().first_layer_temperature.get_at(extruder.id())) - gcode += m_writer.set_temperature(temperature, false, extruder.id()); + gcode += m_writer.set_temperature(temperature, false, extruder.id()); } gcode += m_writer.set_bed_temperature(print.config().bed_temperature.get_at(first_extruder_id)); // Mark the temperature transition from 1st to 2nd layer to be finished. @@ -2589,7 +2588,10 @@ void GCode::process_layer( this->set_origin(unscale(offset)); if (instance_to_print.object_by_extruder.support != nullptr && !print_wipe_extrusions) { m_layer = layers[instance_to_print.layer_id].support_layer; - gcode += m_writer.set_temperature(m_config.temperature.get_at(m_writer.tool()->id()), false, m_writer.tool()->id()); + if (m_layer != nullptr && m_layer->bottom_z() < EPSILON) + gcode += m_writer.set_temperature(m_config.first_layer_temperature.get_at(m_writer.tool()->id()), false, m_writer.tool()->id()); + else + gcode += m_writer.set_temperature(m_config.temperature.get_at(m_writer.tool()->id()), false, m_writer.tool()->id()); gcode += this->extrude_support( // support_extrusion_role is erSupportMaterial, erSupportMaterialInterface or erMixed for all extrusion paths. instance_to_print.object_by_extruder.support->chained_path_from(m_last_pos, instance_to_print.object_by_extruder.support_extrusion_role)); @@ -3828,6 +3830,8 @@ std::string GCode::extrude_perimeters(const Print &print, const std::vectorconfig()); if (m_config.print_temperature > 0) gcode += m_writer.set_temperature(m_config.print_temperature.value, false, m_writer.tool()->id()); + else if (m_layer != nullptr && m_layer->bottom_z() < EPSILON) + gcode += m_writer.set_temperature(m_config.first_layer_temperature.get_at(m_writer.tool()->id()), false, m_writer.tool()->id()); else gcode += m_writer.set_temperature(m_config.temperature.get_at(m_writer.tool()->id()), false, m_writer.tool()->id()); for (const ExtrusionEntity *ee : region.perimeters) @@ -3846,6 +3850,8 @@ std::string GCode::extrude_infill(const Print &print, const std::vectorconfig()); if (m_config.print_temperature > 0) gcode += m_writer.set_temperature(m_config.print_temperature.value, false, m_writer.tool()->id()); + else if(m_layer!=nullptr && m_layer->bottom_z() < EPSILON) + gcode += m_writer.set_temperature(m_config.first_layer_temperature.get_at(m_writer.tool()->id()), false, m_writer.tool()->id()); else gcode += m_writer.set_temperature(m_config.temperature.get_at(m_writer.tool()->id()), false, m_writer.tool()->id()); ExtrusionEntitiesPtr extrusions { region.infills }; @@ -3979,7 +3985,7 @@ std::string GCode::_extrude(const ExtrusionPath &path, const std::string &descri double e_per_mm = path.mm3_per_mm * m_writer.tool()->e_per_mm3() * this->config().print_extrusion_multiplier.get_abs_value(1); - if (std::abs(this->m_layer->height - this->m_layer->print_z) < EPSILON) e_per_mm *= this->config().first_layer_flow_ratio.get_abs_value(1); + if (m_layer->bottom_z() < EPSILON) e_per_mm *= this->config().first_layer_flow_ratio.get_abs_value(1); if (m_writer.extrusion_axis().empty()) e_per_mm = 0; if (path.polyline.lines().size() > 0) { //get last direction //TODO: save it diff --git a/src/libslic3r/GCodeWriter.cpp b/src/libslic3r/GCodeWriter.cpp index bb3bcd8a1..ed3016f77 100644 --- a/src/libslic3r/GCodeWriter.cpp +++ b/src/libslic3r/GCodeWriter.cpp @@ -136,7 +136,7 @@ std::string GCodeWriter::set_temperature(const unsigned int temperature, bool wa temp_w_offset += int16_t(get_tool(tool)->temp_offset()); temp_w_offset = std::max(int16_t(0), std::min(int16_t(2000), temp_w_offset)); - if (m_last_temperature_with_offset == temp_w_offset) + if (m_last_temperature_with_offset == temp_w_offset && !wait) return ""; if (wait && (FLAVOR_IS(gcfMakerWare) || FLAVOR_IS(gcfSailfish))) return "";