mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-05-20 20:03:47 +00:00
fix: adaptive layer height profile uses uncompensated Z height (#12080)
layer_height_profile_adaptive() was using object_print_z_height() (shrinkage-compensated) to bound the profile, but update_layer_height_profile() validates against object_print_z_uncompensated_max. When shrinkage compensation is active, the mismatch causes the adaptive profile to be silently cleared every frame and replaced with flat layers. Use object_print_z_uncompensated_height() instead, matching both the validator and the existing layer_height_profile_from_ranges() implementation which already uses the uncompensated value. Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -260,7 +260,7 @@ std::vector<double> layer_height_profile_adaptive(const SlicingParameters& slici
|
|||||||
// last facet visited by the as.next_layer_height() function, where the facets are sorted by their increasing Z span.
|
// last facet visited by the as.next_layer_height() function, where the facets are sorted by their increasing Z span.
|
||||||
size_t current_facet = 0;
|
size_t current_facet = 0;
|
||||||
// loop until we have at least one layer and the max slice_z reaches the object height
|
// loop until we have at least one layer and the max slice_z reaches the object height
|
||||||
while (print_z + EPSILON < slicing_params.object_print_z_height()) {
|
while (print_z + EPSILON < slicing_params.object_print_z_uncompensated_height()) {
|
||||||
float height = slicing_params.max_layer_height;
|
float height = slicing_params.max_layer_height;
|
||||||
// Slic3r::debugf "\n Slice layer: %d\n", $id;
|
// Slic3r::debugf "\n Slice layer: %d\n", $id;
|
||||||
// determine next layer height
|
// determine next layer height
|
||||||
@@ -331,10 +331,10 @@ std::vector<double> layer_height_profile_adaptive(const SlicingParameters& slici
|
|||||||
print_z += height;
|
print_z += height;
|
||||||
}
|
}
|
||||||
|
|
||||||
double z_gap = slicing_params.object_print_z_height() - *(layer_height_profile.end() - 2);
|
double z_gap = slicing_params.object_print_z_uncompensated_height() - *(layer_height_profile.end() - 2);
|
||||||
if (z_gap > 0.0)
|
if (z_gap > 0.0)
|
||||||
{
|
{
|
||||||
layer_height_profile.push_back(slicing_params.object_print_z_height());
|
layer_height_profile.push_back(slicing_params.object_print_z_uncompensated_height());
|
||||||
layer_height_profile.push_back(std::clamp(z_gap, slicing_params.min_layer_height, slicing_params.max_layer_height));
|
layer_height_profile.push_back(std::clamp(z_gap, slicing_params.min_layer_height, slicing_params.max_layer_height));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user