mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-10-08 00:01:09 +00:00
Belt printer: classic tree branches land on the belt instead of sliding down it
TreeSupportData added the belt surface to every layer's outlines, so the belt fed the classic tree's collision and avoidance maps. A node that descends onto an obstacle is pushed out of it, and on a belt that walked the branch down the tilted surface, ahead of the part, before it could end: tree hybrid/slim/strong supports swept far along the belt where organic supports dropped straight down. Take the belt out of the outlines. The belt is where a branch ends, and that is already handled: drop_nodes() stops a node once its whole circle is in the belt (belt_node_landed()) and draw_circles() clips every layer's circles to the belt plane, so the branch tapers to a tip on it. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5.1
parent
0b11311d40
commit
d527db6bdf
@@ -3927,18 +3927,13 @@ TreeSupportData::TreeSupportData(const PrintObject &object, coordf_t xy_distance
|
||||
poly.simplify(scale_(m_radius_sample_resolution), &outline);
|
||||
}
|
||||
|
||||
// Belt floor: add belt surface polygon to layer outlines so the
|
||||
// collision system treats the belt as a physical surface.
|
||||
{
|
||||
BeltFloorContext ctx;
|
||||
double local_print_z = layer->print_z - object.belt_global_z_offset();
|
||||
if (ctx.init_local(object.slicing_parameters(), object.print()->config(),
|
||||
object.belt_global_z_offset())) {
|
||||
Polygons belt_surface = ctx.surface_polygon(local_print_z);
|
||||
for (auto &p : belt_surface)
|
||||
outline.emplace_back(ExPolygon(p));
|
||||
}
|
||||
}
|
||||
// The belt surface is deliberately NOT part of the outlines. The outlines
|
||||
// feed the collision and avoidance maps, and a node descending onto an
|
||||
// obstacle is pushed out of it: with the belt as an obstacle the nodes slid
|
||||
// down the tilted surface, ahead of the part, instead of landing on it. The
|
||||
// belt is where a branch ENDS: drop_nodes() stops a node once its whole
|
||||
// circle is in the belt (belt_node_landed()) and draw_circles() clips every
|
||||
// layer's circles to the belt plane, so the branch tapers to a tip on it.
|
||||
|
||||
if (layer_nr == 0)
|
||||
m_layer_outlines_below.push_back(outline);
|
||||
|
||||
Reference in New Issue
Block a user