feat(gcode): add wipe_inward and fix wipe_on_loops nozzle position (Orca #15407) - #41
Conversation
…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>
|
❌ Documentation validation failed 🔗 Link Validation Errors📄 doc/developer-reference\Built-in-placeholders-variables.md:
📄 doc/developer-reference\How-to-wiki.md:
📄 doc/Home.md:
📄 doc/Tab.cpp:
🖼️ Image Validation Errors📄 doc/developer-reference\How-to-create-profiles.md:
|
- 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
- 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.
|
Status update (Sep 20): marked ready for review. Branch is up to date with Port fixes applied on top of the original port:
Catch2 results on this branch (Windows, Release):
Remaining gate before merge: re-slice representative |
Description
Port of OrcaSlicer #15407: Wipe inward for external perimeters, plus the bundled
wipe_on_loopsdestination/nozzle-position fixes.New print settings (default off):
wipe_inward— offset the external-wall wipe path toward already-printed inner wallswipe_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, includingwipe_on_loops+set_last_poswithwipe_inwardoffNot 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.