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

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

Inheritance diagram for Slic3r::ExtrusionEntityCollection:
Collaboration diagram for Slic3r::ExtrusionEntityCollection:

Public Member Functions

ExtrusionEntity * clone () const override
ExtrusionEntity * clone_move () override
 ExtrusionEntityCollection ()
 ExtrusionEntityCollection (const ExtrusionEntityCollection &other)
 ExtrusionEntityCollection (ExtrusionEntityCollection &&other)
 ExtrusionEntityCollection (const ExtrusionPaths &paths)
ExtrusionEntityCollection & operator= (const ExtrusionEntityCollection &other)
ExtrusionEntityCollection & operator= (ExtrusionEntityCollection &&other)
 ~ExtrusionEntityCollection ()
 operator ExtrusionPaths () const
ExtrusionEntitiesPtr::const_iterator cbegin () const
ExtrusionEntitiesPtr::const_iterator cend () const
ExtrusionEntitiesPtr::const_iterator begin () const
ExtrusionEntitiesPtr::const_iterator end () const
ExtrusionEntitiesPtr::iterator begin ()
ExtrusionEntitiesPtr::iterator end ()
bool is_collection () const override
ExtrusionRole role () const override
bool has_perimeters () const
bool has_infill () const
bool has_solid_infill () const
bool can_sort () const override
bool can_reverse () const override
void set_reverse () override
bool empty () const
void clear ()
void swap (ExtrusionEntityCollection &c)
void append (const ExtrusionEntity &entity)
void append (ExtrusionEntity &&entity)
void append (const ExtrusionEntitiesPtr &entities)
void append (ExtrusionEntitiesPtr &&src)
void append (const ExtrusionPaths &paths)
void append (ExtrusionPaths &&paths)
void replace (size_t i, const ExtrusionEntity &entity)
void remove (size_t i)
ExtrusionEntityCollection chained_path_from (const Point &start_near, ExtrusionRole role=erMixed) const
void reverse () override
Point first_point () const override
const Point3 & first_point3 () const override
Point last_point () const override
const Point3 & last_point3 () const override
void polygons_covered_by_width (Polygons &out, const float scaled_epsilon) const override
void polygons_covered_by_spacing (Polygons &out, const float scaled_epsilon) const override
Polygons polygons_covered_by_width (const float scaled_epsilon=0.f) const
Polygons polygons_covered_by_spacing (const float scaled_epsilon=0.f) const
size_t items_count () const
size_t size () const
ExtrusionEntityCollection flatten (bool preserve_ordering=false) const
 Returns a flattened copy of this ExtrusionEntityCollection. That is, all of the items in its entities vector are not collections. You should be iterating over flatten().entities if you are interested in the underlying ExtrusionEntities (and don't care about hierarchy).
double min_mm3_per_mm () const override
double total_volume () const override
Polyline as_polyline () const override
void collect_polylines (Polylines &dst) const override
void collect_points (Points &dst) const override
double length () const override
virtual bool is_loop () const
virtual Polylines as_polylines () const

Static Public Member Functions

static ExtrusionEntityCollection chained_path_from (const ExtrusionEntitiesPtr &extrusion_entities, const Point &start_near, ExtrusionRole role=erMixed)
static std::string role_to_string (ExtrusionRole role)
static ExtrusionRole string_to_role (const std::string_view role)

Public Attributes

ExtrusionEntitiesPtr entities
bool no_sort
int inset_idx = -1

Private Attributes

bool is_reverse {true}

Detailed Description

Constructor & Destructor Documentation

◆ ExtrusionEntityCollection() [1/4]

Slic3r::ExtrusionEntityCollection::ExtrusionEntityCollection ( )
inline
41: no_sort(false) {}
bool no_sort
Definition ExtrusionEntityCollection.hpp:40

References no_sort.

Referenced by ExtrusionEntityCollection(), ExtrusionEntityCollection(), chained_path_from(), chained_path_from(), clone(), clone_move(), flatten(), items_count(), operator=(), operator=(), and swap().

Here is the caller graph for this function:

◆ ExtrusionEntityCollection() [2/4]

Slic3r::ExtrusionEntityCollection::ExtrusionEntityCollection ( const ExtrusionEntityCollection & other)
inline
42: no_sort(other.no_sort), is_reverse(other.is_reverse) { this->append(other.entities); }
void append(const ExtrusionEntity &entity)
Definition ExtrusionEntityCollection.hpp:97
bool is_reverse
Definition ExtrusionEntityCollection.hpp:175

References ExtrusionEntityCollection(), append(), entities, is_reverse, and no_sort.

Here is the call graph for this function:

◆ ExtrusionEntityCollection() [3/4]

Slic3r::ExtrusionEntityCollection::ExtrusionEntityCollection ( ExtrusionEntityCollection && other)
inline
43: entities(std::move(other.entities)), no_sort(other.no_sort), is_reverse(other.is_reverse) {}
ExtrusionEntitiesPtr entities
Definition ExtrusionEntityCollection.hpp:39

References ExtrusionEntityCollection(), entities, is_reverse, and no_sort.

Here is the call graph for this function:

◆ ExtrusionEntityCollection() [4/4]

Slic3r::ExtrusionEntityCollection::ExtrusionEntityCollection ( const ExtrusionPaths & paths)
explicit
27 : no_sort(false)
28{
29 this->append(paths);
30}

References append(), and no_sort.

Here is the call graph for this function:

◆ ~ExtrusionEntityCollection()

Slic3r::ExtrusionEntityCollection::~ExtrusionEntityCollection ( )
inline
53{ clear(); }
void clear()
Definition ExtrusionEntityCollection.cpp:48

References clear().

Here is the call graph for this function:

Member Function Documentation

◆ append() [1/6]

void Slic3r::ExtrusionEntityCollection::append ( const ExtrusionEntitiesPtr & entities)
inline
99 {
100 this->entities.reserve(this->entities.size() + entities.size());
101 for (const ExtrusionEntity *ptr : entities)
102 this->entities.emplace_back(ptr->clone());
103 }

References entities.

◆ append() [2/6]

void Slic3r::ExtrusionEntityCollection::append ( const ExtrusionEntity & entity)
inline
97{ this->entities.emplace_back(entity.clone()); }

References Slic3r::ExtrusionEntity::clone().

Referenced by ExtrusionEntityCollection(), ExtrusionEntityCollection(), Slic3r::PerimeterGenerator::apply_extra_perimeters(), Slic3r::FillConcentricInternal::fill_surface_extrusion(), flatten(), Slic3r::PerimeterGenerator::process_classic(), Slic3r::traverse_extrusions(), and Slic3r::traverse_loops().

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

◆ append() [3/6]

void Slic3r::ExtrusionEntityCollection::append ( const ExtrusionPaths & paths)
inline
112 {
113 this->entities.reserve(this->entities.size() + paths.size());
114 for (const ExtrusionPath &path : paths)
115 this->entities.emplace_back(path.clone());
116 }

◆ append() [4/6]

void Slic3r::ExtrusionEntityCollection::append ( ExtrusionEntitiesPtr && src)
inline
104 {
105 if (entities.empty())
106 entities = std::move(src);
107 else {
108 std::move(std::begin(src), std::end(src), std::back_inserter(entities));
109 src.clear();
110 }
111 }

References entities.

◆ append() [5/6]

void Slic3r::ExtrusionEntityCollection::append ( ExtrusionEntity && entity)
inline
98{ this->entities.emplace_back(entity.clone_move()); }

◆ append() [6/6]

void Slic3r::ExtrusionEntityCollection::append ( ExtrusionPaths && paths)
inline
117 {
118 this->entities.reserve(this->entities.size() + paths.size());
119 for (ExtrusionPath &path : paths)
120 this->entities.emplace_back(new ExtrusionPath(std::move(path)));
121 }

◆ as_polyline()

Polyline Slic3r::ExtrusionEntityCollection::as_polyline ( ) const
inlineoverridevirtual

Implements Slic3r::ExtrusionEntity.

154 {
155 throw Slic3r::RuntimeError("Calling as_polyline() on a ExtrusionEntityCollection");
156 return Polyline();
157 };

◆ as_polylines()

virtual Polylines Slic3r::ExtrusionEntity::as_polylines ( ) const
inlinevirtualinherited
155{ Polylines dst; this->collect_polylines(dst); return dst; }
virtual void collect_polylines(Polylines &dst) const =0
std::vector< Polyline > Polylines
Definition Polyline.hpp:22

References collect_polylines().

Referenced by Slic3r::SupportMaterialInternal::remove_bridges_from_contacts().

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

◆ begin() [1/2]

ExtrusionEntitiesPtr::iterator Slic3r::ExtrusionEntityCollection::begin ( )
inline
60{ return this->entities.begin(); }

◆ begin() [2/2]

ExtrusionEntitiesPtr::const_iterator Slic3r::ExtrusionEntityCollection::begin ( ) const
inline
58{ return this->entities.cbegin(); }

◆ can_reverse()

bool Slic3r::ExtrusionEntityCollection::can_reverse ( ) const
inlineoverridevirtual

Reimplemented from Slic3r::ExtrusionEntity.

87 {
88 if (this->no_sort)
89 return false;
90 else
91 return is_reverse;
92 }

References is_reverse.

◆ can_sort()

bool Slic3r::ExtrusionEntityCollection::can_sort ( ) const
inlineoverridevirtual

Reimplemented from Slic3r::ExtrusionEntity.

85{ return !this->no_sort; }

Referenced by Slic3r::GCode::ObjectByExtruder::Island::Region::append().

Here is the caller graph for this function:

◆ cbegin()

ExtrusionEntitiesPtr::const_iterator Slic3r::ExtrusionEntityCollection::cbegin ( ) const
inline
56{ return this->entities.cbegin(); }

◆ cend()

ExtrusionEntitiesPtr::const_iterator Slic3r::ExtrusionEntityCollection::cend ( ) const
inline
57{ return this->entities.cend(); }

◆ chained_path_from() [1/2]

ExtrusionEntityCollection Slic3r::ExtrusionEntityCollection::chained_path_from ( const ExtrusionEntitiesPtr & extrusion_entities,
const Point & start_near,
ExtrusionRole role = erMixed )
static
93{
94 // Return a filtered copy of the collection.
96 out.entities = filter_by_extrusion_role(extrusion_entities, role);
97 // Clone the extrusion entities.
98 for (auto &ptr : out.entities)
99 ptr = ptr->clone();
100 chain_and_reorder_extrusion_entities(out.entities, &start_near);
101 return out;
102}
ExtrusionEntityCollection()
Definition ExtrusionEntityCollection.hpp:41
ExtrusionRole role() const override
Definition ExtrusionEntityCollection.hpp:64
void chain_and_reorder_extrusion_entities(std::vector< ExtrusionEntity * > &entities, const Point &start_near)
Definition ShortestPath.cpp:1501
ExtrusionEntitiesPtr filter_by_extrusion_role(const ExtrusionEntitiesPtr &extrusion_entities, ExtrusionRole role)
Definition ExtrusionEntityCollection.hpp:25

References ExtrusionEntityCollection(), Slic3r::chain_and_reorder_extrusion_entities(), entities, Slic3r::filter_by_extrusion_role(), and role().

Referenced by chained_path_from().

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

◆ chained_path_from() [2/2]

ExtrusionEntityCollection Slic3r::ExtrusionEntityCollection::chained_path_from ( const Point & start_near,
ExtrusionRole role = erMixed ) const
inline
126 { return this->no_sort ? *this : chained_path_from(this->entities, start_near, role); }
static ExtrusionEntityCollection chained_path_from(const ExtrusionEntitiesPtr &extrusion_entities, const Point &start_near, ExtrusionRole role=erMixed)
Definition ExtrusionEntityCollection.cpp:92

References ExtrusionEntityCollection(), chained_path_from(), Slic3r::erMixed, and role().

Here is the call graph for this function:

◆ clear()

void Slic3r::ExtrusionEntityCollection::clear ( )
49{
50 for (size_t i = 0; i < this->entities.size(); ++i)
51 delete this->entities[i];
52 this->entities.clear();
53}

References entities.

Referenced by ~ExtrusionEntityCollection(), and operator=().

Here is the caller graph for this function:

◆ clone()

ExtrusionEntity * Slic3r::ExtrusionEntityCollection::clone ( ) const
overridevirtual

Implements Slic3r::ExtrusionEntity.

66{
67 return new ExtrusionEntityCollection(*this);
68}

References ExtrusionEntityCollection().

Referenced by operator=().

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

◆ clone_move()

ExtrusionEntity * Slic3r::ExtrusionEntityCollection::clone_move ( )
inlineoverridevirtual

Implements Slic3r::ExtrusionEntity.

37{ return new ExtrusionEntityCollection(std::move(*this)); }

References ExtrusionEntityCollection().

Here is the call graph for this function:

◆ collect_points()

void Slic3r::ExtrusionEntityCollection::collect_points ( Points & dst) const
inlineoverridevirtual

Implements Slic3r::ExtrusionEntity.

164 {
165 for (ExtrusionEntity* extrusion_entity : this->entities)
166 extrusion_entity->collect_points(dst);
167 }

◆ collect_polylines()

void Slic3r::ExtrusionEntityCollection::collect_polylines ( Polylines & dst) const
inlineoverridevirtual

Implements Slic3r::ExtrusionEntity.

159 {
160 for (ExtrusionEntity* extrusion_entity : this->entities)
161 extrusion_entity->collect_polylines(dst);
162 }

◆ empty()

bool Slic3r::ExtrusionEntityCollection::empty ( ) const
inline
94{ return this->entities.empty(); }

Referenced by Slic3r::GCode::_do_export(), Slic3r::Print::_make_skirt(), Slic3r::GCode::collect_layers_to_print(), Slic3r::GCode::emit_belt_brim_bands(), Slic3r::make_belt_brim(), and Slic3r::PerimeterGenerator::process_classic().

Here is the caller graph for this function:

◆ end() [1/2]

ExtrusionEntitiesPtr::iterator Slic3r::ExtrusionEntityCollection::end ( )
inline
61{ return this->entities.end(); }

◆ end() [2/2]

ExtrusionEntitiesPtr::const_iterator Slic3r::ExtrusionEntityCollection::end ( ) const
inline
59{ return this->entities.cend(); }

◆ first_point()

Point Slic3r::ExtrusionEntityCollection::first_point ( ) const
inlineoverridevirtual

Implements Slic3r::ExtrusionEntity.

128{ return this->entities.front()->first_point(); }

Referenced by Slic3r::GCode::process_layer().

Here is the caller graph for this function:

◆ first_point3()

const Point3 & Slic3r::ExtrusionEntityCollection::first_point3 ( ) const
inlineoverridevirtual

Implements Slic3r::ExtrusionEntity.

129{ return this->entities.front()->first_point3(); }

◆ flatten()

ExtrusionEntityCollection Slic3r::ExtrusionEntityCollection::flatten ( bool preserve_ordering = false) const

Returns a flattened copy of this ExtrusionEntityCollection. That is, all of the items in its entities vector are not collections. You should be iterating over flatten().entities if you are interested in the underlying ExtrusionEntities (and don't care about hierarchy).

Parameters
preserve_orderingFlag to method that will flatten if and only if the underlying collection is sortable when True (default: False).
130{
131 struct Flatten {
132 Flatten(bool preserve_ordering) : preserve_ordering(preserve_ordering) {}
133 ExtrusionEntityCollection out;
134 bool preserve_ordering;
135 void recursive_do(const ExtrusionEntityCollection &collection) {
136 if (collection.no_sort && preserve_ordering) {
137 // Don't flatten whatever happens below this level.
138 out.append(collection);
139 } else {
140 for (const ExtrusionEntity *entity : collection.entities)
141 if (entity->is_collection())
142 this->recursive_do(*static_cast<const ExtrusionEntityCollection*>(entity));
143 else
144 out.append(*entity);
145 }
146 }
147 } flatten(preserve_ordering);
148
149 flatten.recursive_do(*this);
150 return flatten.out;
151}
ExtrusionEntityCollection flatten(bool preserve_ordering=false) const
Returns a flattened copy of this ExtrusionEntityCollection. That is, all of the items in its entities...
Definition ExtrusionEntityCollection.cpp:129

References ExtrusionEntityCollection(), append(), entities, flatten(), Slic3r::ExtrusionEntity::is_collection(), and no_sort.

Referenced by flatten().

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

◆ has_infill()

bool Slic3r::ExtrusionEntityCollection::has_infill ( ) const
inline
77 {
78 return std::any_of(entities.begin(), entities.end(), [](const ExtrusionEntity* ee) { return is_infill(ee->role()); });
79 }

References entities.

Referenced by Slic3r::region_filament().

Here is the caller graph for this function:

◆ has_perimeters()

bool Slic3r::ExtrusionEntityCollection::has_perimeters ( ) const
inline
73 {
74 return std::any_of(entities.begin(), entities.end(), [](const ExtrusionEntity* ee) { return is_perimeter(ee->role()); });
75 }

References entities.

◆ has_solid_infill()

bool Slic3r::ExtrusionEntityCollection::has_solid_infill ( ) const
inline
81 {
82 return std::any_of(entities.begin(), entities.end(), [](const ExtrusionEntity* ee) { return is_solid_infill(ee->role()); });
83 }

References entities.

Referenced by Slic3r::region_filament().

Here is the caller graph for this function:

◆ is_collection()

bool Slic3r::ExtrusionEntityCollection::is_collection ( ) const
inlineoverridevirtual

Reimplemented from Slic3r::ExtrusionEntity.

63{ return true; }

◆ is_loop()

virtual bool Slic3r::ExtrusionEntity::is_loop ( ) const
inlinevirtualinherited

Reimplemented in Slic3r::ExtrusionLoop, and Slic3r::ExtrusionMultiPath.

125{ return false; }

Referenced by Slic3r::chain_extrusion_entities_impl(), Slic3r::SupportMaterialInternal::collect_bridging_perimeter_areas(), Slic3r::GCode::compute_farthest_point(), Slic3r::SupportMaterialInternal::has_bridging_perimeters(), and Slic3r::is_unsupported_loop().

Here is the caller graph for this function:

◆ items_count()

size_t Slic3r::ExtrusionEntityCollection::items_count ( ) const
118{
119 size_t count = 0;
120 for (const ExtrusionEntity *entity : this->entities)
121 if (entity->is_collection())
122 count += static_cast<const ExtrusionEntityCollection*>(entity)->items_count();
123 else
124 ++ count;
125 return count;
126}
static unsigned int count
Definition AuxiliaryDataViewModel.cpp:246
size_t items_count() const
Definition ExtrusionEntityCollection.cpp:117

References ExtrusionEntityCollection(), count, entities, and items_count().

Referenced by items_count().

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

◆ last_point()

Point Slic3r::ExtrusionEntityCollection::last_point ( ) const
inlineoverridevirtual

Implements Slic3r::ExtrusionEntity.

130{ return this->entities.back()->last_point(); }

◆ last_point3()

const Point3 & Slic3r::ExtrusionEntityCollection::last_point3 ( ) const
inlineoverridevirtual

Implements Slic3r::ExtrusionEntity.

131{ return this->entities.back()->last_point3(); }

◆ length()

double Slic3r::ExtrusionEntityCollection::length ( ) const
inlineoverridevirtual

Implements Slic3r::ExtrusionEntity.

169 {
170 throw Slic3r::RuntimeError("Calling length() on a ExtrusionEntityCollection");
171 return 0.;
172 }

◆ min_mm3_per_mm()

double Slic3r::ExtrusionEntityCollection::min_mm3_per_mm ( ) const
overridevirtual

Implements Slic3r::ExtrusionEntity.

154{
155 double min_mm3_per_mm = std::numeric_limits<double>::max();
156 for (const ExtrusionEntity *entity : this->entities)
157 min_mm3_per_mm = std::min(min_mm3_per_mm, entity->min_mm3_per_mm());
158 return min_mm3_per_mm;
159}
double min_mm3_per_mm() const override
Definition ExtrusionEntityCollection.cpp:153

References entities, and min_mm3_per_mm().

Referenced by min_mm3_per_mm().

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

◆ operator ExtrusionPaths()

Slic3r::ExtrusionEntityCollection::operator ExtrusionPaths ( ) const
explicit
56{
57 ExtrusionPaths paths;
58 for (const ExtrusionEntity *ptr : this->entities) {
59 if (const ExtrusionPath *path = dynamic_cast<const ExtrusionPath*>(ptr))
60 paths.push_back(*path);
61 }
62 return paths;
63}
std::vector< ExtrusionPath > ExtrusionPaths
Definition ExtrusionEntity.hpp:395

References entities.

◆ operator=() [1/2]

ExtrusionEntityCollection & Slic3r::ExtrusionEntityCollection::operator= ( const ExtrusionEntityCollection & other)
33{
34 clear();
35 this->entities = other.entities;
36 for (size_t i = 0; i < this->entities.size(); ++i)
37 this->entities[i] = this->entities[i]->clone();
38 this->no_sort = other.no_sort;
39 return *this;
40}
ExtrusionEntity * clone() const override
Definition ExtrusionEntityCollection.cpp:65

References ExtrusionEntityCollection(), clear(), clone(), entities, and no_sort.

Here is the call graph for this function:

◆ operator=() [2/2]

ExtrusionEntityCollection & Slic3r::ExtrusionEntityCollection::operator= ( ExtrusionEntityCollection && other)
inline
47 {
48 this->entities = std::move(other.entities);
49 this->no_sort = other.no_sort;
50 is_reverse = other.is_reverse;
51 return *this;
52 }

References ExtrusionEntityCollection(), and is_reverse.

Here is the call graph for this function:

◆ polygons_covered_by_spacing() [1/2]

Polygons Slic3r::ExtrusionEntityCollection::polygons_covered_by_spacing ( const float scaled_epsilon = 0.f) const
inline
143 { Polygons out; this->polygons_covered_by_spacing(out, scaled_epsilon); return out; }
void polygons_covered_by_spacing(Polygons &out, const float scaled_epsilon) const override
Definition ExtrusionEntityCollection.cpp:110
std::vector< Polygon, PointsAllocator< Polygon > > Polygons
Definition Polygon.hpp:22

References polygons_covered_by_spacing().

Here is the call graph for this function:

◆ polygons_covered_by_spacing() [2/2]

void Slic3r::ExtrusionEntityCollection::polygons_covered_by_spacing ( Polygons & out,
const float scaled_epsilon ) const
overridevirtual

Implements Slic3r::ExtrusionEntity.

111{
112 for (const ExtrusionEntity *entity : this->entities)
113 entity->polygons_covered_by_spacing(out, scaled_epsilon);
114}

References entities.

Referenced by Slic3r::Fill::_create_gap_fill(), Slic3r::make_brim(), Slic3r::outer_inner_brim_area(), and polygons_covered_by_spacing().

Here is the caller graph for this function:

◆ polygons_covered_by_width() [1/2]

Polygons Slic3r::ExtrusionEntityCollection::polygons_covered_by_width ( const float scaled_epsilon = 0.f) const
inline
141 { Polygons out; this->polygons_covered_by_width(out, scaled_epsilon); return out; }
void polygons_covered_by_width(Polygons &out, const float scaled_epsilon) const override
Definition ExtrusionEntityCollection.cpp:104

References polygons_covered_by_width().

Here is the call graph for this function:

◆ polygons_covered_by_width() [2/2]

void Slic3r::ExtrusionEntityCollection::polygons_covered_by_width ( Polygons & out,
const float scaled_epsilon ) const
overridevirtual

Implements Slic3r::ExtrusionEntity.

105{
106 for (const ExtrusionEntity *entity : this->entities)
107 entity->polygons_covered_by_width(out, scaled_epsilon);
108}

References entities, and polygons_covered_by_width().

Referenced by polygons_covered_by_width(), and polygons_covered_by_width().

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

◆ remove()

void Slic3r::ExtrusionEntityCollection::remove ( size_t i)
87{
88 delete this->entities[i];
89 this->entities.erase(this->entities.begin() + i);
90}

References entities.

◆ replace()

void Slic3r::ExtrusionEntityCollection::replace ( size_t i,
const ExtrusionEntity & entity )
81{
82 delete this->entities[i];
83 this->entities[i] = entity.clone();
84}

References Slic3r::ExtrusionEntity::clone(), and entities.

Referenced by Slic3r::PerimeterGenerator::process_classic().

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

◆ reverse()

void Slic3r::ExtrusionEntityCollection::reverse ( )
overridevirtual

Implements Slic3r::ExtrusionEntity.

71{
72 for (ExtrusionEntity *ptr : this->entities)
73 // Don't reverse it if it's a loop, as it doesn't change anything in terms of elements ordering
74 // and caller might rely on winding order
75 if (! ptr->is_loop())
76 ptr->reverse();
77 std::reverse(this->entities.begin(), this->entities.end());
78}

References entities.

Referenced by Slic3r::Print::_make_skirt(), and Slic3r::PerimeterGenerator::process_classic().

Here is the caller graph for this function:

◆ role()

ExtrusionRole Slic3r::ExtrusionEntityCollection::role ( ) const
inlineoverridevirtual

Implements Slic3r::ExtrusionEntity.

64 {
66 for (const ExtrusionEntity *ee : entities) {
67 ExtrusionRole er = ee->role();
68 out = (out == erNone || out == er) ? er : erMixed;
69 }
70 return out;
71 }
ExtrusionRole
Definition ExtrusionEntity.hpp:26
@ erMixed
Definition ExtrusionEntity.hpp:47
@ erNone
Definition ExtrusionEntity.hpp:27

References entities, Slic3r::erMixed, and Slic3r::erNone.

Referenced by chained_path_from(), chained_path_from(), Slic3r::WipingExtrusions::is_overriddable(), and Slic3r::GCode::process_layer().

Here is the caller graph for this function:

◆ role_to_string()

std::string Slic3r::ExtrusionEntity::role_to_string ( ExtrusionRole role)
staticinherited
674{
675 switch (role) {
676 case erNone : return L("Undefined");
677 case erPerimeter : return L("Inner wall");
678 case erExternalPerimeter : return L("Outer wall");
679 case erOverhangPerimeter : return L("Overhang wall");
680 case erInternalInfill : return L("Sparse infill");
681 case erSolidInfill : return L("Internal solid infill");
682 case erTopSolidInfill : return L("Top surface");
683 case erBottomSurface : return L("Bottom surface");
684 case erIroning : return L("Ironing");
685 case erBridgeInfill : return L("Bridge");
686 case erInternalBridgeInfill : return L("Internal Bridge");
687 case erGapFill : return L("Gap infill");
688 case erSkirt : return L("Skirt");
689 case erBrim : return L("Brim");
690 case erSupportMaterial : return L("Support");
691 case erSupportMaterialInterface : return L("Support interface");
692 case erSupportTransition : return L("Support transition");
693 case erWipeTower : return L("Prime tower");
694 case erCustom : return L("Custom");
695 case erMixed : return L("Multiple");
696 default : assert(false);
697 }
698 return "";
699}
#define L(s)
Definition ExtrusionEntity.cpp:25
virtual ExtrusionRole role() const =0
@ erBottomSurface
Definition ExtrusionEntity.hpp:34
@ erExternalPerimeter
Definition ExtrusionEntity.hpp:29
@ erGapFill
Definition ExtrusionEntity.hpp:38
@ erCustom
Definition ExtrusionEntity.hpp:45
@ erSupportMaterialInterface
Definition ExtrusionEntity.hpp:42
@ erSupportMaterial
Definition ExtrusionEntity.hpp:41
@ erWipeTower
Definition ExtrusionEntity.hpp:44
@ erBrim
Definition ExtrusionEntity.hpp:40
@ erSolidInfill
Definition ExtrusionEntity.hpp:32
@ erBridgeInfill
Definition ExtrusionEntity.hpp:36
@ erInternalBridgeInfill
Definition ExtrusionEntity.hpp:37
@ erTopSolidInfill
Definition ExtrusionEntity.hpp:33
@ erSkirt
Definition ExtrusionEntity.hpp:39
@ erSupportTransition
Definition ExtrusionEntity.hpp:43
@ erOverhangPerimeter
Definition ExtrusionEntity.hpp:30
@ erIroning
Definition ExtrusionEntity.hpp:35
@ erPerimeter
Definition ExtrusionEntity.hpp:28
@ erInternalInfill
Definition ExtrusionEntity.hpp:31

References Slic3r::erBottomSurface, Slic3r::erBridgeInfill, Slic3r::erBrim, Slic3r::erCustom, Slic3r::erExternalPerimeter, Slic3r::erGapFill, Slic3r::erInternalBridgeInfill, Slic3r::erInternalInfill, Slic3r::erIroning, Slic3r::erMixed, Slic3r::erNone, Slic3r::erOverhangPerimeter, Slic3r::erPerimeter, Slic3r::erSkirt, Slic3r::erSolidInfill, Slic3r::erSupportMaterial, Slic3r::erSupportMaterialInterface, Slic3r::erSupportTransition, Slic3r::erTopSolidInfill, Slic3r::erWipeTower, L, and role().

Referenced by Slic3r::WipeTowerWriter::WipeTowerWriter(), Slic3r::WipeTowerWriter2::WipeTowerWriter2(), Slic3r::GCode::_do_export(), Slic3r::GCode::_extrude(), and Slic3r::anonymous_namespace{GCodeStatistics.cpp}::features_json().

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

◆ set_reverse()

void Slic3r::ExtrusionEntityCollection::set_reverse ( )
inlineoverridevirtual

Reimplemented from Slic3r::ExtrusionEntity.

93{ is_reverse = false; }

References is_reverse.

◆ size()

size_t Slic3r::ExtrusionEntityCollection::size ( ) const
inline
145{ return entities.size(); }

References entities.

Referenced by Slic3r::PerimeterGenerator::process_classic().

Here is the caller graph for this function:

◆ string_to_role()

ExtrusionRole Slic3r::ExtrusionEntity::string_to_role ( const std::string_view role)
staticinherited
702{
703 if (role == L("Inner wall"))
704 return erPerimeter;
705 else if (role == L("Outer wall"))
706 return erExternalPerimeter;
707 else if (role == L("Overhang wall"))
708 return erOverhangPerimeter;
709 else if (role == L("Sparse infill"))
710 return erInternalInfill;
711 else if (role == L("Internal solid infill"))
712 return erSolidInfill;
713 else if (role == L("Top surface"))
714 return erTopSolidInfill;
715 else if (role == L("Bottom surface"))
716 return erBottomSurface;
717 else if (role == L("Ironing"))
718 return erIroning;
719 else if (role == L("Bridge"))
720 return erBridgeInfill;
721 else if (role == L("Internal Bridge"))
723 else if (role == L("Gap infill"))
724 return erGapFill;
725 else if (role == ("Skirt"))
726 return erSkirt;
727 else if (role == ("Brim"))
728 return erBrim;
729 else if (role == L("Support"))
730 return erSupportMaterial;
731 else if (role == L("Support interface"))
733 else if (role == L("Support transition"))
734 return erSupportTransition;
735 else if (role == L("Prime tower"))
736 return erWipeTower;
737 else if (role == L("Custom"))
738 return erCustom;
739 else if (role == L("Multiple"))
740 return erMixed;
741 else
742 return erNone;
743}

References Slic3r::erBottomSurface, Slic3r::erBridgeInfill, Slic3r::erBrim, Slic3r::erCustom, Slic3r::erExternalPerimeter, Slic3r::erGapFill, Slic3r::erInternalBridgeInfill, Slic3r::erInternalInfill, Slic3r::erIroning, Slic3r::erMixed, Slic3r::erNone, Slic3r::erOverhangPerimeter, Slic3r::erPerimeter, Slic3r::erSkirt, Slic3r::erSolidInfill, Slic3r::erSupportMaterial, Slic3r::erSupportMaterialInterface, Slic3r::erSupportTransition, Slic3r::erTopSolidInfill, Slic3r::erWipeTower, L, and role().

Referenced by Slic3r::FanMover::_process_gcode_line(), and Slic3r::GCodeProcessor::process_tags().

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

◆ swap()

void Slic3r::ExtrusionEntityCollection::swap ( ExtrusionEntityCollection & c)
43{
44 std::swap(this->entities, c.entities);
45 std::swap(this->no_sort, c.no_sort);
46}

References ExtrusionEntityCollection(), entities, and no_sort.

Referenced by Slic3r::PerimeterGenerator::apply_extra_perimeters().

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

◆ total_volume()

double Slic3r::ExtrusionEntityCollection::total_volume ( ) const
inlineoverridevirtual

Implements Slic3r::ExtrusionEntity.

151{ double volume=0.; for (const auto& ent : entities) volume+=ent->total_volume(); return volume; }

References entities.

Member Data Documentation

◆ entities

ExtrusionEntitiesPtr Slic3r::ExtrusionEntityCollection::entities

Referenced by ExtrusionEntityCollection(), ExtrusionEntityCollection(), Slic3r::Fill::_create_gap_fill(), Slic3r::ExtrusionPath::_inflate_collection(), Slic3r::Print::_make_skirt(), append(), append(), Slic3r::GCode::ObjectByExtruder::Island::Region::append(), Slic3r::PerimeterGenerator::apply_extra_perimeters(), Slic3r::belt_brim_band_paths(), Slic3r::PrintObject::belt_drop_unclaimed_fills(), chained_path_from(), clear(), Slic3r::SupportMaterialInternal::collect_bridging_perimeter_areas(), Slic3r::contour_extrusion_entitiy_collection(), Slic3r::convert_extrusion_from_json(), Slic3r::convert_extrusion_to_json(), libvgcode::convert_object_to_vertices(), libvgcode::convert_to_vertices(), Slic3r::defer_unsupported_loops(), Slic3r::GCode::emit_belt_brim_bands(), Slic3r::GCode::extrude_infill(), Slic3r::GCode::extrude_support(), Slic3r::extrusionentity_extents(), Slic3r::_3DScene::extrusionentity_to_verts(), Slic3r::Fill::fill_surface_extrusion(), Slic3r::FillConcentricInternal::fill_surface_extrusion(), Slic3r::FillLockedZag::fill_surface_extrusion(), flatten(), Slic3r::GCode::generate_skirt(), Slic3r::generate_support_toolpaths(), Slic3r::TreeSupport::generate_toolpaths(), Slic3r::get_print_object_extrusions_extents(), Slic3r::getExtrusionPathsFromEntity(), Slic3r::handle_extrusion_collection(), Slic3r::SupportMaterialInternal::has_bridging_fills(), Slic3r::SupportMaterialInternal::has_bridging_perimeters(), Slic3r::LayerRegion::has_extrusions(), has_infill(), has_perimeters(), has_solid_infill(), items_count(), Slic3r::make_brim(), Slic3r::Layer::make_fills(), Slic3r::Layer::make_ironing(), Slic3r::Skirt::make_skirt_loops_per_extruder_1st_layer(), Slic3r::Skirt::make_skirt_loops_per_extruder_other_layers(), min_mm3_per_mm(), operator ExtrusionPaths(), operator=(), polygons_covered_by_spacing(), polygons_covered_by_width(), Slic3r::PerimeterGenerator::process_classic(), Slic3r::GCode::process_layer(), Slic3r::region_filament(), remove(), replace(), reverse(), role(), Slic3r::LayerRegion::simplify_entity_collection(), Slic3r::Layer::simplify_support_entity_collection(), size(), Slic3r::Skirt::skirt_loops_per_extruder_all_printing(), swap(), Slic3r::to_json(), total_volume(), Slic3r::traverse_extrusions(), and Slic3r::traverse_loops().

◆ inset_idx

◆ is_reverse

bool Slic3r::ExtrusionEntityCollection::is_reverse {true}
private

◆ no_sort


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