New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
"Thick bridges" prints thin and sparse bridges #9007
Comments
I stumbled over the same problem with As stated in this (almost unrelated) issue (#10329), a tiny change in the extrusion width (in my case +3.7%) caused the bridge flow to be increased by more than 125%. I think this is caused if thick_bridges=off and If you try to compensate the overly thick bridges by reducing The reason is, that the perimeter generator can create wider perimeters at some bridge, but not on the other. I'd suggest to not try to workaround this by using bridge_flow_ratio (at least do not store the change permanently to your profile). I hope I also found a very unintrusive fix: Update: The following change should be really fixing it (will be testing again): diff --git a/src/libslic3r/LayerRegion.cpp b/src/libslic3r/LayerRegion.cpp
index d722f1e9c..056f24af7 100644
--- a/src/libslic3r/LayerRegion.cpp
+++ b/src/libslic3r/LayerRegion.cpp
@@ -32,17 +32,23 @@ Flow LayerRegion::bridging_flow(FlowRole role, bool force_thick_bridges) const
const PrintRegion ®ion = this->region();
const PrintRegionConfig ®ion_config = region.config();
const PrintObject &print_object = *this->layer()->object();
- if (print_object.config().thick_bridges || force_thick_bridges) {
- // The old Slic3r way (different from all other slicers): Use rounded extrusions.
- // Get the configured nozzle_diameter for the extruder associated to the flow role requested.
- // Here this->extruder(role) - 1 may underflow to MAX_INT, but then the get_at() will follback to zero'th element, so everything is all right.
- auto nozzle_diameter = float(print_object.print()->config().nozzle_diameter.get_at(region.extruder(role) - 1));
- // Applies default bridge spacing.
- return Flow::bridging_flow(float(sqrt(region_config.bridge_flow_ratio)) * nozzle_diameter, nozzle_diameter);
- } else {
- // The same way as other slicers: Use normal extrusions. Apply bridge_flow_ratio while maintaining the original spacing.
- return this->flow(role).with_flow_ratio(region_config.bridge_flow_ratio);
- }
+
+ // The old Slic3r way (different from all other slicers): Use rounded extrusions.
+ // Get the configured nozzle_diameter for the extruder associated to the flow role requested.
+ // Here this->extruder(role) - 1 may underflow to MAX_INT, but then the get_at() will follback to zero'th element, so everything is all right.
+ const auto nozzle_diameter = float(print_object.print()->config().nozzle_diameter.get_at(region.extruder(role) - 1));
+ // Applies default bridge spacing.
+ const auto round_flow = Flow::bridging_flow(float(sqrt(region_config.bridge_flow_ratio)) * nozzle_diameter, nozzle_diameter);
+ // The same way as other slicers: Use normal extrusions. Apply bridge_flow_ratio while maintaining the original spacing.
+ const auto normal_flow = this->flow(role).with_flow_ratio(region_config.bridge_flow_ratio);
+
+ // If extrusion_width * layer_height > nozzle_diameter ^ 2 * Pi/4, "normal" flow can get much higher than the rounded flow
+ // In that case, bridges based on normal_flow would become thicker (and unusable) than with round_flow
+ // So, return rounded_flow to ensure that bridges are indeed thinner thick_bridges is disabled
+ if ((print_object.config().thick_bridges || force_thick_bridges) && (round_flow.mm3_per_mm() > normal_flow.mm3_per_mm()))
+ return round_flow;
+ else
+ return normal_flow;
}
// Fill in layerm->fill_surfaces by trimming the layerm->slices by layerm->fill_expolygons. |
Hi, thanks for the issue @espr14 also thanks @parabelboi attached the pull request with your solution. |
Hi, if I understood correctly, you are referring to a fix for the rounded model (which is "enable thick bridges"). cheers, PS: Please also have a look at this analysis. |
The fix affects bridge extrusion width both when thick bridges are enabled and disabled. Anytime the extrusion height gets bigger than its width, the code switches to use rounded extrusion model. However, there was a bug in the rounded extrusion model, which returned half the width it should have, which resulted in sudden jump into very thin bridges. We fixed the behavior, so when the extrusion height gets bigger than its width, the correct rounded extrusion parameters are applied. |
Description of the bug
"Thick bridge" ON creates thin and sparse bridges.
Project file & How to reproduce
thick bridges.3mf.zip
Let's start with default Prusa MK3S+ Quality 0.2 mm profiles and change external perimeter extrusion width to 1 mm. Now let's go through some combinations:
This is quite confusing.
Some examples:
Checklist of files included above
Version of PrusaSlicer
Version 2.5.0+win64
Operating system
Windows 10
Printer model
Prusa i3 MK3S+
The text was updated successfully, but these errors were encountered: