FIX: sharptail missing when topz=0
jira: none Change-Id: I627ab5503e47dafb32a548ae1123b6a50610c9a8
This commit is contained in:
parent
8f94e72c16
commit
0bbf795400
|
@ -890,7 +890,7 @@ void TreeSupport::detect_overhangs(bool check_support_necessity/* = false*/)
|
|||
if (layer->lower_layer == nullptr) {
|
||||
for (auto& slice : layer->lslices_extrudable) {
|
||||
auto bbox_size = get_extents(slice).size();
|
||||
if (!((bbox_size.x() > length_thresh_well_supported && bbox_size.y() > length_thresh_well_supported))
|
||||
if (!((bbox_size.x() > length_thresh_well_supported || bbox_size.y() > length_thresh_well_supported))
|
||||
&& g_config_support_sharp_tails) {
|
||||
layer->sharp_tails.push_back(slice);
|
||||
layer->sharp_tails_height.push_back(layer->height);
|
||||
|
@ -2299,12 +2299,13 @@ void TreeSupport::draw_circles()
|
|||
|
||||
// merge overhang to get a smoother interface surface
|
||||
// Do not merge when buildplate_only is on, because some underneath nodes may have been deleted.
|
||||
if (top_interface_layers > 0 && node.support_roof_layers_below >=0 && !on_buildplate_only) {
|
||||
if (top_interface_layers > 0 && (node.support_roof_layers_below > 1 || (node.support_roof_layers_below >= 0 && !node.is_sharp_tail)) &&
|
||||
!on_buildplate_only) {
|
||||
ExPolygons overhang_expanded;
|
||||
if (node.overhang.contour.size() > 100 || node.overhang.holes.size()>1)
|
||||
if (node.overhang.contour.size() > 100 || node.overhang.holes.size() > 1)
|
||||
overhang_expanded.emplace_back(node.overhang);
|
||||
else {
|
||||
overhang_expanded = offset_ex({ node.overhang }, scale_(m_ts_data->m_xy_distance));
|
||||
overhang_expanded = offset_ex({node.overhang}, scale_(m_ts_data->m_xy_distance));
|
||||
}
|
||||
append(area, overhang_expanded);
|
||||
}
|
||||
|
@ -2345,6 +2346,10 @@ void TreeSupport::draw_circles()
|
|||
roof_1st_layer = intersection_ex(roof_1st_layer, m_machine_border);
|
||||
|
||||
ExPolygons roofs; append(roofs, roof_1st_layer); append(roofs, roof_areas);append(roofs, roof_gap_areas);
|
||||
|
||||
// slightly slow down the slicing speed
|
||||
base_areas = diff_ex(base_areas, collision_base.empty() ? m_ts_data->get_collision(0, obj_layer_nr) : collision_base);
|
||||
|
||||
base_areas = diff_ex(base_areas, ClipperUtils::clip_clipper_polygons_with_subject_bbox(roofs, get_extents(base_areas)));
|
||||
base_areas = intersection_ex(base_areas, m_machine_border);
|
||||
|
||||
|
@ -3774,9 +3779,9 @@ void TreeSupport::generate_contact_points()
|
|||
if (add_interface && xy_expansion > EPSILON && !is_sharp_tail) {
|
||||
overhangs = safe_offset_inc(overhangs, xy_expansion, relevant_forbidden, scale_(MIN_BRANCH_RADIUS * 1.75), 0, 1);
|
||||
}
|
||||
overhangs_no_extra_expand = (unscale_(xy_expansion) - config.support_expansion.value) > EPSILON ?
|
||||
safe_offset_inc({overhang_part}, scale_(config.support_expansion.value), relevant_forbidden, scale_(MIN_BRANCH_RADIUS * 1.75), 0, 1) :
|
||||
overhangs;
|
||||
overhangs_no_extra_expand = (!is_sharp_tail && (unscale_(xy_expansion) - config.support_expansion.value > EPSILON) && (config.support_expansion.value > EPSILON)) ?
|
||||
safe_offset_inc({overhang_part}, scale_(config.support_expansion.value), relevant_forbidden, scale_(MIN_BRANCH_RADIUS * 1.75), 0, 1) :
|
||||
overhangs;
|
||||
if (m_support_params.support_style == smsTreeHybrid &&
|
||||
(overhang_type & (BigFlat | ThinPlate))) {
|
||||
overhangs_regular = offset_ex(intersection_ex(overhangs, m_ts_data->m_layer_outlines_below[layer_nr - 1]), radius_scaled);
|
||||
|
@ -3812,6 +3817,7 @@ void TreeSupport::generate_contact_points()
|
|||
}
|
||||
|
||||
for (auto &overhang : overhangs_regular) {
|
||||
if (is_sharp_tail && overhang.area() < SQ(scale_(2.))) add_interface = false;
|
||||
BoundingBox overhang_bounds = get_extents(overhang);
|
||||
double radius = std::clamp(unscale_(overhang_bounds.radius()), MIN_BRANCH_RADIUS, base_radius);
|
||||
// add supports at corners for both auto and manual overhangs, github #2008
|
||||
|
|
Loading…
Reference in New Issue