OrcaSlicer latest
OrcaSlicer
Loading...
Searching...
No Matches
Slic3r::SupportGeneratorLayerExtruded Struct Reference
Collaboration diagram for Slic3r::SupportGeneratorLayerExtruded:

Public Member Functions

SupportGeneratorLayerExtruded & operator= (SupportGeneratorLayerExtruded &&rhs)
bool empty () const
void set_polygons_to_extrude (Polygons &&polygons)
Polygons & polygons_to_extrude ()
const Polygons & polygons_to_extrude () const
bool could_merge (const SupportGeneratorLayerExtruded &other) const
void merge (SupportGeneratorLayerExtruded &&other)
void polygons_append (Polygons &dst) const

Public Attributes

SupportGeneratorLayer * layer { nullptr }
ExtrusionEntitiesPtr extrusions

Private Attributes

std::unique_ptr< Polygons > m_polygons_to_extrude

Detailed Description

Member Function Documentation

◆ could_merge()

bool Slic3r::SupportGeneratorLayerExtruded::could_merge ( const SupportGeneratorLayerExtruded & other) const
inline
918 {
919 return ! this->empty() && ! other.empty() &&
920 std::abs(this->layer->height - other.layer->height) < EPSILON &&
921 this->layer->bridging == other.layer->bridging;
922 }
#define EPSILON
Definition ColorUtils.cpp:64
SupportGeneratorLayer * layer
Definition SupportCommon.cpp:959
bool empty() const
Definition SupportCommon.cpp:905

References Slic3r::SupportGeneratorLayer::bridging, empty(), EPSILON, Slic3r::SupportGeneratorLayer::height, and layer.

Referenced by merge().

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

◆ empty()

bool Slic3r::SupportGeneratorLayerExtruded::empty ( ) const
inline
905 {
906 return layer == nullptr || layer->polygons.empty();
907 }

References layer.

Referenced by could_merge(), and Slic3r::LoopInterfaceProcessor::generate().

Here is the caller graph for this function:

◆ merge()

void Slic3r::SupportGeneratorLayerExtruded::merge ( SupportGeneratorLayerExtruded && other)
inline
925 {
926 assert(this->could_merge(other));
927 // 1) Merge the rest polygons to extrude, if there are any.
928 if (other.m_polygons_to_extrude != nullptr) {
929 if (m_polygons_to_extrude == nullptr) {
930 // This layer has no extrusions generated yet, if it has no m_polygons_to_extrude (its area to extrude was not reduced yet).
931 assert(this->extrusions.empty());
932 m_polygons_to_extrude = std::make_unique<Polygons>(this->layer->polygons);
933 }
934 Slic3r::polygons_append(*m_polygons_to_extrude, std::move(*other.m_polygons_to_extrude));
936 other.m_polygons_to_extrude.reset();
937 } else if (m_polygons_to_extrude != nullptr) {
938 assert(other.m_polygons_to_extrude == nullptr);
939 // The other layer has no extrusions generated yet, if it has no m_polygons_to_extrude (its area to extrude was not reduced yet).
940 assert(other.extrusions.empty());
941 Slic3r::polygons_append(*m_polygons_to_extrude, other.layer->polygons);
943 }
944 // 2) Merge the extrusions.
945 this->extrusions.insert(this->extrusions.end(), other.extrusions.begin(), other.extrusions.end());
946 other.extrusions.clear();
947 // 3) Merge the infill polygons.
948 Slic3r::polygons_append(this->layer->polygons, std::move(other.layer->polygons));
949 this->layer->polygons = union_safety_offset(this->layer->polygons);
950 other.layer->polygons.clear();
951 }
Slic3r::Polygons union_safety_offset(const Slic3r::Polygons &polygons)
Definition ClipperUtils.hpp:386
void polygons_append(Polygons &dst, const ExPolygon &src)
Definition ExPolygon.hpp:411
bool could_merge(const SupportGeneratorLayerExtruded &other) const
Definition SupportCommon.cpp:918
std::unique_ptr< Polygons > m_polygons_to_extrude
Definition SupportCommon.cpp:966
ExtrusionEntitiesPtr extrusions
Definition SupportCommon.cpp:961

References could_merge(), extrusions, layer, m_polygons_to_extrude, Slic3r::polygons_append(), and Slic3r::union_safety_offset().

Here is the call graph for this function:

◆ operator=()

SupportGeneratorLayerExtruded & Slic3r::SupportGeneratorLayerExtruded::operator= ( SupportGeneratorLayerExtruded && rhs)
inline
897 {
898 this->layer = rhs.layer;
899 this->extrusions = std::move(rhs.extrusions);
900 m_polygons_to_extrude = std::move(rhs.m_polygons_to_extrude);
901 rhs.layer = nullptr;
902 return *this;
903 }

References extrusions, layer, and m_polygons_to_extrude.

◆ polygons_append()

void Slic3r::SupportGeneratorLayerExtruded::polygons_append ( Polygons & dst) const
inline
953 {
954 if (layer != NULL && ! layer->polygons.empty())
955 Slic3r::polygons_append(dst, layer->polygons);
956 }

References layer, and Slic3r::polygons_append().

Here is the call graph for this function:

◆ polygons_to_extrude() [1/2]

Polygons & Slic3r::SupportGeneratorLayerExtruded::polygons_to_extrude ( )
inline
915{ return (m_polygons_to_extrude == nullptr) ? layer->polygons : *m_polygons_to_extrude; }

References layer, and m_polygons_to_extrude.

◆ polygons_to_extrude() [2/2]

const Polygons & Slic3r::SupportGeneratorLayerExtruded::polygons_to_extrude ( ) const
inline
916{ return (m_polygons_to_extrude == nullptr) ? layer->polygons : *m_polygons_to_extrude; }

References layer, and m_polygons_to_extrude.

◆ set_polygons_to_extrude()

void Slic3r::SupportGeneratorLayerExtruded::set_polygons_to_extrude ( Polygons && polygons)
inline
909 {
910 if (m_polygons_to_extrude == nullptr)
911 m_polygons_to_extrude = std::make_unique<Polygons>(std::move(polygons));
912 else
913 *m_polygons_to_extrude = std::move(polygons);
914 }

References m_polygons_to_extrude.

Referenced by Slic3r::LoopInterfaceProcessor::generate().

Here is the caller graph for this function:

Member Data Documentation

◆ extrusions

ExtrusionEntitiesPtr Slic3r::SupportGeneratorLayerExtruded::extrusions

◆ layer

◆ m_polygons_to_extrude

std::unique_ptr<Polygons> Slic3r::SupportGeneratorLayerExtruded::m_polygons_to_extrude
private

The documentation for this struct was generated from the following file: