wip adding separate config values for support tree algorithms
This commit is contained in:
parent
c79a46e6cb
commit
878f3b30dd
@ -495,6 +495,7 @@ static std::vector<std::string> s_Preset_sla_print_options {
|
||||
"faded_layers",
|
||||
"supports_enable",
|
||||
"support_tree_type",
|
||||
|
||||
"support_head_front_diameter",
|
||||
"support_head_penetration",
|
||||
"support_head_width",
|
||||
@ -512,6 +513,25 @@ static std::vector<std::string> s_Preset_sla_print_options {
|
||||
"support_max_bridge_length",
|
||||
"support_max_pillar_link_distance",
|
||||
"support_object_elevation",
|
||||
|
||||
"branchingsupport_head_front_diameter",
|
||||
"branchingsupport_head_penetration",
|
||||
"branchingsupport_head_width",
|
||||
"branchingsupport_pillar_diameter",
|
||||
"branchingsupport_small_pillar_diameter_percent",
|
||||
"branchingsupport_max_bridges_on_pillar",
|
||||
"branchingsupport_max_weight_on_model",
|
||||
"branchingsupport_pillar_connection_mode",
|
||||
"branchingsupport_buildplate_only",
|
||||
"branchingsupport_pillar_widening_factor",
|
||||
"branchingsupport_base_diameter",
|
||||
"branchingsupport_base_height",
|
||||
"branchingsupport_base_safety_distance",
|
||||
"branchingsupport_critical_angle",
|
||||
"branchingsupport_max_bridge_length",
|
||||
"branchingsupport_max_pillar_link_distance",
|
||||
"branchingsupport_object_elevation",
|
||||
|
||||
"support_points_density_relative",
|
||||
"support_points_minimal_distance",
|
||||
"slice_closing_radius",
|
||||
|
@ -3273,6 +3273,191 @@ void PrintConfigDef::init_extruder_option_keys()
|
||||
assert(std::is_sorted(m_extruder_retract_keys.begin(), m_extruder_retract_keys.end()));
|
||||
}
|
||||
|
||||
void PrintConfigDef::init_sla_support_params(const std::string &prefix)
|
||||
{
|
||||
ConfigOptionDef* def;
|
||||
|
||||
def = this->add(prefix + "support_head_front_diameter", coFloat);
|
||||
def->label = L("Pinhead front diameter");
|
||||
def->category = L("Supports");
|
||||
def->tooltip = L("Diameter of the pointing side of the head");
|
||||
def->sidetext = L("mm");
|
||||
def->min = 0;
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionFloat(0.4));
|
||||
|
||||
def = this->add(prefix + "support_head_penetration", coFloat);
|
||||
def->label = L("Head penetration");
|
||||
def->category = L("Supports");
|
||||
def->tooltip = L("How much the pinhead has to penetrate the model surface");
|
||||
def->sidetext = L("mm");
|
||||
def->mode = comAdvanced;
|
||||
def->min = 0;
|
||||
def->set_default_value(new ConfigOptionFloat(0.2));
|
||||
|
||||
def = this->add(prefix + "support_head_width", coFloat);
|
||||
def->label = L("Pinhead width");
|
||||
def->category = L("Supports");
|
||||
def->tooltip = L("Width from the back sphere center to the front sphere center");
|
||||
def->sidetext = L("mm");
|
||||
def->min = 0;
|
||||
def->max = 20;
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionFloat(1.0));
|
||||
|
||||
def = this->add(prefix + "support_pillar_diameter", coFloat);
|
||||
def->label = L("Pillar diameter");
|
||||
def->category = L("Supports");
|
||||
def->tooltip = L("Diameter in mm of the support pillars");
|
||||
def->sidetext = L("mm");
|
||||
def->min = 0;
|
||||
def->max = 15;
|
||||
def->mode = comSimple;
|
||||
def->set_default_value(new ConfigOptionFloat(1.0));
|
||||
|
||||
def = this->add(prefix + "support_small_pillar_diameter_percent", coPercent);
|
||||
def->label = L("Small pillar diameter percent");
|
||||
def->category = L("Supports");
|
||||
def->tooltip = L("The percentage of smaller pillars compared to the normal pillar diameter "
|
||||
"which are used in problematic areas where a normal pilla cannot fit.");
|
||||
def->sidetext = L("%");
|
||||
def->min = 1;
|
||||
def->max = 100;
|
||||
def->mode = comExpert;
|
||||
def->set_default_value(new ConfigOptionPercent(50));
|
||||
|
||||
def = this->add(prefix + "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(prefix + "support_max_weight_on_model", coFloat);
|
||||
def->label = L("Max weight on model");
|
||||
def->category = L("Supports");
|
||||
def->tooltip = L(
|
||||
"Maximum weight of sub-trees that terminate on the model instead of the print bed. The weight is the sum of the lenghts of all "
|
||||
"branches emanating from the endpoint.");
|
||||
def->sidetext = L("mm");
|
||||
def->min = 0;
|
||||
def->mode = comExpert;
|
||||
def->set_default_value(new ConfigOptionFloat(10.));
|
||||
|
||||
def = this->add(prefix + "support_pillar_connection_mode", coEnum);
|
||||
def->label = L("Pillar connection mode");
|
||||
def->tooltip = L("Controls the bridge type between two neighboring pillars."
|
||||
" Can be zig-zag, cross (double zig-zag) or dynamic which"
|
||||
" will automatically switch between the first two depending"
|
||||
" on the distance of the two pillars.");
|
||||
def->enum_keys_map = &ConfigOptionEnum<SLAPillarConnectionMode>::get_enum_values();
|
||||
def->enum_keys_map = &ConfigOptionEnum<SLAPillarConnectionMode>::get_enum_values();
|
||||
def->enum_values = ConfigOptionEnum<SLAPillarConnectionMode>::get_enum_names();
|
||||
def->enum_labels = ConfigOptionEnum<SLAPillarConnectionMode>::get_enum_names();
|
||||
def->enum_labels[0] = L("Zig-Zag");
|
||||
def->enum_labels[1] = L("Cross");
|
||||
def->enum_labels[2] = L("Dynamic");
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionEnum(SLAPillarConnectionMode::dynamic));
|
||||
|
||||
def = this->add(prefix + "support_buildplate_only", coBool);
|
||||
def->label = L("Support on build plate only");
|
||||
def->category = L("Supports");
|
||||
def->tooltip = L("Only create support if it lies on a build plate. Don't create support on a print.");
|
||||
def->mode = comSimple;
|
||||
def->set_default_value(new ConfigOptionBool(false));
|
||||
|
||||
def = this->add(prefix + "support_pillar_widening_factor", coFloat);
|
||||
def->label = L("Pillar widening factor");
|
||||
def->category = L("Supports");
|
||||
def->tooltip = L(
|
||||
"Merging bridges or pillars into another pillars can "
|
||||
"increase the radius. Zero means no increase, one means "
|
||||
"full increase. The exact amount of increase is unspecified and can "
|
||||
"change in the future. What is garanteed is that thickness will not "
|
||||
"exceed \"support_base_diameter\"");
|
||||
|
||||
def->min = 0;
|
||||
def->max = 1;
|
||||
def->mode = comExpert;
|
||||
def->set_default_value(new ConfigOptionFloat(0.5));
|
||||
|
||||
def = this->add(prefix + "support_base_diameter", coFloat);
|
||||
def->label = L("Support base diameter");
|
||||
def->category = L("Supports");
|
||||
def->tooltip = L("Diameter in mm of the pillar base");
|
||||
def->sidetext = L("mm");
|
||||
def->min = 0;
|
||||
def->max = 30;
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionFloat(4.0));
|
||||
|
||||
def = this->add(prefix + "support_base_height", coFloat);
|
||||
def->label = L("Support base height");
|
||||
def->category = L("Supports");
|
||||
def->tooltip = L("The height of the pillar base cone");
|
||||
def->sidetext = L("mm");
|
||||
def->min = 0;
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionFloat(1.0));
|
||||
|
||||
def = this->add(prefix + "support_base_safety_distance", coFloat);
|
||||
def->label = L("Support base safety distance");
|
||||
def->category = L("Supports");
|
||||
def->tooltip = L(
|
||||
"The minimum distance of the pillar base from the model in mm. "
|
||||
"Makes sense in zero elevation mode where a gap according "
|
||||
"to this parameter is inserted between the model and the pad.");
|
||||
def->sidetext = L("mm");
|
||||
def->min = 0;
|
||||
def->max = 10;
|
||||
def->mode = comExpert;
|
||||
def->set_default_value(new ConfigOptionFloat(1));
|
||||
|
||||
def = this->add(prefix + "support_critical_angle", coFloat);
|
||||
def->label = L("Critical angle");
|
||||
def->category = L("Supports");
|
||||
def->tooltip = L("The default angle for connecting support sticks and junctions.");
|
||||
def->sidetext = L("°");
|
||||
def->min = 0;
|
||||
def->max = 90;
|
||||
def->mode = comExpert;
|
||||
def->set_default_value(new ConfigOptionFloat(45));
|
||||
|
||||
def = this->add(prefix + "support_max_bridge_length", coFloat);
|
||||
def->label = L("Max bridge length");
|
||||
def->category = L("Supports");
|
||||
def->tooltip = L("The max length of a bridge");
|
||||
def->sidetext = L("mm");
|
||||
def->min = 0;
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionFloat(15.0));
|
||||
|
||||
def = this->add(prefix + "support_max_pillar_link_distance", coFloat);
|
||||
def->label = L("Max pillar linking distance");
|
||||
def->category = L("Supports");
|
||||
def->tooltip = L("The max distance of two pillars to get linked with each other."
|
||||
" A zero value will prohibit pillar cascading.");
|
||||
def->sidetext = L("mm");
|
||||
def->min = 0; // 0 means no linking
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionFloat(10.0));
|
||||
|
||||
def = this->add(prefix + "support_object_elevation", coFloat);
|
||||
def->label = L("Object elevation");
|
||||
def->category = L("Supports");
|
||||
def->tooltip = L("How much the supports should lift up the supported object. "
|
||||
"If \"Pad around object\" is enabled, this value is ignored.");
|
||||
def->sidetext = L("mm");
|
||||
def->min = 0;
|
||||
def->max = 150; // This is the max height of print on SL1
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionFloat(5.0));
|
||||
}
|
||||
|
||||
void PrintConfigDef::init_sla_params()
|
||||
{
|
||||
ConfigOptionDef* def;
|
||||
@ -3619,185 +3804,8 @@ void PrintConfigDef::init_sla_params()
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionEnum(sla::SupportTreeType::Default));
|
||||
|
||||
def = this->add("support_head_front_diameter", coFloat);
|
||||
def->label = L("Pinhead front diameter");
|
||||
def->category = L("Supports");
|
||||
def->tooltip = L("Diameter of the pointing side of the head");
|
||||
def->sidetext = L("mm");
|
||||
def->min = 0;
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionFloat(0.4));
|
||||
|
||||
def = this->add("support_head_penetration", coFloat);
|
||||
def->label = L("Head penetration");
|
||||
def->category = L("Supports");
|
||||
def->tooltip = L("How much the pinhead has to penetrate the model surface");
|
||||
def->sidetext = L("mm");
|
||||
def->mode = comAdvanced;
|
||||
def->min = 0;
|
||||
def->set_default_value(new ConfigOptionFloat(0.2));
|
||||
|
||||
def = this->add("support_head_width", coFloat);
|
||||
def->label = L("Pinhead width");
|
||||
def->category = L("Supports");
|
||||
def->tooltip = L("Width from the back sphere center to the front sphere center");
|
||||
def->sidetext = L("mm");
|
||||
def->min = 0;
|
||||
def->max = 20;
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionFloat(1.0));
|
||||
|
||||
def = this->add("support_pillar_diameter", coFloat);
|
||||
def->label = L("Pillar diameter");
|
||||
def->category = L("Supports");
|
||||
def->tooltip = L("Diameter in mm of the support pillars");
|
||||
def->sidetext = L("mm");
|
||||
def->min = 0;
|
||||
def->max = 15;
|
||||
def->mode = comSimple;
|
||||
def->set_default_value(new ConfigOptionFloat(1.0));
|
||||
|
||||
def = this->add("support_small_pillar_diameter_percent", coPercent);
|
||||
def->label = L("Small pillar diameter percent");
|
||||
def->category = L("Supports");
|
||||
def->tooltip = L("The percentage of smaller pillars compared to the normal pillar diameter "
|
||||
"which are used in problematic areas where a normal pilla cannot fit.");
|
||||
def->sidetext = L("%");
|
||||
def->min = 1;
|
||||
def->max = 100;
|
||||
def->mode = comExpert;
|
||||
def->set_default_value(new ConfigOptionPercent(50));
|
||||
|
||||
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_max_weight_on_model", coFloat);
|
||||
def->label = L("Max weight on model");
|
||||
def->category = L("Supports");
|
||||
def->tooltip = L(
|
||||
"Maximum weight of sub-trees that terminate on the model instead of the print bed. The weight is the sum of the lenghts of all "
|
||||
"branches emanating from the endpoint.");
|
||||
def->sidetext = L("mm");
|
||||
def->min = 0;
|
||||
def->mode = comExpert;
|
||||
def->set_default_value(new ConfigOptionFloat(10.));
|
||||
|
||||
def = this->add("support_pillar_connection_mode", coEnum);
|
||||
def->label = L("Pillar connection mode");
|
||||
def->tooltip = L("Controls the bridge type between two neighboring pillars."
|
||||
" Can be zig-zag, cross (double zig-zag) or dynamic which"
|
||||
" will automatically switch between the first two depending"
|
||||
" on the distance of the two pillars.");
|
||||
def->enum_keys_map = &ConfigOptionEnum<SLAPillarConnectionMode>::get_enum_values();
|
||||
def->enum_keys_map = &ConfigOptionEnum<SLAPillarConnectionMode>::get_enum_values();
|
||||
def->enum_values = ConfigOptionEnum<SLAPillarConnectionMode>::get_enum_names();
|
||||
def->enum_labels = ConfigOptionEnum<SLAPillarConnectionMode>::get_enum_names();
|
||||
def->enum_labels[0] = L("Zig-Zag");
|
||||
def->enum_labels[1] = L("Cross");
|
||||
def->enum_labels[2] = L("Dynamic");
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionEnum(SLAPillarConnectionMode::dynamic));
|
||||
|
||||
def = this->add("support_buildplate_only", coBool);
|
||||
def->label = L("Support on build plate only");
|
||||
def->category = L("Supports");
|
||||
def->tooltip = L("Only create support if it lies on a build plate. Don't create support on a print.");
|
||||
def->mode = comSimple;
|
||||
def->set_default_value(new ConfigOptionBool(false));
|
||||
|
||||
def = this->add("support_pillar_widening_factor", coFloat);
|
||||
def->label = L("Pillar widening factor");
|
||||
def->category = L("Supports");
|
||||
def->tooltip = L(
|
||||
"Merging bridges or pillars into another pillars can "
|
||||
"increase the radius. Zero means no increase, one means "
|
||||
"full increase. The exact amount of increase is unspecified and can "
|
||||
"change in the future. What is garanteed is that thickness will not "
|
||||
"exceed \"support_base_diameter\"");
|
||||
|
||||
def->min = 0;
|
||||
def->max = 1;
|
||||
def->mode = comExpert;
|
||||
def->set_default_value(new ConfigOptionFloat(0.15));
|
||||
|
||||
def = this->add("support_base_diameter", coFloat);
|
||||
def->label = L("Support base diameter");
|
||||
def->category = L("Supports");
|
||||
def->tooltip = L("Diameter in mm of the pillar base");
|
||||
def->sidetext = L("mm");
|
||||
def->min = 0;
|
||||
def->max = 30;
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionFloat(4.0));
|
||||
|
||||
def = this->add("support_base_height", coFloat);
|
||||
def->label = L("Support base height");
|
||||
def->category = L("Supports");
|
||||
def->tooltip = L("The height of the pillar base cone");
|
||||
def->sidetext = L("mm");
|
||||
def->min = 0;
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionFloat(1.0));
|
||||
|
||||
def = this->add("support_base_safety_distance", coFloat);
|
||||
def->label = L("Support base safety distance");
|
||||
def->category = L("Supports");
|
||||
def->tooltip = L(
|
||||
"The minimum distance of the pillar base from the model in mm. "
|
||||
"Makes sense in zero elevation mode where a gap according "
|
||||
"to this parameter is inserted between the model and the pad.");
|
||||
def->sidetext = L("mm");
|
||||
def->min = 0;
|
||||
def->max = 10;
|
||||
def->mode = comExpert;
|
||||
def->set_default_value(new ConfigOptionFloat(1));
|
||||
|
||||
def = this->add("support_critical_angle", coFloat);
|
||||
def->label = L("Critical angle");
|
||||
def->category = L("Supports");
|
||||
def->tooltip = L("The default angle for connecting support sticks and junctions.");
|
||||
def->sidetext = L("°");
|
||||
def->min = 0;
|
||||
def->max = 90;
|
||||
def->mode = comExpert;
|
||||
def->set_default_value(new ConfigOptionFloat(45));
|
||||
|
||||
def = this->add("support_max_bridge_length", coFloat);
|
||||
def->label = L("Max bridge length");
|
||||
def->category = L("Supports");
|
||||
def->tooltip = L("The max length of a bridge");
|
||||
def->sidetext = L("mm");
|
||||
def->min = 0;
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionFloat(15.0));
|
||||
|
||||
def = this->add("support_max_pillar_link_distance", coFloat);
|
||||
def->label = L("Max pillar linking distance");
|
||||
def->category = L("Supports");
|
||||
def->tooltip = L("The max distance of two pillars to get linked with each other."
|
||||
" A zero value will prohibit pillar cascading.");
|
||||
def->sidetext = L("mm");
|
||||
def->min = 0; // 0 means no linking
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionFloat(10.0));
|
||||
|
||||
def = this->add("support_object_elevation", coFloat);
|
||||
def->label = L("Object elevation");
|
||||
def->category = L("Supports");
|
||||
def->tooltip = L("How much the supports should lift up the supported object. "
|
||||
"If \"Pad around object\" is enabled, this value is ignored.");
|
||||
def->sidetext = L("mm");
|
||||
def->min = 0;
|
||||
def->max = 150; // This is the max height of print on SL1
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionFloat(5.0));
|
||||
init_sla_support_params("");
|
||||
init_sla_support_params("branching");
|
||||
|
||||
def = this->add("support_points_density_relative", coInt);
|
||||
def->label = L("Support points density");
|
||||
|
@ -185,6 +185,7 @@ private:
|
||||
void init_fff_params();
|
||||
void init_extruder_option_keys();
|
||||
void init_sla_params();
|
||||
void init_sla_support_params(const std::string &method_prefix);
|
||||
|
||||
std::vector<std::string> m_extruder_option_keys;
|
||||
std::vector<std::string> m_extruder_retract_keys;
|
||||
@ -891,6 +892,62 @@ PRINT_CONFIG_CLASS_DEFINE(
|
||||
// and the model object's bounding box bottom. Units in mm.
|
||||
((ConfigOptionFloat, support_object_elevation))/*= 5.0*/
|
||||
|
||||
|
||||
// Branching tree
|
||||
|
||||
// Diameter in mm of the pointing side of the head.
|
||||
((ConfigOptionFloat, branchingsupport_head_front_diameter))/*= 0.2*/
|
||||
|
||||
// How much the pinhead has to penetrate the model surface
|
||||
((ConfigOptionFloat, branchingsupport_head_penetration))/*= 0.2*/
|
||||
|
||||
// Width in mm from the back sphere center to the front sphere center.
|
||||
((ConfigOptionFloat, branchingsupport_head_width))/*= 1.0*/
|
||||
|
||||
// Radius in mm of the support pillars.
|
||||
((ConfigOptionFloat, branchingsupport_pillar_diameter))/*= 0.8*/
|
||||
|
||||
// The percentage of smaller pillars compared to the normal pillar diameter
|
||||
// which are used in problematic areas where a normal pilla cannot fit.
|
||||
((ConfigOptionPercent, branchingsupport_small_pillar_diameter_percent))
|
||||
|
||||
// How much bridge (supporting another pinhead) can be placed on a pillar.
|
||||
((ConfigOptionInt, branchingsupport_max_bridges_on_pillar))
|
||||
|
||||
// How the pillars are bridged together
|
||||
((ConfigOptionEnum<SLAPillarConnectionMode>, branchingsupport_pillar_connection_mode))
|
||||
|
||||
// Generate only ground facing supports
|
||||
((ConfigOptionBool, branchingsupport_buildplate_only))
|
||||
|
||||
((ConfigOptionFloat, branchingsupport_max_weight_on_model))
|
||||
|
||||
((ConfigOptionFloat, branchingsupport_pillar_widening_factor))
|
||||
|
||||
// Radius in mm of the pillar base.
|
||||
((ConfigOptionFloat, branchingsupport_base_diameter))/*= 2.0*/
|
||||
|
||||
// The height of the pillar base cone in mm.
|
||||
((ConfigOptionFloat, branchingsupport_base_height))/*= 1.0*/
|
||||
|
||||
// The minimum distance of the pillar base from the model in mm.
|
||||
((ConfigOptionFloat, branchingsupport_base_safety_distance)) /*= 1.0*/
|
||||
|
||||
// The default angle for connecting support sticks and junctions.
|
||||
((ConfigOptionFloat, branchingsupport_critical_angle))/*= 45*/
|
||||
|
||||
// The max length of a bridge in mm
|
||||
((ConfigOptionFloat, branchingsupport_max_bridge_length))/*= 15.0*/
|
||||
|
||||
// The max distance of two pillars to get cross linked.
|
||||
((ConfigOptionFloat, branchingsupport_max_pillar_link_distance))
|
||||
|
||||
// The elevation in Z direction upwards. This is the space between the pad
|
||||
// and the model object's bounding box bottom. Units in mm.
|
||||
((ConfigOptionFloat, branchingsupport_object_elevation))/*= 5.0*/
|
||||
|
||||
|
||||
|
||||
/////// Following options influence automatic support points placement:
|
||||
((ConfigOptionInt, support_points_density_relative))
|
||||
((ConfigOptionFloat, support_points_minimal_distance))
|
||||
|
@ -44,29 +44,63 @@ sla::SupportTreeConfig make_support_cfg(const SLAPrintObjectConfig& c)
|
||||
|
||||
scfg.enabled = c.supports_enable.getBool();
|
||||
scfg.tree_type = c.support_tree_type.value;
|
||||
scfg.head_front_radius_mm = 0.5*c.support_head_front_diameter.getFloat();
|
||||
double pillar_r = 0.5 * c.support_pillar_diameter.getFloat();
|
||||
scfg.head_back_radius_mm = pillar_r;
|
||||
scfg.head_fallback_radius_mm =
|
||||
0.01 * c.support_small_pillar_diameter_percent.getFloat() * pillar_r;
|
||||
scfg.head_penetration_mm = c.support_head_penetration.getFloat();
|
||||
scfg.head_width_mm = c.support_head_width.getFloat();
|
||||
scfg.object_elevation_mm = is_zero_elevation(c) ?
|
||||
0. : c.support_object_elevation.getFloat();
|
||||
scfg.bridge_slope = c.support_critical_angle.getFloat() * PI / 180.0 ;
|
||||
scfg.max_bridge_length_mm = c.support_max_bridge_length.getFloat();
|
||||
scfg.max_pillar_link_distance_mm = c.support_max_pillar_link_distance.getFloat();
|
||||
scfg.pillar_connection_mode = c.support_pillar_connection_mode.value;
|
||||
scfg.ground_facing_only = c.support_buildplate_only.getBool();
|
||||
scfg.pillar_widening_factor = c.support_pillar_widening_factor.getFloat();
|
||||
scfg.base_radius_mm = 0.5*c.support_base_diameter.getFloat();
|
||||
scfg.base_height_mm = c.support_base_height.getFloat();
|
||||
scfg.pillar_base_safety_distance_mm =
|
||||
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());
|
||||
scfg.max_weight_on_model_support = c.support_max_weight_on_model.getFloat();
|
||||
|
||||
switch(scfg.tree_type) {
|
||||
case sla::SupportTreeType::Default: {
|
||||
scfg.head_front_radius_mm = 0.5*c.support_head_front_diameter.getFloat();
|
||||
double pillar_r = 0.5 * c.support_pillar_diameter.getFloat();
|
||||
scfg.head_back_radius_mm = pillar_r;
|
||||
scfg.head_fallback_radius_mm =
|
||||
0.01 * c.support_small_pillar_diameter_percent.getFloat() * pillar_r;
|
||||
scfg.head_penetration_mm = c.support_head_penetration.getFloat();
|
||||
scfg.head_width_mm = c.support_head_width.getFloat();
|
||||
scfg.object_elevation_mm = is_zero_elevation(c) ?
|
||||
0. : c.support_object_elevation.getFloat();
|
||||
scfg.bridge_slope = c.support_critical_angle.getFloat() * PI / 180.0 ;
|
||||
scfg.max_bridge_length_mm = c.support_max_bridge_length.getFloat();
|
||||
scfg.max_pillar_link_distance_mm = c.support_max_pillar_link_distance.getFloat();
|
||||
scfg.pillar_connection_mode = c.support_pillar_connection_mode.value;
|
||||
scfg.ground_facing_only = c.support_buildplate_only.getBool();
|
||||
scfg.pillar_widening_factor = c.support_pillar_widening_factor.getFloat();
|
||||
scfg.base_radius_mm = 0.5*c.support_base_diameter.getFloat();
|
||||
scfg.base_height_mm = c.support_base_height.getFloat();
|
||||
scfg.pillar_base_safety_distance_mm =
|
||||
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());
|
||||
scfg.max_weight_on_model_support = c.support_max_weight_on_model.getFloat();
|
||||
break;
|
||||
}
|
||||
case sla::SupportTreeType::Branching:
|
||||
[[fallthrough]];
|
||||
case sla::SupportTreeType::Organic:{
|
||||
scfg.head_front_radius_mm = 0.5*c.branchingsupport_head_front_diameter.getFloat();
|
||||
double pillar_r = 0.5 * c.branchingsupport_pillar_diameter.getFloat();
|
||||
scfg.head_back_radius_mm = pillar_r;
|
||||
scfg.head_fallback_radius_mm =
|
||||
0.01 * c.branchingsupport_small_pillar_diameter_percent.getFloat() * pillar_r;
|
||||
scfg.head_penetration_mm = c.branchingsupport_head_penetration.getFloat();
|
||||
scfg.head_width_mm = c.branchingsupport_head_width.getFloat();
|
||||
scfg.object_elevation_mm = is_zero_elevation(c) ?
|
||||
0. : c.branchingsupport_object_elevation.getFloat();
|
||||
scfg.bridge_slope = c.branchingsupport_critical_angle.getFloat() * PI / 180.0 ;
|
||||
scfg.max_bridge_length_mm = c.branchingsupport_max_bridge_length.getFloat();
|
||||
scfg.max_pillar_link_distance_mm = c.branchingsupport_max_pillar_link_distance.getFloat();
|
||||
scfg.pillar_connection_mode = c.branchingsupport_pillar_connection_mode.value;
|
||||
scfg.ground_facing_only = c.branchingsupport_buildplate_only.getBool();
|
||||
scfg.pillar_widening_factor = c.branchingsupport_pillar_widening_factor.getFloat();
|
||||
scfg.base_radius_mm = 0.5*c.branchingsupport_base_diameter.getFloat();
|
||||
scfg.base_height_mm = c.branchingsupport_base_height.getFloat();
|
||||
scfg.pillar_base_safety_distance_mm =
|
||||
c.branchingsupport_base_safety_distance.getFloat() < EPSILON ?
|
||||
scfg.safety_distance_mm : c.branchingsupport_base_safety_distance.getFloat();
|
||||
|
||||
scfg.max_bridges_on_pillar = unsigned(c.branchingsupport_max_bridges_on_pillar.getInt());
|
||||
scfg.max_weight_on_model_support = c.branchingsupport_max_weight_on_model.getFloat();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return scfg;
|
||||
}
|
||||
|
@ -374,25 +374,45 @@ void ConfigManipulation::toggle_print_sla_options(DynamicPrintConfig* config)
|
||||
bool is_default_tree = treetype == sla::SupportTreeType::Default;
|
||||
bool is_branching_tree = treetype == sla::SupportTreeType::Branching;
|
||||
|
||||
toggle_field("support_head_front_diameter", supports_en);
|
||||
toggle_field("support_head_penetration", supports_en);
|
||||
toggle_field("support_head_width", supports_en);
|
||||
toggle_field("support_pillar_diameter", supports_en);
|
||||
toggle_field("support_small_pillar_diameter_percent", supports_en);
|
||||
toggle_field("support_tree_type", supports_en);
|
||||
|
||||
toggle_field("support_head_front_diameter", supports_en && is_default_tree);
|
||||
toggle_field("support_head_penetration", supports_en && is_default_tree);
|
||||
toggle_field("support_head_width", supports_en && is_default_tree);
|
||||
toggle_field("support_pillar_diameter", supports_en && is_default_tree);
|
||||
toggle_field("support_small_pillar_diameter_percent", supports_en && is_default_tree);
|
||||
toggle_field("support_max_bridges_on_pillar", supports_en && is_default_tree);
|
||||
toggle_field("support_pillar_connection_mode", supports_en && is_default_tree);
|
||||
toggle_field("support_tree_type", supports_en);
|
||||
toggle_field("support_buildplate_only", supports_en);
|
||||
toggle_field("support_base_diameter", supports_en);
|
||||
toggle_field("support_base_height", supports_en);
|
||||
toggle_field("support_base_safety_distance", supports_en);
|
||||
toggle_field("support_critical_angle", supports_en);
|
||||
toggle_field("support_max_bridge_length", supports_en);
|
||||
toggle_field("support_buildplate_only", supports_en && is_default_tree);
|
||||
toggle_field("support_base_diameter", supports_en && is_default_tree);
|
||||
toggle_field("support_base_height", supports_en && is_default_tree);
|
||||
toggle_field("support_base_safety_distance", supports_en && is_default_tree);
|
||||
toggle_field("support_critical_angle", supports_en && is_default_tree);
|
||||
toggle_field("support_max_bridge_length", supports_en && is_default_tree);
|
||||
toggle_field("support_max_pillar_link_distance", supports_en && is_default_tree);
|
||||
toggle_field("support_pillar_widening_factor", supports_en && is_branching_tree);
|
||||
toggle_field("support_max_weight_on_model", supports_en && is_branching_tree);
|
||||
toggle_field("support_points_density_relative", supports_en);
|
||||
toggle_field("support_points_minimal_distance", supports_en);
|
||||
toggle_field("support_pillar_widening_factor", supports_en && is_default_tree);
|
||||
toggle_field("support_max_weight_on_model", supports_en && is_default_tree);
|
||||
toggle_field("support_points_density_relative", supports_en && is_default_tree);
|
||||
toggle_field("support_points_minimal_distance", supports_en && is_default_tree);
|
||||
|
||||
toggle_field("branchingsupport_head_front_diameter", supports_en && is_branching_tree);
|
||||
toggle_field("branchingsupport_head_penetration", supports_en && is_branching_tree);
|
||||
toggle_field("branchingsupport_head_width", supports_en && is_branching_tree);
|
||||
toggle_field("branchingsupport_pillar_diameter", supports_en && is_branching_tree);
|
||||
toggle_field("branchingsupport_small_pillar_diameter_percent", supports_en && is_branching_tree);
|
||||
toggle_field("branchingsupport_max_bridges_on_pillar", supports_en && is_branching_tree);
|
||||
toggle_field("branchingsupport_pillar_connection_mode", supports_en && is_branching_tree);
|
||||
toggle_field("branchingsupport_buildplate_only", supports_en && is_branching_tree);
|
||||
toggle_field("branchingsupport_base_diameter", supports_en && is_branching_tree);
|
||||
toggle_field("branchingsupport_base_height", supports_en && is_branching_tree);
|
||||
toggle_field("branchingsupport_base_safety_distance", supports_en && is_branching_tree);
|
||||
toggle_field("branchingsupport_critical_angle", supports_en && is_branching_tree);
|
||||
toggle_field("branchingsupport_max_bridge_length", supports_en && is_branching_tree);
|
||||
toggle_field("branchingsupport_max_pillar_link_distance", supports_en && is_branching_tree);
|
||||
toggle_field("branchingsupport_pillar_widening_factor", supports_en && is_branching_tree);
|
||||
toggle_field("branchingsupport_max_weight_on_model", supports_en && is_branching_tree);
|
||||
toggle_field("branchingsupport_points_density_relative", supports_en && is_branching_tree);
|
||||
toggle_field("branchingsupport_points_minimal_distance", supports_en && is_branching_tree);
|
||||
|
||||
bool pad_en = config->opt_bool("pad_enable");
|
||||
|
||||
@ -407,7 +427,8 @@ void ConfigManipulation::toggle_print_sla_options(DynamicPrintConfig* config)
|
||||
|
||||
bool zero_elev = config->opt_bool("pad_around_object") && pad_en;
|
||||
|
||||
toggle_field("support_object_elevation", supports_en && !zero_elev);
|
||||
toggle_field("support_object_elevation", supports_en && is_default_tree && !zero_elev);
|
||||
toggle_field("branchingsupport_object_elevation", supports_en && is_branching_tree && !zero_elev);
|
||||
toggle_field("pad_object_gap", zero_elev);
|
||||
toggle_field("pad_around_object_everywhere", zero_elev);
|
||||
toggle_field("pad_object_connector_stride", zero_elev);
|
||||
|
@ -4821,6 +4821,43 @@ void TabSLAMaterial::update()
|
||||
wxGetApp().mainframe->on_config_changed(m_config);
|
||||
}
|
||||
|
||||
void TabSLAPrint::build_sla_support_params(const std::string &prefix,
|
||||
const Slic3r::GUI::PageShp &page)
|
||||
{
|
||||
auto optgroup = page->new_optgroup(L("Support head"));
|
||||
optgroup->append_single_option_line(prefix + "support_head_front_diameter");
|
||||
optgroup->append_single_option_line(prefix + "support_head_penetration");
|
||||
optgroup->append_single_option_line(prefix + "support_head_width");
|
||||
|
||||
optgroup = page->new_optgroup(L("Support pillar"));
|
||||
optgroup->append_single_option_line(prefix + "support_pillar_diameter");
|
||||
optgroup->append_single_option_line(prefix + "support_small_pillar_diameter_percent");
|
||||
optgroup->append_single_option_line(prefix + "support_max_bridges_on_pillar");
|
||||
|
||||
optgroup->append_single_option_line(prefix + "support_pillar_connection_mode");
|
||||
optgroup->append_single_option_line(prefix + "support_buildplate_only");
|
||||
optgroup->append_single_option_line(prefix + "support_pillar_widening_factor");
|
||||
optgroup->append_single_option_line(prefix + "support_max_weight_on_model");
|
||||
optgroup->append_single_option_line(prefix + "support_base_diameter");
|
||||
optgroup->append_single_option_line(prefix + "support_base_height");
|
||||
optgroup->append_single_option_line(prefix + "support_base_safety_distance");
|
||||
|
||||
// Mirrored parameter from Pad page for toggling elevation on the same page
|
||||
optgroup->append_single_option_line(prefix + "support_object_elevation");
|
||||
|
||||
Line line{ "", "" };
|
||||
line.full_width = 1;
|
||||
line.widget = [this](wxWindow* parent) {
|
||||
return description_line_widget(parent, &m_support_object_elevation_description_line);
|
||||
};
|
||||
optgroup->append_line(line);
|
||||
|
||||
optgroup = page->new_optgroup(L("Connection of the support sticks and junctions"));
|
||||
optgroup->append_single_option_line(prefix + "support_critical_angle");
|
||||
optgroup->append_single_option_line(prefix + "support_max_bridge_length");
|
||||
optgroup->append_single_option_line(prefix + "support_max_pillar_link_distance");
|
||||
}
|
||||
|
||||
void TabSLAPrint::build()
|
||||
{
|
||||
m_presets = &m_preset_bundle->sla_prints;
|
||||
@ -4833,42 +4870,47 @@ void TabSLAPrint::build()
|
||||
optgroup->append_single_option_line("faded_layers");
|
||||
|
||||
page = add_options_page(L("Supports"), "support"/*"sla_supports"*/);
|
||||
|
||||
// page = add_options_page(L("Branching"), "supports");
|
||||
|
||||
optgroup = page->new_optgroup(L("Supports"));
|
||||
optgroup->append_single_option_line("supports_enable");
|
||||
optgroup->append_single_option_line("support_tree_type");
|
||||
|
||||
optgroup = page->new_optgroup(L("Support head"));
|
||||
optgroup->append_single_option_line("support_head_front_diameter");
|
||||
optgroup->append_single_option_line("support_head_penetration");
|
||||
optgroup->append_single_option_line("support_head_width");
|
||||
build_sla_support_params("", page);
|
||||
build_sla_support_params("branching", page);
|
||||
// optgroup = page->new_optgroup(L("Support head"));
|
||||
// optgroup->append_single_option_line("support_head_front_diameter");
|
||||
// optgroup->append_single_option_line("support_head_penetration");
|
||||
// optgroup->append_single_option_line("support_head_width");
|
||||
|
||||
optgroup = page->new_optgroup(L("Support pillar"));
|
||||
optgroup->append_single_option_line("support_pillar_diameter");
|
||||
optgroup->append_single_option_line("support_small_pillar_diameter_percent");
|
||||
optgroup->append_single_option_line("support_max_bridges_on_pillar");
|
||||
// optgroup = page->new_optgroup(L("Support pillar"));
|
||||
// optgroup->append_single_option_line("support_pillar_diameter");
|
||||
// optgroup->append_single_option_line("support_small_pillar_diameter_percent");
|
||||
// optgroup->append_single_option_line("support_max_bridges_on_pillar");
|
||||
|
||||
optgroup->append_single_option_line("support_pillar_connection_mode");
|
||||
optgroup->append_single_option_line("support_buildplate_only");
|
||||
optgroup->append_single_option_line("support_pillar_widening_factor");
|
||||
optgroup->append_single_option_line("support_max_weight_on_model");
|
||||
optgroup->append_single_option_line("support_base_diameter");
|
||||
optgroup->append_single_option_line("support_base_height");
|
||||
optgroup->append_single_option_line("support_base_safety_distance");
|
||||
// optgroup->append_single_option_line("support_pillar_connection_mode");
|
||||
// optgroup->append_single_option_line("support_buildplate_only");
|
||||
// optgroup->append_single_option_line("support_pillar_widening_factor");
|
||||
// optgroup->append_single_option_line("support_max_weight_on_model");
|
||||
// optgroup->append_single_option_line("support_base_diameter");
|
||||
// optgroup->append_single_option_line("support_base_height");
|
||||
// optgroup->append_single_option_line("support_base_safety_distance");
|
||||
|
||||
// Mirrored parameter from Pad page for toggling elevation on the same page
|
||||
optgroup->append_single_option_line("support_object_elevation");
|
||||
// // Mirrored parameter from Pad page for toggling elevation on the same page
|
||||
// optgroup->append_single_option_line("support_object_elevation");
|
||||
|
||||
Line line{ "", "" };
|
||||
line.full_width = 1;
|
||||
line.widget = [this](wxWindow* parent) {
|
||||
return description_line_widget(parent, &m_support_object_elevation_description_line);
|
||||
};
|
||||
optgroup->append_line(line);
|
||||
// Line line{ "", "" };
|
||||
// line.full_width = 1;
|
||||
// line.widget = [this](wxWindow* parent) {
|
||||
// return description_line_widget(parent, &m_support_object_elevation_description_line);
|
||||
// };
|
||||
// optgroup->append_line(line);
|
||||
|
||||
optgroup = page->new_optgroup(L("Connection of the support sticks and junctions"));
|
||||
optgroup->append_single_option_line("support_critical_angle");
|
||||
optgroup->append_single_option_line("support_max_bridge_length");
|
||||
optgroup->append_single_option_line("support_max_pillar_link_distance");
|
||||
// optgroup = page->new_optgroup(L("Connection of the support sticks and junctions"));
|
||||
// optgroup->append_single_option_line("support_critical_angle");
|
||||
// optgroup->append_single_option_line("support_max_bridge_length");
|
||||
// optgroup->append_single_option_line("support_max_pillar_link_distance");
|
||||
|
||||
optgroup = page->new_optgroup(L("Automatic generation"));
|
||||
optgroup->append_single_option_line("support_points_density_relative");
|
||||
|
@ -339,7 +339,7 @@ public:
|
||||
|
||||
void on_roll_back_value(const bool to_sys = false);
|
||||
|
||||
PageShp add_options_page(const wxString& title, const std::string& icon, bool is_extruder_pages = false);
|
||||
PageShp add_options_page(const wxString& title, const std::string& icon, bool is_extruder_pages = false);
|
||||
static wxString translate_category(const wxString& title, Preset::Type preset_type);
|
||||
|
||||
virtual void OnActivate();
|
||||
@ -526,6 +526,9 @@ public:
|
||||
|
||||
class TabSLAPrint : public Tab
|
||||
{
|
||||
void build_sla_support_params(const std::string &prefix,
|
||||
const Slic3r::GUI::PageShp &page);
|
||||
|
||||
public:
|
||||
TabSLAPrint(wxBookCtrlBase* parent) :
|
||||
Tab(parent, _(L("Print Settings")), Slic3r::Preset::TYPE_SLA_PRINT) {}
|
||||
|
Loading…
Reference in New Issue
Block a user