mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-19 04:37:52 -06:00
Bugfix after refactoring of PrintRegions: Fixed handling of cached_volume_ids
This commit is contained in:
parent
fe96a20b50
commit
f5c7d14e85
1 changed files with 22 additions and 18 deletions
|
@ -571,29 +571,32 @@ static void transformed_its_bboxes_in_z_ranges(
|
||||||
// their bounding boxes to be recalculated.
|
// their bounding boxes to be recalculated.
|
||||||
void print_objects_regions_invalidate_keep_some_volumes(PrintObjectRegions &print_object_regions, ModelVolumePtrs old_volumes, ModelVolumePtrs new_volumes)
|
void print_objects_regions_invalidate_keep_some_volumes(PrintObjectRegions &print_object_regions, ModelVolumePtrs old_volumes, ModelVolumePtrs new_volumes)
|
||||||
{
|
{
|
||||||
assert(old_volumes.size() == print_object_regions.cached_volume_ids.size());
|
|
||||||
|
|
||||||
print_object_regions.all_regions.clear();
|
print_object_regions.all_regions.clear();
|
||||||
|
|
||||||
model_volumes_sort_by_id(old_volumes);
|
model_volumes_sort_by_id(old_volumes);
|
||||||
model_volumes_sort_by_id(new_volumes);
|
model_volumes_sort_by_id(new_volumes);
|
||||||
|
|
||||||
size_t last = 0;
|
size_t i_cached_volume = 0;
|
||||||
|
size_t last_cached_volume = 0;
|
||||||
size_t i_old = 0;
|
size_t i_old = 0;
|
||||||
for (size_t i_new = 0; i_new < new_volumes.size(); ++ i_new) {
|
for (size_t i_new = 0; i_new < new_volumes.size(); ++ i_new)
|
||||||
|
if (model_volume_solid_or_modifier(*new_volumes[i_new])) {
|
||||||
for (; i_old < old_volumes.size(); ++ i_old)
|
for (; i_old < old_volumes.size(); ++ i_old)
|
||||||
if (old_volumes[i_old]->id() >= new_volumes[i_new]->id())
|
if (old_volumes[i_old]->id() >= new_volumes[i_new]->id())
|
||||||
break;
|
break;
|
||||||
if (i_old == old_volumes.size())
|
if (i_old != old_volumes.size() && old_volumes[i_old]->id() == new_volumes[i_new]->id()) {
|
||||||
break;
|
if (old_volumes[i_old]->get_matrix().isApprox(new_volumes[i_new]->get_matrix())) {
|
||||||
if (old_volumes[i_old]->id() == new_volumes[i_new]->id() && old_volumes[i_old]->get_matrix().isApprox(new_volumes[i_new]->get_matrix())) {
|
|
||||||
// Reuse the volume.
|
// Reuse the volume.
|
||||||
print_object_regions.cached_volume_ids[last ++] = print_object_regions.cached_volume_ids[i_old];
|
for (; print_object_regions.cached_volume_ids[i_cached_volume] < old_volumes[i_old]->id(); ++ i_cached_volume)
|
||||||
|
assert(i_cached_volume < print_object_regions.cached_volume_ids.size());
|
||||||
|
assert(i_cached_volume < print_object_regions.cached_volume_ids.size() && print_object_regions.cached_volume_ids[i_cached_volume] == old_volumes[i_old]->id());
|
||||||
|
print_object_regions.cached_volume_ids[last_cached_volume ++] = print_object_regions.cached_volume_ids[i_cached_volume ++];
|
||||||
} else {
|
} else {
|
||||||
// Don't reuse the volume.
|
// Don't reuse the volume.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
print_object_regions.cached_volume_ids.erase(print_object_regions.cached_volume_ids.begin() + last, print_object_regions.cached_volume_ids.end());
|
}
|
||||||
|
print_object_regions.cached_volume_ids.erase(print_object_regions.cached_volume_ids.begin() + last_cached_volume, print_object_regions.cached_volume_ids.end());
|
||||||
}
|
}
|
||||||
|
|
||||||
const PrintObjectRegions::BoundingBox* find_volume_extents(const PrintObjectRegions::LayerRangeRegions &layer_range, const ModelVolume &volume)
|
const PrintObjectRegions::BoundingBox* find_volume_extents(const PrintObjectRegions::LayerRangeRegions &layer_range, const ModelVolume &volume)
|
||||||
|
@ -763,6 +766,7 @@ void update_volume_bboxes(
|
||||||
cached_volume_ids.clear();
|
cached_volume_ids.clear();
|
||||||
cached_volume_ids.reserve(model_volumes.size());
|
cached_volume_ids.reserve(model_volumes.size());
|
||||||
for (const ModelVolume *v : model_volumes)
|
for (const ModelVolume *v : model_volumes)
|
||||||
|
if (model_volume_solid_or_modifier(*v))
|
||||||
cached_volume_ids.emplace_back(v->id());
|
cached_volume_ids.emplace_back(v->id());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue