Skip to content

feat(gcode): add wipe_inward and fix wipe_on_loops nozzle position (Orca #15407) - #41

Merged
aceRage merged 7 commits into
mainfrom
cursor/wipe-inward-orca-15407-b5f4
Sep 20, 2026
Merged

aceRage merged 7 commits into
mainfrom
cursor/wipe-inward-orca-15407-b5f4

Conversation

@aceRage

@aceRage aceRage commented Sep 16, 2026

Copy link
Copy Markdown
Owner

Description

Port of OrcaSlicer #15407: Wipe inward for external perimeters, plus the bundled wipe_on_loops destination/nozzle-position fixes.

New print settings (default off):

  • wipe_inward — offset the external-wall wipe path toward already-printed inner walls
  • wipe_inward_distance — mm or % of actual outer-wall width (default 50%)

Falls back to the regular wipe when there is no adjacent inner wall yet (single-wall areas, Outer/Inner order) or no supported inward path. Forced off for PA and retraction calibrations.

Output change for existing Wipe on loop profiles (mandatory re-slice)

This PR intentionally changes G-code for existing profiles with Wipe on loop (wipe_on_loops) enabled, even when Wipe inward (wipe_inward) remains disabled.

The loop move samples the incoming and outgoing extrusion paths by distance across path boundaries. The stored nozzle position is also updated after that move (set_last_pos), so subsequent travel and wiping start from the position the nozzle actually reached. These corrections can change the loop move and the following travel/wipe paths for existing configurations.

When testing with Wipe on loop enabled, please re-slice representative models and re-check seam appearance and wipe paths, including with Wipe inward disabled.

Screenshots/Recordings/Graphs

See upstream OrcaSlicer #15407 for printed before/after photos. This is a code port; no EdgeSlicer printer validation yet.

Tests

  • tests/libslic3r/test_wipe_path.cpp — geometry helpers (offset, support, loop destination)
  • tests/fff_print/test_wipe.cpp — G-code wipe trajectories, including wipe_on_loops + set_last_pos with wipe_inward off

Not touched: CoolingBuffer / FanMover / speed smoothing, wipe-tower, MixedFilament, paint-depth.

Draft PR; do not merge until wipe_on_loops profiles are re-sliced and checked.

Open in Web Open in Cursor 

…rca OrcaSlicer#15407)

Port OrcaSlicer OrcaSlicer#15407: inward wipe for external perimeters, plus wipe_on_loops
distance sampling and set_last_pos after the loop move. wipe_on_loops G-code
changes even when wipe_inward stays off.

Co-authored-by: aceRage <aceRage@users.noreply.github.com>
@github-actions

Copy link
Copy Markdown

Documentation validation failed

🔗 Link Validation Errors

📄 doc/developer-reference\Built-in-placeholders-variables.md:

  • Line 93: home#process-settings - Fragment does not exist
  • Line 93: home#material-settings - Fragment does not exist

📄 doc/developer-reference\How-to-wiki.md:

  • Line 44: home#material-settings - Fragment does not exist
  • Line 45: home#process-settings - Fragment does not exist
  • Line 46: home#prepare - Fragment does not exist
  • Line 47: home#calibrations - Fragment does not exist
  • Line 50: home#process-settings - Fragment does not exist
  • Line 50: home#support-settings - Fragment does not exist
  • Line 50: home#others-settings - Fragment does not exist

📄 doc/Home.md:

  • Line 14: Precise-wall.md - File does not exist
  • Line 17: extrusion-rate-smoothing.md - File does not exist
  • Line 33: adaptive-pressure-advance.md - File does not exist

📄 doc/Tab.cpp:

  • Line 2319: quality_settings_seam#wipe-inward - Fragment does not exist
  • Line 2320: quality_settings_seam#wipe-inward - Fragment does not exist
  • Line 2347: quality_settings_z_contouring - File does not exist
  • Line 2348: quality_settings_z_contouring - File does not exist
  • Line 2349: quality_settings_z_contouring - File does not exist
  • Line 2350: quality_settings_z_contouring - File does not exist
  • Line 2351: quality_settings_z_contouring - File does not exist
  • Line 2414: fill-patterns - File does not exist
  • Line 2415: fill-patterns - File does not exist
  • Line 2418: fill-patterns - File does not exist
  • Line 2648: multimaterial_settings_prime_tower#brim-chamfer - Fragment does not exist
  • Line 2649: multimaterial_settings_prime_tower#brim-chamfer-max-width - Fragment does not exist
  • Line 2661: multimaterial_settings_prime_tower#wall-gap - Fragment does not exist
  • Line 2678: multimaterial_settings_ooze_prevention#delta-temperature - Fragment does not exist
  • Line 2690: multimaterial_settings_advanced#paint-depth-mode - Fragment does not exist
  • Line 2691: multimaterial_settings_advanced#paint-depth-walls - Fragment does not exist
  • Line 2692: multimaterial_settings_advanced#paint-depth-distance - Fragment does not exist
  • Line 2696: multimaterial_settings_advanced#paint-sparse-infill - Fragment does not exist
  • Line 2700: multimaterial_settings_advanced#paint-depth-solid-interfaces - Fragment does not exist
  • Line 2755: others_settings_fuzzy_skin#skip-fuzzy-skin-on-overhangs - Fragment does not exist

🖼️ Image Validation Errors

📄 doc/developer-reference\How-to-create-profiles.md:

  • Line 142: [Markdown] Alt text "Help menu" ≠ filename "go-to-configuration-folder"
  • Line 144: [Markdown] Alt text "Delete system folder" ≠ filename "profile-delete-system-folder"

- Resolve tests/libslic3r/CMakeLists.txt: keep both test_wipe_path.cpp
  (this PR) and test_toolordering_cyclic.cpp (main)
- Add 'Wipe inward' section to quality_settings_seam.md so the new
  Tab.cpp doc reference (quality_settings_seam#wipe-inward) validates
aceRage and others added 4 commits September 20, 2026 10:25
- wipe_inward / wipe_inward_distance: comExpert -> comAdvanced (this fork
  has no expert tier; matches every other ported option)
- WipePathHelpers: replace private Polyline::reset_to_linear_move() with
  the equivalent public fitting_result reset (Edge keeps that helper
  private for the BBS arc-fitting state)

These are the two compile errors when building the PR on current Edge main.
Upstream Orca names: Point3 -> Vec3crd, and Point3::to_point() (drop Z)
has no Edge equivalent but is a no-op on the already-2D polyline points.
ExtrusionPath::polyline is a 2D Polyline in Edge (upstream Orca uses a
3D polyline here), so drop the Z=0 coordinate entirely.
Upstream tests Calib_Auto_PA_Line (upstream enum 4), which draws PA lines
on the printed object. Edge has no Auto_PA_Line: its legacy Calib_PA_Line
replaces the print with the pure writer-direct test pattern (calib.cpp), so
there are no object extrusions and no wipe moves to suppress. PA_Tower and
Retraction_tower still print the object and cover the suppression path.
aceRage added a commit that referenced this pull request Sep 20, 2026
Documents the toolchain layout, detached build recipe, Validate Documentation CI behavior, upstream-porting fork differences, install binary-copy gotcha, and the s_IsBBLPrinter G-code flavor quirk. Captured during the PR #51/#41 integration.
@aceRage
aceRage marked this pull request as ready for review September 20, 2026 18:41
@aceRage

aceRage commented Sep 20, 2026

Copy link
Copy Markdown
Owner Author

Status update (Sep 20): marked ready for review. Branch is up to date with main, mergeable (clean), and "Check Documentation" CI is green.

Port fixes applied on top of the original port:

  • comExpertcomAdvanced (no expert tier in this fork)
  • private Polyline::reset_to_linear_move() replaced with public fitting_result manipulation
  • Point3 → 2D Point appends (ExtrusionPath::polyline is 2D here)
  • calibration-suppression test: dropped Calib_PA_Line from the generate-list — upstream tests Calib_Auto_PA_Line (drawn on the object); this fork's legacy Calib_PA_Line replaces the print with the pure calibration pattern, so there is nothing to suppress

Catch2 results on this branch (Windows, Release):

  • [WipePath]: 277 assertions / 47 cases ✓
  • [Wipe]: 1318 assertions / 15 cases ✓

Remaining gate before merge: re-slice representative wipe_on_loops profiles and check seam/wipe paths with wipe_inward off and on (this PR intentionally changes G-code for existing wipe_on_loops profiles). A combined test build (this PR + #51 + main) is installed in the maintainer's live-testing folder.

@aceRage
aceRage merged commit 0f77b5f into main Sep 20, 2026
1 check passed
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.

2 participants