|
|
@ -62,8 +62,8 @@ void Nozzle::zigzag(
|
|
|
|
__attribute__((unused)) uint8_t const &objects
|
|
|
|
__attribute__((unused)) uint8_t const &objects
|
|
|
|
) {
|
|
|
|
) {
|
|
|
|
#if ENABLED(NOZZLE_CLEAN_FEATURE)
|
|
|
|
#if ENABLED(NOZZLE_CLEAN_FEATURE)
|
|
|
|
float A = fabs(end.y - start.y); // [twice the] Amplitude
|
|
|
|
const float A = nozzle_clean_horizontal ? nozzle_clean_height : nozzle_clean_length, // [twice the] Amplitude
|
|
|
|
float P = fabs(end.x - start.x) / (objects << 1); // Period
|
|
|
|
P = (nozzle_clean_horizontal ? nozzle_clean_length : nozzle_clean_height) / (objects << 1); // Period
|
|
|
|
|
|
|
|
|
|
|
|
// Don't allow impossible triangles
|
|
|
|
// Don't allow impossible triangles
|
|
|
|
if (A <= 0.0f || P <= 0.0f ) return;
|
|
|
|
if (A <= 0.0f || P <= 0.0f ) return;
|
|
|
@ -80,16 +80,16 @@ void Nozzle::zigzag(
|
|
|
|
|
|
|
|
|
|
|
|
for (uint8_t j = 0; j < strokes; j++) {
|
|
|
|
for (uint8_t j = 0; j < strokes; j++) {
|
|
|
|
for (uint8_t i = 0; i < (objects << 1); i++) {
|
|
|
|
for (uint8_t i = 0; i < (objects << 1); i++) {
|
|
|
|
float const x = start.x + i * P;
|
|
|
|
float const x = start.x + ( nozzle_clean_horizontal ? i * P : (A/P) * (P - fabs(fmod((i*P), (2*P)) - P)) );
|
|
|
|
float const y = start.y + (A/P) * (P - fabs(fmod((i*P), (2*P)) - P));
|
|
|
|
float const y = start.y + (!nozzle_clean_horizontal ? i * P : (A/P) * (P - fabs(fmod((i*P), (2*P)) - P)) );
|
|
|
|
|
|
|
|
|
|
|
|
do_blocking_move_to_xy(x, y);
|
|
|
|
do_blocking_move_to_xy(x, y);
|
|
|
|
if (i == 0) do_blocking_move_to_z(start.z);
|
|
|
|
if (i == 0) do_blocking_move_to_z(start.z);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
for (int i = (objects << 1); i > -1; i--) {
|
|
|
|
for (int i = (objects << 1); i > -1; i--) {
|
|
|
|
float const x = start.x + i * P;
|
|
|
|
float const x = start.x + ( nozzle_clean_horizontal ? i * P : (A/P) * (P - fabs(fmod((i*P), (2*P)) - P)) );
|
|
|
|
float const y = start.y + (A/P) * (P - fabs(fmod((i*P), (2*P)) - P));
|
|
|
|
float const y = start.y + (!nozzle_clean_horizontal ? i * P : (A/P) * (P - fabs(fmod((i*P), (2*P)) - P)) );
|
|
|
|
|
|
|
|
|
|
|
|
do_blocking_move_to_xy(x, y);
|
|
|
|
do_blocking_move_to_xy(x, y);
|
|
|
|
}
|
|
|
|
}
|
|
|
|