Prusa Slicer 2.6.0
Loading...
Searching...
No Matches
Slic3r::SurfaceCollection Class Reference

#include <src/libslic3r/SurfaceCollection.hpp>

+ Collaboration diagram for Slic3r::SurfaceCollection:

Public Member Functions

 SurfaceCollection ()=default
 
 SurfaceCollection (const Surfaces &surfaces)
 
 SurfaceCollection (Surfaces &&surfaces)
 
void simplify (double tolerance)
 
void group (std::vector< SurfacesPtr > *retval) const
 
template<class T >
bool any_internal_contains (const T &item) const
 
template<class T >
bool any_bottom_contains (const T &item) const
 
SurfacesPtr filter_by_type (const SurfaceType type) const
 
SurfacesPtr filter_by_types (std::initializer_list< SurfaceType > types) const
 
void keep_type (const SurfaceType type)
 
void keep_types (std::initializer_list< SurfaceType > types)
 
void remove_type (const SurfaceType type)
 
void remove_types (std::initializer_list< SurfaceType > types)
 
void filter_by_type (SurfaceType type, Polygons *polygons) const
 
void remove_type (const SurfaceType type, ExPolygons *polygons)
 
void set_type (SurfaceType type)
 
void clear ()
 
bool empty () const
 
size_t size () const
 
bool has (SurfaceType type) const
 
Surfaces::const_iterator cbegin () const
 
Surfaces::const_iterator cend () const
 
Surfaces::const_iterator begin () const
 
Surfaces::const_iterator end () const
 
Surfaces::iterator begin ()
 
Surfaces::iterator end ()
 
void set (const SurfaceCollection &coll)
 
void set (SurfaceCollection &&coll)
 
void set (const ExPolygons &src, SurfaceType surfaceType)
 
void set (const ExPolygons &src, const Surface &surfaceTempl)
 
void set (const Surfaces &src)
 
void set (ExPolygons &&src, SurfaceType surfaceType)
 
void set (ExPolygons &&src, const Surface &surfaceTempl)
 
void set (Surfaces &&src)
 
void append (const SurfaceCollection &coll)
 
void append (SurfaceCollection &&coll)
 
void append (const ExPolygons &src, SurfaceType surfaceType)
 
void append (const ExPolygons &src, const Surface &surfaceTempl)
 
void append (const Surfaces &src)
 
void append (ExPolygons &&src, SurfaceType surfaceType)
 
void append (ExPolygons &&src, const Surface &surfaceTempl)
 
void append (Surfaces &&src)
 
void export_to_svg (const char *path, bool show_labels)
 

Public Attributes

Surfaces surfaces
 

Detailed Description

Constructor & Destructor Documentation

◆ SurfaceCollection() [1/3]

Slic3r::SurfaceCollection::SurfaceCollection ( )
default

◆ SurfaceCollection() [2/3]

Slic3r::SurfaceCollection::SurfaceCollection ( const Surfaces surfaces)
inline
17: surfaces(surfaces) {};
Surfaces surfaces
Definition SurfaceCollection.hpp:14

◆ SurfaceCollection() [3/3]

Slic3r::SurfaceCollection::SurfaceCollection ( Surfaces &&  surfaces)
inline
18: surfaces(std::move(surfaces)) {};

Member Function Documentation

◆ any_bottom_contains()

template<class T >
bool Slic3r::SurfaceCollection::any_bottom_contains ( const T &  item) const
inline
26 {
27 for (const Surface &surface : this->surfaces) if (surface.is_bottom() && surface.expolygon.contains(item)) return true;
28 return false;
29 }
if(!(yy_init))
Definition lexer.c:1190
bool contains(const ContainerType &c, const ValueType &v)
Definition libslic3r.h:247

References surfaces.

◆ any_internal_contains()

template<class T >
bool Slic3r::SurfaceCollection::any_internal_contains ( const T &  item) const
inline
22 {
23 for (const Surface &surface : this->surfaces) if (surface.is_internal() && surface.expolygon.contains(item)) return true;
24 return false;
25 }

References surfaces.

