FIX: mesh boolean difference may miss some parts
jira: STUDIO-6209 Change-Id: Iea86393a45954157ccc80d3a143d3db1e15721e4 (cherry picked from commit a23eb1e0db00a5cf7b82b240ebcbbefd37f8a84d)
This commit is contained in:
parent
9ceb622d4c
commit
f5b8cadc8c
|
@ -776,14 +776,12 @@ void do_boolean(McutMesh& srcMesh, const McutMesh& cutMesh, const std::string& b
|
|||
// But we can force it to work by spliting the src mesh into disconnected components,
|
||||
// and do booleans seperately, then merge all the results.
|
||||
indexed_triangle_set all_its;
|
||||
std::vector<bool> has_been_merged(cut_parts.size(), false);
|
||||
if (boolean_opts == "UNION" || boolean_opts == "A_NOT_B") {
|
||||
for (size_t i = 0; i < src_parts.size(); i++) {
|
||||
auto src_part = triangle_mesh_to_mcut(src_parts[i]);
|
||||
for (size_t j = 0; j < cut_parts.size(); j++) {
|
||||
if (has_been_merged[j]) continue; // assume union is done first, then we can safely skip the merged parts for A_NOT_B
|
||||
auto cut_part = triangle_mesh_to_mcut(cut_parts[j]);
|
||||
has_been_merged[j] = do_boolean_single(*src_part, *cut_part, boolean_opts);
|
||||
do_boolean_single(*src_part, *cut_part, boolean_opts);
|
||||
}
|
||||
TriangleMesh tri_part = mcut_to_triangle_mesh(*src_part);
|
||||
its_merge(all_its, tri_part.its);
|
||||
|
|
Loading…
Reference in New Issue