Add ExtUI methods to babystep probe/nozzle offsets (#12590)
This commit is contained in:
parent
413e303ad5
commit
113af46a1b
2 changed files with 92 additions and 38 deletions
|
@ -449,49 +449,86 @@ namespace ExtUI {
|
||||||
void setRetractAcceleration_mm_s2(const float acc) { planner.settings.retract_acceleration = acc; }
|
void setRetractAcceleration_mm_s2(const float acc) { planner.settings.retract_acceleration = acc; }
|
||||||
void setTravelAcceleration_mm_s2(const float acc) { planner.settings.travel_acceleration = acc; }
|
void setTravelAcceleration_mm_s2(const float acc) { planner.settings.travel_acceleration = acc; }
|
||||||
|
|
||||||
#if ENABLED(BABYSTEP_ZPROBE_OFFSET)
|
#if ENABLED(BABYSTEPPING)
|
||||||
float getZOffset_mm() {
|
bool babystepAxis_steps(const int16_t steps, const axis_t axis) {
|
||||||
#if ENABLED(BABYSTEP_HOTEND_Z_OFFSET)
|
switch (axis) {
|
||||||
if (active_extruder != 0)
|
#if ENABLED(BABYSTEP_XY)
|
||||||
return hotend_offset[Z_AXIS][active_extruder];
|
case X: thermalManager.babystep_axis(X_AXIS, steps); break;
|
||||||
else
|
case Y: thermalManager.babystep_axis(Y_AXIS, steps); break;
|
||||||
#endif
|
#endif
|
||||||
|
case Z: thermalManager.babystep_axis(Z_AXIS, steps); break;
|
||||||
|
default: return false;
|
||||||
|
};
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This function adjusts an axis during a print.
|
||||||
|
*
|
||||||
|
* When linked_nozzles is false, each nozzle in a multi-nozzle
|
||||||
|
* printer can be babystepped independently of the others. This
|
||||||
|
* lets the user to fine tune the Z-offset and Nozzle Offsets
|
||||||
|
* while observing the first layer of a print, regardless of
|
||||||
|
* what nozzle is printing.
|
||||||
|
*/
|
||||||
|
void smartAdjustAxis_steps(const int16_t steps, const axis_t axis, bool linked_nozzles) {
|
||||||
|
const float mm = steps * planner.steps_to_mm[axis];
|
||||||
|
|
||||||
|
if (!babystepAxis_steps(steps, axis)) return;
|
||||||
|
|
||||||
|
#if ENABLED(BABYSTEP_ZPROBE_OFFSET)
|
||||||
|
// Make it so babystepping in Z adjusts the Z probe offset.
|
||||||
|
if (axis == Z
|
||||||
|
#if EXTRUDERS > 1
|
||||||
|
&& (linked_nozzles || active_extruder == 0)
|
||||||
|
#endif
|
||||||
|
) zprobe_zoffset += mm;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if EXTRUDERS > 1
|
||||||
|
/**
|
||||||
|
* When linked_nozzles is false, as an axis is babystepped
|
||||||
|
* adjust the hotend offsets so that the other nozzles are
|
||||||
|
* unaffected by the babystepping of the active nozzle.
|
||||||
|
*/
|
||||||
|
if (!linked_nozzles) {
|
||||||
|
HOTEND_LOOP()
|
||||||
|
if (e != active_extruder)
|
||||||
|
hotend_offset[axis][e] += mm;
|
||||||
|
|
||||||
|
normalizeNozzleOffset(X);
|
||||||
|
normalizeNozzleOffset(Y);
|
||||||
|
normalizeNozzleOffset(Z);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
UNUSED(linked_nozzles);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts a mm displacement to a number of whole number of
|
||||||
|
* steps that is at least mm long.
|
||||||
|
*/
|
||||||
|
int16_t mmToWholeSteps(const float mm, const axis_t axis) {
|
||||||
|
const float steps = mm / planner.steps_to_mm[axis];
|
||||||
|
return steps > 0 ? ceil(steps) : floor(steps);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if HAS_BED_PROBE
|
||||||
|
float getZOffset_mm() {
|
||||||
return zprobe_zoffset;
|
return zprobe_zoffset;
|
||||||
}
|
}
|
||||||
|
|
||||||
void setZOffset_mm(const float value) {
|
void setZOffset_mm(const float value) {
|
||||||
const float diff = (value - getZOffset_mm()) / planner.steps_to_mm[Z_AXIS];
|
if (WITHIN(value, Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX)) {
|
||||||
addZOffset_steps(diff > 0 ? CEIL(diff) : FLOOR(diff));
|
zprobe_zoffset = value;
|
||||||
}
|
|
||||||
|
|
||||||
void addZOffset_steps(int16_t babystep_increment) {
|
|
||||||
#if ENABLED(BABYSTEP_HOTEND_Z_OFFSET)
|
|
||||||
const bool do_probe = (active_extruder == 0);
|
|
||||||
#else
|
|
||||||
constexpr bool do_probe = true;
|
|
||||||
#endif
|
|
||||||
const float diff = planner.steps_to_mm[Z_AXIS] * babystep_increment,
|
|
||||||
new_probe_offset = zprobe_zoffset + diff,
|
|
||||||
new_offs =
|
|
||||||
#if ENABLED(BABYSTEP_HOTEND_Z_OFFSET)
|
|
||||||
do_probe ? new_probe_offset : hotend_offset[Z_AXIS][active_extruder] - diff
|
|
||||||
#else
|
|
||||||
new_probe_offset
|
|
||||||
#endif
|
|
||||||
;
|
|
||||||
if (WITHIN(new_offs, Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX)) {
|
|
||||||
|
|
||||||
thermalManager.babystep_axis(Z_AXIS, babystep_increment);
|
|
||||||
|
|
||||||
if (do_probe) zprobe_zoffset = new_offs;
|
|
||||||
#if ENABLED(BABYSTEP_HOTEND_Z_OFFSET)
|
|
||||||
else hotend_offset[Z_AXIS][active_extruder] = new_offs;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif // ENABLED(BABYSTEP_ZPROBE_OFFSET)
|
#endif // HAS_BED_PROBE
|
||||||
|
|
||||||
#if HOTENDS > 1
|
#if HOTENDS > 1
|
||||||
|
|
||||||
float getNozzleOffset_mm(const axis_t axis, const extruder_t extruder) {
|
float getNozzleOffset_mm(const axis_t axis, const extruder_t extruder) {
|
||||||
if (extruder - E0 >= HOTENDS) return 0;
|
if (extruder - E0 >= HOTENDS) return 0;
|
||||||
return hotend_offset[axis][extruder - E0];
|
return hotend_offset[axis][extruder - E0];
|
||||||
|
@ -501,7 +538,18 @@ namespace ExtUI {
|
||||||
if (extruder - E0 >= HOTENDS) return;
|
if (extruder - E0 >= HOTENDS) return;
|
||||||
hotend_offset[axis][extruder - E0] = value;
|
hotend_offset[axis][extruder - E0] = value;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
/**
|
||||||
|
* The UI should call this if needs to guarantee the first
|
||||||
|
* nozzle offset is zero (such as when it doesn't allow the
|
||||||
|
* user to edit the offset the first nozzle).
|
||||||
|
*/
|
||||||
|
void normalizeNozzleOffset(const axis_t axis) {
|
||||||
|
const float offs = hotend_offset[axis][0];
|
||||||
|
HOTEND_LOOP() hotend_offset[axis][e] -= offs;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // HOTENDS > 1
|
||||||
|
|
||||||
#if ENABLED(BACKLASH_GCODE)
|
#if ENABLED(BACKLASH_GCODE)
|
||||||
float getAxisBacklash_mm(const axis_t axis) { return backlash_distance_mm[axis]; }
|
float getAxisBacklash_mm(const axis_t axis) { return backlash_distance_mm[axis]; }
|
||||||
|
|
|
@ -136,16 +136,22 @@ namespace ExtUI {
|
||||||
extruder_t getActiveTool();
|
extruder_t getActiveTool();
|
||||||
void setActiveTool(const extruder_t, bool no_move);
|
void setActiveTool(const extruder_t, bool no_move);
|
||||||
|
|
||||||
|
#if ENABLED(BABYSTEPPING)
|
||||||
|
int16_t mmToWholeSteps(const float mm, const axis_t axis);
|
||||||
|
|
||||||
|
bool babystepAxis_steps(const int16_t steps, const axis_t axis);
|
||||||
|
void smartAdjustAxis_steps(const int16_t steps, const axis_t axis, bool linked_nozzles);
|
||||||
|
#endif
|
||||||
|
|
||||||
#if HOTENDS > 1
|
#if HOTENDS > 1
|
||||||
float getNozzleOffset_mm(const axis_t, const extruder_t);
|
float getNozzleOffset_mm(const axis_t, const extruder_t);
|
||||||
void setNozzleOffset_mm(const float, const axis_t, const extruder_t);
|
void setNozzleOffset_mm(const float, const axis_t, const extruder_t);
|
||||||
|
void normalizeNozzleOffset(const axis_t axis);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ENABLED(BABYSTEP_ZPROBE_OFFSET)
|
#if HAS_BED_PROBE
|
||||||
float getZOffset_mm();
|
float getZOffset_mm();
|
||||||
void setZOffset_mm(const float);
|
void setZOffset_mm(const float);
|
||||||
void addZOffset_steps(const int16_t);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ENABLED(BACKLASH_GCODE)
|
#if ENABLED(BACKLASH_GCODE)
|
||||||
|
|
Reference in a new issue