diff options
author | c.lamboo <casperlamboo@gmail.com> | 2022-04-20 16:05:37 +0300 |
---|---|---|
committer | c.lamboo <casperlamboo@gmail.com> | 2022-04-20 16:05:37 +0300 |
commit | bb0dfd893f43e9e867c8cab0e57a451c08310311 (patch) | |
tree | d39b7dfcb293fec699e7233e9f64112fd65d5073 | |
parent | 104f0e0d21a211391054d1fea4e68f9dc68bb8c8 (diff) |
Avoid polygons for branches that don't connect to the build plate
CURA-9096
-rw-r--r-- | src/TreeSupport.cpp | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/src/TreeSupport.cpp b/src/TreeSupport.cpp index 51032096b..3cc74d400 100644 --- a/src/TreeSupport.cpp +++ b/src/TreeSupport.cpp @@ -318,12 +318,11 @@ void TreeSupport::dropNodes(std::vector<std::vector<Node*>>& contact_nodes) return branch_radius * (node.distance_to_top + 1) / tip_layers; } }(); - if (group_index == 0) - { - //Avoid collisions. - const coord_t maximum_move_between_samples = maximum_move_distance + radius_sample_resolution + 100; //100 micron extra for rounding errors. - PolygonUtils::moveOutside(volumes_.getAvoidance(branch_radius_node, layer_nr - 1), next_position, radius_sample_resolution + 100, maximum_move_between_samples * maximum_move_between_samples); //Some extra offset to prevent rounding errors with the sample resolution. - } + + //Avoid collisions. + const coord_t maximum_move_between_samples = maximum_move_distance + radius_sample_resolution + 100; //100 micron extra for rounding errors. + Polygons avoidance = group_index == 0 ? volumes_.getAvoidance(branch_radius_node, layer_nr - 1) : volumes_.getCollision(branch_radius_node, layer_nr - 1); + PolygonUtils::moveOutside(avoidance, next_position, radius_sample_resolution + 100, maximum_move_between_samples * maximum_move_between_samples); Node* neighbour = nodes_per_part[group_index][neighbours[0]]; size_t new_distance_to_top = std::max(node.distance_to_top, neighbour->distance_to_top) + 1; @@ -428,12 +427,11 @@ void TreeSupport::dropNodes(std::vector<std::vector<Node*>>& contact_nodes) return branch_radius * (node.distance_to_top + 1) / tip_layers; } }(); - if (group_index == 0) - { - //Avoid collisions. - const coord_t maximum_move_between_samples = maximum_move_distance + radius_sample_resolution + 100; //100 micron extra for rounding errors. - PolygonUtils::moveOutside(volumes_.getAvoidance(branch_radius_node, layer_nr - 1), next_layer_vertex, radius_sample_resolution + 100, maximum_move_between_samples * maximum_move_between_samples); //Some extra offset to prevent rounding errors with the sample resolution. - } + + //Avoid collisions. + const coord_t maximum_move_between_samples = maximum_move_distance + radius_sample_resolution + 100; //100 micron extra for rounding errors. + Polygons avoidance = group_index == 0 ? volumes_.getAvoidance(branch_radius_node, layer_nr - 1) : volumes_.getCollision(branch_radius_node, layer_nr - 1); + PolygonUtils::moveOutside(avoidance, next_layer_vertex, radius_sample_resolution + 100, maximum_move_between_samples * maximum_move_between_samples); const bool to_buildplate = !volumes_.getAvoidance(branch_radius_node, layer_nr - 1).inside(next_layer_vertex); Node* next_node = new Node(next_layer_vertex, node.distance_to_top + 1, node.skin_direction, node.support_roof_layers_below - 1, to_buildplate, p_node); |