Prusa Slicer 2.6.0
Loading...
Searching...
No Matches
Slic3r::SupportMaterialInternal Namespace Reference

Functions

static bool has_bridging_perimeters (const ExtrusionLoop &loop)
 
static bool has_bridging_perimeters (const ExtrusionEntityCollection &perimeters)
 
static bool has_bridging_fills (const ExtrusionEntityCollection &fills)
 
static bool has_bridging_extrusions (const Layer &layer)
 
static void collect_bridging_perimeter_areas (const ExtrusionLoop &loop, const float expansion_scaled, Polygons &out)
 
static void collect_bridging_perimeter_areas (const ExtrusionEntityCollection &perimeters, const float expansion_scaled, Polygons &out)
 

Function Documentation

◆ collect_bridging_perimeter_areas() [1/2]

static void Slic3r::SupportMaterialInternal::collect_bridging_perimeter_areas ( const ExtrusionEntityCollection perimeters,
const float  expansion_scaled,
Polygons out 
)
static
1048 {
1049 for (const ExtrusionEntity *ee : perimeters.entities) {
1050 if (ee->is_collection()) {
1051 for (const ExtrusionEntity *ee2 : static_cast<const ExtrusionEntityCollection*>(ee)->entities) {
1052 assert(! ee2->is_collection());
1053 if (ee2->is_loop())
1054 collect_bridging_perimeter_areas(*static_cast<const ExtrusionLoop*>(ee2), expansion_scaled, out);
1055 }
1056 } else if (ee->is_loop())
1057 collect_bridging_perimeter_areas(*static_cast<const ExtrusionLoop*>(ee), expansion_scaled, out);
1058 }
1059 }
Definition ExtrusionEntityCollection.hpp:26
Definition ExtrusionEntity.hpp:21
Definition ExtrusionEntity.hpp:191
#define const
Definition getopt.c:38
static void collect_bridging_perimeter_areas(const ExtrusionLoop &loop, const float expansion_scaled, Polygons &out)
Definition SupportMaterial.cpp:1021

References collect_bridging_perimeter_areas(), and Slic3r::ExtrusionEntityCollection::entities.

+ Here is the call graph for this function:

◆ collect_bridging_perimeter_areas() [2/2]

static void Slic3r::SupportMaterialInternal::collect_bridging_perimeter_areas ( const ExtrusionLoop loop,
const float  expansion_scaled,
Polygons out 
)
inlinestatic
1022 {
1023 assert(expansion_scaled >= 0.f);
1024 for (const ExtrusionPath &ep : loop.paths)
1025 if (ep.role() == ExtrusionRole::OverhangPerimeter && ! ep.polyline.empty()) {
1026 float exp = 0.5f * (float)scale_(ep.width) + expansion_scaled;
1027 if (ep.is_closed()) {
1028 if (ep.size() >= 3) {
1029 // This is a complete loop.
1030 // Add the outer contour first.
1031 Polygon poly;
1032 poly.points = ep.polyline.points;
1033 poly.points.pop_back();
1034 if (poly.area() < 0)
1035 poly.reverse();
1037 Polygons holes = offset(poly, - exp, SUPPORT_SURFACES_OFFSET_PARAMETERS);
1038 polygons_reverse(holes);
1039 polygons_append(out, holes);
1040 }
1041 } else if (ep.size() >= 2) {
1042 // Offset the polyline.
1043 polygons_append(out, offset(ep.polyline, exp, SUPPORT_SURFACES_OFFSET_PARAMETERS));
1044 }
1045 }
1046 }
EIGEN_DEVICE_FUNC const ExpReturnType exp() const
Definition ArrayCwiseUnaryOps.h:88
#define SUPPORT_SURFACES_OFFSET_PARAMETERS
Definition SupportMaterial.cpp:66
Definition ExtrusionEntity.hpp:61
void reverse()
Definition MultiPoint.hpp:34
Points points
Definition MultiPoint.hpp:18
Definition Polygon.hpp:24
static double area(const Points &pts)
Definition Polygon.cpp:49
if(!(yy_init))
Definition lexer.c:1190
#define scale_(val)
Definition libslic3r.h:69
std::vector< Polygon, PointsAllocator< Polygon > > Polygons
Definition Polygon.hpp:15
void polygons_reverse(Polygons &polys)
Definition Polygon.hpp:163
void polygons_append(Polygons &dst, const ExPolygon &src)
Definition ExPolygon.hpp:375
bool empty(const BoundingBoxBase< PointType, PointsType > &bb)
Definition BoundingBox.hpp:229
Definition ExtrusionRole.hpp:43

