~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Cross Reference
BRL-CAD/TODO

Version: ~ [ 7.24.0 ] ~

  1                                                  -*- coding: utf-8 -*-
  2 BRL-CAD To Do List
  3 ==================
  4 
  5 This document contains a collection of desirable BRL-CAD development
  6 tasks.  Included is a list of the tasks expected for the current
  7 monthly development release iteration, tasks that will hopefully be
  8 completed within two iterations, and a remaining "backlog" of
  9 unscheduled development tasks.
 10 
 11 This is not an official list of tasks that will be completed.  Instead
 12 it's more like a developer scratch pad for recording ideas and
 13 coordinating release tasks.  At the beginning of each month,
 14 developers add the tasks they expect to complete and then remove those
 15 tasks as they are completed.
 16 
 17 
 18 THESE TASKS SHOULD HAPPEN BEFORE THE NEXT RELEASE
 19 -------------------------------------------------
 20 
 21 
 22 
 23 THESE TASKS SHOULD HAPPEN WITHIN TWO RELEASE ITERATIONS
 24 -------------------------------------------------------
 25 
 26 * investigate thread affinity locking on Linux
 27 
 28 * investigate INFINITY spatial partitioning issue.
 29 
 30 * closing the graphics window brings down X11 on Mac due to a bad
 31   context.  fix or revert recent close window behavior.
 32 
 33 * Rework p2t so it doesn't take down the application
 34   when a NURBS tessellation fails - should just abandon the
 35   problem input and continue.
 36 
 37 
 38 THESE ARE UNSCHEDULED BACKLOG TASKS
 39 -----------------------------------
 40 
 41 * finish the DSP tutorial on the wiki
 42 
 43 * implement a null spatial partitioning method so we can determine
 44   what other intersection hits are being masked (and what impact a
 45   given method has on performance)
 46 
 47 * [hn]to[hn]* conversion functions were usurped by windows 8 so we
 48   need to either wrap them or undeprecate our xdr API or see if a
 49   simple config header fix might work (ideal)
 50 
 51 * The sph wireframe drawing routine doesn't seem to like drawing very
 52   small spheres far from the origin:
 53 
 54   in test_2.s sph 1, 2, 1 0.0007  (draws a sphere wireframe correctly)
 55   in test_1.s sph 10000 -15000 3000 0.0007 (incorrect wireframe)
 56 
 57 * use spatial partitioning during boolean processing of polygonal
 58   meshes.  good approach might be to generalize TIE's kd-tree to
 59   polygons or even create a new scheme (e.g., an integer-indexed grid
 60   layout).  data coherence would be nice (but not essential).  current
 61   approach is at least O(N^2) with large constant time.  New should be
 62   O(N*log(N)).
 63 
 64 * rework the database object hash to push the iteration up into librt
 65   as API instead of expecting callers to use RT_DBNHASH and
 66   RT_DBHASH() manually.  consider using bu_hash or other container.
 67 
 68 * rename chan_add, chan_mult, chan_permute and look into possibly
 69   merging them into one tool in the util directory.  similar to the
 70   'join' command, but arguably easier to use.
 71 
 72 * temp colors and temp matrices during ray tracing, need a
 73   command-line and mged method to override parameters temporarily.
 74 
 75 * fix bottie crash on 32b builds
 76 
 77 * resolve bot bin sort optimization crash, disabled during release
 78 
 79 * test new edit command
 80 
 81 * fix 64b detection across platforms. Fix rhel 32/64 confusion
 82 
 83 * bu_bomb not printing stack trace as it is supposed to
 84 
 85 * test/fix patch-g on windows.  the input file read loops assume
 86   unix-style files resulting in parser errors.
 87 
 88 * merge conv-vg2g into dbupgrade
 89 
 90 * add the ability for search to filter objects based on whether
 91   they are being unioned, intersected or subtracted from a parent
 92 
 93 * add option to rtedge to also show back-facing hidden edges
 94 
 95 * add option to push/xpush to stop at the region level, to stop before
 96   primitives, to stop after N levels, to stop before N levels.
 97 
 98 * consolidate push/xpush together
 99 
