OrcaSlicer latest
OrcaSlicer
Loading...
Searching...
No Matches
Slic3r::WipingExtrusions Class Reference

#include </home/runner/work/OrcaSlicer/OrcaSlicer/src/libslic3r/GCode/ToolOrdering.hpp>

Collaboration diagram for Slic3r::WipingExtrusions:

Public Types

typedef boost::container::small_vector< int32_t, 3 > ExtruderPerCopy

Public Member Functions

bool is_anything_overridden () const
const ExtruderPerCopy * get_extruder_overrides (const ExtrusionEntity *entity, const PrintObject *object, int correct_extruder_id, size_t num_of_copies)
int get_support_extruder_overrides (const PrintObject *object)
int get_support_interface_extruder_overrides (const PrintObject *object)
float mark_wiping_extrusions (const Print &print, unsigned int old_extruder, unsigned int new_extruder, float volume_to_wipe)
void ensure_perimeters_infills_order (const Print &print)
bool is_overriddable (const ExtrusionEntityCollection &ee, const PrintConfig &print_config, const PrintObject &object, const PrintRegion &region) const
bool is_overriddable_and_mark (const ExtrusionEntityCollection &ee, const PrintConfig &print_config, const PrintObject &object, const PrintRegion &region)
bool is_support_overriddable (const ExtrusionRole role, const PrintObject &object) const
bool is_support_overriddable_and_mark (const ExtrusionRole role, const PrintObject &object)
bool is_support_overridden (const PrintObject *object) const
bool is_support_interface_overridden (const PrintObject *object) const
void set_layer_tools_ptr (const LayerTools *lt)
bool is_entity_overridden (const ExtrusionEntity *entity, const PrintObject *object, size_t copy_id) const

Private Member Functions

int first_nonsoluble_extruder_on_layer (const PrintConfig &print_config) const
int last_nonsoluble_extruder_on_layer (const PrintConfig &print_config) const
void set_extruder_override (const ExtrusionEntity *entity, const PrintObject *object, size_t copy_id, int extruder, size_t num_of_copies)
void set_support_extruder_override (const PrintObject *object, size_t copy_id, int extruder, size_t num_of_copies)
void set_support_interface_extruder_override (const PrintObject *object, size_t copy_id, int extruder, size_t num_of_copies)

Private Attributes

std::map< std::tuple< const ExtrusionEntity *, const PrintObject * >, ExtruderPerCopy > entity_map
std::map< const PrintObject *, int > support_map
std::map< const PrintObject *, int > support_intf_map
bool something_overridable = false
bool something_overridden = false
const LayerTools * m_layer_tools = nullptr

Detailed Description

Member Typedef Documentation

◆ ExtruderPerCopy

typedef boost::container::small_vector<int32_t, 3> Slic3r::WipingExtrusions::ExtruderPerCopy

Member Function Documentation

◆ ensure_perimeters_infills_order()

