While it works quite well, the storage of attributes on splines has an important issue.
Attribute names are stored on all splines. Conceptually this is wrong, since attributes
are supposed to have the same names, types, and orders, on every spline of a curve.
But it is also inefficient, since we store a full CustomDataLayer for every attribute
on every spline, when all we really need is a pointer.
This task is for changing that in a few ways:
- Don't use CustomDataAttributes for the control point domain.
- Add AttributeID with a string or an anonymous attribute reference.
- On curves, store a VectorSet of attribute IDs.
- Allow retrieving a PointAttributeKey from CurveEval
- This is really just an index, but in debug builds it can have extra information for double-checking the type.
- Use a function with PointAttributeKey to retrieve specific attributes from splines.
- For operating on all spline attributes, add a foreach_attribute_array callback, possibly with an option to position and handles, etc.