FIX: bottom bridge was not correctly detected
A bottome surface is detected as stBottom only if: 1. has support, top z distance=0 (soluble material), auto support 2. for normal(auto), bridge_no_support is off 3. for tree(auto), interface top layers=0, max bridge length=0, support_critical_regions_only=false (only in this way the bridge is fully supported) Note: Since now the surface type depends on more parameters, changing them will trigger re-slicing and making the whole process slower. github issues: 1253 Change-Id: I0fe719e0dbf7147206008c8726dd9c7be2b19226 (cherry picked from commit d4490afa6b9e4fbb583033a125bbebb50dc5f0bb)
This commit is contained in:
parent
49bc67eed1
commit
088668994c
|
@ -723,7 +723,14 @@ bool PrintObject::invalidate_state_by_config_options(
|
||||||
|| opt_key == "support_top_z_distance"
|
|| opt_key == "support_top_z_distance"
|
||||||
|| opt_key == "support_bottom_z_distance"
|
|| opt_key == "support_bottom_z_distance"
|
||||||
|| opt_key == "xy_hole_compensation"
|
|| opt_key == "xy_hole_compensation"
|
||||||
|| opt_key == "xy_contour_compensation") {
|
|| opt_key == "xy_contour_compensation"
|
||||||
|
//BBS: [Arthur] the following params affect bottomBridge surface type detection
|
||||||
|
|| opt_key == "support_type"
|
||||||
|
|| opt_key == "bridge_no_support"
|
||||||
|
|| opt_key == "max_bridge_length"
|
||||||
|
|| opt_key == "support_interface_top_layers"
|
||||||
|
|| opt_key == "support_critical_regions_only"
|
||||||
|
) {
|
||||||
steps.emplace_back(posSlice);
|
steps.emplace_back(posSlice);
|
||||||
} else if (opt_key == "enable_support") {
|
} else if (opt_key == "enable_support") {
|
||||||
steps.emplace_back(posSupportMaterial);
|
steps.emplace_back(posSupportMaterial);
|
||||||
|
@ -970,9 +977,17 @@ void PrintObject::detect_surfaces_type()
|
||||||
[this, region_id, interface_shells, &surfaces_new](const tbb::blocked_range<size_t>& range) {
|
[this, region_id, interface_shells, &surfaces_new](const tbb::blocked_range<size_t>& range) {
|
||||||
// If we have soluble support material, don't bridge. The overhang will be squished against a soluble layer separating
|
// If we have soluble support material, don't bridge. The overhang will be squished against a soluble layer separating
|
||||||
// the support from the print.
|
// the support from the print.
|
||||||
SurfaceType surface_type_bottom_other =
|
// BBS: the above logic only applys for normal(auto) support. Complete logic:
|
||||||
(this->has_support() && m_config.support_top_z_distance.value == 0) ?
|
// 1. has support, top z distance=0 (soluble material), auto support
|
||||||
stBottom : stBottomBridge;
|
// 2. for normal(auto), bridge_no_support is off
|
||||||
|
// 3. for tree(auto), interface top layers=0, max bridge length=0, support_critical_regions_only=false (only in this way the bridge is fully supported)
|
||||||
|
bool bottom_is_fully_supported = this->has_support() && m_config.support_top_z_distance.value == 0 && is_auto(m_config.support_type.value);
|
||||||
|
if (m_config.support_type.value == stNormalAuto)
|
||||||
|
bottom_is_fully_supported &= !m_config.bridge_no_support.value;
|
||||||
|
else if (m_config.support_type.value == stTreeAuto) {
|
||||||
|
bottom_is_fully_supported &= (m_config.support_interface_top_layers.value > 0 && m_config.max_bridge_length.value == 0 && m_config.support_critical_regions_only.value==false);
|
||||||
|
}
|
||||||
|
SurfaceType surface_type_bottom_other = bottom_is_fully_supported ? stBottom : stBottomBridge;
|
||||||
for (size_t idx_layer = range.begin(); idx_layer < range.end(); ++ idx_layer) {
|
for (size_t idx_layer = range.begin(); idx_layer < range.end(); ++ idx_layer) {
|
||||||
m_print->throw_if_canceled();
|
m_print->throw_if_canceled();
|
||||||
// BOOST_LOG_TRIVIAL(trace) << "Detecting solid surfaces for region " << region_id << " and layer " << layer->print_z;
|
// BOOST_LOG_TRIVIAL(trace) << "Detecting solid surfaces for region " << region_id << " and layer " << layer->print_z;
|
||||||
|
|
Loading…
Reference in New Issue