diff --git a/src/libslic3r/Interlocking/InterlockingGenerator.cpp b/src/libslic3r/Interlocking/InterlockingGenerator.cpp index 07c3059302e..1899c0d1af6 100644 --- a/src/libslic3r/Interlocking/InterlockingGenerator.cpp +++ b/src/libslic3r/Interlocking/InterlockingGenerator.cpp @@ -21,7 +21,7 @@ template<> struct hash namespace Slic3r { -void PrintObject::generate_interlocking_structure() +void InterlockingGenerator::generate_interlocking_structure(PrintObject* print_object) { const float rotation = Geometry::deg2rad(22.5); //(global_settings.get("interlocking_orientation")); const coord_t beam_layer_count = 2; // global_settings.get("interlocking_beam_layer_count"); @@ -37,18 +37,18 @@ void PrintObject::generate_interlocking_structure() const coord_t cell_width = beam_width + beam_width; const Vec3crd cell_size(cell_width, cell_width, 2 * beam_layer_count); - for (size_t region_a_index = 0; region_a_index < num_printing_regions(); region_a_index++) { - const PrintRegion& region_a = printing_region(region_a_index); + for (size_t region_a_index = 0; region_a_index < print_object->num_printing_regions(); region_a_index++) { + const PrintRegion& region_a = print_object->printing_region(region_a_index); const auto extruder_nr_a = region_a.extruder(FlowRole::frExternalPerimeter); - for (size_t region_b_index = region_a_index + 1; region_b_index < num_printing_regions(); region_b_index++) { - const PrintRegion& region_b = printing_region(region_b_index); + for (size_t region_b_index = region_a_index + 1; region_b_index < print_object->num_printing_regions(); region_b_index++) { + const PrintRegion& region_b = print_object->printing_region(region_b_index); const auto extruder_nr_b = region_b.extruder(FlowRole::frExternalPerimeter); if (extruder_nr_a == extruder_nr_b) { continue; } - InterlockingGenerator gen(*this, region_a_index, region_b_index, beam_width, boundary_avoidance, rotation, cell_size, beam_layer_count, + InterlockingGenerator gen(*print_object, region_a_index, region_b_index, beam_width, boundary_avoidance, rotation, cell_size, beam_layer_count, interface_dilation, air_dilation, air_filtering); gen.generateInterlockingStructure(); } diff --git a/src/libslic3r/Interlocking/InterlockingGenerator.hpp b/src/libslic3r/Interlocking/InterlockingGenerator.hpp index 7573775fc46..aca74010cd0 100644 --- a/src/libslic3r/Interlocking/InterlockingGenerator.hpp +++ b/src/libslic3r/Interlocking/InterlockingGenerator.hpp @@ -42,6 +42,12 @@ namespace Slic3r { class InterlockingGenerator { public: + /*! + * Generate an interlocking structure between each two adjacent meshes. + */ + static void generate_interlocking_structure(PrintObject* print_object); + +private: /*! * Generate an interlocking structure between two meshes */ @@ -83,8 +89,6 @@ class InterlockingGenerator , air_dilation(air_dilation) , air_filtering(air_filtering) {} - -private: /*! Given two polygons, return the parts that border on air, and grow 'perpendicular' up to 'detect' distance. * diff --git a/src/libslic3r/Print.hpp b/src/libslic3r/Print.hpp index c6acc1e4933..bd7b867b99e 100644 --- a/src/libslic3r/Print.hpp +++ b/src/libslic3r/Print.hpp @@ -550,10 +550,6 @@ class PrintObject : public PrintObjectBaseWithState + //! macro used to mark string used at localization, return same string #define L(s) Slic3r::I18N::translate(s) @@ -1072,7 +1074,7 @@ void PrintObject::slice_volumes() this->apply_conical_overhang(); m_print->throw_if_canceled(); - this->generate_interlocking_structure(); + InterlockingGenerator::generate_interlocking_structure(this); m_print->throw_if_canceled(); BOOST_LOG_TRIVIAL(debug) << "Slicing volumes - make_slices in parallel - begin";