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

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

Inheritance diagram for Slic3r::ExtrusionMultiPath:
Collaboration diagram for Slic3r::ExtrusionMultiPath:

Public Member Functions

 ExtrusionMultiPath ()
 ExtrusionMultiPath (const ExtrusionMultiPath &rhs)
 ExtrusionMultiPath (ExtrusionMultiPath &&rhs)
 ExtrusionMultiPath (const ExtrusionPaths &paths)
 ExtrusionMultiPath (const ExtrusionPath &path)
ExtrusionMultiPath & operator= (const ExtrusionMultiPath &rhs)
ExtrusionMultiPath & operator= (ExtrusionMultiPath &&rhs)
bool is_loop () const override
bool can_reverse () const override
void set_reverse () override
ExtrusionEntity * clone () const override
ExtrusionEntity * clone_move () override
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
size_t size () const
bool empty () const
double length () const override
ExtrusionRole role () 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
double min_mm3_per_mm () const override
Polyline as_polyline () const override
void collect_polylines (Polylines &dst) const override
void collect_points (Points &dst) const override
double total_volume () const override
virtual bool is_collection () const
virtual bool can_sort () const
virtual Polylines as_polylines () const

Static Public Member Functions

static std::string role_to_string (ExtrusionRole role)
static ExtrusionRole string_to_role (const std::string_view role)

Public Attributes

ExtrusionPaths paths
int inset_idx = -1

Private Attributes

bool m_can_reverse = true

Detailed Description

Constructor & Destructor Documentation

◆ ExtrusionMultiPath() [1/5]

Slic3r::ExtrusionMultiPath::ExtrusionMultiPath ( )
inline
403{}

Referenced by ExtrusionMultiPath(), ExtrusionMultiPath(), clone(), clone_move(), operator=(), and operator=().

Here is the caller graph for this function:

◆ ExtrusionMultiPath() [2/5]

Slic3r::ExtrusionMultiPath::ExtrusionMultiPath ( const ExtrusionMultiPath & rhs)
inline
404: ExtrusionEntity(rhs), paths(rhs.paths), m_can_reverse(rhs.m_can_reverse) {}
bool m_can_reverse
Definition ExtrusionEntity.hpp:463
ExtrusionPaths paths
Definition ExtrusionEntity.hpp:401

References ExtrusionMultiPath(), m_can_reverse, and paths.

Here is the call graph for this function:

◆ ExtrusionMultiPath() [3/5]

Slic3r::ExtrusionMultiPath::ExtrusionMultiPath ( ExtrusionMultiPath && rhs)
inline
405: ExtrusionEntity(rhs), paths(std::move(rhs.paths)), m_can_reverse(rhs.m_can_reverse) {}

References ExtrusionMultiPath(), m_can_reverse, and paths.

Here is the call graph for this function:

◆ ExtrusionMultiPath() [4/5]

Slic3r::ExtrusionMultiPath::ExtrusionMultiPath ( const ExtrusionPaths & paths)
inline
406: paths(paths) {}

References paths.

◆ ExtrusionMultiPath() [5/5]

Slic3r::ExtrusionMultiPath::ExtrusionMultiPath ( const ExtrusionPath & path)
inline
407{this->paths.push_back(path); m_can_reverse = path.can_reverse(); }

References Slic3r::ExtrusionPath::can_reverse(), and m_can_reverse.

Here is the call graph for this function:

Member Function Documentation

◆ as_polyline()

Polyline Slic3r::ExtrusionMultiPath::as_polyline ( ) const
overridevirtual

Implements Slic3r::ExtrusionEntity.

133{
134 Polyline out;
135 if (! paths.empty()) {
136 size_t len = 0;
137 for (size_t i_path = 0; i_path < paths.size(); ++ i_path) {
138 assert(! paths[i_path].polyline.points.empty());
139 assert(i_path == 0 || paths[i_path - 1].polyline.points.back() == paths[i_path].polyline.points.front());
140 len += paths[i_path].polyline.points.size();
141 }
142 // The connecting points between the segments are equal.
143 len -= paths.size() - 1;
144 assert(len > 0);
145 out.points.reserve(len);
146 out.points.push_back(paths.front().polyline.points.front().to_point());
147 for (size_t i_path = 0; i_path < paths.size(); ++ i_path)
148 for (auto it = paths[i_path].polyline.points.begin() + 1; it != paths[i_path].polyline.points.end(); ++it)
149 out.points.push_back(it->to_point());
150 }
151 return out;
152}

