mirror of
https://git.mirrors.martin98.com/https://github.com/prusa3d/PrusaSlicer.git
synced 2025-08-12 07:48:58 +08:00
Refactor extract_infill_extrusions
This commit is contained in:
parent
a46aa2b5ca
commit
1cdca87d27
@ -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, ®ion});
|
result.push_back({sorted_extrusions, ®ion});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user