diff --git a/README.md b/README.md
index 007724d6fe..c162a11aad 100644
--- a/README.md
+++ b/README.md
@@ -49,7 +49,7 @@ If you come across any of these in search results, please report them as unsafe
Adjust outer wall spacing and apply scarf seams to enhance print accuracy.
- **[Sandwich Mode](https://github.com/SoftFever/OrcaSlicer/wiki/quality_settings_wall_and_surfaces#innerouterinner) and [Polyholes](https://github.com/SoftFever/OrcaSlicer/wiki/quality_settings_precision#polyholes) Support**
Use varied infill patterns and accurate hole shapes for improved clarity.
-- **[Overhang](https://github.com/SoftFever/OrcaSlicer/wiki/speed_settings_overhang_speed) and [Support Optimization](https://github.com/SoftFever/OrcaSlicer/wiki#support-settings)**
+- **[Overhang](https://github.com/SoftFever/OrcaSlicer/wiki/quality_settings_overhangs) and [Support Optimization](https://github.com/SoftFever/OrcaSlicer/wiki#support-settings)**
Modify geometry for printable overhangs with precise support placement.
- **[Granular Controls](https://github.com/SoftFever/OrcaSlicer/wiki#process-settings) and Customization**
Fine-tune print speed, layer height, pressure, and temperature with precision.
diff --git a/doc/Home.md b/doc/Home.md
index 4e3acdfa54..e0a69b37d5 100644
--- a/doc/Home.md
+++ b/doc/Home.md
@@ -70,6 +70,7 @@ The below sections provide a detailed settings explanation as well as tips and t
- [Wall generator](quality_settings_wall_generator)
- [Walls and surfaces](quality_settings_wall_and_surfaces)
- [Bridging](quality_settings_bridging)
+- [Overhangs](quality_settings_overhangs)
### Strength Settings
@@ -117,12 +118,12 @@ The below sections provide a detailed settings explanation as well as tips and t

-[Skirt](others_settings_skirt)
-[Brim](others_settings_brim)
-[Special Mode](others_settings_special_mode)
-[G-Code Output](others_settings_g_code_output)
-[Post Processing Scripts](others_settings_post_processing_scripts)
-[Notes](others_settings_notes)
+- [Skirt](others_settings_skirt)
+- [Brim](others_settings_brim)
+- [Special Mode](others_settings_special_mode)
+- [G-Code Output](others_settings_g_code_output)
+- [Post Processing Scripts](others_settings_post_processing_scripts)
+- [Notes](others_settings_notes)
## Calibrations
@@ -138,6 +139,7 @@ The [Calibration Guide](Calibration) outlines Orca’s key calibration tests and
- [Volumetric Speed](volumetric-speed-calib)
- [Cornering (Jerk & Junction Deviation)](cornering-calib)
- [Input Shaping](input-shaping-calib)
+ - [VFA](vfa-calib)
## Developer Section
diff --git a/doc/calibration/Calibration.md b/doc/calibration/Calibration.md
index 70be26e05f..21a7b0d2eb 100644
--- a/doc/calibration/Calibration.md
+++ b/doc/calibration/Calibration.md
@@ -21,41 +21,43 @@ The recommended order for calibration is as follows:
-1. **[Pressure Advance](pressure-advance-calib):** Calibrate the pressure advance settings to improve print quality and reduce artifacts caused by pressure fluctuations in the nozzle.
+3. **[Pressure Advance](pressure-advance-calib):** Calibrate the pressure advance settings to improve print quality and reduce artifacts caused by pressure fluctuations in the nozzle.
- **[Adaptive Pressure Advance](adaptive-pressure-advance-calib):** This is an advanced calibration technique that can be used to further optimize the pressure advance settings for different print speeds and geometries.
-2. **[Retraction](retraction-calib):** Calibrate the retraction settings to minimize stringing and improve print quality. Doing this after Flow and Pressure Advance calibration is recommended, as it ensures that the printer is already set up for optimal extrusion.
+4. **[Retraction](retraction-calib):** Calibrate the retraction settings to minimize stringing and improve print quality. Doing this after Flow and Pressure Advance calibration is recommended, as it ensures that the printer is already set up for optimal extrusion.
-3. **[Tolerance](tolerance-calib):** Calibrate the tolerances of your printer to ensure that it can accurately reproduce the dimensions of the model being printed. This is important for achieving a good fit between parts and for ensuring that the final print meets the desired specifications.
-
-
-
-4. **[Max Volumetric Speed](volumetric-speed-calib):** Calibrate the maximum volumetric speed of the filament. This is important for ensuring that the printer can handle the flow rate of the filament without causing issues such as under-extrusion or over-extrusion.
+5. **[Max Volumetric Speed](volumetric-speed-calib):** Calibrate the maximum volumetric speed of the filament. This is important for ensuring that the printer can handle the flow rate of the filament without causing issues such as under-extrusion or over-extrusion.
-5. **[Cornering](cornering-calib):** Calibrate the Jerk/Junction Deviation settings to improve print quality and reduce artifacts caused by sharp corners and changes in direction.
+6. **[Cornering](cornering-calib):** Calibrate the Jerk/Junction Deviation settings to improve print quality and reduce artifacts caused by sharp corners and changes in direction.
-6. **[Input Shaping](input-shaping-calib):** This is an advanced calibration technique that can be used to reduce ringing and improve print quality by compensating for mechanical vibrations in the printer.
+7. **[Input Shaping](input-shaping-calib):** This is an advanced calibration technique that can be used to reduce ringing and improve print quality by compensating for mechanical vibrations in the printer.
-7. **[VFA](vfa-calib):** A VFA speed test is available to find resonance speeds.
+8. **[VFA](vfa-calib):** A VFA speed test is available to find resonance speeds.
---
+**[Tolerance](tolerance-calib):** Calibrate the tolerances of your printer to ensure that it can accurately reproduce the dimensions of the model being printed. This is important for achieving a good fit between parts and for ensuring that the final print meets the desired specifications.
+
+
+
+---
+
_Credits:_
-- _The Flowrate test and retraction test is inspired by [SuperSlicer](https://github.com/supermerill/SuperSlicer)._
+- _The Flow test and retraction test is inspired by [SuperSlicer](https://github.com/supermerill/SuperSlicer)._
- _The PA Line method is inspired by [K-factor Calibration Pattern](https://marlinfw.org/tools/lin_advance/k-factor.html)._
- _The PA Tower method is inspired by [Klipper](https://www.klipper3d.org/Pressure_Advance.html)._
- _The temp tower model is remixed from [Smart compact temperature calibration tower](https://www.thingiverse.com/thing:2729076)._
diff --git a/doc/calibration/adaptive-pressure-advance-calib.md b/doc/calibration/adaptive-pressure-advance-calib.md
index 7748c7bf6a..ebabb20859 100644
--- a/doc/calibration/adaptive-pressure-advance-calib.md
+++ b/doc/calibration/adaptive-pressure-advance-calib.md
@@ -11,17 +11,20 @@ This feature introduces the below options under the filament settings:
2. **Enable adaptive pressure advance for overhangs:** Enable adaptive PA for overhangs as well as when flow changes within the same feature. This is an experimental option because if the PA profile is not set accurately, it will cause uniformity issues on the external surfaces before and after overhangs. It is recommended to start with this option switched off and enable it after the core adaptive pressure advance feature is calibrated correctly.
3. **Pressure advance for bridges:** Sets the desired pressure advance value for bridges. Set it to 0 to disable this feature. Experiments have shown that a lower PA value when printing bridges helps reduce the appearance of slight under extrusion immediately after a bridge, which is caused by the pressure drop in the nozzle when printing in the air. Therefore, a lower pressure advance value helps counteract this. A good starting point is approximately half your usual PA value.
4. **Adaptive pressure advance measurements:** This field contains the calibration values used to generate the pressure advance profile for the nozzle/printer. Input sets of pressure advance (PA) values and the corresponding volumetric flow speeds and accelerations they were measured at, separated by a comma. Add one set of values per line. More information on how to calibrate the model follows in the sections below.
-5. **Pressure advance:** The old field is still needed and is required to be populated with a PA value. A “good enough” median PA value should be entered here, as this will act as a fallback value when performing tool changes, printing a purge/wipe tower for multi-color prints as well as a fallback in case the model fails to identify an appropriate value (unlikely but it’s the ultimate backstop).
-
+5. **Pressure advance:** The old field is still needed and is required to be populated with a PA value. A “good enough” median PA value should be entered here, as this will act as a fallback value when performing tool changes, printing a purge/wipe tower for multi-color prints as well as a fallback in case the model fails to identify an appropriate value (unlikely but it’s the ultimate backstop).

## Pre-Requisites
-This feature has been tested with Klipper-based printers. While it may work with Marlin or Bambu lab printers, it is currently untested with them. It shouldn’t adversely affect the machine; however, the quality results from enabling it are not validated.
+This feature has been tested with Klipper-based printers. While it may work with Marlin or Bambu lab printers, it is currently untested with them. It shouldn't adversely affect the machine; however, the quality results from enabling it are not validated.
-**Older versions of Klipper used to stutter when pressure advance was changed while the toolhead was in motion. This has been fixed with the latest Klipper firmware releases. Therefore, make sure your Klipper installation is updated to the latest version before enabling this feature, in order to avoid any adverse quality impacts.**
+> [!IMPORTANT]
+> Versions of Klipper older than July 11th, 2024 might in some cases produce artifacts when dynamic PA is used.
+> This has been fixed in Klipper stable version 0.13.0 (20250411), or in developer versions starting [from July 11th, 2024](https://github.com/Klipper3d/klipper/commit/c84d78f3f169bc5163d11b74837f9880b0b7dba4).
+> If you experience issues or print quality lower than expected you might want to ensure you have a Klipper firmware which contains the fix.
-Klipper firmware released after July 11th, 2024 (version greater than approximately v0.12.0-267) contains the above fix and is compatible with adaptive pressure advance. If you are upgrading from an older version, make sure you update both your Klipper installation as well as reflash the printer MCU’s (main board and toolhead board if present).
+> [!TIP]
+> **Advanced users**: the fix to ensure optimal quality when dynamic PA is used does not require flashing the toolhead MCU or the printer MCU, but only an update of the host Python code. If you are using a commercial printer which does not offer straightforward MCU flashing (for example, Qidi printers), you might be able to manually patch the host code yourself.
## Use case (what to expect)
@@ -47,11 +50,14 @@ Finally, if during calibration you notice that there is little to no variance be
With this feature enabled there should be absolutely no bulge in the corners, just the smooth rounding caused by the square corner velocity of your printer.

+
In addition, seams should appear smooth with no bulging or under extrusion.

+
Solid infill should have no gaps, pinholes, or separation from the perimeters.

-Compared to with this feature disabled, where the internal solid infill and external-internal perimeters show signs of separation and under extrusion, when PA is tuned for optimal external perimeter performance as shown below.
+
+Compared to with this feature disabled, where the internal solid infill and external-internal perimeters show signs of separation and under extrusion, when PA is tuned for optimal external perimeter performance as shown below.

## How to calibrate the adaptive pressure advance model
diff --git a/doc/developer-reference/How-to-build.md b/doc/developer-reference/How-to-build.md
index ee2a772330..f3e915932a 100644
--- a/doc/developer-reference/How-to-build.md
+++ b/doc/developer-reference/How-to-build.md
@@ -13,13 +13,15 @@ Whether you're a contributor or just want a custom build, this guide will help y
- [MacOS Instructions](#macos-instructions)
- [Debugging in Xcode](#debugging-in-xcode)
- [Linux](#linux)
- - [Using Docker (Recommended)](#using-docker-recommended)
+ - [Using Docker](#using-docker)
- [Docker Dependencies](#docker-dependencies)
- [Docker Instructions](#docker-instructions)
- [Troubleshooting](#troubleshooting)
-- [Ubuntu](#ubuntu)
- - [Ubuntu Dependencies](#ubuntu-dependencies)
- - [Ubuntu Instructions](#ubuntu-instructions)
+ - [Linux Build](#linux-build)
+ - [Dependencies](#dependencies)
+ - [Common dependencies across distributions](#common-dependencies-across-distributions)
+ - [Additional dependencies for specific distributions](#additional-dependencies-for-specific-distributions)
+ - [Linux Instructions](#linux-instructions)
- [Portable User Configuration](#portable-user-configuration)
- [Example folder structure](#example-folder-structure)
@@ -172,9 +174,9 @@ To build and debug directly in Xcode:
## Linux
-Linux instructions are available in two formats: using Docker (recommended) or building directly on your system.
+Linux distributions are available in two formats: [using Docker](#using-docker) (recommended) or [building directly](#linux-build) on your system.
-### Using Docker (Recommended)
+### Using Docker
How to build and run OrcaSlicer using Docker.
@@ -190,52 +192,114 @@ git clone https://github.com/SoftFever/OrcaSlicer && cd OrcaSlicer && ./DockerBu
```
### Troubleshooting
+
The `DockerRun.sh` script includes several commented-out options that can help resolve common issues. Here's a breakdown of what they do:
-- `xhost +local:docker`: If you encounter an "Authorization required, but no authorization protocol specified" error, run this command in your terminal before executing DockerRun.sh. This grants Docker containers permission to interact with your X display server.
+- `xhost +local:docker`: If you encounter an "Authorization required, but no authorization protocol specified" error, run this command in your terminal before executing `DockerRun.sh`. This grants Docker containers permission to interact with your X display server.
- `-h $HOSTNAME`: Forces the container's hostname to match your workstation's hostname. This can be useful in certain network configurations.
- `-v /tmp/.X11-unix:/tmp/.X11-unix`: Helps resolve problems with the X display by mounting the X11 Unix socket into the container.
- `--net=host`: Uses the host's network stack, which is beneficial for printer Wi-Fi connectivity and D-Bus communication.
- `--ipc host`: Addresses potential permission issues with X installations that prevent communication with shared memory sockets.
- `-u $USER`: Runs the container as your workstation's username, helping to maintain consistent file permissions.
-- `-v $HOME`:/home/$USER: Mounts your home directory into the container, allowing you to easily load and save files.
+- `-v $HOME:/home/$USER`: Mounts your home directory into the container, allowing you to easily load and save files.
- `-e DISPLAY=$DISPLAY`: Passes your X display number to the container, enabling the graphical interface.
- `--privileged=true`: Grants the container elevated privileges, which may be necessary for libGL and D-Bus functionalities.
- `-ti`: Attaches a TTY to the container, enabling command-line interaction with OrcaSlicer.
- `--rm`: Automatically removes the container once it exits, keeping your system clean.
- `orcaslicer $*`: Passes any additional parameters from the `DockerRun.sh` script directly to the OrcaSlicer executable within the container.
+
By uncommenting and using these options as needed, you can often resolve issues related to display authorization, networking, and file permissions.
-## Ubuntu
+### Linux Build
-How to build OrcaSlicer on Ubuntu.
+How to build OrcaSlicer on Linux.
-### Ubuntu Dependencies
+#### Dependencies
-All required dependencies will be installed automatically by the provided shell script, including:
+The build system supports multiple Linux distributions including Ubuntu/Debian and Arch Linux. All required dependencies will be installed automatically by the provided shell script where possible, however you may need to manually install some dependencies.
-- libmspack-dev
-- libgstreamerd-3-dev
-- libsecret-1-dev
-- libwebkit2gtk-4.0-dev
-- libssl-dev
-- libcurl4-openssl-dev
-- eglexternalplatform-dev
-- libudev-dev
-- libdbus-1-dev
-- extra-cmake-modules
-- libgtk2.0-dev
-- libglew-dev
+> [!NOTE]
+> Fedora and other distributions are not currently supported, but you can try building manually by installing the required dependencies listed below.
+
+##### Common dependencies across distributions
+
+- autoconf / automake
- cmake
+- curl / libcurl4-openssl-dev
+- dbus-devel / libdbus-1-dev
+- eglexternalplatform-dev / eglexternalplatform-devel
+- extra-cmake-modules
+- file
+- gettext
- git
+- glew-devel / libglew-dev
+- gstreamer-devel / libgstreamerd-3-dev
+- gtk3-devel / libgtk-3-dev
+- libmspack-dev / libmspack-devel
+- libsecret-devel / libsecret-1-dev
+- libspnav-dev / libspnav-devel
+- libssl-dev / openssl-devel
+- libtool
+- libudev-dev
+- mesa-libGLU-devel
+- ninja-build
- texinfo
+- webkit2gtk-devel / libwebkit2gtk-4.0-dev or libwebkit2gtk-4.1-dev
+- wget
-### Ubuntu Instructions
+##### Additional dependencies for specific distributions
-```shell
-`./build_linux.sh -u` # install dependencies
-`./build_linux.sh -disr` # build OrcaSlicer
-```
+- **Ubuntu 22.x/23.x**: libfuse-dev, m4
+- **Arch Linux**: mesa, wayland-protocols
+
+#### Linux Instructions
+
+1. **Install system dependencies:**
+ ```shell
+ ./build_linux.sh -u
+ ```
+
+2. **Build dependencies:**
+ ```shell
+ ./build_linux.sh -d
+ ```
+
+3. **Build OrcaSlicer:**
+ ```shell
+ ./build_linux.sh -s
+ ```
+
+4. **Build AppImage (optional):**
+ ```shell
+ ./build_linux.sh -i
+ ```
+
+5. **All-in-one build (recommended):**
+ ```shell
+ ./build_linux.sh -dsi
+ ```
+
+**Additional build options:**
+
+- `-b`: Build in debug mode
+- `-c`: Force a clean build
+- `-C`: Enable ANSI-colored compile output (GNU/Clang only)
+- `-j N`: Limit builds to N cores (useful for low-memory systems)
+- `-1`: Limit builds to one core
+- `-l`: Use Clang instead of GCC
+- `-p`: Disable precompiled headers (boost ccache hit rate)
+- `-r`: Skip RAM and disk checks (for low-memory systems)
+
+> [!NOTE]
+> The build script automatically detects your Linux distribution and uses the appropriate package manager (apt, pacman) to install dependencies.
+
+> [!TIP]
+> For first-time builds, use `./build_linux.sh -u` to install dependencies, then `./build_linux.sh -dsi` to build everything.
+
+> [!WARNING]
+> If you encounter memory issues during compilation, use `-j 1` or `-1` to limit parallel compilation, or `-r` to skip memory checks.
+
+---
## Portable User Configuration
diff --git a/doc/images/GUI/process/process-multimaterial.png b/doc/images/GUI/process/process-multimaterial.png
index 83bd9115f8..cd90ce84fd 100644
Binary files a/doc/images/GUI/process/process-multimaterial.png and b/doc/images/GUI/process/process-multimaterial.png differ
diff --git a/doc/images/GUI/process/process-others.png b/doc/images/GUI/process/process-others.png
index 002c85ccb6..80dbc19835 100644
Binary files a/doc/images/GUI/process/process-others.png and b/doc/images/GUI/process/process-others.png differ
diff --git a/doc/images/GUI/process/process-quality.png b/doc/images/GUI/process/process-quality.png
index b84f855870..402caf3e76 100644
Binary files a/doc/images/GUI/process/process-quality.png and b/doc/images/GUI/process/process-quality.png differ
diff --git a/doc/images/GUI/process/process-speed.png b/doc/images/GUI/process/process-speed.png
index 75145adad7..5e8fd0f262 100644
Binary files a/doc/images/GUI/process/process-speed.png and b/doc/images/GUI/process/process-speed.png differ
diff --git a/doc/images/GUI/process/process-strength.png b/doc/images/GUI/process/process-strength.png
index 8f92633e50..aafb234a0e 100644
Binary files a/doc/images/GUI/process/process-strength.png and b/doc/images/GUI/process/process-strength.png differ
diff --git a/doc/images/GUI/process/process-support.png b/doc/images/GUI/process/process-support.png
index 1d44decf2b..d6078daa54 100644
Binary files a/doc/images/GUI/process/process-support.png and b/doc/images/GUI/process/process-support.png differ
diff --git a/doc/images/Wall-Order/avoid-crossing-walls.png b/doc/images/Wall-Order/avoid-crossing-walls.png
new file mode 100644
index 0000000000..9e80c87cfc
Binary files /dev/null and b/doc/images/Wall-Order/avoid-crossing-walls.png differ
diff --git a/doc/images/Wall-Order/flow-compensation-model-graph.png b/doc/images/Wall-Order/flow-compensation-model-graph.png
new file mode 100644
index 0000000000..d3f4408907
Binary files /dev/null and b/doc/images/Wall-Order/flow-compensation-model-graph.png differ
diff --git a/doc/images/Wall-Order/flow-compensation-model.png b/doc/images/Wall-Order/flow-compensation-model.png
new file mode 100644
index 0000000000..be22f2ba02
Binary files /dev/null and b/doc/images/Wall-Order/flow-compensation-model.png differ
diff --git a/doc/images/Wall-Order/infill-first.gif b/doc/images/Wall-Order/infill-first.gif
new file mode 100644
index 0000000000..2de1160720
Binary files /dev/null and b/doc/images/Wall-Order/infill-first.gif differ
diff --git a/doc/images/Wall-Order/infill-ghosting.png b/doc/images/Wall-Order/infill-ghosting.png
new file mode 100644
index 0000000000..40f66fb124
Binary files /dev/null and b/doc/images/Wall-Order/infill-ghosting.png differ
diff --git a/doc/images/Wall-Order/inner-outer-inner.gif b/doc/images/Wall-Order/inner-outer-inner.gif
new file mode 100644
index 0000000000..74077e7956
Binary files /dev/null and b/doc/images/Wall-Order/inner-outer-inner.gif differ
diff --git a/doc/images/Wall-Order/inner-outer.gif b/doc/images/Wall-Order/inner-outer.gif
new file mode 100644
index 0000000000..2fcee982f3
Binary files /dev/null and b/doc/images/Wall-Order/inner-outer.gif differ
diff --git a/doc/images/Wall-Order/only-one-wall-threshold.png b/doc/images/Wall-Order/only-one-wall-threshold.png
new file mode 100644
index 0000000000..a728e46442
Binary files /dev/null and b/doc/images/Wall-Order/only-one-wall-threshold.png differ
diff --git a/doc/images/Wall-Order/only-one-wall.gif b/doc/images/Wall-Order/only-one-wall.gif
new file mode 100644
index 0000000000..2cc775c359
Binary files /dev/null and b/doc/images/Wall-Order/only-one-wall.gif differ
diff --git a/doc/images/Wall-Order/outer-inner.gif b/doc/images/Wall-Order/outer-inner.gif
new file mode 100644
index 0000000000..48cfa32f27
Binary files /dev/null and b/doc/images/Wall-Order/outer-inner.gif differ
diff --git a/doc/print_settings/quality/quality_settings_overhangs.md b/doc/print_settings/quality/quality_settings_overhangs.md
new file mode 100644
index 0000000000..cb9976ca39
--- /dev/null
+++ b/doc/print_settings/quality/quality_settings_overhangs.md
@@ -0,0 +1,40 @@
+# Overhangs
+
+## Detect overhang wall
+
+Detect the overhang percentage relative to line width and use different speed to print. For 100% overhang, bridge speed is used.
+
+## Make overhang printable
+
+Modify the geometry to print overhangs without support material.
+
+### Maximum angle
+
+Maximum angle of overhangs to allow after making more steep overhangs printable.
+90° will not change the model at all and allow any overhang, while 0 will replace all overhangs with conical material.
+
+### Hole area
+
+Maximum area of a hole in the base of the model before it's filled by conical material.
+A value of 0 will fill all the holes in the model base.
+
+## Extra perimeters on overhangs
+
+Create additional perimeter paths over steep overhangs and areas where bridges cannot be anchored.
+
+## Reverse on even
+
+Extrude perimeters that have a part over an overhang in the reverse direction on even layers. This alternating pattern can drastically improve steep overhangs.
+This setting can also help reduce part warping due to the reduction of stresses in the part walls.
+
+### Reverse internal only
+
+Apply the reverse perimeters logic only on internal perimeters.
+This setting greatly reduces part stresses as they are now distributed in alternating directions. This should reduce part warping while also maintaining external wall quality. This feature can be very useful for warp prone material, like ABS/ASA, and also for elastic filaments, like TPU and Silk PLA. It can also help reduce warping on floating regions over supports.
+For this setting to be the most effective, it is recommended to set the Reverse Threshold to 0 so that all internal walls print in alternating directions on even layers irrespective of their overhang degree.
+
+### Reverse threshold
+
+Number of mm the overhang need to be for the reversal to be considered useful. Can be a % of the perimeter width.
+Value 0 enables reversal on every even layers regardless.
+When [Detect overhang wall](#detect-overhang-wall) is not enabled, this option is ignored and reversal happens on every even layers regardless.
diff --git a/doc/print_settings/quality/quality_settings_wall_and_surfaces.md b/doc/print_settings/quality/quality_settings_wall_and_surfaces.md
index 6ba02d8981..2422fdde77 100644
--- a/doc/print_settings/quality/quality_settings_wall_and_surfaces.md
+++ b/doc/print_settings/quality/quality_settings_wall_and_surfaces.md
@@ -20,58 +20,114 @@ Print sequence of the internal (inner) and external (outer) walls.
### Inner/Outer
-Use Inner/Outer for best overhangs. This is because the overhanging walls can adhere to a neighbouring perimeter while printing. However, this option results in slightly reduced surface quality as the external perimeter is deformed by being squashed to the internal perimeter.
+Use Inner/Outer for best overhangs. This is because the overhanging walls can adhere to a neighboring perimeter while printing. However, this option results in slightly reduced surface quality as the external perimeter is deformed by being squashed to the internal perimeter.
+
+
### Inner/Outer/Inner
-Use Inner/Outer/Inner for the best external surface finish and dimensional accuracy as the external wall is printed undisturbed from an internal perimeter. However, overhang performance will reduce as there is no internal perimeter to print the external wall against. This option requires a minimum of 3 walls to be effective as it prints the internal walls from the 3rd perimeter onwards first, then the external perimeter and, finally, the first internal perimeter. This option is recommended against the Outer/Inner option in most cases.
+Use Inner/Outer/Inner for the best external surface finish and dimensional accuracy as the external wall is printed undisturbed from an internal perimeter. However, overhang performance will reduce as there is no internal perimeter to print the external wall against. This option requires a minimum of 3 walls to be effective as it prints the internal walls from the 3rd perimeter onwards first, then the external perimeter and, finally, the first internal perimeter. This option is recommended against the Outer/Inner option in most cases.
+
+
### Outer/Inner
-Use Outer/Inner for the same external wall quality and dimensional accuracy benefits of Inner/Outer/Inner option. However, the z seams will appear less consistent as the first extrusion of a new layer starts on a visible surface.
+Use Outer/Inner for the same external wall quality and dimensional accuracy benefits of [Inner/Outer/Inner](#innerouterinner) option. However, the z seams will appear less consistent as the first extrusion of a new layer starts on a visible surface.
+
+
### Print infill first
-Order of wall/infill. When the tickbox is unchecked the walls are printed first, which works best in most cases.
-Printing infill first may help with extreme overhangs as the walls have the neighbouring infill to adhere to. However, the infill will slightly push out the printed walls where it is attached to them, resulting in a worse external surface finish. It can also cause the infill to shine through the external surfaces of the part.
+When this option is enabled, the infill is printed first, followed by the walls. This can be useful for some overhangs where the infill can support the walls.
+
+
+
+**However**, the infill will slightly push out the printed walls where it is attached to them, resulting in a worse external surface finish. It can also cause the infill to shine through the external surfaces of the part.
+
+
+
+When using this option is recommended to use the [Precise Wall](quality_settings_precision#precise-wall), [Inner/Outer/Inner](#innerouterinner) wall printing order or reduce [Infill/Wall Overlap](strength_settings_infill#infill-wall-overlap) to avoid the infill pushing out the external wall.
## Wall loop direction
The direction which the wall loops are extruded when looking down from the top.
-By default all walls are extruded in counter-clockwise, unless Reverse on even is enabled. Set this to any option other than Auto will force the wall direction regardless of the Reverse on even.
+By default all walls are extruded in counter-clockwise, unless Reverse on even is enabled.
+Set this to any option other than Auto will force the wall direction regardless of the Reverse on even.
> [!NOTE]
> This option will be disabled if spiral vase mode is enabled.
## Surface flow ratio
-This factor affects the amount of material for top solid infill. You can decrease it slightly to have smooth surface finish.
+This factor affects the amount of material for top or bottom solid infill. You can decrease it slightly to have smooth surface finish.
The actual top surface flow used is calculated by multiplying this value with the filament flow ratio, and if set, the object's flow ratio.
+> [!TIP]
+> Before using a value other than 1, it is recommended to [calibrate the flow ratio](flow-rate-calib) to ensure that the flow ratio is set correctly for your printer and filament.
+
## Only one wall
Use only one wall on flat surfaces, to give more space to the top infill pattern.
+Specially useful in small features, like letters, where the top surface is very small and concentric pattern from walls would not cover it properly.
+
+
### Threshold
-If a top surface has to be printed and it's partially covered by another layer, it won't be considered at a top layer where its width is below this value. This can be useful to not let the 'one perimeter on top' trigger on surface that should be covered only by perimeters. This value can be a mm or a % of the perimeter extrusion width.
-Warning: If enabled, artifacts can be created if you have some thin features on the next layer, like letters. Set this setting to 0 to remove these artifacts.
+If a top surface has to be printed and it's partially covered by another layer, it won't be considered at a top layer where its width is below this value. This can be useful to not let the 'one perimeter on top' trigger on surface that should be covered only by perimeters. This value can be a mm or a % of the perimeter extrusion width.
+
+
+
+> [!WARNING]
+> If enabled, artifacts can be created if you have some thin features on the next layer, like letters. Set this setting to 0 to remove these artifacts.
## Avoid crossing walls
Maximum detour distance for avoiding crossing wall. Don't detour if the detour distance is larger than this value. Detour length could be specified either as an absolute value or as percentage (for example 50%) of a direct travel path. Zero to disable.
+
+
### Max detour length
-Maximum detour distance for avoiding crossing wall. Don't detour if the detour distance is larger than this value. Detour length could be specified either as an absolute value or as percentage (for example 50%) of a direct travel path. Zero to disable.
+Maximum detour distance for avoiding crossing wall. Don't detour if the detour distance is larger than this value.
+Detour length could be specified either as an absolute value or as percentage (for example 50%) of a direct travel path.
+
+Zero will detour no matter the distance.
## Small area flow compensation
-Enable flow compensation for small infill areas.
+Enables adaptive flow control for small infill areas.
+This feature helps address extrusion problems that often occur in small regions of solid infill, such as the tops of narrow letters or fine features. In these cases, standard extrusion flow may be too much for the available space, leading to over-extrusion or poor surface quality.
+
+
+
+It works by dynamically adjusting the extrusion flow based on the length of the extrusion path, ensuring more precise material deposition in small spaces.
+
+This is a native implementation of @Alexander-T-Moss [Small Area Flow Compensation](https://github.com/Alexander-T-Moss/Small-Area-Flow-Comp).
### Flow Compensation Model
-used to adjust the flow for small infill areas. The model is expressed as a comma separated pair of values for extrusion length and flow correction factors, one per line, in the following format:
+The model uses a list of Extrusion Length and Flow Correction Factor value pairs. Each pair defines how much flow should be used for a specific Extrusion Length.
+For values between the listed points, the flow is calculated using linear interpolation.
+
+
+
+For example for the following model:
+
+| Extrusion Length | Flow Correction Factor |
+|------------------|------------------------|
+| 0 | 0 |
+| 0.2 | 0.4444 |
+| 0.4 | 0.6145 |
+| 0.6 | 0.7059 |
+| 0.8 | 0.7619 |
+| 1.5 | 0.8571 |
+| 2 | 0.8889 |
+| 3 | 0.9231 |
+| 5 | 0.952 |
+| 10 | 1 |
+
+You should write it as:
```c++
0,0;
diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp
index c00c46b2c7..77955d11c2 100644
--- a/src/slic3r/GUI/Tab.cpp
+++ b/src/slic3r/GUI/Tab.cpp
@@ -2179,14 +2179,14 @@ void TabPrint::build()
optgroup->append_single_option_line("counterbore_hole_bridging", "quality_settings_bridging#bridge-counterbore-hole");
optgroup = page->new_optgroup(L("Overhangs"), L"param_overhang");
- optgroup->append_single_option_line("detect_overhang_wall");
- optgroup->append_single_option_line("make_overhang_printable");
- optgroup->append_single_option_line("make_overhang_printable_angle");
- optgroup->append_single_option_line("make_overhang_printable_hole_size");
- optgroup->append_single_option_line("extra_perimeters_on_overhangs");
- optgroup->append_single_option_line("overhang_reverse");
- optgroup->append_single_option_line("overhang_reverse_internal_only");
- optgroup->append_single_option_line("overhang_reverse_threshold");
+ optgroup->append_single_option_line("detect_overhang_wall", "quality_settings_overhangs#detect-overhang-wall");
+ optgroup->append_single_option_line("make_overhang_printable", "quality_settings_overhangs#make-overhang-printable");
+ optgroup->append_single_option_line("make_overhang_printable_angle", "quality_settings_overhangs#maximum-angle");
+ optgroup->append_single_option_line("make_overhang_printable_hole_size", "quality_settings_overhangs#hole-area");
+ optgroup->append_single_option_line("extra_perimeters_on_overhangs", "quality_settings_overhangs#extra-perimeters-on-overhangs");
+ optgroup->append_single_option_line("overhang_reverse", "quality_settings_overhangs#reverse-on-even");
+ optgroup->append_single_option_line("overhang_reverse_internal_only", "quality_settings_overhangs#reverse-internal-only");
+ optgroup->append_single_option_line("overhang_reverse_threshold", "quality_settings_overhangs#reverse-threshold");
page = add_options_page(L("Strength"), "custom-gcode_strength"); // ORCA: icon only visible on placeholders
optgroup = page->new_optgroup(L("Walls"), L"param_wall");