void Slic3r::WipingExtrusions::ensure_perimeters_infills_order ( const Print & print)
3566{
3567 if (! this->something_overridable)
3568 return;
3569
3570 const LayerTools& lt = *m_layer_tools;
3571 unsigned int first_nonsoluble_extruder = first_nonsoluble_extruder_on_layer(print.config());
3572 unsigned int last_nonsoluble_extruder = last_nonsoluble_extruder_on_layer(print.config());
3573
3574 for (const PrintObject* object : print.objects()) {
3575 // Finds this layer:
3576 const Layer* this_layer = object->get_layer_at_printz(lt.print_z, EPSILON);
3577 if (this_layer == nullptr)
3578 continue;
3579 size_t num_of_copies = object->instances().size();
3580
3581 for (size_t copy = 0; copy < num_of_copies; ++copy) { // iterate through copies first, so that we mark neighbouring infills to minimize travel moves
3582 for (const LayerRegion *layerm : this_layer->regions()) {
3583 const auto &region = layerm->region();
3584 //BBS
3585 if (!object->config().flush_into_infill && !object->config().flush_into_objects)
3586 continue;
3587
3588 bool is_infill_first = region.config().is_infill_first;
3589 for (const ExtrusionEntity* ee : layerm->fills.entities) { // iterate through all infill Collections
3590 auto* fill = dynamic_cast<const ExtrusionEntityCollection*>(ee);
3591
3592 if (!is_overriddable(*fill, print.config(), *object, region)
3593 || is_entity_overridden(fill, object, copy) )
3594 continue;
3595
3596 // This infill could have been overridden but was not - unless we do something, it could be
3597 // printed before its perimeter, or not be printed at all (in case its original extruder has
3598 // not been added to LayerTools
3599 // Either way, we will now force-override it with something suitable:
3600 //BBS
3601 if (is_infill_first
3602 //BBS
3603 //|| object->config().flush_into_objects // in this case the perimeter is overridden, so we can override by the last one safely
3604 || lt.is_extruder_order(lt.wall_extruder_id(region), last_nonsoluble_extruder // !infill_first, but perimeter is already printed when last extruder prints
3605 || ! lt.has_extruder(lt.sparse_infill_filament_id(region)))) // we have to force override - this could violate infill_first (FIXME)
3606 set_extruder_override(fill, object, copy, (is_infill_first ? first_nonsoluble_extruder : last_nonsoluble_extruder), num_of_copies);
3607 else {
3608 // In this case we can (and should) leave it to be printed normally.
3609 // Force overriding would mean it gets printed before its perimeter.
3610 }
3611 }
3612
3613 // Now the same for perimeters - see comments above for explanation:
3614 for (const ExtrusionEntity* ee : layerm->perimeters.entities) { // iterate through all perimeter Collections
3615 auto* fill = dynamic_cast<const ExtrusionEntityCollection*>(ee);
3616 if (is_overriddable(*fill, print.config(), *object, region) && ! is_entity_overridden(fill, object, copy))
3617 set_extruder_override(fill, object, copy, (is_infill_first ? last_nonsoluble_extruder : first_nonsoluble_extruder), num_of_copies);
3618 }
3619 }
3620 }
3621 }
3622}
#define EPSILON
Definition ColorUtils.cpp:64
const LayerTools * m_layer_tools
Definition ToolOrdering.hpp:113
bool is_overriddable(const ExtrusionEntityCollection &ee, const PrintConfig &print_config, const PrintObject &object, const PrintRegion &region) const
Definition ToolOrdering.cpp:3385
int last_nonsoluble_extruder_on_layer(const PrintConfig &print_config) const
Definition ToolOrdering.cpp:3374
int first_nonsoluble_extruder_on_layer(const PrintConfig &print_config) const
Definition ToolOrdering.cpp:3363
void set_extruder_override(const ExtrusionEntity *entity, const PrintObject *object, size_t copy_id, int extruder, size_t num_of_copies)
Definition ToolOrdering.cpp:3335
bool something_overridable
Definition ToolOrdering.hpp:111
bool is_entity_overridden(const ExtrusionEntity *entity, const PrintObject *object, size_t copy_id) const
Definition ToolOrdering.hpp:91
is_infill_first((ConfigOptionBool, small_area_infill_flow_compensation))((ConfigOptionEnum< WallDirection >

References Slic3r::Print::config(), ensure_perimeters_infills_order(), EPSILON, first_nonsoluble_extruder_on_layer(), Slic3r::LayerTools::has_extruder(), is_entity_overridden(), Slic3r::LayerTools::is_extruder_order(), Slic3r::is_infill_first(), is_overriddable(), last_nonsoluble_extruder_on_layer(), m_layer_tools, Slic3r::Print::objects(), Slic3r::LayerTools::print_z, Slic3r::Layer::regions(), set_extruder_override(), something_overridable, Slic3r::LayerTools::sparse_infill_filament_id(), and Slic3r::LayerTools::wall_extruder_id().

Referenced by ensure_perimeters_infills_order().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ first_nonsoluble_extruder_on_layer()

int Slic3r::WipingExtrusions::first_nonsoluble_extruder_on_layer ( const PrintConfig & print_config) const
private
3364{
3365 const LayerTools& lt = *m_layer_tools;
3366 for (auto extruders_it = lt.extruders.begin(); extruders_it != lt.extruders.end(); ++extruders_it)
3367 if (!print_config.filament_soluble.get_at(*extruders_it) && !print_config.filament_is_support.get_at(*extruders_it))
3368 return (*extruders_it);
3369
3370 return (-1);
3371}

References Slic3r::LayerTools::extruders, first_nonsoluble_extruder_on_layer(), and m_layer_tools.

Referenced by ensure_perimeters_infills_order(), and first_nonsoluble_extruder_on_layer().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_extruder_overrides()

const WipingExtrusions::ExtruderPerCopy * Slic3r::WipingExtrusions::get_extruder_overrides ( const ExtrusionEntity * entity,
const PrintObject * object,
int correct_extruder_id,
size_t num_of_copies )
3631{
3632 ExtruderPerCopy *overrides = nullptr;
3633 auto entity_map_it = entity_map.find(std::make_tuple(entity, object));
3634 if (entity_map_it != entity_map.end()) {
3635 overrides = &entity_map_it->second;
3636 overrides->resize(num_of_copies, -1);
3637 // Each -1 now means "print as usual" - we will replace it with actual extruder id (shifted it so we don't lose that information):
3638 std::replace(overrides->begin(), overrides->end(), -1, -correct_extruder_id-1);
3639 }
3640 return overrides;
3641}
std::map< std::tuple< const ExtrusionEntity *, const PrintObject * >, ExtruderPerCopy > entity_map
Definition ToolOrdering.hpp:107
boost::container::small_vector< int32_t, 3 > ExtruderPerCopy
Definition ToolOrdering.hpp:49

References entity_map, and get_extruder_overrides().

Referenced by get_extruder_overrides().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_support_extruder_overrides()

int Slic3r::WipingExtrusions::get_support_extruder_overrides ( const PrintObject * object)
3645{
3646 auto iter = support_map.find(object);
3647 if (iter != support_map.end())
3648 return iter->second;
3649
3650 return -1;
3651}
std::map< const PrintObject *, int > support_map
Definition ToolOrdering.hpp:109

References get_support_extruder_overrides(), and support_map.

Referenced by get_support_extruder_overrides(), and Slic3r::GCode::process_layer().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_support_interface_extruder_overrides()

int Slic3r::WipingExtrusions::get_support_interface_extruder_overrides ( const PrintObject * object)
3654{
3655 auto iter = support_intf_map.find(object);
3656 if (iter != support_intf_map.end())
3657 return iter->second;
3658
3659 return -1;
3660}
std::map< const PrintObject *, int > support_intf_map
Definition ToolOrdering.hpp:110

References get_support_interface_extruder_overrides(), and support_intf_map.

Referenced by get_support_interface_extruder_overrides(), and Slic3r::GCode::process_layer().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ is_anything_overridden()

bool Slic3r::WipingExtrusions::is_anything_overridden ( ) const
inline
44 { // if there are no overrides, all the agenda can be skipped - this function can tell us if that's the case
46 }
bool something_overridden
Definition ToolOrdering.hpp:112

References something_overridden.

◆ is_entity_overridden()

bool Slic3r::WipingExtrusions::is_entity_overridden ( const ExtrusionEntity * entity,
const PrintObject * object,
size_t copy_id ) const
inline
91 {
92 auto it = entity_map.find(std::make_tuple(entity, object));
93 return it != entity_map.end() && copy_id < it->second.size() && it->second[copy_id] != -1;
94 }

References entity_map.

Referenced by ensure_perimeters_infills_order().

Here is the caller graph for this function:

◆ is_overriddable()

bool Slic3r::WipingExtrusions::is_overriddable ( const ExtrusionEntityCollection & ee,
const PrintConfig & print_config,
const PrintObject & object,
const PrintRegion & region ) const
3386{
3387 if (print_config.filament_soluble.get_at(m_layer_tools->extruder(eec, region)))
3388 return false;
3389
3390 if (object.config().flush_into_objects)
3391 return true;
3392
3393 if (!object.config().flush_into_infill || eec.role() != erInternalInfill)
3394 return false;
3395
3396 return true;
3397}
@ erInternalInfill
Definition ExtrusionEntity.hpp:31

References Slic3r::erInternalInfill, is_overriddable(), m_layer_tools, and Slic3r::ExtrusionEntityCollection::role().

Referenced by ensure_perimeters_infills_order(), is_overriddable(), and is_overriddable_and_mark().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ is_overriddable_and_mark()

bool Slic3r::WipingExtrusions::is_overriddable_and_mark ( const ExtrusionEntityCollection & ee,
const PrintConfig & print_config,
const PrintObject & object,
const PrintRegion & region )
inline
63 {
64 bool out = this->is_overriddable(ee, print_config, object, region);
65 this->something_overridable |= out;
66 return out;
67 }

References is_overriddable(), and something_overridable.

Here is the call graph for this function:

◆ is_support_interface_overridden()

bool Slic3r::WipingExtrusions::is_support_interface_overridden ( const PrintObject * object) const
inline
81 {
82 return support_intf_map.find(object) != support_intf_map.end();
83 }

References support_intf_map.

◆ is_support_overriddable()

bool Slic3r::WipingExtrusions::is_support_overriddable ( const ExtrusionRole role,
const PrintObject & object ) const
3401{
3402 if (!object.config().flush_into_support)
3403 return false;
3404
3405 if (role == erMixed) {
3406 return object.config().support_filament == 0 || object.config().support_interface_filament == 0;
3407 }
3408 else if (role == erSupportMaterial || role == erSupportTransition) {
3409 return object.config().support_filament == 0;
3410 }
3411 else if (role == erSupportMaterialInterface) {
3412 return object.config().support_interface_filament == 0;
3413 }
3414
3415 return false;
3416}
@ erMixed
Definition ExtrusionEntity.hpp:47
@ erSupportMaterialInterface
Definition ExtrusionEntity.hpp:42
@ erSupportMaterial
Definition ExtrusionEntity.hpp:41
@ erSupportTransition
Definition ExtrusionEntity.hpp:43

References Slic3r::erMixed, Slic3r::erSupportMaterial, Slic3r::erSupportMaterialInterface, Slic3r::erSupportTransition, and is_support_overriddable().

Referenced by is_support_overriddable(), and is_support_overriddable_and_mark().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ is_support_overriddable_and_mark()

bool Slic3r::WipingExtrusions::is_support_overriddable_and_mark ( const ExtrusionRole role,
const PrintObject & object )
inline
71 {
72 bool out = this->is_support_overriddable(role, object);
73 this->something_overridable |= out;
74 return out;
75 }
bool is_support_overriddable(const ExtrusionRole role, const PrintObject &object) const
Definition ToolOrdering.cpp:3400

References is_support_overriddable(), and something_overridable.

Here is the call graph for this function:

◆ is_support_overridden()

bool Slic3r::WipingExtrusions::is_support_overridden ( const PrintObject * object) const
inline
77 {
78 return support_map.find(object) != support_map.end();
79 }

References support_map.

◆ last_nonsoluble_extruder_on_layer()

int Slic3r::WipingExtrusions::last_nonsoluble_extruder_on_layer ( const PrintConfig & print_config) const
private
3375{
3376 const LayerTools& lt = *m_layer_tools;
3377 for (auto extruders_it = lt.extruders.rbegin(); extruders_it != lt.extruders.rend(); ++extruders_it)
3378 if (!print_config.filament_soluble.get_at(*extruders_it) && !print_config.filament_is_support.get_at(*extruders_it))
3379 return (*extruders_it);
3380
3381 return (-1);
3382}

References Slic3r::LayerTools::extruders, last_nonsoluble_extruder_on_layer(), and m_layer_tools.

Referenced by ensure_perimeters_infills_order(), and last_nonsoluble_extruder_on_layer().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ mark_wiping_extrusions()

float Slic3r::WipingExtrusions::mark_wiping_extrusions ( const Print & print,
unsigned int old_extruder,
unsigned int new_extruder,
float volume_to_wipe )
3421{
3422 const LayerTools& lt = *m_layer_tools;
3423 const float min_infill_volume = 0.f; // ignore infill with smaller volume than this
3424
3425 if (! this->something_overridable || volume_to_wipe <= 0. || print.config().filament_soluble.get_at(old_extruder) || print.config().filament_soluble.get_at(new_extruder))
3426 return std::max(0.f, volume_to_wipe); // Soluble filament cannot be wiped in a random infill, neither the filament after it
3427
3428 // BBS
3429 if (print.config().filament_is_support.get_at(old_extruder) || print.config().filament_is_support.get_at(new_extruder))
3430 return std::max(0.f, volume_to_wipe); // Support filament cannot be used to print support, infill, wipe_tower, etc.
3431
3432 // we will sort objects so that dedicated for wiping are at the beginning:
3433 ConstPrintObjectPtrs object_list = print.objects().vector();
3434 // BBS: fix the exception caused by not fixed order between different objects
3435 std::sort(object_list.begin(), object_list.end(), [object_list](const PrintObject* a, const PrintObject* b) {
3436 if (a->config().flush_into_objects != b->config().flush_into_objects) {
3437 return a->config().flush_into_objects.getBool();
3438 }
3439 else {
3440 return a->id() < b->id();
3441 }
3442 });
3443
3444 // We will now iterate through
3445 // - first the dedicated objects to mark perimeters or infills (depending on infill_first)
3446 // - second through the dedicated ones again to mark infills or perimeters (depending on infill_first)
3447 // - then all the others to mark infills (in case that !infill_first, we must also check that the perimeter is finished already
3448 // this is controlled by the following variable:
3449 bool perimeters_done = false;
3450
3451 for (int i=0 ; i<(int)object_list.size() + (perimeters_done ? 0 : 1); ++i) {
3452 if (!perimeters_done && (i==(int)object_list.size() || !object_list[i]->config().flush_into_objects)) { // we passed the last dedicated object in list
3453 perimeters_done = true;
3454 i=-1; // let's go from the start again
3455 continue;
3456 }
3457
3458 const PrintObject* object = object_list[i];
3459
3460 // Finds this layer:
3461 const Layer* this_layer = object->get_layer_at_printz(lt.print_z, EPSILON);
3462 if (this_layer == nullptr)
3463 continue;
3464
3465 size_t num_of_copies = object->instances().size();
3466
3467 // iterate through copies (aka PrintObject instances) first, so that we mark neighbouring infills to minimize travel moves
3468 for (unsigned int copy = 0; copy < num_of_copies; ++copy) {
3469 for (const LayerRegion *layerm : this_layer->regions()) {
3470 const auto &region = layerm->region();
3471
3472 if (!object->config().flush_into_infill && !object->config().flush_into_objects && !object->config().flush_into_support)
3473 continue;
3474 bool wipe_into_infill_only = !object->config().flush_into_objects && object->config().flush_into_infill;
3475 bool is_infill_first = region.config().is_infill_first;
3476 if (is_infill_first != perimeters_done || wipe_into_infill_only) {
3477 for (const ExtrusionEntity* ee : layerm->fills.entities) { // iterate through all infill Collections
3478 auto* fill = dynamic_cast<const ExtrusionEntityCollection*>(ee);
3479
3480 if (!is_overriddable(*fill, print.config(), *object, region))
3481 continue;
3482
3483 if (wipe_into_infill_only && ! is_infill_first)
3484 // In this case we must check that the original extruder is used on this layer before the one we are overridding
3485 // (and the perimeters will be finished before the infill is printed):
3486 if (!lt.is_extruder_order(lt.wall_extruder_id(region), new_extruder))
3487 continue;
3488
3489 if ((!is_entity_overridden(fill, object, copy) && fill->total_volume() > min_infill_volume))
3490 { // this infill will be used to wipe this extruder
3491 set_extruder_override(fill, object, copy, new_extruder, num_of_copies);
3492 if ((volume_to_wipe -= float(fill->total_volume())) <= 0.f)
3493 // More material was purged already than asked for.
3494 return 0.f;
3495 }
3496 }
3497 }
3498
3499 // Now the same for perimeters - see comments above for explanation:
3500 if (object->config().flush_into_objects && is_infill_first == perimeters_done)
3501 {
3502 for (const ExtrusionEntity* ee : layerm->perimeters.entities) {
3503 auto* fill = dynamic_cast<const ExtrusionEntityCollection*>(ee);
3504 if (is_overriddable(*fill, print.config(), *object, region) && !is_entity_overridden(fill, object, copy) && fill->total_volume() > min_infill_volume) {
3505 set_extruder_override(fill, object, copy, new_extruder, num_of_copies);
3506 if ((volume_to_wipe -= float(fill->total_volume())) <= 0.f)
3507 // More material was purged already than asked for.
3508 return 0.f;
3509 }
3510 }
3511 }
3512 }
3513
3514 // BBS
3515 if (object->config().flush_into_support) {
3516 auto& object_config = object->config();
3517 const SupportLayer* this_support_layer = object->get_support_layer_at_printz(lt.print_z, EPSILON);
3518
3519 do {
3520 if (this_support_layer == nullptr)
3521 break;
3522
3523 bool support_overriddable = object_config.support_filament == 0;
3524 bool support_intf_overriddable = object_config.support_interface_filament == 0;
3525 if (!support_overriddable && !support_intf_overriddable)
3526 break;
3527
3528 auto &entities = this_support_layer->support_fills.entities;
3529 if (support_overriddable && !is_support_overridden(object) && !(object_config.support_interface_not_for_body.value && !support_intf_overriddable &&(new_extruder==object_config.support_interface_filament-1||old_extruder==object_config.support_interface_filament-1))) {
3530 set_support_extruder_override(object, copy, new_extruder, num_of_copies);
3531 for (const ExtrusionEntity* ee : entities) {
3532 if (ee->role() == erSupportMaterial || ee->role() == erSupportTransition)
3533 volume_to_wipe -= ee->total_volume();
3534
3535 if (volume_to_wipe <= 0.f)
3536 return 0.f;
3537 }
3538 }
3539
3540 if (support_intf_overriddable && !is_support_interface_overridden(object)) {
3541 set_support_interface_extruder_override(object, copy, new_extruder, num_of_copies);
3542 for (const ExtrusionEntity* ee : entities) {
3543 if (ee->role() == erSupportMaterialInterface)
3544 volume_to_wipe -= ee->total_volume();
3545
3546 if (volume_to_wipe <= 0.f)
3547 return 0.f;
3548 }
3549 }
3550 } while (0);
3551 }
3552 }
3553 }
3554 // Some purge remains to be done on the Wipe Tower.
3555 assert(volume_to_wipe > 0.);
3556 return volume_to_wipe;
3557}
void set_support_extruder_override(const PrintObject *object, size_t copy_id, int extruder, size_t num_of_copies)
Definition ToolOrdering.cpp:3350
bool is_support_overridden(const PrintObject *object) const
Definition ToolOrdering.hpp:77
void set_support_interface_extruder_override(const PrintObject *object, size_t copy_id, int extruder, size_t num_of_copies)
Definition ToolOrdering.cpp:3356
bool is_support_interface_overridden(const PrintObject *object) const
Definition ToolOrdering.hpp:81
std::vector< const PrintObject * > ConstPrintObjectPtrs
Definition Print.hpp:1009

References Slic3r::Print::config(), m_layer_tools, mark_wiping_extrusions(), Slic3r::Print::objects(), something_overridable, and Slic3r::ConstVectorOfPtrsAdaptor< T >::vector().

Referenced by mark_wiping_extrusions().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ set_extruder_override()

void Slic3r::WipingExtrusions::set_extruder_override ( const ExtrusionEntity * entity,
const PrintObject * object,
size_t copy_id,
int extruder,
size_t num_of_copies )
private
3336{
3337 something_overridden = true;
3338
3339 auto entity_map_it = (entity_map.emplace(std::make_tuple(entity, object), ExtruderPerCopy())).first; // (add and) return iterator
3340 ExtruderPerCopy& copies_vector = entity_map_it->second;
3341 copies_vector.resize(num_of_copies, -1);
3342
3343 if (copies_vector[copy_id] != -1)
3344 std::cout << "ERROR: Entity extruder overriden multiple times!!!\n"; // A debugging message - this must never happen.
3345
3346 copies_vector[copy_id] = extruder;
3347}

References entity_map, set_extruder_override(), and something_overridden.

Referenced by ensure_perimeters_infills_order(), and set_extruder_override().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ set_layer_tools_ptr()

void Slic3r::WipingExtrusions::set_layer_tools_ptr ( const LayerTools * lt)
inline
85{ m_layer_tools = lt; }

References m_layer_tools.

◆ set_support_extruder_override()

void Slic3r::WipingExtrusions::set_support_extruder_override ( const PrintObject * object,
size_t copy_id,
int extruder,
size_t num_of_copies )
private
3351{
3352 something_overridden = true;
3353 support_map.emplace(object, extruder);
3354}

References set_support_extruder_override(), something_overridden, and support_map.

Referenced by set_support_extruder_override().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ set_support_interface_extruder_override()

void Slic3r::WipingExtrusions::set_support_interface_extruder_override ( const PrintObject * object,
size_t copy_id,
int extruder,
size_t num_of_copies )
private
3357{
3358 something_overridden = true;
3359 support_intf_map.emplace(object, extruder);
3360}

References set_support_interface_extruder_override(), something_overridden, and support_intf_map.

Referenced by set_support_interface_extruder_override().

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ entity_map

std::map<std::tuple<const ExtrusionEntity*, const PrintObject *>, ExtruderPerCopy> Slic3r::WipingExtrusions::entity_map
private

◆ m_layer_tools

◆ something_overridable

bool Slic3r::WipingExtrusions::something_overridable = false
private

◆ something_overridden

bool Slic3r::WipingExtrusions::something_overridden = false
private

◆ support_intf_map

std::map<const PrintObject*, int> Slic3r::WipingExtrusions::support_intf_map
private

◆ support_map

std::map<const PrintObject*, int> Slic3r::WipingExtrusions::support_map
private

The documentation for this class was generated from the following files: