Fixed wrong direction of bridges after "ensure vertical wall thickness"

rework. Fixes SPE-1598
This commit is contained in:
Vojtech Bubnik 2023-03-15 18:37:44 +01:00
parent 5277ed502d
commit 66abc34e88

View File

@ -291,22 +291,24 @@ Surfaces expand_bridges_detect_orientations(
uint32_t src_id = it->src_id; uint32_t src_id = it->src_id;
for (++ it; it != bridge_expansions.end() && it->src_id == src_id; ++ it) ; for (++ it; it != bridge_expansions.end() && it->src_id == src_id; ++ it) ;
} }
for (uint32_t bridge_id = 0; bridge_id < uint32_t(bridges.size()); ++ bridge_id) { for (uint32_t bridge_id = 0; bridge_id < uint32_t(bridges.size()); ++ bridge_id)
acc.clear(); if (group_id(bridge_id) == bridge_id) {
for (uint32_t bridge_id2 = bridge_id; bridge_id2 < uint32_t(bridges.size()); ++ bridge_id2) // Head of the group.
if (group_id(bridge_id) == bridge_id) { acc.clear();
append(acc, to_polygons(std::move(bridges[bridge_id2].expolygon))); for (uint32_t bridge_id2 = bridge_id; bridge_id2 < uint32_t(bridges.size()); ++ bridge_id2)
auto it_bridge_expansion = bridges[bridge_id2].bridge_expansion_begin; if (group_id(bridge_id2) == bridge_id) {
assert(it_bridge_expansion == bridge_expansions.end() || it_bridge_expansion->src_id == bridge_id2); append(acc, to_polygons(std::move(bridges[bridge_id2].expolygon)));
for (; it_bridge_expansion != bridge_expansions.end() && it_bridge_expansion->src_id == bridge_id2; ++ it_bridge_expansion) auto it_bridge_expansion = bridges[bridge_id2].bridge_expansion_begin;
append(acc, to_polygons(std::move(it_bridge_expansion->expolygon))); assert(it_bridge_expansion == bridge_expansions.end() || it_bridge_expansion->src_id == bridge_id2);
} for (; it_bridge_expansion != bridge_expansions.end() && it_bridge_expansion->src_id == bridge_id2; ++ it_bridge_expansion)
//FIXME try to be smart and pick the best bridging angle for all? append(acc, to_polygons(std::move(it_bridge_expansion->expolygon)));
templ.bridge_angle = bridges[bridge_id].angle; }
// without safety offset, artifacts are generated (GH #2494) //FIXME try to be smart and pick the best bridging angle for all?
for (ExPolygon &ex : union_safety_offset_ex(acc)) templ.bridge_angle = bridges[bridge_id].angle;
out.emplace_back(templ, std::move(ex)); // without safety offset, artifacts are generated (GH #2494)
} for (ExPolygon &ex : union_safety_offset_ex(acc))
out.emplace_back(templ, std::move(ex));
}
} }
// Clip the shells by the expanded bridges. // Clip the shells by the expanded bridges.