Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/supermerill/SuperSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsupermerill <merill@fr.fr>2018-08-04 00:58:10 +0300
committersupermerill <merill@fr.fr>2018-09-05 18:05:25 +0300
commit2437579de68881fc1c58374a330b82fd11047174 (patch)
tree6cbf4a242f90a71b0f5da15d1124d2da78315e7a /xs/src/libslic3r
parent5dd709bf1efeeff3f5d865b29a35258dec25f027 (diff)
auto dense infill : add no_sort to draw the perimeter first
Diffstat (limited to 'xs/src/libslic3r')
-rw-r--r--xs/src/libslic3r/Fill/FillRectilinear2.cpp52
-rw-r--r--xs/src/libslic3r/Fill/FillRectilinear2.hpp3
-rw-r--r--xs/src/libslic3r/Fill/FillSmooth.cpp3
-rw-r--r--xs/src/libslic3r/PrintObject.cpp2
4 files changed, 49 insertions, 11 deletions
diff --git a/xs/src/libslic3r/Fill/FillRectilinear2.cpp b/xs/src/libslic3r/Fill/FillRectilinear2.cpp
index d8b0f0fbf..3d4186aac 100644
--- a/xs/src/libslic3r/Fill/FillRectilinear2.cpp
+++ b/xs/src/libslic3r/Fill/FillRectilinear2.cpp
@@ -7,6 +7,7 @@
#include <boost/static_assert.hpp>
+#include "../ExtrusionEntityCollection.hpp"
#include "../ClipperUtils.hpp"
#include "../ExPolygon.hpp"
#include "../Geometry.hpp"
@@ -1473,29 +1474,68 @@ Polylines FillCubic::fill_surface(const Surface *surface, const FillParams &para
}
-Polylines FillRectilinear2Peri::fill_surface(const Surface *surface, const FillParams &params) {
- Polylines polylines_out;
+//Polylines FillRectilinear2Peri::fill_surface(const Surface *surface, const FillParams &params) {
+
+void FillRectilinear2Peri::fill_surface_extrusion(const Surface *surface, const FillParams &params, const Flow &flow, ExtrusionEntityCollection &out) {
+ ExtrusionEntityCollection *eecroot = new ExtrusionEntityCollection();
+ //you don't want to sort the extrusions: big infill first, small second
+ eecroot->no_sort = true;
+
+ Polylines polylines_1;
//generate perimeter:
//TODO: better optimize start/end point?
ExPolygons path_perimeter = offset_ex(surface->expolygon, scale_(-this->spacing/2));
for (ExPolygon &expolygon : path_perimeter) {
expolygon.contour.make_counter_clockwise();
- polylines_out.push_back(expolygon.contour.split_at_index(0));
+ polylines_1.push_back(expolygon.contour.split_at_index(0));
for (Polygon hole : expolygon.holes) {
hole.make_clockwise();
- polylines_out.push_back(hole.split_at_index(0));
+ polylines_1.push_back(hole.split_at_index(0));
}
}
+ // Save into layer.
+ auto *eec = new ExtrusionEntityCollection();
+ /// pass the no_sort attribute to the extrusion path
+ eec->no_sort = this->no_sort();
+ /// add it into the collection
+ eecroot->entities.push_back(eec);
+ /// push the path
+ extrusion_entities_append_paths(
+ eec->entities, STDMOVE(polylines_1),
+ flow.bridge ?
+ erBridgeInfill :
+ (surface->is_solid() ?
+ ((surface->is_top()) ? erTopSolidInfill : erSolidInfill) :
+ erInternalInfill),
+ flow.mm3_per_mm() * params.flow_mult, flow.width * params.flow_mult, flow.height);
+
+ Polylines polylines_2;
//50% overlap with the new perimeter
ExPolygons path_inner = offset2_ex(surface->expolygon, scale_(-this->spacing * 1.5), scale_(this->spacing));
for (ExPolygon &expolygon : path_inner) {
Surface surfInner(*surface, expolygon);
- if (!fill_surface_by_lines(&surfInner, params, 0.f, 0.f, polylines_out)) {
+ if (!fill_surface_by_lines(&surfInner, params, 0.f, 0.f, polylines_2)) {
printf("FillRectilinear2::fill_surface() failed to fill a region.\n");
}
}
- return polylines_out;
+ // Save into layer.
+ eec = new ExtrusionEntityCollection();
+ /// pass the no_sort attribute to the extrusion path
+ eec->no_sort = this->no_sort();
+ /// add it into the collection
+ eecroot->entities.push_back(eec);
+ /// push the path
+ extrusion_entities_append_paths(
+ eec->entities, STDMOVE(polylines_2),
+ flow.bridge ?
+ erBridgeInfill :
+ (surface->is_solid() ?
+ ((surface->is_top()) ? erTopSolidInfill : erSolidInfill) :
+ erInternalInfill),
+ flow.mm3_per_mm() * params.flow_mult, flow.width * params.flow_mult, flow.height);
+
+ out.entities.push_back(eecroot);
}
} // namespace Slic3r
diff --git a/xs/src/libslic3r/Fill/FillRectilinear2.hpp b/xs/src/libslic3r/Fill/FillRectilinear2.hpp
index d3621914f..53621d139 100644
--- a/xs/src/libslic3r/Fill/FillRectilinear2.hpp
+++ b/xs/src/libslic3r/Fill/FillRectilinear2.hpp
@@ -75,7 +75,8 @@ public:
virtual Fill* clone() const { return new FillRectilinear2Peri(*this); };
virtual ~FillRectilinear2Peri() {}
- virtual Polylines fill_surface(const Surface *surface, const FillParams &params);
+ //virtual Polylines fill_surface(const Surface *surface, const FillParams &params);
+ virtual void fill_surface_extrusion(const Surface *surface, const FillParams &params, const Flow &flow, ExtrusionEntityCollection &out);
};
diff --git a/xs/src/libslic3r/Fill/FillSmooth.cpp b/xs/src/libslic3r/Fill/FillSmooth.cpp
index 3fc1d7d1c..59e63c792 100644
--- a/xs/src/libslic3r/Fill/FillSmooth.cpp
+++ b/xs/src/libslic3r/Fill/FillSmooth.cpp
@@ -95,9 +95,6 @@ namespace Slic3r {
if (extrudedVolume == 0) extrudedVolume = 1;
// Save into layer smoothing path.
- eec = new ExtrusionEntityCollection();
- eecroot->entities.push_back(eec);
- eec->no_sort = false;
// print thin
eec = new ExtrusionEntityCollection();
diff --git a/xs/src/libslic3r/PrintObject.cpp b/xs/src/libslic3r/PrintObject.cpp
index 42a17a996..c7c8aa62d 100644
--- a/xs/src/libslic3r/PrintObject.cpp
+++ b/xs/src/libslic3r/PrintObject.cpp
@@ -499,7 +499,7 @@ ExPolygons fit_to_size(ExPolygon polygon_to_cover, ExPolygon polygon_to_check, c
void PrintObject::count_distance_solid() {
//if dense area * COEFF_SPLIT > sparse area then fill all with dense
// sparse area = layer's fill area - dense area
- const float COEFF_SPLIT = .1;
+ const float COEFF_SPLIT = 1;
const int NB_DENSE_LAYERS = 1;
for (int idx_region = 0; idx_region < this->_print->regions.size(); ++idx_region) {
//count how many surface there are on each one