diff options
author | Rich Felker <dalias@aerifal.cx> | 2022-10-28 17:55:17 +0300 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2022-11-02 16:27:41 +0300 |
commit | d21f20c941e64c94e595cd81042955de3709495a (patch) | |
tree | dc6a4daa6b1e5e61568cdd30bb948d41c8a5990f | |
parent | b920618fd5956aa123d9df1c44e5e57b5112d380 (diff) |
Never increase speeds/accels/jerks with initial layer slowdown
Fixes https://github.com/Ultimaker/Cura/issues/13681
-rw-r--r-- | src/GCodePathConfig.cpp | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/GCodePathConfig.cpp b/src/GCodePathConfig.cpp index d96147862..aeb9ab393 100644 --- a/src/GCodePathConfig.cpp +++ b/src/GCodePathConfig.cpp @@ -37,9 +37,12 @@ GCodePathConfig::GCodePathConfig(const PrintFeatureType& type, const coord_t lin void GCodePathConfig::smoothSpeed(GCodePathConfig::SpeedDerivatives first_layer_config, const LayerIndex& layer_nr, const LayerIndex& max_speed_layer_nr) { double max_speed_layer = max_speed_layer_nr; - speed_derivatives.speed = (speed_derivatives.speed * layer_nr) / max_speed_layer + (first_layer_config.speed * (max_speed_layer - layer_nr) / max_speed_layer); - speed_derivatives.acceleration = (speed_derivatives.acceleration * layer_nr) / max_speed_layer + (first_layer_config.acceleration * (max_speed_layer - layer_nr) / max_speed_layer); - speed_derivatives.jerk = (speed_derivatives.jerk * layer_nr) / max_speed_layer + (first_layer_config.jerk * (max_speed_layer - layer_nr) / max_speed_layer); + double first_layer_speed = std::min(speed_derivatives.speed, first_layer_config.speed); + double first_layer_acceleration = std::min(speed_derivatives.acceleration, first_layer_config.acceleration); + double first_layer_jerk = std::min(speed_derivatives.jerk, first_layer_config.jerk); + speed_derivatives.speed = (speed_derivatives.speed * layer_nr) / max_speed_layer + (first_layer_speed * (max_speed_layer - layer_nr) / max_speed_layer); + speed_derivatives.acceleration = (speed_derivatives.acceleration * layer_nr) / max_speed_layer + (first_layer_acceleration * (max_speed_layer - layer_nr) / max_speed_layer); + speed_derivatives.jerk = (speed_derivatives.jerk * layer_nr) / max_speed_layer + (first_layer_jerk * (max_speed_layer - layer_nr) / max_speed_layer); } double GCodePathConfig::getExtrusionMM3perMM() const |