1717
1818namespace Slic3r {
1919
20- CoolingBuffer::CoolingBuffer (GCode &gcodegen) : m_config(gcodegen.config()), m_toolchange_prefix(gcodegen.writer().toolchange_prefix()), m_current_extruder(0 )
20+ CoolingBuffer::CoolingBuffer (GCode &gcodegen) : m_config(gcodegen.config()), m_current_extruder(0 )
2121{
2222 this ->reset (gcodegen.writer ().get_position ());
2323
@@ -459,7 +459,6 @@ std::vector<PerExtruderAdjustments> CoolingBuffer::parse_layer_gcode(const std::
459459 if (boost::contains (sline, " ;_EXTRUDE_SET_SPEED" ) && ! wipe) {
460460 line.type |= CoolingLine::TYPE_ADJUSTABLE;
461461 active_speed_modifier = adjustment->lines .size ();
462- std::cout << " TYPE_(not)_ADJUSTABLE!\n " ;
463462 if (boost::contains (sline, " ;_EXTRUDE_SET_SPEED_MAYBE" ))
464463 line.type |= CoolingLine::TYPE_ADJUSTABLE_MAYBE;
465464 }
@@ -544,8 +543,9 @@ std::vector<PerExtruderAdjustments> CoolingBuffer::parse_layer_gcode(const std::
544543 }
545544 }
546545 active_speed_modifier = size_t (-1 );
547- } else if (boost::starts_with (sline, m_toolchange_prefix) || boost::starts_with (sline, " ;_TOOLCHANGE" )) {
548- int prefix = boost::starts_with (sline, " ;_TOOLCHANGE" ) ? 13 : m_toolchange_prefix.size ();
546+ } else if (boost::starts_with (sline, " ;_TOOLCHANGE" )) {
547+ // not using m_toolchange_prefix anymore because there is no use case for it, there is always a _TOOLCHANGE for when a fan change is needed.
548+ int prefix = 13 ;
549549 uint16_t new_extruder = (uint16_t )atoi (sline.c_str () + prefix);
550550 // Only change extruder in case the number is meaningful. User could provide an out-of-range index through custom gcodes - those shall be ignored.
551551 if (new_extruder < map_extruder_to_per_extruder_adjustment.size ()) {
@@ -556,8 +556,7 @@ std::vector<PerExtruderAdjustments> CoolingBuffer::parse_layer_gcode(const std::
556556 current_extruder = new_extruder;
557557 adjustment = &per_extruder_adjustments[map_extruder_to_per_extruder_adjustment[current_extruder]];
558558 }
559- }
560- else {
559+ } else {
561560 // Only log the error in case of MM printer. Single extruder printers likely ignore any T anyway.
562561 if (map_extruder_to_per_extruder_adjustment.size () > 1 )
563562 BOOST_LOG_TRIVIAL (error) << " CoolingBuffer encountered an invalid toolchange, maybe from a custom gcode: " << sline;
@@ -957,7 +956,9 @@ std::string CoolingBuffer::apply_layer_cooldown(
957956 }
958957 if (fan_speeds[0 ] != m_fan_speed) {
959958 m_fan_speed = fan_speeds[0 ];
960- new_gcode += GCodeWriter::set_fan (m_config.gcode_flavor , m_config.gcode_comments , m_fan_speed, EXTRUDER_CONFIG (extruder_fan_offset), m_config.fan_percentage );
959+ new_gcode += GCodeWriter::set_fan (m_config.gcode_flavor , m_config.gcode_comments , m_fan_speed,
960+ EXTRUDER_CONFIG (extruder_fan_offset), m_config.fan_percentage ,
961+ std::string (" set fan for new extruder" ));
961962 }
962963 };
963964 // set to know all fan modifiers that can be applied ( TYPE_BRIDGE_FAN_END, TYPE_TOP_FAN_START, TYPE_SUPP_INTER_FAN_START, TYPE_EXTERNAL_PERIMETER).
@@ -984,7 +985,9 @@ std::string CoolingBuffer::apply_layer_cooldown(
984985 } else if (line->type & CoolingLine::TYPE_STORE_FOR_WT) {
985986 stored_fan_speed = m_fan_speed;
986987 } else if (line->type & CoolingLine::TYPE_RESTORE_AFTER_WT) {
987- new_gcode += GCodeWriter::set_fan (m_config.gcode_flavor , m_config.gcode_comments , stored_fan_speed, EXTRUDER_CONFIG (extruder_fan_offset), m_config.fan_percentage );
988+ new_gcode += GCodeWriter::set_fan (m_config.gcode_flavor , m_config.gcode_comments , stored_fan_speed,
989+ EXTRUDER_CONFIG (extruder_fan_offset), m_config.fan_percentage ,
990+ " restore fan after wipe tower" );
988991 } else if (line->type & CoolingLine::TYPE_EXTRUDE_START) {
989992 assert (CoolingLine::to_extrusion_role (uint32_t (line->type )) != 0 );
990993 extrude_tree.push_back (CoolingLine::to_extrusion_role (uint32_t (line->type )));
@@ -1080,14 +1083,19 @@ std::string CoolingBuffer::apply_layer_cooldown(
10801083 bool fan_set = false ;
10811084 for (size_t i = extrude_tree.size () - 1 ; i < extrude_tree.size (); --i) {
10821085 if (fan_control[extrude_tree[i]]) {
1083- new_gcode += GCodeWriter::set_fan (m_config.gcode_flavor , m_config.gcode_comments , fan_speeds[extrude_tree[i]], EXTRUDER_CONFIG (extruder_fan_offset), m_config.fan_percentage );
1086+ new_gcode += GCodeWriter::set_fan (m_config.gcode_flavor , m_config.gcode_comments ,
1087+ fan_speeds[extrude_tree[i]],
1088+ EXTRUDER_CONFIG (extruder_fan_offset), m_config.fan_percentage ,
1089+ std::string (" set fan for " ) + ExtrusionEntity::role_to_string (extrude_tree[i]));
10841090 fan_set = true ;
10851091 break ;
10861092 }
10871093 }
10881094 if (!fan_set) {
10891095 // return to default
1090- new_gcode += GCodeWriter::set_fan (m_config.gcode_flavor , m_config.gcode_comments , m_fan_speed, EXTRUDER_CONFIG (extruder_fan_offset), m_config.fan_percentage );
1096+ new_gcode += GCodeWriter::set_fan (m_config.gcode_flavor , m_config.gcode_comments , m_fan_speed,
1097+ EXTRUDER_CONFIG (extruder_fan_offset), m_config.fan_percentage ,
1098+ " set default fan" );
10911099 }
10921100 fan_need_set = false ;
10931101 }
0 commit comments