OrcaSlicer latest
OrcaSlicer
Loading...
Searching...
No Matches
Slic3r::Skirt Namespace Reference

Functions

static void skirt_loops_per_extruder_all_printing (const Print &print, const ExtrusionEntityCollection &skirt, const LayerTools &layer_tools, std::map< unsigned int, std::pair< size_t, size_t > > &skirt_loops_per_extruder_out)
static std::map< unsigned int, std::pair< size_t, size_t > > make_skirt_loops_per_extruder_1st_layer (const Print &print, const ExtrusionEntityCollection &skirt, const LayerTools &layer_tools, std::vector< coordf_t > &skirt_done)
static std::map< unsigned int, std::pair< size_t, size_t > > make_skirt_loops_per_extruder_other_layers (const Print &print, const ExtrusionEntityCollection &skirt, const LayerTools &layer_tools, std::vector< coordf_t > &skirt_done)
static Point find_start_point (ExtrusionLoop &loop, float start_angle)

Function Documentation

◆ find_start_point()

Point Slic3r::Skirt::find_start_point ( ExtrusionLoop & loop,
float start_angle )
static
5829 {
5830 coord_t min_x = std::numeric_limits<coord_t>::max();
5831 coord_t max_x = std::numeric_limits<coord_t>::min();
5832 coord_t min_y = min_x;
5833 coord_t max_y = max_x;
5834
5835 Points pts;
5836 loop.collect_points(pts);
5837 for (Point pt: pts) {
5838 if (pt.x() < min_x)
5839 min_x = pt.x();
5840 else if (pt.x() > max_x)
5841 max_x = pt.x();
5842 if (pt.y() < min_y)
5843 min_y = pt.y();
5844 else if (pt.y() > max_y)
5845 max_y = pt.y();
5846 }
5847
5848 Point center((min_x + max_x)/2., (min_y + max_y)/2.);
5849 double r = center.distance_to(Point(min_x, min_y));
5850 double deg = start_angle * PI / 180;
5851 double shift_x = r * std::cos(deg);
5852 double shift_y = r * std::sin(deg);
5853 return Point(center.x()+shift_x, center.y() + shift_y);
5854 }
void collect_points(Points &dst) const override
Definition ExtrusionEntity.hpp:534
Definition Point.hpp:199
static constexpr double PI
Definition libslic3r.h:81
int64_t coord_t
Definition libslic3r.h:48
void center(ExPolygonsWithIds &e)
Definition Emboss.cpp:1382
std::vector< Point, PointsAllocator< Point > > Points
Definition Point.hpp:73

References Slic3r::center(), Slic3r::ExtrusionLoop::collect_points(), and PI.

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

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

◆ make_skirt_loops_per_extruder_1st_layer()

std::map< unsigned int, std::pair< size_t, size_t > > Slic3r::Skirt::make_skirt_loops_per_extruder_1st_layer ( const Print & print,
const ExtrusionEntityCollection & skirt,
const LayerTools & layer_tools,
std::vector< coordf_t > & skirt_done )
static
5782 {
5783 // Extrude skirt at the print_z of the raft layers and normal object layers
5784 // not at the print_z of the interlaced support material layers.
5785 std::map<unsigned int, std::pair<size_t, size_t>> skirt_loops_per_extruder_out;
5786 //For sequential print, the following test may fail when extruding the 2nd and other objects.
5787 // assert(skirt_done.empty());
5788 const bool has_skirt_or_draft_shield = print.has_skirt() || print.has_infinite_skirt();
5789 if (skirt_done.empty() && has_skirt_or_draft_shield && ! skirt.entities.empty() && layer_tools.has_skirt) {
5790 skirt_loops_per_extruder_all_printing(print, skirt, layer_tools, skirt_loops_per_extruder_out);
5791 skirt_done.emplace_back(layer_tools.print_z);
5792 }
5793 return skirt_loops_per_extruder_out;
5794 }
ExtrusionEntitiesPtr entities
Definition ExtrusionEntityCollection.hpp:39
bool has_skirt
Definition ToolOrdering.hpp:181
coordf_t print_z
Definition ToolOrdering.hpp:171
bool has_skirt() const
Definition Print.cpp:841
bool has_infinite_skirt() const
Definition Print.cpp:830
static void skirt_loops_per_extruder_all_printing(const Print &print, const ExtrusionEntityCollection &skirt, const LayerTools &layer_tools, std::map< unsigned int, std::pair< size_t, size_t > > &skirt_loops_per_extruder_out)
Definition GCode.cpp:5757

