Skip to content

feat: add support_interface_min_area - #615

Merged
zackaree-shen merged 3 commits into
process_optimistic_julyfrom
feat_lty_process_AddMinInterfaceArea
Jul 27, 2026
Merged

feat: add support_interface_min_area #615
zackaree-shen merged 3 commits into
process_optimistic_julyfrom
feat_lty_process_AddMinInterfaceArea

Conversation

@bluetianyu

Copy link
Copy Markdown

Summary

Introduces a user-configurable option support_interface_min_area (minimum support contact area) that exposes the minimum_roof_area threshold — previously hardcoded to 1 mm² in the tree support paths — and lowers its default to 0.25 mm².

Background / Motivation

Tree supports tend to generate many tiny roof / interface fragments under small overhangs. These fragments extrude unstably, give poor support performance, and add slicing noise. The area threshold was previously hardcoded (1 mm²) in both the node-based and organic tree implementations, with no way to tune it per machine / material / use case. This PR promotes it to a visible setting, letting users balance keeping more precise small contact patches against dropping fragmented contacts in favor of normal support.

Option details

Field Value
Key support_interface_min_area
Type coFloat (f_enum_open — preset values + free input)
Unit mm²
Default 0.25 (was hardcoded 1.0)
Presets 0 / 0.25 / 0.64 / 1
Min 0 (0 = no filtering, keep all contact surfaces)
Mode Advanced
Category Support
Meaning Roof polygons smaller than this value are not generated as interface and fall back to normal support. Lower value → more (and more fragmented) contact surfaces; higher value → fewer, more consolidated contact surfaces.

Changes

1. Definition & propagation

2. Full UI / config integration

  • Preset.cpp: added to the print preset options whitelist (ensures save/load).
  • PrintObject.cpp: added to invalidate_state_by_config_options so changing the value triggers a re-slice.
  • Tab.cpp: added to the Support → Advanced → Interface settings page.
  • ConfigManipulation.cpp: show/hide the field with the support toggle.
  • GUI_Factories.cpp: added to the per-object settings list and visible options.
  • Field.cpp: wrapped sidetext in _L() so it is localizable.

3. Localization: .pot template + all 20 language .po files translated (one label + one tooltip each); verified with msgfmt --check-format.

Scope & behavior change ⚠️

  • This option only affects tree supports (organic / slim / strong / hybrid) roof/contact filtering; the normal (grid) support path is not affected.
  • Default lowered from 1.0 mm² to 0.25 mm²: existing tree-support presets will slice differently after upgrade (more small contact surfaces are retained by default). To fully preserve old behavior, set the value to 1 (or 0 to disable filtering entirely).
  • Backward compatible with existing project files: when the key is absent, the default (0.25) is used.

Verification

  • ✅ Builds cleanly (deps + slicer).
  • ✅ All .po files compiled to .mo via scripts/run_gettext.bat; --check-format passes.
  • Suggested regression: compare tree-support generation for 0 / 0.25 / 1 on models with fine overhangs (e.g. Benchy mast/chimney, cantilever test parts) and check removability.

Files (32)

  • 10 C++ files (option definition + tree threshold wiring + UI/config integration)
  • 22 localization files (.pot + 20 .po; zh_CN.po includes context lines)
default.mp4

@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 2373: fill-patterns - File does not exist
  • Line 2376: fill-patterns - File does not exist
  • Line 2526: support_settings_advanced#interface-min-area - Fragment does not exist
  • Line 2558: multimaterial_settings_prime_tower#brim-chamfer - Fragment does not exist
  • Line 2559: multimaterial_settings_prime_tower#brim-chamfer-max-width - Fragment does not exist
  • Line 2571: multimaterial_settings_prime_tower#wall-gap - Fragment does not exist
  • Line 2585: multimaterial_settings_ooze_prevention#delta-temperature - 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"

@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 2373: fill-patterns - File does not exist
  • Line 2376: fill-patterns - File does not exist
  • Line 2558: multimaterial_settings_prime_tower#brim-chamfer - Fragment does not exist
  • Line 2559: multimaterial_settings_prime_tower#brim-chamfer-max-width - Fragment does not exist
  • Line 2571: multimaterial_settings_prime_tower#wall-gap - Fragment does not exist
  • Line 2585: multimaterial_settings_ooze_prevention#delta-temperature - 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"

@zackaree-shen
zackaree-shen merged commit 247592a into process_optimistic_july Jul 27, 2026
1 of 2 checks 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