ENH: Relative bridge direction + Align bridge/Ironing angles with model (#12055)

Co-authored-by: Rodrigo Faselli <162915171+RF47@users.noreply.github.com>
This commit is contained in:
Ian Bassi
2026-06-03 10:12:26 -03:00
committed by GitHub
parent 1b72dbf6fa
commit 065540e48f
10 changed files with 112 additions and 22 deletions

View File

@@ -1275,6 +1275,7 @@ bool PrintObject::invalidate_state_by_config_options(
|| opt_key == "ensure_vertical_shell_thickness"
|| opt_key == "bridge_angle"
|| opt_key == "internal_bridge_angle" // ORCA: Internal bridge angle override
|| opt_key == "relative_bridge_angle" // ORCA: Relative bridge angle
//BBS
|| opt_key == "bridge_density"
|| opt_key == "internal_bridge_density") {
@@ -3217,8 +3218,19 @@ void PrintObject::bridge_over_infill()
}
// ORCA: Internal bridge angle override
if (candidate.region->region().config().internal_bridge_angle > 0)
bridging_angle = candidate.region->region().config().internal_bridge_angle.value * PI / 180.0; // Convert degrees to radians
if (candidate.region->region().config().internal_bridge_angle.value > 0) {
const auto &region_config = candidate.region->region().config();
const double custom_angle_rad = Geometry::deg2rad(region_config.internal_bridge_angle.value);
if (region_config.relative_bridge_angle.value)
bridging_angle += custom_angle_rad;
else {
bridging_angle = custom_angle_rad;
if (region_config.align_infill_direction_to_model) {
auto m = po->trafo().matrix();
bridging_angle += std::atan2((double)m(1, 0), (double)m(0, 0));
}
}
}
boundary_plines.insert(boundary_plines.end(), anchors.begin(), anchors.end());
if (!lightning_area.empty() && !intersection(area_to_be_bridge, lightning_area).empty()) {