Skip to content

Add wave overhang support#11153

Open
bsx1990 wants to merge 6 commits into
bambulab:masterfrom
bsx1990:codex/wave-overhangs
Open

Add wave overhang support#11153
bsx1990 wants to merge 6 commits into
bambulab:masterfrom
bsx1990:codex/wave-overhangs

Conversation

@bsx1990

@bsx1990 bsx1990 commented Jun 15, 2026

Copy link
Copy Markdown

Summary

  • Add wave overhang toolpath generation for unsupported cantilevered overhang regions.
  • Add print settings, preset persistence, GUI controls, and English/Chinese translations.
  • Emit tagged G-code paths with wave-overhang flow and speed overrides.
  • Add regression coverage for generation, configuration handling, slicing stability, and perimeter ordering.

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

  • The algorithm follows the behavior of the PrusaSlicer and OrcaSlicer wave-overhang forks, adapted to Bambu Studio's perimeter and configuration structures.
  • Wave paths are prepended ahead of preserved outer walls in the affected island so the overhang support is printed before the final boundary wall.
  • The default preserves one outer perimeter and replaces only the overhang-region interior with wave paths.
  • Debug G-code markers are available to inspect generated wave-overhang paths.

Testing

  • git diff --check $(git merge-base HEAD origin/master)..HEAD
  • libslic3r_wave_overhangs_tests "[WaveOverhangs]" passed locally before PR cleanup.
  • Built Bambu Studio locally on macOS before PR cleanup.
  • Sliced the provided 3MF test model with wave overhangs enabled.
  • Verified slicing no longer throws runtime errors such as std::bad_cast for the tested model.
  • Verified wave paths are emitted before preserved outer walls in the tested overhang layer.

References

@bsx1990

bsx1990 commented Jun 15, 2026

Copy link
Copy Markdown
Author

Additional screenshots

These screenshots show the current wave overhang test result, slicer preview, and Chinese settings panel.


Printed sample in the printer

Printed wave-overhang surface detail

Printed side view

Slicer preview

Chinese wave-overhang settings panel
@bsx1990 bsx1990 marked this pull request as ready for review June 15, 2026 16:09

@ArthurBambulab ArthurBambulab left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

2 participants