From d52dbf2bbd75eb6440943c68e096dfe8f66a56c3 Mon Sep 17 00:00:00 2001 From: Samir55 Date: Thu, 12 Jul 2018 02:16:11 +0200 Subject: [PATCH] Refactoring. --- xs/src/libslic3r/SupportMaterial.cpp | 48 ++++++++++++++++++++++++++ xs/src/libslic3r/SupportMaterial.hpp | 50 +++------------------------- 2 files changed, 52 insertions(+), 46 deletions(-) diff --git a/xs/src/libslic3r/SupportMaterial.cpp b/xs/src/libslic3r/SupportMaterial.cpp index 6414c444d..8ee04840a 100644 --- a/xs/src/libslic3r/SupportMaterial.cpp +++ b/xs/src/libslic3r/SupportMaterial.cpp @@ -764,4 +764,52 @@ SupportMaterial::generate_interface_layers(vector support_z, return interface; } +map +SupportMaterial::generate_base_layers(vector support_z, + map contact, + map interface, + map top) +{ + // Let's now generate support layers under interface layers. + map base; + { + for (int i = static_cast(support_z.size() - 1); i >= 0; i--) { + auto z = support_z[i]; + auto overlapping_layers = this->overlapping_layers(i, support_z); + vector overlapping_z; + for (auto el : overlapping_layers) + overlapping_z.push_back(support_z[el]); + + // In case we have no interface layers, look at upper contact + // (1 interface layer means we only have contact layer, so $interface->{$i+1} is empty). + Polygons upper_contact; + if (object_config->support_material_interface_layers.value <= 1) { + append_polygons(upper_contact, contact[support_z[i + 1]]); + } + + Polygons ps_1; + append_polygons(ps_1, base[i + 1]); // support regions on upper layer. + append_polygons(ps_1, interface[i + 1]); // interface regions on upper layer + append_polygons(ps_1, upper_contact); // contact regions on upper layer + + Polygons ps_2; + for (auto el : overlapping_z) { + if (top.count(el) > 0) + append_polygons(ps_2, top[el]); // top slices on this layer. + if (interface.count(el)) + append_polygons(ps_2, interface[el]); // interface regions on this layer. + if (contact.count(el)) + append_polygons(ps_2, contact[el]); // contact regions on this layer. + } + + base[i] = diff( + ps_1, + ps_2, + 1 + ); + } + } + return base; +} + } diff --git a/xs/src/libslic3r/SupportMaterial.hpp b/xs/src/libslic3r/SupportMaterial.hpp index 723e9569e..7012e77b8 100644 --- a/xs/src/libslic3r/SupportMaterial.hpp +++ b/xs/src/libslic3r/SupportMaterial.hpp @@ -53,55 +53,13 @@ public: void generate_bottom_interface_layers() {} + void generate_pillars_shape() + {} + map generate_base_layers(vector support_z, map contact, map interface, - map top) - { - // Let's now generate support layers under interface layers. - map base; - { - for (int i = static_cast(support_z.size() - 1); i >= 0; i--) { - auto z = support_z[i]; - auto overlapping_layers = this->overlapping_layers(i, support_z); - vector overlapping_z; - for (auto el : overlapping_layers) - overlapping_z.push_back(support_z[el]); - - // In case we have no interface layers, look at upper contact - // (1 interface layer means we only have contact layer, so $interface->{$i+1} is empty). - Polygons upper_contact; - if (object_config->support_material_interface_layers.value <= 1) { - append_polygons(upper_contact, contact[support_z[i + 1]]); - } - - Polygons ps_1; - append_polygons(ps_1, base[i + 1]); // support regions on upper layer. - append_polygons(ps_1, interface[i + 1]); // interface regions on upper layer - append_polygons(ps_1, upper_contact); // contact regions on upper layer - - Polygons ps_2; - for (auto el : overlapping_z) { - if (top.count(el) > 0) - append_polygons(ps_2, top[el]); // top slices on this layer. - if (interface.count(el)) - append_polygons(ps_2, interface[el]); // interface regions on this layer. - if (contact.count(el)) - append_polygons(ps_2, contact[el]); // contact regions on this layer. - } - - base[i] = diff( - ps_1, - ps_2, - 1 - ); - } - } - return base; - } - - void generate_pillars_shape() - {} + map top); map generate_interface_layers(vector support_z, map contact,