Skip to content

Commit

Permalink
Fix vector normalization in JD (MarlinFirmware#17938)
Browse files Browse the repository at this point in the history
  • Loading branch information
XDA-Bam authored and Emmanuel Viala committed Aug 21, 2020
1 parent ad87a2c commit a897c18
Showing 1 changed file with 10 additions and 9 deletions.
19 changes: 10 additions & 9 deletions Marlin/src/module/planner.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2256,16 +2256,17 @@ bool Planner::_populate_block(block_t * const block, bool split_move,
{ steps_dist_mm.x, steps_dist_mm.y, steps_dist_mm.z, steps_dist_mm.e }
#endif
;
unit_vec *= inverse_millimeters;

#if IS_CORE && HAS_JUNCTION_DEVIATION
/**
* On CoreXY the length of the vector [A,B] is SQRT(2) times the length of the head movement vector [X,Y].
* So taking Z and E into account, we cannot scale to a unit vector with "inverse_millimeters".
* => normalize the complete junction vector
*/
normalize_junction_vector(unit_vec);
#endif
/**
* On CoreXY the length of the vector [A,B] is SQRT(2) times the length of the head movement vector [X,Y].
* So taking Z and E into account, we cannot scale to a unit vector with "inverse_millimeters".
* => normalize the complete junction vector.
* Elsewise, when needed JD factors in the E component
*/
if (ENABLED(IS_CORE) || esteps > 0)
normalize_junction_vector(unit_vec); // Normalize with XYZE components
else
unit_vec *= inverse_millimeters; // Use pre-calculated (1 / SQRT(x^2 + y^2 + z^2))

// Skip first block or when previous_nominal_speed is used as a flag for homing and offset cycles.
if (moves_queued && !UNEAR_ZERO(previous_nominal_speed_sqr)) {
Expand Down

0 comments on commit a897c18

Please sign in to comment.