* Preserve support base outline/fill order
Honor no_sort when emitting support toolpaths to keep outline-first order.
Group tree support base paths (including lightning) into per-area no_sort collections to prevent interleaving across islands.
Keep lightning layer lookup side-effect free.
* Tag Orca specific changes
Tag Orca specific changes vs. Bambu using the comment //ORCA: . This helps when reviewing merge commits from upstream Bambu so we don't end up causing regressions when pulling in commits from upstream
Fix hybrid tree first-layer support base flow and UI consistency
Fix incorrect first-layer generation for hybrid tree supports.
The support base on the first layer used brim flow instead of support material flow,
which could lead to incorrect extrusion behavior and wrong material usage in
multi-material prints.
Additionally, spacing and density for the regular support part were not consistently
derived from the actual first-layer support flow when first-layer and regular
line widths differed.
Hybrid-specific behavior is clarified:
- first-layer expansion applies only to the regular support part
- tree-only regions keep their existing behavior
The first-layer support pattern is aligned with normal and organic tree supports
to ensure consistent and meaningful density behavior.
Also make first-layer support expansion and density settings visible whenever
supports are enabled, as density was already affecting hybrid supports but was
hidden in the UI.
* Fix support interface semantics and gap handling
Fix zero-gap interface detection and gap initialization for supports and raft.
Ensures correct top/bottom contact semantics and avoids relying on default zero gaps.
* Additional fixes and robustness improvements
Fix incorrect coupling between top and bottom support interface spacing and density, ensuring bottom interfaces use their own parameters for smoothing and toolpath generation.
Restore correct bottom interface generation for organic (tree) supports when a non-zero bottom Z gap is used, and preserve contacts even when base polygons are empty.
Improve robustness of organic support slicing by fixing layer index drift and guarding against degenerate polygon boolean operations.
* Typo and semantics fix
differnt_support_interface_filament -> different_support_interface_filament
soluble -> zero_top_z_gap
* Fix non organic tree bottom support interface generation
Slim tree bottom interface layer numbers were capped by the object's layer number beneath it.
Fixed by refactoring the generation algorithm.
* Fix non organic tree interlaced support generation
Deterministic local interlaced support layers generation for non-organic tree support
* Enable support interface multimaterial for non organic tree
Enables mixed-material support interface behavior for non organic tree support type.
* Fix tree support interface layer counts and contact handling
- Correct non‑organic tree top interface layer budgeting so gaps don’t consume a layer (N stays N).
- Remove the extra roof interface pass that was duplicating the 2nd layer.
- Organic tree: use only the lowest contact footprint and avoid extra bottom‑contact extrusion so interface count matches the user setting.
* Bugfixes (a lot)
Many, many bugs fixed, majority edge-case but still not playing by the rule.
Some of them:
- on multilevel base, on very small level variations the support was capped to the topmost level height
- non-organic tree had gaps for supports in a multilevel base situiation
- independent support layer height had issues with support interfaces (base support beneath bottom interface, top contact layer sometimes missing)
- organic tree had issues with small variation multi-level base
- organic tree support with zero top Z distance could overlap support-material and interface-material paths when separate materials were used
- many, many others (I lost track of them)
Fix support preview artifacts caused by incorrect gap subdivision
Support generation could sometimes split a gap into too many steps,
even when it should fit exactly into a single layer.
This was most noticeable when max_suport_layer_height was equal to
the print layer height (e.g. 0.2 mm).
This resulted in incorrect support layering and visible artifacts
in preview.
The issue was caused by floating-point precision, where values that
should be equal to the configured limit were treated as slightly larger.
Fix by biasing the subdivision calculation with EPSILON so near-equal
values are not split into extra steps.
Applied consistently to:
- SupportMaterial (normal supports)
- TreeSupportCommon (tree stepping)
- TreeSupport (layer creation)
- Handle z contouring in variable speed flow when emitting GCode
- Add logic to restore nominnal z height for regular extrusions
- preserve z_contoured flag when splitting extrusion paths
* Add Rectilinear Support for Normal support type. Fix issue #9508.
* Remove duplicate the rotation logic, use raft_interface_angle function.
---------
Co-authored-by: SoftFever <softfeverever@gmail.com>
Port Z Anti-Aliasing from BambuStudio-ZAA (https://github.com/adob/BambuStudio-ZAA)
to OrcaSlicer. ZAA eliminates stair-stepping on curved and sloped top surfaces
by raycasting each extrusion point against the original 3D mesh and micro-adjusting
Z height to follow the actual surface geometry.
Key changes:
- Add ContourZ.cpp raycasting algorithm (~330 lines)
- Extend geometry with 3D support (Point3, Line3, Polyline3, MultiPoint3)
- Template arc fitting for 2D/3D compatibility
- Change ExtrusionPath::polyline from Polyline to Polyline3
- Add 5 ZAA config options (zaa_enabled, zaa_min_z, etc.)
- Add posContouring pipeline step in PrintObject
- Update GCode writer for 3D coordinate output
- Add ZAA settings UI in Print Settings > Quality
- Add docs/ZAA.md with usage and implementation details
ZAA is opt-in and disabled by default. When disabled, the slicing pipeline
is unchanged.
Fixes#11082
Slicing is going to the endless loop when the `Base pattern spacing` value is 0 for `Tree Slim` support.
Co-authored-by: SoftFever <softfeverever@gmail.com>
* New materials
* Temps
* Full filament type list
* Improve nozzle temperature range validation messages
Separates minimum and maximum recommended temperature warnings for nozzle configuration + generig °c usage.
Co-Authored-By: Alexandre Folle de Menezes <afmenez@gmail.com>
* Material Updates
Co-Authored-By: Rodrigo <162915171+RF47@users.noreply.github.com>
* petg-cf10 should be petg-cf
options.
* Pla reduced range
* Adjust some temps
* FilamentTempType Temperature-based logic
* chamber temps
* Fromatting
* Filament chamber temperature range support
Introduces get_filament_chamber_temp_range to retrieve safe chamber temperature limits for filament types. Updates ConfigManipulation to use these limits instead of hardcoded values.
* add adhesion coefficient and yield strength
Replaces hardcoded material checks for adhesion coefficient and yield strength with lookup functions using extended FilamentType struct.
* Thermal length
* Fix
* Refactor filament type data to MaterialType class
Moved filament type properties and related lookup functions from PrintConfig.cpp into a new MaterialType class.
* Fix adhesion_coefficient
Co-Authored-By: SoftFever <softfeverever@gmail.com>
---------
Co-authored-by: Alexandre Folle de Menezes <afmenez@gmail.com>
Co-authored-by: Rodrigo <162915171+RF47@users.noreply.github.com>
Co-authored-by: SoftFever <softfeverever@gmail.com>
* Generate support interface iron extrusion
* Always ironing last
* Add options
* Move ironing speed to speed tab
* Don't iron places that are covered by upper support layers
* Disable support interface spacing settings when support ironing is enabled
* Update text
* Clipper: Verify range of int32 coordinates on input.
Cherry-picked from prusa3d/PrusaSlicer@fa7debf49d
Co-authored-by: Vojtech Bubnik <bubnikv@gmail.com>
* ClipperLib: Optimized PointInPolygon() to calculate cross products
with int64s instead of doubles.
Cherry-picked from prusa3d/PrusaSlicer@9dca8403fe
Co-authored-by: Vojtech Bubnik <bubnikv@gmail.com>
* Reworked the ClipperLib / Polygon types to use
the tbb::scallable_allocator to better scale on multiple threads.
Cherry-picked from prusa3d/PrusaSlicer@9cde96993e
Co-authored-by: Vojtech Bubnik <bubnikv@gmail.com>
* use tbb::scallable_allocator for Polygons and ExPolygon::holes
to better scale on multiple threads
Cherry-picked from prusa3d/PrusaSlicer@b67ad6434d
Co-authored-by: Vojtech Bubnik <bubnikv@gmail.com>
* Fixed compilation on GCC and CLang
Cherry-picked from prusa3d/PrusaSlicer@b3b44681a9
Co-authored-by: Vojtech Bubnik <bubnikv@gmail.com>
* Remove clipper2 which is not used
* Removed shiny profiler from clipperlib
Cherry-picked from prusa3d/PrusaSlicer@7e77048593
Co-authored-by: Vojtech Bubnik <bubnikv@gmail.com>
* ClipperLib: Further optimization of memory allocation using scalable_allocator.
ClipperLib: SimplifyPolygon() - changed default winding number to positive,
added strictly_simple parameter.
ClipperUtlis simplify_polygons() - removed "remove_collinear" parameter
Cherry-picked from prusa3d/PrusaSlicer@a7e17df25f
Co-authored-by: Vojtech Bubnik <bubnikv@gmail.com>
* ClipperLib: emplace_back() instead of push_back().
Cherry-picked from prusa3d/PrusaSlicer@2e150795b1
Co-authored-by: Vojtech Bubnik <bubnikv@gmail.com>
* Fixed issue in a 32bit clipper, where IntersectPoint() checked for
the Y coordinate of the calculated intersection point for validity,
but the Y coordinate was already rounded to 32bits, thus an overflow
may have in rare cases masked invalidity of the result.
Cherry-picked from prusa3d/PrusaSlicer@b39c33414f
Co-authored-by: Vojtech Bubnik <bubnikv@gmail.com>
* Fixed Vojtech's out of boundary assert in Clipper library.
Cherry-picked from prusa3d/PrusaSlicer@0a202dcff3
Co-authored-by: Vojtech Bubnik <bubnikv@gmail.com>
* Update clipper to 6.4.2.
Cherry-picked from prusa3d/PrusaSlicer@b8b3cccb40
Co-authored-by: Lukáš Hejl <hejl.lukas@gmail.com>
* Try fix cmake opencv
---------
Co-authored-by: Vojtech Bubnik <bubnikv@gmail.com>
Co-authored-by: Lukáš Hejl <hejl.lukas@gmail.com>
According to https://eigen.tuxfamily.org/dox/TopicPitfalls.html one
should just avoid using `auto` as the type of an Eigen expression.
This PR fixes most of them I could found in the project. There might be
cases that I missed, and I might update those later if I noticed.
This should prevent issues like #7741 and hopefully fix some mysterious
crashes happened inside Eigen calls.
/run/build/BambuStudio/src/libslic3r/Support/SupportParameters.hpp: In constructor ‘Slic3r::SupportParameters::SupportParameters(const Slic3r::PrintObject&)’:
/run/build/BambuStudio/src/libslic3r/Support/SupportParameters.hpp:172:39: error: ‘warning’ was not declared in this scope
172 | BOOST_LOG_TRIVIAL(warning) << "tree support default to organic support";
| ^~~~~~~
/run/build/BambuStudio/src/libslic3r/Support/SupportParameters.hpp:172:21: error: ‘BOOST_LOG_TRIVIAL’ was not declared in this scope
172 | BOOST_LOG_TRIVIAL(warning) << "tree support default to organic support";
| ^~~~~~~~~~~~~~~~~
/run/build/BambuStudio/src/libslic3r/Support/SupportParameters.hpp:175:39: error: ‘warning’ was not declared in this scope
175 | BOOST_LOG_TRIVIAL(warning) << "tree support default to hybrid tree due to adaptive layer height";
| ^~~~~~~
/run/build/BambuStudio/src/libslic3r/Support/SupportParameters.hpp:175:21: error: ‘BOOST_LOG_TRIVIAL’ was not declared in this scope
175 | BOOST_LOG_TRIVIAL(warning) << "tree support default to hybrid tree due to adaptive layer height";
| ^~~~~~~~~~~~~~~~~
(cherry picked from commit a63070bd4cbe012315b9532f5c199f6d2664333a)
1. fix the issue that setting top z distance=0 not working
2. remove too small extrusions of tree support
jira: STUDIO-8578
Change-Id: I8c3face9d6a756698a6fab876fdb1acc0686647c
(cherry picked from commit 4d219266a1f520445bec6ac5a0274dcfec4050e8)