ENH: enhance ensure vertical thickness
This patch support completely disable ensure_vertical_thickness Cherry-Picked eff2c16ecc2017f8186e5804f9ed4d71d87e9248 from prusa slicer. Thanks everyone involved Co-authored-by: SoftFever Co-authored-by: Vovodroid jira:NONE Signed-off-by: xun.zhang <xun.zhang@bambulab.com> Change-Id: Ia00b9fb2dc5839d0e7306010260c1276c35c5d66
This commit is contained in:
parent
288b1eddc5
commit
f8369e8796
|
@ -187,6 +187,13 @@ static t_config_enum_values s_keys_map_WallSequence {
|
||||||
};
|
};
|
||||||
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(WallSequence)
|
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(WallSequence)
|
||||||
|
|
||||||
|
static t_config_enum_values s_keys_map_EnsureVerticalThicknessLevel {
|
||||||
|
{ "disabled", int(EnsureVerticalThicknessLevel::evtDisabled) },
|
||||||
|
{ "partial", int(EnsureVerticalThicknessLevel::evtPartial) },
|
||||||
|
{ "enabled", int(EnsureVerticalThicknessLevel::evtEnabled)}
|
||||||
|
};
|
||||||
|
CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(EnsureVerticalThicknessLevel)
|
||||||
|
|
||||||
//BBS
|
//BBS
|
||||||
static t_config_enum_values s_keys_map_PrintSequence {
|
static t_config_enum_values s_keys_map_PrintSequence {
|
||||||
{ "by layer", int(PrintSequence::ByLayer) },
|
{ "by layer", int(PrintSequence::ByLayer) },
|
||||||
|
@ -1330,6 +1337,21 @@ void PrintConfigDef::init_fff_params()
|
||||||
def->mode = comAdvanced;
|
def->mode = comAdvanced;
|
||||||
def->set_default_value(new ConfigOptionBool(true));
|
def->set_default_value(new ConfigOptionBool(true));
|
||||||
|
|
||||||
|
def = this->add("ensure_vertical_shell_thickness", coEnum);
|
||||||
|
def->label = L("Ensure vertical shell thickness");
|
||||||
|
def->category = L("Strength");
|
||||||
|
def->tooltip = L("Add solid infill near sloping surfaces to guarantee the vertical shell thickness "
|
||||||
|
"(top+bottom solid layers)");
|
||||||
|
def->mode = comAdvanced;
|
||||||
|
def->enum_keys_map = &ConfigOptionEnum<EnsureVerticalThicknessLevel>::get_enum_values();
|
||||||
|
def->enum_values.push_back("disabled");
|
||||||
|
def->enum_values.push_back("partial");
|
||||||
|
def->enum_values.push_back("enabled");
|
||||||
|
def->enum_labels.push_back(L("Disabled"));
|
||||||
|
def->enum_labels.push_back(L("Partial"));
|
||||||
|
def->enum_labels.push_back(L("Enabled"));
|
||||||
|
def->set_default_value(new ConfigOptionEnum<EnsureVerticalThicknessLevel>(EnsureVerticalThicknessLevel::evtEnabled));
|
||||||
|
|
||||||
def = this->add("internal_bridge_support_thickness", coFloat);
|
def = this->add("internal_bridge_support_thickness", coFloat);
|
||||||
def->label = L("Internal bridge support thickness");
|
def->label = L("Internal bridge support thickness");
|
||||||
def->category = L("Strength");
|
def->category = L("Strength");
|
||||||
|
@ -5378,6 +5400,14 @@ void PrintConfigDef::handle_legacy(t_config_option_key &opt_key, std::string &va
|
||||||
else if (opt_key == "extruder_type") {
|
else if (opt_key == "extruder_type") {
|
||||||
ReplaceString(value, "DirectDrive", "Direct Drive");
|
ReplaceString(value, "DirectDrive", "Direct Drive");
|
||||||
}
|
}
|
||||||
|
else if (opt_key == "ensure_vertical_shell_thickness") {
|
||||||
|
auto kvmap=ConfigOptionEnum<EnsureVerticalThicknessLevel>::get_enum_names();
|
||||||
|
// handle old values
|
||||||
|
if (value == "1")
|
||||||
|
value = ConfigOptionEnum<EnsureVerticalThicknessLevel>::get_enum_names()[EnsureVerticalThicknessLevel::evtEnabled];
|
||||||
|
else if (value == "0")
|
||||||
|
value = ConfigOptionEnum<EnsureVerticalThicknessLevel>::get_enum_names()[EnsureVerticalThicknessLevel::evtPartial];
|
||||||
|
}
|
||||||
|
|
||||||
// Ignore the following obsolete configuration keys:
|
// Ignore the following obsolete configuration keys:
|
||||||
static std::set<std::string> ignore = {
|
static std::set<std::string> ignore = {
|
||||||
|
|
|
@ -58,6 +58,12 @@ enum InfillPattern : int {
|
||||||
ipCount,
|
ipCount,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum EnsureVerticalThicknessLevel{
|
||||||
|
evtDisabled,
|
||||||
|
evtPartial,
|
||||||
|
evtEnabled
|
||||||
|
};
|
||||||
|
|
||||||
enum class IroningType {
|
enum class IroningType {
|
||||||
NoIroning,
|
NoIroning,
|
||||||
TopSurfaces,
|
TopSurfaces,
|
||||||
|
@ -883,7 +889,7 @@ PRINT_CONFIG_CLASS_DEFINE(
|
||||||
((ConfigOptionFloat, bridge_flow))
|
((ConfigOptionFloat, bridge_flow))
|
||||||
((ConfigOptionFloatsNullable, overhang_totally_speed))
|
((ConfigOptionFloatsNullable, overhang_totally_speed))
|
||||||
((ConfigOptionFloatsNullable, bridge_speed))
|
((ConfigOptionFloatsNullable, bridge_speed))
|
||||||
((ConfigOptionBool, ensure_vertical_shell_thickness))
|
((ConfigOptionEnum<EnsureVerticalThicknessLevel>, ensure_vertical_shell_thickness))
|
||||||
((ConfigOptionEnum<InfillPattern>, top_surface_pattern))
|
((ConfigOptionEnum<InfillPattern>, top_surface_pattern))
|
||||||
((ConfigOptionEnum<InfillPattern>, bottom_surface_pattern))
|
((ConfigOptionEnum<InfillPattern>, bottom_surface_pattern))
|
||||||
((ConfigOptionEnum<InfillPattern>, internal_solid_infill_pattern))
|
((ConfigOptionEnum<InfillPattern>, internal_solid_infill_pattern))
|
||||||
|
|
|
@ -1525,7 +1525,7 @@ void PrintObject::discover_vertical_shells()
|
||||||
bool has_extra_layers = false;
|
bool has_extra_layers = false;
|
||||||
for (size_t region_id = 0; region_id < this->num_printing_regions(); ++region_id) {
|
for (size_t region_id = 0; region_id < this->num_printing_regions(); ++region_id) {
|
||||||
const PrintRegionConfig &config = this->printing_region(region_id).config();
|
const PrintRegionConfig &config = this->printing_region(region_id).config();
|
||||||
if (config.ensure_vertical_shell_thickness.value) {
|
if (config.ensure_vertical_shell_thickness.value!=EnsureVerticalThicknessLevel::evtDisabled) {
|
||||||
has_extra_layers = true;
|
has_extra_layers = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1604,7 +1604,7 @@ void PrintObject::discover_vertical_shells()
|
||||||
for (size_t region_id = 0; region_id < this->num_printing_regions(); ++ region_id) {
|
for (size_t region_id = 0; region_id < this->num_printing_regions(); ++ region_id) {
|
||||||
//FIXME Improve the heuristics for a grain size.
|
//FIXME Improve the heuristics for a grain size.
|
||||||
const PrintRegion ®ion = this->printing_region(region_id);
|
const PrintRegion ®ion = this->printing_region(region_id);
|
||||||
if (!region.config().ensure_vertical_shell_thickness.value)
|
if (region.config().ensure_vertical_shell_thickness.value==EnsureVerticalThicknessLevel::evtDisabled)
|
||||||
// This region will be handled by discover_horizontal_shells().
|
// This region will be handled by discover_horizontal_shells().
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -1724,7 +1724,9 @@ void PrintObject::discover_vertical_shells()
|
||||||
++ i) {
|
++ i) {
|
||||||
at_least_one_top_projected = true;
|
at_least_one_top_projected = true;
|
||||||
const DiscoverVerticalShellsCacheEntry &cache = cache_top_botom_regions[i];
|
const DiscoverVerticalShellsCacheEntry &cache = cache_top_botom_regions[i];
|
||||||
|
if (region_config.ensure_vertical_shell_thickness.value != EnsureVerticalThicknessLevel::evtPartial) {
|
||||||
combine_holes(cache.holes);
|
combine_holes(cache.holes);
|
||||||
|
}
|
||||||
combine_shells(cache.top_surfaces);
|
combine_shells(cache.top_surfaces);
|
||||||
}
|
}
|
||||||
if (!at_least_one_top_projected && i < int(cache_top_botom_regions.size())) {
|
if (!at_least_one_top_projected && i < int(cache_top_botom_regions.size())) {
|
||||||
|
@ -1753,7 +1755,9 @@ void PrintObject::discover_vertical_shells()
|
||||||
-- i) {
|
-- i) {
|
||||||
at_least_one_bottom_projected = true;
|
at_least_one_bottom_projected = true;
|
||||||
const DiscoverVerticalShellsCacheEntry &cache = cache_top_botom_regions[i];
|
const DiscoverVerticalShellsCacheEntry &cache = cache_top_botom_regions[i];
|
||||||
|
if (region_config.ensure_vertical_shell_thickness.value != EnsureVerticalThicknessLevel::evtPartial) {
|
||||||
combine_holes(cache.holes);
|
combine_holes(cache.holes);
|
||||||
|
}
|
||||||
combine_shells(cache.bottom_surfaces);
|
combine_shells(cache.bottom_surfaces);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3304,7 +3308,7 @@ void PrintObject::discover_horizontal_shells()
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
// If ensure_vertical_shell_thickness, then the rest has already been performed by discover_vertical_shells().
|
// If ensure_vertical_shell_thickness, then the rest has already been performed by discover_vertical_shells().
|
||||||
if (region_config.ensure_vertical_shell_thickness.value)
|
if (region_config.ensure_vertical_shell_thickness.value!=EnsureVerticalThicknessLevel::evtDisabled)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
coordf_t print_z = layer->print_z;
|
coordf_t print_z = layer->print_z;
|
||||||
|
@ -3375,7 +3379,7 @@ void PrintObject::discover_horizontal_shells()
|
||||||
// No internal solid needed on this layer. In order to decide whether to continue
|
// No internal solid needed on this layer. In order to decide whether to continue
|
||||||
// searching on the next neighbor (thus enforcing the configured number of solid
|
// searching on the next neighbor (thus enforcing the configured number of solid
|
||||||
// layers, use different strategies according to configured infill density:
|
// layers, use different strategies according to configured infill density:
|
||||||
if (region_config.sparse_infill_density.value == 0) {
|
if (region_config.sparse_infill_density.value == 0 || region_config.ensure_vertical_shell_thickness.value == EnsureVerticalThicknessLevel::evtDisabled) {
|
||||||
// If user expects the object to be void (for example a hollow sloping vase),
|
// If user expects the object to be void (for example a hollow sloping vase),
|
||||||
// don't continue the search. In this case, we only generate the external solid
|
// don't continue the search. In this case, we only generate the external solid
|
||||||
// shell if the object would otherwise show a hole (gap between perimeters of
|
// shell if the object would otherwise show a hole (gap between perimeters of
|
||||||
|
|
Loading…
Reference in New Issue