Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/Ultimaker/CuraEngine.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorc.lamboo <casperlamboo@gmail.com>2022-04-20 16:05:37 +0300
committerc.lamboo <casperlamboo@gmail.com>2022-04-20 16:05:37 +0300
commitbb0dfd893f43e9e867c8cab0e57a451c08310311 (patch)
treed39b7dfcb293fec699e7233e9f64112fd65d5073
parent104f0e0d21a211391054d1fea4e68f9dc68bb8c8 (diff)
Avoid polygons for branches that don't connect to the build plate
CURA-9096
-rw-r--r--src/TreeSupport.cpp22
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);