Open MarkGillespie opened 6 months ago
Thank you for this!
I'm looking over this and I've totally forgotten how this logic works :) What is the change in behavior before-after this PR? Is the old code buggy/crashing? Or did it ignore custom indexing in the picking UI?
Also for these
size_t nCorners() const { return cornerDataSize == INVALID_IND ? nCornersCount : cornerDataSize; }
We probably ought to create two separate functions
size_t nCorners() const { nCornersCount; }
size_t cornerDataSize() const { return cornerDataSize == INVALID_IND ? nCornersCount : cornerDataSize; }
otherwise the nCorners()
function will return something other than the number of corners, which could be super confusing.
Update picking logic to use custom indices when picking edges and halfedges.
I'm not totally sure if I got all of the
recomputeIfPopulated();
calls correct insurface_mesh.ipp
: this code works for my use case, but it's possible that there are more arrays that should really be recomputed when the edge, halfedge, or corner permutations are set. Also, now the code callstriangleAllEdgeInds.recomputeIfPopulated();
three times if the permutations are all set at once viaSurfaceMesh::setAllPermutations
is called.