BRL-CAD To Do List
==================

Included below is a list of things that are scheduled or desirable to
be done at some point.  Most recently added items are on top, older
topics are on the bottom.  This is not an official list, it's more a
scratch pad for the developers to use for tracking development ideas
and informal plans.

The items listed for release should not ever hinder, stop, or
otherwise delay a release from being made.  The items listed are
merely to give an estimate of what was expected to be done.  See the
project task tracker for more to do items and future planning efforts.
http://sf.net/pm/?group_id=105292


THESE SHOULD HAPPEN BEFORE THE NEXT RELEASE
-------------------------------------------

* ship it!


THESE SHOULD HAPPEN WITHIN TWO RELEASE ITERATIONS
-------------------------------------------------

* clone and tracker

* Endgame Framework importer plugin

* get archer working, ensure functionality cross-platform

* remove op-bw

* fix potential buffer overflows and security issues detected by
  Pedro's run of FlawFinder

* test pic/nonpic build problems with librtms/libmultispectral

* use environ for run-time path lookups

* modify the new tree traversal code to be generic

* begin 8.0 branch for backwards-incompatible/complex changes


THESE ARE LOWER PRIORITY OR FOR FUTURE RELEASES
-----------------------------------------------

* design a mug :)

* consider impact and/or rename 'wall' and 'hd' commands due to
  conflict with other tools

* Use NSIS instead of InstallShield/MSI for Windows binary releases

* Generate plain .zip files for Windows binary releases

* fix the variety of ami.tcl and ampi.tcl tclscript warnings/errors

* update adrt with latest changes being used by muves team

* integrate adrt, ensure compilation/execution works cross-platform

* run indent.sh on directories (one at a time, validating results)

* set c-indentation-style to k&r to override default gnu style setting
  in Emacs. (see c-set-style)

* add support for arbitrary matrix transformations to torus primitive

* add configuration checks and build system support to disable C++
  outright if necessary, e.g. an --enable-c++ option

* configure support to enable/disable framebuffers, display
  managers, geometry converters, and image converters.  consider
  apache's module management as an example.

* libbu routine to make a temp file reliably/consistently

* review "eclectic" from GSI as a tessellation approach

* review and merge in the rest of the GSI modifications

* make target and/or script to update ChangeLog and version
  information, possibly including checking for consistency, to
  facilitate release process.

* add the automated rtarea spreadsheet-producing script to repository

* add some means to disable/minimize libfft on systems that don't have
  enough memory to compile the larger filters

* display the current mode in mged graphics window

* full/exact precision computation support

* c++ geometry engine/api using librt/libbn/libbu

* inside/outside point and voxel testing capability in librt

* automatic geometry voxelizer (perhaps using arbs or vol primitive)

* turn geometry converters and image converters into libraries

* add support for querying geometry properties to library including
  computing surface area and weight/mass.

* add verification and validation tests confirming behavior of the
  ray-tracer and computations of area, mass, volume, etc.

* testing suite for all binaries: for cmd2 in $(for cmd in `find . -name Makefile.am | xargs cat | perl -pi -e 's/\\\\\n//g'| grep -E "PROGRAMS ?=" | sed 's/.*=//g'` ; do echo $cmd ; done | sort | uniq ) ; do echo command: $cmd2 ; done

* add geometry example of building 238

* Mac OS X SGI dial knobs support

* merge old and 'new' tops behavior into one, preserving compatibility
  where it makes sense.

* ability to "unpush" objects, translating them to a new position and
  applying the correct matrix (using either bounding box or center of
  mass, for example)

* ensure successful build on mingw

* test for USE_FORKED_THREADS in configure

* optimize CSG structures automatically, automatic simplification.

* option to mged make command or new command that enters solid edit
  mode, "med", "smake", "makes", "msed", etc.  same for cp command.

* recursive configure and variable overrides for autogen.sh

* optimize configure testing so that when options are enabled, the
  corresponding library and functionality tests are not performed.

* have libbu report memory allocation statistics so the exact amount
  of memory requirements for a geometry database can be computed on
  the fly via a pre-prep phase.

* center of presented area

