-
Notifications
You must be signed in to change notification settings - Fork 110
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Potential boolean bug #970
Comments
Yeah, I feel like we could use an approximate |
For the record: We now check for self-intersection in Line 213 in 3a0c251
|
It seems that this may be related to the mesh simplification pass. For manifold/test/boolean_complex_test.cpp Lines 1040 to 1057 in ac82767
The result is not self-intersecting (doesn't even require epsilon-valid!) if we disable the mesh simplification pass, the part that flags redundant edges for collapsing. I think this suggests that the redundant edge removal may produce self-intersection. However, disabling mesh simplification doesn't fix all the test cases. For example, the following case is still failing: manifold/test/boolean_test.cpp Lines 425 to 435 in ac82767
Probably two issues at play here. Also, about the edge flagging code, why don't we do the following, which updates bool operator()(int edge) const {
if (halfedge[edge].pairedHalfedge < 0) return false;
// Flag redundant edges - those where the startVert is surrounded by only
// two original triangles.
const TriRef ref0 = triRef[edge / 3];
int current = NextHalfedge(halfedge[edge].pairedHalfedge);
TriRef ref1 = triRef[current / 3];
bool ref1Updated = !ref0.SameFace(ref1);
while (current != edge) {
current = NextHalfedge(halfedge[current].pairedHalfedge);
int tri = current / 3;
const TriRef ref = triRef[tri];
if (!ref.SameFace(ref0) && !ref.SameFace(ref1)) {
if (!ref1Updated) {
ref1 = ref;
ref1Updated = true;
} else {
return false;
}
}
}
return true;
} |
See #666 (comment)
Just to remind us not to forget about this after finishing v3.0 release.
The text was updated successfully, but these errors were encountered: