@ -26,6 +26,14 @@
# include "Marlin.h"
# include "point_t.h"
# if ENABLED(NOZZLE_CLEAN_FEATURE)
constexpr float nozzle_clean_start_point [ 4 ] = NOZZLE_CLEAN_START_POINT ,
nozzle_clean_end_point [ 4 ] = NOZZLE_CLEAN_END_POINT ,
nozzle_clean_length = fabs ( nozzle_clean_start_point [ X_AXIS ] - nozzle_clean_end_point [ X_AXIS ] ) , //abs x size of wipe pad
nozzle_clean_height = fabs ( nozzle_clean_start_point [ Y_AXIS ] - nozzle_clean_end_point [ Y_AXIS ] ) ; //abs y size of wipe pad
constexpr bool nozzle_clean_horizontal = nozzle_clean_length > = nozzle_clean_height ; //whether to zig-zag horizontally or vertically
# endif //NOZZLE_CLEAN_FEATURE
/**
* @ brief Nozzle class
*
@ -92,8 +100,8 @@ class Nozzle {
__attribute__ ( ( unused ) ) uint8_t const & objects
) __attribute__ ( ( optimize ( " Os " ) ) ) {
# if ENABLED(NOZZLE_CLEAN_FEATURE)
float A = fabs ( end . y - start . y ) ; // [twice the] Amplitude
float P = fabs ( end . x - start . x ) / ( objects < < 1 ) ; // Period
float A = nozzle_clean_horizontal ? nozzle_clean_height : nozzle_clean_length ; // [twice the] Amplitude
float P = ( nozzle_clean_horizontal ? nozzle_clean_length : nozzle_clean_height ) / ( objects < < 1 ) ; // Period
// Don't allow impossible triangles
if ( A < = 0.0f | | P < = 0.0f ) return ;
@ -110,16 +118,16 @@ class Nozzle {
for ( uint8_t j = 0 ; j < strokes ; j + + ) {
for ( uint8_t i = 0 ; i < ( objects < < 1 ) ; i + + ) {
float const x = start . x + i * P ;
float const y = start . y + ( A / P ) * ( P - fabs ( fmod ( ( i * P ) , ( 2 * P ) ) - 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 + ( ! nozzle_clean_horizontal ? i * P : ( A / P ) * ( P - fabs ( fmod ( ( i * P ) , ( 2 * P ) ) - P ) ) ) ;
do_blocking_move_to_xy ( x , y ) ;
if ( i = = 0 ) do_blocking_move_to_z ( start . z ) ;
}
for ( int i = ( objects < < 1 ) ; i > - 1 ; i - - ) {
float const x = start . x + i * P ;
float const y = start . y + ( A / P ) * ( P - fabs ( fmod ( ( i * P ) , ( 2 * P ) ) - 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 + ( ! nozzle_clean_horizontal ? i * P : ( A / P ) * ( P - fabs ( fmod ( ( i * P ) , ( 2 * P ) ) - P ) ) ) ;
do_blocking_move_to_xy ( x , y ) ;
}