nmwsharp / polyscope

A C++ & Python viewer for 3D data like meshes and point clouds
https://polyscope.run
MIT License
1.76k stars 190 forks source link

Fix custom indexing for edge picks #256

Open MarkGillespie opened 6 months ago

MarkGillespie commented 6 months ago

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 in surface_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 calls triangleAllEdgeInds.recomputeIfPopulated(); three times if the permutations are all set at once via SurfaceMesh::setAllPermutations is called.

nmwsharp commented 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?

nmwsharp commented 6 months ago

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.