Skip to content

fix: Correct G92 E reset after deferred perimeters (issue #17)#53

Open
adele-with-a-b wants to merge 1 commit intoGeekDetour:mainfrom
adele-with-a-b:absolute-extrusion-fix
Open

fix: Correct G92 E reset after deferred perimeters (issue #17)#53
adele-with-a-b wants to merge 1 commit intoGeekDetour:mainfrom
adele-with-a-b:absolute-extrusion-fix

Conversation

@adele-with-a-b
Copy link
Copy Markdown

Absolute Extrusion Fix

In absolute extrusion mode (used by PrusaSlicer), the G92 E reset after deferred perimeters used myline.previous.e — the E value that includes the deferred perimeters' extrusion. But since those perimeters were replayed with relative extrusion (M83), the firmware's E register never advanced by that amount.

This caused a massive blob at the start of the next feature (outer wall) as reported in #17.

Fix

G92 E now uses self.last_noninternalperimeter_state.e — the E value from before the deferred perimeters. Applied to both generate_deffered_perimeters() and the kept perimeters path.

# Before:
buffer.append(from_gcode(f"G92 E{myline.previous.e} ..."))

# After:
e_reset = self.last_noninternalperimeter_state.e if self.last_noninternalperimeter_state else myline.previous.e
buffer.append(from_gcode(f"G92 E{e_reset} ..."))

Impact

  • PrusaSlicer (absolute extrusion): Fixes blob at layer transitions
  • Bambu Studio / OrcaSlicer (relative extrusion): No-op — these slicers use M83 by default

Closes #17

In absolute extrusion mode, G92 E reset used myline.previous.e which
includes the deferred perimeters' extrusion. Since those were replayed
with relative extrusion (M83), the firmware E register never advanced.
Now uses last_noninternalperimeter_state.e instead.

Closes GeekDetour#17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Absolute extrusion mode issue

1 participant