Преглед изворни кода

Prettify LIN_ADVANCE code with the positive condition

Scott Lahteine пре 8 година
родитељ
комит
fc2fc828b3
1 измењених фајлова са 21 додато и 15 уклоњено
  1. 21
    15
      Marlin/planner.cpp

+ 21
- 15
Marlin/planner.cpp Прегледај датотеку

@@ -1293,22 +1293,28 @@ void Planner::_buffer_line(const float &a, const float &b, const float &c, const
1293 1293
 
1294 1294
   #if ENABLED(LIN_ADVANCE)
1295 1295
 
1296
-    // Don't use LIN_ADVANCE for blocks if:
1297
-    // !block->steps[E_AXIS]: We don't have E steps todo (Travel move)
1298
-    // !block->steps[X_AXIS] && !block->steps[Y_AXIS]: We don't have a movement in XY direction (Retract / Prime moves)
1299
-    // extruder_advance_k == 0.0: There is no advance factor set
1300
-    // block->steps[E_AXIS] == block->step_event_count: A problem occurs when there's a very tiny move before a retract.
1301
-    // In this case, the retract and the move will be executed together.
1302
-    // This leads to an enormous number of advance steps due to a huge e_acceleration.
1303
-    // The math is correct, but you don't want a retract move done with advance!
1304
-    // de_float <= 0.0: Extruder is running in reverse direction (for example during "Wipe while retracting" (Slic3r) or "Combing" (Cura) movements)
1305
-    if (!esteps || (!block->steps[X_AXIS] && !block->steps[Y_AXIS]) || extruder_advance_k == 0.0 || (uint32_t)esteps == block->step_event_count || de_float <= 0.0) {
1306
-      block->use_advance_lead = false;
1307
-    }
1308
-    else {
1309
-      block->use_advance_lead = true;
1296
+    //
1297
+    // Use LIN_ADVANCE for blocks if all these are true:
1298
+    //
1299
+    // esteps                                          : We have E steps todo (a printing move)
1300
+    // 
1301
+    // block->steps[X_AXIS] || block->steps[Y_AXIS]    : We have a movement in XY direction (i.e., not retract / prime).
1302
+    // 
1303
+    // extruder_advance_k                              : There is an advance factor set.
1304
+    // 
1305
+    // block->steps[E_AXIS] != block->step_event_count : A problem occurs if the move before a retract is too small.
1306
+    //                                                   In that case, the retract and move will be executed together.
1307
+    //                                                   This leads to too many advance steps due to a huge e_acceleration.
1308
+    //                                                   The math is good, but we must avoid retract moves with advance!
1309
+    // de_float > 0.0                                  : Extruder is running forward (e.g., for "Wipe while retracting" (Slic3r) or "Combing" (Cura) moves)
1310
+    //
1311
+    block->use_advance_lead =  esteps
1312
+                            && (block->steps[X_AXIS] || block->steps[Y_AXIS])
1313
+                            && extruder_advance_k
1314
+                            && (uint32_t)esteps != block->step_event_count
1315
+                            && de_float > 0.0;
1316
+    if (block->use_advance_lead)
1310 1317
       block->abs_adv_steps_multiplier8 = lround(extruder_advance_k * (de_float / mm_D_float) * block->nominal_speed / (float)block->nominal_rate * axis_steps_per_mm[E_AXIS_N] * 256.0);
1311
-    }
1312 1318
 
1313 1319
   #elif ENABLED(ADVANCE)
1314 1320
 

Loading…
Откажи
Сачувај