diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index 6f90c67ef6..db803305fe 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -3749,50 +3749,68 @@ LayerResult GCode::process_layer( //BBS: set layer time fan speed after layer change gcode gcode += ";_SET_FAN_SPEED_CHANGING_LAYER\n"; - if (print.calib_mode() == CalibMode::Calib_PA_Tower) { - gcode += writer().set_pressure_advance(print.calib_params().start + static_cast(print_z) * print.calib_params().step); - } else if (print.calib_mode() == CalibMode::Calib_Temp_Tower) { - auto offset = static_cast(print_z / 10.001) * 5; - gcode += writer().set_temperature(print.calib_params().start - offset); - } else if (print.calib_mode() == CalibMode::Calib_VFA_Tower) { - auto _speed = print.calib_params().start + std::floor(print_z / 5.0) * print.calib_params().step; - m_calib_config.set_key_value("outer_wall_speed", new ConfigOptionFloat(std::round(_speed))); - } else if (print.calib_mode() == CalibMode::Calib_Vol_speed_Tower) { - auto _speed = print.calib_params().start + print_z * print.calib_params().step; - m_calib_config.set_key_value("outer_wall_speed", new ConfigOptionFloat(std::round(_speed))); - } else if (print.calib_mode() == CalibMode::Calib_Retraction_tower) { - auto _length = print.calib_params().start + std::floor(std::max(0.0,print_z-0.4)) * print.calib_params().step; - DynamicConfig _cfg; - _cfg.set_key_value("retraction_length", new ConfigOptionFloats{_length}); - writer().config.apply(_cfg); - sprintf(buf, "; Calib_Retraction_tower: Z_HEIGHT: %g, length:%g\n", print_z, _length); - gcode += buf; - } else if (print.calib_mode() == CalibMode::Calib_Input_shaping_freq) { - if (m_layer_index == 1){ - if (print.config().gcode_flavor.value == gcfMarlinFirmware) { - gcode += writer().set_junction_deviation(0.25);//Set junction deviation at high value to maximize ringing. - } - gcode += writer().set_input_shaping('A', print.calib_params().start, 0.f); - } else { - if (print.calib_params().freqStartX == print.calib_params().freqStartY && print.calib_params().freqEndX == print.calib_params().freqEndY) { - gcode += writer().set_input_shaping('A', 0.f, (print.calib_params().freqStartX) + ((print.calib_params().freqEndX)-(print.calib_params().freqStartX)) * (m_layer_index - 2) / (m_layer_count - 3)); + //Calibration Layer-specific GCode + switch (print.calib_mode()) { + case CalibMode::Calib_PA_Tower: { + gcode += writer().set_pressure_advance(print.calib_params().start + static_cast(print_z) * print.calib_params().step); + break; + } + case CalibMode::Calib_Temp_Tower: { + auto offset = static_cast(print_z / 10.001) * 5; + gcode += writer().set_temperature(print.calib_params().start - offset); + break; + } + case CalibMode::Calib_VFA_Tower: { + auto _speed = print.calib_params().start + std::floor(print_z / 5.0) * print.calib_params().step; + m_calib_config.set_key_value("outer_wall_speed", new ConfigOptionFloat(std::round(_speed))); + break; + } + case CalibMode::Calib_Vol_speed_Tower: { + auto _speed = print.calib_params().start + print_z * print.calib_params().step; + m_calib_config.set_key_value("outer_wall_speed", new ConfigOptionFloat(std::round(_speed))); + break; + } + case CalibMode::Calib_Retraction_tower: { + auto _length = print.calib_params().start + std::floor(std::max(0.0,print_z-0.4)) * print.calib_params().step; + DynamicConfig _cfg; + _cfg.set_key_value("retraction_length", new ConfigOptionFloats{_length}); + writer().config.apply(_cfg); + sprintf(buf, "; Calib_Retraction_tower: Z_HEIGHT: %g, length:%g\n", print_z, _length); + gcode += buf; + break; + } + case CalibMode::Calib_Input_shaping_freq: { + if (m_layer_index == 1){ + if (print.config().gcode_flavor.value == gcfMarlinFirmware) { + gcode += writer().set_junction_deviation(0.25);//Set junction deviation at high value to maximize ringing. + } + gcode += writer().set_input_shaping('A', print.calib_params().start, 0.f); } else { - gcode += writer().set_input_shaping('X', 0.f, (print.calib_params().freqStartX) + ((print.calib_params().freqEndX)-(print.calib_params().freqStartX)) * (m_layer_index - 2) / (m_layer_count - 3)); - gcode += writer().set_input_shaping('Y', 0.f, (print.calib_params().freqStartY) + ((print.calib_params().freqEndY)-(print.calib_params().freqStartY)) * (m_layer_index - 2) / (m_layer_count - 3)); + if (print.calib_params().freqStartX == print.calib_params().freqStartY && print.calib_params().freqEndX == print.calib_params().freqEndY) { + gcode += writer().set_input_shaping('A', 0.f, (print.calib_params().freqStartX) + ((print.calib_params().freqEndX)-(print.calib_params().freqStartX)) * (m_layer_index - 2) / (m_layer_count - 3)); + } else { + gcode += writer().set_input_shaping('X', 0.f, (print.calib_params().freqStartX) + ((print.calib_params().freqEndX)-(print.calib_params().freqStartX)) * (m_layer_index - 2) / (m_layer_count - 3)); + gcode += writer().set_input_shaping('Y', 0.f, (print.calib_params().freqStartY) + ((print.calib_params().freqEndY)-(print.calib_params().freqStartY)) * (m_layer_index - 2) / (m_layer_count - 3)); + } } + break; } - } else if (print.calib_mode() == CalibMode::Calib_Input_shaping_damp) { - if (m_layer_index == 1){ - if (print.config().gcode_flavor.value == gcfMarlinFirmware) { - gcode += writer().set_junction_deviation(0.25); // Set junction deviation at high value to maximize ringing. + case CalibMode::Calib_Input_shaping_damp: { + if (m_layer_index == 1){ + if (print.config().gcode_flavor.value == gcfMarlinFirmware) { + gcode += writer().set_junction_deviation(0.25); // Set junction deviation at high value to maximize ringing. + } + gcode += writer().set_input_shaping('X', 0.f, print.calib_params().freqStartX); + gcode += writer().set_input_shaping('Y', 0.f, print.calib_params().freqStartY); + } else { + gcode += writer().set_input_shaping('A', print.calib_params().start + ((print.calib_params().end)-(print.calib_params().start)) * (m_layer_index) / (m_layer_count), 0.f); } - gcode += writer().set_input_shaping('X', 0.f, print.calib_params().freqStartX); - gcode += writer().set_input_shaping('Y', 0.f, print.calib_params().freqStartY); - } else { - gcode += writer().set_input_shaping('A', print.calib_params().start + ((print.calib_params().end)-(print.calib_params().start)) * (m_layer_index) / (m_layer_count), 0.f); + break; + } + case CalibMode::Calib_Junction_Deviation: { + gcode += writer().set_junction_deviation(print.calib_params().start + ((print.calib_params().end)-(print.calib_params().start)) * (m_layer_index) / (m_layer_count)); + break; } - } else if (print.calib_mode() == CalibMode::Calib_Junction_Deviation){ - gcode += writer().set_junction_deviation(print.calib_params().start + ((print.calib_params().end)-(print.calib_params().start)) * (m_layer_index) / (m_layer_count)); } //BBS