diff options
author | tamasmeszaros <meszaros.q@gmail.com> | 2020-03-02 14:43:00 +0300 |
---|---|---|
committer | tamasmeszaros <meszaros.q@gmail.com> | 2020-03-02 14:43:00 +0300 |
commit | e3a583292ad480e61ddf5815f50cbfb671c02e7d (patch) | |
tree | 282318d2ca6fe3ffe4413465e2f4cfe9a094ccd8 /src/libslic3r | |
parent | 7cb92ef5e8bdd4f1110ec941ff2bbd54bc609da0 (diff) |
Promote max_bridges_on_pillar to be a runtime parameter.
This way the user greater control over support tree branching and the amount of pillars created.
Diffstat (limited to 'src/libslic3r')
-rw-r--r-- | src/libslic3r/PrintConfig.cpp | 10 | ||||
-rw-r--r-- | src/libslic3r/PrintConfig.hpp | 4 | ||||
-rw-r--r-- | src/libslic3r/SLA/SupportTree.cpp | 1 | ||||
-rw-r--r-- | src/libslic3r/SLA/SupportTree.hpp | 4 | ||||
-rw-r--r-- | src/libslic3r/SLAPrint.cpp | 3 |
5 files changed, 20 insertions, 2 deletions
diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 2be1f8cf6..adb1f4ee3 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -2653,6 +2653,16 @@ void PrintConfigDef::init_sla_params() def->max = 15; def->mode = comSimple; def->set_default_value(new ConfigOptionFloat(1.0)); + + def = this->add("support_max_bridges_on_pillar", coInt); + def->label = L("Max bridges on a pillar"); + def->tooltip = L( + "Maximum number of bridges that can be placed on a pillar. Bridges " + "hold support point pinheads and connect to pillars as small branches."); + def->min = 0; + def->max = 50; + def->mode = comExpert; + def->set_default_value(new ConfigOptionInt(3)); def = this->add("support_pillar_connection_mode", coEnum); def->label = L("Support pillar connection mode"); diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index 8c6710dad..f6a2bd679 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -980,6 +980,9 @@ public: // Radius in mm of the support pillars. ConfigOptionFloat support_pillar_diameter /*= 0.8*/; + + // How much bridge (supporting another pinhead) can be placed on a pillar. + ConfigOptionInt support_max_bridges_on_pillar; // How the pillars are bridged together ConfigOptionEnum<SLAPillarConnectionMode> support_pillar_connection_mode; @@ -1101,6 +1104,7 @@ protected: OPT_PTR(support_head_penetration); OPT_PTR(support_head_width); OPT_PTR(support_pillar_diameter); + OPT_PTR(support_max_bridges_on_pillar); OPT_PTR(support_pillar_connection_mode); OPT_PTR(support_buildplate_only); OPT_PTR(support_pillar_widening_factor); diff --git a/src/libslic3r/SLA/SupportTree.cpp b/src/libslic3r/SLA/SupportTree.cpp index 5ee35f9e0..528778b68 100644 --- a/src/libslic3r/SLA/SupportTree.cpp +++ b/src/libslic3r/SLA/SupportTree.cpp @@ -41,7 +41,6 @@ const double SupportConfig::max_dual_pillar_height_mm = 35.0; const double SupportConfig::optimizer_rel_score_diff = 1e-6; const unsigned SupportConfig::optimizer_max_iterations = 1000; const unsigned SupportConfig::pillar_cascade_neighbors = 3; -const unsigned SupportConfig::max_bridges_on_pillar = 3; void SupportTree::retrieve_full_mesh(TriangleMesh &outmesh) const { outmesh.merge(retrieve_mesh(MeshType::Support)); diff --git a/src/libslic3r/SLA/SupportTree.hpp b/src/libslic3r/SLA/SupportTree.hpp index acf6c10f5..c6255aa2f 100644 --- a/src/libslic3r/SLA/SupportTree.hpp +++ b/src/libslic3r/SLA/SupportTree.hpp @@ -83,6 +83,8 @@ struct SupportConfig // body. This is only useful when elevation is set to zero. double pillar_base_safety_distance_mm = 0.5; + unsigned max_bridges_on_pillar = 3; + double head_fullwidth() const { return 2 * head_front_radius_mm + head_width_mm + 2 * head_back_radius_mm - head_penetration_mm; @@ -103,7 +105,7 @@ struct SupportConfig static const double optimizer_rel_score_diff; static const unsigned optimizer_max_iterations; static const unsigned pillar_cascade_neighbors; - static const unsigned max_bridges_on_pillar; + }; enum class MeshType { Support, Pad }; diff --git a/src/libslic3r/SLAPrint.cpp b/src/libslic3r/SLAPrint.cpp index cca0abd5c..4ec5aae29 100644 --- a/src/libslic3r/SLAPrint.cpp +++ b/src/libslic3r/SLAPrint.cpp @@ -65,6 +65,8 @@ sla::SupportConfig make_support_cfg(const SLAPrintObjectConfig& c) c.support_base_safety_distance.getFloat() < EPSILON ? scfg.safety_distance_mm : c.support_base_safety_distance.getFloat(); + scfg.max_bridges_on_pillar = unsigned(c.support_max_bridges_on_pillar.getInt()); + return scfg; } @@ -946,6 +948,7 @@ bool SLAPrintObject::invalidate_state_by_config_options(const std::vector<t_conf || opt_key == "support_head_penetration" || opt_key == "support_head_width" || opt_key == "support_pillar_diameter" + || opt_key == "support_max_bridges_on_pillar" || opt_key == "support_pillar_connection_mode" || opt_key == "support_buildplate_only" || opt_key == "support_base_diameter" |