mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-19 20:57:53 -06:00
Bugfix of PrintRegion refactoring: Correct invalidation of regions
on object transformation.
This commit is contained in:
parent
2438e3a891
commit
8c95212aae
1 changed files with 13 additions and 9 deletions
|
@ -1268,9 +1268,17 @@ Print::ApplyStatus Print::apply(const Model &model, DynamicPrintConfig new_full_
|
||||||
}
|
}
|
||||||
if (model_object_status.print_object_regions_status == ModelObjectStatus::PrintObjectRegionsStatus::Valid) {
|
if (model_object_status.print_object_regions_status == ModelObjectStatus::PrintObjectRegionsStatus::Valid) {
|
||||||
// Verify that the trafo for regions & volume bounding boxes thus for regions is still applicable.
|
// Verify that the trafo for regions & volume bounding boxes thus for regions is still applicable.
|
||||||
if (print_object_regions && ! trafos_differ_in_rotation_by_z_and_mirroring_by_xy_only(print_object_regions->trafo_bboxes, model_object_status.print_instances.front().trafo))
|
auto invalidate = [it_print_object, it_print_object_end, update_apply_status]() {
|
||||||
|
for (auto it = it_print_object; it != it_print_object_end; ++ it)
|
||||||
|
if ((*it)->m_shared_regions != nullptr)
|
||||||
|
update_apply_status((*it)->invalidate_all_steps());
|
||||||
|
};
|
||||||
|
if (print_object_regions && ! trafos_differ_in_rotation_by_z_and_mirroring_by_xy_only(print_object_regions->trafo_bboxes, model_object_status.print_instances.front().trafo)) {
|
||||||
|
invalidate();
|
||||||
print_object_regions->clear();
|
print_object_regions->clear();
|
||||||
if (print_object_regions &&
|
model_object_status.print_object_regions_status = ModelObjectStatus::PrintObjectRegionsStatus::Invalid;
|
||||||
|
print_regions_reshuffled = true;
|
||||||
|
} else if (print_object_regions &&
|
||||||
verify_update_print_object_regions(
|
verify_update_print_object_regions(
|
||||||
print_object.model_object()->volumes,
|
print_object.model_object()->volumes,
|
||||||
m_default_region_config,
|
m_default_region_config,
|
||||||
|
@ -1283,11 +1291,7 @@ Print::ApplyStatus Print::apply(const Model &model, DynamicPrintConfig new_full_
|
||||||
// Regions are valid, just keep them.
|
// Regions are valid, just keep them.
|
||||||
} else {
|
} else {
|
||||||
// Regions were reshuffled.
|
// Regions were reshuffled.
|
||||||
for (auto it = it_print_object; it != it_print_object_end; ++ it)
|
invalidate();
|
||||||
if ((*it)->m_shared_regions != nullptr) {
|
|
||||||
assert(print_object_regions == (*it)->m_shared_regions);
|
|
||||||
update_apply_status((*it)->invalidate_all_steps());
|
|
||||||
}
|
|
||||||
// At least reuse layer ranges and bounding boxes of ModelVolumes.
|
// At least reuse layer ranges and bounding boxes of ModelVolumes.
|
||||||
model_object_status.print_object_regions_status = ModelObjectStatus::PrintObjectRegionsStatus::PartiallyValid;
|
model_object_status.print_object_regions_status = ModelObjectStatus::PrintObjectRegionsStatus::PartiallyValid;
|
||||||
print_regions_reshuffled = true;
|
print_regions_reshuffled = true;
|
||||||
|
@ -1307,9 +1311,9 @@ Print::ApplyStatus Print::apply(const Model &model, DynamicPrintConfig new_full_
|
||||||
painting_extruders);
|
painting_extruders);
|
||||||
}
|
}
|
||||||
for (auto it = it_print_object; it != it_print_object_end; ++it)
|
for (auto it = it_print_object; it != it_print_object_end; ++it)
|
||||||
if ((*it)->m_shared_regions)
|
if ((*it)->m_shared_regions) {
|
||||||
assert((*it)->m_shared_regions == print_object_regions);
|
assert((*it)->m_shared_regions == print_object_regions);
|
||||||
else {
|
} else {
|
||||||
(*it)->m_shared_regions = print_object_regions;
|
(*it)->m_shared_regions = print_object_regions;
|
||||||
print_object_regions->ref_cnt_inc();
|
print_object_regions->ref_cnt_inc();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue