Other than oracles (detailed below), libfive and Antimony’s kernels mostly overlap, but libfive should be faster and more robust in doing all the things that they have in common.
The philosophical change is that libfive is meant as infrastructure, rather than as part of a specific end-user application. I’ve built a minimal GUI around it, but that’s just an example, and there are other projects (both commercial and open-source) that are using the kernel for other things.
Part of being infrastructure is robustness. Antimony’s geometry kernel has a
handful of tests; libfive has over a hundred test cases that make tens of thousands of assertions.
I’ve gotten rid of the string-based representation of math trees (both old and new syntax), and replaced it with constructing the trees directly with overloaded C++ classes. This is minor, but it makes the build progress a lot less messy, because I don’t have to wrangle lemon + flex to do the parser generation.
The kernel itself is still based on f-reps, but I’ve put a ton of time into making the meshing fast and robust, so you can use meshes for quick previews (rather than Antimony’s voxel rendering). The meshes that come out are watertight, hierarchical, topologically manifold, and preserve sharp features. It's not perfect, but it’s a very strong open-source f-rep mesher.
I’ve also added a universal backdoor to the f-rep paradigm: if you’re using the kernel at the C++ level, you can build black-box “oracles”, which plug into the f-rep tree, but do arbitrary computations. This is a good way to work around the limitations of pure math trees. There aren’t many open-source examples of oracles (yet), but commercial users have been using them to interface with other, non-f-rep model representations.
Regards,
Matt