FuzzySkin hole + Fix: Painted artifacts and with Sacrificial layer issues#12479
Conversation
a849fec to
7d062b9
Compare
4f2c141 to
595219f
Compare
3af76a5 to
94edb48
Compare
|
@ianalexis And since you are on it please have a look into the following issue: After a5a5cad Orca crashes when using (e.g.) a text modifier with fuzzy skin while fuzzy skin is also enabled globally when running |
|
@RF47 |
i think you commented before it finish upload XD |
|
Oops... 🤦🏻 |
7003ab9 to
7335d58
Compare
|
@RF47 @ianalexis |
I've already downloaded it, but I can't reproduce the crash in Windows. Ian has set up a virtual machine, and when we have time, we'll take a look at it. |
7335d58 to
63f7af8
Compare
3685986 to
b61dbd8
Compare
We added a non-empty vector safeguard. When you can, please try it to see if this fixes the crash. |
It's compilling a possible fix. Lets w8 for the artifact and lets test it |
b3b802d to
98a4535
Compare
|
This is very strange. Here are some inconsistencies I observed:
No clue what's happening here. 🤷♂️ |
Reopening this issue #11573 we need to check this |
98a4535 to
b1e3cc2
Compare
434a872 to
051cf6a
Compare
051cf6a to
894e4c9
Compare
Here i did some testing with this pr and it should be fixed. Can you test it? How to Download Pull Requests Artifacts for Testing Also your project didint worked for me. Can you reupload a project that fails? |
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 26 out of 26 changed files in this pull request and generated 2 comments.
Comments suppressed due to low confidence (1)
src/libslic3r/Feature/FuzzySkin/FuzzySkin.cpp:204
has_fuzzy_skin/has_fuzzy_holeare set to true even whencfg.type == FuzzySkinType::None("Painted only"). Sinceshould_fuzzify()explicitly returns false forNone, this makes downstream logic treat the layer as fuzzy (e.g., overhang reversal, reduced simplification for arc fitting) even when no fuzzy skin will actually be applied. Consider excludingNonehere (or computing these flags based on whether any config can fuzzify contours/holes) so "Painted only" without any painted regions doesn’t change perimeter behavior.
if (cfg.type != FuzzySkinType::Disabled_fuzzy) { //None = painted only.
g.has_fuzzy_skin = true;
if (cfg.type != FuzzySkinType::External) {
g.has_fuzzy_hole = true;
}
}
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| // Make each region's ExPolygons exclusive so overlapping regions don't double-fuzz | ||
| // the same perimeter section. Later regions in the list take priority over earlier ones | ||
| // in overlapping areas (matching modifier precedence order). | ||
| for (size_t i = 0; i < merged_regions.size(); ++i) | ||
| for (size_t j = i + 1; j < merged_regions.size(); ++j) | ||
| if (!merged_regions[i].expolygons.empty() && !merged_regions[j].expolygons.empty()) | ||
| merged_regions[i].expolygons = diff_ex(merged_regions[i].expolygons, merged_regions[j].expolygons); |
There was a problem hiding this comment.
This code assumes a priority order between regions (“later regions … take priority”), but merged_regions is built from an std::unordered_map, so iteration order is unspecified and may vary across runs/platforms. That can make fuzzy precedence in overlaps non-deterministic and produce different toolpaths/G-code for the same project. Consider building merged_regions in a deterministic, precedence-aware order (e.g., preserve modifier/region ordering when constructing regions_by_fuzzify, or explicitly sort by an attached priority) before applying diff_ex to enforce exclusivity.
3cdc7cb to
ae2fce0
Compare
410db1b to
e133808
Compare
Co-authored-by: Copilot <[email protected]>
Replace unordered_map-based grouping of FuzzySkinConfig -> Surfaces with an ordered vector (or pair list) to preserve construction order and make overlap precedence deterministic. Introduce a local ConfigSurfaces struct and use std::find_if + push_back (with reserve) to collect regions; populate PerimeterGenerator::regions_by_fuzzify as a vector of (FuzzySkinConfig, ExPolygons) and apply offset_ex when pushing entries. Use should_fuzzify() for setting has_fuzzy_skin/has_fuzzy_hole. Update collect_merged_fuzzy_regions signature to accept the ordered vector of pairs. Add a comment explaining the ordering intent.
e133808 to
c0690da
Compare
|
@copilot resolve the merge conflicts in this pull request |


Everything project: FUZZY.TEST.HEAVY.CLASSIC AND ARACHNE.3mf.TXT
This PR:






Also tested: #12920