◆ append() [1/8]

void Slic3r::SurfaceCollection::append ( const ExPolygons src,
const Surface surfaceTempl 
)
inline
71{ surfaces_append(this->surfaces, src, surfaceTempl); }
void surfaces_append(Surfaces &dst, const ExPolygons &src, SurfaceType surfaceType)
Definition Surface.hpp:228

References Slic3r::surfaces_append().

+ Here is the call graph for this function:

◆ append() [2/8]

void Slic3r::SurfaceCollection::append ( const ExPolygons src,
SurfaceType  surfaceType 
)
inline
70{ surfaces_append(this->surfaces, src, surfaceType); }

References Slic3r::surfaces_append().

+ Here is the call graph for this function:

◆ append() [3/8]

void Slic3r::SurfaceCollection::append ( const SurfaceCollection coll)
inline
68{ this->append(coll.surfaces); }
void append(const SurfaceCollection &coll)
Definition SurfaceCollection.hpp:68

References append(), and surfaces.

Referenced by append(), Slic3r::PrintObject::discover_vertical_shells(), Slic3r::Layer::make_perimeters(), set(), set(), set(), set(), set(), set(), and Slic3r::LayerRegion::slices_to_fill_surfaces_clipped().

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

◆ append() [4/8]

void Slic3r::SurfaceCollection::append ( const Surfaces src)
inline
72{ surfaces_append(this->surfaces, src); }

References Slic3r::surfaces_append().

+ Here is the call graph for this function:

◆ append() [5/8]

void Slic3r::SurfaceCollection::append ( ExPolygons &&  src,
const Surface surfaceTempl 
)
inline
74{ surfaces_append(this->surfaces, std::move(src), surfaceTempl); }

References Slic3r::surfaces_append().

+ Here is the call graph for this function:

◆ append() [6/8]

void Slic3r::SurfaceCollection::append ( ExPolygons &&  src,
SurfaceType  surfaceType 
)
inline
73{ surfaces_append(this->surfaces, std::move(src), surfaceType); }

References Slic3r::surfaces_append().

+ Here is the call graph for this function:

◆ append() [7/8]

void Slic3r::SurfaceCollection::append ( SurfaceCollection &&  coll)
inline
69{ this->append(std::move(coll.surfaces)); }

References append().

Referenced by append().

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

◆ append() [8/8]

void Slic3r::SurfaceCollection::append ( Surfaces &&  src)
inline
75{ surfaces_append(this->surfaces, std::move(src)); }

References Slic3r::surfaces_append().

+ Here is the call graph for this function:

◆ begin() [1/2]

Surfaces::iterator Slic3r::SurfaceCollection::begin ( )
inline
56{ return this->surfaces.begin(); }

◆ begin() [2/2]

Surfaces::const_iterator Slic3r::SurfaceCollection::begin ( ) const
inline
54{ return this->surfaces.cbegin(); }

◆ cbegin()

Surfaces::const_iterator Slic3r::SurfaceCollection::cbegin ( ) const
inline
52{ return this->surfaces.cbegin(); }

◆ cend()

Surfaces::const_iterator Slic3r::SurfaceCollection::cend ( ) const
inline
53{ return this->surfaces.cend(); }

◆ clear()

void Slic3r::SurfaceCollection::clear ( )
inline
43{ surfaces.clear(); }

References surfaces.

Referenced by set(), set(), set(), set(), set(), and set().

+ Here is the caller graph for this function:

◆ empty()

bool Slic3r::SurfaceCollection::empty ( ) const
inline
44{ return surfaces.empty(); }

References surfaces.

Referenced by Slic3r::get_extents(), and Slic3r::Layer::make_ironing().

+ Here is the caller graph for this function:

◆ end() [1/2]

Surfaces::iterator Slic3r::SurfaceCollection::end ( )
inline
57{ return this->surfaces.end(); }

◆ end() [2/2]

Surfaces::const_iterator Slic3r::SurfaceCollection::end ( ) const
inline
55{ return this->surfaces.cend(); }

◆ export_to_svg()

