@@ -2863,9 +2863,13 @@ std::string GCodeGenerator::extrude_loop(const ExtrusionLoop &loop_src, const GC
2863
2863
gcode += this ->_extrude (el.path_attributes , el.path , description, speed);
2864
2864
2865
2865
// reset acceleration
2866
- gcode += m_writer.set_print_acceleration (fast_round_up<unsigned int >(m_config.default_acceleration .value ));
2866
+ gcode += m_writer.set_print_acceleration (
2867
+ fast_round_up<unsigned int >(m_config.default_acceleration .value ),
2868
+ fast_round_up<unsigned int >(m_config.default_accel_to_decel .value ),
2869
+ " Default"
2870
+ );
2867
2871
// reset jerk
2868
- gcode += m_writer.set_jerk (fast_round_up<unsigned int >(m_config.default_jerk .value ));
2872
+ gcode += m_writer.set_jerk (fast_round_up<unsigned int >(m_config.default_jerk .value ), " Default " );
2869
2873
2870
2874
if (m_wipe.enabled ()) {
2871
2875
// Wipe will hide the seam.
@@ -2913,9 +2917,13 @@ std::string GCodeGenerator::extrude_skirt(
2913
2917
}
2914
2918
2915
2919
// reset acceleration
2916
- gcode += m_writer.set_print_acceleration (fast_round_up<unsigned int >(m_config.default_acceleration .value ));
2920
+ gcode += m_writer.set_print_acceleration (
2921
+ fast_round_up<unsigned int >(m_config.default_acceleration .value ),
2922
+ fast_round_up<unsigned int >(m_config.default_accel_to_decel .value ),
2923
+ " Default"
2924
+ );
2917
2925
// reset jerk
2918
- gcode += m_writer.set_jerk (fast_round_up<unsigned int >(m_config.default_jerk .value ));
2926
+ gcode += m_writer.set_jerk (fast_round_up<unsigned int >(m_config.default_jerk .value ), " Default " );
2919
2927
2920
2928
if (m_wipe.enabled ())
2921
2929
// Wipe will hide the seam.
@@ -2940,9 +2948,13 @@ std::string GCodeGenerator::extrude_multi_path(const ExtrusionMultiPath &multipa
2940
2948
gcode += this ->_extrude (el.path_attributes , el.path , description, speed);
2941
2949
m_wipe.set_path (std::move (smooth_path), true );
2942
2950
// reset acceleration
2943
- gcode += m_writer.set_print_acceleration ((unsigned int )floor (m_config.default_acceleration .value + 0.5 ));
2951
+ gcode += m_writer.set_print_acceleration (
2952
+ fast_round_up<unsigned int >(m_config.default_acceleration .value ),
2953
+ fast_round_up<unsigned int >(m_config.default_accel_to_decel .value ),
2954
+ " Default"
2955
+ );
2944
2956
// reset jerk
2945
- gcode += m_writer.set_jerk (m_config.default_jerk .value );
2957
+ gcode += m_writer.set_jerk (m_config.default_jerk .value , " Default " );
2946
2958
return gcode;
2947
2959
}
2948
2960
@@ -2966,9 +2978,13 @@ std::string GCodeGenerator::extrude_path(const ExtrusionPath &path, bool reverse
2966
2978
Geometry::ArcWelder::reverse (smooth_path);
2967
2979
m_wipe.set_path (std::move (smooth_path));
2968
2980
// reset acceleration
2969
- gcode += m_writer.set_print_acceleration ((unsigned int )floor (m_config.default_acceleration .value + 0.5 ));
2981
+ gcode += m_writer.set_print_acceleration (
2982
+ fast_round_up<unsigned int >(m_config.default_acceleration .value ),
2983
+ fast_round_up<unsigned int >(m_config.default_accel_to_decel .value ),
2984
+ " Default"
2985
+ );
2970
2986
// reset jerk
2971
- gcode += m_writer.set_jerk (m_config.default_jerk .value );
2987
+ gcode += m_writer.set_jerk (m_config.default_jerk .value , " Default " );
2972
2988
return gcode;
2973
2989
}
2974
2990
@@ -3168,26 +3184,40 @@ std::string GCodeGenerator::_extrude(
3168
3184
// adjust acceleration
3169
3185
if (m_config.default_acceleration .value > 0 ) {
3170
3186
double acceleration;
3187
+ double accel_to_decel;
3171
3188
if (this ->on_first_layer () && m_config.first_layer_acceleration .value > 0 ) {
3172
3189
acceleration = m_config.first_layer_acceleration .value ;
3190
+ accel_to_decel = m_config.first_layer_accel_to_decel .value ;
3173
3191
} else if (this ->object_layer_over_raft () && m_config.first_layer_acceleration_over_raft .value > 0 ) {
3174
3192
acceleration = m_config.first_layer_acceleration_over_raft .value ;
3193
+ accel_to_decel = m_config.first_layer_accel_to_decel_over_raft .value ;
3175
3194
} else if (m_config.bridge_acceleration .value > 0 && path_attr.role .is_bridge ()) {
3176
3195
acceleration = m_config.bridge_acceleration .value ;
3196
+ accel_to_decel = m_config.bridge_accel_to_decel .value ;
3177
3197
} else if (m_config.top_solid_infill_acceleration > 0 && path_attr.role == ExtrusionRole::TopSolidInfill) {
3178
3198
acceleration = m_config.top_solid_infill_acceleration .value ;
3199
+ accel_to_decel = m_config.top_solid_infill_accel_to_decel .value ;
3179
3200
} else if (m_config.solid_infill_acceleration > 0 && path_attr.role .is_solid_infill ()) {
3180
3201
acceleration = m_config.solid_infill_acceleration .value ;
3202
+ accel_to_decel = m_config.solid_infill_accel_to_decel .value ;
3181
3203
} else if (m_config.infill_acceleration .value > 0 && path_attr.role .is_infill ()) {
3182
3204
acceleration = m_config.infill_acceleration .value ;
3205
+ accel_to_decel = m_config.infill_accel_to_decel .value ;
3183
3206
} else if (m_config.external_perimeter_acceleration > 0 && path_attr.role .is_external_perimeter ()) {
3184
3207
acceleration = m_config.external_perimeter_acceleration .value ;
3208
+ accel_to_decel = m_config.external_perimeter_accel_to_decel .value ;
3185
3209
} else if (m_config.perimeter_acceleration .value > 0 && path_attr.role .is_perimeter ()) {
3186
3210
acceleration = m_config.perimeter_acceleration .value ;
3211
+ accel_to_decel = m_config.perimeter_accel_to_decel .value ;
3187
3212
} else {
3188
3213
acceleration = m_config.default_acceleration .value ;
3214
+ accel_to_decel = m_config.default_accel_to_decel .value ;
3189
3215
}
3190
- gcode += m_writer.set_print_acceleration ((unsigned int )floor (acceleration + 0.5 ));
3216
+ gcode += m_writer.set_print_acceleration (
3217
+ fast_round_up<unsigned int >(acceleration),
3218
+ fast_round_up<unsigned int >(accel_to_decel),
3219
+ gcode_extrusion_role_to_string (extrusion_role_to_gcode_extrusion_role (path_attr.role ))
3220
+ );
3191
3221
}
3192
3222
3193
3223
// adjust jerk
@@ -3212,7 +3242,7 @@ std::string GCodeGenerator::_extrude(
3212
3242
} else {
3213
3243
jerk = m_config.default_jerk .value ;
3214
3244
}
3215
- gcode += m_writer.set_jerk (jerk);
3245
+ gcode += m_writer.set_jerk (jerk, gcode_extrusion_role_to_string ( extrusion_role_to_gcode_extrusion_role (path_attr. role )) );
3216
3246
}
3217
3247
3218
3248
// calculate extrusion length per distance unit
@@ -3420,17 +3450,18 @@ std::string GCodeGenerator::generate_travel_gcode(
3420
3450
) {
3421
3451
std::string gcode;
3422
3452
3423
- const unsigned acceleration =(unsigned )(m_config.travel_acceleration .value + 0.5 );
3453
+ const unsigned acceleration = fast_round_up<unsigned int >(m_config.travel_acceleration .value );
3454
+ const unsigned accel_to_decel = fast_round_up<unsigned int >(m_config.travel_accel_to_decel .value );
3424
3455
3425
3456
if (travel.empty ()) {
3426
3457
return " " ;
3427
3458
}
3428
3459
3429
3460
// generate G-code for the travel move
3430
3461
// use G1 because we rely on paths being straight (G0 may make round paths)
3431
- gcode += this ->m_writer .set_travel_acceleration (acceleration);
3462
+ gcode += this ->m_writer .set_travel_acceleration (acceleration, accel_to_decel );
3432
3463
if (m_config.default_jerk > 0 && m_config.travel_jerk > 0 )
3433
- gcode += this ->m_writer .set_jerk (m_config.travel_jerk );
3464
+ gcode += this ->m_writer .set_jerk (m_config.travel_jerk , " Travel " );
3434
3465
3435
3466
Vec3d previous_point{this ->point_to_gcode (travel.front ())};
3436
3467
for (const Vec3crd& point : travel) {
@@ -3444,11 +3475,11 @@ std::string GCodeGenerator::generate_travel_gcode(
3444
3475
if (! GCodeWriter::supports_separate_travel_acceleration (config ().gcode_flavor )) {
3445
3476
// In case that this flavor does not support separate print and travel acceleration,
3446
3477
// reset acceleration to default.
3447
- gcode += this ->m_writer .set_travel_acceleration (acceleration );
3478
+ gcode += this ->m_writer .set_print_acceleration (m_config. default_acceleration , m_config. default_accel_to_decel , " Default " );
3448
3479
}
3449
3480
3450
3481
if (m_config.default_jerk > 0 && m_config.travel_jerk > 0 )
3451
- gcode += this ->m_writer .set_jerk (m_config.default_jerk );
3482
+ gcode += this ->m_writer .set_jerk (m_config.default_jerk , " Default " );
3452
3483
return gcode;
3453
3484
}
3454
3485
0 commit comments