Refactor extract_infill_extrusions

This commit is contained in:
Martin Šach 2024-05-15 14:12:38 +02:00 committed by Lukas Matena
parent a46aa2b5ca
commit 1cdca87d27

View File

@ -2660,11 +2660,7 @@ ExtrusionEntitiesPtr extract_infill_extrusions(
const ExtrusionEntityCollection &fills, const ExtrusionEntityCollection &fills,
LayerExtrusionRanges::const_iterator begin, LayerExtrusionRanges::const_iterator begin,
LayerExtrusionRanges::const_iterator end, LayerExtrusionRanges::const_iterator end,
const LayerTools &layer_tools, const std::function<bool(const ExtrusionEntityCollection*)> &predicate
const std::size_t instance_id,
const int extruder_id,
const bool overriden,
const bool ironing
) { ) {
ExtrusionEntitiesPtr result; ExtrusionEntitiesPtr result;
for (auto it = begin; it != end; ++ it) { for (auto it = begin; it != end; ++ it) {
@ -2674,20 +2670,7 @@ ExtrusionEntitiesPtr extract_infill_extrusions(
assert(dynamic_cast<ExtrusionEntityCollection*>(fills.entities[fill_id])); assert(dynamic_cast<ExtrusionEntityCollection*>(fills.entities[fill_id]));
auto *eec{static_cast<ExtrusionEntityCollection*>(fills.entities[fill_id])}; auto *eec{static_cast<ExtrusionEntityCollection*>(fills.entities[fill_id])};
if (eec == nullptr) { if (eec == nullptr || !predicate(eec)) {
continue;
}
if (eec->entities.empty()) {
continue;
}
if ((eec->role() == ExtrusionRole::Ironing) != ironing) {
continue;
}
if (is_overriden(eec, layer_tools, instance_id) != overriden) {
continue;
}
if (get_extruder_id(eec, layer_tools, region, instance_id) != extruder_id) {
continue; continue;
} }
@ -2788,20 +2771,31 @@ std::vector<InfillRange> extract_infill_ranges(
const Point* start_near = previous_position ? &(*(previous_position)) : nullptr; const Point* start_near = previous_position ? &(*(previous_position)) : nullptr;
ExtrusionEntitiesPtr temp_fill_extrusions{extract_infill_extrusions( ExtrusionEntitiesPtr extrusions{extract_infill_extrusions(
layer, layer,
region, region,
layerm.fills(), layerm.fills(),
it, it,
it_end, it_end,
layer_tools, [&](const ExtrusionEntityCollection *entity_collection){
instance_id, if (entity_collection->entities.empty()) {
extruder_id, return false;
overriden, }
ironing if ((entity_collection->role() == ExtrusionRole::Ironing) != ironing) {
return false;
}
if (is_overriden(entity_collection, layer_tools, instance_id) != overriden) {
return false;
}
if (get_extruder_id(entity_collection, layer_tools, region, instance_id) != extruder_id) {
return false;
}
return true;
}
)}; )};
const std::vector<ExtrusionEntityReference> sorted_extrusions{sort_fill_extrusions(temp_fill_extrusions, start_near)}; const std::vector<ExtrusionEntityReference> sorted_extrusions{sort_fill_extrusions(extrusions, start_near)};
if (! sorted_extrusions.empty()) { if (! sorted_extrusions.empty()) {
result.push_back({sorted_extrusions, &region}); result.push_back({sorted_extrusions, &region});