void Slic3r::SurfaceCollection::export_to_svg ( const char *  path,
bool  show_labels 
)
141{
142 BoundingBox bbox;
143 for (Surfaces::const_iterator surface = this->surfaces.begin(); surface != this->surfaces.end(); ++surface)
144 bbox.merge(get_extents(surface->expolygon));
146 Point legend_pos(bbox.min(0), bbox.max(1));
147 bbox.merge(Point(std::max(bbox.min(0) + legend_size(0), bbox.max(0)), bbox.max(1) + legend_size(1)));
148
149 SVG svg(path, bbox);
150 const float transparency = 0.5f;
151 for (Surfaces::const_iterator surface = this->surfaces.begin(); surface != this->surfaces.end(); ++surface) {
152 svg.draw(surface->expolygon, surface_type_to_color_name(surface->surface_type), transparency);
153 if (show_labels) {
154 int idx = int(surface - this->surfaces.begin());
155 char label[64];
156 sprintf(label, "%d", idx);
157 svg.draw_text(surface->expolygon.contour.points.front(), label, "black");
158 }
159 }
160 export_surface_type_legend_to_svg(svg, legend_pos);
161 svg.Close();
162}
BoundingBox get_extents(const ExPolygon &expolygon)
Definition ExPolygon.cpp:352
const char * surface_type_to_color_name(const SurfaceType surface_type)
Definition Surface.cpp:34
void export_surface_type_legend_to_svg(SVG &svg, const Point &pos)
Definition Surface.cpp:54
Point export_surface_type_legend_to_svg_box_size()
Definition Surface.cpp:49
Kernel::Point_2 Point
Definition point_areas.cpp:20

References Slic3r::SVG::Close(), Slic3r::SVG::draw(), Slic3r::SVG::draw_text(), Slic3r::export_surface_type_legend_to_svg(), Slic3r::export_surface_type_legend_to_svg_box_size(), Slic3r::get_extents(), Slic3r::BoundingBoxBase< PointType, APointsType >::max, Slic3r::BoundingBoxBase< PointType, APointsType >::merge(), Slic3r::BoundingBoxBase< PointType, APointsType >::min, Slic3r::surface_type_to_color_name(), and surfaces.

Referenced by Slic3r::LayerRegion::process_external_surfaces().

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

◆ filter_by_type() [1/2]

SurfacesPtr Slic3r::SurfaceCollection::filter_by_type ( const SurfaceType  type) const
46{
47 SurfacesPtr ss;
48 for (const Surface &surface : this->surfaces)
49 if (surface.surface_type == type)
50 ss.push_back(&surface);
51 return ss;
52}
std::vector< const Surface * > SurfacesPtr
Definition Surface.hpp:98

References surfaces.

Referenced by Slic3r::PrintObject::discover_vertical_shells().

+ Here is the caller graph for this function:

◆ filter_by_type() [2/2]

void Slic3r::SurfaceCollection::filter_by_type ( SurfaceType  type,
Polygons polygons 
) const
64{
65 for (const Surface &surface : this->surfaces)
66 if (surface.surface_type == type)
67 polygons_append(*polygons, to_polygons(surface.expolygon));
68}
Polygons to_polygons(const ExPolygon &src)
Definition ExPolygon.hpp:281
void polygons_append(Polygons &dst, const ExPolygon &src)
Definition ExPolygon.hpp:375

References Slic3r::polygons_append(), surfaces, and Slic3r::to_polygons().

+ Here is the call graph for this function:

◆ filter_by_types()

SurfacesPtr Slic3r::SurfaceCollection::filter_by_types ( std::initializer_list< SurfaceType types) const
55{
56 SurfacesPtr ss;
57 for (const Surface &surface : this->surfaces)
58 if (std::find(types.begin(), types.end(), surface.surface_type) != types.end())
59 ss.push_back(&surface);
60 return ss;
61}
Surfaces::const_iterator end() const
Definition SurfaceCollection.hpp:55
Surfaces::const_iterator begin() const
Definition SurfaceCollection.hpp:54
IGL_INLINE void find(const Eigen::SparseMatrix< T > &X, Eigen::DenseBase< DerivedI > &I, Eigen::DenseBase< DerivedJ > &J, Eigen::DenseBase< DerivedV > &V)
Definition find.cpp:18
STL namespace.

