diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index 1dac959a55..f42ae4f831 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -2399,7 +2399,8 @@ void GCode::process_layer_single_object( for (uint32_t perimeter_id : island.perimeters) if (const auto *eec = static_cast(layerm.perimeters().entities[perimeter_id]); shall_print_this_extrusion_collection(eec, region)) { - assert(! eec->can_reverse()); + // This may not apply to Arachne, but maybe the Arachne gap fill should disable reverse as well? + // assert(! eec->can_reverse()); if (first) { first = false; init_layer_delayed(); diff --git a/src/libslic3r/GCode/ToolOrdering.cpp b/src/libslic3r/GCode/ToolOrdering.cpp index 99f3e9176b..fc2e7ae2cb 100644 --- a/src/libslic3r/GCode/ToolOrdering.cpp +++ b/src/libslic3r/GCode/ToolOrdering.cpp @@ -188,7 +188,7 @@ void ToolOrdering::initialize_layers(std::vector &zs) } // Decides whether this entity could be overridden -static [[nodiscard]] bool is_overriddable(const ExtrusionEntityCollection& eec, const LayerTools& lt, const PrintConfig& print_config, const PrintObject& object, const PrintRegion& region) +[[nodiscard]] static bool is_overriddable(const ExtrusionEntityCollection& eec, const LayerTools& lt, const PrintConfig& print_config, const PrintObject& object, const PrintRegion& region) { if (print_config.filament_soluble.get_at(lt.extruder(eec, region))) return false; @@ -631,7 +631,7 @@ void WipingExtrusions::set_extruder_override(const ExtrusionEntity* entity, size } // Finds first non-soluble extruder on the layer -static [[nodiscard]] int first_nonsoluble_extruder_on_layer(const PrintConfig& print_config, const LayerTools& layer_tools) +[[nodiscard]] static int first_nonsoluble_extruder_on_layer(const PrintConfig& print_config, const LayerTools& layer_tools) { for (auto extruders_it = layer_tools.extruders.begin(); extruders_it != layer_tools.extruders.end(); ++extruders_it) if (!print_config.filament_soluble.get_at(*extruders_it)) @@ -641,7 +641,7 @@ static [[nodiscard]] int first_nonsoluble_extruder_on_layer(const PrintConfig& p } // Finds last non-soluble extruder on the layer -static [[nodiscard]] int last_nonsoluble_extruder_on_layer(const PrintConfig& print_config, const LayerTools& layer_tools) +[[nodiscard]] static int last_nonsoluble_extruder_on_layer(const PrintConfig& print_config, const LayerTools& layer_tools) { for (auto extruders_it = layer_tools.extruders.rbegin(); extruders_it != layer_tools.extruders.rend(); ++extruders_it) if (!print_config.filament_soluble.get_at(*extruders_it)) diff --git a/src/libslic3r/Layer.cpp b/src/libslic3r/Layer.cpp index 95c9cf50e0..f785757d06 100644 --- a/src/libslic3r/Layer.cpp +++ b/src/libslic3r/Layer.cpp @@ -398,6 +398,9 @@ void Layer::make_perimeters() layerm.m_fill_expolygons_composite_bboxes.clear(); }; + for (LayerSlice &lslice : this->lslices_ex) + lslice.islands.clear(); + for (LayerRegionPtrs::iterator layerm = m_regions.begin(); layerm != m_regions.end(); ++ layerm) if (size_t region_id = layerm - m_regions.begin(); ! done[region_id]) { layer_region_reset_perimeters(**layerm); @@ -496,9 +499,6 @@ void Layer::sort_perimeters_into_islands( // If the current layer consists of multiple regions, then the fill_expolygons above are split by the source LayerRegion surfaces. const std::vector &layer_region_ids) { - for (LayerSlice &lslice : this->lslices_ex) - lslice.islands.clear(); - LayerRegion &this_layer_region = *m_regions[region_id]; // Bounding boxes of fill_expolygons. @@ -705,6 +705,7 @@ void Layer::sort_perimeters_into_islands( perimeter_slices_queue.pop_back(); } } + assert(perimeter_slices_queue.empty()); } void Layer::export_region_slices_to_svg(const char *path) const