References paths, and Slic3r::MultiPoint::points.

Referenced by collect_polylines().

Here is the caller graph for this function:

◆ 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:

◆ can_reverse()

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

Reimplemented from Slic3r::ExtrusionEntity.

425{ return m_can_reverse; }

References m_can_reverse.

◆ can_sort()

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

Reimplemented in Slic3r::ExtrusionEntityCollection.

127{ return true; }//BBS: only used in ExtrusionEntityCollection

◆ clone()

ExtrusionEntity * Slic3r::ExtrusionMultiPath::clone ( ) const
inlineoverridevirtual

Implements Slic3r::ExtrusionEntity.

427{ return new ExtrusionMultiPath(*this); }
ExtrusionMultiPath()
Definition ExtrusionEntity.hpp:403

References ExtrusionMultiPath().

Here is the call graph for this function:

◆ clone_move()

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

Implements Slic3r::ExtrusionEntity.

429{ return new ExtrusionMultiPath(std::move(*this)); }

References ExtrusionMultiPath().

Here is the call graph for this function:

◆ collect_points()

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

Implements Slic3r::ExtrusionEntity.

454 {
455 size_t n = std::accumulate(paths.begin(), paths.end(), 0, [](const size_t n, const ExtrusionPath &p){ return n + p.polyline.size(); });
456 dst.reserve(dst.size() + n);
457 for (const ExtrusionPath &p : this->paths)
458 append(dst, to_points(p.polyline.points));
459 }
Points to_points(const ExPolygons &src)
Definition ExPolygon.hpp:222
void append(std::vector< T, Alloc > &dest, const std::vector< T, Alloc2 > &src)
Definition libslic3r.h:157

References Slic3r::append(), paths, Slic3r::MultiPoint3::points, Slic3r::ExtrusionPath::polyline, and Slic3r::to_points().

Here is the call graph for this function:

◆ collect_polylines()

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

Implements Slic3r::ExtrusionEntity.

453{ Polyline pl = this->as_polyline(); if (! pl.empty()) dst.emplace_back(std::move(pl)); }
Polyline as_polyline() const override
Definition ExtrusionEntity.cpp:132

References as_polyline(), and Slic3r::MultiPoint::empty().

Here is the call graph for this function:

◆ empty()

bool Slic3r::ExtrusionMultiPath::empty ( ) const
inline
436{ return this->paths.empty(); }

Referenced by Slic3r::extrusion_entities_append_paths_with_wipe().

Here is the caller graph for this function:

◆ first_point()

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

Implements Slic3r::ExtrusionEntity.

431{ return this->paths.front().polyline.points.front().to_point(); }

◆ first_point3()

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

Implements Slic3r::ExtrusionEntity.

432{ return this->paths.front().polyline.points.front(); }

◆ is_collection()

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

◆ is_loop()

bool Slic3r::ExtrusionMultiPath::is_loop ( ) const
inlineoverridevirtual

Reimplemented from Slic3r::ExtrusionEntity.

424{ return false; }

◆ last_point()

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

Implements Slic3r::ExtrusionEntity.

433{ return this->paths.back().polyline.points.back().to_point(); }

◆ last_point3()

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

Implements Slic3r::ExtrusionEntity.

434{ return this->paths.back().polyline.points.back(); }

◆ length()

double Slic3r::ExtrusionMultiPath::length ( ) const
overridevirtual

Implements Slic3r::ExtrusionEntity.

105{
106 double len = 0;
107 for (const ExtrusionPath &path : this->paths)
108 len += path.polyline.length();
109 return len;
110}

References paths.

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

Here is the caller graph for this function:

◆ min_mm3_per_mm()

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

Implements Slic3r::ExtrusionEntity.