References Slic3r::Polygon::area(), exp(), Slic3r::holes(), Slic3r::offset(), Slic3r::ExtrusionRole::OverhangPerimeter, Slic3r::MultiPoint::points, Slic3r::polygons_append(), Slic3r::polygons_reverse(), Slic3r::MultiPoint::reverse(), scale_, and SUPPORT_SURFACES_OFFSET_PARAMETERS.

Referenced by collect_bridging_perimeter_areas().

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

◆ has_bridging_extrusions()

static bool Slic3r::SupportMaterialInternal::has_bridging_extrusions ( const Layer layer)
static
1011 {
1012 for (const LayerRegion *region : layer.regions()) {
1013 if (SupportMaterialInternal::has_bridging_perimeters(region->perimeters()))
1014 return true;
1015 if (region->fill_surfaces().has(stBottomBridge) && has_bridging_fills(region->fills()))
1016 return true;
1017 }
1018 return false;
1019 }
Definition Layer.hpp:95
static bool has_bridging_fills(const ExtrusionEntityCollection &fills)
Definition SupportMaterial.cpp:997

References has_bridging_fills(), has_bridging_perimeters(), Slic3r::Layer::regions(), and Slic3r::stBottomBridge.

+ Here is the call graph for this function:

◆ has_bridging_fills()

static bool Slic3r::SupportMaterialInternal::has_bridging_fills ( const ExtrusionEntityCollection fills)
static
998 {
999 for (const ExtrusionEntity *ee : fills.entities) {
1000 assert(ee->is_collection());
1001 for (const ExtrusionEntity *ee2 : static_cast<const ExtrusionEntityCollection*>(ee)->entities) {
1002 assert(! ee2->is_collection());
1003 assert(! ee2->is_loop());
1004 if (ee2->role() == ExtrusionRole::BridgeInfill)
1005 return true;
1006 }
1007 }
1008 return false;
1009 }

References Slic3r::ExtrusionRole::BridgeInfill, and Slic3r::ExtrusionEntityCollection::entities.

Referenced by has_bridging_extrusions().

+ Here is the caller graph for this function:

◆ has_bridging_perimeters() [1/2]

static bool Slic3r::SupportMaterialInternal::has_bridging_perimeters ( const ExtrusionEntityCollection perimeters)
static
983 {
984 for (const ExtrusionEntity *ee : perimeters.entities) {
985 if (ee->is_collection()) {
986 for (const ExtrusionEntity *ee2 : static_cast<const ExtrusionEntityCollection*>(ee)->entities) {
987 assert(! ee2->is_collection());
988 if (ee2->is_loop())
989 if (has_bridging_perimeters(*static_cast<const ExtrusionLoop*>(ee2)))
990 return true;
991 }
992 } else if (ee->is_loop() && has_bridging_perimeters(*static_cast<const ExtrusionLoop*>(ee)))
993 return true;
994 }
995 return false;
996 }
static bool has_bridging_perimeters(const ExtrusionLoop &loop)
Definition SupportMaterial.cpp:975

References Slic3r::ExtrusionEntityCollection::entities, and has_bridging_perimeters().

+ Here is the call graph for this function:

◆ has_bridging_perimeters() [2/2]

static bool Slic3r::SupportMaterialInternal::has_bridging_perimeters ( const ExtrusionLoop loop)
inlinestatic
976 {
977 for (const ExtrusionPath &ep : loop.paths)
978 if (ep.role() == ExtrusionRole::OverhangPerimeter && ! ep.polyline.empty())
979 return int(ep.size()) >= (ep.is_closed() ? 3 : 2);
980 return false;
981 }

References Slic3r::ExtrusionRole::OverhangPerimeter.

Referenced by has_bridging_extrusions(), and has_bridging_perimeters().

+ Here is the caller graph for this function: