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:
authortamasmeszaros <meszaros.q@gmail.com>2020-03-02 14:43:00 +0300
committertamasmeszaros <meszaros.q@gmail.com>2020-03-02 14:43:00 +0300
commite3a583292ad480e61ddf5815f50cbfb671c02e7d (patch)
tree282318d2ca6fe3ffe4413465e2f4cfe9a094ccd8 /src/libslic3r
parent7cb92ef5e8bdd4f1110ec941ff2bbd54bc609da0 (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.cpp10
-rw-r--r--src/libslic3r/PrintConfig.hpp4
-rw-r--r--src/libslic3r/SLA/SupportTree.cpp1
-rw-r--r--src/libslic3r/SLA/SupportTree.hpp4
-rw-r--r--src/libslic3r/SLAPrint.cpp3
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"