100 * make rt_dirbuild()+rt_dirbuild() work without vomiting error
101   messages about duplicate geometry.  should be able to open the same
102   database multiple times without running into rt_uniresource
103   directory duplication
104 
105 * add an export menu to MGED that connects to auto-detected available
106   exporters (g-* tools).
107 
108 * add an export menu to Archer that connects to auto-detected
109   available exporters (g-* tools).
110 
111 * convert teapot to use nurbs surfaces instead of bspline
112 
113 * add an option to the bb command for calculating a bounding box that
114   encompasses subtracted objects and trimmed surfaces and default to
115   calculating a tight-fitting fbounding box once we have a robust path
116   from geom->NURBS+CSG->NURBS.
117 
118 * create a FASTGEN sample geometry with all entities defined and a
119   corresponding regression test to make sure outputs don't change.
120 
121 * create a BRL-CAD .g with all possible object types embedded.  The
122   csgbrep command is a good starting point, but only about half of
123   them.
124 
125 * investigate bu_vls_encode/decode failures on g-dot.c (see that
126   file for FIXME note); add tests for both functions (note only
127   g-dot.c wants to use the functions at the moment)
128 
129 * verify/fix/improve rtarea.  There are reports that the rtarea
130   command may have a bug in its calculations.  This needs to be
131   investigated along with a review of the taxonomy used by rtarea for
132   describing presented/projected areas.
133 
134 * eliminate dbi_filepath (perhaps replace with dbi_filedir) as we
135   shouldn't need to search.  we were told where the database was.
136 
137 * hook marching cubes into libged facetize
138 
139 * check libbu implementation of red-black trees (see note in bu.h
140   referencing an error in the Cormen book used as a basis)
141 
142 * make libfb parallel-safe.  use bu memory management.  remove
143   semaphore locks in src/rt/main.c and elsewhere.
144 
145 * eliminate the need for bu_semaphore_init().  allocate up to the
146   index requested on demand (so we can retain O(1) lookups) and
147   reserve the first N semaphores for BRL-CAD library use.  change
148   index to a uint8_t or uint16_t type.
149 
150 * make libbn/plot3.c functions parallel-safe so callers do not have to
151   manually wrap with bu_semaphore_acquire().
152 
153 * fix ged 'joint' command, need to figure out how libged should handle
154   non-object additions to the wireframe (or maybe they should be
155   objects, but not mged's faked solids ala cvt_vlblock_to_solids()).
156 
157 * implement a "bu_locate" function to consolidate bu_brlcad_root,
158   bu_brlcad_data, and bu_brlcad_dir.  Pass in a bu_locate_t enum,
159   the relative path, and the log/no-log flag.  Intent is to support
160   flexibility implied by presence of BIN_DIR, LIB_DIR, etc. build
161   settings.  Will need great care to ensure correct behavior is
162   preserved - bu_brlcad_root and bu_brlcad_data will need verbose
163   deprecation process, once bu_locate is implemented.  Also will
164   need matching tcl function.
165 
166 * rendering of the 'part' primitive is wrong for cases where H is less
167   than r1 (i.e., smaller cap is partially or fully within the larger
168   cap's radius).  It ends up rendering the larger sphere.
169 
170 * something wrong with brep/nurbs subdivision spatial partitioning
171   causing inline failure in BANode<ON_BoundingBox>::addChild().
172   disable NOSTRICTCXX strict flag on librt with Release mode
173   compilation to diagnose.  need to make sure class composition and
174   data members are correct and, iff correct, expand inline-unit-growth
175   to accommodate.
176 
177 * get dev consensus on format of these man page source files which
178   describe library APIs:
179 
180     ./src/libbn/libplot3.3
181     ./src/libbu/htond.3
182     ./src/libbu/redblack.3
183     ./src/libcursor/libcursor.3
184     ./src/liborle/liborle.3
185     ./src/librt/librt.3
186     ./src/libwdb/libwdb.3
187 
188 * update mged to not call wdb_init_obj and wdb_create_cmd, trace down
189   other vestiges of wdb_obj for removal
190 
191 * add support to rt tools and gtools for specifying az/el in radians
192   or degrees, propagate throughout mged commands that take angles too.
193   probably best implemented as a general libbn string to val function.
194   perhaps an explicit 'rad' suffix and an implicit 'deg' suffix, e.g.
195   rt -a 0.3rad -e 0.5rad and aet 0.3rad 45deg 0
196 
197 * change fbserv usage to require a flag for its non-daemon mode, make
198   the device type optional for both daemon and non-daemon mode
199 
200 * make sure we can run db_dirbuild() multiple times without creating
201   duplicate entries.
202 
203 * work on vdeck/comgeom-g converters needed:
204   - primitives recognized by comgeom-g but not vdeck:
205       ehy, epa, eto, rhc, rpc
206   - primitives recognized by comgeom-g (but not vdeck) but
207     with possible equivalent versions in BRL-CAD:
208       haf (half), rvw (right vertical wedge), raw (arb8), wed (DoE name
209       for 'raw'), wir (pipe), arw (arbitrary wedge [ERIM?])
210   - generate new comgeom-g tests with tgms from old GIFT docs
211 
212 * test tgf-g conversion with "ring-mode" geometry
213 
214 * investigate why the new bbox() routines for ARS and BoT result in
215   bounding boxes that are way too big.
216 
217 * fix metaball/adjust.. wipes out all metaball values with:
218   adjust metaball 1 1 1
219   just gives usage with:
220   adjust metaball 1 1
221 
222 * test for -msse3 requirement for __SSE.*__ definition
223 
224 * improve sse run-time detection so illegal instruction crashes are
225   avoided.  presently, adding -msse* to compilation will result in a
226   crash if that binary is run on non-sse hardware (e.g., Pentium M)
227 
228 * break cyclic dependency between libdm and libged.  libged should not
229   be aware of libdm (screengrab command).  to implement a ged command
230   that updates the display, the gedp could provide a means to
231   register a callback so (for example) mged could register a function
232   that gets passed a dmp, and libged would call back into that
233   front-end client function instead of a direct call so library
234   encapsulation is maintained.
235 
236 * implement uv-mapping callback so we can texture-map BoT, NMG, and
237   NURBS geometry
238 
239 * add support for a zoom/viewsize and twist options to rt so you can
240   adjust the image without having to feed a view script.
241 
242 * implement some means (perhaps glint) to check a .g file for
243   duplicate region IDs and material inconsistencies.  perhaps exposed
244   as a new command, it should take an assembly/comb name as input,
245   walk the tree, and report duplicates.  if no arg, it walks all
246   top-level objects but processes them independently and only reports
247   sub-paths once (so you don't get the same object repeatedly reported
248   for all N top-level copies).  in the output, group together regions
249   with same and different material properties together:
250 
251 DUPLICATE ID NUMBERS
252 comp.r1 ID 1234
253 comp.r2 ID 1234
254 
255 DUPLICATE ID NUMBERS WITH DIFFERENT MATERIAL PROPERTIES
256 comp.r3 ID 5678 material code 1 LOS 50
257 comp.r4 ID 5678 material code 5 LOS 75
258 
259 
260 * provide pkgIndex.tcl files for bu, bn, rt, fb, dm so we can properly
261   package require the libs without an explicit 'load'
262 
263 * struct rt_bot_internal should be using "size_t *" instead of "int *"
264   for the faces and face_normals members
265 
266 * fix the "(type)(size_t)val" hacks (using ints like ptrs, etc.)
267 
268 * Mac OS X mouse input binding problem seems to be back with rotations
269   stalling during interactive use.
270 
271 * group public library headers into subdirs, e.g. include/bu/bu.h, so
272   it's clear when you're using headers from another library and
273   breaking encapsulation.
274 
275 * add an increment option to reid to increment with something other
276   than 1 at a time.
277 
278 * add a conflict-detection option to reid in case there are
279   already-used region numbers being numbered.
280 
281 * rerun conversion.sh and compare to previous run
282 
283 * killall command reports db_lookup failures if the target object
284   doesn't exist (maybe we only care about refs).  should keep quiet.
285 
286 * DocBook: create a DB index.xml to generate a doc listing (with
287   hot links) for the html and pdf collection
288 
289 * DocBook source: fix all SEVERE messages for extradocs builds (html
290   and pdf).
291 
292 * DocBook source: add xsl customizations for figure and table title
293   positions, float centering, etc.; add automatic figure, table, and
294   other similar references; add separate markup for html (role='html')
295   and pdf (role='fo') image sizing and placement; remove unnecessary
296   image markup; lift child namespaces to each document's root element.
297 
298 * pixdiff reports bytes, but reports incorrect (off-by-one) bytes for
299   .bw input files.  cause is due to tool assuming input is rgb triplets
300   (even though output is bytes, wtf?).  should probably report pixels
301   and/or have a -b option for handling byte/bw input.
302 
303 * remove old tclscripts MGED objects in favor of the new 'Ged' widget
304   interface being used by Archer's core.
305 
306 * the new "exists" command is a beautiful corollary to the unix 'test'
307   command.  make the usage match, remove options that make no sense
308   after you've replaced instances of 'file' with 'object', and add
309   options specific to testing geometry (like whether two objects
310   overlap, whether an object's volume is greater than some value or
311   equal to zero, whether two objects are actually the same object
312   (geometrically), etc.).
313 
314 * rewrite nmg->brep conversion routine
315   (src/librt/primitives/brep/brep_brep.cpp) to use a simple 2d
316   bounding box in the plane of each nmg face.  even better would be to
317   calculate the convex hull and align the maximal edge to one of the
318   UV edges.  the csgbrep routine provides a simple box test case.
319 
320 * investigate off-by-one AND off-by-many errors from identical rt
321   invocations.  running with -P1 results in no errors, parallel (on
322   64-bit Linux RHEL) is giving many floating-point related errors.
323   running with -B also results in no errors indicating maybe something
324   related to libbn random numbers.
325 
326 * investigate why epa primitive is so sensitive to coarse absolute
327   value changes (run csgbrep, tol abs=1, facetize and get 321k poly)
328 
329 * implement a new "simulate" command for applying physics deformations
330   to geometry.  Each timestep (default steps==1) would get recorded as
331   new geometry unless updating the existing is requested.  Usage might
332   be something like this:
333 
334      simulate [-k] [-g|-G] [-f x y z N] <time> [steps]
335 
336   Examples:
337      simulate 10.5  # simulate 10.5s of time (default gravity)
338      simulate 3 10  # simulate 30s of time, 10s per timestep
339      simulate -f 0 0 -1.0 9.807 3.0  # earth's gravity for 3s
340      simulate -k 1.0  # simulate 1s of gravity, overwriting original
341      simulate -G -f 1 2 3 .4 5  # no gravity, custom force, 5s
342 
343 * implement new makesegs for tie
344 
345 * annotation primitive.  specifically a means to create an object in
346   the database that can optionally be associated with another object
347   and/or position(s) that a label refers to.  there are various styles
348   such as a single line from a point to text and two lines (e.g.,
349   indicating measurement) to text.
350 
351   the object should allow for different line styles including having
352   no lines.  there should also be support for view-fixed or
353   view-independent annotation placement (which requires a change to
354   plot()'s and possibly prep()'s signature).  it would also be useful
355   to allow an optional _annotation_ "thickness" so that the
356   annotations can represent physical geometry (so they raytrace).
357 
358   the concept is nearly equivalent to a combined sketch+extrude object
359   but with options specific to annotations.  the underlying export
360   form should be fully generalized as much as possible with a
361   higher-level "in" command constraining available options into a
362   user-friendly form.  a new "annotate" command will similarly be
363   needed to support modification of existing annotations (as well as
364   creation ala the 'in' command).  see the web for tons of examples.
365 
366   References:
367   http://en.wikipedia.org/wiki/Geometric_dimensioning_and_tolerancing
368   ASME Y14.5 2009
369   http://www.draftingzone.com/shoppingzone/6-1.pdf
370   http://www.wikistep.org/index.php/Recommended_Practices_for_the_Representation_of_GD%26T
371   http://www.wikistep.org/index.php/Recommended_Practices_for_the_Presentation_of_Dimensions,_Dimensional_and_Geometric_Tolerances
372   http://www.wikistep.org/index.php/Associative_Text_in_3D_recommended_practices
373   http://www.wikistep.org/index.php/Model_viewing,_basic_drawing_structure_and_dimensions_recommended_practices
374   http://www.iigdt.com/Products/Images/0f390980.jpg
375   src/other/openNURBS/opennurbs_annotation*
376 
377   Types of annotations:
378         text:                   text.
379                                                    text --,
380         leader:                 text ---->.                \
381                                       .            .        \           .        .         .  .
382         linear dimension:             |            |         .          |        |         |  |
383                             .         |<-- text -->|                --->|  text  |<--   -->|  |<---- text
384         angular dimension:   \  text
385                               \_____.
386 
387   Annotation placement:
388         xyz position:             (1.0, 3.5, 2.1)
389         named reference(s):        hull.r
390         above/below/left/right:    below
391         offset:                    33.4
392                 (e.g., "at 1.0,3.5,2.1" or "below hull.r offset 33.4" or "at hull.r", etc.)
393 
394   Text:
395         user-defined string:     my awesome component -----> .
396 
397         named/point reference:        hull.r1 -----> .
398                                                   .               .
399         automatic dimension (two points):         |_______________|
400                                    .        .           5.4 mm
401         custom dimension label:    |<------>|<--.
402                                                  \ Length of hull.r1: 5.4mm
403 
404               (custom label specified via format specifier: "Length of %target: %size")
405 
406   Text properties:
407        font name
408        font size (height)
409        font style: bold/italic/regular
410        font color
411        justification: left, center, right, bottom, middle, top  (combinable options, e.g., "top left")
412        placement: default, above, below, inline, interior, exterior
413 
414   Line properties:
415        head style (point o-, arrow_to >-, arrow_from, <-, square #-)
416        tail style (point o-, arrow_to >-, arrow_from, <-, square #-)
417        line weight (thickness)                    .___.                     target        .---- text
418        2d points:               text  ._____.     |    \                    .     .      /
419                                              \    |     .---> target        |     |     /
420                                               .___.                      -->|     |<---.
421   Symbol type:
422        degree:   (superscript circle)
423        radius:   ('R', e.g., 'R10.5')
424        diameter: (circle with slash, null symbol)
425        ... several others
426        http://www.tec-ease.com/gdt-terms.php
427 
428   Annotation properties:
429        scale: fixed size or proportional to view
430        alignment: to datum (plane or axis) or to view
431        draw bounding plane
432        draw target axes at uv offset position
433        draw feature control frame  (characteristic tolerances in symbolic form: www.draftingzone.com/shoppingzone/6-1.pdf)
434        3d thickness
435 
436 * rt/rtedge command-line options for overriding object colors
437 
438 * rtwizard enhancement to allow color overrides to be specified for
439   selected objects.
440 
441 * upgrade source repository back-end to the latest SVN 1.5 so we can
442   benefit from proper merge tracking.
443 
444 * implement support for the other file entity types to libbu
445 
446 * implement http network transfer tool for crash reports and benchmark
447   analyses (via libfetch)
448 
449 * reimplement benchmark suite in C/C++
450 
451 * include defaults about the compiler in the benchmark suite output
452   including the compiler name and version at a minimum, plus hopefully
453   describing the CFLAGS that were used too.  ideally would include all
454   of the versioning details (such as described from "gcc -v" if we
455   compiled with gcc) too.
456 
457 * implement oed+tra/sca/rot functionality consistently in libged as
458   translate/scale/rotate with a signature similar to:
459 
460   {translate|rotate|scale} [--keypoint {bb_corner|bb_center}:{object_name} | {3d position}] [--relative xdist [ydist [zdist]] | --absolute xpos [ypos [zpos]]] object_name(s)
461 
462   where 'oed' is basically converted into the --keypoint option and
463   object(s) to work on.
464 
465 * make bu_basename/bu_dirname not allocation memory.  have caller pass
466   buffer in as a parameter with size ala snprintf/memcpy.
467 
468 * solids regression is failing in optimized builds  - 3 off by many.
469   Looks to be floating fuzz overlap/pick issue? pixel 131329.
470 
471 * restore libged axis/grid commands code made in r44153 but with
472   libged decoupled from libdm/libfb.
473 
474 * migrate / update screengrab command in libged (libfb/libdm dep)
475 
476 * add code regression that makes sure none of our code cheats by
477   including bu/bu.h -- e.g., make sure BU_CPPFLAGS et al. are used so
478   new dependencies are obvious and intentional.
479 
480 * offset surfaces.  provide feature edit operation to create a solid
481   "level set" style object so you can represent degraded geometry
482   states (e.g., damage around a hole in a plate of metal might be
483   represented by the toroidal intersection with a cylinder some radius
484   larger than the hole, providing a separate region that can have
485   different material properties).
486 
487   geometrically, this is simply a means to separate a given object
488   into multiple objects without changing the cumulative volume.  a
489   linear offset from a given surface or set of surfaces is usually
490   desired.
491 
492 * provide libdm mechanism for drawing spline curves (to help visualize
493   flight paths, show object trajectories, etc.).
494 
495 * provide option for displaying object bounding boxes while rotating.
496   visualization feature to help with rotation operations, showing
497   global object alignment with respect to its own coordinate space.
498 
499 * make mged not have a garbled display manager window if the
500   framebuffer is enabled and the window is resized.  initialize and
501   refresh the new memory and zap the framebuffer.
502 
503 * merge sed and oed commands
504 
505 * make the right-hand path to oed optional
506 
507 * deprecate dbcp and merge functionality (and improved
508   double-buffering) with the buffer tool.
509 
510 * rename all the g_* tools sans "_" [save until 7.22]
511 
512 * vls name wrapping (reversible argv-to-vls, vls-to-argv).  look at
513   src/libged/glob.c code, very similar.
514 
515 * refactor rt_mirror (src/librt/primitives/mirror.c) into the functab
516 
517 * refactor rt_functab accessors to go through an api call or calls so
518   that the array is not accessed directly.  either an rt_eval() style
519   interface with data-driven keys to tell it with function(s) to call,
520   or simply have an rt_*() for each function (e.g., rt_mirror(),
521   rt_shot(), rt_describe(), etc.).
522 
523 * release dm X get_color() memory
524 
525 * update g-xxx_facets to use libgcv
526 
527 * add distribution test for making sure the source code conventions
528   for function replacements are being respected (e.g., bu_strcmp()
529   instead of strcmp()).
530 
531 * add support for user-specified sorting for the attr command (case,
532   case-insensitive, creation, value, etc.)
533 
534 * investigate why solids.sh fails on three pixels on some 64-bit
535   platforms. it grazingly hits/misses a tgc causing a regression
536   failure.
537 
538   havoc.g s.nos5g reliably exhibits the grazing edge bug where only
539   one hit point is being returned.  to reproduce:
540   e s.nos5g ; ae 35 25 ; units mm ; center 26912.4 7089.08 7168.96 ; nirt
541 
542 * make sure 'preview' works, particularly the 'tree' subcommand.
543 
544 * make nreed's new bot cleanup interface update interactively without
545   resorting to calls to Tcl_DoOneEvent() down in librt.
546 
547 * make sure mged/archer behave properly with relative paths to dbopen.
548   Windows in particular is doing something different in
549   src/librt/db_open.c that should be a problem as it only records the
550   file name (so gui will work, but dbopen + cd + rt will not).
551 
552 * convert all calls to BU_SETJUMP/BU_UNSETJUMP into familiar try/catch
553   logic layout using if/else.
554 
555 * bu_cv_optimize() should be using bu_byteorder().
556 
557 * render annotated images to the OpenDocument format.  this is
558   particularly useful for rtedge-style renderings with object
559   annotations where we can leverage layout components and scalable
560   vector graphics.
561 
562 * Cache objects.  These are proper non-geometric geometry database
563   objects intended to store binary results that have a dependency on
564   other object(s).  A named hash (e.g. md5) is recorded for each
565   dependent object along with the computed results.
566 
567   Three potential candidates for leveraging cache objects are 1) prep
568   objects containing the final prepped state of a given object
569   hierarchy (particularly useful for BoT and BREP geometry), 2)
570   raytrace objects containing the intersection results for a given
571   view (i.e., a grid of primary rays), and 3) rtgl point samples
572   (which is a variant of 2 but potentially view independent).
573 
574 * investigate OpenEXR (BSD licensed HDE image format)
575 
576 * fix archer/libdm labels/axes to not use pointer printing
577 
578 * add support for a custom unit conversion factor to the units command
579   (e.g. 'units 9.3120223' or 'units metertons 9.3120223')
580 
581 * usage statistics.  similar to the eclipse Usage Data Collector, keep
582   track of which BRL-CAD command-line commands and MGED/libged
583   commands are run.  Give the user the option of uploading those
584   statistics (now, always, later, off).  Provide terms of use
585   explaining the ways that their data will be used and shared.
586   aggregate, this can help us focus development resources towards
587   improving workflows, documentation, robustness, and new development
588   areas.
589 
590 * update the msvc build to not use installTree.tcl -- the build
591   shouldn't really be reliant upon tclsh or be all contained within
592   the tclsh project.  sub-projects should build and install by
593   themselves (e.g. tkhtml3 should generate its htmltokens.h file).
594   the "brlcad" project, if any, can build up the installation tree and
595   generate the final installation exe.
596 
597 * implement namespacing for attributes as a means to group attributes
598   together.  this can predominantly be a naming convention, but
599   requires awareness in the attribute-searching routines to search
600   without the namespace unless one is specified, and to reserve :: in
601   attribute names unless they're quoted.
602 
603 * clean up default attributes to be consistent and upgrade old
604   attributes to their new names.  includes likes of region, region_id,
605   material_id, air, los, rgb, oshader, and inherit.  see
606   doc/docbook/system/man5/en/attributes.xml for more detailed listing.
607 
608 * automatic anti-aliasing as a second render pass on the edges
609   encountered (possibly using bilinear filtering scheme, improve upon
610   rtedge's current simple filter)
611 
612 * implement rt_volume() API for computing geometry volume (g_qa style
613   for complex, direct for primitives)
614 
615 * improve compile-time version management -- port brlcad-version to
616   windows, reconsider providing compile-time header constants.
617 
618 * have gqa calculate the volume of overlapping regions, not just
619   shotline overlap distances.  that will allow output to be sorted by
620   volumetrically significant regions and should eliminate a common
621   source of user misunderstanding.  It should eliminate the perception
622   that large overlaps are suddenly appearing when there are changes in
623   grid alignment/density.
624 
625 * fix gqa spewing of massive amounts of plot data with th -Av -v
626   options:
627   ../src/gtools/g_qa -u m,m^3,kg -g 0.25m-0.5mm -p -Av -v gqa.g closed_box.r
628   -rw-rw-r--  1 morrison users 41572569618 Apr 23 15:14 volume.pl
629 
630 * make gqa overlap reporting suck less.  uselessly reports the same
631   objects multiple times instead of keeping track of uniquely
632   overlapping pairs of objects (rtcheck used to have this problem but
633   not now).  also reports overlaps even when not requested (e.g. -Aa)
634 
635 * gqa semaphore locking on results is very slow and gets worse as the
636   number of cores and speed of cpu increases.  resource contention on
637   semaphores slows everything down substantially.
638 
639 * g_qa (gqa in mged) needs to be more informative when it runs -
640   needs a header letting you know what it's doing, and if possible
641   a "progress report" for longer runs that provides some notion of
642   how much of the total job is done.
643 
644 * refactor .density file and density database reading code in files
645   src/rt/viewweight.c, src/libged/analyze.c and src/libged/gqa.c into
646   common code in src/libanalyze (there may be more candidates around
647   the tree)
648 
649 * all of the rt* tracers share common code and common options, but do
650   not share common documentation.  refactor documentation to use
651   include directives so that there is one place where all of the
652   common options are documented.  update usage statements to reflect
653   commonality as well.
654 
655 * document the saveview/loadview options.  migrate them to libged if
656   they're not already.
657 
658 * make loadview still load the view if the database doesn't match the
659   currently open database, only load geometry as an option (and then
660   just ignore the db).
661 
662 * improve rtedge documentation, explain how it computes its "centroid"
663   (as it's not exactly the center of bounding box of all objects -- it
664   depends on the booleans).
665 
666 * add a force option to the tracers to support overwriting the current
667   output file (so long as we're going to make it read-only by default).
668 
669 * convert non-planar arb's to brep objects for ray-tracing.  see how
670   well it works to see if we can remove an arb limitation.
671 
672 * the 'l' and 'analyze' commands now require an object be specified
673   and won't use the currently highlighted solid.  undoubtedly related
674   to libged refactoring.  this is related to sf request 2954409.
675 
676 * alias objects.  this is an object handle in a geometry database that
677   refers to another geometry database object.  in effect, it
678   encapsulates the idea of a symbolic reference for database objects.
679 
680   alias objects should be very lightweight, corresponding to basically
681   a simple named reference to another object.  this allows for
682   geometry objects to have multiple names, all referencing a given
683   primary name.  whenever an alias is referenced, it returns the
684   object pointed to instead of the alias object itself (this includes
685   the rt_db_internal()).  this prevents the creation of cyclic
686   references.
687 
688   this directly supports geometry importers that contain object name
689   mappings (e.g., part numbers to engineering names) as well as
690   simply supporting multiple names per object that one might want to
691   persist.  there is an issue of whether aliases show as top-level
692   objects or even display by default without a listing option.
693 
694 * a "batch" command for libged to apply a given command template to
695   all lines in a given input text file.  could be very similar to exec
696   but instead of inspecting the current .g, it walks lines in file(s).
697   this would let you do things like:
698 
699   # same as mvall -f file.txt
700   batch file.txt -exec "mvall \$*"
701 
702   # create an alternate hierarchy based on some mapping file
703   batch file.txt -exec "g \$*"
704 
705   # for all lines in 3 files, kill first symbol, rename second to it
706   batch A.txt B.txt C.txt -exec "kill \$1" -exec "mv \$2 \$1"
707 
708   # keep all objects in an edcodes file with region ID > 1000
709   batch A.txt -field 2 -ne 1000 -exec "keep subset.g \$5"
710 
711   # for all regions, if they are listed in file.txt, add them to a
712   # parent assembly and set a specified material ID
713   search . -name "*.r" -exec batch file.txt -field 1 -eq {} -exec "g \$1 {}" -exec "mater {} \$3" \;
714 
715   # run awk, get 4th column, run sed to change name,
716   batch file.txt -awk '{print $4}' -sed 's/^r\.(.*)/\1\.r/g' -exec "mv \$1 \$$"
717 
718   # outside of MGED, the above would have been similar to:
719   cat file.txt | awk '{print $4}' | sed 's/^r\.(.*)/r\.\1 \1\.r/g' | xargs mged test.g mv
720 
721   The command becomes more of a stream processor on the input file, as
722   if piped on the shell line.  To embed awk, sed, cut, see qse:
723           http://code.google.com/p/qse/
724 
725   The search and batch commands probably can't nor shouldn't use the
726   same replacement markers, with batch using $*, $1, $2, etc., to
727   represent file columns (in a poor man's awk fashion) and search
728   simply using "{}" as the object name replacement marker.
729 
730 * fix !!! in src/libged/tables.c where a temporary file is getting
731   used.  needs to call bu_temp_file().
732 
733 * make the 'tree' command accept a full path, not just a combination
734 
735 * clean up new rt -l8 heat graph lighting model so that it works in
736   parallel and with no "splotches"
737 
738 * make rt_prep_timer() take or return a context that gets subsequently
739   passed to rt_get_timer() calls for returning the elapsed time.  this
740   will allow multiple overlapping timers instead of just one global
741   timers.  move the timing facilities to libbu as part of the process
742   so API can be obsoleted cleanly.
743 
744 * separation of stderr from stdout within libbu, particularly for
745   MGED, so that there is a clean separation of result output from
746   diagnostic output.  this is a fairly separate idea from having log
747   levels (ala syslog) but is somewhat related to the concept of having
748   definable output streams.  idea in mind is to have a bu facility to
749   obtain a bu_log()-style callback function returned from a
750   logger registration function.
751 
752 * deprecate dbfind - ensure functionality is fully captured by the
753   search command, make it report a deprecation statement on use and
754   utilize search under the hood.
755 
756 * investigate impact of using lookup tables for root solving.
757   implement lookup tables for a range of linear, quadratic, cubic, and
758   quartic polynomial coefficients.  compare performance to root
759   solving without lookups.  evaluate memory use.  non-imaginary roots
760   are relatively sparse, may need to consider linked lists, hash
761   tables, or some hybrid storage arrangement.  Idea inspired by:
762   http://math.ucr.edu/home/baez/roots/
763 
764 * make the 'tables' ged command not call system() on the "sort" unix
765   command.  It should perform all sorting on the data directly in
766   memory, at least without creating another process.
767 
768 * libbn's tri_specific structure requires user-provided memory for
769   normals.. this certainly saves memory if the triangles don't have
770   normals but at a rather expensive malloc cost (which is being seen
771   on large BoT models) during prep.
772 
773 * make fbclear and raytrace control panel obey a -F advanced option,
774   i.e., better remote framebuffer support.
775 
776 * MINOR: add tolerance parameters to the bn_*() functions that have
777   near-zero tests.
778 
779 * complete conversion of existing manual pages into docbook format
780 
781   note that Eric Raymond's "manlifter" (a driver for his "doclifter")
782   can be used to aid the project (see
783   http://www.catb.org/~esr/doclifter/)
784 
785 * add an option to bot_dump for outputting surface normals.  Make sure
786   all supported dump formats (obj, dxf, etc.) optionally write out
787   normals.  Consider adding an option to smoothly interpolate normals
788   (per face or vertex).
789 
790 * modify g_qa to search for >1 region flag in a tree path.
791 
792 * the binary windows installer is missing headers for our external
793   dependencies (Tcl, zlib, and OpenNURBS in particular as the likes of
794   bu.h and raytrace.h requires them)
795 
796 * make rtarea display a cross-hair and perhaps coordinates for the
797   center of area if run from within mged.
798 
799 * implement a "select" command in LIBGED that creates a selection set
800   based on specified sampling parameters or object lists.  example
801   could be "select -point 12.3 23.1 31.2 -dist 100.0" to
802   select objects within a given distance of a point; "select foo bar"
803   to select specific objects and create/return a temporary reference
804   name. this provides a command-line mechanism for implementing band
805   selection in the GUI, area-based selections, and object highlighting
806         - can replace unpublished 'sphgroup' command with this
807 
808 * refactor the libtclcad go_*() functions and invocation wrappers
809   (also in mged) into libged where appropriate. the 'png' command
810   comes to mind.
811 
812 * refactor and manage libbn tolerance uses by providing an interface
813   default (e.g., an init macro) and making everyone use that where it
814   is hardcoded to 0.0005 presently (and a few places where it's
815   inconsistently/incorrectly 0.005).
816 
817 * add a default phong 'metal' shader.  annoying to keep making plastic
818   more reflective or mirror less reflective when it's such a common
819   material appearance to want.
820 
821 * implement a new tool/command that reports summary information about
822   a geometry file including number of objects, types of objects,
823   classes of geometry representation types used, and potentially more.
824 
825 * consider adding an option to reid/remat and edcodes (and others?) to
826   ignore negative regions (regions subtracted from regions or
827   intersected with them) since, while bad practice, are valid
828   geometrically.
829 
830 * implement some sort of archive/backup command in mged in order to
831   save the currently open database out to a file.
832 
833 * make sure there are no getenv() non-NULL assumptions within the
834   code.  might want to see if there's a pattern of variables being
835   checked such that a libbu interface would be warranted (e.g.,
836   instead of checking HOME, having a bu_find_directory(BU_USER_HOME)
837   routine or similar facility) for finding common resource locations.
838 
839 * make db_open modes behave the same as the fopen() modes (i.e.,
840   create the .g if one doesn't exist when write mode)
841 
842 * fix the shaders.sh regression test case, failing dues to changes
843   with mged's view initialization.
844 
845 * inside support for ARS
846 
847 * add support to 'rtxray' for outputting inverted pixel values so that
848   we have pixel values that are directly related to material thickness
849 
850 * make color and vectors on pnts work
851 
852 * mged inconsistently ignores signals.  initially allowing mged to be
853   backgrounded, but then later ignores them.  needs to consistently
854   ignore or not ignore them, ideally the latter.
855 
856 * libfb needs to have the fb_open/close_existing functions refactored
857   into the function table and have the #ifdef sections removed.
858 
859 * integrate library tester into regression suite that validates
860   exported library symbols published in headers.  make sure they at
861   least exist and maybe even try to ensure they will run with null
862   arguments without crashing.
863 
864 * 3D plot objects for v5 geometry files.  very closely related to
865   other ideas about having 3d wireframe objects, but these would
866   probably be non-geometric in nature.  basically the plot3 files that
867   are stored out to disk being stored as objects in the database with
868   support for the overlay command to import, export, display them.
869 
870   minimally should probably support the basic drafting elements
871   (predominantly from collada, dxf, iges, and step specifications):
872 
873         point := x, y, z
874         line := start point, end point
875         polyline := various (closed, open, paired, modified, etc.)
876         circle := center point, radius
877         ellipse := center point, major radius, minor radius
878         hyperbola := center point, major radius, minor radius
879         parabola := center point, focal length
880         arc := center point, radius, start angle, end angle
881         spline := degree, control points, knot values
882         text := string, insertion point, size, style, alignment
883 
884 * make _plot() callbacks fill in plot objects instead of returning
885   line segments.
886 
887 * image objects (tbd objects) for v5 geometry files
888 
889 * material objects (non-geometric attribute-only objects) for v5
890   geometry files.  instead of material attribute value becomes
891   material object name.  material object encompasses hierarchical
892   material traits.  some traits potentially of interest:
893     - density
894     - young modulus
895     - yield strength (in different dirs, e.g., rolling & transversal)
896     - ultimate tensile strength (also in different dirs)
897     - Poisson's ratio
898     - cost per ton?
899     - ...
900 
901 * parametric material properties.  support the ability to define
902   material properties based on parametric values such as distance from
903   surface, distance from medial axis, distance from centroid, distance
904   from plane, etc.  this supports parametric descriptions of materials
905   that have highly variable densities (e.g., bone, certain alloys and
906   plastics, etc.).
907 
908 * shader objects (non-geometric attribute-only objects) for v5
909   geometry files.  allow shader string to refer to said objects for
910   shader parameters.
911 
912 * refactor wdb_obj and view_obj in libged.  with the de-tcl'ing of the
913   base libs, it should disappear but shouldn't have wdb_*() funcs in
914   libged regardless.  work in progress.
915 
916 * make our C headers C++-convenient with proper extern "C" wrapping.
917 
918 * reorganize the header files in include so it is clear which headers
919   pertain to which libraries.
920 
921 * break up library headers into subheaders so includes can be more
922   specific (and help speed up compilation) and locally documented.
923 
924 * implement a jitter-style option to rt that makes it average the ray
925   results to take a weighted light contribution for a given
926   resolution.  saves more memory over rendering at 2x/4x/8x/whatever
927   with or without jitter and then scaling down.  present jitter option
928   doesn't average.
929 
930 * refactor mged/bwish/g_diff initialization to all use the same routine
931 
932 * deprecate either orot or rotobj
933 
934 * refactor mged's signal handling to make it possible to safely
935   interrupt long-running commands
936 
937 * add a -color option to all mged commands that draw geometry (B, eid,
938   and E come to mind)
939 
940 * have mged record a timestamped command history by default
941 
942 * implement -exec support for 'search' command
943 
944 * implement -param support for 'search' command
945 
946 * make ged command names aware of object arguments for automatic
947   globbing and regular expression expansion:
948         attr set t 1 [regex .*\.r]
949         attr set t 1 [glob *.r]
950         attr set t 1 *.r
951 
952 * mged crashes on Mac if using system Tcl/Tk with our incrTcl.
953   crashes with the following stack (same whether dm-X or dm-ogl):
954         XQueryExtension
955         ...
956         glxGetConfig
957         ogl_choose_visual (dm-ogl.c:1359)
958         ogl_open (dm-ogl.c:401)
959         dm_open (dm-generic:82)
960 
961 * review adding support for infix and postfix CSG operators for
962   libged/mged.  be sure to revive or at least check out the previous
963   effort in src/mged/comb_bool_parse.y that already has support that
964   recognizes the classical infix notation.
965 
966 * readd support for vrml v1 to g-vrml so that users can select whether
967   they want v2 (default) or previous v1 output format via a
968   command-line switch.  see http://brlcad.svn.sf.net/viewvc/brlcad/brlcad/trunk/conv/g-vrml.c?view=diff&pathrev=22798&r1=16900&r2=16901
969 
970 * make Mac OS X universal binaries actually work.
971 
972 * fully implement analyze for all primitives
973 
974 * implement general analyze estimate (perhaps just raytrace it) for
975   primitives where values like surface area are very difficult to
976   calculate.
977 
978 * move analyze logic into librt (with their respective primitives).
979 
980 * fix analyze output formatting, columns are pooched.
981     (for arbs, it should be fixed as of revision 48900)
982 
983 * extend analyze output formatting to user-specified formats ala nirt
984 
985 * prevent nirt from outputting a trailing space after values when
986   there are no attributes to be displayed.  the problem is in the nirt
987   format strings where they use " %s" for displaying any attributes.
988   need to left-pad a space conditionally, perhaps by supporting %*s
989   and sizeof(var).
990 
991 * implement make, ted, edsol, mirror, and analyze for revolve
992   primitive.  implement tess() too.
993 
994 * fix/change naming convention for presented/exposed area
995 
996 * re-enable RISE client in ADRT
997 
998 * test homovulgaris' root solver patch that puts coefficients in the
999   right order
1000 
1001 * review librt polynomial root solver (cubic and quadratic case)
1002 
1003 * give bot-bldxf the axe (reconcile and merge with bot_dump)
1004 
1005 * implement mged object name globbing similar to tclsh's globbing
1006   (i.e. via a globbing command and quoting globs that use []).  testing
1007   shows db_glob doesn't seem to behave correctly, at least not like
1008   glob.  hook globbing into all commands so glob_compat_mode
1009   statefulness can go away.  a db_glob expression that doesn't match
1010   anything should not return the expression.
1011 
1012 * come up with a new tool that automatically generates "inside"
1013   regions for a given model as a way to automatically model air.
1014   particularly useful for bot models where the inside air compartment
1015   is predominantly (but not entirely) a complex bot structure in
1016   itself.  idea is to use some sort of marching cubes/tets to find
1017   those volumes, perhaps use a libified g_qa.
1018 
1019 * extend metaball control info beyond simple points (e.g., line
1020   segments)
1021 
1022 * address the TODO items in src/mged/clone.c
1023 
1024 * develop a low-level tool for investigating, reporting statistics on,
1025   and repairing geometry database files.  the tool should nominally
1026   perform big/little endian conversions, report number and types of
1027   objects, allow deletion/undeletion/hiding/unhiding, provide some
1028   general means to manipulate the packed and unpacked .g file data for
1029   performing low-level modifications
1030 
1031 * fix rt parallel crash
1032   (true ; while [ $? -eq 0 ] ; do rt -o /dev/null moss.g all.g ; done)
1033 
1034 * fix parallel crash report generation (multiple BU_MAPPED_FILE's
1035   getting acquired)
1036 
1037 * make only closing BOTH the command window and graphics window shut
1038   down mged (i.e., fix unintentional behavior), not either alone.
1039 
1040 * add keybinding to restore a command window if only the graphics
1041   window remains.
1042 
1043 * remove hit_normal and hit_point from struct hit.  add RT_HIT_POINT
1044   macro.  refactor all callers as needed.
1045 
1046 * make bombardier actually send the report somewhere
1047 
1048 * hook bombardier in for crash reporting
1049 
1050 * windows smp support
1051 
1052 * modify the new tree traversal code to be generic
1053 
1054 * add high dynamic range image support to the framebuffers
1055 
1056 * add alpha channel support to the framebuffers
1057 
1058 * remote framebuffer timeout support (perhaps as ::key=val;key=val)
1059 
1060 * develop a tool that applies a text overlay to a given rendered image
1061   (e.g., as an rt option) for things like adding an image title, the
1062   az/el, and objects displayed.
1063 
1064 * bezier extrusions need to be optimized, really should not be
1065   performing dynamic memory allocation in the root solver
1066 
1067 * better/consistent argument processing supporting both long and short
1068   option names, perhaps using argtable
1069 
1070 * decouple libdm from librt -- just one file in libdm uses librt,
1071   including a whole nasty primitive switch statement.  need to push
1072   that back over into librt.
1073 
1074 * Implement an optical shader for the new "pixelated" military
1075   camouflage style
1076 
1077 * preserve an arb8 as an arb8 (instead of writing as arb6 or arb5) and
1078   similarly for the other arb# sizes
1079 
1080 * implement a region anointment command where the user can turn an
1081   assembly into a region and change all lower or higher regions into
1082   combinations
1083 
1084 * enhance dxf-g to create more than just one combination per layer,
1085   creating multiple objects for the individual objects in the dxf file
1086   (instead of one conglomerate BoT)
1087 
1088 * add an overlap depth reporting tolerance parameter to the
1089   ray-tracers (similar to -R).
1090 
1091 * Generate plain .zip files for Windows binary releases
1092 
1093 * fix the variety of ami.tcl and ampi.tcl tclscript warnings/errors
1094 
1095 * run indent.sh on directories (one at a time, validating results)
1096 
1097 * add support for arbitrary matrix transformations to torus primitive.
1098   store non-uniform scaling matrices as an attribute for
1099   backwards-compatible support until v6.
1100 
1101 * configure support to enable/disable framebuffers, display
1102   managers, geometry converters, and image converters.  consider
1103   apache's module management as an example.
1104 
1105 * review and merge in the rest of the GSI modifications
1106 
1107 * make target and/or script to update ChangeLog and version
1108   information, possibly including checking for consistency, to
1109   facilitate release process.
1110 
1111 * display the current mode in mged graphics window
1112 
1113 * Optional compile-time support for using GMP or CLN for arbitrary
1114   exact precision arithmetic computation support
1115 
1116 * inside/outside point and voxel testing capability in librt
1117 
1118 * automatic geometry voxelizer (perhaps using arbs or vol primitive)
1119 
1120 * turn geometry converters and image converters into libraries
1121   (started as libraries libgcv and libicv)
1122 
1123 * add support for querying geometry properties to library including
1124   computing surface area and weight/mass.
1125 
1126 * add verification and validation tests confirming behavior of the
1127   ray-tracer and computations of area, mass, volume, etc.
1128 
1129 * testing suite for all binaries:
1130 
1131      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
1132 
1133 * add geometry example of building 238
1134 
1135 * Mac OS X SGI dial knobs support
1136 
1137 * ability to "unpush" objects, translating them to a new position and
1138   applying the correct matrix (using either bounding box or center of
1139   mass, for example).  would be useful to optionally allow the
1140   creation of a parent combination that contains the unpushed matrix
1141   so you could return primitives to local coordinates.  See sf feature
1142   request 2826720 from cericole.
1143 
1144 * ensure successful build on mingw
1145 
1146 * test for USE_FORKED_THREADS in configure
1147 
1148 * optimize CSG structures automatically: automatic simplification,
1149   tree contraction, null object detection.
1150 
1151 * option to mged make command or new command that enters solid edit
1152   mode, "med", "smake", "makes", "msed", etc.  same for cp command.
1153 
1154 * have libbu report memory allocation statistics so the exact amount
1155   of memory requirements for a geometry database can be computed on
1156   the fly via a pre-prep phase.
1157 
1158 * libfb + font rendering (perhaps through libbn's plot interface) for
1159   a posix terminal.
1160 
1161 * OpenCL for enhanced performance boolweave sorting
1162 
1163 * getexecname, "/proc/self/cmdline", program_invocation_short_name.
1164   separate out into new file.
1165 
1166 * geometry viewing commands/visualizations of exploded levels
1167 
1168 * librt-based path tracer
1169 
1170 * system identifier application with sysctl-style information
1171   database, with some back-end functionality placed into libbu.
1172 
1173 * add callback data parameters to libpkg hook functions
1174 
1175 * add performance options for the intel compiler on Altix
1176 
1177 * investigate performance impact of using sched_setaffinity and/or
1178   pthread_attr_setaffinity_np for linux threading affinity in librt.
1179 
1180 * rtedge-style tracer that outputs tool paths (splines/segments, etc.)
1181   for CNC/CAM style toolpath cutting descriptions (g-code files).
1182 
1183 * rtedge shoots twice as many rays as it needs to (shoots the 'below'
1184   ray for each primary, only reusing current scanline cells).
1185 
1186 * support for fillets and chamfers as object/combination operations
1187 
1188 * make the DSP primitive use less memory when data is coming from
1189   a binunif. allocating 160 times binunif size is a bit extravagant
1190   (which comes from sizeof(struct dsp_bb)).
1191 
1192 * add dynamic geometry support. i.e. the ability to modify the parsed
1193   in-memory geometry tree on the fly via api calls (e.g. to add holes)
1194 
1195 * investigate why g-iges followed by iges-g on a single box results in
1196   permuted vertex lists
1197 
1198 * add support for filesystem-based geometry collections
1199 
1200 * add missing manual pages (jra generated list on 04.2007):
1201 
1202     a-d
1203     archer
1204     asc2g
1205     asc2pix
1206     bot-bldxf
1207     bottest
1208     brep_cube
1209     brep_simple
1210     brickwall
1211     btclsh
1212     burst
1213     bw-a
1214     bw-d
1215     bwish
1216     c-d
1217     chan_add
1218     clutter
1219     contours
1220     d-a
1221     damdf
1222     dauto
1223     dauto2
1224     d-bw
1225     dconv
1226     ddisp
1227     d-f
1228     dfft
1229     d-i
1230     dmod
1231     double-asc
1232     dpeak
1233     dsel
1234     dsp_add
1235     dstat
1236     d-u
1237     dwin
1238     euclid_format
1239     euclid_unformat
1240     fbgammamod
1241     f-d
1242     fence
1243     fhor
1244     f-i
1245     g-adrt
1246     g-euclid1
1247     g-jack
1248     globe
1249     g-off
1250     i-a
1251     i-d
1252     i-f
1253     ihist
1254     imod
1255     istat
1256     jack-g
1257     kurt
1258     lowp
1259     molecule
1260     nmgmodel
1261     nmg-sgp
1262     off-g
1263     pipe
1264     pipetest
1265     pix2g
1266     pix3filter
1267     pixcount
1268     pixelswap
1269     pixembed
1270     pixfields
1271     pixfieldsep
1272     pixflip-fb
1273     pixpaste
1274     pix-spm
1275     pix-yuv
1276     plstat
1277     pyramid
1278     rawbot
1279     remapid
1280     rlesortmap
1281     rletovcr
1282     room
1283     rtcell
1284     rtexample
1285     rtfrac
1286     rtrad
1287     rtsil
1288     rtsrv
1289     script-tab
1290     sketch
1291     solshoot
1292     sphflake
1293     spltest
1294     spm-fb
1295     ssampview
1296     syn
1297     tea
1298     tea_nmg
1299     testfree
1300     texturescale
1301     torii
1302     ttcp
1303     tube
1304     txyz-pl
1305     u-a
1306     u-bw
1307     u-d
1308     u-f
1309     umod
1310     ustat
1311     vcrtorle
1312     vegitation
1313     wall
1314     wdb_example
1315     xbmtorle
1316     xyz-pl
1317     yuv-pix
1318 
1319 * design plugin system to allow domain specific tools (say, for example,
1320   a tool to create propeller parts) to identify themselves and their
1321   features to BRL-CAD, and to allow BRL-CAD to incorporate those features
1322   as an integrated part of interaction environments.
1323 
1324 * see if it is possible to use tec/ehy primitives to create a proc-db
1325   for airfoil/wing shapes.  Interesting possibilities with boolean combinations
1326   of these primitives, provided their continuity at the ends ensures
1327   continuity all along "seams" - something to consider.
1328 
1329 * incorporate some variety of spatial partitioning into the facetize command
1330   (may involve just rewriting it) to try and realize MUCH faster tessellation
1331   of CSG geometry.  Current routines are doing a lot of unnecessary work that
1332   tends to result in explosive completion times for worst-case scenarios -
1333   try to get closer to the "only do the work we need to" ideal.  Once a new
1334   idea is proven in that command, it should be made into a libgcv routine
1335   and convertors/other commands retargeted to use it.
1336 
1337 * write up some documentation on other build tools besides make -
1338   CMake supports other generators, wouldn't hurt to detail how to
1339   trigger builds in them (MSVC is partially covered, make sure to
1340   coverage is complete - others include Eclipse, XCode once we get
1341   the kinks ironed out there, CodeBlocks.  New experimental ninja
1342   build tool and its (also experimental) CMake support are promising -
1343   if/when CMake support goes mainstream, document that too.)
1344 
1345 * look into embedding both rgb[3] and complex[n] data types in a union to
1346   allow unification of libmultispectral and liboptical APIs to a single
1347   more general liboptical.  Need to be careful about performance and
1348   maintainability concerns.
1349 
1350 * we need to define a libbu api for option handling that supports more
1351   features than getopt:
1352 
1353   - need support for long options (e.g. --help and --color, not just -h
1354     and -C)
1355 
1356   - need a way to consolidate documentation for options into one place
1357     (DRY) that supports all of our various documentation styles.  Discussed
1358     with Sean in the past - initial thoughts:
1359 
1360     + should be in C code - will be needed there, and easier to get it from
1361       there to other formats than vice versa.
1362 
1363     + should support printing out the options and documentation in formatted
1364       structures that allow our build system to build the command and have
1365       the command itself supply a generated snippit of text or markup that
1366       could be incorporated into the final document - e.g. the DocBook
1367       man page for a command would be set up to expect the <command>_options.xml
1368       file generated by <command> --print-options DocBook (or some other
1369       mechanism, that's just an idea) and the CMake build could first build and
1370       then run the command at compilation time to provide the absolute most
1371       current option listing and short descriptions for the other docs.
1372 
1373   - need to allow order dependent options (e.g. <command> inputfile outputfile)
1374     that become order independent if enough information is available, e.g. the
1375     above would work and <command> <opt1> -i inputfile <opt2> -o outputfile <opt3>
1376     would also work.
1377 
1378   - (maybe) incorporate some sort of sanity/bounds checking into the option
1379     definitions API - i.e. in the C definition of an option, there could
1380     be optional parameters to indicate the type and bounds of valid input
1381     to that option.  Won't always be possible, but may be a good feature
1382     to have if it can save lots of repetitive coding of bounds checking in
1383     programs.
1384 
1385   *might* be worth taking a look at http://rpm5.org/files/popt/ to see if
1386   they have any code we could snarf to make life easier, but regardless
1387   we need a libbu API on top of any other code - at such a core level,
1388   we can't introduce an external API.
1389 
1390 * add per-face analysis of primitives like tgc, arb to their respective
1391   analyze commands in libged
1392 
1393 * investigate the libngpcore and libngput libraries from the ngPlant
1394   project as a possible means of procedurally generating plant models
1395   in BRL-CAD (libraries are BSD licensed: http://ngplant.sourceforge.net)
1396 
1397 
1398 WINDOWS
1399 -------
1400 
1401 The following binaries are not yet available on Windows.  The reason
1402 is identified in parentheses.
1403 
1404 bombardier (possibly just a problem with the build logic)
1405 burst      (TERMLIB)
1406 enigma     (not ported)
1407 fbcolor    (TERMLIB)
1408 fbed       (TERMLIB)
1409 fbpoint    (TERMLIB)
1410 fbzoom     (TERMLIB)
1411 ir-X       (X11 specific)
1412 irdisp     (X11 specific)
1413 isst       (Togl widget on Windows, possibly other issues)
1414 lgt        (TERMLIB)
1415 pl-X       (X11 specific)
1416 pl-dm      (possibly X11 specific)
1417 pp-fb      (TERMLIB)
1418 remrt      (remrt dir commented out for WIN32 in src/CMakeLists.txt)
1419 rtsrv      (remrt dir commented out for WIN32 in src/CMakeLists.txt)
1420 rttherm    (rttherm dir commented out for WIN32 in src/CMakeLists.txt)
1421 scriptsort (lex)
1422 ssamp-bw   (rttherm dir commented out for WIN32 in src/CMakeLists.txt)
1423 ssampview  (rttherm dir commented out for WIN32 in src/CMakeLists.txt)
1424 ttcp       (not ported)
1425 
1426 The MGED points support doesn't appear as an executable, but it is
1427 missing on Windows due to needing lex.
1428 
1429 
1430 CONVERTERS
1431 ----------
1432 
1433 * implement 3dm-g support for ON_InstanceRef entities.  These are
1434   instances of existing geometry that have prescribed referencing edit
1435   behavior and can have their own matrices.  Basically, they're combs
1436   that should sometimes reference copies of geometry and sometimes not
1437   (there's a flag).  unveiled via sf bug report 3575774 where the
1438   geometry export from solidworks was predominantly references
1439   resulting in a load of geometry missing after import and objects in
1440   the wrong position.
1441 
1442 * make the converters export all top-level objects by default
1443 
1444 * implement support for exporting sketch objects via g-iges
1445 
1446 * validate primitives during export so that it is guaranteed that
1447   illegal primitives will not be written to file
1448 
1449 * add csv, xml, nff, bzw, pov, blend geometry import and export support
1450 
1451 * finish obj-g importer.  need to test more inputs and make sure all
1452   geometry is preserved on import in some form.  make sure new libobj
1453   parser works and is integrated with new front-end.
1454 
1455 * implement a g-step exporter (with NURBS, implicit CSG, and NMG/BoT options)
1456 
1457 * implement a g-dae (Collada) exporter and dae-g importer
1458   http://en.wikipedia.org/wiki/Collada
1459 
1460 * implement an x3d-g (Web3D, VRML successor) importer
1461   http://en.wikipedia.org/wiki/X3D
1462 
1463 * implement a g-nc (g-code) exporter.  ideally this converts geometry
1464   to NURBS format, trims surfaces, evaluates boolean expressions, and
1465   then generates tool paths on resulting surfaces and interior paths.
1466   http://en.wikipedia.org/wiki/G-code
1467 
1468 * implement a u3d-g importer
1469   http://en.wikipedia.org/wiki/Universal_3D
1470   http://libharu.org/wiki/Main_Page
1471 
1472 * implement a g-pdf exporter and/or open source 3D PDF library
1473   http://developer.techsoft3d.com/adobePDF/index.html
1474 
1475 * SVG renderer.  go straight from 3D model to a 2D vector image for a
1476   given view.  similar to the plot/postscript wireframe view saves,
1477   this would need to store projected contours (ala rtedge) and filled
1478   color regions.
1479 
1480 * implement a g-sat (Solidworks) exporter and sat-g importer
1481   http://local.wasp.uwa.edu.au/~pbourke/dataformats/sat/sat.pdf
1482 
1483 * implement a g-ply exporter
1484   http://en.wikipedia.org/wiki/PLY_(file_format)
1485 
1486 * implement a g-json exporter
1487   http://www.json.org/
1488 
1489 * implement a g-xml exporter
1490   http://en.wikipedia.org/wiki/XML
1491 
1492 * implement a ls-dyna "keyword" file format importer.  perhaps extract
1493   as nmg/bot boundary representation meshes.  lots of great vehicle
1494   datasets at http://www.ncac.gwu.edu/vml/models.html
1495 
1496 STEP
1497 ----
1498 
1499 * add hierarchy preservation support to step-g
1500 
1501 * document step-g
1502 
1503 * implement g-step exporter (see above)
1504 
1505 * see additional TODO items in file './src/other/step/README'
1506 
1507 BREP/NURBS
1508 ----------
1509 
1510 * create a BC_Brep class that inherits from ON_Brep so we can cleanly
1511   extend and implement functions that were intentionally removed from
1512   openNURBS.
1513 
1514 * implement tessellation support.
1515 
1516 * profile and optimize prep.  crazy slow.
1517 
1518 * tighten up the bounding boxes around nurbs geometry.  seems to be
1519   bounding the untrimmed surfaces instead of the trimmed edges
1520   resulting in boxes (hopefully) larger than they need to be.
1521 
1522 * update to openNURBS 5.0 (2011-02-02)
1523 
1524 * identify useful concepts implemented in the old NURBS code that are not
1525   present in openNURBS, and port that code to openNURBS data structures
1526   and routines.  This will eventually allow us to remove the old NURBS code.
1527 
1528 * document the new NURBS/BREP primitive, capabilities and limitations
1529 
1530 * implement boolean evaluation of nurbs surfaces
1531 
1532 * plate mode NURBS/BREP objects.  Similar, if not identical, to plate
1533   mode BoTs, 'brep' objects need the ability to have a thickness
1534   described so you could automatically handle non-solid NURBS and
1535   sheet-metal style geometry without requiring surface solidity.
1536 
1537 
1538 NMG/BoT
1539 -------
1540 
1541 * ensure robust and fast nmg->bot conversion
1542 
1543 * facetize creates BoTs crappily by only looking at first region,
1544   first shell, instead of the whole nmg model.
1545 
1546 * nmg_bot() and nmg_from_bot() only work with shells.  verify that all
1547   callers iterate over all shells or write a model version that does a
1548   complete conversion correctly.
1549 
1550 * refactor all of the nmg processing (back) into its own library so
1551   that external users can manage mesh geometry without needing to pull
1552   in everything else in librt.  consider moving other polygonal
1553   specific logic to libnmg, eventually moving all polygonal logic out
1554   of librt, libtie, etc., and into libnmg.
1555 
1556 * enhance the bot data structure to contain a generic pointer that
1557   could be used to point back to the NMG it was generated from.  This
1558   could allow ALL raytracing of polygonal models to use libtie/BoT
1559   raytracing routines, speeding up NMG raytracing and simplifying the
1560   raytracing code.
1561 
1562 * optimization of NMG ray tracing.  the hitmiss bookkeeping presently
1563   used has a malloc/free occurring per shot().  allocations need to
1564   occur during prep only.  the presently render more than an order of
1565   magnitude slower than tracing that nmg converted to an equivalent
1566   BoT due to malloc/free calls being made during shot(). Confirmable
1567   with a simple test case of a sphere converted to an nmg:
1568 
1569     make sph sph ; facetize -n sph.nmg sph
1570 
1571 * implement a routine/command to convert from a bot to an nmg
1572   (similar/related to the nmg-bot tool, but the reverse).
1573 
1574 * need a simplified means to programmatically create and edit BoT
1575   meshes via the command line without resorting to get/put.
1576 
1577 
1578 RTGL
1579 ____
1580 
1581 Need before enabling:
1582 
1583 Blasting havoc_tail when raytracing havoc doesn't result in a re-set
1584 of the raytracing - it just re-sizes the view to havoc_tail and continues
1585 with the original raytrace.  Track down why - should clear everything
1586 and start over.  (Appears on Linux, not on OSX).
1587 
1588 Need general robustness testing - ensure no crashes when switching
1589 display manager types multiple times in multiple locations.
1590 
1591 For cleanup:
1592 
1593 Move pattern raytracing logic into librt.
1594 
1595 Need a way to cache point data so we don't re-raytrace unchanged geometry
1596 over and over.
1597 
1598 Job server should be reworked into a general mechanism, instead of being
1599 rtgl specific.
1600 
1601 Provide a generic mechanism in MGED run loop to hook in features like
1602 point cloud rendering, instead of hard-coding it.
1603 
1604 
1605 LIBPC
1606 -----
1607 
1608 * BNF Parser for generation of constraint objects from expressions
1609 
1610 * Make better pc_pc_set, pc_param and pc_constraint structures
1611 instead of the current ugly ones.
1612 
1613 * Test constraint solution via Read->Generate->Solve->Update routine
1614 
1615 * Implement Non-deterministic solution techniques:  Backjumping,
1616 Backmarking
1617 
1618 * Implement Deterministic propagators: NC, AC1-7, PC1-5
1619 
1620 * Check STL structures in public API ; wrapping with bu_list
1621 
1622 * Boost constrained_value based functor integration for 'compiled'
1623 constraints
1624 
1625 * Implement Hypergraph representation system
1626 
1627 * Explore analytic and symbolic solution system
1628 
1629 
1630 ARCHER
1631 ------
1632 
1633 * need to write a manual page at least for basic usage
1634 
1635 * "archer -h" causes archer to halt with a Tk_Init error.  should
1636   display usage/help.
1637 
1638 * reports "ArcherCore::getTreeMembers: faulty tree - " on some .g
1639   files, valid ones
1640 
1641 * numerous warnings on exit on Mac OS X (10.6):
1642    <Error>: kCGErrorIllegalArgument: CGSGetSurfaceBounds
1643    <Error>: kCGErrorFailure: Set a breakpoint @ CGErrorBreakpoint() to \
1644      catch errors as they are logged.
1645    <Error>: kCGErrorIllegalArgument: CGSBindSurface: Invalid window 0x492c
1646    ...
1647 
1648 * diversion from mged philosophy, prompts whether to save file on exit
1649   (file not always in a saved state).  to prevent data loss on crash,
1650   data should at least always be written out to the main file, a
1651   secondary file, recorded as saved transactions, or some other
1652   mechanism.
1653 
1654 * numerous core commands missing that have not gone through
1655   deprecation (e, d, ...) -- suggest we first release with at least
1656   all current commands included (at least those documented in
1657   tutorials, quick ref card, html docs), but marked as deprecated
1658   then.
1659 
1660 * user should fully own ~/.archerrc and be able to specify settings
1661   and overrides there (current says do not edit)
1662 
1663 * user-manageable scripts and settings (similar to ~/.subversion)
1664 
1665 * some usability-related icon issues (only a few of the more egregious)
1666   - torus tree-view icon has major aliasing/truncation
1667   - framebuffer image buttons need replacement (nuclear, mode?)
1668   - halfspace icon needs darkening
1669   - no part icon (needs one otherwise misleading label)
1670 
1671 * Create menu should list primitive name, not our shorthand
1672 
1673 * major GUI components (tree-view, command window, and graphics
1674   window) should be dockable and have their layout/docking preference
1675   be saved across sessions (so they can restore and retain similar mged
1676   appearance if they so choose)
1677 
1678 * menu needs rework
1679 
1680 * mouse behavior changed, rotates around view origin instead of model
1681   origin.  should provide for mouse behavior settings so classic mged
1682   defaults are available.
1683 
1684 * double-clicking the tree view show-list to display/undisplay
1685 
1686 * About Archer is out-of-date, references brlcad.com, survice logo,
1687   wrong BRL-CAD logo image, says archer is trademarked,
1688   acknowledgements is out of date (should remove or just put AUTHORS
1689   file).
1690 
1691 
1692 CMAKE
1693 -----
1694 
1695 * remove all of the MSVC sections in the CMakeLists.txt files.
1696   perform proper library/function/flag tests where necessary.
1697 
1698 * write/update INSTALL with ALL cmake options documented (make sure
1699   there are equivalent cmake options for all configure options or
1700   document the ones not included (e.g., proe options))
1701 
1702   -- Have the majority of these auto-generated and included, need to
1703      review and see what's still missing.
1704 
1705 * ensure primary cmake option parity with summary option listing
1706 
1707   -- Um.  Not sure this is fully achieveable - we only want to
1708      summarize a subset of the src/other settings in the summary
1709      printout, was my (CY) understanding...
1710 
1711 * move cmake documentation files into place
1712 
1713   -- Have done so now that the deprecation warning is directing
1714      users to INSTALL, but will still need to look over old
1715      INSTALL docs when reviewing option documentation coverage.
1716 
1717 * investigate ignoring .hidden directories/files from dist packing so
1718   that internal build directories can be used instead of external ones
1719 
1720   -- is this needed?  what's not working with make package and
1721      make package_source?
1722 
1723 * ensure it's possible to set global CFLAGS/CPPFLAGS/LDFLAGS that are
1724   in addition to any/all that we automatically set
1725 
1726 * fix failure disabling IF_X when X11 headers are not found.
1727   include/fb.h still ends up entering the IF_X section and declaring a
1728   function that takes a Display and other X11 objects
1729 
1730 ODDITIES
1731 --------
1732 
1733 * the scale structure in bn_cmd_noise_slice (bn_tcl.c) was never
1734   initialized. it looks like somebody has planned to extend the
1735   function but never carried out
1736 
1737 
1738 THESE BREAK PROTOCOL OR ARE BACKWARDS-INCOMPATIBLE
1739 --------------------------------------------------
1740 
1741 * change convention of using 'u', '+', and '-' for unions,
1742   intersections, and subtractions respectively to symbols that
1743   unambiguously describe the underlying CSG operation.
1744 
1745   '+', 'x', and '-' are the dominant ASCII option or (better) using
1746   unicode logic symbols for U and upside-down U.
1747 
1748   Union/Disjunction: + ∨ v u (logical OR)
1749   Intersection/Conjunction: x ∧ ^ . & n (logical AND)
1750   Subtraction/Difference: - (logical AND NOT)
1751   Negation/Complement: ! ¬ (logical NOT)
1752 
1753 * remove the bspline primitive
1754 
1755 * remove the poly primitive
1756 
1757 * remove the hf primitive
1758 
1759 * support for features either as primitives or operations or both
1760   e.g. chamfer, fillet, round, cut, etc.
1761 
1762 * a cut feature edit.  implementation could be represented as the cube
1763   that bounds a geometry object.  eight points somewhere on the edges
1764   of the cube define an intersection volume on the object.  by
1765   default, the eight points could be positioned at the corners of the
1766   cube and would remain constrained to reside on one of the three
1767   adjoining edges for their respective corner.  this would provide a
1768   simple user interface where a face could be selected to move a cut
1769   plane through an object (moving four points along four edges), or an
1770   edge could be moved to move two points simultaneously, or each
1771   individual point could be moved along their edges to define the
1772   intersection object.  allowing the points to be deconstrained so
1773   they can move into the interior of the bounding volume or into the
1774   interior of a face could be an advanced option.
1775 
1776 * fix the database I/O writing to properly support the addition of new
1777   primitive types.  this includes modifying the major/minor code or
1778   combinations/regions and binary objects
1779 
1780 * add database support for constraints, expressions, parametric
1781   values, construction history, and timestamping.
1782 
1783 * see the CHANGES file for items that have been marked as deprecated
1784   or available to be removed as obsolete items.
1785 
1786 * make struct rt_functab's ft_label bigger and/or dynamic (e.g. vls)
1787 
1788 * remove the storage of the never-implemented keypoint parameter for
1789   extrude objects.
1790 
1791 * have all primitives record a transformation matrix so that they may
1792   retain a local coordinate system even after pushed matrices.  this
1793   also will allow primitives like the torus to support non-uniform
1794   scaling.
1795 
1796 * rename 'part' primitive to 'pill' or remove it entirely in favor of
1797   a more generalized metaprimitive primitive.
1798 
1799 * binary objects need to write out their minor type during export, not
1800   relying on the raw wrapper to encode it, so that proper
1801   import/export can be performed without relying on minor_type hacks
1802   in the API.
1803 
1804 * implement support for binary attributes.  the idea is to allow
1805   arrays of {u,s}int{8,16,32,64}, float, double, and strings, typed as
1806   such when written out to storage.  this idea overlaps with what
1807   binunif objects provide, so need to reconcile and consolidate into
1808   one attribute object entity that can do everything a binunif can do,
1809   then allow attributes on objects to provide that same flexibility.
1810 
1811 * change format of related programs (especially filters) so the
1812   input/output files are handled identically. two examples of
1813   different handling:
1814 
1815     png-pix   file.png > file.pix
1816     pix-bw  < file.pix > file.bw
1817 
1818   (desired style to be determined)
1819 
1820 FUNCTIONALITY NEEDED TO SPEED UP RAYTRACING
1821 -------------------------------------------
1822 
1823 * merge shot and vshot
1824 
1825 * implement bundles shot - array of rays
1826 
1827 * separate ray structs - make fit in cache line
1828 
1829 * refactor primitive data -  make fit in cache line
1830 
1831 * implement SIMD shots
1832 
1833 * implement SAH for all primitives (routine that fires a ray at each
1834   primitive for initial estimate, caches result)
1835 
1836 * write and use kdtree - make traversal cache coherent
1837 
1838 
1839 DOCUMENTATION
1840 -------------
1841 
1842 * BRL-CAD Overview Diagram
1843         Completed, but not integrated
1844 
1845 * BRL-CAD Industry Diagram
1846         Completed, but not integrated
1847 
1848 * BRL-CAD Commands Quick Reference
1849         Partial
1850 
1851 * MGED Quick Reference
1852         Completed, but not integrated
1853 
1854 * MGED Interface Reference
1855         Keybindings, GUI elements, scripting
1856 
1857 * Introduction to BRL-CAD Tutorial
1858         mged, rt, pix-png, rtcheck, rtarea, rtweight, g_qa, fbserv,
1859         nirt.  Succinct overview of less than 10% of the core
1860         functionality in 10 pages or less (plus pictures).
1861 
1862 * Technical Overview of BRL-CAD
1863         Describes everything in the package succinctly yet
1864         comprehensively.  Survey of all the major features,
1865         methodologies, and tools implemented in BRL-CAD with coverage
1866         on code maturity, library encapsulation, and tool aggregation.
1867 
1868 * BRL-CAD Validation and Verification
1869         Overview of how contributions to BRL-CAD are reviewed and
1870         tested including regression, performance, and system
1871         integration testing as well as independent ARL configuration
1872         review.  This specifically addresses the issue of world-wide
1873         and potentially anonymous contributions to BRL-CAD and how
1874         those changes are managed.
1875 
1876 * DoD V/L M&S Industry Diagram
1877         Similar to existing Industry Diagram.  Survey of all the major
1878         features, methodologies, and tools implemented in BRL-CAD with
1879         coverage on code maturity, library encapsulation, and tool
1880         aggregation.  This one is a particularly useful marketing and
1881         educational visual aid for describing how the various M&S
1882         codes interoperate in terms of features and scope.
1883 
1884 * Commercial CAD Comparison Diagram
1885         Comparison of how BRL-CAD overlaps feature-wise with various
1886         major commercial CAD systems.
1887 
1888 * Solid Geometry Representation Comparisons
1889         Describe the implications, tradeoffs, and conversion issues
1890         involved when converting between different geometry
1891         representations.  Includes describing implicit geometry,
1892         explicit polygonal boundary representations, explicit spline
1893         surface representations, volumetric models, wireframes,
1894         boolean operations, feature edit operations, and parametric
1895         modeling.
1896 
1897 * BRL-CAD Primitives
1898         An overview of the various primitive object types in BRL-CAD,
1899         their range of features, and a description of their input
1900         parameters.
1901 
1902 * BRL-CAD Ray Tracing Shaders
1903         An overview of the various shaders and shader options
1904         available in BRL-CAD.
1905 
1906 * BRL-CAD Open Source
1907         An overview of how BRL-CAD is organized as an open source
1908         project and community describing the developer meritocracy,
1909         code reviews, development prioritization, and change
1910         management.  This introduces and explains the concept and
1911         philosophy of open source software, its fundamental tenants,
1912         and the basic "why and how" it works.
1913 
1914 * History of BRL-CAD
1915         Covers the 30-years development history of BRL-CAD, from 1979
1916         to 2009, documenting the origins of the project, major
1917         development achievements, the conversion to open source, and
1918         lesson's learned.
1919 
1920 * BRL-CAD Manifesto
1921         Vision & Scope
1922 
1923 * BRL-CAD Taxonomy
1924         Description of the common terminology used throughout BRL-CAD,
1925         conventions employed, and tool categorization.
1926 
1927 * Implementing a BRL-CAD Primitive
1928         How-To for creating a new primitive in BRL-CAD that can be
1929         ray-traced, tessellated, plotted, and transformed seamlessly.
1930 
1931 * Procedural Geometry in BRL-CAD
1932         How-To for creating new tools that create geometry.
1933 
1934 * BRL-CAD Ray Tracing Shader Development
1935         How-To for creating new shaders.
1936 
1937 * Geometry Conversion with BRL-CAD
1938         Overview of the various geometry conversion facilities in
1939         BRL-CAD and how they related to solid geometry
1940         representations.
1941 
1942 * A Developer's Introduction to BRL-CAD
1943         An overview of BRL-CAD from a developer perspective intended
1944         for new developers.  Provides overview of structure, important
1945         sections, operating procedures, and answers to FAQ development
1946         questions.
1947 
1948 ---
1949 See the feature request and bug trackers for more tasks and future
1950 planning efforts: https://sourceforge.net/tracker/?group_id=105292
1951 
1952 TODO items should be formatted to column 70 (M-q in emacs), no tabs.

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.