References Slic3r::ExtrusionEntityCollection::entities, Slic3r::Print::has_infinite_skirt(), Slic3r::LayerTools::has_skirt, Slic3r::Print::has_skirt(), Slic3r::LayerTools::print_z, and skirt_loops_per_extruder_all_printing().

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

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

◆ make_skirt_loops_per_extruder_other_layers()

std::map< unsigned int, std::pair< size_t, size_t > > Slic3r::Skirt::make_skirt_loops_per_extruder_other_layers ( const Print & print,
const ExtrusionEntityCollection & skirt,
const LayerTools & layer_tools,
std::vector< coordf_t > & skirt_done )
static
5802 {
5803 // Extrude skirt at the print_z of the raft layers and normal object layers
5804 // not at the print_z of the interlaced support material layers.
5805 std::map<unsigned int, std::pair<size_t, size_t>> skirt_loops_per_extruder_out;
5806 const bool has_skirt_or_draft_shield = print.has_skirt() || print.has_infinite_skirt();
5807 if (has_skirt_or_draft_shield && ! skirt.entities.empty() && layer_tools.has_skirt &&
5808 // Not enough skirt layers printed yet.
5809 //FIXME infinite or high skirt does not make sense for sequential print!
5810 (skirt_done.size() < (size_t)print.config().skirt_height.value || print.has_infinite_skirt())) {
5811 assert(!skirt_done.empty());
5812 if (skirt_done.empty())
5813 return skirt_loops_per_extruder_out;
5814 // This print_z has not been extruded yet.
5815 if (skirt_done.back() < layer_tools.print_z - EPSILON) {
5816#if 0
5817 // Prime just the first printing extruder. This is original Slic3r's implementation.
5818 skirt_loops_per_extruder_out[layer_tools.extruders.front()] = std::pair<size_t, size_t>(0, print.config().skirt_loops.value);
5819#else
5820 // Prime all extruders planned for this layer, see
5821 skirt_loops_per_extruder_all_printing(print, skirt, layer_tools, skirt_loops_per_extruder_out);
5822#endif
5823 skirt_done.emplace_back(layer_tools.print_z);
5824 }
5825 }
5826 return skirt_loops_per_extruder_out;
5827 }
#define EPSILON
Definition ColorUtils.cpp:64
std::vector< unsigned int > extruders
Definition ToolOrdering.hpp:175
const PrintConfig & config() const
Definition Print.hpp:1131

References Slic3r::Print::config(), Slic3r::ExtrusionEntityCollection::entities, EPSILON, Slic3r::LayerTools::extruders, Slic3r::Print::has_infinite_skirt(), Slic3r::LayerTools::has_skirt, Slic3r::Print::has_skirt(), Slic3r::LayerTools::print_z, and skirt_loops_per_extruder_all_printing().

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

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

◆ skirt_loops_per_extruder_all_printing()

void Slic3r::Skirt::skirt_loops_per_extruder_all_printing ( const Print & print,
const ExtrusionEntityCollection & skirt,
const LayerTools & layer_tools,
std::map< unsigned int, std::pair< size_t, size_t > > & skirt_loops_per_extruder_out )
static
5758 {
5759 // Prime all extruders printing over the 1st layer over the skirt lines.
5760 size_t n_loops = skirt.entities.size();
5761 size_t n_tools = layer_tools.extruders.size();
5762 size_t lines_per_extruder = (n_loops + n_tools - 1) / n_tools;
5763
5764 // BBS. Extrude skirt with first extruder if min_skirt_length is zero
5765 //ORCA: Always extrude skirt with first extruder, independantly of if the minimum skirt length is zero or not. The code below
5766 // is left as a placeholder for when a multiextruder support is implemented. Then we will need to extrude the skirt loops for each extruder.
5767 //const PrintConfig &config = print.config();
5768 //if (config.min_skirt_length.value < EPSILON) {
5769 skirt_loops_per_extruder_out[layer_tools.extruders.front()] = std::pair<size_t, size_t>(0, n_loops);
5770 //} else {
5771 // for (size_t i = 0; i < n_loops; i += lines_per_extruder)
5772 // skirt_loops_per_extruder_out[layer_tools.extruders[i / lines_per_extruder]] = std::pair<size_t, size_t>(i, std::min(i + lines_per_extruder, n_loops));
5773 //}
5774 }

References Slic3r::ExtrusionEntityCollection::entities, and Slic3r::LayerTools::extruders.

Referenced by make_skirt_loops_per_extruder_1st_layer(), and make_skirt_loops_per_extruder_other_layers().

Here is the caller graph for this function: