瀏覽代碼

Fix (un)apply_leveling fade bug

Scott Lahteine 7 年之前
父節點
當前提交
ec6ca37ed3
共有 1 個文件被更改,包括 50 次插入78 次删除
  1. 50
    78
      Marlin/src/module/planner.cpp

+ 50
- 78
Marlin/src/module/planner.cpp 查看文件

@@ -571,28 +571,7 @@ void Planner::calculate_volumetric_multipliers() {
571 571
 
572 572
     if (!leveling_active) return;
573 573
 
574
-    #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT)
575
-      const float fade_scaling_factor = fade_scaling_factor_for_z(rz);
576
-      if (!fade_scaling_factor) return;
577
-    #else
578
-      constexpr float fade_scaling_factor = 1.0;
579
-    #endif
580
-
581
-    #if ENABLED(AUTO_BED_LEVELING_UBL)
582
-
583
-      rz += ubl.get_z_correction(rx, ry) * fade_scaling_factor;
584
-
585
-    #elif ENABLED(MESH_BED_LEVELING)
586
-
587
-      rz += mbl.get_z(rx, ry
588
-        #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT)
589
-          , fade_scaling_factor
590
-        #endif
591
-      );
592
-
593
-    #elif ABL_PLANAR
594
-
595
-      UNUSED(fade_scaling_factor);
574
+    #if ABL_PLANAR
596 575
 
597 576
       float dx = rx - (X_TILT_FULCRUM),
598 577
             dy = ry - (Y_TILT_FULCRUM);
@@ -602,66 +581,43 @@ void Planner::calculate_volumetric_multipliers() {
602 581
       rx = dx + X_TILT_FULCRUM;
603 582
       ry = dy + Y_TILT_FULCRUM;
604 583
 
605
-    #elif ENABLED(AUTO_BED_LEVELING_BILINEAR)
606
-
607
-      float tmp[XYZ] = { rx, ry, 0 };
608
-      rz += bilinear_z_offset(tmp) * fade_scaling_factor;
609
-
610
-    #endif
611
-  }
612
-
613
-  void Planner::unapply_leveling(float raw[XYZ]) {
614
-
615
-    if (!leveling_active) return;
616
-
617
-    #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT)
618
-      if (!leveling_active_at_z(raw[Z_AXIS])) return;
619
-    #endif
620
-
621
-    #if ENABLED(AUTO_BED_LEVELING_UBL)
622
-
623
-      const float z_physical = raw[Z_AXIS],
624
-                  z_correct = ubl.get_z_correction(raw[X_AXIS], raw[Y_AXIS]),
625
-                  z_virtual = z_physical - z_correct;
626
-            float z_raw = z_virtual;
584
+    #else
627 585
 
628 586
       #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT)
587
+        const float fade_scaling_factor = fade_scaling_factor_for_z(rz);
588
+        if (!fade_scaling_factor) return;
589
+      #elif HAS_MESH
590
+        constexpr float fade_scaling_factor = 1.0;
591
+      #endif
629 592
 
630
-        // for P=physical_z, L=logical_z, M=mesh_z, H=fade_height,
631
-        // Given P=L+M(1-L/H) (faded mesh correction formula for L<H)
632
-        //  then L=P-M(1-L/H)
633
-        //    so L=P-M+ML/H
634
-        //    so L-ML/H=P-M
635
-        //    so L(1-M/H)=P-M
636
-        //    so L=(P-M)/(1-M/H) for L<H
637
-
638
-        if (planner.z_fade_height) {
639
-          if (z_raw >= planner.z_fade_height)
640
-            z_raw = z_physical;
641
-          else
642
-            z_raw /= 1.0 - z_correct * planner.inverse_z_fade_height;
643
-        }
644
-
645
-      #endif // ENABLE_LEVELING_FADE_HEIGHT
646
-
647
-      raw[Z_AXIS] = z_raw;
593
+      #if ENABLED(AUTO_BED_LEVELING_BILINEAR)
594
+        const float raw[XYZ] = { rx, ry, 0 };
595
+      #endif
648 596
 
649
-      return; // don't fall thru to other ENABLE_LEVELING_FADE_HEIGHT logic
597
+      rz += (
598
+        #if ENABLED(AUTO_BED_LEVELING_UBL)
599
+          ubl.get_z_correction(rx, ry) * fade_scaling_factor
600
+        #elif ENABLED(MESH_BED_LEVELING)
601
+          mbl.get_z(rx, ry
602
+            #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT)
603
+              , fade_scaling_factor
604
+            #endif
605
+          )
606
+        #elif ENABLED(AUTO_BED_LEVELING_BILINEAR)
607
+          bilinear_z_offset(raw) * fade_scaling_factor
608
+        #else
609
+          0
610
+        #endif
611
+      );
650 612
 
651 613
     #endif
614
+  }
652 615
 
653
-    #if ENABLED(MESH_BED_LEVELING)
616
+  void Planner::unapply_leveling(float raw[XYZ]) {
654 617
 
655
-      if (leveling_active) {
656
-        #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT)
657
-          const float c = mbl.get_z(raw[X_AXIS], raw[Y_AXIS], 1.0);
658
-          raw[Z_AXIS] = (z_fade_height * (raw[Z_AXIS]) - c) / (z_fade_height - c);
659
-        #else
660
-          raw[Z_AXIS] -= mbl.get_z(raw[X_AXIS], raw[Y_AXIS]);
661
-        #endif
662
-      }
618
+    if (!leveling_active) return;
663 619
 
664
-    #elif ABL_PLANAR
620
+    #if ABL_PLANAR
665 621
 
666 622
       matrix_3x3 inverse = matrix_3x3::transpose(bed_level_matrix);
667 623
 
@@ -673,15 +629,31 @@ void Planner::calculate_volumetric_multipliers() {
673 629
       raw[X_AXIS] = dx + X_TILT_FULCRUM;
674 630
       raw[Y_AXIS] = dy + Y_TILT_FULCRUM;
675 631
 
676
-    #elif ENABLED(AUTO_BED_LEVELING_BILINEAR)
632
+    #else
677 633
 
678 634
       #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT)
679
-        const float c = bilinear_z_offset(raw);
680
-        raw[Z_AXIS] = (z_fade_height * (raw[Z_AXIS]) - c) / (z_fade_height - c);
681
-      #else
682
-        raw[Z_AXIS] -= bilinear_z_offset(raw);
635
+        const float fade_scaling_factor = fade_scaling_factor_for_z(raw[Z_AXIS]);
636
+        if (!fade_scaling_factor) return;
637
+      #elif HAS_MESH
638
+        constexpr float fade_scaling_factor = 1.0;
683 639
       #endif
684 640
 
641
+      raw[Z_AXIS] -= (
642
+        #if ENABLED(AUTO_BED_LEVELING_UBL)
643
+          ubl.get_z_correction(raw[X_AXIS], raw[Y_AXIS]) * fade_scaling_factor
644
+        #elif ENABLED(MESH_BED_LEVELING)
645
+          mbl.get_z(raw[X_AXIS], raw[Y_AXIS]
646
+            #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT)
647
+              , fade_scaling_factor
648
+            #endif
649
+          )
650
+        #elif ENABLED(AUTO_BED_LEVELING_BILINEAR)
651
+          bilinear_z_offset(raw) * fade_scaling_factor
652
+        #else
653
+          0
654
+        #endif
655
+      );
656
+
685 657
     #endif
686 658
   }
687 659
 

Loading…
取消
儲存