diff options
author | Alessandro Ranellucci <aar@cpan.org> | 2015-07-23 17:27:21 +0300 |
---|---|---|
committer | Alessandro Ranellucci <aar@cpan.org> | 2015-07-23 17:27:21 +0300 |
commit | 6ac79e3ed6bf903edf45b52ee6fd68c1b0b54a9d (patch) | |
tree | 80f2851dc58cfbc8c27d7a58d282ac4b45972483 /xs/src/libslic3r | |
parent | 15d2522f3d4b327c24919393677a57a438175d9c (diff) |
Ported make_perimeters() to C++
Diffstat (limited to 'xs/src/libslic3r')
-rw-r--r-- | xs/src/libslic3r/ExtrusionEntityCollection.hpp | 3 | ||||
-rw-r--r-- | xs/src/libslic3r/Layer.hpp | 1 | ||||
-rw-r--r-- | xs/src/libslic3r/LayerRegion.cpp | 33 | ||||
-rw-r--r-- | xs/src/libslic3r/PerimeterGenerator.hpp | 6 |
4 files changed, 40 insertions, 3 deletions
diff --git a/xs/src/libslic3r/ExtrusionEntityCollection.hpp b/xs/src/libslic3r/ExtrusionEntityCollection.hpp index 504c82ae1..62909c55c 100644 --- a/xs/src/libslic3r/ExtrusionEntityCollection.hpp +++ b/xs/src/libslic3r/ExtrusionEntityCollection.hpp @@ -29,6 +29,9 @@ class ExtrusionEntityCollection : public ExtrusionEntity bool empty() const { return this->entities.empty(); }; + void clear() { + this->entities.clear(); + }; void swap (ExtrusionEntityCollection &c); void append(const ExtrusionEntity &entity); void append(const ExtrusionEntitiesPtr &entities); diff --git a/xs/src/libslic3r/Layer.hpp b/xs/src/libslic3r/Layer.hpp index 85f4844cb..1c09b5f0f 100644 --- a/xs/src/libslic3r/Layer.hpp +++ b/xs/src/libslic3r/Layer.hpp @@ -57,6 +57,7 @@ class LayerRegion Flow flow(FlowRole role, bool bridge = false, double width = -1) const; void merge_slices(); void prepare_fill_surfaces(); + void make_perimeters(const SurfaceCollection &slices, SurfaceCollection* fill_surfaces); private: Layer *_layer; diff --git a/xs/src/libslic3r/LayerRegion.cpp b/xs/src/libslic3r/LayerRegion.cpp index d09ea19c7..ef6150015 100644 --- a/xs/src/libslic3r/LayerRegion.cpp +++ b/xs/src/libslic3r/LayerRegion.cpp @@ -1,5 +1,6 @@ #include "Layer.hpp" #include "ClipperUtils.hpp" +#include "PerimeterGenerator.hpp" #include "Print.hpp" #include "Surface.hpp" @@ -54,6 +55,38 @@ LayerRegion::merge_slices() } void +LayerRegion::make_perimeters(const SurfaceCollection &slices, SurfaceCollection* fill_surfaces) +{ + this->perimeters.clear(); + this->thin_fills.clear(); + + PerimeterGenerator g( + // input: + &slices, + this->layer()->height, + this->flow(frPerimeter), + &this->region()->config, + &this->layer()->object()->config, + &this->layer()->object()->print()->config, + + // output: + &this->perimeters, + &this->thin_fills, + fill_surfaces + ); + + if (this->layer()->lower_layer != NULL) + g.lower_slices = &this->layer()->lower_layer->slices; + + g.layer_id = this->layer()->id(); + g.ext_perimeter_flow = this->flow(frExternalPerimeter); + g.overhang_flow = this->region()->flow(frPerimeter, -1, true, false, -1, *this->layer()->object()); + g.solid_infill_flow = this->flow(frSolidInfill); + + g.process(); +} + +void LayerRegion::prepare_fill_surfaces() { /* Note: in order to make the psPrepareInfill step idempotent, we should never diff --git a/xs/src/libslic3r/PerimeterGenerator.hpp b/xs/src/libslic3r/PerimeterGenerator.hpp index 6465d63f9..8ce5f87d9 100644 --- a/xs/src/libslic3r/PerimeterGenerator.hpp +++ b/xs/src/libslic3r/PerimeterGenerator.hpp @@ -30,8 +30,8 @@ class PerimeterGeneratorLoop { class PerimeterGenerator { public: - SurfaceCollection* slices; - ExPolygonCollection* lower_slices; + const SurfaceCollection* slices; + const ExPolygonCollection* lower_slices; double layer_height; int layer_id; Flow perimeter_flow; @@ -45,7 +45,7 @@ class PerimeterGenerator { ExtrusionEntityCollection* gap_fill; SurfaceCollection* fill_surfaces; - PerimeterGenerator(SurfaceCollection* slices, double layer_height, Flow flow, + PerimeterGenerator(const SurfaceCollection* slices, double layer_height, Flow flow, PrintRegionConfig* config, PrintObjectConfig* object_config, PrintConfig* print_config, ExtrusionEntityCollection* loops, ExtrusionEntityCollection* gap_fill, SurfaceCollection* fill_surfaces) |