-
-
Notifications
You must be signed in to change notification settings - Fork 119
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
There is no way to determine whether two edges are equal #993
Comments
I'm currently working on this, as it's blocking #42 (which is my top priority). |
I've been working on this for a bit, so here's an update: Sub-problem 1. from my original comment here has been addressed (#999). As I said, this doesn't do a whole lot by itself, and I'm still working on the other sub-problems. I'd like to address #695, which is an attractive target not only because it would progress this issue, but also because it would allow for making curves and surfaces irreversible. Curves are only reversible because surfaces need to be, and surfaces are reversible because that's how we define face orientation. If #695 could be addressed, then the This would have a simplifying effect on reversing the direction of However, if curves can't be reversed, then there's no way to reverse edges that have no vertices, as those are defined only by the curve. Fortunately, I have a solution for that (#1020). If all edges were bound by vertices, then the order of vertices would define edge direction just fine. But this is currently blocked by the sweep algorithm doing all kinds of dodgy stuff, so I'm working on fixing that right now. The sweep algorithm also makes up sub-problem 3. from my original comment, so cleanup that up helps in two ways, and I've started doing that (first results in #1026). I have more cleanups in a local branch, but more work is needed to get the cleaned up version over the finish line. |
I'm still working on #1020 as a means to progressing this issue. I've left an update there: #1020 (comment) |
The sweep algorithm has been improved significantly, and #1020 has been addressed. This leaves item 2 (from the original issue description) as the only remaining item to be addressed. I'm currently looking into whether it makes sense fix #695 outright to advance this issue, or if there's a more minimally invasive solution that I can apply. |
#695 has been addressed now, which means everything from the list in the issue description is taken care of. Addressing this issue should be relatively straight-forward now. I plan to change |
Turns out most of the test failures I was seeing last week had the same source and were easy to fix, but there's also a deeper problem: Normalizing the order of vertices when constructing a Thoughts on potential solutions:
I'll spend some more time thinking and weighing the options. |
I've done the thinking and weighing I said I would, and the result is #1079. I consider this issue blocked on that one now. |
#1079 has been addressed. This issue is no longer blocked, and I will continue working on it now. |
When dealing with edges in the kernel (instances of struct
Edge
, to be precise), there is no way to tell whether two edges are actually the same. This hasn't been a problem so far, but it is getting in the way of finishing some intersection algorithms I'm currently writing for #42.This problem consists of multiple sub-problems:
Edge
is defined in terms of local surface coordinates, and there is noGlobalEdge
that could be used to determine whether twoEdge
s are the same in global space. This is actually quite trivial to address (I have the solution in a local branch), but by itself, this doesn't help.Edge
s are actually half-edges, as in, they are directed. So even if we had aGlobalEdge
, we'd still be dealing with the problem that twoGlobalEdge
s could be coincident, but still defined differently. This is related to Handle surface orientation in a simpler and more robust way #695.Edge
instances that are, in principle, the same, but they are defined differently. Both in terms of their local coordinates (which can't be avoided), but also in the direction of their global ones. The shared edge of two neighboring side faces isn't actually shared; it's basically two different edges that are coincident, but point in different directions.The last problem is the most difficult, probably. The first two just require a bit of re-shuffling within the kernel code, but the creation of side faces in the sweep algorithm has been a problem again and again, since that algorithm exists. Fortunately time has gone on, and I have new ideas on how to finally do this right. I'll report back once I had the chance to do a bit of experimentation.
The text was updated successfully, but these errors were encountered: