|
|
|
@ -75,14 +75,14 @@ float max_e_jerk;
|
|
|
|
|
float mintravelfeedrate;
|
|
|
|
|
unsigned long axis_steps_per_sqr_second[NUM_AXIS];
|
|
|
|
|
|
|
|
|
|
#ifdef ENABLE_AUTO_BED_LEVELING
|
|
|
|
|
// this holds the required transform to compensate for bed level
|
|
|
|
|
matrix_3x3 plan_bed_level_matrix = {
|
|
|
|
|
#ifdef ENABLE_AUTO_BED_COMPENSATION
|
|
|
|
|
// this holds the required transform to compensate for bed compensation
|
|
|
|
|
matrix_3x3 plan_bed_compensation_matrix = {
|
|
|
|
|
1.0, 0.0, 0.0,
|
|
|
|
|
0.0, 1.0, 0.0,
|
|
|
|
|
0.0, 0.0, 1.0,
|
|
|
|
|
};
|
|
|
|
|
#endif // #ifdef ENABLE_AUTO_BED_LEVELING
|
|
|
|
|
#endif // #ifdef ENABLE_AUTO_BED_COMPENSATION
|
|
|
|
|
|
|
|
|
|
// The current position of the tool in absolute steps
|
|
|
|
|
long position[NUM_AXIS]; //rescaled from extern when axis_steps_per_unit are changed by gcode
|
|
|
|
@ -528,11 +528,11 @@ float junction_deviation = 0.1;
|
|
|
|
|
// Add a new linear movement to the buffer. steps_x, _y and _z is the absolute position in
|
|
|
|
|
// mm. Microseconds specify how many microseconds the move should take to perform. To aid acceleration
|
|
|
|
|
// calculation the caller must also provide the physical length of the line in millimeters.
|
|
|
|
|
#ifdef ENABLE_AUTO_BED_LEVELING
|
|
|
|
|
#ifdef ENABLE_AUTO_BED_COMPENSATION
|
|
|
|
|
void plan_buffer_line(float x, float y, float z, const float &e, float feed_rate, const uint8_t &extruder)
|
|
|
|
|
#else
|
|
|
|
|
void plan_buffer_line(const float &x, const float &y, const float &z, const float &e, float feed_rate, const uint8_t &extruder)
|
|
|
|
|
#endif //ENABLE_AUTO_BED_LEVELING
|
|
|
|
|
#endif //ENABLE_AUTO_BED_COMPENSATION
|
|
|
|
|
{
|
|
|
|
|
// Calculate the buffer head after we push this byte
|
|
|
|
|
int next_buffer_head = next_block_index(block_buffer_head);
|
|
|
|
@ -546,9 +546,9 @@ void plan_buffer_line(const float &x, const float &y, const float &z, const floa
|
|
|
|
|
lcd_update();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#ifdef ENABLE_AUTO_BED_LEVELING
|
|
|
|
|
apply_rotation_xyz(plan_bed_level_matrix, x, y, z);
|
|
|
|
|
#endif // ENABLE_AUTO_BED_LEVELING
|
|
|
|
|
#ifdef ENABLE_AUTO_BED_COMPENSATION
|
|
|
|
|
apply_rotation_xyz(plan_bed_compensation_matrix, x, y, z);
|
|
|
|
|
#endif // ENABLE_AUTO_BED_COMPENSATION
|
|
|
|
|
|
|
|
|
|
// The target position of the tool in absolute steps
|
|
|
|
|
// Calculate target position in absolute steps
|
|
|
|
@ -1021,29 +1021,29 @@ block->steps_y = labs((target[X_AXIS]-position[X_AXIS]) - (target[Y_AXIS]-positi
|
|
|
|
|
st_wake_up();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#ifdef ENABLE_AUTO_BED_LEVELING
|
|
|
|
|
#ifdef ENABLE_AUTO_BED_COMPENSATION
|
|
|
|
|
vector_3 plan_get_position() {
|
|
|
|
|
vector_3 position = vector_3(st_get_position_mm(X_AXIS), st_get_position_mm(Y_AXIS), st_get_position_mm(Z_AXIS));
|
|
|
|
|
|
|
|
|
|
//position.debug("in plan_get position");
|
|
|
|
|
//plan_bed_level_matrix.debug("in plan_get bed_level");
|
|
|
|
|
matrix_3x3 inverse = matrix_3x3::transpose(plan_bed_level_matrix);
|
|
|
|
|
//plan_bed_compensation_matrix.debug("in plan_get bed_compensation");
|
|
|
|
|
matrix_3x3 inverse = matrix_3x3::transpose(plan_bed_compensation_matrix);
|
|
|
|
|
//inverse.debug("in plan_get inverse");
|
|
|
|
|
position.apply_rotation(inverse);
|
|
|
|
|
//position.debug("after rotation");
|
|
|
|
|
|
|
|
|
|
return position;
|
|
|
|
|
}
|
|
|
|
|
#endif // ENABLE_AUTO_BED_LEVELING
|
|
|
|
|
#endif // ENABLE_AUTO_BED_COMPENSATION
|
|
|
|
|
|
|
|
|
|
#ifdef ENABLE_AUTO_BED_LEVELING
|
|
|
|
|
#ifdef ENABLE_AUTO_BED_COMPENSATION
|
|
|
|
|
void plan_set_position(float x, float y, float z, const float &e)
|
|
|
|
|
{
|
|
|
|
|
apply_rotation_xyz(plan_bed_level_matrix, x, y, z);
|
|
|
|
|
apply_rotation_xyz(plan_bed_compensation_matrix, x, y, z);
|
|
|
|
|
#else
|
|
|
|
|
void plan_set_position(const float &x, const float &y, const float &z, const float &e)
|
|
|
|
|
{
|
|
|
|
|
#endif // ENABLE_AUTO_BED_LEVELING
|
|
|
|
|
#endif // ENABLE_AUTO_BED_COMPENSATION
|
|
|
|
|
|
|
|
|
|
position[X_AXIS] = lround(x*axis_steps_per_unit[X_AXIS]);
|
|
|
|
|
position[Y_AXIS] = lround(y*axis_steps_per_unit[Y_AXIS]);
|
|
|
|
|