Skip to content

Commit

Permalink
some fixes for sequential printing, periemter bonding. More responsiv…
Browse files Browse the repository at this point in the history
…e cancel.
  • Loading branch information
supermerill committed Feb 27, 2024
2 parents dd1cc46 + d12003a commit 6321401
Show file tree
Hide file tree
Showing 13 changed files with 124 additions and 71 deletions.
2 changes: 1 addition & 1 deletion resources/profiles
Submodule profiles updated 2 files
+0 −1 Basic.ini
+1 −1 Voron.ini
24 changes: 18 additions & 6 deletions src/libslic3r/ExtrusionEntity.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -462,12 +462,24 @@ class ExtrusionLoop : public ExtrusionEntity
ExtrusionPaths paths;

ExtrusionLoop(ExtrusionLoopRole role = elrDefault) : m_loop_role(role) , ExtrusionEntity(false) {}
ExtrusionLoop(const ExtrusionPaths &paths, ExtrusionLoopRole role = elrDefault) : paths(paths), m_loop_role(role), ExtrusionEntity(false) { assert(this->first_point().coincides_with_epsilon(this->paths.back().polyline.back())); }
ExtrusionLoop(ExtrusionPaths &&paths, ExtrusionLoopRole role = elrDefault) : paths(std::move(paths)), m_loop_role(role), ExtrusionEntity(false) { assert(this->first_point().coincides_with_epsilon(this->paths.back().polyline.back())); }
ExtrusionLoop(const ExtrusionPath &path, ExtrusionLoopRole role = elrDefault) : m_loop_role(role), ExtrusionEntity(false)
{ this->paths.push_back(path); }
ExtrusionLoop(ExtrusionPath &&path, ExtrusionLoopRole role = elrDefault) : m_loop_role(role), ExtrusionEntity(false)
{ this->paths.emplace_back(std::move(path)); }
ExtrusionLoop(const ExtrusionPaths &paths, ExtrusionLoopRole role = elrDefault) : paths(paths), m_loop_role(role), ExtrusionEntity(false) {
assert(!this->paths.empty());
assert(this->first_point().coincides_with_epsilon(this->paths.back().polyline.back()));
}
ExtrusionLoop(ExtrusionPaths &&paths, ExtrusionLoopRole role = elrDefault) : paths(std::move(paths)), m_loop_role(role), ExtrusionEntity(false) {
assert(!this->paths.empty());
assert(this->first_point().coincides_with_epsilon(this->paths.back().polyline.back()));
}
ExtrusionLoop(const ExtrusionPath &path, ExtrusionLoopRole role = elrDefault) : m_loop_role(role), ExtrusionEntity(false) {
this->paths.push_back(path);
assert(!this->paths.empty());
assert(this->first_point().coincides_with_epsilon(this->paths.back().polyline.back()));
}
ExtrusionLoop(ExtrusionPath &&path, ExtrusionLoopRole role = elrDefault) : m_loop_role(role), ExtrusionEntity(false) {
this->paths.emplace_back(std::move(path));
assert(!this->paths.empty());
assert(this->first_point().coincides_with_epsilon(this->paths.back().polyline.back()));
}
virtual bool is_loop() const override{ return true; }
virtual ExtrusionEntity* clone() const override{ return new ExtrusionLoop (*this); }
// Create a new object, initialize it with this object using the move semantics.
Expand Down
8 changes: 4 additions & 4 deletions src/libslic3r/Fill/Fill.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -552,12 +552,12 @@ void Layer::make_fills(FillAdaptive::Octree* adaptive_fill_octree, FillAdaptive:
// printf("flow spacing: %f, is_external: %d, link_max_length: %lf\n", flow.spacing(), int(surface.is_external()), link_max_length);
#else
if (surface_fill.params.density > .8) // 80%
link_max_length = 3. * f->get_spacing();
link_max_length = 6. * f->get_spacing();
#endif
}

// Maximum length of the perimeter segment linking two infill lines.
f->link_max_length = (coord_t)scale_(link_max_length);
f->link_max_length = scale_t(link_max_length);

//give the overlap size to let the infill do his overlap
//add overlap if at least one perimeter
Expand Down Expand Up @@ -910,13 +910,13 @@ void Layer::make_ironing()
polys = union_safety_offset(polys);
}
// Trim the top surfaces with half the nozzle diameter.
ironing_areas = intersection_ex(polys, offset(this->lslices, -float(scale_(0.5 * nozzle_dmr))));
ironing_areas = intersection_ex(polys, offset(this->lslices, -float(scale_d(0.5 * nozzle_dmr))));
}

// Create the filler object.
fill.init_spacing(ironing_params.line_spacing, fill_params);
fill.angle = float(ironing_params.angle + 0.25 * M_PI);
fill.link_max_length = (coord_t)scale_(3. * fill.get_spacing());
fill.link_max_length = scale_t(6 * fill.get_spacing());
double extrusion_height = ironing_params.height * fill.get_spacing() / nozzle_dmr;
//FIXME FLOW decide if it's good
double max_overlap = region_config.get_computed_value("filament_max_overlap", ironing_params.extruder - 1);
Expand Down
2 changes: 1 addition & 1 deletion src/libslic3r/Fill/FillRectilinear.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1256,7 +1256,7 @@ static void connect_segment_intersections_by_contours(
itsct.prev_on_contour_quality = SegmentIntersection::LinkQuality::TooLong;
if (itsct.next_on_contour_quality == SegmentIntersection::LinkQuality::Valid)
itsct.next_on_contour_quality = SegmentIntersection::LinkQuality::TooLong;
} else if (link_max_length > 0 && false /*FIXME SuperSlicer::2141*/) {
} else if (link_max_length > 0) {
// Measure length of the links.
if (itsct.prev_on_contour_quality == SegmentIntersection::LinkQuality::Valid &&
(same_prev ?
Expand Down
Loading

0 comments on commit 6321401

Please sign in to comment.