This patch contains an initial set of nodes to access basic
mesh topology information, as explored in T100020.
The nodes allow five direct topology mappings for meshes:
- Corner -> Face Which face the corner is part of, and its index in the face
- Vertex -> Edge Choose an edge attached to the vertex
- Vertex -> Corner Choose a corner attached to the vertex
- Corner -> Edge The next and previous edge at each face corner
- Corner -> Vertex The vertex associated with a corner
- Corner -> Corner Offset a corner index within a face
And two new topology mappings for curves:
- Curve -> Points Choose a point within a curve
- Point -> Curve Find which curve a point is part of
The idea is that some of the 16 possible mesh mappings are more
important, and that this is a useful set of nodes to start exploring this area.
For mappings with an arbitrary number of connections, we generally
have to sort them and use an index to choose a single element, because
geometry nodes does not support list fields. There are performance benefits
to doing it this way too.
Currently which of the "start" elements is used is determined by the field
context, so the "Field at Index" and "Interpolate Domain" nodes will be quite
important. Also, currently the "Sort Index" inputs are clamped to the number
of connections.
Todo after initial commit:
- Rename "Control Point Neighbors" node to be consistent with the naming here
- Version away the "Vertex Neighbors" node which is fully redundant now
- Implement a special case for when no weights are used for performance
- Experiment with de-duplicating some of the sorting logic between the nodes
- Improve performance and memory use of topology mappings
- Look into caching some of the mappings on meshes


