The general idea here is to wrap the CurvesGeometry DNA struct with
a C++ class that can do most of the heavy lifting for the curve geometry
in a better way. Using a C++ class allows easier ways to group methods,
easier const correctness, and code that's more readable and faster to write.
This way, it works much more like a version of CurveEval that uses more
efficient attribute storage. I think that's a good thing, because other than
that, I still agree with most of the design decisions we made when building
that and the Spline classes.
This commit adds the structure of some yet-to-be-implemented code,
the largest thing being mutexes and vectors meant to hold lazily
calculated evaluated positions, tangents, and normals. That part might
change slightly, but it's helpful to be able to see the direction this patch
is aiming in. In particular, the inherently single-threaded accumulated
lengths and Bezier evaluated point offsets might be cached.
The next steps after this patch:
- Implement conversion to and from CurveEval
- Implement catmull-rom evaluation for CurvesGeometry and CurveEval
- Implement Bezier, NURBS, and Poly evaluation for CurvesGeometry