mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-09-09 18:27:00 +00:00
Fix organic support being printed into object top surfaces (#15539)
This commit is contained in:
@@ -1654,28 +1654,32 @@ void generate_support_toolpaths(
|
|||||||
if (top_contact_layer.could_merge(interface_layer) && ! raft_layer)
|
if (top_contact_layer.could_merge(interface_layer) && ! raft_layer)
|
||||||
top_contact_layer.merge(std::move(interface_layer));
|
top_contact_layer.merge(std::move(interface_layer));
|
||||||
}
|
}
|
||||||
if (!bottom_interfaces && support_params.can_merge_support_regions) {
|
// Orca: Organic bottom contacts are projection seeds, not same-layer toolpaths.
|
||||||
if (base_layer.could_merge(bottom_contact_layer))
|
// Do not merge them into another same-layer support region.
|
||||||
base_layer.merge(std::move(bottom_contact_layer));
|
if (!organic_tree) {
|
||||||
else if (base_layer.empty() && ! bottom_contact_layer.empty() && ! bottom_contact_layer.layer->bridging)
|
if (!bottom_interfaces && support_params.can_merge_support_regions) {
|
||||||
base_layer = std::move(bottom_contact_layer);
|
if (base_layer.could_merge(bottom_contact_layer))
|
||||||
} else if (bottom_contact_layer.could_merge(top_contact_layer) && ! raft_layer) {
|
base_layer.merge(std::move(bottom_contact_layer));
|
||||||
if (top_interfaces && bottom_interfaces) {
|
else if (base_layer.empty() && ! bottom_contact_layer.empty() && ! bottom_contact_layer.layer->bridging)
|
||||||
top_contact_layer.merge(std::move(bottom_contact_layer));
|
base_layer = std::move(bottom_contact_layer);
|
||||||
} else if (bottom_interfaces) {
|
} else if (bottom_contact_layer.could_merge(top_contact_layer) && ! raft_layer) {
|
||||||
top_contact_layer.set_polygons_to_extrude(
|
if (top_interfaces && bottom_interfaces) {
|
||||||
diff(top_contact_layer.polygons_to_extrude(), bottom_contact_layer.polygons_to_extrude()));
|
top_contact_layer.merge(std::move(bottom_contact_layer));
|
||||||
} else {
|
} else if (bottom_interfaces) {
|
||||||
bottom_contact_layer.set_polygons_to_extrude(
|
top_contact_layer.set_polygons_to_extrude(
|
||||||
diff(bottom_contact_layer.polygons_to_extrude(), top_contact_layer.polygons_to_extrude()));
|
diff(top_contact_layer.polygons_to_extrude(), bottom_contact_layer.polygons_to_extrude()));
|
||||||
}
|
} else {
|
||||||
} else if (bottom_contact_layer.could_merge(interface_layer) && ! organic_tree) {
|
bottom_contact_layer.set_polygons_to_extrude(
|
||||||
const bool interface_layer_is_bottom = interface_layer.layer->layer_type == SupporLayerType::BottomInterface;
|
diff(bottom_contact_layer.polygons_to_extrude(), top_contact_layer.polygons_to_extrude()));
|
||||||
if (bottom_interfaces && interface_layer_is_bottom) {
|
}
|
||||||
bottom_contact_layer.merge(std::move(interface_layer));
|
} else if (bottom_contact_layer.could_merge(interface_layer)) {
|
||||||
} else {
|
const bool interface_layer_is_bottom = interface_layer.layer->layer_type == SupporLayerType::BottomInterface;
|
||||||
bottom_contact_layer.set_polygons_to_extrude(
|
if (bottom_interfaces && interface_layer_is_bottom) {
|
||||||
diff(bottom_contact_layer.polygons_to_extrude(), interface_layer.polygons_to_extrude()));
|
bottom_contact_layer.merge(std::move(interface_layer));
|
||||||
|
} else {
|
||||||
|
bottom_contact_layer.set_polygons_to_extrude(
|
||||||
|
diff(bottom_contact_layer.polygons_to_extrude(), interface_layer.polygons_to_extrude()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user