Search code examples
meshlab

Meshlab - Get IDs of selected vertices


I want to select a region of the mesh and get the IDs of the selected vertices, so that I can use them in my custom c++ processing pipeline.

For example if there is a 3d hand mesh, one can choose the vertices that belong to every fingertip. Getting the IDs of these vertices is very useful for several applications, like tracking, annimating, etc.

Meshlab obviously uses the IDs of these vertices under the hood, but can this info be exposed to the user? There are plenty of tutorials online about how to choose (in various ways) some region of a mesh and apply some processing function, but I didn't find something that talks about getting raw information about the selected area.


Solution

  • The solution that I found is rather tedious.

    It seems that, although Meshlab obviously uses these IDs under the hood, this information is not exposed to the user. So I following this heuristic:

    • Choose the vertex of interest with the standard MeshLab tool.
    • Invert the selection.
    • Delete all vertices, and get an 1-point pointcloud/mesh as result.
    • Export this as an .off file.
    • Open the exported file and read the coordinates of this unique point. One coordinate (e.g. X) is enough.
    • Search in your original .off file or in the original mesh/pointcloud structure to find the point/vertex with this coordinate.
    • There you have it, you have the ID of the chosen vertex in the original structure.
    • Then (this is application specific, according to my needs), using PCL, I created a Kd-Tree for my pointcloud, used the selected points (red) as "query" to get some nearest neighbors (green).

    Result:

    enter image description here