Consolidated from an e-mail thread and several e-mail messages by Sean
to the BRL-CAD developers list in Jun 2013 which includes this message:

https://sourceforge.net/mailarchive/forum.php?thread_name=02c584af-d1ad-4d23-9837-1412eed14350%40me.com&forum_name=brlcad-devel

> 4. Finally we will get rid of wireframes. However, we will be able
>    to easily enable or disable shaded geometry or vice versa.

We're not getting rid of wireframes.  Shaded display geometry becoming
the default, however, is already planned and in the works.  NURBS
surface-surface intersections (Wu's project) are required for that to
happen.

...

Making wireframes not be the default is one of several reasons why
we've been working on NURBS infrastructure.  Not understanding why
this is required given our representation format is usually an
indication that someone does not yet understand the fundamental
problem... which is not meant to be taken in a negative way.  MOST
people don't have experience with our particular problem domain which
is specific to having mathematically-based implicit geometry
representations along with boolean operations.

When most people say shaded display, they usually think of OpenGL,
Direct3D, games, other modeling systems, etc.  Those systems are
driven by polygons (triangles).  To have that style of shaded display,
you have to have polygons.  We do not have polygons.  We do not have a
robust method for getting polygons.  NURBS gives us a robust method.

When we can 1) convert any geometry to NURBS, 2) evaluate any
booleans, and 3) tessellate NURBS robustly, it will be possible to
have robust shaded displays for all geometry.  #1 was finished last
year primarily thanks to Cliff and Wu.  #3 was finished just this year
primarily due to Keith.  Work on #2 is underway and is scheduled to be
finished this year..

It's been a while since I've had to succinctly describe the problem
and solution, so hopefully that is all understandable to everyone.
There are several independent tasks that will need to be completed is
anyone wants to help us get there more quickly.  ;)

...

> Sean, are those tasks grouped somewhere in the TODO list, or?

Not in such a succinct form because there is a lot of interrelation
with other tasks/projects.  E.g., one can frame reliable STEP NURBS
import is just as important for shaded displays because users usually
want to view their own existing data.  Or once we have robust boolean
evaluation of NURBS, most of our converters will need to be updated to
use the new method ... that's a lot of work. :)

Some tasks that come to mind related to shaded displays are:

* library routine for boolean evaluation of NURBS

* library routine for non-solid NURBS tessellation (capability exists,
  but not as formal API)

* library routine for solid NURBS tessellation (capability exists, but
  not as formal API)

* libgcv routine to perform NURBS boolean evaluation and tessellation

* connecting "facetize" command to use libgcv (solid tessellation)

* migrate current converter polygonal mesh boolean evaluation method
  of NMG-based converters to libgcv

* updating all NMG-based exporters to use new libgcv routine, retain
  old method as legacy option

* updating mged/archer to utilize boolean evaluated NURBS as a
  visualization mode

Other useful but maybe not strictly necessary tasks:

* optimize NURBS prep

* connecting "E" and "ev" commands to use libgcv (non-solid or solid)

* implement support for plate-mode NURBS

* update STEP and 3DM converters to support non-solid NURBS import via
  plate-mode

* libgcv routine to perform NURBS healing (close near-solid NURBS
  geometries)

* update NURBS importers to with option to perform healing on import

* update NURBS ray tracing to perform reparameterization/healing
  during prep

* update IGES importer to import NURBS directly

* implement OBJ NURBS import support

* parallelize single-object NURBS prep (particularly the surface tree
  building)

* parallelize boolean evaluation of NURBS

* parallelize NURBS tessellation

* refactor libdm API to better support (polygonal,curve,point) display
  lists

* refactor libdm implementation to re-encapsulate platform-specific
  logic (no #ifdefs in public headers)

* review old bspline NURBS logic, integrate useful portions, then
  remove the rest

* formally document our BREP/NURBS primitive, capabilities and
  limitations

That's just off the top of my head.  There are undoubtedly other tasks
involved but that's a partial list.  Some/many of them are already in
the TODO file, but many are not yet.  Feel free to
expand/incorporate/ignore. ;)