References surfaces.

Referenced by Slic3r::PrintObject::discover_vertical_shells().

+ Here is the caller graph for this function:

◆ group()

void Slic3r::SurfaceCollection::group ( std::vector< SurfacesPtr > *  retval) const
26{
27 for (const Surface &surface : this->surfaces) {
28 // find a group with the same properties
29 SurfacesPtr *group = nullptr;
30 for (std::vector<SurfacesPtr>::iterator git = retval->begin(); git != retval->end(); ++git)
31 if (! git->empty() && surfaces_could_merge(*git->front(), surface)) {
32 group = &*git;
33 break;
34 }
35 // if no group with these properties exists, add one
36 if (group == nullptr) {
37 retval->resize(retval->size() + 1);
38 group = &retval->back();
39 }
40 // append surface to group
41 group->push_back(&surface);
42 }
43}
void group(std::vector< SurfacesPtr > *retval) const
Definition SurfaceCollection.cpp:25
bool surfaces_could_merge(const Surface &s1, const Surface &s2)
Definition Surface.hpp:275

References group(), surfaces, and Slic3r::surfaces_could_merge().

Referenced by group().

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

◆ has()

bool Slic3r::SurfaceCollection::has ( SurfaceType  type) const
inline
46 {
47 for (const Surface &surface : this->surfaces)
48 if (surface.surface_type == type) return true;
49 return false;
50 }

References surfaces.

◆ keep_type()

void Slic3r::SurfaceCollection::keep_type ( const SurfaceType  type)
71{
72 size_t j = 0;
73 for (size_t i = 0; i < surfaces.size(); ++ i) {
74 if (surfaces[i].surface_type == type) {
75 if (j < i)
76 std::swap(surfaces[i], surfaces[j]);
77 ++ j;
78 }
79 }
80 if (j < surfaces.size())
81 surfaces.erase(surfaces.begin() + j, surfaces.end());
82}

References surfaces.

◆ keep_types()

void Slic3r::SurfaceCollection::keep_types ( std::initializer_list< SurfaceType types)
85{
86 size_t j = 0;
87 for (size_t i = 0; i < surfaces.size(); ++ i)
88 if (std::find(types.begin(), types.end(), surfaces[i].surface_type) != types.end()) {
89 if (j < i)
90 std::swap(surfaces[i], surfaces[j]);
91 ++ j;
92 }
93 if (j < surfaces.size())
94 surfaces.erase(surfaces.begin() + j, surfaces.end());
95}

References surfaces.

Referenced by Slic3r::PrintObject::discover_vertical_shells().

+ Here is the caller graph for this function:

◆ remove_type() [1/2]

void Slic3r::SurfaceCollection::remove_type ( const SurfaceType  type)
98{
99 size_t j = 0;
100 for (size_t i = 0; i < surfaces.size(); ++ i) {
101 if (surfaces[i].surface_type != type) {
102 if (j < i)
103 std::swap(surfaces[i], surfaces[j]);
104 ++ j;
105 }
106 }
107 if (j < surfaces.size())
108 surfaces.erase(surfaces.begin() + j, surfaces.end());
109}

References surfaces.

◆ remove_type() [2/2]

void Slic3r::SurfaceCollection::remove_type ( const SurfaceType  type,
ExPolygons polygons 
)
112{
113 size_t j = 0;
114 for (size_t i = 0; i < surfaces.size(); ++ i) {
115 if (Surface &surface = surfaces[i]; surface.surface_type == type) {
116 polygons->emplace_back(std::move(surface.expolygon));
117 } else {
118 if (j < i)
119 std::swap(surfaces[i], surfaces[j]);
120 ++ j;
121 }
122 }
123 if (j < surfaces.size())
124 surfaces.erase(surfaces.begin() + j, surfaces.end());
125}

References surfaces.

◆ remove_types()

