Add wave overhang support#11153
Conversation
ArthurBambulab
left a comment
There was a problem hiding this comment.
Must address before merge
1. Hidden dependency on detect_overhang_wall
Wave generation requires both wave_overhangs and detect_overhang_wall (PerimeterGenerator.cpp, classic + Arachne). Enabling wave overhangs alone produces no paths with no UI feedback.
→ Document in tooltip, warn in GUI, or auto-enable / recommend detect_overhang_wall.
2. wave_overhang_outer_perimeters > 1 does not match implementation
should_replace_with_wave_path() only preserves erExternalPerimeter. Paths have no perimeter index, so values > 1 do not keep extra outer walls—only affects expand_wave_overhang_target_area().
→ Clamp UI to 0..1, or implement real multi-wall keep + update tooltip.
3. wave_overhang_debug_gcode defaults to true
;WAVE_OVERHANG_START/END in G-code by default bloats output and complicates tooling for an experimental feature.
→ Default false; opt-in for debugging.
4. Silent failure when prepending wave paths
prepend_wave_overhang_paths_to_last_island() fails silently on dynamic_cast miss—paths computed but not inserted.
→ Add debug log or debug-build assert when wave paths are non-empty but insertion fails.
Strongly recommended
5. Sub-options lack enable_if
All wave-overhang fields stay editable when wave_overhangs is off.
→ Grey out / hide dependents on master toggle (and corner-taper fields on wave_overhang_corner_taper_enable).
6. Duplicated PerimeterGenerator integration
Same logic at ~1619 (classic) and ~2031 (Arachne).
→ Extract shared helper, e.g. try_generate_and_prepend_wave_overhangs(...).
Additional comments
7. Default wave_overhang_print_speed = 2 mm/s may be too slow
2 mm/s feels unusably slow vs typical wall speeds. What speed was used for the PR test prints? Was 2 mm/s a safe universal default?
→ Consider 10–20 mm/s default or preset-specific values; add tooltip/PR note with tested speeds.
Suggested experiments on the same test model (PLA / 0.4 mm nozzle):
| Parameter | Try | Observe |
|---|---|---|
wave_overhang_print_speed |
5, 10, 15, 20, 30 mm/s | Curl, adhesion, surface |
wave_overhang_line_spacing |
0.25, 0.35, 0.45 mm | Sag vs density |
wave_overhang_flow_mm3_per_mm |
±10% | Under/over-extrusion |
wave_overhang_outer_perimeters |
0 vs 1 | Accuracy vs overhang quality |
8. Dedicated “Wave overhangs” page — move under Support
A full new tab is heavy for an experimental feature.
→ Remove standalone page; add options under Support (e.g. “Wave overhangs (experimental)” group + collapsed Advanced). Keeps supportless-overhang tooling in one place.
Summary
| # | Topic | Severity |
|---|---|---|
| 1 | detect_overhang_wall dependency |
Must fix / document |
| 2 | outer_perimeters > 1 semantics |
Must fix / clamp |
| 3 | debug_gcode default true |
Must fix |
| 4 | Silent prepend failure | Must fix |
| 5 | Missing enable_if |
Strongly recommended |
| 6 | Duplicated perimeter logic | Strongly recommended |
| 7 | Default speed + experiments | Additional |
| 8 | UI under Support | Additional |





Summary
Why
Wave overhangs provide a supportless way to print cantilevered overhangs by propagating wave-shaped paths from supported regions. This can reduce support material and post-processing for suitable geometries while keeping a preserved outer perimeter for dimensional stability.
Implementation Notes
Testing
git diff --check $(git merge-base HEAD origin/master)..HEADlibslic3r_wave_overhangs_tests "[WaveOverhangs]"passed locally before PR cleanup.std::bad_castfor the tested model.References