125{
126 double min_mm3_per_mm = std::numeric_limits<double>::max();
127 for (const ExtrusionPath &path : this->paths)
128 min_mm3_per_mm = std::min(min_mm3_per_mm, path.mm3_per_mm);
129 return min_mm3_per_mm;
130}
double min_mm3_per_mm() const override
Definition ExtrusionEntity.cpp:124

References min_mm3_per_mm(), and paths.

Referenced by min_mm3_per_mm().

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

◆ operator=() [1/2]

ExtrusionMultiPath & Slic3r::ExtrusionMultiPath::operator= ( const ExtrusionMultiPath & rhs)
inline
410 {
411 this->paths = rhs.paths;
412 m_can_reverse = rhs.m_can_reverse;
413 this->inset_idx = rhs.inset_idx;
414 return *this;
415 }
int inset_idx
Definition ExtrusionEntity.hpp:160

References ExtrusionMultiPath(), Slic3r::ExtrusionEntity::inset_idx, m_can_reverse, and paths.

Here is the call graph for this function:

◆ operator=() [2/2]

ExtrusionMultiPath & Slic3r::ExtrusionMultiPath::operator= ( ExtrusionMultiPath && rhs)
inline
417 {
418 this->paths = std::move(rhs.paths);
419 m_can_reverse = rhs.m_can_reverse;
420 this->inset_idx = rhs.inset_idx;
421 return *this;
422 }

References ExtrusionMultiPath(), Slic3r::ExtrusionEntity::inset_idx, and m_can_reverse.

Here is the call graph for this function:

◆ polygons_covered_by_spacing() [1/2]

Polygons Slic3r::ExtrusionMultiPath::polygons_covered_by_spacing ( const float scaled_epsilon = 0.f) const
inline
449 { 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 ExtrusionEntity.cpp:118
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::ExtrusionMultiPath::polygons_covered_by_spacing ( Polygons & out,
const float scaled_epsilon ) const
overridevirtual

Implements Slic3r::ExtrusionEntity.

119{
120 for (const ExtrusionPath &path : this->paths)
121 path.polygons_covered_by_spacing(out, scaled_epsilon);
122}

References paths.

Referenced by polygons_covered_by_spacing().

Here is the caller graph for this function:

◆ polygons_covered_by_width() [1/2]

Polygons Slic3r::ExtrusionMultiPath::polygons_covered_by_width ( const float scaled_epsilon = 0.f) const
inline
447 { 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 ExtrusionEntity.cpp:112

References polygons_covered_by_width().

Here is the call graph for this function:

◆ polygons_covered_by_width() [2/2]

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

Implements Slic3r::ExtrusionEntity.

113{
114 for (const ExtrusionPath &path : this->paths)
115 path.polygons_covered_by_width(out, scaled_epsilon);
116}

References paths.

Referenced by polygons_covered_by_width().

Here is the caller graph for this function:

◆ reverse()

void Slic3r::ExtrusionMultiPath::reverse ( )
overridevirtual

Implements Slic3r::ExtrusionEntity.

98{
99 for (ExtrusionPath &path : this->paths)
100 path.reverse();
101 std::reverse(this->paths.begin(), this->paths.end());
102}

References paths.

◆ role()

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

Implements Slic3r::ExtrusionEntity.

438{ return this->paths.empty() ? erNone : this->paths.front().role(); }
@ erNone
Definition ExtrusionEntity.hpp:27

References Slic3r::erNone.

◆ 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
@ erMixed
Definition ExtrusionEntity.hpp:47
@ 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::ExtrusionMultiPath::set_reverse ( )
inlineoverridevirtual

Reimplemented from Slic3r::ExtrusionEntity.

426{ m_can_reverse = false; }

References m_can_reverse.

◆ size()

size_t Slic3r::ExtrusionMultiPath::size ( ) const
inline
435{ return this->paths.size(); }

◆ 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:

◆ total_volume()

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

Implements Slic3r::ExtrusionEntity.

460{ double volume =0.; for (const auto& path : paths) volume += path.total_volume(); return volume; }

References paths.

Member Data Documentation

◆ inset_idx

◆ m_can_reverse

bool Slic3r::ExtrusionMultiPath::m_can_reverse = true
private

◆ paths


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