Fix logic of UBL::fade_scaling_factor_for_z
This commit is contained in:
		
							parent
							
								
									a7aa70e79a
								
							
						
					
					
						commit
						7310110ec0
					
				| @ -10175,6 +10175,8 @@ void set_current_from_steppers_for_axis(const AxisEnum axis) { | |||||||
|   /**
 |   /**
 | ||||||
|    * Prepare a linear move in a Cartesian setup. |    * Prepare a linear move in a Cartesian setup. | ||||||
|    * If Mesh Bed Leveling is enabled, perform a mesh move. |    * If Mesh Bed Leveling is enabled, perform a mesh move. | ||||||
|  |    * | ||||||
|  |    * Returns true if the caller didn't update current_position. | ||||||
|    */ |    */ | ||||||
|   inline bool prepare_move_to_destination_cartesian() { |   inline bool prepare_move_to_destination_cartesian() { | ||||||
|     // Do not use feedrate_percentage for E or Z only moves
 |     // Do not use feedrate_percentage for E or Z only moves
 | ||||||
| @ -10190,9 +10192,7 @@ void set_current_from_steppers_for_axis(const AxisEnum axis) { | |||||||
|         else |         else | ||||||
|       #elif ENABLED(AUTO_BED_LEVELING_UBL) |       #elif ENABLED(AUTO_BED_LEVELING_UBL) | ||||||
|         if (ubl.state.active) { |         if (ubl.state.active) { | ||||||
| 
 |  | ||||||
|           ubl_line_to_destination(MMS_SCALED(feedrate_mm_s), active_extruder); |           ubl_line_to_destination(MMS_SCALED(feedrate_mm_s), active_extruder); | ||||||
| 
 |  | ||||||
|           return false; |           return false; | ||||||
|         } |         } | ||||||
|         else |         else | ||||||
|  | |||||||
							
								
								
									
										29
									
								
								Marlin/UBL.h
									
									
									
									
									
								
							
							
						
						
									
										29
									
								
								Marlin/UBL.h
									
									
									
									
									
								
							| @ -98,9 +98,6 @@ | |||||||
|         float g29_correction_fade_height = 10.0, |         float g29_correction_fade_height = 10.0, | ||||||
|               g29_fade_height_multiplier = 1.0 / 10.0; // It's cheaper to do a floating point multiply than divide,
 |               g29_fade_height_multiplier = 1.0 / 10.0; // It's cheaper to do a floating point multiply than divide,
 | ||||||
|                                                        // so keep this value and its reciprocal.
 |                                                        // so keep this value and its reciprocal.
 | ||||||
|       #else |  | ||||||
|         const float g29_correction_fade_height = 10.0, |  | ||||||
|                     g29_fade_height_multiplier = 1.0 / 10.0; |  | ||||||
|       #endif |       #endif | ||||||
| 
 | 
 | ||||||
|       // If you change this struct, adjust TOTAL_STRUCT_SIZE
 |       // If you change this struct, adjust TOTAL_STRUCT_SIZE
 | ||||||
| @ -118,8 +115,7 @@ | |||||||
|     class unified_bed_leveling { |     class unified_bed_leveling { | ||||||
|       private: |       private: | ||||||
| 
 | 
 | ||||||
|         static float last_specified_z, |         static float last_specified_z; | ||||||
|                      fade_scaling_factor_for_current_height; |  | ||||||
| 
 | 
 | ||||||
|       public: |       public: | ||||||
| 
 | 
 | ||||||
| @ -307,32 +303,29 @@ | |||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         /**
 |         /**
 | ||||||
|          * This routine is used to scale the Z correction depending upon the current nozzle height. It is |          * This function sets the Z leveling fade factor based on the given Z height, | ||||||
|          * optimized for speed. It avoids floating point operations by checking if the requested scaling |          * only re-calculating when necessary. | ||||||
|          * factor is going to be the same as the last time the function calculated a value. If so, it just |  | ||||||
|          * returns it. |  | ||||||
|          * |          * | ||||||
|          * It returns a scaling factor of 1.0 if UBL is inactive. |          *  Returns 1.0 if g29_correction_fade_height is 0.0. | ||||||
|          * It returns a scaling factor of 0.0 if Z is past the specified 'Fade Height' |          *  Returns 0.0 if Z is past the specified 'Fade Height'. | ||||||
|          */ |          */ | ||||||
|         #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT) |         #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT) | ||||||
| 
 | 
 | ||||||
|           static FORCE_INLINE float fade_scaling_factor_for_z(const float &lz) { |           static FORCE_INLINE float fade_scaling_factor_for_z(const float &lz) { | ||||||
|  |             if (state.g29_correction_fade_height == 0.0) return 1.0; | ||||||
|  | 
 | ||||||
|  |             static float fade_scaling_factor = 1.0; | ||||||
|             const float rz = RAW_Z_POSITION(lz); |             const float rz = RAW_Z_POSITION(lz); | ||||||
|             if (last_specified_z != rz) { |             if (last_specified_z != rz) { | ||||||
|               last_specified_z = rz; |               last_specified_z = rz; | ||||||
|               fade_scaling_factor_for_current_height = |               fade_scaling_factor = | ||||||
|                 state.active && rz < state.g29_correction_fade_height |                 rz < state.g29_correction_fade_height | ||||||
|                   ? 1.0 - (rz * state.g29_fade_height_multiplier) |                   ? 1.0 - (rz * state.g29_fade_height_multiplier) | ||||||
|                   : 0.0; |                   : 0.0; | ||||||
|             } |             } | ||||||
|             return fade_scaling_factor_for_current_height; |             return fade_scaling_factor; | ||||||
|           } |           } | ||||||
| 
 | 
 | ||||||
|         #else |  | ||||||
| 
 |  | ||||||
|           static constexpr float fade_scaling_factor_for_z(const float &lz) { UNUSED(lz); return 1.0; } |  | ||||||
| 
 |  | ||||||
|         #endif |         #endif | ||||||
| 
 | 
 | ||||||
|     }; // class unified_bed_leveling
 |     }; // class unified_bed_leveling
 | ||||||
|  | |||||||
| @ -61,7 +61,6 @@ | |||||||
| 
 | 
 | ||||||
|   float unified_bed_leveling::z_values[UBL_MESH_NUM_X_POINTS][UBL_MESH_NUM_Y_POINTS], |   float unified_bed_leveling::z_values[UBL_MESH_NUM_X_POINTS][UBL_MESH_NUM_Y_POINTS], | ||||||
|         unified_bed_leveling::last_specified_z, |         unified_bed_leveling::last_specified_z, | ||||||
|         unified_bed_leveling::fade_scaling_factor_for_current_height, |  | ||||||
|         unified_bed_leveling::mesh_index_to_xpos[UBL_MESH_NUM_X_POINTS + 1], // +1 safety margin for now, until determinism prevails
 |         unified_bed_leveling::mesh_index_to_xpos[UBL_MESH_NUM_X_POINTS + 1], // +1 safety margin for now, until determinism prevails
 | ||||||
|         unified_bed_leveling::mesh_index_to_ypos[UBL_MESH_NUM_Y_POINTS + 1]; |         unified_bed_leveling::mesh_index_to_ypos[UBL_MESH_NUM_Y_POINTS + 1]; | ||||||
| 
 | 
 | ||||||
| @ -102,8 +101,9 @@ | |||||||
|        * updated, but until then, we try to ease the transition |        * updated, but until then, we try to ease the transition | ||||||
|        * for our Beta testers. |        * for our Beta testers. | ||||||
|        */ |        */ | ||||||
|       if (ubl.state.g29_fade_height_multiplier != 1.0 / ubl.state.g29_correction_fade_height) { |       const float recip = ubl.state.g29_correction_fade_height ? 1.0 / ubl.state.g29_correction_fade_height : 1.0; | ||||||
|         ubl.state.g29_fade_height_multiplier = 1.0 / ubl.state.g29_correction_fade_height; |       if (ubl.state.g29_fade_height_multiplier != recip) { | ||||||
|  |         ubl.state.g29_fade_height_multiplier = recip; | ||||||
|         store_state(); |         store_state(); | ||||||
|       } |       } | ||||||
|     #endif |     #endif | ||||||
| @ -160,7 +160,6 @@ | |||||||
|     ZERO(z_values); |     ZERO(z_values); | ||||||
| 
 | 
 | ||||||
|     last_specified_z = -999.9; |     last_specified_z = -999.9; | ||||||
|     fade_scaling_factor_for_current_height = 0.0; |  | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   void unified_bed_leveling::invalidate() { |   void unified_bed_leveling::invalidate() { | ||||||
|  | |||||||
| @ -1132,8 +1132,7 @@ | |||||||
|     safe_delay(50); |     safe_delay(50); | ||||||
| 
 | 
 | ||||||
|     #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT) |     #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT) | ||||||
|       SERIAL_PROTOCOLPAIR("g29_correction_fade_height : ", ubl.state.g29_correction_fade_height); |       SERIAL_PROTOCOLLNPAIR("g29_correction_fade_height : ", ubl.state.g29_correction_fade_height); | ||||||
|       SERIAL_EOL; |  | ||||||
|     #endif |     #endif | ||||||
| 
 | 
 | ||||||
|     SERIAL_PROTOCOLPGM("z_offset: "); |     SERIAL_PROTOCOLPGM("z_offset: "); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user