* build: enable /Zc:lambda for MSVC
MSVC keeps its legacy lambda processor under /std:c++17, which rejects
reading a constexpr constant inside a lambda that does not capture it
(C3493). No other compiler requires that capture, and clang reports it as
an unused one, so the two cannot both be satisfied without the flag.
/Zc:lambda selects the conforming lambda parser that clang and GCC
already use. It is implied by /std:c++20 and /permissive-, so it is only
needed while we are on C++17. clang-cl is conforming already and does not
take the flag.
It requires VS2019 16.8, so build_release_vs.bat now says 16.8+.
* build: clear 237 unused lambda capture warnings
236 captures across 81 files, 142 of them `this`. Removing an unused
capture changes no behavior; clang does not report a capture whose type
has a non-trivial destructor, so nothing held only to extend an object's
lifetime is in this set.
Nine of them are the second half of the warning, "is not required to be
captured for this use", where the capture is a const or constexpr value
the body does read. Those depend on the /Zc:lambda change in the previous
commit. One of them, in FillRectilinear.cpp, had been worked around with
an #ifndef __APPLE__ guard around the capture list, which is now gone.
GUI_ObjectTableSettings.cpp captured its reset button only to read it
inside #ifdef __WXOSX_MAC__. That branch now takes the button from the
event it is already handling.
* build: fail configure on MSVC older than 19.28 instead of dropping /Zc:lambda
cl.exe answers an unrecognized /Zc: sub-option with warning D9002 and keeps
going, so on VS2019 before 16.8 the flag is silently ignored and the build
instead dies with C3493 in FillRectilinear.cpp, nowhere near the cause.
* fix: delete three locals that are now unused
Their only remaining use was the lambda capture this branch removed. The
Clang builds set -Wno-unused-variable, so the build never flagged them.
---------
Co-authored-by: Rodrigo Faselli <162915171+RF47@users.noreply.github.com>
* build: remove std::move that blocks copy elision
std::move wrapped around a temporary, or around a local being returned,
stops the compiler constructing it in place. Each edit is the fix clang
suggests, which is to delete the std::move call and keep its argument.
Three of the 39 sites save a move, the two return std::move(local) in
Print.cpp and TreeSupport.cpp:2749. The rest are equivalent either way
and match how the codebase already writes this elsewhere.
Clears 39 -Wpessimizing-move warnings.
* build: drop null checks on references and this
A reference cannot be bound to null and this cannot be null, so the
compiler folds these conditions to true and drops the guard. Seven are
if (&bitmap && bitmap.IsOk()), where IsOk() already does the work; two
test this directly. The guarded code runs either way, so removing the
dead operand changes nothing.
Clears 11 -Wundefined-bool-conversion warnings.
* 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)
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>
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.
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)
1. speedup organic tree support by using parallel for intersection of bed area
jira: STUDIO-8451
2. add extra wall for hybrid tree support's tall branches
3. disable circle fitting for tree support. This feature produces inconsistent
circles for tree supports.
4. expose the option tree_support_branch_diameter_angle. Tree supports'
strength can be improved by increasing this value.
Change-Id: If3688ca895df98a77f6ca538077daf8fe94e53f1
(cherry picked from commit 7697eb3dc8f87204d28e6be9adaf55dfcdadbc74)
The expansion was too large and may miss sharp tails near the object.
jira: STUDIO-8400
Change-Id: Iee5bd15cc7c23f16d30365d5f1c9fbcc0a632c19
(cherry picked from commit 05174d07063d8296241de1d35f5b4196bc33a353)
1. fix hybrid tree support may go outside plate
github: #4769
2. fix false alarm of empty layer warning
jira: STUDIO-8178
Change-Id: I7bcc3959b06184901cbec946e8840c7a94bc1cab
(cherry picked from commit 647bd4213c363eff6258992f5f607c1f03cbc482)
Change the behavior of "tree support wall count" option, let it control precisely.
0 means auto.
jira: STUDIO-8068
github: 4780
Change-Id: I6d1a64cff9b121f5c0a3e910c5ddbfe6db198687
(cherry picked from commit a557bbe758cd352fa9bb48323995ed2c90737577)
1. keep all polygon nodes in drop_nodes
2. prevent generating too small polygon nodes
jira: STUDIO-8107
Change-Id: I1311158ab15097eb10727a8d6884b0bcd8136ef1
(cherry picked from commit 038b92a536a56568b1c6f385ce19ff36331cd46a)
this function crashes if there are empty elements in entities.
jira: STUDIO-7975
Change-Id: I0dbeb6b1151dd089be7617ebc3271691f64ac61e
(cherry picked from commit df30728617a89891c68e36cce771fb6380355b82)
(cherry picked from commit e42aabebb16253b0172fb80a58f58953aec8dda7)
Previously painting support enforces on vertical faces doesn't work, as projecting the facets downwards will give empty polygons.
Now we use a different mechanism to enable vertical paint-on enforces, by directly adding contact nodes.
Note: this feature only works with tree support as only tree support has contact nodes.
jira: none
Change-Id: Id171b1665566d142a6427285baccb40c0aa00949
(cherry picked from commit 9c882f61eb37350a4486df58de48f0ae489f2d15)
(cherry picked from commit 68625a6e601e2feef8e56693da1f58372b27b560)
1. do not add interface for small overhangs so supports are easier to
remove
2. calculate avoidance more accurately using real layer height
jira: STUDIO-6285
3. hybrid nodes won't collide with lower layers
4. calculate max move more accurately
5. do not increase radius if next layer has collision
jira: STUDIO-2296, STUDIO-7883
6. rewrite plan_layer_heights to prevent support layers overlap.
Now the tree support layers are completely independent to object layers.
6. increase collision areas for interface. The top layers may be too
close to interface with adaptive layer heights and very small overhang angle
Change-Id: I052c3f66e68afb7663e2d70c846dd09ed7086071
(cherry picked from commit aca511caebfdeec270d4fc0ec6bbbadde77cddc9)
(cherry picked from commit f2fc996652b3b204b4e554f57afed8519feb0397)
1. add rectilinear interface pattern for organic support
jira: STUDIO-7181
2. add tree support optgroup
Change-Id: I94882bc34a61c6adc06b8ecbc9f2323f9b039aac
(cherry picked from commit a8142ab3f37e0bd140a31a7e635b8475f471d7e3)
(cherry picked from commit 69cf816b9431bc21ca0187c7db1148e2d2e898ab)
To fix this we have to expand the enforcer areas just like organic support.
jira: STUDIO-7538
Change-Id: I8e4e3fd18b0e77db9beb57347d8da895fc83f4b0
(cherry picked from commit 319b3e2247e01e545bb9e4cebea7950d875cd89a)
The top z gap should be split if it's too large.
Also we use same logic for both synced and independent support layer.
jira: STUDIO-7232
github: #4191
Change-Id: Idca792e8fa51a83c2a09441ecac64d40b91d6390
(cherry picked from commit c262a7ea137db09e453c157115b3d5417a32886d)
The raft gap layer should only exist if there are raft layers.
jira: STUDIO-7184
Change-Id: Ia4d2a5b7ddf873fb4ef16c7087648214e6bde806
(cherry picked from commit f13144d6a9c20cfbad11c6907c30b10447d8f8a3)
This bug causes supports difficult to remove.
Rule to remmeber:
never decrease the top z distance, you can only increase it SLIGHTLY.
jira: STUDIO-7103, STUDIO-7001
Change-Id: I24f71cd67d182d4e2c0902f244a8ca8f4c3ee982
(cherry picked from commit 461af9e8f6f98a8e0b363436276f225183365998)
also change default style to tree organic
jira: STUDIO-6801
Change-Id: Iab1d8c6117139c9a7a4c1fa71de0a13bcb356dd5
(cherry picked from commit d2c4efad58f16b23bef49bd47d3b70bf322d6f55)
(cherry picked from commit cd9305e3e061b67903ed8f5cd05d0136d608ee01)
Previous parallelization has a bug where two adjacent nodes may be deleted at the same time.
jira: none
Change-Id: I99a29dae9f72aa74ed2721eea4421b15eec10732
(cherry picked from commit 91efe67d723652d3f7e4484dd3cdf31638f769a4)
(cherry picked from commit 734a70b493b0347870dc955021b0f7055c76f84b)