Fix #84 inward overhangs, #69 wall/infill overlap, #88 locale abort; generator cleanup + docs rewrite - #92
Open
dennisklappe wants to merge 5 commits into
Open
Fix #84 inward overhangs, #69 wall/infill overlap, #88 locale abort; generator cleanup + docs rewrite#92dennisklappe wants to merge 5 commits into
dennisklappe wants to merge 5 commits into
Conversation
…wer than the inset margin Overhang regions anchored on all sides with a thin supported band (an inward lip on a thin-walled ring, e.g. a phone-case rim) generated no wave seeds: inset_anchors = anchors - expand(overhangs, anchors_size) came up empty because anchors_size swallowed the entire band, so the region was silently dropped and the lip printed in mid-air. Fall back to the un-inset anchors for seed generation when the standard inset leaves nothing. Verified on the issue reporter's 3MF: the lip layer now emits 10 wave regions instead of none. Fixes #84
…hor band The wave seeds sit up to anchors_size (~(wall_loops+1) line spacings) inside the supported region and the rings propagate outward from there, but walls and fill were only cleared within 1.5 perimeter spacings of the geometric overhang zone. On profiles where an infill strip exists between the walls (many walls on a thin part, or small nozzles), the surviving inner walls and solid infill ran straight through the wave rings, over-extruding badly. Union the wall clip region and the fill carve with the area the wave actually painted (filled_area; the fill carve expanded by half a wave line width so fill stops at the physical extrusion edge). The geometric zone still handles the sharp convex corners filled_area rounds off. Measured on the reporter's 0.2 mm nozzle 3MF, wave layer z=8.68: inner-wall overlap 292 mm -> 0 mm, solid-infill overlap 562 mm -> 0 mm; the remaining ~10 mm is the intended outer-wall bond overlap. Fixes #69
…tartup On distros that ship only C.UTF-8 (minimal Debian/Ubuntu installs), every named locale in load_language()'s fallback chain fails wxLocale::IsAvailable(), so first launch showed 'Switching language failed' and closed - a hard dead end for the AppImage. When no named locale is usable at initial startup, fall back to wxLANGUAGE_DEFAULT (setlocale(LC_ALL, "")), which keeps the translation dictionary and only takes number/date formatting from the C locale. The error path (message + exit) remains for the case where even the C runtime locale is unusable, and for explicit language switches. Also fixes the no-op 'message + ...' statement (missing +=). Fixes #88
…yer, drop dead shell code Leftovers from the algorithm-selector removal (#75): - IGenerator / AndersonsGenerator existed for a polymorphic algorithm choice that no longer exists (one implementation, one call site, and the virtual name() was never called). The interface, wrapper files, and min-length filter are folded into WaveOverhangs::generate(), which now takes CommonParams directly. - additional_shell_count was hardcoded to 0 at the only call site, so the six shell branches and append_shell_perimeters() were unreachable. Removed. No behavior change.
docs/WAVE_OVERHANG_SETTINGS.md documented ~19 of the 37 wave config keys and had drifted from the code: - Restructured to follow the GUI page (General / Detection / Pattern / Corner reinforcement / Motion / Cooling / Floor layers / Debug) and documented every key, including the corner taper, aux fan, nozzle temp override, dwell times, and the whole Hilbert floor group. - Removed the stale 'save-only' labels on travel/fan speed that contradicted the Known-limitations table in the same file (both are fully plumbed). - Corrected the G-code marker section: WAVE_OVERHANG_BUILD carries only the fork and base versions (the old documented fields were dropped deliberately in f6a901d), and WAVE_OVERHANG_CONFIG gained 14 fields the doc never listed while losing width=. - Fixed the flow default (0.15, not 0.16) in ALGORITHMS.md and the settings doc, and updated the source pointers. - Flagged wave_overhang_seam_mode and wave_overhang_spacing_mode as inert in the doc and their tooltips: both are saved and echoed in the header, but the generator never reads them. - CHANGELOG entries for the #69 / #84 / #88 fixes and the generator cleanup.
This was referenced Aug 16, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes
#84: inward-growing overhangs produced no waves
An overhang anchored on all sides with a thin supported band (inward lip on a phone-case rim) generated no wave seeds:
inset_anchorscame up empty because the seed inset margin (anchors_size) swallowed the whole band, and the region was silently dropped. Seed anchoring now falls back to the un-inset anchors in that case.Verified on FeNi64a's
Pixel10a-case03.3mf: the lip layer went from 0 to 10 wave regions.#69: walls and solid infill printed through the wave region
The wave's seeds sit up to ~(wall_loops+1) line spacings inside the supported region, but walls/fill were only cleared within 1.5 perimeter spacings of the geometric overhang. Whenever an infill strip exists between the walls (5 walls on a thin part, 0.2 mm nozzle) the surviving inner walls and solid infill ran through the wave rings. The wall clip region and fill carve now also include the area the wave actually painted.
Measured on Bratwurst04's 3MF (plate 3, wave layer z=8.68): inner-wall overlap 292 mm → 0, solid-infill overlap 562 mm → 0; remaining ~10 mm is the intended outer-wall bond. Before/after of the wave layer:
#88: AppImage exits when the requested locale is not generated
On minimal Debian/Ubuntu (C.UTF-8 only), every named locale failed
wxLocale::IsAvailableand first launch died with "Switching language failed". Initial startup now falls back towxLANGUAGE_DEFAULT(the C runtime locale), keeping the translation dictionary. Also fixes the no-opmessage + ...(missing+=).Cleanup
IGenerator/AndersonsGeneratorlayer intoWaveOverhangs::generate()and removed the always-zeroadditional_shell_countplus its unreachable shell-perimeter code. No behavior change.docs/WAVE_OVERHANG_SETTINGS.md: all 37 keys documented (was ~19), structure follows the GUI page, stale "save-only" labels removed, G-code marker section matches what the code actually emits, flow default corrected to 0.15.wave_overhang_seam_modeandwave_overhang_spacing_modeas inert (saved + echoed in header, never read by the generator) in doc and tooltips.Testing