void Slic3r::SurfaceCollection::remove_types ( std::initializer_list< SurfaceType types)
128{
129 size_t j = 0;
130 for (size_t i = 0; i < surfaces.size(); ++ i)
131 if (std::find(types.begin(), types.end(), surfaces[i].surface_type) == types.end()) {
132 if (j < i)
133 std::swap(surfaces[i], surfaces[j]);
134 ++ j;
135 }
136 if (j < surfaces.size())
137 surfaces.erase(surfaces.begin() + j, surfaces.end());
138}

References surfaces.

◆ set() [1/8]

void Slic3r::SurfaceCollection::set ( const ExPolygons src,
const Surface surfaceTempl 
)
inline
62{ clear(); this->append(src, surfaceTempl); }
void clear()
Definition SurfaceCollection.hpp:43

References append(), and clear().

+ Here is the call graph for this function:

◆ set() [2/8]

void Slic3r::SurfaceCollection::set ( const ExPolygons src,
SurfaceType  surfaceType 
)
inline
61{ clear(); this->append(src, surfaceType); }

References append(), and clear().

+ Here is the call graph for this function:

◆ set() [3/8]

void Slic3r::SurfaceCollection::set ( const SurfaceCollection coll)
inline
59{ surfaces = coll.surfaces; }

References surfaces.

Referenced by Slic3r::Layer::restore_untyped_slices_no_extra_perimeters().

+ Here is the caller graph for this function:

◆ set() [4/8]

void Slic3r::SurfaceCollection::set ( const Surfaces src)
inline
63{ clear(); this->append(src); }

References append(), and clear().

+ Here is the call graph for this function:

◆ set() [5/8]

void Slic3r::SurfaceCollection::set ( ExPolygons &&  src,
const Surface surfaceTempl 
)
inline
65{ clear(); this->append(std::move(src), surfaceTempl); }

References append(), and clear().

+ Here is the call graph for this function:

◆ set() [6/8]

void Slic3r::SurfaceCollection::set ( ExPolygons &&  src,
SurfaceType  surfaceType 
)
inline
64{ clear(); this->append(std::move(src), surfaceType); }

References append(), and clear().

+ Here is the call graph for this function:

◆ set() [7/8]

void Slic3r::SurfaceCollection::set ( SurfaceCollection &&  coll)
inline
60{ surfaces = std::move(coll.surfaces); }

References surfaces.

◆ set() [8/8]

void Slic3r::SurfaceCollection::set ( Surfaces &&  src)
inline
66{ clear(); this->append(std::move(src)); }

References append(), and clear().

+ Here is the call graph for this function:

◆ set_type()

void Slic3r::SurfaceCollection::set_type ( SurfaceType  type)
inline
38 {
39 for (Surface &surface : this->surfaces)
40 surface.surface_type = type;
41 }

References surfaces.

◆ simplify()

void Slic3r::SurfaceCollection::simplify ( double  tolerance)
10{
11 Surfaces ss;
12 for (Surfaces::const_iterator it_s = this->surfaces.begin(); it_s != this->surfaces.end(); ++it_s) {
13 ExPolygons expp;
14 it_s->expolygon.simplify(tolerance, &expp);
15 for (ExPolygons::const_iterator it_e = expp.begin(); it_e != expp.end(); ++it_e) {
16 Surface s = *it_s;
17 s.expolygon = *it_e;
18 ss.push_back(s);
19 }
20 }
21 this->surfaces = ss;
22}
std::vector< ExPolygon > ExPolygons
Definition ExPolygon.hpp:13
std::vector< Surface > Surfaces
Definition Surface.hpp:97

References Slic3r::Surface::expolygon, and surfaces.

◆ size()

size_t Slic3r::SurfaceCollection::size ( ) const
inline
45{ return surfaces.size(); }

References surfaces.

Referenced by Slic3r::group_fills(), Slic3r::LayerRegion::make_perimeters(), Slic3r::LayerRegion::process_external_surfaces(), and Slic3r::Layer::sort_perimeters_into_islands().

+ Here is the caller graph for this function:

Member Data Documentation

◆ surfaces


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