@ -411,12 +411,19 @@
// We don't want additional apply_leveling() performed by regular buffer_line or buffer_line_kinematic,
// We don't want additional apply_leveling() performed by regular buffer_line or buffer_line_kinematic,
// so we call buffer_segment directly here. Per-segmented leveling and kinematics performed first.
// so we call buffer_segment directly here. Per-segmented leveling and kinematics performed first.
inline void _O2 ubl_buffer_segment_raw ( const float ( & raw ) [ XYZE ] , const float & fr ) {
inline void _O2 ubl_buffer_segment_raw ( const float ( & in_raw ) [ XYZE ] , const float & fr ) {
# if ENABLED(SKEW_CORRECTION)
float raw [ XYZE ] = { in_raw [ X_AXIS ] , in_raw [ Y_AXIS ] , in_raw [ Z_AXIS ] , in_raw [ E_AXIS ] } ;
planner . skew ( raw [ X_AXIS ] , raw [ Y_AXIS ] , raw [ Z_AXIS ] ) ;
# else
const float ( & raw ) [ XYZE ] = in_raw ;
# endif
# if ENABLED(DELTA) // apply delta inverse_kinematics
# if ENABLED(DELTA) // apply delta inverse_kinematics
DELTA_RAW_IK ( ) ;
DELTA_RAW_IK ( ) ;
planner . buffer_segment ( delta [ A_AXIS ] , delta [ B_AXIS ] , delta [ C_AXIS ] , raw [ E_AXIS ] , fr , active_extruder ) ;
planner . buffer_segment ( delta [ A_AXIS ] , delta [ B_AXIS ] , delta [ C_AXIS ] , in_ raw[ E_AXIS ] , fr , active_extruder ) ;
# elif IS_SCARA // apply scara inverse_kinematics (should be changed to save raw->logical->raw)
# elif IS_SCARA // apply scara inverse_kinematics (should be changed to save raw->logical->raw)
@ -429,11 +436,11 @@
scara_oldB = delta [ B_AXIS ] ;
scara_oldB = delta [ B_AXIS ] ;
float s_feedrate = max ( adiff , bdiff ) * scara_feed_factor ;
float s_feedrate = max ( adiff , bdiff ) * scara_feed_factor ;
planner . buffer_segment ( delta [ A_AXIS ] , delta [ B_AXIS ] , delta [ C_AXIS ] , raw[ E_AXIS ] , s_feedrate , active_extruder ) ;
planner . buffer_segment ( delta [ A_AXIS ] , delta [ B_AXIS ] , delta [ C_AXIS ] , in_ raw[ E_AXIS ] , s_feedrate , active_extruder ) ;
# else // CARTESIAN
# else // CARTESIAN
planner . buffer_segment ( raw [ X_AXIS ] , raw [ Y_AXIS ] , raw [ Z_AXIS ] , raw[ E_AXIS ] , fr , active_extruder ) ;
planner . buffer_segment ( raw [ X_AXIS ] , raw [ Y_AXIS ] , raw [ Z_AXIS ] , in_ raw[ E_AXIS ] , fr , active_extruder ) ;
# endif
# endif
}
}
@ -456,19 +463,11 @@
* Returns true if did NOT move , false if moved ( requires current_position update ) .
* Returns true if did NOT move , false if moved ( requires current_position update ) .
*/
*/
bool _O2 unified_bed_leveling : : prepare_segmented_line_to ( const float ( & in_ target) [ XYZE ] , const float & feedrate ) {
bool _O2 unified_bed_leveling : : prepare_segmented_line_to ( const float ( & r target) [ XYZE ] , const float & feedrate ) {
if ( ! position_is_reachable ( in_target[ X_AXIS ] , in_ target[ Y_AXIS ] ) ) // fail if moving outside reachable boundary
if ( ! position_is_reachable ( rtarget[ X_AXIS ] , r target[ Y_AXIS ] ) ) // fail if moving outside reachable boundary
return true ; // did not move, so current_position still accurate
return true ; // did not move, so current_position still accurate
# if ENABLED(SKEW_CORRECTION)
// For skew correction just adjust the destination point and we're done
float rtarget [ XYZE ] = { in_target [ X_AXIS ] , in_target [ Y_AXIS ] , in_target [ Z_AXIS ] , in_target [ E_AXIS ] } ;
planner . skew ( rtarget [ X_AXIS ] , rtarget [ Y_AXIS ] , rtarget [ Z_AXIS ] ) ;
# else
const float ( & rtarget ) [ XYZE ] = in_target ;
# endif
const float total [ XYZE ] = {
const float total [ XYZE ] = {
rtarget [ X_AXIS ] - current_position [ X_AXIS ] ,
rtarget [ X_AXIS ] - current_position [ X_AXIS ] ,
rtarget [ Y_AXIS ] - current_position [ Y_AXIS ] ,
rtarget [ Y_AXIS ] - current_position [ Y_AXIS ] ,
@ -513,10 +512,6 @@
current_position [ E_AXIS ]
current_position [ E_AXIS ]
} ;
} ;
# if ENABLED(SKEW_CORRECTION)
planner . skew ( raw [ X_AXIS ] , raw [ Y_AXIS ] , raw [ Z_AXIS ] ) ;
# endif
// Only compute leveling per segment if ubl active and target below z_fade_height.
// Only compute leveling per segment if ubl active and target below z_fade_height.
if ( ! planner . leveling_active | | ! planner . leveling_active_at_z ( rtarget [ Z_AXIS ] ) ) { // no mesh leveling
if ( ! planner . leveling_active | | ! planner . leveling_active_at_z ( rtarget [ Z_AXIS ] ) ) { // no mesh leveling
while ( - - segments ) {
while ( - - segments ) {