Mesh library cleanup

From BRL-CAD
Revision as of 09:05, 9 February 2017 by Starseeker (talk | contribs) (libnmg was pulled out of librt - work needed now is docs, cleanup, robustness testing and algorithm improvements.)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

BRL-CAD has an extensive n-manifold (NMG) polygonal mesh library called LIBNMG. N-manifold is mostly a fancy way of saying it provides an arbitrary boundary representation structure. This library is used for a wide range of tasks but is commonly interacted with during geometry export to polygonal formats (e.g., g-stl). The library goes to extensive lengths to ensure that geometry is "correct" at every step along the way, that solidity is preserved, that topology is preserved, and more. All of that work means that the library can be slow and over time has become even more "unrobust" to real geometry. There are lots of O(n^2) and O(n^3) algorithms with dynamic memory allocations that make performance suboptimal. The source code is the documentation. It's one of the best at what it does, but far from good enough.

This project entails basic source code cleanup, validation, and verification. The first step is documentation cleanup pulling all of the source code comments into the nmg.h public header (or sub-header thereof) to become familiarized with the API. Then begin testing the lowest-level functions to make sure they do exactly what they are supposed to do by creating API unit tests. Test-driven development is a must here.

References

For the problem of boolean operations on NMG structures, recent papers should be studied. Some examples:

Requirements

  • Ability to read and refactor complex C
  • Ability to write API unit tests