* short introductory documentation on using various BRL-CAD command
  line tools such as rt, mged, nirt, fbserv, converters, etc.

* short introductory documentation on using mged, covering a majority
  of the various commands.

* reference sheet of useful BRL-CAD command-line tools grouped
  categorically.

* reference sheet of common mged commands, keybindings, gui elements
  and scripting facilities.

* support to the raytracers for multiple image file formats,
  recognizing an option and/or the file suffix of the -o filename.

* libfb + font rendering (perhaps through libbn's plot interface) for
  a posix terminal.

* Optional compile-time support for using GMP or CLN for arbitrary
  precision arithmetic.

* gpgpu for enhanced performance boolweave sorting

* getexecname, "/proc/self/cmdline", program_invocation_short_name.
  separate out into new file.

* write an introduction to brl-cad document that overviews the primary
  tools and how they can be used together.

* test out -Wfloat-equal

* geometry viewing commands/visualizations of exploded levels

* add command line help options to 'benchmark' tool

* mirror around an arbitrary plane (maybe point+vector) in mged

* mirror around point/distance along axis operation in mged

* librt-based path tracer

* system identifier application with sysctl-style information
  database, with some back-end functionality placed into libbu.

* write scripts that parse the sf.net tracker data and generate
  automatic reports for release.

* add callback data parameters to libpkg hook functions

* add performance options for the intel compiler on Altix

* pix-png should make sure output is not to a terminal

* investigate performance impact of using sched_setaffinity and/or
  pthread_attr_setaffinity_np for linux threading affinity in librt.

* rtedge-style tracer that outputs tool paths (splines/segments, etc)
  for CNC/CAM style toolpath cutting descriptions (g-code files).

* rt annotation support

* support for fillets and chamfers as object/combination operations

* provide installation and post configuration support scripts

* make the DSP primitive use less memory when data is coming from
  a binunif. allocating 160 times binunif size is a bit extravagant
  (which comes from sizeof(struct dsp_bb)).

* add dynamic geometry support. i.e. the ability to modify the parsed
  in-memory geometry tree on the fly via api calls (e.g. to add holes)

* convert the documentation to docbook and integrate their generation
  with the build system.

* investigate why g-iges followed by iges-g on a single box results in
  permuted vertex lists

* fix reference to a "Create Solid" submenu on pdf page 18 (page 6) of
  volume II

* write up the history of brlcad

* obliterate verbose compilation warnings

* add support for subgeometry support to the geometry syndicator

* add xml, nff, bzw, pov, blend geometry import and export support

* add support for filesystem-based geometry collections

* add support for levels of detail

* modify the raytracers to use common fb and file output code


ODDITIES
--------

* the scale structure in bn_cmd_noise_slice (bn_tcl.c) was never
  initialized. it looks like somebody has planned to extend the
  function but never carried out


THESE BREAK PROTOCOL OR ARE BACKWARDS-INCOMPATIBLE
--------------------------------------------------

* support for features either as primitives or operations or both
  e.g. chamfer, fillet, round, etc

* fix the database I/O writing to properly support the addition of new
  primitive types.  this includes modifying the major/minor code or
  combinations/regions and binary objects

* add database support for constraints, expressions, parametric
  values, construction history, and timestamping.


DOCUMENTATION
-------------

* BRL-CAD Overview Diagram
	Completed, but not integrated

* BRL-CAD Industry Diagram
	Completed, but not integrated

* BRL-CAD Commands Quick Reference
	Partial

* MGED Quick Reference
	Complted, but not integrated

* DoD V/L M&S Industry Diagram
	Similar to existing Industry Diagram

* Commercial CAD Comparison Diagram

* Solid Geometry Representation Comparisons

* BRL-CAD Primitives

* BRL-CAD Ray Tracing Shaders

* BRL-CAD Open Source Effort
	Why, History, How

* BRL-CAD Manifesto
	Vision & Scope

* Procedural Geometry in BRL-CAD

* Implementing a BRL-CAD Primitive

* Geometry Conversion with BRL-CAD


---
See the project task tracker for more to do items and future planning
efforts.  http://sf.net/pm/?group_id=105292

TODO items should be formatted to column 70 (M-q in emacs), no tabs.
